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);