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 @@
+
+
+
+
+
+
+
+ {{ 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/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