+
已投入资金:
- {{ report.investedFunds }}
+ {{ report.investedFunds ? report.investedFunds + '万元' : '-'}}
@@ -469,6 +469,10 @@ onMounted(() => {
margin-top: 10px;
}
+ &.margin {
+ margin-top: 10px;
+ }
+
.info-label {
white-space: nowrap;
flex-shrink: 0;
diff --git a/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterLossListDetailPC.vue b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterLossListDetailPC.vue
index aad82ff..8867d1f 100644
--- a/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterLossListDetailPC.vue
+++ b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterLossListDetailPC.vue
@@ -71,7 +71,6 @@ onMounted(async () => {
\ No newline at end of file
diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterLossListPC.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterLossListPC.vue
index cf01934..18a3ad8 100644
--- a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterLossListPC.vue
+++ b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterLossListPC.vue
@@ -1,14 +1,21 @@
-
-
- changeValue(item, event)">
-
- {{ item.unit }}
-
-
-
-
+
+
+
+ changeValue(item, event)">
+
+ {{ item.unit }}
+
+
+
+
+
+
+
+
+
+
@@ -32,9 +39,17 @@ const props = defineProps({
})
const getValue = (config) => {
- const value = props.modelValue.find((v) => v.lossTypeId === config.lossTypeId)
- if (value == null) props.modelValue.push({ ...config })
- return value?.totalAmount || 0
+ const item = getValueItem(config)
+ return item?.totalAmount || 0
+}
+
+const getValueItem = (config) => {
+ let item = props.modelValue.find((v) => v.lossTypeId === config.lossTypeId)
+ if (item == null) {
+ item = { ...config }
+ props.modelValue.push(item)
+ }
+ return item
}
const configs = ref([])
diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReportPC.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReportPC.vue
index d37522d..ff3ec07 100644
--- a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReportPC.vue
+++ b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReportPC.vue
@@ -37,8 +37,7 @@
-
-
+
@@ -46,12 +45,7 @@
-
-
-
-
-
-
+
@@ -59,8 +53,7 @@
-
-
+
@@ -70,19 +63,15 @@
-
-
+
-
-
-
-
-
-
+
+
+
@@ -126,7 +115,7 @@
-
+
@@ -135,20 +124,19 @@
-
+
-
-
+
+
+
+
-
-
-
-
-
+
+
@@ -156,7 +144,7 @@
-
+
@@ -193,15 +181,15 @@
-
-
+
+
-
-
+
+
@@ -213,7 +201,7 @@
-
+
@@ -315,13 +303,6 @@
-
-
-
-
-
-
-
@@ -330,14 +311,13 @@
-
-
+
-
+
@@ -374,9 +354,12 @@ import { request } from '@/utils/request'
import LossList from './WaterDisasterLossListPC.vue'
import BlockItem from '@/component/BlockItem.vue'
import FileUpload from '@/component/FileUpload/FileUpload.vue'
+import { useOptions } from '@shared/composables/useOptions'
+import RoadRoutesSelect from './RoadRoutesSelect.vue'
const router = useRouter()
const route = useRoute()
+const { options, getAreaOptions } = useOptions()
const formRef = ref(null)
const submitting = ref(false)
@@ -392,6 +375,10 @@ const videoFileList = ref([])
const eventType = ref('水毁事件')
+const filterForm = reactive({
+ routeType: ''
+})
+
const formData = reactive({
// 顶层字段
occurLocation: null, // 发生地点/路况位置
@@ -502,14 +489,29 @@ watch(
// 表单校验规则
const formRules = {
+ roadConditionType: [{ required: true, message: '请选择路况类别', trigger: 'change' }],
+ "event.isBlocked": [{ required: true, message: '请选择是否阻断', trigger: 'change' }],
+ "event.repairProgress": [{ required: true, message: '请选择抢险进度', trigger: 'change' }],
+ "report.disposalMeasures": [{ required: true, message: '请选择处置措施', trigger: 'change' }],
+ "event.damageCount": [{ required: true, message: '请输入水毁处数', trigger: 'blur' }],
+ "event.blockedMileage": [{ required: true, message: '请输入阻断里程', trigger: 'blur' }],
occurTime: [{ required: true, message: '请选择发生时间', trigger: 'change' }],
- routeNo: [{ required: true, message: '请输入线路编号', trigger: 'blur' }],
- 'event.reporterUnit': [{ required: true, message: '请输入填报单位', trigger: 'blur' }],
- 'event.contactPerson': [{ required: true, message: '请输入联系人', trigger: 'blur' }],
- 'event.contactPhone': [
- { required: true, message: '请输入联系电话', trigger: 'blur' },
- { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' }
- ]
+ "report.expectRecoverTime": [{ required: true, message: '请输入预计恢复时间', trigger: 'blur' }],
+ "routeNo": [{ required: true, message: '请输入线路编号', trigger: 'blur' }],
+ "event.startStakeNo": [{ required: true, message: '请输入起点桩号', trigger: 'blur' }],
+ "event.endStakeNo": [{ required: true, message: '请输入止点桩号', trigger: 'blur' }],
+ "occurLocation": [{ required: true, message: '请输入路况位置', trigger: 'blur' }],
+ "event.blockedPointName": [{ required: true, message: '请输入阻断点小地名', trigger: 'blur' }],
+ "event.longitude": [{ required: true, message: '请输入经度', trigger: 'blur' }],
+ "event.latitude": [{ required: true, message: '请输入纬度', trigger: 'blur' }],
+ "event.needsRecovery": [{ required: true, message: '请选择是否需要恢复重建', trigger: 'change' }],
+ "event.estimatedRecoveryCost": [{ required: true, message: '请输入恢复重建预估费用', trigger: 'blur' }],
+ // 'event.reporterUnit': [{ required: true, message: '请输入填报单位', trigger: 'blur' }],
+ // 'event.contactPerson': [{ required: true, message: '请输入联系人', trigger: 'blur' }],
+ // 'event.contactPhone': [
+ // { required: true, message: '请输入联系电话', trigger: 'blur' },
+ // { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' }
+ // ]
}
// 图片上传前校验
@@ -561,6 +563,16 @@ const initFormData = (data) => {
Object.assign(formData, data)
}
+
+const handleDistrictChange = () => {
+ formData.routeNo = null
+}
+
+const handleRouteNoChange = (item) => {
+ formData.event.startStakeNo = item.startStakeNo
+ formData.event.endStakeNo = item.endStakeNo
+}
+
// 获取表单数据
const getFormData = () => {
return { ...formData }
@@ -621,8 +633,7 @@ const handleSubmit = async () => {
// 加载编辑数据
const loadEditData = async () => {
-
- if(route.query.mock) {
+ if (route.query.mock) {
initFormData(mockData)
} else {
initFormData({})
@@ -630,6 +641,9 @@ const loadEditData = async () => {
}
onMounted(() => {
+ // 获取区县下拉列表
+ getAreaOptions()
+
loadEditData()
})
diff --git a/packages/shared/composables/useOptions.js b/packages/shared/composables/useOptions.js
new file mode 100644
index 0000000..319148b
--- /dev/null
+++ b/packages/shared/composables/useOptions.js
@@ -0,0 +1,94 @@
+import { ref } from 'vue'
+import { request } from '@shared/utils/request'
+
+// 通用调用接口方法
+const getOptionsByApi = async ({ url, params }) => {
+ const res = await request({
+ url,
+ method: 'get',
+ params,
+ timeout: 60000
+ })
+
+ if (res?.code === '00000') return res.data
+ else {
+ console.error('接口调用失败', res)
+ return []
+ }
+}
+
+// 公用下拉选项
+
+export function useOptions() {
+ const options = ref({})
+
+ // 是否 布尔类型
+ options.value['yesNoBool'] = [
+ { label: '是', value: true },
+ { label: '否', value: false }
+ ]
+
+ // 事件类型
+ options.value['eventType'] = [
+ { label: '水毁事件', value: '水毁事件' },
+ { label: '冰雪事件', value: '冰雪事件' }
+ ]
+
+ // 抢险进度
+ options.value['repairProgress'] = [
+ { label: '未抢险', value: '未抢险' },
+ { label: '抢险中', value: '抢险中' }
+ ]
+
+ // 处理措施
+ options.value['disposalMeasures'] = [
+ { label: '全幅封闭', value: '全幅封闭' },
+ { label: '半幅封闭', value: '半幅封闭' },
+ { label: '正常通行', value: '正常通行' },
+ { label: '限制通行', value: '限制通行' }
+ ]
+
+ // 路线类型
+ options.value['roadType'] = [
+ { label: '国道', value: 'G' },
+ { label: '省道', value: 'S' },
+ { label: '县道', value: 'X' },
+ { label: '乡道', value: 'Y' },
+ { label: '村道', value: 'C' }
+ ]
+
+ // 路况类型
+ options.value['roadConditionType'] = [
+ { label: '山体滑坡', value: '山体滑坡' },
+ { label: '泥石流', value: '泥石流' },
+ { label: '边坡坍塌(上、下)', value: '边坡坍塌(上、下)' },
+ { label: '路基沉降(垮塌)', value: '路基沉降(垮塌)' },
+ { label: '行道树倒塌', value: '行道树倒塌' },
+ { label: '积水', value: '积水' },
+ { label: '其他', value: '其他' }
+ ]
+
+ // 获取区县
+ const getAreaOptions = async (params) => {
+ let list = await getOptionsByApi({
+ url: '/snow-ops-platform/infrastructure-asset/counties',
+ params: {
+ xzdm: params?.xzdm // 区县代码 可选
+ }
+ })
+ list = list.filter((item) => {
+ return !!item.qxmc
+ })
+ options.value['area'] = list.map((item) => {
+ return {
+ label: item.qxmc,
+ value: item.xzdm
+ }
+ })
+ }
+
+ return {
+ options,
+ getAreaOptions,
+ }
+}