From b5396097ea4de3de1611883be349f34ef71ce911 Mon Sep 17 00:00:00 2001 From: huangchenhao <123673748@qq.com> Date: Mon, 13 Apr 2026 14:04:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=93=8D=E5=BA=94=E9=A2=84=E8=AD=A6=20?= =?UTF-8?q?=E6=B3=95=E8=A7=84=E5=A4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/screen/src/router/index.js | 22 + .../WarningManagement/construction/index.vue | 10 +- .../WarningManagement/district/index.vue | 14 +- .../views/WarningManagement/law/addDialog.vue | 392 ++++++++++++++++++ .../WarningManagement/law/detailDrawer.vue | 159 +++++++ .../src/views/WarningManagement/law/index.js | 251 +++++++++++ .../src/views/WarningManagement/law/index.vue | 61 +++ 7 files changed, 898 insertions(+), 11 deletions(-) create mode 100644 packages/screen/src/views/WarningManagement/law/addDialog.vue create mode 100644 packages/screen/src/views/WarningManagement/law/detailDrawer.vue create mode 100644 packages/screen/src/views/WarningManagement/law/index.js create mode 100644 packages/screen/src/views/WarningManagement/law/index.vue diff --git a/packages/screen/src/router/index.js b/packages/screen/src/router/index.js index 0da7fe2..815e68b 100644 --- a/packages/screen/src/router/index.js +++ b/packages/screen/src/router/index.js @@ -159,6 +159,28 @@ const routes = [ parentRoute: 'warningManagement2' } }, + // 响应预警 - 法规处 + { + path: '/warningManagement3', + name: 'warningManagement3', + component: () => import('../views/WarningManagement/law/index.vue'), + meta: { + title: '响应预警', + breadcrumb: true + } + }, + // 线下帮扶台账 - 法规处 + // { + // path: '/ledgerManagement3', + // name: 'ledgerManagement3', + // component: () => import('../views/LedgerManagement/index.vue'), + // meta: { + // title: '驻地台账', + // breadcrumb: true, + // parentRoute: 'warningManagement3' + // } + // }, + // 项目管理 - 区县 { diff --git a/packages/screen/src/views/WarningManagement/construction/index.vue b/packages/screen/src/views/WarningManagement/construction/index.vue index 0e5791a..d827332 100644 --- a/packages/screen/src/views/WarningManagement/construction/index.vue +++ b/packages/screen/src/views/WarningManagement/construction/index.vue @@ -4,11 +4,11 @@ + placeholder="预警类型" :suffix-icon="ArrowDown" :options="script.eventTypeOptions" clearable /> - + placeholder="预警级别" :suffix-icon="ArrowDown" :options="script.severityOptions" clearable /> +
驻地台账 @@ -38,7 +38,7 @@ + + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/law/detailDrawer.vue b/packages/screen/src/views/WarningManagement/law/detailDrawer.vue new file mode 100644 index 0000000..8b7c938 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/law/detailDrawer.vue @@ -0,0 +1,159 @@ + + + + + + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/law/index.js b/packages/screen/src/views/WarningManagement/law/index.js new file mode 100644 index 0000000..dd75054 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/law/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/law/index.vue b/packages/screen/src/views/WarningManagement/law/index.vue new file mode 100644 index 0000000..126bc4f --- /dev/null +++ b/packages/screen/src/views/WarningManagement/law/index.vue @@ -0,0 +1,61 @@ + + + + + \ No newline at end of file