diff --git a/src/api/integrated/meetingDeskLayout.ts b/src/api/integrated/meetingDeskLayout.ts new file mode 100644 index 0000000..a9e82ba --- /dev/null +++ b/src/api/integrated/meetingDeskLayout.ts @@ -0,0 +1,41 @@ +import request from "/@/utils/request" + +export function fetchList(query?: Object) { + return request({ + url: '/integrated/meetingDeskLayout/page', + method: 'get', + params: query + }) +} + +export function addObj(obj?: Object) { + return request({ + url: '/integrated/meetingDeskLayout', + method: 'post', + data: obj + }) +} + +export function getObj(id?: string) { + return request({ + url: '/integrated/meetingDeskLayout/' + id, + method: 'get' + }) +} + +export function delObjs(ids?: Object) { + return request({ + url: '/integrated/meetingDeskLayout', + method: 'delete', + data: ids + }) +} + +export function putObj(obj?: Object) { + return request({ + url: '/integrated/meetingDeskLayout', + method: 'put', + data: obj + }) +} + diff --git a/src/views/integrated/meeting/cleanUser/form.vue b/src/views/integrated/meeting/cleanUser/form.vue index 4f8ecee..fd75723 100644 --- a/src/views/integrated/meeting/cleanUser/form.vue +++ b/src/views/integrated/meeting/cleanUser/form.vue @@ -1,7 +1,7 @@ \ No newline at end of file diff --git a/src/views/integrated/meeting/meetingDeskLayout/index.vue b/src/views/integrated/meeting/meetingDeskLayout/index.vue new file mode 100644 index 0000000..e5f1a46 --- /dev/null +++ b/src/views/integrated/meeting/meetingDeskLayout/index.vue @@ -0,0 +1,127 @@ + + + \ No newline at end of file diff --git a/src/views/integrated/meeting/meetingRoom/form.vue b/src/views/integrated/meeting/meetingRoom/form.vue index d8c1b5f..3383e78 100644 --- a/src/views/integrated/meeting/meetingRoom/form.vue +++ b/src/views/integrated/meeting/meetingRoom/form.vue @@ -34,8 +34,22 @@ - - 0 + + @@ -59,6 +73,19 @@ + + + + + + + + @@ -159,6 +186,7 @@ import { useMessage } from "/src/hooks/message"; import { getObj, addObj, putObj } from '/src/api/integrated/meetingRoom' import { fetchList } from '/src/api/integrated/meetingEquipment' import { dropdown } from '/src/api/integrated/cleanUser' +import { getSimpleUserAll } from '/src/api/admin/user' import { rule } from '/src/utils/validate'; const emit = defineEmits(['refresh']); @@ -168,6 +196,10 @@ const visible = ref(false) const loading = ref(false) const activeTab = ref('basic') const cleanUserOptions = ref([]) +const serviceUserOptions = ref([]) +const adminUserOptions = ref([]) +const adminUserLoading = ref(false) +const adminUserSearchKeyword = ref('') interface Equipment { equipId: string; @@ -213,6 +245,7 @@ const form = reactive({ capacity: 0, availableTime: '', cleanUserId: '', + serviceUserId: '', }); // 定义校验规则 @@ -298,14 +331,18 @@ const openDialog = (id: string) => { form.id = '' equipmentList.value = [] form.cleanUserId = '' + form.serviceUserId = '' // 重置表单数据 nextTick(() => { dataFormRef.value?.resetFields(); }); - // 获取保洁用户下拉数据 - getCleanUserOptions() + // 获取用户下拉数据(保洁和会务人员) + getUserOptions() + + // 获取管理员用户数据 + getAdminUserOptions() // 获取meetingRoom信息 if (id) { @@ -314,13 +351,61 @@ const openDialog = (id: string) => { } }; -// 获取保洁用户下拉选项 -const getCleanUserOptions = async () => { +// 获取用户下拉选项(保洁和会务人员) +const getUserOptions = async () => { try { const res = await dropdown() - cleanUserOptions.value = Array.isArray(res.data) ? res.data : [] + const allUsers = Array.isArray(res.data) ? res.data : [] + + // 根据type字段分别赋值(type为字符串类型) + cleanUserOptions.value = allUsers.filter(user => user.type === '1') // type: '1' 为保洁 + serviceUserOptions.value = allUsers.filter(user => user.type === '2') // type: '2' 为会务人员 } catch (err: any) { - console.error('获取保洁用户列表失败:', err) + console.error('获取用户列表失败:', err) + } +} + +// 获取管理员用户选项 +const getAdminUserOptions = async (searchKeyword?: string) => { + try { + adminUserLoading.value = true + const params: any = {} + + // 如果有搜索关键词,添加到参数中 + if (searchKeyword) { + params.name = searchKeyword + params.mobile = searchKeyword + } + + const res = await getSimpleUserAll(params) + let allUsers = Array.isArray(res.data) ? res.data : [] + + // 如果接口不支持搜索参数,在前端进行过滤 + if (searchKeyword && allUsers.length > 0) { + allUsers = allUsers.filter(user => + user.nameWithMobile.toLowerCase().includes(searchKeyword.toLowerCase()) + ) + } + + adminUserOptions.value = allUsers + } catch (err: any) { + console.error('获取管理员用户列表失败:', err) + adminUserOptions.value = [] + } finally { + adminUserLoading.value = false + } +} + +// 管理员用户搜索处理 +const handleAdminUserSearch = (keyword: string) => { + adminUserSearchKeyword.value = keyword + getAdminUserOptions(keyword) +} + +// 管理员用户下拉框显示状态变化 +const handleAdminUserVisibleChange = (visible: boolean) => { + if (visible && adminUserOptions.value.length === 0) { + getAdminUserOptions() } } @@ -361,10 +446,13 @@ const getmeetingRoomData = (id: string) => { if (res.data.equipmentList) { equipmentList.value = res.data.equipmentList } - // 确保保洁信息正确回显 + // 确保保洁和会务信息正确回显 if (res.data.cleanUserId) { form.cleanUserId = res.data.cleanUserId } + if (res.data.serviceUserId) { + form.serviceUserId = res.data.serviceUserId + } }).finally(() => { loading.value = false }) diff --git a/src/views/integrated/meeting/meetingRoom/index.vue b/src/views/integrated/meeting/meetingRoom/index.vue index be1f094..9552cfd 100644 --- a/src/views/integrated/meeting/meetingRoom/index.vue +++ b/src/views/integrated/meeting/meetingRoom/index.vue @@ -35,6 +35,8 @@ + + + + diff --git a/src/views/integrated/meeting/serviceUser/index.vue b/src/views/integrated/meeting/serviceUser/index.vue new file mode 100644 index 0000000..0fbd39d --- /dev/null +++ b/src/views/integrated/meeting/serviceUser/index.vue @@ -0,0 +1,132 @@ + + +