From 2c75d16ba44967e2b24b636aeba9d9ec18582136 Mon Sep 17 00:00:00 2001 From: niedongsheng <605973111@qq.com> Date: Thu, 9 Apr 2026 14:19:04 +0800 Subject: [PATCH 01/19] =?UTF-8?q?feat:=20=E6=B0=B4=E6=AF=81=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DisasterReport/WaterDisasterReport.vue | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue index f494c67..ac0d191 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue @@ -307,24 +307,33 @@ - - 台/班 + + + - - 人次 + + + - - 万元 + + + @@ -351,7 +360,7 @@ - + From ed1f51b86b859ce6fdc0d9b76a5fb15fb755504e Mon Sep 17 00:00:00 2001 From: niedongsheng <605973111@qq.com> Date: Thu, 9 Apr 2026 15:45:16 +0800 Subject: [PATCH 02/19] =?UTF-8?q?feat:=20=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E5=9F=BA=E6=9C=AC=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/component/FileUpload/FileUpload.vue | 58 +++++ .../src/component/FileUpload/PreviewBlock.vue | 237 ++++++++++++++++++ .../src/component/FileUpload/UploadBlock.vue | 141 +++++++++++ .../DisasterReport/WaterDisasterReport.vue | 44 ++-- 4 files changed, 451 insertions(+), 29 deletions(-) create mode 100644 packages/screen/src/component/FileUpload/FileUpload.vue create mode 100644 packages/screen/src/component/FileUpload/PreviewBlock.vue create mode 100644 packages/screen/src/component/FileUpload/UploadBlock.vue diff --git a/packages/screen/src/component/FileUpload/FileUpload.vue b/packages/screen/src/component/FileUpload/FileUpload.vue new file mode 100644 index 0000000..6916ee0 --- /dev/null +++ b/packages/screen/src/component/FileUpload/FileUpload.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/packages/screen/src/component/FileUpload/PreviewBlock.vue b/packages/screen/src/component/FileUpload/PreviewBlock.vue new file mode 100644 index 0000000..a9ab090 --- /dev/null +++ b/packages/screen/src/component/FileUpload/PreviewBlock.vue @@ -0,0 +1,237 @@ + + + + + + \ No newline at end of file diff --git a/packages/screen/src/component/FileUpload/UploadBlock.vue b/packages/screen/src/component/FileUpload/UploadBlock.vue new file mode 100644 index 0000000..3050491 --- /dev/null +++ b/packages/screen/src/component/FileUpload/UploadBlock.vue @@ -0,0 +1,141 @@ + + + + + + diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue index ac0d191..e5837d5 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue @@ -35,8 +35,8 @@ - - + + @@ -206,35 +206,14 @@ - + - - - -
只能上传jpg/png格式,且不超过500kb
+
- + - - 选择文件 - -
仅支持20s内的视频,不超过20MB
-
- -
+
@@ -394,7 +373,7 @@ import mockData from './waterMockJson.json' import { request } from '@/utils/request' import LossList from './LossList.vue' import BlockItem from '@/component/BlockItem.vue' -import { el } from 'element-plus/es/locale/index.mjs' +import FileUpload from '@/component/FileUpload/FileUpload.vue' const router = useRouter() const route = useRoute() @@ -411,6 +390,8 @@ const disposalMeasuresArray = ref([]) const imageFileList = ref([]) const videoFileList = ref([]) +const eventType = ref('水毁事件') + const formData = reactive({ // 顶层字段 occurLocation: null, // 发生地点/路况位置 @@ -644,7 +625,12 @@ const handleSubmit = async () => { // 加载编辑数据 const loadEditData = async () => { - initFormData(mockData) + + if(route.query.mock) { + initFormData(mockData) + } else { + initFormData({}) + } } onMounted(() => { From 58b4720b94090e32778b11341e101031fa89fd9c Mon Sep 17 00:00:00 2001 From: huangchenhao <123673748@qq.com> Date: Thu, 9 Apr 2026 16:12:48 +0800 Subject: [PATCH 03/19] =?UTF-8?q?feat:=20=E6=81=A2=E5=A4=8D=E9=87=8D?= =?UTF-8?q?=E5=BB=BApc=E7=AB=AF=20=E9=A1=B9=E7=9B=AE=E5=A1=AB=E6=8A=A5=20?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=A9=B3=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/src/component/Breadcrumb/index.vue | 17 + packages/screen/src/router/index.js | 11 +- .../examineDialog.vue | 192 ++++------ .../views/ProjectManagement_Rebuild/index.js | 347 +++++++++++------- .../views/ProjectManagement_Rebuild/index.vue | 20 +- .../projectAddPage.vue | 312 +++++++++++++++- .../rejectDialog.vue | 48 +++ 7 files changed, 683 insertions(+), 264 deletions(-) create mode 100644 packages/screen/src/views/ProjectManagement_Rebuild/rejectDialog.vue diff --git a/packages/screen/src/component/Breadcrumb/index.vue b/packages/screen/src/component/Breadcrumb/index.vue index 7082377..40ffd71 100644 --- a/packages/screen/src/component/Breadcrumb/index.vue +++ b/packages/screen/src/component/Breadcrumb/index.vue @@ -85,6 +85,23 @@ const generateBreadcrumb = () => { name: 'ledgerManagement', meta: { title: '驻地台账' } }) + } else if (currentPath.includes('/projectAdd')) { + // 特殊处理:项目填报页面(项目管理的子页面) + // 添加项目管理(父级) + breadcrumbList.value.push({ + title: '项目管理', + path: '/projectManagement', + name: 'projectManagement', + meta: { title: '项目管理' } + }) + + // 添加项目填报(当前页) + breadcrumbList.value.push({ + title: '项目填报', + path: currentPath, + name: 'projectAdd', + meta: { title: '项目填报' } + }) } else { // 普通路由处理 matched.forEach((record, index) => { diff --git a/packages/screen/src/router/index.js b/packages/screen/src/router/index.js index 6207d7e..ddd0d9d 100644 --- a/packages/screen/src/router/index.js +++ b/packages/screen/src/router/index.js @@ -1,4 +1,3 @@ -import component from 'element-plus/es/components/tree-select/src/tree-select-option.mjs' import { createRouter, createWebHistory } from 'vue-router' const routes = [ @@ -149,6 +148,16 @@ const routes = [ breadcrumb: true } }, + { + path: '/projectAdd/:data?', + name: 'projectAdd', + component: () => import('../views/ProjectManagement_Rebuild/projectAddPage.vue'), + meta: { + title: '项目填报', + breadcrumb: true, + parentRoute: 'projectManagement' // 用于在面包屑中建立父子关系 + } + }, { path: '/disasterManagement', name: 'disasterManagement', diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue b/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue index 16207f9..0795876 100644 --- a/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue +++ b/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue @@ -1,71 +1,83 @@ + + + - - - - @@ -187,12 +169,13 @@ + + \ No newline at end of file diff --git a/packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue b/packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue index 7158c2b..c4e4ac1 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue @@ -3,19 +3,19 @@
- 续保信息 + 续报信息
- - 半幅封闭 - 全副封闭 - 便道通行 - 正常通行 - + + + + + + @@ -216,8 +216,8 @@ const blockedOptions = [ ] const repairProgressOptions = [ - { label: '未抢修', value: '未抢修' }, - { label: '抢修中', value: '抢修中' }, + { label: '未抢险', value: '未抢险' }, + { label: '抢险中', value: '抢险中' }, { label: '已完成', value: '已完成' } ] diff --git a/packages/screen/src/views/DisasterManagement/DisasterDetail/LossListDetail.vue b/packages/screen/src/views/DisasterManagement/DisasterDetail/LossListDetail.vue new file mode 100644 index 0000000..d8ecbde --- /dev/null +++ b/packages/screen/src/views/DisasterManagement/DisasterDetail/LossListDetail.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue index 3bb01cd..1d46067 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue @@ -47,16 +47,25 @@
- 抢修进度: + 抢险进度: {{ detailData.event?.repairProgress || '-' }}
+ +
+ 处理措施: + {{ getBaseDisposalMeasures() }} +
+
水毁处数: {{ detailData.event?.damageCount || 0 }}
+
+ +
阻断里程: @@ -66,66 +75,24 @@ - -
- 发生时间: - {{ detailData.occurTime || '-' }} -
-
- -
- 线路编号: - {{ detailData.routeNo || '-' }} -
-
地点路线: {{ detailData.occurLocation || '-' }}
-
- -
起点桩号: {{ detailData.event?.startStakeNo || '-' }}
- -
- 起点桩经度: - {{ detailData.event?.startStakeLng || '-' }} -
-
- -
- 起点桩纬度: - {{ detailData.event?.startStakeLat || '-' }} -
-
-
- -
止点桩号: {{ detailData.event?.endStakeNo || '-' }}
- -
- 止点桩经度: - {{ detailData.event?.endStakeLng || '-' }} -
-
- -
- 止点桩纬度: - {{ detailData.event?.endStakeLat || '-' }} -
-
@@ -141,55 +108,37 @@ {{ detailData.event?.blockedPointName || '-' }}
- -
- 上报区县: - {{ detailData.event?.district || '-' }} -
-
- 巡查里程: - {{ detailData.event?.inspectionMileage ? detailData.event.inspectionMileage + '公里' : '-' }} + 所属区县: + {{ detailData.event?.district || '-' }}
+ +
+ 发生时间: + {{ detailData.occurTime || '-' }} +
+
+
+ +
是否恢复重建: {{ detailData.event?.needsRecovery ? '是' : '否' }}
- +
恢复重建预估费用: {{ detailData.event?.estimatedRecoveryCost ? detailData.event.estimatedRecoveryCost + '万元' : '-' }}
- - - -
- 联系人: - {{ detailData.event?.contactPerson || '-' }} -
-
- -
- 联系电话: - {{ detailData.event?.contactPhone || '-' }} -
-
- -
- 填报单位: - {{ detailData.event?.reporterUnit || '-' }} -
-
-
@@ -204,52 +153,83 @@
{{ report?.title }} - {{ report.reporterName || '-' }} {{ report.reportTime || '-' }} + 时间:{{ report.reportTime || '-' }}
+
+
+
+
+ 现场描述: + {{ report.siteDescription || '-' }} +
+
+ 处置措施: + {{ report.disposalMeasures || '-' }} +
+
+ 路产损失: + {{ report.totalLossAmount ? report.totalLossAmount + '万元' : '-' }} +
+
+ 实际恢复时间: + {{ report.actualRecoverTime || '-' }} +
+
+ 预计恢复时间: + {{ report.expectRecoverTime || '-' }} +
-
-
- 处置情况: - {{ formatDisposalMeasures(report.disposalMeasures) || '-' }} -
-
- 塌方及损失: - {{ getLossDescription(report) }} -
-
- 路产损失: - {{ report.totalLossAmount ? report.totalLossAmount + '万元' : '-' }} -
-
- 有无车辆滞留: - {{ getVehicleStrandedText(report) }} -
-
- 滞留车辆: - {{ report.strandedVehicleCount || 0 }}辆 -
-
- 预计恢复时间: - {{ report.expectRecoverTime || '-' }} -
-
- 实际恢复时间: - {{ report.actualRecoverTime || '-' }} -
-
- 现场描述: - {{ report.siteDescription || '-' }} -
+
+ 填报人: + {{ report.reporterName ? report.reporterName : '-' }} +
- -
- 附件: -
- - - {{ file.fileName }} - +
+ 联系电话: + {{ report.phone ? report.phone : '-' }} +
+
+ +
+
+ +
+ + + + {{ report.showDetail ? '点击关闭详情' : '点击查看详情' }} +
@@ -276,6 +256,8 @@ import { ElMessage } from 'element-plus' import { ArrowLeft, Picture, VideoCamera } from '@element-plus/icons-vue' import ContinueReport from './ContinueReport.vue' import { request } from '@shared/utils/request' +import LossListDetail from './LossListDetail.vue' +import FileUpload from '@/component/FileUpload/FileUpload.vue' import mockData from '../DisasterReport/waterMockJson.json' const router = useRouter() @@ -307,10 +289,16 @@ const continueReport = ref(null) const allReports = computed(() => { const reports = detailData.value.report?.map((item, index) => { - item.title = index === 0 ? '首报' : '续报' + index + if (index === detailData.value.report.length - 1) { + item.title = '首报' + } else { + item.title = '续报' + (detailData.value.report.length - 1 - index) + } + console.log(detailData.value.report.length - 1, ' ', index, ' -', item.title) return item }) || [] - return reports.reverse() + return reports + // return reports.reverse() }) // 是否有填报数据 @@ -328,14 +316,20 @@ const getEventStatusType = () => { return eventStatus.value === 1 ? 'success' : 'danger' } +const getBaseDisposalMeasures = () => { + const firstItem = allReports.value[0] + if (!firstItem) return '-' + return formatDisposalMeasures(firstItem.disposalMeasures || '') || '-' +} + // 格式化处置措施 const formatDisposalMeasures = (measures) => { if (!measures) return '' const measureMap = { - halfClose: '半幅封闭', - fullClose: '全副封闭', - bypass: '便道通行', - normal: '正常通行' + 半幅封闭: '半幅封闭', + 全副封闭: '全副封闭', + 便道通行: '便道通行', + 正常通行: '正常通行' } return measures .split(',') @@ -381,6 +375,7 @@ const getDisasterDetail = async () => { if (result?.data) { const data = result.data + console.log('🚀 ~ getDisasterDetail ~ data:', data) detailData.value = { event: data.event || null, report: data.report || [], @@ -397,7 +392,7 @@ const getDisasterDetail = async () => { const newFormData = { ...data, lossList: null, - report: mockData.report, + report: route.query.mock ? mockData.report : {}, fileList: null } continueReport.value?.initFormData(newFormData) @@ -416,25 +411,6 @@ const handleClickBack = () => { router.push('/disasterManagement') } -// 续报 -const handleContinueReport = () => { - router.push({ - path: '/disasterReport', - query: { - id: route.query.id, - eventId: detailData.value.event?.id, - isContinue: 'true' - } - }) -} - -// 预览附件 -const previewFile = (file) => { - if (file.fileUrl) { - window.open(file.fileUrl, '_blank') - } -} - onMounted(() => { getDisasterDetail() }) @@ -502,8 +478,12 @@ onMounted(() => { align-items: flex-start; line-height: 1.5; + & + .info-item { + margin-top: 10px; + } + .info-label { - width: 120px; + white-space: nowrap; flex-shrink: 0; color: #909399; font-size: 14px; @@ -612,7 +592,26 @@ onMounted(() => { margin-right: 10px; } .right-panel { - width: 400px; + width: 300px; } +} +.content-wrapper { + display: flex; + flex-direction: column; +} +.basic-info-wrapper { + display: flex; +} +.detal-info-wrapper { + margin-top: 10px; + border-top: 1px solid #efefef; + padding-top: 10px; +} +.info-list { + flex: 1; + overflow: hidden; +} +.file-list { + } diff --git a/packages/screen/src/views/DisasterManagement/DisasterManagement.vue b/packages/screen/src/views/DisasterManagement/DisasterManagement.vue index 68edc96..700557d 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterManagement.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterManagement.vue @@ -22,9 +22,8 @@ - - - + + @@ -87,20 +86,25 @@ {{ scope.$index + 1 }} - + - - + + - + + + - + @@ -148,6 +152,9 @@ />
+ + +
@@ -156,6 +163,8 @@ import { ref, reactive, onMounted } from 'vue' import { ElMessage } from 'element-plus' import { useRouter } from 'vue-router' import { request } from '@/utils/request' +import { Picture, VideoPlay } from '@element-plus/icons-vue' +import VideoPreviewDialog from '@/component/VideoPreviewDialog.vue' const router = useRouter() @@ -171,6 +180,11 @@ const filterForm = reactive({ pushStatus: '' // 推送状态 }) +const showPreviewImage = ref(false) +const selectedRow = ref(null) + +const videoPreviewDialog = ref(null) + // 日期范围 const dateRange = ref(null) @@ -221,7 +235,7 @@ const fetchData = async () => { // 实际接口调用 const response = await request({ - url: '/snow-ops-platform/unified-disaster/list', + url: '/snow-ops-platform/unified-disaster/pc/list', method: 'get', params }) @@ -313,21 +327,16 @@ const toReport = () => { // 查看图片 const viewImages = (row) => { - if (row.images && row.images.length) { - // 打开图片预览 - ElMessage.info('图片预览功能开发中') - } else { - ElMessage.info('暂无图片') - } + selectedRow.value = row + showPreviewImage.value = true } // 查看视频 const viewVideos = (row) => { - if (row.videos && row.videos.length) { - ElMessage.info('视频播放功能开发中') - } else { - ElMessage.info('暂无视频') - } + videoPreviewDialog.value.show({ + url: row.videos[0], + title: row.eventName + }) } // 分页大小改变 @@ -400,4 +409,4 @@ onMounted(() => { border-top: 1px solid #ebeef5; } } - \ No newline at end of file + diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue index e5837d5..b6f23f7 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue @@ -77,8 +77,8 @@ - - + + @@ -414,7 +414,7 @@ const formData = reactive({ inspectionMileage: null, // 巡查里程 isBlocked: null, // 是否阻断 needsRecovery: null, // 是否需要恢复重建 - repairProgress: null, // 抢修进度 + repairProgress: null, // 抢险进度 reporterUnit: null, // 填报单位 startStakeLat: null, // 起点纬度 startStakeLng: null, // 起点经度 From 80909dfd4d42a9da919bb42bbf128eec2f62019e Mon Sep 17 00:00:00 2001 From: niedongsheng <605973111@qq.com> Date: Fri, 10 Apr 2026 13:39:36 +0800 Subject: [PATCH 14/19] =?UTF-8?q?bugfix:=20=E6=B0=B4=E6=AF=81=E7=81=BE?= =?UTF-8?q?=E5=AE=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DisasterManagement/DisasterDetail.vue | 20 +------- .../DisasterManagement/DisasterReport.vue | 46 ++++++++----------- .../WaterDisaster/WaterDisaster.vue | 37 --------------- .../waterDisasterFormData.json | 4 -- ....vue => WaterDisasterContinueReportPC.vue} | 26 +---------- ...erDetail.vue => WaterDisasterDetailPC.vue} | 4 +- ....vue => WaterDisasterLossListDetailPC.vue} | 0 ...anagement.vue => DisasterManagementPC.vue} | 0 ...isasterReport.vue => DisasterReportPC.vue} | 2 +- ...ssList.vue => WaterDisasterLossListPC.vue} | 0 ...erReport.vue => WaterDisasterReportPC.vue} | 6 +-- .../DisasterReport/waterMockJson.json | 8 +--- 12 files changed, 29 insertions(+), 124 deletions(-) rename packages/screen/src/views/DisasterManagement/DisasterDetail/{ContinueReport.vue => WaterDisasterContinueReportPC.vue} (94%) rename packages/screen/src/views/DisasterManagement/DisasterDetail/{WaterDisasterDetail.vue => WaterDisasterDetailPC.vue} (99%) rename packages/screen/src/views/DisasterManagement/DisasterDetail/{LossListDetail.vue => WaterDisasterLossListDetailPC.vue} (100%) rename packages/screen/src/views/DisasterManagement/{DisasterManagement.vue => DisasterManagementPC.vue} (100%) rename packages/screen/src/views/DisasterManagement/DisasterReport/{DisasterReport.vue => DisasterReportPC.vue} (97%) rename packages/screen/src/views/DisasterManagement/DisasterReport/{LossList.vue => WaterDisasterLossListPC.vue} (100%) rename packages/screen/src/views/DisasterManagement/DisasterReport/{WaterDisasterReport.vue => WaterDisasterReportPC.vue} (99%) diff --git a/packages/mobile/src/views/DisasterManagement/DisasterDetail.vue b/packages/mobile/src/views/DisasterManagement/DisasterDetail.vue index dd1edc0..d1003cc 100644 --- a/packages/mobile/src/views/DisasterManagement/DisasterDetail.vue +++ b/packages/mobile/src/views/DisasterManagement/DisasterDetail.vue @@ -72,33 +72,17 @@ {{ detailData.occurLocation || '-' }}
- +
起点桩号: {{ detailData.event?.startStakeNo || '-' }}
-
- 起点桩经度: - {{ detailData.event?.startStakeLng || '-' }} -
-
- 起点桩纬度: - {{ detailData.event?.startStakeLat || '-' }} -
- +
止点桩号: {{ detailData.event?.endStakeNo || '-' }}
-
- 止点桩经度: - {{ detailData.event?.endStakeLng || '-' }} -
-
- 止点桩纬度: - {{ detailData.event?.endStakeLat || '-' }} -
diff --git a/packages/mobile/src/views/DisasterManagement/DisasterReport.vue b/packages/mobile/src/views/DisasterManagement/DisasterReport.vue index 88cbc26..bde9178 100644 --- a/packages/mobile/src/views/DisasterManagement/DisasterReport.vue +++ b/packages/mobile/src/views/DisasterManagement/DisasterReport.vue @@ -4,7 +4,7 @@ - + 水毁灾害 冰雪灾害 @@ -12,20 +12,15 @@ - - + +
- - 提交 - + 提交 @@ -37,7 +32,7 @@ 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 { request } from "@shared/utils/request"; +import { request } from '@shared/utils/request' import mockFormData from './waterDisasterFormData.json' const router = useRouter() @@ -52,7 +47,7 @@ const title = ref(!isContinue ? '灾毁填报' : '灾毁续报') const eventType = ref('water') // 表单数据 -const formData = ref(mockFormData) +const formData = ref(route.query.mock ? mockFormData : {}) const waterDisasterRef = ref(null) const submitting = ref(false) @@ -69,7 +64,7 @@ const handleSubmit = async () => { return } } - + submitting.value = true try { // 获取表单数据 @@ -77,10 +72,10 @@ const handleSubmit = async () => { if (eventType.value === 'water') { formData = waterDisasterRef.value.getFormData() } - + // 添加事件类型和站点信息 const submitData = { - ...formData, + ...formData // 可以在这里添加站点信息等其他数据 } @@ -90,16 +85,15 @@ const handleSubmit = async () => { data: submitData }) - if(res?.code === '00000') { + if (res?.code === '00000') { showSuccessToast('提交成功') + // 提交成功后返回列表页 + setTimeout(() => { + router.replace('/disasterManagement') + }, 1000) } else { showFailToast(res.message) } - - // 提交成功后返回列表页 - setTimeout(() => { - router.replace('/disasterManagement') - }, 1000) } catch (error) { showFailToast('提交失败,请重试') console.error('提交失败:', error) @@ -126,10 +120,10 @@ const getDisasterDetail = async () => { // 接口返回 Data 结构 const data = result.data const newFormData = { - ...data, - lossList: null, - report: formData.value.report, - fileList: null + ...data, + lossList: null, + report: formData.value.report, + fileList: null } waterDisasterRef.value.initFormData(newFormData) } else { @@ -142,7 +136,7 @@ const getDisasterDetail = async () => { } onMounted(() => { - if(route.query?.id) { + if (route.query?.id) { getDisasterDetail() } else { waterDisasterRef.value.initFormData(formData.value) @@ -189,4 +183,4 @@ onMounted(() => { transform: translateX(-50%) scale(0.98); } } - \ No newline at end of file + diff --git a/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue b/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue index 705f30c..7d7fbe0 100644 --- a/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue +++ b/packages/mobile/src/views/DisasterManagement/WaterDisaster/WaterDisaster.vue @@ -35,29 +35,9 @@ - -
- - -
-
- - 校准经纬度 -
- - -
- - -
-
- - 校准经纬度 -
- @@ -205,8 +185,6 @@ const formData = reactive({ contactPhone: '', // 联系电话 damageCount: '', // 水毁处数 district: '', // 上报区县 - endStakeLat: '', // 止点纬度 - endStakeLng: '', // 止点经度 endStakeNo: '', // 止点桩号 estimatedRecoveryCost: '', // 恢复重建预估费用 inspectionMileage: '', // 巡查里程 @@ -214,8 +192,6 @@ const formData = reactive({ needsRecovery: '', // 是否需要恢复重建 repairProgress: '', // 抢险进度 reporterUnit: '', // 填报单位 - startStakeLat: '', // 起点纬度 - startStakeLng: '', // 起点经度 startStakeNo: '' // 起点桩号 }, @@ -363,19 +339,6 @@ const calibrateTime = () => { showToast('时间已校准为当前时间') } -// 校准起点经纬度 -const calibrateStartCoord = () => { - formData.event.startStakeLng = '108.41763025' - formData.event.startStakeLat = '108.41763025' - showToast('起点经纬度已校准') -} - -// 校准止点经纬度 -const calibrateEndCoord = () => { - formData.event.endStakeLng = '108.41763025' - formData.event.endStakeLat = '108.41763025' - showToast('止点经纬度已校准') -} // 图片上传处理 const afterImageRead = (file) => { diff --git a/packages/mobile/src/views/DisasterManagement/waterDisasterFormData.json b/packages/mobile/src/views/DisasterManagement/waterDisasterFormData.json index c961174..3608d4b 100644 --- a/packages/mobile/src/views/DisasterManagement/waterDisasterFormData.json +++ b/packages/mobile/src/views/DisasterManagement/waterDisasterFormData.json @@ -10,8 +10,6 @@ "contactPhone": "13812345678", "damageCount": 3, "district": "武侯区", - "endStakeLat": "30.658712", - "endStakeLng": "104.082356", "endStakeNo": "K2251+200", "estimatedRecoveryCost": 120.5, "inspectionMileage": 25.6, @@ -19,8 +17,6 @@ "needsRecovery": true, "repairProgress": "抢险中", "reporterUnit": "武侯区交通运输局", - "startStakeLat": "30.652145", - "startStakeLng": "104.075632", "startStakeNo": "K2250+300" }, "report": { diff --git a/packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterContinueReportPC.vue similarity index 94% rename from packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue rename to packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterContinueReportPC.vue index c4e4ac1..c98f449 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterContinueReportPC.vue @@ -138,7 +138,7 @@ import { ref, reactive, watch, computed } from 'vue' import { ElMessage } from 'element-plus' import { request } from '@shared/utils/request' -import LossList from '../DisasterReport/LossList.vue' +import LossList from '../DisasterReport/WaterDisasterLossListPC.vue' // Props 定义 const props = defineProps({ @@ -164,8 +164,6 @@ const formData = reactive({ contactPhone: '', damageCount: '', district: '', - endStakeLat: '', - endStakeLng: '', endStakeNo: '', estimatedRecoveryCost: '', inspectionMileage: '', @@ -173,8 +171,6 @@ const formData = reactive({ needsRecovery: '', repairProgress: '', reporterUnit: '', - startStakeLat: '', - startStakeLng: '', startStakeNo: '' }, report: { @@ -295,20 +291,6 @@ const calibrateTime = () => { ElMessage.success('时间已校准为当前时间') } -// 校准起点经纬度 -const calibrateStartCoord = () => { - formData.event.startStakeLng = '108.41763025' - formData.event.startStakeLat = '108.41763025' - ElMessage.success('起点经纬度已校准') -} - -// 校准止点经纬度 -const calibrateEndCoord = () => { - formData.event.endStakeLng = '108.41763025' - formData.event.endStakeLat = '108.41763025' - ElMessage.success('止点经纬度已校准') -} - // 表单验证 const validate = () => { if (!formData.occurTime) { @@ -341,8 +323,6 @@ const resetForm = () => { contactPhone: '', damageCount: '', district: '', - endStakeLat: '', - endStakeLng: '', endStakeNo: '', estimatedRecoveryCost: '', inspectionMileage: '', @@ -350,8 +330,6 @@ const resetForm = () => { needsRecovery: '', repairProgress: '', reporterUnit: '', - startStakeLat: '', - startStakeLng: '', startStakeNo: '' }, report: { @@ -426,8 +404,6 @@ defineExpose({ getFormData, resetForm, calibrateTime, - calibrateStartCoord, - calibrateEndCoord }) diff --git a/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetailPC.vue similarity index 99% rename from packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue rename to packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetailPC.vue index 1d46067..8998446 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetailPC.vue @@ -254,9 +254,9 @@ import { onMounted, ref, computed } from 'vue' import { useRouter, useRoute } from 'vue-router' import { ElMessage } from 'element-plus' import { ArrowLeft, Picture, VideoCamera } from '@element-plus/icons-vue' -import ContinueReport from './ContinueReport.vue' +import ContinueReport from './WaterDisasterContinueReportPC.vue' import { request } from '@shared/utils/request' -import LossListDetail from './LossListDetail.vue' +import LossListDetail from './WaterDisasterLossListDetailPC.vue' import FileUpload from '@/component/FileUpload/FileUpload.vue' import mockData from '../DisasterReport/waterMockJson.json' diff --git a/packages/screen/src/views/DisasterManagement/DisasterDetail/LossListDetail.vue b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterLossListDetailPC.vue similarity index 100% rename from packages/screen/src/views/DisasterManagement/DisasterDetail/LossListDetail.vue rename to packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterLossListDetailPC.vue diff --git a/packages/screen/src/views/DisasterManagement/DisasterManagement.vue b/packages/screen/src/views/DisasterManagement/DisasterManagementPC.vue similarity index 100% rename from packages/screen/src/views/DisasterManagement/DisasterManagement.vue rename to packages/screen/src/views/DisasterManagement/DisasterManagementPC.vue diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/DisasterReport.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/DisasterReportPC.vue similarity index 97% rename from packages/screen/src/views/DisasterManagement/DisasterReport/DisasterReport.vue rename to packages/screen/src/views/DisasterManagement/DisasterReport/DisasterReportPC.vue index b4c9bfb..3bfa6d3 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterReport/DisasterReport.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterReport/DisasterReportPC.vue @@ -16,7 +16,7 @@ import { useRouter, useRoute } from 'vue-router' import { ElMessage, ElMessageBox } from 'element-plus' import { Plus, Upload } from '@element-plus/icons-vue' import { request } from '@/utils/request' -import WaterDisasterReport from './WaterDisasterReport.vue' +import WaterDisasterReport from './WaterDisasterReportPC.vue' const router = useRouter() const route = useRoute() diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/LossList.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterLossListPC.vue similarity index 100% rename from packages/screen/src/views/DisasterManagement/DisasterReport/LossList.vue rename to packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterLossListPC.vue diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReportPC.vue similarity index 99% rename from packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue rename to packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReportPC.vue index b6f23f7..d37522d 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue +++ b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReportPC.vue @@ -371,7 +371,7 @@ import { ElMessage } from 'element-plus' import { Plus, Upload } from '@element-plus/icons-vue' import mockData from './waterMockJson.json' import { request } from '@/utils/request' -import LossList from './LossList.vue' +import LossList from './WaterDisasterLossListPC.vue' import BlockItem from '@/component/BlockItem.vue' import FileUpload from '@/component/FileUpload/FileUpload.vue' @@ -407,8 +407,6 @@ const formData = reactive({ contactPhone: null, // 联系电话 damageCount: null, // 水毁处数 district: null, // 上报区县 - endStakeLat: null, // 止点纬度 - endStakeLng: null, // 止点经度 endStakeNo: null, // 止点桩号 estimatedRecoveryCost: null, // 恢复重建预估费用 inspectionMileage: null, // 巡查里程 @@ -416,8 +414,6 @@ const formData = reactive({ needsRecovery: null, // 是否需要恢复重建 repairProgress: null, // 抢险进度 reporterUnit: null, // 填报单位 - startStakeLat: null, // 起点纬度 - startStakeLng: null, // 起点经度 startStakeNo: null // 起点桩号 }, diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/waterMockJson.json b/packages/screen/src/views/DisasterManagement/DisasterReport/waterMockJson.json index ce32ea7..b4b555f 100644 --- a/packages/screen/src/views/DisasterManagement/DisasterReport/waterMockJson.json +++ b/packages/screen/src/views/DisasterManagement/DisasterReport/waterMockJson.json @@ -10,17 +10,13 @@ "contactPhone": "13812345678", "damageCount": 3, "district": "武侯区", - "endStakeLat": "30.658712", - "endStakeLng": "104.082356", "endStakeNo": "K2251+200", "estimatedRecoveryCost": 120.5, "inspectionMileage": 25.6, "isBlocked": true, "needsRecovery": true, - "repairProgress": "抢修中", + "repairProgress": "抢险中", "reporterUnit": "武侯区交通运输局", - "startStakeLat": "30.652145", - "startStakeLng": "104.075632", "startStakeNo": "K2250+300" }, "report": { @@ -28,7 +24,7 @@ "strandedPersonCount": 12, "deadCount": 0, "strandedVehicleCount": 12, - "disposalMeasures": "halfClose,bypass", + "disposalMeasures": "全幅封闭", "actualRecoverTime": "2024-07-17 12:00:00", "expectRecoverTime": "2024-07-18 18:00:00", "injuredCount": 1, From 2d3253ba0e3ae6d557f0bfadbf44b2aa192c332b Mon Sep 17 00:00:00 2001 From: niedongsheng <605973111@qq.com> Date: Fri, 10 Apr 2026 13:56:27 +0800 Subject: [PATCH 15/19] =?UTF-8?q?bugfix:=20=E4=BF=AE=E5=A4=8DH5=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E7=BB=84=E4=BB=B6=E8=BF=94=E5=9B=9E=E7=9A=84=E5=80=BC?= =?UTF-8?q?=E7=BC=BA=E5=B0=91=E7=A7=92=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/mobile/src/components/BaseDatePicker.vue | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/mobile/src/components/BaseDatePicker.vue b/packages/mobile/src/components/BaseDatePicker.vue index 360cfd9..5cdaeaf 100644 --- a/packages/mobile/src/components/BaseDatePicker.vue +++ b/packages/mobile/src/components/BaseDatePicker.vue @@ -55,6 +55,7 @@ + + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/index.js b/packages/screen/src/views/WarningManagement/construction/index.js similarity index 64% rename from packages/screen/src/views/WarningManagement/index.js rename to packages/screen/src/views/WarningManagement/construction/index.js index db57ca7..20722f8 100644 --- a/packages/screen/src/views/WarningManagement/index.js +++ b/packages/screen/src/views/WarningManagement/construction/index.js @@ -2,6 +2,7 @@ import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue"; import { request } from "@/utils/request"; import { useRoute, useRouter } from 'vue-router' import AddDialog from "./addDialog.vue"; +import DetailDrawer from "./detailDrawer.vue"; const tableData = ref([]); // 表格数据 const modelVisible = ref(false); // 弹窗状态 @@ -18,7 +19,7 @@ const model = reactive({ const form = reactive({ }); const INIT_FORM = { - + }; // 抽屉内容 const drawer = reactive({ @@ -35,39 +36,42 @@ const drawerRef = ref(null); // 抽屉实例 const columns = [ { - prop: "xxx", + prop: "headline", label: "预警标题", }, { - prop: "xxx", + // prop: "xxx", label: "预警类型", + formatter: (row) => { + return h(ElText, { style: {} }, '大雾预警'); + } }, { - prop: "xxx", + prop: "createTime", label: "发送时间", }, { - prop: "xxx", + prop: "onset", label: "生效时间", }, { - prop: "xxx", + prop: "receiveTime", label: "接收时间", }, { - prop: "xxx", + prop: "forwardTime", label: "预警转发时间", }, { - prop: "xxx", + prop: "expires", label: "预警结束时间", }, { - prop: "xxx", + prop: "affectedSiteCount", label: "影响数量", }, { - prop: "xxx", + prop: "responseStatus", label: "响应情况", }, { @@ -82,31 +86,17 @@ const columns = [ type: "primary", link: true, onClick: async () => { + openDetailDrawer(row); }, }, () => "详情" ), - h( - ElButton, - { - type: "primary", - link: true, - style: "margin-left: 10px;", - onClick: async () => { - }, - }, - () => "结束预警" - ), ]), }, ] // 过滤条件 -const filterData = reactive({ - title: "", - type: "", - warningLevel: "", -}) +const filterData = reactive({}) // 分页 const pagination = reactive({ current: 1, @@ -122,22 +112,38 @@ const pagination = reactive({ }); // 获取预警列表 -const getTableData = async (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: '', + url: '/snow-ops-platform/weatherWarning/response-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('获取预警列表失败'); + console.error('获取预警列表失败:', error); } } // 预警类型选项 -const typeOptions = [ +const eventTypeOptions = [ { label: "全部", value: "" }, { label: "台风预警", value: "台风预警" }, { label: "暴雨预警", value: "暴雨预警" }, @@ -150,7 +156,7 @@ const typeOptions = [ ]; // 预警级别选项 -const warningLevelOptions = [ +const severityOptions = [ { label: "全部", value: "" }, { label: "红色预警", value: "红色预警" }, { label: "橙色预警", value: "橙色预警" }, @@ -158,6 +164,14 @@ const warningLevelOptions = [ { label: "蓝色预警", value: "蓝色预警" }, ] +// 响应情况选项 +const responseOptions = [ + { label: "全部", value: "" }, + { label: "未响应", value: "未响应" }, + { label: "部分响应", value: "部分响应" }, + { label: "全部响应", value: "全部响应" }, +] + // 打开填报项目弹窗 const openAddDialog = () => { model.title = '填报项目'; @@ -182,6 +196,16 @@ const openAddDialog = () => { modelVisible.value = true; } +// 打开详情弹窗 +const openDetailDrawer = (row) => { + drawer.title = '预警详情'; + drawer.props = { + id: row.id, + }; + drawer.content = DetailDrawer; + drawerVisible.value = true; +} + export default () => { @@ -193,13 +217,25 @@ export default () => { }); }; + onMounted(() => { + getTableData(); + }) + + + watch(filterData, (val) => { + getTableData(filterData); + }, { deep: true }) + return { tableData, filterData, - typeOptions, - warningLevelOptions, + + eventTypeOptions, + severityOptions, + responseOptions, + pagination, columns, gotoLedgerPage, diff --git a/packages/screen/src/views/WarningManagement/construction/index.vue b/packages/screen/src/views/WarningManagement/construction/index.vue new file mode 100644 index 0000000..0e5791a --- /dev/null +++ b/packages/screen/src/views/WarningManagement/construction/index.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/district/addDialog.vue b/packages/screen/src/views/WarningManagement/district/addDialog.vue new file mode 100644 index 0000000..1c1d647 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/district/addDialog.vue @@ -0,0 +1,392 @@ + + + + + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/district/detailDrawer.vue b/packages/screen/src/views/WarningManagement/district/detailDrawer.vue new file mode 100644 index 0000000..8b7c938 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/district/detailDrawer.vue @@ -0,0 +1,159 @@ + + + + + + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/district/index.js b/packages/screen/src/views/WarningManagement/district/index.js new file mode 100644 index 0000000..dd75054 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/district/index.js @@ -0,0 +1,251 @@ +import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue"; +import { request } from "@/utils/request"; +import { useRoute, useRouter } from 'vue-router' +import AddDialog from "./addDialog.vue"; +import DetailDrawer from "./detailDrawer.vue"; + +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: "headline", + label: "预警标题", + }, + { + // prop: "xxx", + label: "预警类型", + formatter: (row) => { + return h(ElText, { style: {} }, '大雾预警'); + } + }, + { + prop: "createTime", + label: "发送时间", + }, + { + prop: "onset", + label: "生效时间", + }, + { + prop: "receiveTime", + label: "接收时间", + }, + { + prop: "forwardTime", + label: "预警转发时间", + }, + { + prop: "expires", + label: "预警结束时间", + }, + { + prop: "affectedSiteCount", + label: "影响数量", + }, + { + prop: "responseStatus", + label: "响应情况", + }, + { + label: "操作", + fixed: "right", + width: 150, + render: (row) => () => + h("div", { class: "action-btns" }, [ + h( + ElButton, + { + type: "primary", + link: true, + onClick: async () => { + openDetailDrawer(row); + }, + }, + () => "详情" + ), + ]), + }, +] + +// 过滤条件 +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/weatherWarning/response-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('获取预警列表失败'); + console.error('获取预警列表失败:', error); + } +} + +// 预警类型选项 +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 openAddDialog = () => { + model.title = '填报项目'; + Object.assign(form, INIT_FORM); + model.props = { + form: form, + }; + model.content = AddDialog; + model.onCancel = () => { + modelVisible.value = false; + }; + model.onConfirm = async () => { + dialogType.value = ''; + await dialogRef?.value?.dynamicComponentRef?.formRef.validate().then(() => { + console.log('@@@@@填报项目', form); + }) + .catch((err) => { + ElMessage.error('请处理表单中的错误项'); + }); + }; + model.width = "70%" + modelVisible.value = true; +} + +// 打开详情弹窗 +const openDetailDrawer = (row) => { + drawer.title = '预警详情'; + drawer.props = { + id: row.id, + }; + drawer.content = DetailDrawer; + drawerVisible.value = true; +} + + + +export default () => { + + const router = useRouter(); + const gotoLedgerPage = () => { + router.push({ + path: '/ledgerManagement2' + }); + }; + + onMounted(() => { + getTableData(); + }) + + + watch(filterData, (val) => { + getTableData(filterData); + }, { deep: true }) + + + + return { + tableData, + filterData, + + eventTypeOptions, + severityOptions, + responseOptions, + + pagination, + columns, + gotoLedgerPage, + + modelVisible, + model, + drawerVisible, + drawer, + dialogRef, + drawerRef, + openAddDialog, + } +} \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/index.vue b/packages/screen/src/views/WarningManagement/district/index.vue similarity index 81% rename from packages/screen/src/views/WarningManagement/index.vue rename to packages/screen/src/views/WarningManagement/district/index.vue index 2712cc9..b8a66c9 100644 --- a/packages/screen/src/views/WarningManagement/index.vue +++ b/packages/screen/src/views/WarningManagement/district/index.vue @@ -10,10 +10,7 @@
驻地台账 - 填报项目 - 导入停工项目 - 导入在建项目台账 - 导出 + 上报项目
@@ -35,10 +32,10 @@ From 3a8ed9ee682c46d618e3f5fb40f365190a3ea88d Mon Sep 17 00:00:00 2001 From: huangchenhao <123673748@qq.com> Date: Mon, 13 Apr 2026 10:21:26 +0800 Subject: [PATCH 19/19] =?UTF-8?q?bugfix:=20=E9=A1=B9=E7=9B=AE=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E8=BF=94=E5=9B=9E=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/screen/src/router/index.js | 2 +- .../business/projectDetailPage.vue | 473 ++++++++++++++++++ 2 files changed, 474 insertions(+), 1 deletion(-) create mode 100644 packages/screen/src/views/ProjectManagement_Rebuild/business/projectDetailPage.vue diff --git a/packages/screen/src/router/index.js b/packages/screen/src/router/index.js index 1ea8b14..0da7fe2 100644 --- a/packages/screen/src/router/index.js +++ b/packages/screen/src/router/index.js @@ -205,7 +205,7 @@ const routes = [ { path: '/projectDetail2/:data?', name: 'projectDetail2', - component: () => import('../views/ProjectManagement_Rebuild/district/projectDetailPage.vue'), + component: () => import('../views/ProjectManagement_Rebuild/business/projectDetailPage.vue'), meta: { title: '项目详情', breadcrumb: true, diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/business/projectDetailPage.vue b/packages/screen/src/views/ProjectManagement_Rebuild/business/projectDetailPage.vue new file mode 100644 index 0000000..b6f918d --- /dev/null +++ b/packages/screen/src/views/ProjectManagement_Rebuild/business/projectDetailPage.vue @@ -0,0 +1,473 @@ + + + + + \ No newline at end of file