From ff0d7ee6b09da5abc4d29a4c49a87f95e255801d Mon Sep 17 00:00:00 2001 From: huangchenhao <123673748@qq.com> Date: Thu, 2 Apr 2026 16:57:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=93=8D=E5=BA=94=E9=A2=84=E8=AD=A6=20?= =?UTF-8?q?=E9=A9=BB=E5=9C=B0=E5=8F=B0=E8=B4=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/screen/src/router/index.js | 14 +- .../src/views/LedgerManagement/index.js | 201 +++++++++++++ .../src/views/LedgerManagement/index.vue | 83 ++++++ .../src/views/WarningManagement/addDialog.vue | 265 ++++++++++++++++++ .../src/views/WarningManagement/index.js | 215 ++++++++++++++ .../src/views/WarningManagement/index.vue | 57 ++++ packages/screen/vite.config.js | 2 +- 7 files changed, 835 insertions(+), 2 deletions(-) create mode 100644 packages/screen/src/views/LedgerManagement/index.js create mode 100644 packages/screen/src/views/LedgerManagement/index.vue create mode 100644 packages/screen/src/views/WarningManagement/addDialog.vue create mode 100644 packages/screen/src/views/WarningManagement/index.js create mode 100644 packages/screen/src/views/WarningManagement/index.vue diff --git a/packages/screen/src/router/index.js b/packages/screen/src/router/index.js index f08c5ba..57fdf27 100644 --- a/packages/screen/src/router/index.js +++ b/packages/screen/src/router/index.js @@ -56,7 +56,7 @@ const routes = [ { path: '/riskWarning', name: 'RiskWarning', - meta: { + meta: { screen: true }, component: () => import('../views/RiskWarning/index.vue') @@ -85,6 +85,18 @@ const routes = [ }, component: () => import('../views/ConstructionDepartment/ConstructionDepartment.vue') }, + // 响应预警 + { + path: '/warningManagement', + name: 'warningManagement', + component: () => import('../views/WarningManagement/index.vue') + }, + // 驻地台账 + { + path: '/ledgerManagement', + name: 'ledgerManagement', + component: () => import('../views/LedgerManagement/index.vue') + }, ] const router = createRouter({ diff --git a/packages/screen/src/views/LedgerManagement/index.js b/packages/screen/src/views/LedgerManagement/index.js new file mode 100644 index 0000000..b386f22 --- /dev/null +++ b/packages/screen/src/views/LedgerManagement/index.js @@ -0,0 +1,201 @@ +import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue"; +import { request } from "@/utils/request"; +import { useRoute, useRouter } from 'vue-router' + +const tableData = ref([]); // 表格数据 + +const modelVisible = ref(false); // 弹窗状态 +const drawerVisible = ref(false); // 抽屉状态 +// 弹窗内容 +const model = reactive({ + title: '', + content: null, + props: {}, + onCancel: null, + onConfirm: null, + width: '', +}); +const form = reactive({ +}); +const INIT_FORM = { + +}; +// 抽屉内容 +const drawer = reactive({ + title: '', + content: null, + props: {}, + onCancel: null, + onConfirm: null, + direction: 'rtl', + size: '50%' +}); +const dialogRef = ref(null); // 弹窗实例 +const drawerRef = ref(null); // 抽屉实例 + +const columns = [ + { + prop: "xxx", + label: "所属区县", + }, + { + prop: "xxx", + label: "项目名称", + }, + { + prop: "xxx", + label: "驻地名称", + }, + { + prop: "xxx", + label: "驻地类型", + }, + { + prop: "xxx", + label: "坐标点位", + }, + { + prop: "xxx", + label: "所属项目名称", + }, + { + prop: "xxx", + label: "项目类型", + }, + { + prop: "xxx", + label: "建设单位", + }, + { + prop: "xxx", + label: "施工单位", + }, + { + prop: "xxx", + label: "驻地地址", + }, + { + prop: "xxx", + label: "行政区域", + }, + { + prop: "xxx", + label: "驻地人数", + }, + { + prop: "xxx", + label: "驻地风险等级", + }, + { + prop: "xxx", + label: "房建类型", + }, + { + prop: "xxx", + label: "搬迁状态", + }, + { + prop: "xxx", + label: "吹哨人/电话", + }, + { + prop: "xxx", + label: "建设单位包保责任人/电话", + }, + { + prop: "xxx", + label: "施工单位包保责任人/电话", + }, + { + prop: "xxx", + label: "驻地包保责任人/电话", + }, + { + prop: "xxx", + label: "区县级包保责任人/电话", + }, + { + prop: "xxx", + label: "市级包保责任人/电话", + }, + { + prop: "xxx", + label: "备注", + }, +] + +// 过滤条件 +const filterData = reactive({ + title: "", + type: "", + warningLevel: "", +}) +// 分页 +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: '', + method: "GET", + params: { + + } + }) + } catch (error) { + + } +} + +// 预警类型选项 +const typeOptions = [ + { label: "全部", value: "" }, + { label: "台风预警", value: "台风预警" }, + { label: "暴雨预警", value: "暴雨预警" }, + { label: "寒潮预警", value: "寒潮预警" }, + { label: "大雾预警", value: "大雾预警" }, + { label: "暴雪预警", value: "暴雪预警" }, + { label: "道路结冰预警", value: "道路结冰预警" }, + { label: "雷电预警", value: "雷电预警" }, + { label: "强对流预警", value: "强对流预警" }, +]; + +// 预警级别选项 +const warningLevelOptions = [ + { label: "全部", value: "" }, + { label: "红色预警", value: "红色预警" }, + { label: "橙色预警", value: "橙色预警" }, + { label: "黄色预警", value: "黄色预警" }, + { label: "蓝色预警", value: "蓝色预警" }, +] + + + +export default () => { + return { + modelVisible, + model, + drawerVisible, + drawer, + dialogRef, + drawerRef, + + + tableData, + filterData, + pagination, + columns, + } +} \ No newline at end of file diff --git a/packages/screen/src/views/LedgerManagement/index.vue b/packages/screen/src/views/LedgerManagement/index.vue new file mode 100644 index 0000000..868917f --- /dev/null +++ b/packages/screen/src/views/LedgerManagement/index.vue @@ -0,0 +1,83 @@ + + + + + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/addDialog.vue b/packages/screen/src/views/WarningManagement/addDialog.vue new file mode 100644 index 0000000..e9fab81 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/addDialog.vue @@ -0,0 +1,265 @@ + + + + + \ No newline at end of file diff --git a/packages/screen/src/views/WarningManagement/index.js b/packages/screen/src/views/WarningManagement/index.js new file mode 100644 index 0000000..f1eb997 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/index.js @@ -0,0 +1,215 @@ +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"; + +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: "xxx", + label: "预警标题", + }, + { + prop: "xxx", + label: "预警类型", + }, + { + prop: "xxx", + label: "发送时间", + }, + { + prop: "xxx", + label: "生效时间", + }, + { + prop: "xxx", + label: "接收时间", + }, + { + prop: "xxx", + label: "预警转发时间", + }, + { + prop: "xxx", + label: "预警结束时间", + }, + { + prop: "xxx", + label: "影响数量", + }, + { + prop: "xxx", + 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({ + title: "", + type: "", + warningLevel: "", +}) +// 分页 +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: '', + method: "GET", + params: { + + } + }) + } catch (error) { + + } +} + +// 预警类型选项 +const typeOptions = [ + { label: "全部", value: "" }, + { label: "台风预警", value: "台风预警" }, + { label: "暴雨预警", value: "暴雨预警" }, + { label: "寒潮预警", value: "寒潮预警" }, + { label: "大雾预警", value: "大雾预警" }, + { label: "暴雪预警", value: "暴雪预警" }, + { label: "道路结冰预警", value: "道路结冰预警" }, + { label: "雷电预警", value: "雷电预警" }, + { label: "强对流预警", value: "强对流预警" }, +]; + +// 预警级别选项 +const warningLevelOptions = [ + { label: "全部", value: "" }, + { 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; +} + + + +export default () => { + + const router = useRouter(); + const gotoLedgerPage = () => { + router.push({ + path: `/ledgerManagement`, + }); + }; + + + + return { + tableData, + filterData, + typeOptions, + warningLevelOptions, + 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/index.vue new file mode 100644 index 0000000..2712cc9 --- /dev/null +++ b/packages/screen/src/views/WarningManagement/index.vue @@ -0,0 +1,57 @@ + + + + + \ No newline at end of file diff --git a/packages/screen/vite.config.js b/packages/screen/vite.config.js index 2bc4c17..8d2a68d 100644 --- a/packages/screen/vite.config.js +++ b/packages/screen/vite.config.js @@ -93,7 +93,7 @@ export default defineConfig(({ command, mode }) => { cors: true, proxy: { '/snow-ops-platform': { - target: 'http://8.137.54.85:8661/', + target: 'http://192.168.110.16:8661/', changeOrigin: true, }, }