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