feat(topology): 房间新增/编辑弹窗增加所属客户部门选择项 - 按当前客户加载部门下拉,提交与编辑回填deptId
This commit is contained in:
1 parent
737244fa9e
commit
d12fa91ec2
1 file changed
+37
@@ -159,6 +159,16 @@
|
||||
<a-form-item label="所属建筑" name="buildingId">
|
||||
<a-select v-model:value="formData.buildingId" :options="buildingOptions" :not-found-content="null" />
|
||||
</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-input v-model:value="formData.roomCode" placeholder="请输入房间编码" maxlength="64" />
|
||||
</a-form-item>
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user