From 28eec7655f5a4df7267fa6ab670732856a2ecb83 Mon Sep 17 00:00:00 2001 From: huangchenhao <123673748@qq.com> Date: Tue, 14 Apr 2026 13:46:07 +0800 Subject: [PATCH 01/12] =?UTF-8?q?feat:=20=E6=B3=95=E8=A7=84=E5=A4=84=20?= =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E5=B8=AE=E6=89=B6=E5=8F=B0=E8=B4=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/screen/src/router/index.js | 20 +- .../LedgerManagement/helpLedger/index.js | 254 ++++++++++++++++++ .../LedgerManagement/helpLedger/index.vue | 81 ++++++ .../district/index.js | 16 +- .../src/views/WarningManagement/law/index.js | 2 +- .../src/views/WarningManagement/law/index.vue | 4 +- 6 files changed, 356 insertions(+), 21 deletions(-) create mode 100644 packages/screen/src/views/LedgerManagement/helpLedger/index.js create mode 100644 packages/screen/src/views/LedgerManagement/helpLedger/index.vue diff --git a/packages/screen/src/router/index.js b/packages/screen/src/router/index.js index dcb4155..112b1a2 100644 --- a/packages/screen/src/router/index.js +++ b/packages/screen/src/router/index.js @@ -170,16 +170,16 @@ const routes = [ } }, // 线下帮扶台账 - 法规处 - // { - // path: '/ledgerManagement3', - // name: 'ledgerManagement3', - // component: () => import('../views/LedgerManagement/index.vue'), - // meta: { - // title: '驻地台账', - // breadcrumb: true, - // parentRoute: 'warningManagement3' - // } - // }, + { + path: '/ledgerManagement3', + name: 'ledgerManagement3', + component: () => import('../views/LedgerManagement/helpLedger/index.vue'), + meta: { + title: '线下帮扶台账', + breadcrumb: true, + parentRoute: 'warningManagement3' + } + }, // 项目管理 - 区县 diff --git a/packages/screen/src/views/LedgerManagement/helpLedger/index.js b/packages/screen/src/views/LedgerManagement/helpLedger/index.js new file mode 100644 index 0000000..301f99c --- /dev/null +++ b/packages/screen/src/views/LedgerManagement/helpLedger/index.js @@ -0,0 +1,254 @@ +import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue"; +import { request } from "@/utils/request"; +import { useRoute, useRouter } from 'vue-router' + +const tableData = ref([]); // 表格数据 + +const modelVisible = ref(false); // 弹窗状态 +const drawerVisible = ref(false); // 抽屉状态 +// 弹窗内容 +const model = reactive({ + title: '', + content: null, + props: {}, + onCancel: null, + onConfirm: null, + width: '', +}); +const form = reactive({ +}); +const INIT_FORM = { + +}; +// 抽屉内容 +const drawer = reactive({ + title: '', + content: null, + props: {}, + onCancel: null, + onConfirm: null, + direction: 'rtl', + size: '50%' +}); +const dialogRef = ref(null); // 弹窗实例 +const drawerRef = ref(null); // 抽屉实例 + +const columns = [ + { + prop: "helpTime", + label: "帮扶时间", + // formatter: (row) => `${row.helpTime || ''} - ${row.helpTimeEnd || ''}`, + }, + { + prop: "helpCounty", + label: "帮扶区县", + }, + { + prop: "helpPerson", + label: "帮扶人员", + }, + { + prop: "helpUnit", + label: "帮扶单位", + }, + { + prop: "helpStatus", + label: "帮扶情况", + }, + { + prop: "attachmentUrl", + label: "附件", + render: (row) => { + if (row.attachmentUrl) { + return h(ElButton, { + text: 'true', + type: 'primary', + onClick: () => downloadAttachment(row.attachmentUrl) + }, '附件下载'); + } else { + return h('span', {}, '---'); + } + } + }, + { + prop: "uploadTime", + label: "上传时间", + }, + { + prop: "remark", + label: "备注", + }, +] + +// 过滤条件 +const filterData = reactive({}) +// 分页 +const pagination = reactive({ + current: 1, + pageSize: 10, + total: 0, + pageSizes: [10, 20, 50], + layout: "prev, pager, next, jumper", + onChange: (page, pageSize) => { + pagination.current = page; + pagination.pageSize = pageSize; + getTableData(filterData); + }, +}); + +// 获取列表 +const getTableData = async (filterData = {}) => { + try { + // 过滤空字符串属性 + const filteredParams = {}; + Object.keys(filterData).forEach(key => { + if (filterData[key] !== '' && filterData[key] != null) { + filteredParams[key] = filterData[key]; + } + }); + const res = await request({ + url: '/snow-ops-platform/fgc-xxbf/list', + method: "GET", + params: { + ...filteredParams, + pageNum: pagination.current, + pageSize: pagination.pageSize, + } + }) + if (res.code === '00000') { + tableData.value = res.data.records + pagination.total = res.data.total + } else { + throw new Error(res.message) + } + } catch (error) { + ElMessage.error(error.message) + console.error('获取列表失败:', error); + } +} + +// 下载附件 +const downloadAttachment = (url) => { + if (!url) { + ElMessage.warning('无附件地址'); + return; + } + // 直接使用 window.open 触发下载 + window.open(url, '_blank'); +} + +// 预警类型选项 +const eventTypeOptions = [ + { label: "全部", value: "" }, + { label: "台风预警", value: "台风预警" }, + { label: "暴雨预警", value: "暴雨预警" }, + { label: "寒潮预警", value: "寒潮预警" }, + { label: "大雾预警", value: "大雾预警" }, + { label: "暴雪预警", value: "暴雪预警" }, + { label: "道路结冰预警", value: "道路结冰预警" }, + { label: "雷电预警", value: "雷电预警" }, + { label: "强对流预警", value: "强对流预警" }, +]; + +// 预警级别选项 +const severityOptions = [ + { label: "全部", value: "" }, + { label: "红色预警", value: "红色预警" }, + { label: "橙色预警", value: "橙色预警" }, + { label: "黄色预警", value: "黄色预警" }, + { label: "蓝色预警", value: "蓝色预警" }, +] + +// 响应情况选项 +const responseOptions = [ + { label: "全部", value: "" }, + { label: "未响应", value: "未响应" }, + { label: "部分响应", value: "部分响应" }, + { label: "全部响应", value: "全部响应" }, +] + + +const downloadFile = async () => { + window.open('/snow-ops-platform/fgc-xxbf/template', '_blank'); +} + +const uploadFile = async (file) => { + if (!file) { + ElMessage.warning('请选择要上传的文件'); + return; + } + + try { + // 创建FormData对象 + const formData = new FormData(); + formData.append('file', file); + + const loading = ElLoading.service({ + lock: true, + text: '操作中', + background: 'rgba(0, 0, 0, 0.7)', + }) + + // 发送POST请求 + const res = await request({ + url: '/snow-ops-platform/fgc-xxbf/upload', + method: 'POST', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' + } + }); + + // 关闭加载提示 + loading.close(); + + if (res.code === '00000') { + ElMessage.success('文件上传成功'); + // 刷新表格数据 + getTableData(filterData); + } else { + throw new Error(res.message || '上传失败'); + } + } catch (error) { + ElMessage.error(error.message || '文件上传失败'); + console.error('文件上传失败:', error); + } +} + + +export default () => { + + onMounted(() => { + getTableData(); + }) + + + watch(filterData, (val) => { + getTableData(filterData); + }, { deep: true }) + + + return { + modelVisible, + model, + drawerVisible, + drawer, + dialogRef, + drawerRef, + + eventTypeOptions, + severityOptions, + responseOptions, + + + tableData, + filterData, + pagination, + columns, + + downloadFile, + uploadFile, + + + } +} \ No newline at end of file diff --git a/packages/screen/src/views/LedgerManagement/helpLedger/index.vue b/packages/screen/src/views/LedgerManagement/helpLedger/index.vue new file mode 100644 index 0000000..544c4bd --- /dev/null +++ b/packages/screen/src/views/LedgerManagement/helpLedger/index.vue @@ -0,0 +1,81 @@ + + + + + \ No newline at end of file diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/district/index.js b/packages/screen/src/views/ProjectManagement_Rebuild/district/index.js index 11b2dcb..6c3269f 100644 --- a/packages/screen/src/views/ProjectManagement_Rebuild/district/index.js +++ b/packages/screen/src/views/ProjectManagement_Rebuild/district/index.js @@ -372,15 +372,15 @@ export default () => { getTableData(); }) -// 新增填报 -const newAdd = () => { - router.push({ - name: 'projectAdd', - params: { - mode: 'add' + // 新增填报 + const newAdd = () => { + router.push({ + name: 'projectAdd', + params: { + mode: 'add' + } + }) } - }) -} watch(filterData, (val) => { diff --git a/packages/screen/src/views/WarningManagement/law/index.js b/packages/screen/src/views/WarningManagement/law/index.js index dd75054..25a8087 100644 --- a/packages/screen/src/views/WarningManagement/law/index.js +++ b/packages/screen/src/views/WarningManagement/law/index.js @@ -213,7 +213,7 @@ export default () => { const router = useRouter(); const gotoLedgerPage = () => { router.push({ - path: '/ledgerManagement2' + path: '/ledgerManagement3' }); }; diff --git a/packages/screen/src/views/WarningManagement/law/index.vue b/packages/screen/src/views/WarningManagement/law/index.vue index 126bc4f..675c1fe 100644 --- a/packages/screen/src/views/WarningManagement/law/index.vue +++ b/packages/screen/src/views/WarningManagement/law/index.vue @@ -13,8 +13,8 @@
生成报告 发布预警 - 上传线下帮扶 - 线下帮扶台账 + + 线下帮扶台账 导出 From 4f060a58284a5f59c6c3a68a8e55ebdbe82fad0f Mon Sep 17 00:00:00 2001 From: huangchenhao <123673748@qq.com> Date: Tue, 14 Apr 2026 14:25:29 +0800 Subject: [PATCH 02/12] =?UTF-8?q?feat:=20=E5=93=8D=E5=BA=94=E9=A2=84?= =?UTF-8?q?=E8=AD=A6=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/src/views/WarningManagement/construction/index.js | 1 + packages/screen/src/views/WarningManagement/district/index.js | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/screen/src/views/WarningManagement/construction/index.js b/packages/screen/src/views/WarningManagement/construction/index.js index 20722f8..9247424 100644 --- a/packages/screen/src/views/WarningManagement/construction/index.js +++ b/packages/screen/src/views/WarningManagement/construction/index.js @@ -128,6 +128,7 @@ const getTableData = async (filterData = {}) => { ...filteredParams, pageNum: pagination.current, pageSize: pagination.pageSize, + ledgerType: 1, // 1-建设处,2-区县 } }) if (res.code === '00000') { diff --git a/packages/screen/src/views/WarningManagement/district/index.js b/packages/screen/src/views/WarningManagement/district/index.js index dd75054..b482cbf 100644 --- a/packages/screen/src/views/WarningManagement/district/index.js +++ b/packages/screen/src/views/WarningManagement/district/index.js @@ -128,6 +128,7 @@ const getTableData = async (filterData = {}) => { ...filteredParams, pageNum: pagination.current, pageSize: pagination.pageSize, + ledgerType: 2, // 1-建设处,2-区县 } }) if (res.code === '00000') { From a0fadb86d91a6f5731b99df75b1a71b3de9969dc Mon Sep 17 00:00:00 2001 From: huangchenhao <123673748@qq.com> Date: Tue, 14 Apr 2026 16:25:16 +0800 Subject: [PATCH 03/12] =?UTF-8?q?feat=EF=BC=9A=E5=93=8D=E5=BA=94=E9=A2=84?= =?UTF-8?q?=E8=AD=A6=20=E6=B3=95=E8=A7=84=E5=A4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WarningManagement/construction/index.vue | 2 + .../WarningManagement/district/index.vue | 1 + .../views/WarningManagement/law/addDialog.vue | 405 ++++-------------- .../src/views/WarningManagement/law/index.js | 31 +- .../src/views/WarningManagement/law/index.vue | 4 +- 5 files changed, 111 insertions(+), 332 deletions(-) diff --git a/packages/screen/src/views/WarningManagement/construction/index.vue b/packages/screen/src/views/WarningManagement/construction/index.vue index d827332..87e6449 100644 --- a/packages/screen/src/views/WarningManagement/construction/index.vue +++ b/packages/screen/src/views/WarningManagement/construction/index.vue @@ -43,6 +43,8 @@ import MyDialog from "../../../component/MyDialog/index.js"; import MyDrawer from "../../../component/MyDrawer/index.js"; import scriptFn from "./index.js"; const script = scriptFn(); +const { dialogRef, drawerRef } = script; + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/law/index.js b/packages/screen/src/views/WarningManagement/law/index.js index 25a8087..2186224 100644 --- a/packages/screen/src/views/WarningManagement/law/index.js +++ b/packages/screen/src/views/WarningManagement/law/index.js @@ -67,8 +67,24 @@ const columns = [ label: "预警结束时间", }, { - prop: "affectedSiteCount", - label: "影响数量", + prop: "affectedRoadSectionCount", + label: "影响路段", + }, + { + prop: "affectedBridgeCount", + label: "影响桥梁", + }, + { + prop: "affectedTunnelCount", + label: "影响隧道", + }, + { + prop: "affectedSlopeCount", + label: "影响边坡", + }, + { + prop: "affectedProjectCount", + label: "影响项目", }, { prop: "responseStatus", @@ -122,7 +138,7 @@ const getTableData = async (filterData = {}) => { } }); const res = await request({ - url: '/snow-ops-platform/weatherWarning/response-list', + url: '/snow-ops-platform/lawWeatherWarning/response-list', method: "GET", params: { ...filteredParams, @@ -172,9 +188,9 @@ const responseOptions = [ { label: "全部响应", value: "全部响应" }, ] -// 打开填报项目弹窗 +// 打开发布预警弹窗 const openAddDialog = () => { - model.title = '填报项目'; + model.title = '发布预警'; Object.assign(form, INIT_FORM); model.props = { form: form, @@ -184,15 +200,14 @@ const openAddDialog = () => { modelVisible.value = false; }; model.onConfirm = async () => { - dialogType.value = ''; await dialogRef?.value?.dynamicComponentRef?.formRef.validate().then(() => { - console.log('@@@@@填报项目', form); + console.log('@@@@@发布预警', form); }) .catch((err) => { ElMessage.error('请处理表单中的错误项'); }); }; - model.width = "70%" + model.width = "50%" modelVisible.value = true; } diff --git a/packages/screen/src/views/WarningManagement/law/index.vue b/packages/screen/src/views/WarningManagement/law/index.vue index 675c1fe..f526f85 100644 --- a/packages/screen/src/views/WarningManagement/law/index.vue +++ b/packages/screen/src/views/WarningManagement/law/index.vue @@ -12,7 +12,7 @@
生成报告 - 发布预警 + 发布预警 线下帮扶台账 导出 @@ -45,6 +45,8 @@ import MyDialog from "../../../component/MyDialog/index.js"; import MyDrawer from "../../../component/MyDrawer/index.js"; import scriptFn from "./index.js"; const script = scriptFn(); +const { dialogRef, drawerRef } = script; + \ No newline at end of file + diff --git a/packages/mobile/src/views/DisasterManagement/DisasterReport.vue b/packages/mobile/src/views/DisasterManagement/DisasterReport.vue index 46b46af..b5d0d54 100644 --- a/packages/mobile/src/views/DisasterManagement/DisasterReport.vue +++ b/packages/mobile/src/views/DisasterManagement/DisasterReport.vue @@ -5,22 +5,16 @@ - - 水毁灾害 - 冰雪灾害 - + + + {{ item.label }} + + - - - -
- -
- - - 提交 + + @@ -32,8 +26,8 @@ import PageContainer from '@/components/PageContainer.vue' import CurrentSite from '@/components/CurrentSite.vue' import PanelItem from '@/components/PanelItem.vue' import WaterDisaster from './WaterDisaster/WaterDisaster.vue' +import IceDisaster from './IceDisaster.vue' import { request } from '@shared/utils/request' -import mockFormData from './waterDisasterFormData.json' const router = useRouter() const route = useRoute() @@ -45,118 +39,27 @@ const title = ref(!isContinue ? '灾毁填报' : '灾毁续报') // 事件类型 const eventType = ref('water') - -// 表单数据 -const formData = ref(route.query.mock ? mockFormData : {}) -const waterDisasterRef = ref(null) -const submitting = ref(false) +const eventTypeOptions = [ + { + label: '水毁灾害', + value: 'water' + }, + { + label: '冰雪灾害', + value: 'ice' + } +] // 返回上一页 const handleClickBack = () => { router.replace('/disasterManagement') } - -// 提交表单 -const handleSubmit = async () => { - // 验证表单 - if (eventType.value === 'water') { - if (!waterDisasterRef.value.validate()) { - return - } - } - - submitting.value = true - try { - // 获取表单数据 - let formData = {} - if (eventType.value === 'water') { - formData = waterDisasterRef.value.getFormData() - } - - // 添加事件类型和站点信息 - const submitData = { - ...formData - // 可以在这里添加站点信息等其他数据 - } - - const res = await request({ - url: '/snow-ops-platform/water-damage/addOrUpdate', - method: 'post', - data: submitData - }) - - if (res?.code === '00000') { - showSuccessToast('提交成功') - if (submitData.event.needsRecovery) { - router.replace({ - name: 'RebuildAdd', - params: { - data: res.data.id - } - }) - } else { - // 提交成功后返回列表页 - setTimeout(() => { - router.replace('/disasterManagement') - }, 500) - } - } else { - showFailToast(res.message) - } - } catch (error) { - showFailToast('提交失败,请重试') - console.error('提交失败:', error) - } finally { - submitting.value = false - } -} - -// 获取灾毁详情 -const getDisasterDetail = async () => { - const id = route.query.id - if (!id) { - return - } - - try { - const result = await request({ - url: `/snow-ops-platform/water-damage/getById`, - method: 'get', - params: { id } - }) - - if (result?.data) { - // 接口返回 Data 结构 - const data = result.data - const newFormData = { - ...data, - lossList: null, - report: formData.value.report, - fileList: null - } - waterDisasterRef.value.initFormData(newFormData) - } else { - showToast(result.message || '获取详情失败') - } - } catch (error) { - console.error('获取灾毁详情失败:', error) - showToast('获取详情失败,请稍后重试') - } -} - -onMounted(() => { - if (route.query?.id) { - getDisasterDetail() - } else { - waterDisasterRef.value.initFormData(formData.value) - } -}) diff --git a/packages/mobile/src/views/DisasterManagement/IceDisaster.vue b/packages/mobile/src/views/DisasterManagement/IceDisaster.vue new file mode 100644 index 0000000..74baf88 --- /dev/null +++ b/packages/mobile/src/views/DisasterManagement/IceDisaster.vue @@ -0,0 +1,524 @@ + + + + + diff --git a/packages/mobile/src/views/DisasterManagement/RoadRoutesPicker.vue b/packages/mobile/src/views/DisasterManagement/RoadRoutesPicker.vue new file mode 100644 index 0000000..abd323b --- /dev/null +++ b/packages/mobile/src/views/DisasterManagement/RoadRoutesPicker.vue @@ -0,0 +1,313 @@ + + + + + diff --git a/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue b/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue index 1a39cd4..e888bbe 100644 --- a/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue +++ b/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue @@ -4,13 +4,13 @@ - + - + - + @@ -30,7 +30,7 @@
- + @@ -38,6 +38,10 @@ + + + + @@ -51,13 +55,13 @@
处置措施
- - - 半幅封闭 - 全副封闭 - 便道通行 - 正常通行 - + + + + {{ item.label }} + + +
@@ -130,44 +134,49 @@ - + - + - + + + + 提交 diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/RoadRoutesSelect.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/RoadRoutesSelect.vue new file mode 100644 index 0000000..9fc1342 --- /dev/null +++ b/packages/screen/src/views/DisasterManagement/DisasterReport/RoadRoutesSelect.vue @@ -0,0 +1,255 @@ + + + + + \ 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 @@ @@ -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 @@ - - + - +