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({});