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