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 @@
+
diff --git a/packages/mobile/src/views/DisasterManagement/WaterDisaster/CubeCalculateDialog.vue b/packages/mobile/src/views/DisasterManagement/WaterDisaster/CubeCalculateDialog.vue
deleted file mode 100644
index 234efcb..0000000
--- a/packages/mobile/src/views/DisasterManagement/WaterDisaster/CubeCalculateDialog.vue
+++ /dev/null
@@ -1,172 +0,0 @@
-
-
-
-
-
-
-
- 米
-
-
-
-
-
-
- 米
-
-
-
-
-
-
- 米
-
-
-
-
-
-
- 元
-
-
-
-
-
- 元
-
-
-
-
-
-
-
diff --git a/packages/mobile/src/views/DisasterManagement/WaterDisaster/LossList.vue b/packages/mobile/src/views/DisasterManagement/WaterDisaster/LossList.vue
index 85f0a7f..69aaaf8 100644
--- a/packages/mobile/src/views/DisasterManagement/WaterDisaster/LossList.vue
+++ b/packages/mobile/src/views/DisasterManagement/WaterDisaster/LossList.vue
@@ -1,24 +1,34 @@
-
+
{{ item.unit }}
+
+
+
+ {{ item.unit }}
+
+
+
+
+
添加损失
-
-
+
+
+
+
diff --git a/packages/screen/src/component/FileUpload/PreviewBlock.vue b/packages/screen/src/component/FileUpload/PreviewBlock.vue
new file mode 100644
index 0000000..562f568
--- /dev/null
+++ b/packages/screen/src/component/FileUpload/PreviewBlock.vue
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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..f6ad47e
--- /dev/null
+++ b/packages/screen/src/component/FileUpload/UploadBlock.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+ 选择文件
+
+
+
+
+
+
+
diff --git a/packages/screen/src/component/MyDialog/index.vue b/packages/screen/src/component/MyDialog/index.vue
index f65f55b..afb6386 100644
--- a/packages/screen/src/component/MyDialog/index.vue
+++ b/packages/screen/src/component/MyDialog/index.vue
@@ -24,7 +24,7 @@
diff --git a/packages/screen/src/component/MyDrawer/index.vue b/packages/screen/src/component/MyDrawer/index.vue
index 88237c8..be7784f 100644
--- a/packages/screen/src/component/MyDrawer/index.vue
+++ b/packages/screen/src/component/MyDrawer/index.vue
@@ -15,8 +15,8 @@
diff --git a/packages/screen/src/component/VideoPreviewDialog.vue b/packages/screen/src/component/VideoPreviewDialog.vue
new file mode 100644
index 0000000..9c87841
--- /dev/null
+++ b/packages/screen/src/component/VideoPreviewDialog.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/screen/src/router/index.js b/packages/screen/src/router/index.js
index 6207d7e..0da7fe2 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 = [
@@ -118,17 +117,17 @@ const routes = [
},
component: () => import('../views/ConstructionDepartment/ConstructionDepartment.vue')
},
- // 响应预警
+ // 响应预警 - 建设处
{
path: '/warningManagement',
name: 'warningManagement',
- component: () => import('../views/WarningManagement/index.vue'),
+ component: () => import('../views/WarningManagement/construction/index.vue'),
meta: {
title: '响应预警',
breadcrumb: true
}
},
- // 驻地台账 - 作为独立的页面,但在面包屑中显示为响应预警的子页面
+ // 驻地台账 - 建设处
{
path: '/ledgerManagement',
name: 'ledgerManagement',
@@ -136,23 +135,88 @@ const routes = [
meta: {
title: '驻地台账',
breadcrumb: true,
- parentRoute: 'warningManagement' // 用于在面包屑中建立父子关系
+ parentRoute: 'warningManagement'
}
},
- // 项目管理
+ // 响应预警 - 区县级
+ {
+ path: '/warningManagement2',
+ name: 'warningManagement2',
+ component: () => import('../views/WarningManagement/district/index.vue'),
+ meta: {
+ title: '响应预警',
+ breadcrumb: true
+ }
+ },
+ // 驻地台账 - 区县级
+ {
+ path: '/ledgerManagement2',
+ name: 'ledgerManagement2',
+ component: () => import('../views/LedgerManagement/index.vue'),
+ meta: {
+ title: '驻地台账',
+ breadcrumb: true,
+ parentRoute: 'warningManagement2'
+ }
+ },
+
+ // 项目管理 - 区县
{
path: '/projectManagement',
name: 'projectManagement',
- component: () => import('../views/ProjectManagement_Rebuild/index.vue'),
+ component: () => import('../views/ProjectManagement_Rebuild/district/index.vue'),
meta: {
title: '项目管理',
breadcrumb: true
}
},
+ {
+ path: '/projectAdd/:data?',
+ name: 'projectAdd',
+ component: () => import('../views/ProjectManagement_Rebuild/district/projectAddPage.vue'),
+ meta: {
+ title: '项目填报',
+ breadcrumb: true,
+ parentRoute: 'projectManagement'
+ }
+ },
+ // 项目详情 - 区县版本
+ {
+ path: '/projectDetail/:data?',
+ name: 'projectDetail',
+ component: () => import('../views/ProjectManagement_Rebuild/district/projectDetailPage.vue'),
+ meta: {
+ title: '项目详情',
+ breadcrumb: true,
+ parentRoute: 'projectManagement'
+ }
+ },
+ // 项目管理 - 业务部门
+ {
+ path: '/projectManagement2',
+ name: 'projectManagement2',
+ component: () => import('../views/ProjectManagement_Rebuild/business/index.vue'),
+ meta: {
+ title: '项目管理',
+ breadcrumb: true
+ }
+ },
+ // 项目详情 - 业务部门版本
+ {
+ path: '/projectDetail2/:data?',
+ name: 'projectDetail2',
+ component: () => import('../views/ProjectManagement_Rebuild/business/projectDetailPage.vue'),
+ meta: {
+ title: '项目详情',
+ breadcrumb: true,
+ parentRoute: 'projectManagement2'
+ }
+ },
+
{
path: '/disasterManagement',
name: 'disasterManagement',
- component: () => import('../views/DisasterManagement/DisasterManagement.vue'),
+ component: () => import('../views/DisasterManagement/DisasterManagementPC.vue'),
meta: {
title: '灾害巡检事件',
breadcrumb: true
@@ -161,16 +225,16 @@ const routes = [
{
path: '/disasterReport',
name: 'DisasterReport',
- component: () => import('../views/DisasterManagement/DisasterReport/DisasterReport.vue'),
+ component: () => import('../views/DisasterManagement/DisasterReport/DisasterReportPC.vue'),
meta: {
title: '灾毁事件填报',
breadcrumb: true
}
},
- {
+ {
path: '/waterDisasterDetail',
name: 'WaterDisasterDetail',
- component: () => import('../views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue'),
+ component: () => import('../views/DisasterManagement/DisasterDetail/WaterDisasterDetailPC.vue'),
meta: {
title: '水毁事件详情',
breadcrumb: true
diff --git a/packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterContinueReportPC.vue
similarity index 90%
rename from packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue
rename to packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterContinueReportPC.vue
index 7158c2b..c98f449 100644
--- a/packages/screen/src/views/DisasterManagement/DisasterDetail/ContinueReport.vue
+++ b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterContinueReportPC.vue
@@ -3,19 +3,19 @@
-
- 半幅封闭
- 全副封闭
- 便道通行
- 正常通行
-
+
+
+
+
+
+
@@ -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: {
@@ -216,8 +212,8 @@ const blockedOptions = [
]
const repairProgressOptions = [
- { label: '未抢修', value: '未抢修' },
- { label: '抢修中', value: '抢修中' },
+ { label: '未抢险', value: '未抢险' },
+ { label: '抢险中', value: '抢险中' },
{ label: '已完成', value: '已完成' }
]
@@ -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 69%
rename from packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue
rename to packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetailPC.vue
index 3bb01cd..a37db99 100644
--- a/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetail.vue
+++ b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterDetailPC.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,71 @@
+
+
+
+
+ 现场描述:
+ {{ report.siteDescription || '-' }}
+
+
+ 处置措施:
+ {{ report.disposalMeasures || '-' }}
+
+
+ 实际恢复时间:
+ {{ 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.investedMachinery }}
+
+
+
+
+ 已投入人力:
+ {{ report.investedManpower }}
+
+
+
+
+ 已投入资金:
+ {{ report.investedFunds }}
+
+
+
+
+
+
+ {{ report.showDetail ? '点击关闭详情' : '点击查看详情' }}
+
@@ -274,8 +242,10 @@ 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 './WaterDisasterLossListDetailPC.vue'
+import FileUpload from '@/component/FileUpload/FileUpload.vue'
import mockData from '../DisasterReport/waterMockJson.json'
const router = useRouter()
@@ -307,10 +277,15 @@ 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)
+ }
return item
}) || []
- return reports.reverse()
+ return reports
+ // return reports.reverse()
})
// 是否有填报数据
@@ -328,14 +303,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 +362,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 +379,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 +398,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 +465,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 +579,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/DisasterDetail/WaterDisasterLossListDetailPC.vue b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterLossListDetailPC.vue
new file mode 100644
index 0000000..aad82ff
--- /dev/null
+++ b/packages/screen/src/views/DisasterManagement/DisasterDetail/WaterDisasterLossListDetailPC.vue
@@ -0,0 +1,179 @@
+
+
+
+
+
+ {{ item.lossTypeName }}:
+ {{ getValue(item) }}{{ item.unit }}
+
+
+
+
+ 其它损失描述:
+ {{ getRemark(item) }}
+
+
+
+
+
+
+
+
+
diff --git a/packages/screen/src/views/DisasterManagement/DisasterManagement.vue b/packages/screen/src/views/DisasterManagement/DisasterManagementPC.vue
similarity index 85%
rename from packages/screen/src/views/DisasterManagement/DisasterManagement.vue
rename to packages/screen/src/views/DisasterManagement/DisasterManagementPC.vue
index 68edc96..700557d 100644
--- a/packages/screen/src/views/DisasterManagement/DisasterManagement.vue
+++ b/packages/screen/src/views/DisasterManagement/DisasterManagementPC.vue
@@ -22,9 +22,8 @@
-
-
-
+
+
@@ -87,20 +86,25 @@
{{ scope.$index + 1 }}
-
+
-
-
+
+
-
- {{ row.isBlocked || '—' }}
+
+ {{ row.blocked === true ? '是' : row.blocked === false ? '否' : '—' }}
-
+
+
+ 冰雪灾害
+ 水毁灾害
+
+
@@ -109,20 +113,20 @@
-
+
- 查看
+
—
- 播放
+
—
@@ -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/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 90%
rename from packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue
rename to packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReportPC.vue
index f494c67..d37522d 100644
--- a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue
+++ b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReportPC.vue
@@ -35,8 +35,8 @@
-
-
+
+
@@ -77,8 +77,8 @@
-
-
+
+
@@ -206,35 +206,14 @@
-
+
-
-
-
- 只能上传jpg/png格式,且不超过500kb
+
-
+
-
- 选择文件
-
- 仅支持20s内的视频,不超过20MB
-
-
-
+
@@ -307,24 +286,33 @@
-
- 台/班
+
+
+ 台/班
+
+
-
- 人次
+
+
+ 人次
+
+
-
- 万元
+
+
+ 万元
+
+
@@ -351,7 +339,7 @@
-
+
万元
@@ -383,9 +371,9 @@ 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 { el } from 'element-plus/es/locale/index.mjs'
+import FileUpload from '@/component/FileUpload/FileUpload.vue'
const router = useRouter()
const route = useRoute()
@@ -402,6 +390,8 @@ const disposalMeasuresArray = ref([])
const imageFileList = ref([])
const videoFileList = ref([])
+const eventType = ref('水毁事件')
+
const formData = reactive({
// 顶层字段
occurLocation: null, // 发生地点/路况位置
@@ -417,17 +407,13 @@ const formData = reactive({
contactPhone: null, // 联系电话
damageCount: null, // 水毁处数
district: null, // 上报区县
- endStakeLat: null, // 止点纬度
- endStakeLng: null, // 止点经度
endStakeNo: null, // 止点桩号
estimatedRecoveryCost: null, // 恢复重建预估费用
inspectionMileage: null, // 巡查里程
isBlocked: null, // 是否阻断
needsRecovery: null, // 是否需要恢复重建
- repairProgress: null, // 抢修进度
+ repairProgress: null, // 抢险进度
reporterUnit: null, // 填报单位
- startStakeLat: null, // 起点纬度
- startStakeLng: null, // 起点经度
startStakeNo: null // 起点桩号
},
@@ -635,7 +621,12 @@ const handleSubmit = async () => {
// 加载编辑数据
const loadEditData = async () => {
- initFormData(mockData)
+
+ if(route.query.mock) {
+ initFormData(mockData)
+ } else {
+ initFormData({})
+ }
}
onMounted(() => {
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,
diff --git a/packages/screen/src/views/LedgerManagement/index.js b/packages/screen/src/views/LedgerManagement/index.js
index b386f22..784c27d 100644
--- a/packages/screen/src/views/LedgerManagement/index.js
+++ b/packages/screen/src/views/LedgerManagement/index.js
@@ -1,6 +1,7 @@
import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue";
import { request } from "@/utils/request";
import { useRoute, useRouter } from 'vue-router'
+import { ElMessage } from "element-plus";
const tableData = ref([]); // 表格数据
@@ -18,7 +19,7 @@ const model = reactive({
const form = reactive({
});
const INIT_FORM = {
-
+
};
// 抽屉内容
const drawer = reactive({
@@ -35,101 +36,105 @@ const drawerRef = ref(null); // 抽屉实例
const columns = [
{
- prop: "xxx",
+ prop: "county",
label: "所属区县",
},
{
- prop: "xxx",
+ prop: "projectName",
label: "项目名称",
},
{
- prop: "xxx",
+ prop: "siteName",
label: "驻地名称",
},
{
- prop: "xxx",
+ prop: "siteType",
label: "驻地类型",
},
{
- prop: "xxx",
+ prop: "coordinatePoint",
label: "坐标点位",
},
{
- prop: "xxx",
+ prop: "subProjectName",
label: "所属项目名称",
},
{
- prop: "xxx",
+ prop: "projectType",
label: "项目类型",
},
{
- prop: "xxx",
+ prop: "constructionUnit",
label: "建设单位",
},
{
- prop: "xxx",
+ prop: "constructionCompany",
label: "施工单位",
},
{
- prop: "xxx",
+ prop: "siteAddress",
label: "驻地地址",
},
{
- prop: "xxx",
+ prop: "town",
+ label: "乡镇名称",
+ },
+ {
+ prop: "streetName",
+ label: "街道名称",
+ },
+ {
+ prop: "administrativeRegion",
label: "行政区域",
},
{
- prop: "xxx",
+ prop: "sitePopulation",
label: "驻地人数",
},
{
- prop: "xxx",
+ prop: "riskLevel",
label: "驻地风险等级",
},
{
- prop: "xxx",
+ prop: "buildingType",
label: "房建类型",
},
{
- prop: "xxx",
+ prop: "relocationStatus",
label: "搬迁状态",
},
{
- prop: "xxx",
label: "吹哨人/电话",
+ formatter: (row) => `${row.whistleblowerName || ''}/${row.whistleblowerPhone || ''}`,
},
{
- prop: "xxx",
label: "建设单位包保责任人/电话",
+ formatter: (row) => `${row.ownerResponsiblePerson || ''}/${row.ownerResponsiblePhone || ''}`,
},
{
- prop: "xxx",
label: "施工单位包保责任人/电话",
+ formatter: (row) => `${row.constructorResponsiblePerson || ''}/${row.constructorResponsiblePhone || ''}`,
},
{
- prop: "xxx",
label: "驻地包保责任人/电话",
+ formatter: (row) => `${row.siteResponsiblePerson || ''}/${row.siteResponsiblePhone || ''}`,
},
{
- prop: "xxx",
label: "区县级包保责任人/电话",
+ formatter: (row) => `${row.districtResponsiblePerson || ''}/${row.districtResponsiblePhone || ''}`,
},
{
- prop: "xxx",
label: "市级包保责任人/电话",
+ formatter: (row) => `${row.cityResponsiblePerson || ''}/${row.cityResponsiblePhone || ''}`,
},
{
- prop: "xxx",
+ prop: "remarks",
label: "备注",
},
]
// 过滤条件
-const filterData = reactive({
- title: "",
- type: "",
- warningLevel: "",
-})
+const filterData = reactive({})
// 分页
const pagination = reactive({
current: 1,
@@ -145,17 +150,33 @@ 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/site-ledger/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);
}
}
@@ -182,8 +203,31 @@ const warningLevelOptions = [
]
+const exportExcel = async () => {
+ try {
+ const res = await request({
+ url: '/snow-ops-platform/site-ledger/export',
+ method: 'GET'
+ })
+ } catch (error) {
+
+ }
+}
+
+
export default () => {
+
+ onMounted(() => {
+ getTableData();
+ })
+
+
+ watch(filterData, (val) => {
+ getTableData(filterData);
+ }, { deep: true })
+
+
return {
modelVisible,
model,
@@ -197,5 +241,7 @@ export default () => {
filterData,
pagination,
columns,
+
+ exportExcel,
}
}
\ No newline at end of file
diff --git a/packages/screen/src/views/LedgerManagement/index.vue b/packages/screen/src/views/LedgerManagement/index.vue
index 868917f..ec6de9c 100644
--- a/packages/screen/src/views/LedgerManagement/index.vue
+++ b/packages/screen/src/views/LedgerManagement/index.vue
@@ -1,37 +1,37 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 导出
+ 导出
导入
+
+
+
+
+ 基本信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 公里
+
+
+
+
+
+
+
+
+ 方/万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+ 自费重修
+ 申报重修
+
+
+
+
+
+
+
+ 实施情况
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/business/index.js b/packages/screen/src/views/ProjectManagement_Rebuild/business/index.js
new file mode 100644
index 0000000..0625aaa
--- /dev/null
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/business/index.js
@@ -0,0 +1,447 @@
+import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue";
+import { request } from "@/utils/request";
+import { useRoute, useRouter } from 'vue-router'
+import ExamineDialog from "./examineDialog.vue";
+import RejectDialog from './rejectDialog.vue';
+
+const tableData = ref([]); // 表格数据
+const modelVisible = ref(false); // 弹窗状态
+const drawerVisible = ref(false); // 抽屉状态
+// 弹窗内容
+const model = reactive({
+ title: '',
+ content: null,
+ props: {},
+ onCancel: null,
+ onConfirm: null,
+ width: '',
+ footerPosition: null,
+ onCancelType: null,
+ onConfirmName: null,
+ onCancelName: null,
+ tagContent: null,
+ tagType: null,
+});
+const form = reactive({
+});
+// 抽屉内容
+const drawer = reactive({
+ title: '',
+ content: null,
+ props: {},
+ onCancel: null,
+ onConfirm: null,
+ direction: 'rtl',
+ size: '50%'
+});
+const dialogRef = ref(null); // 弹窗实例
+const drawerRef = ref(null); // 抽屉实例
+
+// 第二个弹窗
+const model2 = reactive({
+ title: '',
+ content: null,
+ props: {},
+ onCancel: null,
+ onConfirm: null,
+ width: '',
+ footerPosition: null,
+ onCancelType: null,
+ onConfirmName: null,
+ onCancelName: null,
+ tagContent: null,
+ tagType: null,
+});
+const modelVisible2 = ref(false);
+const dialogRef2 = ref(null);
+
+
+
+// 过滤条件
+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/recovery/list',
+ method: "GET",
+ params: {
+ ...filteredParams,
+ submitTimeStart: filteredParams?.submitTimeStart ? filteredParams.submitTimeStart + `-01-01 00:00:00` : null,
+ 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 rejectProject = async () => {
+ try {
+ const loading = ElLoading.service({
+ lock: true,
+ text: '操作中',
+ background: 'rgba(0, 0, 0, 0.7)',
+ })
+ const res = await request({
+ url: '/snow-ops-platform/recovery/approve',
+ method: 'POST',
+ data: {
+ id: form.id,
+ approveLevel: 2,
+ isPass: false,
+ rejectReason: form.rejectReason,
+ }
+ })
+ loading.close();
+ if (res.code === '00000') {
+ ElMessage.success('操作成功');
+ modelVisible.value = false;
+ modelVisible2.value = false;
+ getTableData(filterData);
+ }
+ } catch (error) {
+ ElMessage.error('操作失败');
+ console.error('驳回项目失败:', error);
+ }
+}
+
+// 审批通过项目
+const approveProject = async () => {
+ try {
+ const loading = ElLoading.service({
+ lock: true,
+ text: '操作中',
+ background: 'rgba(0, 0, 0, 0.7)',
+ })
+ const res = await request({
+ url: '/snow-ops-platform/recovery/approve',
+ method: 'POST',
+ data: {
+ id: form.id,
+ approveLevel: 2,
+ isPass: true,
+ }
+ })
+ loading.close();
+ if (res.code === '00000') {
+ ElMessage.success('操作成功');
+ modelVisible.value = false;
+ modelVisible2.value = false;
+ getTableData(filterData);
+ }
+ } catch (error) {
+ ElMessage.error('操作失败');
+ console.error('审批项目失败:', error);
+ }
+}
+
+// 获取项目详情
+const getDetailData = async (id) => {
+ try {
+ const res = await request({
+ url: `/snow-ops-platform/recovery/getById`,
+ method: 'GET',
+ params: {
+ id: id,
+ }
+ });
+ if (res.code === '00000') {
+ return res.data;
+ } else {
+ throw new Error(res.message);
+ }
+ } catch (error) {
+ ElMessage.error('获取项目详情失败');
+ console.error('获取项目详情失败:', error);
+ }
+}
+
+
+
+
+
+export default () => {
+
+ const router = useRouter();
+
+ // 记录访问的项目管理模块
+ onMounted(() => {
+ sessionStorage.setItem('lastVisitedProjectManagement', 'projectManagement2')
+ })
+
+ const columns = [
+ {
+ prop: "districtName",
+ label: "区县",
+ },
+ {
+ prop: "routeNo",
+ label: "路线编码",
+ },
+ // {
+ // prop: "disasterType",
+ // label: "灾害类型",
+ // },
+ {
+ prop: "startStakeNo",
+ label: "起点桩号",
+ },
+ {
+ prop: "endStakeNo",
+ label: "止点桩号",
+ },
+ {
+ prop: "implementMileage",
+ label: "实施里程(公里)",
+ },
+ // {
+ // prop: "technicalGrade",
+ // label: "技术等级",
+ // },
+ {
+ prop: "totalInvestment",
+ label: "总投资金额(万元)",
+ },
+ {
+ prop: "estimatedCost",
+ label: "投资估算(万元)",
+ },
+ {
+ prop: "subsidyAmount",
+ label: "补助金额(万元)",
+ },
+ {
+ prop: "fundingSource",
+ label: "资金来源",
+ },
+ {
+ prop: "startTime",
+ label: "开工或预计开工时间",
+ },
+ {
+ prop: "endTime",
+ label: "完工或预计完工时间",
+ },
+ {
+ prop: "projectProgress",
+ label: "项目进度情况",
+ },
+ // {
+ // prop: "reportStatus",
+ // label: "申报状态",
+ // formatter: (row) => {
+ // const colorMap = {
+ // 0: '#409EFF', // 蓝色 - 未申报
+ // 1: '#67C23A', // 绿色 - 已申报
+ // };
+ // const textMap = {
+ // 0: '未申报',
+ // 1: '已申报',
+ // };
+ // const status = row.reportStatus;
+ // const color = colorMap[status] || '#909399';
+ // const text = textMap[status] || '未知状态';
+ // return h(ElText, { style: { color } }, text);
+ // }
+ // },
+ {
+ prop: "approvalStatus",
+ width: 150,
+ label: "审批状态",
+ formatter: (row) => {
+ const colorMap = {
+ 0: '#409EFF', // 蓝色 - 待区县审批
+ 1: '#67C23A', // 绿色 - 区县审批通过
+ 2: '#F56C6C', // 红色 - 区县审批驳回
+ 3: '#67C23A', // 绿色 - 业务部门审批通过
+ 4: '#F56C6C', // 红色 - 业务部门审批驳回
+ };
+ const textMap = {
+ 0: '待区县审批',
+ 1: '区县审批通过(待业务部门审批)',
+ 2: '区县审批驳回',
+ 3: '业务部门审批通过',
+ 4: '业务部门审批驳回',
+ };
+ const status = row.approvalStatus;
+ const color = colorMap[status] || '#909399';
+ const text = textMap[status] || '未知状态';
+ return h(ElText, { style: { color } }, text);
+ }
+ },
+ {
+ prop: "updateTime",
+ label: "更新日期",
+ },
+ {
+ label: "操作",
+ fixed: "right",
+ width: 150,
+ render: (row) => () =>
+ h("div", { class: "action-btns" }, [
+ row.approvalStatus === 1 ? h(
+ ElButton,
+ {
+ type: "primary",
+ link: true,
+ onClick: async () => {
+ openExamineDialog(row);
+ },
+ },
+ () => "审批"
+ ) : null,
+ h(
+ ElButton,
+ {
+ type: "primary",
+ link: true,
+ style: row.approvalStatus === 1 ? "margin-left: 10px;" : "",
+ onClick: async () => {
+ gotoDetaillPage(row);
+ },
+ },
+ () => "详情"
+ ),
+ ]),
+ },
+ ]
+
+ // 打开审批弹窗
+ const openExamineDialog = async (row) => {
+ const data = await getDetailData(row.id)
+ model.title = '项目审批';
+ Object.assign(form, data);
+ model.props = {
+ form: form,
+ };
+ model.content = ExamineDialog;
+ model.onCancel = () => {
+ model2.title = '驳回原因';
+ model2.props = {
+ form: form,
+ }
+ model2.content = RejectDialog;
+ model2.onCancel = () => {
+ modelVisible2.value = false;
+ }
+ model2.onConfirm = async () => {
+ await dialogRef2?.value?.dynamicComponentRef?.formRef.validate().then(async () => {
+ await rejectProject()
+ })
+ .catch((err) => {
+ ElMessage.error('请处理表单中的错误项');
+ });
+
+ }
+ model2.width = '30%'
+ model2.footerPosition = 'center'
+ model2.onConfirmName = '确定'
+ model2.onCancelName = '取消'
+ modelVisible2.value = true;
+ };
+ model.onConfirm = async () => {
+ await dialogRef?.value?.dynamicComponentRef?.formRef.validate().then(async () => {
+ try {
+ await ElMessageBox.confirm(
+ '确定该项目申请通过恢复重建?',
+ '审批确认',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ }
+ );
+ await approveProject();
+ } catch {
+ ElMessage.info('已取消审批');
+ }
+ })
+ .catch((err) => {
+ ElMessage.error('请处理表单中的错误项');
+ });
+ };
+ model.width = "50%"
+ model.footerPosition = 'flex-end'
+ model.onCancelType = 'danger'
+ model.onConfirmName = '审批通过'
+ model.onCancelName = '审批驳回'
+ // model.tagType = 'warning'
+ // model.tagContent = '测试'
+ modelVisible.value = true;
+ }
+
+ // 跳转至详情页面
+ const gotoDetaillPage = (row) => {
+ router.push({
+ name: 'projectDetail2',
+ params: {
+ data: encodeURIComponent(JSON.stringify(row.id))
+ }
+ })
+ }
+
+ onMounted(() => {
+ getTableData();
+ })
+
+
+ watch(filterData, (val) => {
+ getTableData(filterData);
+ }, { deep: true })
+
+
+ return {
+ tableData,
+ filterData,
+ pagination,
+ columns,
+
+ modelVisible,
+ model,
+ drawerVisible,
+ drawer,
+ dialogRef,
+ drawerRef,
+ openExamineDialog,
+
+ model2,
+ modelVisible2,
+ dialogRef2,
+ }
+}
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/index.vue b/packages/screen/src/views/ProjectManagement_Rebuild/business/index.vue
similarity index 59%
rename from packages/screen/src/views/ProjectManagement_Rebuild/index.vue
rename to packages/screen/src/views/ProjectManagement_Rebuild/business/index.vue
index 66bc244..8dbc588 100644
--- a/packages/screen/src/views/ProjectManagement_Rebuild/index.vue
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/business/index.vue
@@ -1,8 +1,8 @@
-
+
@@ -19,10 +19,16 @@
:onConfirm="script.model?.onConfirm" :onCancel="script.model?.onCancel" ref="dialogRef"
:width="script.model?.width" :footer-position="script.model?.footerPosition"
:onCancelType="script.model?.onCancelType" :onConfirmName="script.model?.onConfirmName"
- :onCancelName="script.model?.onCancelName"
- :tagContent="script.model?.tagContent"
- :tagType="script.model?.tagType"
- >
+ :onCancelName="script.model?.onCancelName" :tagContent="script.model?.tagContent"
+ :tagType="script.model?.tagType">
+
+
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/business/rejectDialog.vue b/packages/screen/src/views/ProjectManagement_Rebuild/business/rejectDialog.vue
new file mode 100644
index 0000000..bdaf278
--- /dev/null
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/business/rejectDialog.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/district/examineDialog.vue b/packages/screen/src/views/ProjectManagement_Rebuild/district/examineDialog.vue
new file mode 100644
index 0000000..0795876
--- /dev/null
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/district/examineDialog.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 公里
+
+
+
+
+
+
+
+
+ 方/万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+ 自费重修
+ 申报重修
+
+
+
+
+
+
+
+
+
+
+
\ 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
new file mode 100644
index 0000000..ce2a45b
--- /dev/null
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/district/index.js
@@ -0,0 +1,399 @@
+import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue";
+import { request } from "@/utils/request";
+import { useRoute, useRouter } from 'vue-router'
+import ExamineDialog from "./examineDialog.vue";
+import RejectDialog from './rejectDialog.vue';
+import { ElLoading, ElText } from 'element-plus'
+
+const tableData = ref([]); // 表格数据
+const modelVisible = ref(false); // 弹窗状态
+const drawerVisible = ref(false); // 抽屉状态
+// 弹窗内容
+const model = reactive({
+ title: '',
+ content: null,
+ props: {},
+ onCancel: null,
+ onConfirm: null,
+ width: '',
+ footerPosition: null,
+ onCancelType: null,
+ onConfirmName: null,
+ onCancelName: null,
+ tagContent: null,
+ tagType: null,
+});
+const form = reactive({
+});
+// 抽屉内容
+const drawer = reactive({
+ title: '',
+ content: null,
+ props: {},
+ onCancel: null,
+ onConfirm: null,
+ direction: 'rtl',
+ size: '50%'
+});
+const dialogRef = ref(null); // 弹窗实例
+const drawerRef = ref(null); // 抽屉实例
+
+// 第二个弹窗
+const model2 = reactive({
+ title: '',
+ content: null,
+ props: {},
+ onCancel: null,
+ onConfirm: null,
+ width: '',
+ footerPosition: null,
+ onCancelType: null,
+ onConfirmName: null,
+ onCancelName: null,
+ tagContent: null,
+ tagType: null,
+});
+const modelVisible2 = ref(false);
+const dialogRef2 = ref(null);
+
+
+
+// 过滤条件
+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/recovery/list',
+ method: "GET",
+ params: {
+ ...filteredParams,
+ submitTimeStart: filteredParams?.submitTimeStart ? filteredParams.submitTimeStart + `-01-01 00:00:00` : null,
+ 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 rejectProject = async () => {
+ try {
+ const loading = ElLoading.service({
+ lock: true,
+ text: '操作中',
+ background: 'rgba(0, 0, 0, 0.7)',
+ })
+ const res = await request({
+ url: '/snow-ops-platform/recovery/approve',
+ method: 'POST',
+ data: {
+ id: form.id,
+ approveLevel: 1,
+ isPass: false,
+ rejectReason: form.rejectReason,
+ }
+ })
+ loading.close();
+ if (res.code === '00000') {
+ ElMessage.success('操作成功');
+ modelVisible.value = false;
+ modelVisible2.value = false;
+ getTableData(filterData);
+ }
+ } catch (error) {
+ ElMessage.error('操作失败');
+ console.error('驳回项目失败:', error);
+ }
+}
+
+// 获取项目详情
+const getDetailData = async (id) => {
+ try {
+ const res = await request({
+ url: `/snow-ops-platform/recovery/getById`,
+ method: 'GET',
+ params: {
+ id: id,
+ }
+ });
+ if (res.code === '00000') {
+ return res.data;
+ } else {
+ throw new Error(res.message);
+ }
+ } catch (error) {
+ ElMessage.error('获取项目详情失败');
+ console.error('获取项目详情失败:', error);
+ }
+}
+
+
+
+
+
+export default () => {
+
+ const router = useRouter();
+
+ // 记录访问的项目管理模块
+ onMounted(() => {
+ sessionStorage.setItem('lastVisitedProjectManagement', 'projectManagement')
+ })
+
+ const columns = [
+ {
+ prop: "districtName",
+ label: "区县",
+ },
+ {
+ prop: "routeNo",
+ label: "路线编码",
+ },
+ {
+ prop: "disasterType",
+ label: "灾害类型",
+ },
+ {
+ prop: "startStakeNo",
+ label: "起点桩号",
+ },
+ {
+ prop: "endStakeNo",
+ label: "止点桩号",
+ },
+ {
+ prop: "implementMileage",
+ label: "实施里程(公里)",
+ },
+ {
+ prop: "technicalGrade",
+ label: "技术等级",
+ },
+ {
+ prop: "totalInvestment",
+ label: "总投资金额(万元)",
+ },
+ {
+ prop: "estimatedCost",
+ label: "投资估算(万元)",
+ },
+ {
+ prop: "startTime",
+ label: "开工或预计开工时间",
+ },
+ {
+ prop: "endTime",
+ label: "完工或预计完工时间",
+ },
+ {
+ prop: "reportStatus",
+ label: "申报状态",
+ formatter: (row) => {
+ const colorMap = {
+ 0: '#409EFF', // 蓝色 - 未申报
+ 1: '#67C23A', // 绿色 - 已申报
+ };
+ const textMap = {
+ 0: '未申报',
+ 1: '已申报',
+ };
+ const status = row.reportStatus;
+ const color = colorMap[status] || '#909399';
+ const text = textMap[status] || '未知状态';
+ return h(ElText, { style: { color } }, text);
+ }
+ },
+ {
+ prop: "approvalStatus",
+ width: 150,
+ label: "审批状态",
+ formatter: (row) => {
+ const colorMap = {
+ 0: '#409EFF', // 蓝色 - 待区县审批
+ 1: '#67C23A', // 绿色 - 区县审批通过
+ 2: '#F56C6C', // 红色 - 区县审批驳回
+ 3: '#67C23A', // 绿色 - 业务部门审批通过
+ 4: '#F56C6C', // 红色 - 业务部门审批驳回
+ };
+ const textMap = {
+ 0: '待区县审批',
+ 1: '区县审批通过(待业务部门审批)',
+ 2: '区县审批驳回',
+ 3: '业务部门审批通过',
+ 4: '业务部门审批驳回',
+ };
+ const status = row.approvalStatus;
+ const color = colorMap[status] || '#909399';
+ const text = textMap[status] || '未知状态';
+ return h(ElText, { style: { color } }, text);
+ }
+ },
+ {
+ prop: "updateTime",
+ label: "更新日期",
+ },
+ {
+ label: "操作",
+ fixed: "right",
+ width: 150,
+ render: (row) => () =>
+ h("div", { class: "action-btns" }, [
+ row.approvalStatus === 0 ? h(
+ ElButton,
+ {
+ type: "primary",
+ link: true,
+ onClick: async () => {
+ openExamineDialog(row);
+ },
+ },
+ () => "审批"
+ ) : null,
+ h(
+ ElButton,
+ {
+ type: "primary",
+ link: true,
+ style: row.approvalStatus === 0 ? "margin-left: 10px;" : "",
+ onClick: async () => {
+ gotoDetaillPage(row);
+ },
+ },
+ () => "详情"
+ ),
+ ]),
+ },
+ ]
+
+ // 打开审批弹窗
+ const openExamineDialog = async (row) => {
+ const data = await getDetailData(row.id)
+ model.title = '项目审批';
+ Object.assign(form, data);
+ model.props = {
+ form: form,
+ };
+ model.content = ExamineDialog;
+ model.onCancel = () => {
+ model2.title = '驳回原因';
+ model2.props = {
+ form: form,
+ }
+ model2.content = RejectDialog;
+ model2.onCancel = () => {
+ modelVisible2.value = false;
+ }
+ model2.onConfirm = async () => {
+ await dialogRef2?.value?.dynamicComponentRef?.formRef.validate().then(async () => {
+ await rejectProject()
+ })
+ .catch((err) => {
+ ElMessage.error('请处理表单中的错误项');
+ });
+
+ }
+ model2.width = '30%'
+ model2.footerPosition = 'center'
+ model2.onConfirmName = '确定'
+ model2.onCancelName = '取消'
+ modelVisible2.value = true;
+ };
+ model.onConfirm = async () => {
+ await dialogRef?.value?.dynamicComponentRef?.formRef.validate().then(() => {
+ router.push({
+ name: 'projectAdd',
+ params: {
+ data: encodeURIComponent(JSON.stringify(form)),
+ }
+ })
+ modelVisible.value = false;
+ })
+ .catch((err) => {
+ ElMessage.error('请处理表单中的错误项');
+ });
+ };
+ model.width = "50%"
+ model.footerPosition = 'flex-end'
+ model.onCancelType = 'danger'
+ model.onConfirmName = '审批通过'
+ model.onCancelName = '审批驳回'
+ // model.tagType = 'warning'
+ // model.tagContent = '测试'
+ modelVisible.value = true;
+ }
+
+ // 跳转至详情页面
+ const gotoDetaillPage = (row) => {
+ router.push({
+ name: 'projectDetail',
+ params: {
+ data: encodeURIComponent(JSON.stringify(row.id))
+ },
+ })
+ }
+
+ onMounted(() => {
+ getTableData();
+ })
+
+
+ watch(filterData, (val) => {
+ getTableData(filterData);
+ }, { deep: true })
+
+
+ return {
+ tableData,
+ filterData,
+ pagination,
+ columns,
+
+ modelVisible,
+ model,
+ drawerVisible,
+ drawer,
+ dialogRef,
+ drawerRef,
+ openExamineDialog,
+
+ model2,
+ modelVisible2,
+ dialogRef2,
+ }
+}
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/district/index.vue b/packages/screen/src/views/ProjectManagement_Rebuild/district/index.vue
new file mode 100644
index 0000000..8dbc588
--- /dev/null
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/district/index.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/district/projectAddPage.vue b/packages/screen/src/views/ProjectManagement_Rebuild/district/projectAddPage.vue
new file mode 100644
index 0000000..f8ed36b
--- /dev/null
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/district/projectAddPage.vue
@@ -0,0 +1,453 @@
+
+
+
+
+
+ 基本信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 公里
+
+
+
+
+
+
+
+
+ 方/万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+ 自费重修
+ 申报重修
+
+
+
+
+
+ 实施情况
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/district/projectDetailPage.vue b/packages/screen/src/views/ProjectManagement_Rebuild/district/projectDetailPage.vue
new file mode 100644
index 0000000..d06d763
--- /dev/null
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/district/projectDetailPage.vue
@@ -0,0 +1,473 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/district/rejectDialog.vue b/packages/screen/src/views/ProjectManagement_Rebuild/district/rejectDialog.vue
new file mode 100644
index 0000000..bdaf278
--- /dev/null
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/district/rejectDialog.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue b/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue
deleted file mode 100644
index 16207f9..0000000
--- a/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue
+++ /dev/null
@@ -1,289 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 自费重修
- 申报重修
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/index.js b/packages/screen/src/views/ProjectManagement_Rebuild/index.js
deleted file mode 100644
index c07a8c8..0000000
--- a/packages/screen/src/views/ProjectManagement_Rebuild/index.js
+++ /dev/null
@@ -1,235 +0,0 @@
-import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue";
-import { request } from "@/utils/request";
-import { useRoute, useRouter } from 'vue-router'
-import ExamineDialog from "./examineDialog.vue";
-
-const tableData = ref([]); // 表格数据
-const modelVisible = ref(false); // 弹窗状态
-const drawerVisible = ref(false); // 抽屉状态
-// 弹窗内容
-const model = reactive({
- title: '',
- content: null,
- props: {},
- onCancel: null,
- onConfirm: null,
- width: '',
- footerPosition: null,
- onCancelType: null,
- onConfirmName: null,
- onCancelName: null,
- tagContent: null,
- tagType: null,
-});
-const form = reactive({
-});
-const INIT_FORM = {
- project: {},
- fileList: []
-};
-// 抽屉内容
-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: "districtName",
- label: "区县",
- },
- {
- prop: "routeNo",
- label: "路线编码",
- },
- {
- prop: "disasterType",
- label: "灾害类型",
- },
- {
- prop: "startStakeNo",
- label: "起点桩号",
- },
- {
- prop: "endStakeNo",
- label: "止点桩号",
- },
- {
- prop: "implementMileage",
- label: "实施里程(公里)",
- },
- {
- prop: "technicalGrade",
- label: "技术等级",
- },
- {
- prop: "totalInvestment",
- label: "总投资金额(万元)",
- },
- {
- prop: "estimatedCost",
- label: "投资估算(万元)",
- },
- {
- prop: "startTime",
- label: "开工或预计开工时间",
- },
- {
- prop: "endTime",
- label: "完工或预计完工时间",
- },
- {
- prop: "approvalStatus",
- label: "审批状态",
- formatter: (row) => {
- const statusMap = {
- 0: '待审批',
- 1: '审批通过',
- 2: '审批驳回'
- };
- return statusMap[row.approvalStatus] || '未知状态';
- }
- },
- {
- prop: "updateTime",
- label: "更新日期",
- },
- {
- label: "操作",
- fixed: "right",
- width: 150,
- render: (row) => () =>
- h("div", { class: "action-btns" }, [
- h(
- ElButton,
- {
- type: "primary",
- link: true,
- onClick: async () => {
- },
- },
- () => "审批"
- ),
- h(
- ElButton,
- {
- type: "primary",
- link: true,
- style: "margin-left: 10px;",
- onClick: async () => {
- },
- },
- () => "详情"
- ),
- ]),
- },
-]
-
-// 过滤条件
-const filterData = reactive({
- submitTimeStart: "",
- routeNo: "",
-})
-// 分页
-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 res = await request({
- url: '/snow-ops-platform/recovery/list',
- method: "GET",
- params: {
- ...filterData,
- submitTimeStart: filterData.submitTimeStart ? filterData.submitTimeStart+`-01-01 00:00:00` : null,
- pageNum: pagination.current,
- pageSize: pagination.pageSize,
- }
- })
- } catch (error) {
- console.error('获取项目列表失败:', error);
- }
-}
-
-
-// 打开审批弹窗
-const openExamineDialog = async () => {
- model.title = '项目审批';
- Object.assign(form, INIT_FORM);
- model.props = {
- form: form,
- };
- model.content = ExamineDialog;
- 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 = "50%"
- model.footerPosition = 'flex-end'
- model.onCancelType = 'danger'
- model.onConfirmName = '审批通过'
- model.onCancelName = '审批驳回'
- // model.tagType = 'warning'
- // model.tagContent = '测试'
- modelVisible.value = true;
-}
-
-
-
-
-
-export default () => {
-
- const router = useRouter();
-
- onMounted(() => {
- getTableData();
- })
-
-
- watch(filterData, (val) => {
- getTableData(filterData);
- }, { deep: true })
-
-
- return {
- tableData,
- filterData,
- pagination,
- columns,
-
- modelVisible,
- model,
- drawerVisible,
- drawer,
- dialogRef,
- drawerRef,
- openExamineDialog,
- }
-}
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue b/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue
deleted file mode 100644
index 4e453e2..0000000
--- a/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/packages/screen/src/views/WarningManagement/addDialog.vue b/packages/screen/src/views/WarningManagement/construction/addDialog.vue
similarity index 100%
rename from packages/screen/src/views/WarningManagement/addDialog.vue
rename to packages/screen/src/views/WarningManagement/construction/addDialog.vue
diff --git a/packages/screen/src/views/WarningManagement/construction/detailDrawer.vue b/packages/screen/src/views/WarningManagement/construction/detailDrawer.vue
new file mode 100644
index 0000000..8b7c938
--- /dev/null
+++ b/packages/screen/src/views/WarningManagement/construction/detailDrawer.vue
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+ {{ detailData.headline }}
+ {{ '大雾预警' }}
+ {{ detailData.createTime }}
+ {{ detailData.onset }}
+ {{ detailData.receiveTime }}
+ {{ detailData.forwardTime }}
+ {{ detailData.expires }}
+ {{ detailData.description }}
+ {{ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+ {{ detailData.headline }}
+ {{ '大雾预警' }}
+ {{ detailData.createTime }}
+ {{ detailData.onset }}
+ {{ detailData.receiveTime }}
+ {{ detailData.forwardTime }}
+ {{ detailData.expires }}
+ {{ detailData.description }}
+ {{ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@