From d12fa91ec28b2561a63022d8c3f349974d7b6ff1 Mon Sep 17 00:00:00 2001 From: wangkai <10903508@qq.com> Date: Thu, 8 Oct 2026 11:07:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(topology):=20=E6=88=BF=E9=97=B4=E6=96=B0?= =?UTF-8?q?=E5=A2=9E/=E7=BC=96=E8=BE=91=E5=BC=B9=E7=AA=97=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=89=80=E5=B1=9E=E5=AE=A2=E6=88=B7=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E9=A1=B9=20-=20=E6=8C=89=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E5=8A=A0=E8=BD=BD=E9=83=A8=E9=97=A8=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=EF=BC=8C=E6=8F=90=E4=BA=A4=E4=B8=8E=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=9B=9E=E5=A1=ABdeptId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/views/customer/topology/index.vue | 37 ++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/client/src/views/customer/topology/index.vue b/client/src/views/customer/topology/index.vue index 6a8ce0e..091afb4 100644 --- a/client/src/views/customer/topology/index.vue +++ b/client/src/views/customer/topology/index.vue @@ -159,6 +159,16 @@ + + + @@ -192,6 +202,7 @@ import { import { customerApi } from '@/api/customer'; import { customerBuildingApi, type CustomerBuildingInfo } from '@/api/customerBuilding'; import { customerRoomApi, type CustomerRoomInfo } from '@/api/customerRoom'; +import { customerDepartmentApi } from '@/api/customerDepartment'; type NodeType = 'customer' | 'building' | 'room'; @@ -231,6 +242,7 @@ const formData = reactive({ roomName: '', floorNo: '', roomPurpose: '', + deptId: undefined as number | undefined, }); const buildingCount = computed(() => { @@ -248,6 +260,9 @@ const buildingOptions = computed<{ label: string; value: number }[]>(() => { return root.children.map((node) => ({ label: node.title, value: node.data.id as number })); }); +const departmentOptions = ref<{ label: string; value: number }[]>([]); +const departmentLoading = ref(false); + const formRules = computed(() => { if (modalType.value === 'building') { return { @@ -358,6 +373,19 @@ async function loadTree() { } } +async function loadDepartments(customerId: number) { + departmentLoading.value = true; + try { + const res: any = await customerDepartmentApi.getDepartmentList({ customerId, page: 1, pageSize: 999 }); + departmentOptions.value = + res.code === 200 ? res.data.list.map((d: any) => ({ label: d.deptName, value: d.id })) : []; + } catch { + departmentOptions.value = []; + } finally { + departmentLoading.value = false; + } +} + function handleAddBuilding() { modalType.value = 'building'; isEdit.value = false; @@ -391,6 +419,9 @@ function handleAddRoom(node: TreeNode) { resetForm(); formData.customerId = selectedCustomerId.value; formData.buildingId = node.data.id; + if (selectedCustomerId.value !== undefined) { + loadDepartments(selectedCustomerId.value); + } modalVisible.value = true; } @@ -407,6 +438,10 @@ function handleEditRoom(node: TreeNode) { formData.roomName = r.roomName; formData.floorNo = r.floorNo || ''; formData.roomPurpose = r.roomPurpose || ''; + formData.deptId = r.deptId; + if (r.customerId !== undefined) { + loadDepartments(r.customerId); + } modalVisible.value = true; } @@ -421,6 +456,7 @@ function resetForm() { formData.roomName = ''; formData.floorNo = ''; formData.roomPurpose = ''; + formData.deptId = undefined; if (formRef.value) { formRef.value.clearValidate(); } @@ -457,6 +493,7 @@ async function handleSubmit() { roomName: formData.roomName, floorNo: formData.floorNo, roomPurpose: formData.roomPurpose, + deptId: formData.deptId, }; if (isEdit.value && editId.value != null) { res = await customerRoomApi.update(editId.value, payload);