feat(topology): 房间新增/编辑弹窗增加所属客户部门选择项 - 按当前客户加载部门下拉,提交与编辑回填deptId

This commit is contained in:
wk committed 2026-10-08 11:07:34 +08:00
1 parent 737244fa9e
commit d12fa91ec2
1 file changed
+37
@@ -159,6 +159,16 @@
<a-form-item label="所属建筑" name="buildingId"> <a-form-item label="所属建筑" name="buildingId">
<a-select v-model:value="formData.buildingId" :options="buildingOptions" :not-found-content="null" /> <a-select v-model:value="formData.buildingId" :options="buildingOptions" :not-found-content="null" />
</a-form-item> </a-form-item>
<a-form-item label="所属客户部门" name="deptId">
<a-select
v-model:value="formData.deptId"
:options="departmentOptions"
:loading="departmentLoading"
allow-clear
:not-found-content="departmentLoading ? null : (departmentOptions.length ? null : '暂无部门')"
placeholder="请选择所属客户部门"
/>
</a-form-item>
<a-form-item label="房间编码" name="roomCode"> <a-form-item label="房间编码" name="roomCode">
<a-input v-model:value="formData.roomCode" placeholder="请输入房间编码" maxlength="64" /> <a-input v-model:value="formData.roomCode" placeholder="请输入房间编码" maxlength="64" />
</a-form-item> </a-form-item>
@@ -192,6 +202,7 @@ import {
import { customerApi } from '@/api/customer'; import { customerApi } from '@/api/customer';
import { customerBuildingApi, type CustomerBuildingInfo } from '@/api/customerBuilding'; import { customerBuildingApi, type CustomerBuildingInfo } from '@/api/customerBuilding';
import { customerRoomApi, type CustomerRoomInfo } from '@/api/customerRoom'; import { customerRoomApi, type CustomerRoomInfo } from '@/api/customerRoom';
import { customerDepartmentApi } from '@/api/customerDepartment';
type NodeType = 'customer' | 'building' | 'room'; type NodeType = 'customer' | 'building' | 'room';
@@ -231,6 +242,7 @@ const formData = reactive({
roomName: '', roomName: '',
floorNo: '', floorNo: '',
roomPurpose: '', roomPurpose: '',
deptId: undefined as number | undefined,
}); });
const buildingCount = computed(() => { 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 })); 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(() => { const formRules = computed(() => {
if (modalType.value === 'building') { if (modalType.value === 'building') {
return { 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() { function handleAddBuilding() {
modalType.value = 'building'; modalType.value = 'building';
isEdit.value = false; isEdit.value = false;
@@ -391,6 +419,9 @@ function handleAddRoom(node: TreeNode) {
resetForm(); resetForm();
formData.customerId = selectedCustomerId.value; formData.customerId = selectedCustomerId.value;
formData.buildingId = node.data.id; formData.buildingId = node.data.id;
if (selectedCustomerId.value !== undefined) {
loadDepartments(selectedCustomerId.value);
}
modalVisible.value = true; modalVisible.value = true;
} }
@@ -407,6 +438,10 @@ function handleEditRoom(node: TreeNode) {
formData.roomName = r.roomName; formData.roomName = r.roomName;
formData.floorNo = r.floorNo || ''; formData.floorNo = r.floorNo || '';
formData.roomPurpose = r.roomPurpose || ''; formData.roomPurpose = r.roomPurpose || '';
formData.deptId = r.deptId;
if (r.customerId !== undefined) {
loadDepartments(r.customerId);
}
modalVisible.value = true; modalVisible.value = true;
} }
@@ -421,6 +456,7 @@ function resetForm() {
formData.roomName = ''; formData.roomName = '';
formData.floorNo = ''; formData.floorNo = '';
formData.roomPurpose = ''; formData.roomPurpose = '';
formData.deptId = undefined;
if (formRef.value) { if (formRef.value) {
formRef.value.clearValidate(); formRef.value.clearValidate();
} }
@@ -457,6 +493,7 @@ async function handleSubmit() {
roomName: formData.roomName, roomName: formData.roomName,
floorNo: formData.floorNo, floorNo: formData.floorNo,
roomPurpose: formData.roomPurpose, roomPurpose: formData.roomPurpose,
deptId: formData.deptId,
}; };
if (isEdit.value && editId.value != null) { if (isEdit.value && editId.value != null) {
res = await customerRoomApi.update(editId.value, payload); res = await customerRoomApi.update(editId.value, payload);