From 558d48d829f7eaf7a138bd22465c370a8c4d8a39 Mon Sep 17 00:00:00 2001 From: huangchenhao <123673748@qq.com> Date: Mon, 3 Nov 2025 11:33:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BB=E6=8A=A4=E7=AB=99=E8=AE=BE=E5=A4=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/screen/src/router/index.js | 5 + .../src/views/EquipmentManagement/index.js | 224 ++++++++++++++++++ .../src/views/EquipmentManagement/index.vue | 151 ++++++++++++ .../views/ServiceStationManagePage/index.vue | 1 - 4 files changed, 380 insertions(+), 1 deletion(-) create mode 100644 packages/screen/src/views/EquipmentManagement/index.js create mode 100644 packages/screen/src/views/EquipmentManagement/index.vue diff --git a/packages/screen/src/router/index.js b/packages/screen/src/router/index.js index 315585e..c6edabc 100644 --- a/packages/screen/src/router/index.js +++ b/packages/screen/src/router/index.js @@ -16,6 +16,11 @@ const routes = [ path: '/yhz', name: 'yhz', component: () => import('../views/ServiceStationManagePage/index.vue') + }, + { + path: '/yhzsb', + name: 'yhzsb', + component: () => import('../views/EquipmentManagement/index.vue') } ] diff --git a/packages/screen/src/views/EquipmentManagement/index.js b/packages/screen/src/views/EquipmentManagement/index.js new file mode 100644 index 0000000..3467a96 --- /dev/null +++ b/packages/screen/src/views/EquipmentManagement/index.js @@ -0,0 +1,224 @@ +import { h, ref, onMounted, reactive, watch, toRaw } from "vue"; +import { request } from "@/utils/request"; +import { Search } from "@element-plus/icons-vue"; +import MyDialog from "../../component/MyDialog"; +import { ElMessage } from "element-plus"; + +const treeData = ref([]); +const treeProps = { + children: "children", + label: "name", + key: "id", +} +const filterText = ref(''); // 树节点过滤条件 +const tableData = ref([]); +const qxmc = ref(''); // 区县名称 +const yhzid = ref(''); // 养护站id +const filterData = reactive({ + sbmc: '', + sbdl: '', + sblx: '', + sbzt: '', +}); // 表格过滤条件 +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; + getyhzsbList(filterData); + }, +}); + +// 节点过滤函数 +const filterNode = (value, node) => { + const keyword = (value || '').toLowerCase(); + + const nodeData = node || {} + + // 处理区域节点匹配 + if (nodeData.type === 'area') { + return (nodeData.rawName || '').toLowerCase().includes(keyword) + } + + // 处理站点节点匹配 + if (nodeData.type === 'site') { + const parentData = node.parent?.data?.type === 'area' ? node.parent.data : {} + const parentMatch = (parentData.rawName || '').toLowerCase().includes(keyword) + return parentMatch || (nodeData.name || '').toLowerCase().includes(keyword) + } + + return false +} +// 获取养护站列表分组 +const getTreeData = async () => { + try { + const res = await request({ + url: '/api/yhz/listAreaGroup', + method: 'GET' + }) + if (res.code === '00000') { + treeData.value = Object.entries(res.data).map(([areaName, sites]) => ({ + id: areaName, + name: `${areaName}(${sites.length})`, + type: 'area', + children: sites.map(site => ({ + id: site.id, + name: site.mc, + type: 'site' + })), + rawName: areaName // 原始名称 + })); + console.log('treeData', toRaw(treeData.value)) + } else { + throw new Error(res.message); + } + } catch (error) { + ElMessage.error(error.message); + console.log(error); + } +}; +// 处理节点点击事件 +const handleNodeClick = (data) => { + if (data.type === 'area') { + console.log('你点击的是区县', data.id) + yhzid.value = ''; // 重置养护站id + qxmc.value = data.id; // 保存区县名称 + + } + if (data.type === 'site') { + console.log('你点击的是站点', data.name) + yhzid.value = data.id; // 保存养护站id + qxmc.value = ''; // 重置区县名称 + } +}; + +// 获取养护站设备列表 +const getyhzsbList = async (qxmc, yhzid, filterData) => { + try { + const data = { + qxmc: qxmc, + yhzid: yhzid, + sbmc: filterData?.sbmc || '', + sbdl: filterData?.sbdl || '', + sblx: filterData?.sblx || '', + sbzt: filterData?.sbzt || '', + pageNum: pagination.current, + pageSize: pagination.pageSize, + } + const res = await request({ + url: '/api/yjsb/list', + method: 'GET', + params: data, + }) + if (res.code === '00000') { + tableData.value = res.data.records; + pagination.total = res.data.total; + } else { + tableData.value = []; + pagination.total = 0; + throw new Error(res.message); + } + } catch (error) { + ElMessage.error(error.message); + console.log(error); + } +}; + +const columns = [ + { + prop: 'sbzt', + label: '设备状态', + }, + { + prop: 'sbmc', + label: '设备名称', + }, + { + prop: 'sbbh', + label: '设备编号', + }, + { + prop: 'sbxh', + label: '设备型号', + }, + { + prop: 'sbdl', + label: '设备大类', + }, + { + prop: 'sblx', + label: '设备类型', + }, + { + prop: 'gzrq', + label: '购置日期', + }, + { + prop: 'gmfy', + label: '购买费用(万元)', + }, + { + prop: 'qxmc', + label: '所属区县', + }, + { + label: "操作", + fixed: "right", + width: 150, + render: (row) => () => + h("div", { class: "action-btns" }, [ + h( + ElButton, + { + type: "primary", + link: true, + onClick: async () => { + await getDetailData(row); + dialogVisible.value = true; + }, + }, + () => "详情" + ), + ]), + }, +] + + +export default () => { + + const treeRef = ref(null); + watch(() => filterText.value, (val) => { + treeRef.value.filter(val || '') + }) + + watch( + [() => filterData, qxmc, yhzid], + ([newFilterData, newQxmc, newYhzid]) => { + getyhzsbList(newQxmc, newYhzid, newFilterData) + }, + { deep: true } + ) + + + onMounted(() => { + getTreeData(); + getyhzsbList(); + }); + return { + treeRef, + treeData, + treeProps, + filterText, + filterNode, + handleNodeClick, + + tableData, + filterData, + pagination, + columns, + } +} \ No newline at end of file diff --git a/packages/screen/src/views/EquipmentManagement/index.vue b/packages/screen/src/views/EquipmentManagement/index.vue new file mode 100644 index 0000000..c175a81 --- /dev/null +++ b/packages/screen/src/views/EquipmentManagement/index.vue @@ -0,0 +1,151 @@ + + + + \ 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 a1708a3..c59387f 100644 --- a/packages/screen/src/views/ServiceStationManagePage/index.vue +++ b/packages/screen/src/views/ServiceStationManagePage/index.vue @@ -174,7 +174,6 @@ import { h, ref, onMounted, reactive, watch, toRaw } from "vue"; import { request } from "@/utils/request"; import { Search } from "@element-plus/icons-vue"; import MyDialog from "../../component/MyDialog"; -import { de } from "element-plus/es/locales.mjs"; const tableData = ref([]); const detailData = ref({});