feat: H5冰灾续报重构

This commit is contained in:
niedongsheng 2026-04-20 15:07:27 +08:00
parent 037cdda407
commit c850d60368
3 changed files with 45 additions and 34 deletions

View File

@ -35,7 +35,11 @@ const route = useRoute()
// //
const isContinue = computed(() => route.query.isContinue) const isContinue = computed(() => route.query.isContinue)
const title = ref(!isContinue ? '灾毁填报' : '灾毁续报') const title = computed(() => {
const label = route.query.eventType === 'ice' ? '冰毁' : '水毁'
if(!isContinue) return `${label}填报`
return `${label}续报`
})
// //
const eventType = ref(route.query.eventType ? route.query.eventType : 'water') const eventType = ref(route.query.eventType ? route.query.eventType : 'water')

View File

@ -32,9 +32,9 @@
<!-- 止点桩号 (event.endStakeNo) --> <!-- 止点桩号 (event.endStakeNo) -->
<van-field v-model="formData.event.endStakeNo" label="止点桩号(K)" placeholder="请填写" /> <van-field v-model="formData.event.endStakeNo" label="止点桩号(K)" placeholder="请填写" />
<!-- 受灾里程 (event.blockedMileage) --> <!-- 受灾里程 (event.disasterMileage) -->
<van-field <van-field
v-model="formData.event.blockedMileage" v-model="formData.event.disasterMileage"
label="受灾里程" label="受灾里程"
placeholder="请填写" placeholder="请填写"
type="digit" type="digit"
@ -77,19 +77,9 @@
<PanelItem title="实施情况"> <PanelItem title="实施情况">
<van-field <van-field
v-model="formData.report.investedMachinery" v-model="formData.report.inputManpower"
label="投入人力" label="投入人力"
placeholder="请填写" placeholder="请填写"
type="digit"
>
<template #button>
<span class="field-unit">/</span>
</template>
</van-field>
<van-field
v-model="formData.report.investedManpower"
label="投入资金"
placeholder="请填写"
type="number" type="number"
> >
<template #button> <template #button>
@ -97,8 +87,8 @@
</template> </template>
</van-field> </van-field>
<van-field <van-field
v-model="formData.report.investedMachinery" v-model="formData.report.inputFunds"
label="投入设备" label="投入资金"
placeholder="请填写" placeholder="请填写"
type="digit" type="digit"
> >
@ -106,19 +96,29 @@
<span class="field-unit">万元</span> <span class="field-unit">万元</span>
</template> </template>
</van-field> </van-field>
<van-field
v-model="formData.report.inputEquipment"
label="投入设备"
placeholder="请填写"
type="digit"
>
<template #button>
<span class="field-unit">/</span>
</template>
</van-field>
<!-- 物资选择 --> <!-- 物资选择 -->
<MaterialPicker v-model="formData.yhzMaterialList" /> <MaterialPicker v-model="formData.yhzMaterialList" />
<BasePicker <BasePicker
v-model="formData.event.test" v-model="formData.report.hasStrandedVehicles"
:options="options['haveOrNot']" :options="options['haveOrNot']"
label="有无车辆滞留" label="有无车辆滞留"
placeholder="请选择" placeholder="请选择"
/> />
<van-field <van-field
v-if="formData.event.hasStrandedVehicles === 1" v-if="formData.report.hasStrandedVehicles === 1"
v-model="form.event.strandedVehicleCount" v-model="formData.report.strandedVehicleCount"
type="number" type="number"
label="滞留车辆数" label="滞留车辆数"
center center
@ -126,7 +126,7 @@
/> />
<BaseDatePicker <BaseDatePicker
v-model="formData.report.expectRecoverTime" v-model="formData.report.actualRecoverTime"
label="实际恢复时间" label="实际恢复时间"
placeholder="请选择时间" placeholder="请选择时间"
:min-date="minDate" :min-date="minDate"
@ -154,7 +154,8 @@ import { useRoute } from 'vue-router';
import { request } from '@shared/utils/request'; import { request } from '@shared/utils/request';
import { useOptions } from '@shared/composables/useOptions'; import { useOptions } from '@shared/composables/useOptions';
import DisasterFileUpload from '../components/DisasterFileUpload.vue'; import DisasterFileUpload from '../components/DisasterFileUpload.vue';
import { showToast, showFailToast, showLoadingToast } from 'vant'; import { showToast, showFailToast, showLoadingToast, showSuccessToast } from 'vant';
import { formatDate } from '@shared/utils'
const route = useRoute(); const route = useRoute();
const { options } = useOptions(); const { options } = useOptions();
@ -216,12 +217,15 @@ const handleRouteNoChange = (item = {}) => {
}; };
const calibrateTime = isShowToast => { const calibrateTime = isShowToast => {
const now = new Date(); formData.value.occurTime = formatDate(Date.now());
const formatted = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}`;
formData.value.occurTime = formatted;
if (isShowToast) showToast('时间已校准为当前时间'); if (isShowToast) showToast('时间已校准为当前时间');
}; };
const validate = () => {
return true
}
const submitting = ref(false)
const handleSubmit = async () => { const handleSubmit = async () => {
// //
if (!validate()) return; if (!validate()) return;
@ -258,7 +262,8 @@ const handleSubmit = async () => {
} else { } else {
// //
setTimeout(() => { setTimeout(() => {
router.replace('/disasterManagement'); if(isContinue) router.go(-1)
else router.replace('/disasterManagement');
}, 500); }, 500);
} }
} else { } else {
@ -271,7 +276,7 @@ const handleSubmit = async () => {
submitting.value = false; submitting.value = false;
} }
}; };
const detailData = ref(null)
const getDisasterDetail = async () => { const getDisasterDetail = async () => {
const id = route.query.id; const id = route.query.id;
if (!id) { if (!id) {
@ -290,7 +295,12 @@ const getDisasterDetail = async () => {
if (result?.data) { if (result?.data) {
const data = result.data; const data = result.data;
data.reportList = undefined
data.report = {}
data.yhzMaterialList = []
data.fileList = []
detailData.value = data; detailData.value = data;
formData.value = data
} else { } else {
ElMessage.warning(result.message || '获取详情失败'); ElMessage.warning(result.message || '获取详情失败');
} }

View File

@ -163,6 +163,7 @@ import LossList from '../components/LossList.vue'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import { request } from '@shared/utils/request' import { request } from '@shared/utils/request'
import { useOptions } from '@shared/composables/useOptions' import { useOptions } from '@shared/composables/useOptions'
import { formatDate } from '@shared/utils'
const route = useRoute() const route = useRoute()
const { options } = useOptions() const { options } = useOptions()
@ -230,7 +231,7 @@ const initFormData = (newVal) => {
// - // -
formData.value = { formData.value = {
occurLocation: newVal.occurLocation || '', occurLocation: newVal.occurLocation || '',
occurTime: newVal.occurTime || formatTime(), occurTime: newVal.occurTime || formatDate(Date.now()),
roadConditionType: newVal.roadConditionType || '', roadConditionType: newVal.roadConditionType || '',
routeNo: newVal.routeNo || '', routeNo: newVal.routeNo || '',
event: { ...formData.value.event, ...(newVal.event || {}) }, event: { ...formData.value.event, ...(newVal.event || {}) },
@ -413,7 +414,8 @@ const handleSubmit = async () => {
} else { } else {
// //
setTimeout(() => { setTimeout(() => {
router.replace('/disasterManagement') if(isContinue) router.go(-1)
else router.replace('/disasterManagement')
}, 500) }, 500)
} }
} else { } else {
@ -463,14 +465,9 @@ const getDisasterDetail = async () => {
} }
} }
//
const formatTime = (date = new Date()) => {
const pad = (n) => n.toString().padStart(2, '0')
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ` + `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`
}
onMounted(() => { onMounted(() => {
formData.value.occurTime = formatTime() formData.value.occurTime = formatDate(Date.now())
if (route.query.id) { if (route.query.id) {
getDisasterDetail() getDisasterDetail()
} else { } else {