feat: 灾毁
This commit is contained in:
parent
4ae4f080ca
commit
f4d8e2a104
@ -29,9 +29,21 @@
|
|||||||
<!-- 起点桩号 (event.startStakeNo) -->
|
<!-- 起点桩号 (event.startStakeNo) -->
|
||||||
<van-field v-model="formData.event.startStakeNo" label="起点桩号(K)" placeholder="请填写" />
|
<van-field v-model="formData.event.startStakeNo" label="起点桩号(K)" placeholder="请填写" />
|
||||||
|
|
||||||
|
<!-- 起点桩经度 -->
|
||||||
|
<van-field v-model="formData.event.startStakeLng" label="起点桩经度" placeholder="请填写" type="digit" />
|
||||||
|
|
||||||
|
<!-- 起点桩纬度 -->
|
||||||
|
<van-field v-model="formData.event.startStakeLat" label="起点桩纬度" placeholder="请填写" type="digit" />
|
||||||
|
|
||||||
<!-- 止点桩号 (event.endStakeNo) -->
|
<!-- 止点桩号 (event.endStakeNo) -->
|
||||||
<van-field v-model="formData.event.endStakeNo" label="止点桩号(K)" placeholder="请填写" />
|
<van-field v-model="formData.event.endStakeNo" label="止点桩号(K)" placeholder="请填写" />
|
||||||
|
|
||||||
|
<!-- 止点桩经度 -->
|
||||||
|
<van-field v-model="formData.event.endStakeLng" label="止点桩经度" placeholder="请填写" type="digit" />
|
||||||
|
|
||||||
|
<!-- 止点桩纬度 -->
|
||||||
|
<van-field v-model="formData.event.endStakeLat" label="止点桩纬度" placeholder="请填写" type="digit" />
|
||||||
|
|
||||||
<!-- 受灾里程 (event.disasterMileage) -->
|
<!-- 受灾里程 (event.disasterMileage) -->
|
||||||
<van-field
|
<van-field
|
||||||
v-model="formData.event.disasterMileage"
|
v-model="formData.event.disasterMileage"
|
||||||
@ -127,6 +139,8 @@
|
|||||||
placeholder="请填写"
|
placeholder="请填写"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<van-field v-model="formData.report.siteDescription" label="现场描述" placeholder="请填写" type="textarea" rows="2" autosize />
|
||||||
|
|
||||||
<BaseDatePicker
|
<BaseDatePicker
|
||||||
v-model="formData.report.actualRecoverTime"
|
v-model="formData.report.actualRecoverTime"
|
||||||
label="实际恢复时间"
|
label="实际恢复时间"
|
||||||
@ -152,15 +166,18 @@ import BasePicker from '@/components/BasePicker.vue';
|
|||||||
import BaseDatePicker from '@/components/BaseDatePicker.vue';
|
import BaseDatePicker from '@/components/BaseDatePicker.vue';
|
||||||
import RoadRoutesPicker from '../components/RoadRoutesPicker.vue';
|
import RoadRoutesPicker from '../components/RoadRoutesPicker.vue';
|
||||||
import MaterialPicker from '../components/MaterialPicker.vue';
|
import MaterialPicker from '../components/MaterialPicker.vue';
|
||||||
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, showSuccessToast } from 'vant';
|
import { showToast, showFailToast, showLoadingToast, showSuccessToast } from 'vant';
|
||||||
|
import { useRouter, useRoute } from 'vue-router'
|
||||||
import { formatDate } from '@shared/utils';
|
import { formatDate } from '@shared/utils';
|
||||||
|
import { useYHZStore } from '@/stores/yhzStore';
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute()
|
||||||
|
const router = useRouter()
|
||||||
const { options } = useOptions();
|
const { options } = useOptions();
|
||||||
|
const yhzStore = useYHZStore();
|
||||||
|
|
||||||
// 是否为续报
|
// 是否为续报
|
||||||
const isContinue = computed(() => route.query.isContinue);
|
const isContinue = computed(() => route.query.isContinue);
|
||||||
@ -169,7 +186,14 @@ const minDate = new Date();
|
|||||||
const maxDate = new Date(2050, 11, 31);
|
const maxDate = new Date(2050, 11, 31);
|
||||||
|
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
event: {},
|
event: {
|
||||||
|
startStakeNo: '',
|
||||||
|
startStakeLng: '',
|
||||||
|
startStakeLat: '',
|
||||||
|
endStakeNo: '',
|
||||||
|
endStakeLng: '',
|
||||||
|
endStakeLat: '',
|
||||||
|
},
|
||||||
report: {},
|
report: {},
|
||||||
fileList: [],
|
fileList: [],
|
||||||
yhzMaterialList: [],
|
yhzMaterialList: [],
|
||||||
@ -205,17 +229,17 @@ const parsePointValue = point => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleRouteNoChange = (item = {}) => {
|
const handleRouteNoChange = (item = {}) => {
|
||||||
formData.event.routeNo = item.routeCode;
|
formData.value.event.routeNo = item.routeCode;
|
||||||
formData.event.startStakeNo = item.startStakeNo;
|
formData.value.event.startStakeNo = item.startStakeNo;
|
||||||
formData.event.endStakeNo = item.endStakeNo;
|
formData.value.event.endStakeNo = item.endStakeNo;
|
||||||
|
|
||||||
const startPoint = parsePointValue(item.startPoint ?? item.startpoint);
|
const startPoint = parsePointValue(item.startPoint ?? item.startpoint);
|
||||||
const endPoint = parsePointValue(item.endPoint ?? item.endpoint);
|
const endPoint = parsePointValue(item.endPoint ?? item.endpoint);
|
||||||
|
|
||||||
formData.event.startStakeLng = startPoint.longitude;
|
formData.value.event.startStakeLng = startPoint.longitude;
|
||||||
formData.event.startStakeLat = startPoint.latitude;
|
formData.value.event.startStakeLat = startPoint.latitude;
|
||||||
formData.event.endStakeLng = endPoint.longitude;
|
formData.value.event.endStakeLng = endPoint.longitude;
|
||||||
formData.event.endStakeLat = endPoint.latitude;
|
formData.value.event.endStakeLat = endPoint.latitude;
|
||||||
};
|
};
|
||||||
|
|
||||||
const calibrateTime = isShowToast => {
|
const calibrateTime = isShowToast => {
|
||||||
@ -239,18 +263,22 @@ const handleSubmit = async () => {
|
|||||||
...formData.value,
|
...formData.value,
|
||||||
// 可以在这里添加站点信息等其他数据
|
// 可以在这里添加站点信息等其他数据
|
||||||
};
|
};
|
||||||
|
submitData.event.serviceStationId = yhzStore.getYHZInfo?.id
|
||||||
|
submitData.event.serviceStationName = yhzStore.getYHZInfo?.mc
|
||||||
|
|
||||||
let apiUrl = formData.id ? '/snow-ops-platform/event/dispose' : '/snow-ops-platform/event/report'
|
let apiUrl = formData.value.event?.id ? '/snow-ops-platform/event/dispose' : '/snow-ops-platform/event/report'
|
||||||
|
if(formData.value.event?.id && formData.report.disposalMeasures == '正常通行') {
|
||||||
|
api = '/snow-ops-platform/event/release'
|
||||||
|
}
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: apiUrl,
|
url: apiUrl,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data: submitData,
|
data: submitData,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res?.code === '00000') {
|
if (res?.code === '00000') {
|
||||||
showSuccessToast('提交成功');
|
showSuccessToast('提交成功');
|
||||||
let isRebuilded = false;
|
let isRebuilded = false;
|
||||||
if (isContinue && detail.value.event.needsRecovery) {
|
if (isContinue.value && detail.value.event.needsRecovery) {
|
||||||
// 如果之前已经进行了项目重建的流程,后续不再进行该流程
|
// 如果之前已经进行了项目重建的流程,后续不再进行该流程
|
||||||
isRebuilded = true;
|
isRebuilded = true;
|
||||||
}
|
}
|
||||||
@ -264,7 +292,7 @@ const handleSubmit = async () => {
|
|||||||
} else {
|
} else {
|
||||||
// 提交成功后返回列表页
|
// 提交成功后返回列表页
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (isContinue) router.go(-1);
|
if (isContinue.value) router.go(-1);
|
||||||
else router.replace('/disasterManagement');
|
else router.replace('/disasterManagement');
|
||||||
}, 500);
|
}, 500);
|
||||||
}
|
}
|
||||||
@ -278,7 +306,7 @@ const handleSubmit = async () => {
|
|||||||
submitting.value = false;
|
submitting.value = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const detailData = ref(null);
|
const detail = ref(null);
|
||||||
const getDisasterDetail = async () => {
|
const getDisasterDetail = async () => {
|
||||||
const id = route.query.id;
|
const id = route.query.id;
|
||||||
if (!id) {
|
if (!id) {
|
||||||
@ -301,7 +329,7 @@ const getDisasterDetail = async () => {
|
|||||||
data.report = {};
|
data.report = {};
|
||||||
data.yhzMaterialList = [];
|
data.yhzMaterialList = [];
|
||||||
data.fileList = [];
|
data.fileList = [];
|
||||||
detailData.value = data;
|
detail.value = data;
|
||||||
formData.value = data;
|
formData.value = data;
|
||||||
} else {
|
} else {
|
||||||
ElMessage.warning(result.message || '获取详情失败');
|
ElMessage.warning(result.message || '获取详情失败');
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<PageContainer title="冰毁详情" @click-back="handleClickBack" class="page-container">
|
<PageContainer title="冰毁详情" @click-back="handleClickBack" class="page-container" :class="{ ['is-release'] : isRelease()}">
|
||||||
<!-- 当前站点信息 -->
|
<!-- 当前站点信息 -->
|
||||||
<CurrentSite />
|
<CurrentSite />
|
||||||
|
|
||||||
@ -136,7 +136,7 @@
|
|||||||
</PanelItem>
|
</PanelItem>
|
||||||
|
|
||||||
<!-- 底部按钮:未解除状态显示续报按钮 -->
|
<!-- 底部按钮:未解除状态显示续报按钮 -->
|
||||||
<div class="footer-buttons" v-if="!loading">
|
<div class="footer-buttons" v-if="!loading && !isRelease()">
|
||||||
<van-button type="primary" class="footer-btn" @click="handleContinueReport">续报</van-button>
|
<van-button type="primary" class="footer-btn" @click="handleContinueReport">续报</van-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -196,12 +196,12 @@ const hasReportData = computed(() => {
|
|||||||
|
|
||||||
// 获取事件状态文本
|
// 获取事件状态文本
|
||||||
const getEventStatusText = () => {
|
const getEventStatusText = () => {
|
||||||
return detailData.eventStatus === 1 ? '已解除' : '未解除';
|
return isRelease() ? '已解除' : '未解除';
|
||||||
};
|
};
|
||||||
|
|
||||||
// 获取事件状态类型
|
// 获取事件状态类型
|
||||||
const getEventStatusType = () => {
|
const getEventStatusType = () => {
|
||||||
return detailData.eventStatus === 1 ? 'success' : 'danger';
|
return isRelease() ? 'success' : 'danger';
|
||||||
};
|
};
|
||||||
|
|
||||||
// 格式化处置措施(逗号分隔转中文)
|
// 格式化处置措施(逗号分隔转中文)
|
||||||
@ -226,6 +226,11 @@ const getVehicleStrandedText = report => {
|
|||||||
return count > 0 ? `有车滞留` : '无车滞留';
|
return count > 0 ? `有车滞留` : '无车滞留';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 是否解除
|
||||||
|
const isRelease = () => {
|
||||||
|
return detailData.value.report?.some(item => item.reportType == 3)
|
||||||
|
}
|
||||||
|
|
||||||
// 获取灾毁详情
|
// 获取灾毁详情
|
||||||
const getDisasterDetail = async () => {
|
const getDisasterDetail = async () => {
|
||||||
const id = route.query.id;
|
const id = route.query.id;
|
||||||
@ -308,6 +313,10 @@ onMounted(() => {
|
|||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.page-container {
|
.page-container {
|
||||||
padding-bottom: 80px;
|
padding-bottom: 80px;
|
||||||
|
|
||||||
|
&.is-release {
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-wrapper {
|
.status-wrapper {
|
||||||
|
|||||||
@ -35,9 +35,21 @@
|
|||||||
<!-- 起点桩号 (event.startStakeNo) -->
|
<!-- 起点桩号 (event.startStakeNo) -->
|
||||||
<van-field v-model="formData.event.startStakeNo" label="起点桩号(K)" placeholder="请填写" />
|
<van-field v-model="formData.event.startStakeNo" label="起点桩号(K)" placeholder="请填写" />
|
||||||
|
|
||||||
|
<!-- 起点桩经度 -->
|
||||||
|
<van-field v-model="formData.event.startStakeLng" label="起点桩经度" placeholder="请填写" type="digit" />
|
||||||
|
|
||||||
|
<!-- 起点桩纬度 -->
|
||||||
|
<van-field v-model="formData.event.startStakeLat" label="起点桩纬度" placeholder="请填写" type="digit" />
|
||||||
|
|
||||||
<!-- 止点桩号 (event.endStakeNo) -->
|
<!-- 止点桩号 (event.endStakeNo) -->
|
||||||
<van-field v-model="formData.event.endStakeNo" label="止点桩号(K)" placeholder="请填写" />
|
<van-field v-model="formData.event.endStakeNo" label="止点桩号(K)" placeholder="请填写" />
|
||||||
|
|
||||||
|
<!-- 止点桩经度 -->
|
||||||
|
<van-field v-model="formData.event.endStakeLng" label="止点桩经度" placeholder="请填写" type="digit" />
|
||||||
|
|
||||||
|
<!-- 止点桩纬度 -->
|
||||||
|
<van-field v-model="formData.event.endStakeLat" label="止点桩纬度" placeholder="请填写" type="digit" />
|
||||||
|
|
||||||
<!-- 路况位置 (occurLocation) -->
|
<!-- 路况位置 (occurLocation) -->
|
||||||
<van-field v-model="formData.event.occurLocation" label="路况位置" placeholder="请填写" />
|
<van-field v-model="formData.event.occurLocation" label="路况位置" placeholder="请填写" />
|
||||||
|
|
||||||
@ -160,16 +172,26 @@ 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'
|
import { formatDate } from '@shared/utils'
|
||||||
|
import { useYHZStore } from '@/stores/yhzStore';
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
const router = useRouter()
|
||||||
const { options } = useOptions()
|
const { options } = useOptions()
|
||||||
|
const yhzStore = useYHZStore();
|
||||||
// 是否为续报
|
// 是否为续报
|
||||||
const isContinue = computed(() => route.query.isContinue)
|
const isContinue = computed(() => route.query.isContinue)
|
||||||
|
|
||||||
// 表单数据 - 按 Request 接口结构定义,使用 ref 包装
|
// 表单数据 - 按 Request 接口结构定义,使用 ref 包装
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
// event 对象
|
// event 对象
|
||||||
event: {},
|
event: {
|
||||||
|
startStakeNo: '',
|
||||||
|
startStakeLng: '',
|
||||||
|
startStakeLat: '',
|
||||||
|
endStakeNo: '',
|
||||||
|
endStakeLng: '',
|
||||||
|
endStakeLat: ''
|
||||||
|
},
|
||||||
|
|
||||||
// report 对象
|
// report 对象
|
||||||
report: {},
|
report: {},
|
||||||
@ -331,7 +353,14 @@ const handleSubmit = async () => {
|
|||||||
...formData
|
...formData
|
||||||
// 可以在这里添加站点信息等其他数据
|
// 可以在这里添加站点信息等其他数据
|
||||||
}
|
}
|
||||||
let apiUrl = formData.id ? '/snow-ops-platform/water-damage/dispose' : '/snow-ops-platform/water-damage/report'
|
submitData.event.serviceStationId = yhzStore.getYHZInfo?.id
|
||||||
|
submitData.event.serviceStationName = yhzStore.getYHZInfo?.mc
|
||||||
|
|
||||||
|
// 调用接口提交数据
|
||||||
|
let apiUrl = formData.value.event?.id ? '/snow-ops-platform/water-damage/dispose' : '/snow-ops-platform/water-damage/report'
|
||||||
|
if(formData.value.event?.id && formData.report.disposalMeasures == '正常通行') {
|
||||||
|
api = '/snow-ops-platform/water-damage/release'
|
||||||
|
}
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: apiUrl,
|
url: apiUrl,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
@ -341,7 +370,7 @@ const handleSubmit = async () => {
|
|||||||
if (res?.code === '00000') {
|
if (res?.code === '00000') {
|
||||||
showSuccessToast('提交成功')
|
showSuccessToast('提交成功')
|
||||||
let isRebuilded = false
|
let isRebuilded = false
|
||||||
if (isContinue && detail.value.event.needsRecovery) {
|
if (isContinue.value && detail.value.event.needsRecovery) {
|
||||||
// 如果之前已经进行了项目重建的流程,后续不再进行该流程
|
// 如果之前已经进行了项目重建的流程,后续不再进行该流程
|
||||||
isRebuilded = true
|
isRebuilded = true
|
||||||
}
|
}
|
||||||
@ -355,7 +384,7 @@ const handleSubmit = async () => {
|
|||||||
} else {
|
} else {
|
||||||
// 提交成功后返回列表页
|
// 提交成功后返回列表页
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if(isContinue) router.go(-1)
|
if(isContinue.value) router.go(-1)
|
||||||
else router.replace('/disasterManagement')
|
else router.replace('/disasterManagement')
|
||||||
}, 500)
|
}, 500)
|
||||||
}
|
}
|
||||||
@ -392,9 +421,9 @@ const getDisasterDetail = async () => {
|
|||||||
detail.value = result.data
|
detail.value = result.data
|
||||||
const newFormData = {
|
const newFormData = {
|
||||||
...data,
|
...data,
|
||||||
lossList: null,
|
lossList: [],
|
||||||
report: {},
|
report: {},
|
||||||
fileList: null
|
fileList: []
|
||||||
}
|
}
|
||||||
initFormData(newFormData)
|
initFormData(newFormData)
|
||||||
} else {
|
} else {
|
||||||
@ -408,7 +437,6 @@ const getDisasterDetail = async () => {
|
|||||||
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
console.log(formData.value)
|
|
||||||
formData.value.event.occurTime = formatDate(Date.now())
|
formData.value.event.occurTime = formatDate(Date.now())
|
||||||
if (route.query.id) {
|
if (route.query.id) {
|
||||||
getDisasterDetail()
|
getDisasterDetail()
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<PageContainer title="水毁详情" @click-back="handleClickBack" class="page-container">
|
<PageContainer title="水毁详情" @click-back="handleClickBack" class="page-container" :class="{ ['is-release'] : isRelease()}">
|
||||||
<!-- 当前站点信息 -->
|
<!-- 当前站点信息 -->
|
||||||
<CurrentSite />
|
<CurrentSite />
|
||||||
|
|
||||||
@ -160,7 +160,7 @@
|
|||||||
<span class="info-label">有无车辆滞留:</span>
|
<span class="info-label">有无车辆滞留:</span>
|
||||||
<span class="info-value">{{ getVehicleStrandedText(report) }}</span>
|
<span class="info-value">{{ getVehicleStrandedText(report) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-row">
|
<div class="info-row" v-if="report.hasStrandedVehicles">
|
||||||
<span class="info-label">滞留车辆:</span>
|
<span class="info-label">滞留车辆:</span>
|
||||||
<span class="info-value">{{ report.strandedVehicleCount || 0 }}辆</span>
|
<span class="info-value">{{ report.strandedVehicleCount || 0 }}辆</span>
|
||||||
</div>
|
</div>
|
||||||
@ -200,7 +200,7 @@
|
|||||||
</PanelItem>
|
</PanelItem>
|
||||||
|
|
||||||
<!-- 底部按钮:未解除状态显示续报按钮 -->
|
<!-- 底部按钮:未解除状态显示续报按钮 -->
|
||||||
<div class="footer-buttons" v-if="!loading">
|
<div class="footer-buttons" v-if="!loading && !isRelease()">
|
||||||
<van-button type="primary" class="footer-btn" @click="handleContinueReport">续报</van-button>
|
<van-button type="primary" class="footer-btn" @click="handleContinueReport">续报</van-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -249,6 +249,11 @@ const allReports = computed(() => {
|
|||||||
// return reports.reverse()
|
// return reports.reverse()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 是否解除
|
||||||
|
const isRelease = () => {
|
||||||
|
return detailData.value.report?.some(item => item.reportType == 3)
|
||||||
|
}
|
||||||
|
|
||||||
// 是否有填报数据
|
// 是否有填报数据
|
||||||
const hasReportData = computed(() => {
|
const hasReportData = computed(() => {
|
||||||
return allReports.value.length > 0
|
return allReports.value.length > 0
|
||||||
@ -256,12 +261,12 @@ const hasReportData = computed(() => {
|
|||||||
|
|
||||||
// 获取事件状态文本
|
// 获取事件状态文本
|
||||||
const getEventStatusText = () => {
|
const getEventStatusText = () => {
|
||||||
return detailData.eventStatus === 1 ? '已解除' : '未解除'
|
return isRelease() ? '已解除' : '未解除'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取事件状态类型
|
// 获取事件状态类型
|
||||||
const getEventStatusType = () => {
|
const getEventStatusType = () => {
|
||||||
return detailData.eventStatus === 1 ? 'success' : 'danger'
|
return isRelease() ? 'success' : 'danger'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 格式化处置措施(逗号分隔转中文)
|
// 格式化处置措施(逗号分隔转中文)
|
||||||
@ -374,6 +379,7 @@ const previewFile = (report, file) => {
|
|||||||
previewImagesVisible.value = true
|
previewImagesVisible.value = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getDisasterDetail()
|
getDisasterDetail()
|
||||||
})
|
})
|
||||||
@ -382,6 +388,10 @@ onMounted(() => {
|
|||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.page-container {
|
.page-container {
|
||||||
padding-bottom: 80px;
|
padding-bottom: 80px;
|
||||||
|
|
||||||
|
&.is-release {
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-wrapper {
|
.status-wrapper {
|
||||||
|
|||||||
@ -134,7 +134,7 @@
|
|||||||
<el-table-column label="操作" width="100" fixed="right" align="center">
|
<el-table-column label="操作" width="100" fixed="right" align="center">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-button link type="primary" size="small" @click="handleDetail(row)">详情</el-button>
|
<el-button link type="primary" size="small" @click="handleDetail(row)">详情</el-button>
|
||||||
<el-button link type="warning" size="small" @click="handleEdit(row)">编辑</el-button>
|
<el-button link type="warning" size="small" v-if="row.eventStatus == 0" @click="handleEdit(row)">编辑</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|||||||
@ -65,7 +65,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="滞留车辆">
|
<el-form-item label="滞留车辆" v-if="formData.report.hasStrandedVehicles">
|
||||||
<NumberInput v-model="formData.report.strandedVehicleCount" :precision="0" placeholder="请填写" style="width: 300px">
|
<NumberInput v-model="formData.report.strandedVehicleCount" :precision="0" placeholder="请填写" style="width: 300px">
|
||||||
<template #append>辆</template>
|
<template #append>辆</template>
|
||||||
</NumberInput>
|
</NumberInput>
|
||||||
@ -84,7 +84,8 @@
|
|||||||
</BlockItem>
|
</BlockItem>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" @click="handleSubmit">追加记录</el-button>
|
<el-button type="primary" @click="handleAddSubmit">追加记录</el-button>
|
||||||
|
<el-button type="primary" @click="handleCompleteSubmit">解除事件</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -100,6 +101,7 @@ import FileUpload from '@/component/FileUpload/FileUpload.vue'
|
|||||||
import NumberInput from '@/component/NumberInput/NumberInput.vue'
|
import NumberInput from '@/component/NumberInput/NumberInput.vue'
|
||||||
import MaterialList from '../components/MaterialList.vue'
|
import MaterialList from '../components/MaterialList.vue'
|
||||||
import { useOptions } from '@shared/composables/useOptions'
|
import { useOptions } from '@shared/composables/useOptions'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
value: {
|
value: {
|
||||||
@ -111,7 +113,7 @@ const props = defineProps({
|
|||||||
const emit = defineEmits(['refresh'])
|
const emit = defineEmits(['refresh'])
|
||||||
|
|
||||||
const { options } = useOptions()
|
const { options } = useOptions()
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
const formData = ref({})
|
const formData = ref({})
|
||||||
|
|
||||||
@ -164,7 +166,7 @@ const calibrateTime = () => {
|
|||||||
const day = String(now.getDate()).padStart(2, '0')
|
const day = String(now.getDate()).padStart(2, '0')
|
||||||
const hours = String(now.getHours()).padStart(2, '0')
|
const hours = String(now.getHours()).padStart(2, '0')
|
||||||
const minutes = String(now.getMinutes()).padStart(2, '0')
|
const minutes = String(now.getMinutes()).padStart(2, '0')
|
||||||
formData.value.event?.occurTime = `${year}-${month}-${day} ${hours}:${minutes}`
|
formData.value.event.occurTime = `${year}-${month}-${day} ${hours}:${minutes}`
|
||||||
ElMessage.success('时间已校准为当前时间')
|
ElMessage.success('时间已校准为当前时间')
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +176,7 @@ const handleHasStrandedVehiclesChange = (value) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSubmit = async () => {
|
const handleAddSubmit = async () => {
|
||||||
if (!validate()) {
|
if (!validate()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -198,6 +200,24 @@ const handleSubmit = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleCompleteSubmit = async () => {
|
||||||
|
const res = await request({
|
||||||
|
url: '/snow-ops-platform/event/release',
|
||||||
|
method: 'post',
|
||||||
|
data: {
|
||||||
|
...formData.value
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (res?.code === '00000') {
|
||||||
|
ElMessage.success('提交成功')
|
||||||
|
setTimeout(()=>{
|
||||||
|
router.replace({ path: '/iceDisasterDetail', query: { id: formData.value.event.id } })
|
||||||
|
}, 500)
|
||||||
|
} else {
|
||||||
|
ElMessage.error(res.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defineExpose({
|
defineExpose({
|
||||||
validate,
|
validate,
|
||||||
initFormData,
|
initFormData,
|
||||||
|
|||||||
@ -60,6 +60,14 @@
|
|||||||
<span class="info-label">起点桩号:</span>
|
<span class="info-label">起点桩号:</span>
|
||||||
<span class="info-value">{{ formatStakeNo(detailData.event?.startStakeNo) }}</span>
|
<span class="info-value">{{ formatStakeNo(detailData.event?.startStakeNo) }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="info-item">
|
||||||
|
<span class="info-label">止点桩经度:</span>
|
||||||
|
<span class="info-value">{{ formatValue(detailData.event?.startStakeLng) }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="info-item">
|
||||||
|
<span class="info-label">止点桩纬度:</span>
|
||||||
|
<span class="info-value">{{ formatValue(detailData.event?.startStakeLat ) }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stake-center">
|
<div class="stake-center">
|
||||||
<div class="info-item stake-mileage-item">
|
<div class="info-item stake-mileage-item">
|
||||||
@ -77,12 +85,12 @@
|
|||||||
<span class="info-value">{{ formatStakeNo(detailData.event?.endStakeNo) }}</span>
|
<span class="info-value">{{ formatStakeNo(detailData.event?.endStakeNo) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">纬度:</span>
|
<span class="info-label">止点桩经度:</span>
|
||||||
<span class="info-value">{{ formatValue(detailData.event?.endStakeLat ?? detailData.event?.endStakeLatitude) }}</span>
|
<span class="info-value">{{ formatValue(detailData.event?.endStakeLng) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">经度:</span>
|
<span class="info-label">止点桩纬度:</span>
|
||||||
<span class="info-value">{{ formatValue(detailData.event?.endStakeLng ?? detailData.event?.endStakeLongitude) }}</span>
|
<span class="info-value">{{ formatValue(detailData.event?.endStakeLat ) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -117,11 +125,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">填报人:</span>
|
<span class="info-label">填报人:</span>
|
||||||
<span class="info-value">{{ formatValue(report.reporterName || report.reportUserName || report.createByName) }}</span>
|
<span class="info-value">{{ formatValue(report.reporter) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">联系电话:</span>
|
<span class="info-label">联系电话:</span>
|
||||||
<span class="info-value">{{ formatValue(report.reporterPhone || report.phone || report.reportPhone || report.contactPhone) }}</span>
|
<span class="info-value">{{ formatValue(report.contactPhone) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item" v-for="(item, index) in report.materialUsageList" :key="index">
|
<div class="info-item" v-for="(item, index) in report.materialUsageList" :key="index">
|
||||||
<span class="info-label">{{item.materialName}}:</span>
|
<span class="info-label">{{item.materialName}}:</span>
|
||||||
@ -129,23 +137,23 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">投入资金:</span>
|
<span class="info-label">投入资金:</span>
|
||||||
<span class="info-value">{{ formatUnitValue(report.inputFunds ?? report.material?.inputFunds ?? report.investedFunds, '万元') }}</span>
|
<span class="info-value">{{ formatUnitValue(report.inputFunds , '万元') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">投入人力:</span>
|
<span class="info-label">投入人力:</span>
|
||||||
<span class="info-value">{{ formatUnitValue(report.inputManpower ?? report.material?.inputManpower ?? report.investedManpower, '人次') }}</span>
|
<span class="info-value">{{ formatUnitValue(report.inputManpower , '人次') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">投入设备:</span>
|
<span class="info-label">投入设备:</span>
|
||||||
<span class="info-value">{{ formatUnitValue(report.inputEquipment ?? report.material?.inputEquipment ?? report.investedMachinery, '台') }}</span>
|
<span class="info-value">{{ formatUnitValue(report.inputEquipment , '台') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">有无车辆滞留:</span>
|
<span class="info-label">有无车辆滞留:</span>
|
||||||
<span class="info-value">{{ getHasStrandedVehiclesText(report) }}</span>
|
<span class="info-value">{{ getHasStrandedVehiclesText(report) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item" v-if="report.hasStrandedVehicles">
|
||||||
<span class="info-label">滞留车辆:</span>
|
<span class="info-label">滞留车辆:</span>
|
||||||
<span class="info-value">{{ formatUnitValue(report.strandedVehicleCount ?? report.traffic?.strandedVehicleCount, '辆') }}</span>
|
<span class="info-value">{{ formatUnitValue(report.strandedVehicleCount, '辆') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="info-label">现场情况描述:</span>
|
<span class="info-label">现场情况描述:</span>
|
||||||
@ -241,11 +249,11 @@ const getMaterialUsageText = (item) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getHasStrandedVehiclesText = (report) => {
|
const getHasStrandedVehiclesText = (report) => {
|
||||||
const value = report?.hasStrandedVehicles ?? report?.traffic?.hasStrandedVehicles
|
const value = report?.hasStrandedVehicles
|
||||||
if (value === 1 || value === true || value === '1' || value === '是' || value === '有') return '有'
|
if (value === 1 || value === true || value === '1' || value === '是' || value === '有') return '有'
|
||||||
if (value === 0 || value === false || value === '0' || value === '否' || value === '无') return '无'
|
if (value === 0 || value === false || value === '0' || value === '否' || value === '无') return '无'
|
||||||
|
|
||||||
const count = report?.strandedVehicleCount ?? report?.traffic?.strandedVehicleCount
|
const count = report?.strandedVehicleCount
|
||||||
if (count === null || count === undefined || count === '') return '-'
|
if (count === null || count === undefined || count === '') return '-'
|
||||||
return Number(count) > 0 ? '有' : '无'
|
return Number(count) > 0 ? '有' : '无'
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,13 +16,13 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="联系人员" prop="event.reporterName">
|
<el-form-item label="联系人员" prop="report.contactPerson">
|
||||||
<el-input v-model="formData.event.reporterName" placeholder="请填写" />
|
<el-input v-model="formData.report.contactPerson" placeholder="请填写" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="联系电话" prop="event.reporterPhone">
|
<el-form-item label="联系电话" prop="report.contactPhone">
|
||||||
<el-input v-model="formData.event.reporterPhone" maxlength="11" placeholder="请填写" />
|
<el-input v-model="formData.report.contactPhone" maxlength="11" placeholder="请填写" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -39,7 +39,6 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="填报站点" prop="event.serviceStationId">
|
<el-form-item label="填报站点" prop="event.serviceStationId">
|
||||||
{{ }}
|
|
||||||
<YHZSelect v-model="formData.event.serviceStationId" @change="(item) => formData.event.serviceStationName = item.mc" />
|
<YHZSelect v-model="formData.event.serviceStationId" @change="(item) => formData.event.serviceStationName = item.mc" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@ -213,7 +212,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8" v-if="formData.report.hasStrandedVehicles">
|
||||||
<el-form-item label="滞留车辆" prop="report.strandedVehicleCount">
|
<el-form-item label="滞留车辆" prop="report.strandedVehicleCount">
|
||||||
<NumberInput v-model="formData.report.strandedVehicleCount" :precision="0" placeholder="请填写" style="width: 100%">
|
<NumberInput v-model="formData.report.strandedVehicleCount" :precision="0" placeholder="请填写" style="width: 100%">
|
||||||
<template #append>辆</template>
|
<template #append>辆</template>
|
||||||
|
|||||||
@ -58,8 +58,8 @@ export const useIceDisasterReport = () => {
|
|||||||
const formData = reactive(createDefaultFormData())
|
const formData = reactive(createDefaultFormData())
|
||||||
|
|
||||||
const formRules = {
|
const formRules = {
|
||||||
// 'event.reporterName': [{ required: true, message: '请输入联系人员', trigger: 'blur' }],
|
// 'report.contactPerson': [{ required: true, message: '请输入联系人员', trigger: 'blur' }],
|
||||||
'event.reporterPhone': [
|
'report.contactPhone': [
|
||||||
// { required: true, message: '请输入联系电话', trigger: 'blur' },
|
// { required: true, message: '请输入联系电话', trigger: 'blur' },
|
||||||
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的联系电话', trigger: 'blur' }
|
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的联系电话', trigger: 'blur' }
|
||||||
],
|
],
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user