diff --git a/packages/mobile/src/views/Material/MaterialManagement.vue b/packages/mobile/src/views/Material/MaterialManagement.vue index d8d4f87..1a71dc5 100644 --- a/packages/mobile/src/views/Material/MaterialManagement.vue +++ b/packages/mobile/src/views/Material/MaterialManagement.vue @@ -48,7 +48,7 @@ @close="onPopupClose" > -

设备信息

+

添加物资

+
+
+ {{ title }} +
+
+
+
+ + +
+
+
+
+ + + \ No newline at end of file diff --git a/packages/screen/src/component/DynamicForm/DynamicForm.vue b/packages/screen/src/component/DynamicForm/DynamicForm.vue new file mode 100644 index 0000000..6df6571 --- /dev/null +++ b/packages/screen/src/component/DynamicForm/DynamicForm.vue @@ -0,0 +1,91 @@ + + + \ No newline at end of file diff --git a/packages/screen/src/component/InputSelect/InputSelect.vue b/packages/screen/src/component/InputSelect/InputSelect.vue new file mode 100644 index 0000000..9a84c93 --- /dev/null +++ b/packages/screen/src/component/InputSelect/InputSelect.vue @@ -0,0 +1,172 @@ + + + \ No newline at end of file diff --git a/packages/screen/src/component/MyDialog/index.vue b/packages/screen/src/component/MyDialog/index.vue index 37bcd0a..992a7fd 100644 --- a/packages/screen/src/component/MyDialog/index.vue +++ b/packages/screen/src/component/MyDialog/index.vue @@ -10,13 +10,12 @@ :is="dynamicComponent" ref="dynamicComponentRef" v-bind="componentProps" - @vue:mounted="handleComponentMount" /> @@ -60,7 +59,7 @@ const props = defineProps({ }, onConfirmName: { type: String, - default: "确认", + default: "保存", }, onCancelName: { type: String, @@ -73,5 +72,13 @@ const normalizedComponent = computed(() => ); - \ No newline at end of file diff --git a/packages/screen/src/component/MyDrawer/index.vue b/packages/screen/src/component/MyDrawer/index.vue index ce36b36..88237c8 100644 --- a/packages/screen/src/component/MyDrawer/index.vue +++ b/packages/screen/src/component/MyDrawer/index.vue @@ -11,7 +11,6 @@ :is="dynamicComponent" ref="dynamicComponentRef" v-bind="componentProps" - @vue:mounted="handleComponentMount" /> \ No newline at end of file diff --git a/packages/screen/src/views/ServiceStationManagePage/index.js b/packages/screen/src/views/ServiceStationManagePage/index.js new file mode 100644 index 0000000..1142d98 --- /dev/null +++ b/packages/screen/src/views/ServiceStationManagePage/index.js @@ -0,0 +1,266 @@ +import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue"; +import { request } from "@/utils/request"; +import { useRoute, useRouter } from 'vue-router' +import DetailDrawer from "./detailDrawer.vue"; + +const tableData = ref([]); // 表格数据 +const filterData = reactive({ + zdlx: "", + mc: "", +}) // 过滤条件 +const modelVisible = ref(false); // 弹窗状态 +const drawerVisible = ref(false); // 抽屉状态 +const model = reactive({ + title: '', + content: null, + props: {}, + onCancel: null, + onConfirm: null, +}); // 弹窗内容 +const drawer = reactive({ + title: '', + content: null, + props: {}, + onCancel: null, + onConfirm: null, + direction: 'rtl', + size: '50%' +}); // 抽屉内容 +const dialogType = ref(''); // 弹窗类型 +const dialogRef = ref(null); // 弹窗实例 +const drawerType = ref(''); // 抽屉类型 +const drawerRef = ref(null); // 抽屉实例 + +// 站点类型选项 +const zdlxOptions = [ + { label: "服务设施", value: "服务设施" }, + { label: "加油站", value: "加油站" }, + { label: "加气站", value: "加气站" }, + { label: "加氢站", value: "加氢站" }, + { label: "充电站", value: "充电站" }, +]; + +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/yhz/list", + method: "GET", + params: { + mc: filterData?.mc || "", + zdlx: filterData?.zdlx || "", + pageNum: pagination.current, + pageSize: pagination.pageSize, + }, + }); + if (res.code === "00000") { + tableData.value = res.data.records; + pagination.total = Number(res.data.total); + } else { + throw new Error(res.message); + } + } catch (error) { + console.log(error.message); + } +}; + +// 获取养护站详情 +const getYhzDetail = async (row) => { + try { + console.log('row',toRaw(row)); + const res = await request({ + url: `/snow-ops-platform/yhz/getById?id=${row.id}`, + method: "GET", + }); + if (res.code === "00000") { + if (drawerType.value === "detail"){ + drawer.title = '详情' + drawer.props = { + basicData: res.data, + }; + drawer.onCancel = () => { + drawerType.value = ''; + drawerVisible.value = false; + }; + drawer.onConfirm = () => { + drawerType.value = ''; + drawerVisible.value = false; + }; + drawer.content = DetailDrawer; + drawerVisible.value = true; + } + } + } catch (error) { + + } +}; +export default () => { + + const router = useRouter(); + const handleClickSb = (row) => { + router.push({ + path: `/yhzsb/${encodeURIComponent(JSON.stringify(row))}`, + }); + }; + const handleClickWz = (row) => { + router.push({ + path: `/yhzwz/${encodeURIComponent(JSON.stringify(row))}`, + }); + }; + + const columns = [ + { + prop: "mc", + label: "服务站名称", + }, + { + prop: "sbsl", + label: "设备数量", + render: (row) => () => + h( + ElButton, + { + link: true, + type: "primary", + onClick: () => handleClickSb(row), + }, + () => row.sbsl + ), + }, + { + prop: "wzsl", + label: "物资数量", + render: (row) => () => + h( + ElButton, + { + link: true, + type: "primary", + onClick: () => handleClickWz(row), + }, + () => row.wzsl + ), + }, + { + prop: "rysl", + label: "人员数量", + }, + { + prop: "qxmc", + label: "区县名称", + }, + { + label: "操作", + fixed: "right", + width: 150, + render: (row) => () => + h("div", { class: "action-btns" }, [ + h( + ElButton, + { + type: "primary", + link: true, + onClick: async () => { + drawerType.value = "detail"; + await getYhzDetail(row); + }, + }, + () => "详情" + ), + h( + ElButton, + { + type: "success", + link: true, + style: "margin-left: 10px;", + onClick: async () => { + + }, + }, + () => "编辑" + ), + h( + ElButton, + { + type: "danger", + link: true, + style: "margin-left: 10px;", + onClick: async () => { + try { + await ElMessageBox.confirm("确定要删除该站点吗?", "删除确认", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning", + }); + const res = await request({ + url: `/snow-ops-platform/yhz/delete`, + method: "POST", + data: { + id: row.id, + }, + }); + if (res.code === "00000") { + ElMessage.success("删除成功"); + getTableData(); + } + } catch (error) { + if (error instanceof Error) { + ElMessage.error(error.message || "删除失败"); + } + } + }, + }, + () => "删除" + ), + ]), + }, + ]; + + + + // 监听过滤条件变化 + watch( + [() => filterData], + ([newFilterData]) => { + getTableData(newFilterData) + }, + { deep: true } + ) + + onMounted(async () => { + await getTableData() + }); + + return { + tableData, + filterData, + zdlxOptions, + pagination, + columns, + handleClickSb, + handleClickWz, + + modelVisible, + model, + drawerVisible, + drawer, + dialogRef, + drawerRef, + + + } +} \ No newline at end of file diff --git a/packages/screen/src/views/ServiceStationManagePage/index.vue b/packages/screen/src/views/ServiceStationManagePage/index.vue index 99db789..9e75cfd 100644 --- a/packages/screen/src/views/ServiceStationManagePage/index.vue +++ b/packages/screen/src/views/ServiceStationManagePage/index.vue @@ -2,21 +2,19 @@
@@ -26,547 +24,48 @@ >
-
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
- - \ No newline at end of file diff --git a/packages/screen/src/views/SnowEventManagement/detailDialog.vue b/packages/screen/src/views/SnowEventManagement/detailDialog.vue index f5575ad..0f8ccdb 100644 --- a/packages/screen/src/views/SnowEventManagement/detailDialog.vue +++ b/packages/screen/src/views/SnowEventManagement/detailDialog.vue @@ -1,52 +1,128 @@ @@ -60,4 +136,56 @@ const props = defineProps({ \ No newline at end of file diff --git a/packages/screen/src/views/SnowEventManagement/index.js b/packages/screen/src/views/SnowEventManagement/index.js index 2d1bc69..3f7d45b 100644 --- a/packages/screen/src/views/SnowEventManagement/index.js +++ b/packages/screen/src/views/SnowEventManagement/index.js @@ -19,7 +19,7 @@ const yhzid = ref(''); // 养护站id const filterData = reactive({ routeNo: '', // 线路编号 stakeNo: '', // 桩号 - reportTime: '', // 填报时间 + reportTime: null, // 填报时间 }); // 表格过滤条件 const pagination = reactive({ current: 1, @@ -44,6 +44,19 @@ const model = reactive({ const dialogType = ref(''); // 弹窗类型 const dialogRef = ref(null); // 弹窗实例 +const drawerVisible = ref(false); // 抽屉显示状态 +const drawer = reactive({ + title: '', + content: null, + props: {}, + onCancel: null, + onConfirm: null, + direction: 'rtl', + size: '50%' +}); // 抽屉内容 +const drawerType = ref(''); // 抽屉类型 +const drawerRef = ref(null); // 抽屉实例 + const INIT_FORM = { rkrq: "", rkdw: "", @@ -86,7 +99,7 @@ const filterNode = (value, node) => { const getTreeData = async () => { try { const res = await request({ - url: '/snow-ops-platform/yhz/listAreaGroup', + url: '/snow-ops-platform/yhz/listAreaGroup?dataType=ICE_SNOW_EVENT', method: 'GET' }) if (res.code === '00000') { @@ -134,6 +147,15 @@ const handleNodeClick = (data, node) => { } }; +// 处理日期格式 +const formatDate = (date) => { + if (!date) return ''; + const pad = n => n.toString().padStart(2, '0'); + const d = new Date(date); + return `${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ` + + `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`; +}; + // 获取冰雪事件列表 const getyhzeventList = async (qxmc, yhzid, filterData) => { try { @@ -142,8 +164,8 @@ const getyhzeventList = async (qxmc, yhzid, filterData) => { yhzid: yhzid, routeNo: filterData?.routeNo || '', stakeNo: filterData?.stakeNo || '', - reportTimeStart: filterData?.reportTime[0] || '', - reportTimeEnd: filterData?.reportTime[1] || '', + reportTimeStart: filterData?.reportTime?.[0] ? formatDate(filterData.reportTime[0]) : '', + reportTimeEnd: filterData?.reportTime?.[1] ? formatDate(filterData.reportTime[1]) : '', pageNum: pagination.current, pageSize: pagination.pageSize, } @@ -223,24 +245,24 @@ const columns = [ type: "primary", link: true, onClick: async () => { - dialogType.value = 'detail' + drawerType.value = 'detail' await getDetailData(row); }, }, () => "详情" ), - h( - ElButton, - { - type: "primary", - link: true, - onClick: async () => { - dialogType.value = 'edit' - await getDetailData(row); - }, - }, - () => "编辑" - ), + // h( + // ElButton, + // { + // type: "primary", + // link: true, + // onClick: async () => { + // dialogType.value = 'edit' + // await getDetailData(row); + // }, + // }, + // () => "编辑" + // ), h( ElButton, { @@ -248,16 +270,16 @@ const columns = [ link: true, onClick: async () => { try { - await ElMessageBox.confirm("确定要删除该设备吗?", "删除确认", { + await ElMessageBox.confirm("确定要删除该冰雪事件吗?", "删除确认", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", }); const res = await request({ - url: `/snow-ops-platform/yjwz/delete`, + url: `/snow-ops-platform/event/delete`, method: 'POST', data: { - rid: row.rid, + id: row.id, } }); if (res.code === '00000') { @@ -313,21 +335,21 @@ const getDetailData = async (row) => { throw new Error('获取事件详情失败') } if (res.code === '00000') { - if (dialogType.value === 'detail') { - model.title = `事件详情`; - model.content = DetailDialog; - model.props = { + if (drawerType.value === 'detail') { + drawer.title = `事件详情`; + drawer.content = DetailDialog; + drawer.props = { detailData: res.data, }; - model.onCancel = () => { - dialogType.value = ''; - modelVisible.value = false; + drawer.onCancel = () => { + drawerType.value = ''; + drawerVisible.value = false; }; - model.onConfirm = () => { - dialogType.value = ''; - modelVisible.value = false; + drawer.onConfirm = () => { + drawerType.value = ''; + drawerVisible.value = false; }; - modelVisible.value = true; + drawerVisible.value = true; } if (dialogType.value === 'edit') { model.title = `编辑物资`; @@ -412,8 +434,8 @@ export default () => { await getTreeData(); await getyhzeventList(); const rowData = (decodeURIComponent(route.params.data)); - if (rowData !== 'undefined' && rowData!== 'null' && rowData !== '' ) { - console.log('rowData@@@',rowData) + if (rowData !== 'undefined' && rowData !== 'null' && rowData !== '') { + console.log('rowData@@@', rowData) const JSONData = JSON.parse(rowData); filterText.value = JSONData.mc; }; @@ -433,5 +455,9 @@ export default () => { modelVisible, dialogRef, model, + drawerVisible, + drawer, + drawerRef, + yhzid, } } \ No newline at end of file diff --git a/packages/screen/src/views/SnowEventManagement/index.vue b/packages/screen/src/views/SnowEventManagement/index.vue index 0e3b26a..a3347fc 100644 --- a/packages/screen/src/views/SnowEventManagement/index.vue +++ b/packages/screen/src/views/SnowEventManagement/index.vue @@ -31,7 +31,13 @@
- +
@@ -65,6 +71,17 @@ width="60%" > +
@@ -73,6 +90,7 @@ import scriptFn from "./index.js"; import DynamicTable from "../../component/DynamicTable"; import MyDialog from "../../component/MyDialog"; +import MyDrawer from "../../component/MyDrawer"; const script = scriptFn(); const { treeRef, dialogRef } = script; diff --git a/packages/screen/vite.config.js b/packages/screen/vite.config.js index b23f56a..d7aca9a 100644 --- a/packages/screen/vite.config.js +++ b/packages/screen/vite.config.js @@ -101,7 +101,6 @@ export default defineConfig(({ command, mode }) => { outDir: 'dist', assetsDir: 'assets', sourcemap: false, - minify: 'terser', rollupOptions: { output: { chunkFileNames: 'js/[name]-[hash].js', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 524157a..45885ea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -113,8 +113,8 @@ importers: specifier: ^7.2.0 version: 7.2.2(@types/node@24.10.0)(less@4.4.2)(sass@1.93.3) vite-plugin-cesium: - specifier: ^1.2.23 - version: 1.2.23(cesium@1.135.0)(rollup@4.53.1)(vite@7.2.2(@types/node@24.10.0)(less@4.4.2)(sass@1.93.3)) + specifier: 1.2.22 + version: 1.2.22(cesium@1.135.0)(rollup@4.53.1)(vite@7.2.2(@types/node@24.10.0)(less@4.4.2)(sass@1.93.3)) vite-plugin-svg-icons: specifier: ^2.0.1 version: 2.0.1(vite@7.2.2(@types/node@24.10.0)(less@4.4.2)(sass@1.93.3)) @@ -2262,8 +2262,8 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite-plugin-cesium@1.2.23: - resolution: {integrity: sha512-x9A8ZCEoegceXg/E+LnxKr0XBsI9CR4cgYWQ2Dd3cUEYwKcTnHQ3kBfpol7BUcGtgQnQos/mtVrRmuVQBXFjHw==} + vite-plugin-cesium@1.2.22: + resolution: {integrity: sha512-OnS+VKNGck4kUu4/67Fdfhz0/zF9mDVNUp9hUWtX19C38O0mJsJy2MH1ev2QcrVLf6VieJ7vCGxkLchdB1n1HQ==} peerDependencies: cesium: ^1.95.0 vite: '>=2.7.1' @@ -4691,7 +4691,7 @@ snapshots: vary@1.1.2: {} - vite-plugin-cesium@1.2.23(cesium@1.135.0)(rollup@4.53.1)(vite@7.2.2(@types/node@24.10.0)(less@4.4.2)(sass@1.93.3)): + vite-plugin-cesium@1.2.22(cesium@1.135.0)(rollup@4.53.1)(vite@7.2.2(@types/node@24.10.0)(less@4.4.2)(sass@1.93.3)): dependencies: cesium: 1.135.0 fs-extra: 9.1.0