From cf2aadd89a936886f02cfc232b70ca7cb25fe85b Mon Sep 17 00:00:00 2001 From: Flow <958079825@qq.com> Date: Fri, 18 Jul 2025 11:14:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=BA=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/org/index.ts | 5 ++ src/api/system/user/index.ts | 2 + src/views/system/user/OrgList.vue | 125 +++++++++++++++++++++++++++++ src/views/system/user/UserForm.vue | 50 +++++++++++- src/views/system/user/index.vue | 35 +++++--- 5 files changed, 201 insertions(+), 16 deletions(-) create mode 100644 src/views/system/user/OrgList.vue diff --git a/src/api/org/index.ts b/src/api/org/index.ts index d515196..328e71f 100644 --- a/src/api/org/index.ts +++ b/src/api/org/index.ts @@ -48,5 +48,10 @@ export const OrgApi = { // 查询上级机构 getParentOrgList: async () => { return await request.get({ url: `/system/org/parent-org-list` }) + }, + + // 查询机构列表 + getOrgList: async () => { + return await request.get({ url: `/system/org/list` }) } } diff --git a/src/api/system/user/index.ts b/src/api/system/user/index.ts index 36776ea..d19e2b4 100644 --- a/src/api/system/user/index.ts +++ b/src/api/system/user/index.ts @@ -4,6 +4,8 @@ export interface UserVO { id: number username: string nickname: string + orgId: number + orgName: string deptId: number postIds: string[] email: string diff --git a/src/views/system/user/OrgList.vue b/src/views/system/user/OrgList.vue new file mode 100644 index 0000000..45ffe13 --- /dev/null +++ b/src/views/system/user/OrgList.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/src/views/system/user/UserForm.vue b/src/views/system/user/UserForm.vue index 630688a..8a0a881 100644 --- a/src/views/system/user/UserForm.vue +++ b/src/views/system/user/UserForm.vue @@ -13,7 +13,7 @@ - + + + + + + + @@ -68,7 +80,7 @@ - + @@ -103,6 +115,7 @@ import * as PostApi from '@/api/system/post' import * as DeptApi from '@/api/system/dept' import * as UserApi from '@/api/system/user' import { FormRules } from 'element-plus' +import { OrgApi, OrgVO } from '@/api/org' defineOptions({ name: 'SystemUserForm' }) @@ -116,6 +129,8 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改 const formData = ref({ nickname: '', deptId: '', + orgId: '', + orgName: '', mobile: '', email: '', id: undefined, @@ -149,6 +164,22 @@ const formRules = reactive({ const formRef = ref() // 表单 Ref const deptList = ref([]) // 树形结构 const postList = ref([] as PostApi.PostVO[]) // 岗位列表 +const orgList = ref([] as OrgVO[]) // 机构列表 + +// 监听机构选择变化,自动设置orgName +watch( + () => formData.value.orgId, + (newOrgId) => { + if (newOrgId) { + const selectedOrg = orgList.value.find((org) => org.orgId === Number(newOrgId)) + if (selectedOrg) { + formData.value.orgName = selectedOrg.orgName + } + } else { + formData.value.orgName = '' + } + } +) /** 打开弹窗 */ const open = async (type: string, id?: number) => { @@ -169,6 +200,9 @@ const open = async (type: string, id?: number) => { deptList.value = handleTree(await DeptApi.getSimpleDeptList()) // 加载岗位列表 postList.value = await PostApi.getSimplePostList() + // 加载机构列表 + const orgResponse = await OrgApi.getOrgList() + orgList.value = Array.isArray(orgResponse) ? orgResponse : orgResponse.list || [] } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 @@ -182,12 +216,18 @@ const submitForm = async () => { // 提交请求 formLoading.value = true try { - const data = formData.value as unknown as UserApi.UserVO + // 确保orgId为数字类型 + const submitData = { + ...formData.value, + orgId: formData.value.orgId ? Number(formData.value.orgId) : undefined + } + const data = submitData as unknown as UserApi.UserVO if (formType.value === 'create') { await UserApi.createUser(data) message.success(t('common.createSuccess')) } else { await UserApi.updateUser(data) + console.log(data) message.success(t('common.updateSuccess')) } dialogVisible.value = false @@ -203,6 +243,8 @@ const resetForm = () => { formData.value = { nickname: '', deptId: '', + orgId: '', + orgName: '', mobile: '', email: '', id: undefined, diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index d594f25..fa69f77 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -4,10 +4,10 @@ - + - + @@ -119,12 +119,19 @@ prop="nickname" :show-overflow-tooltip="true" /> - --> + @@ -219,7 +226,7 @@ import * as UserApi from '@/api/system/user' import UserForm from './UserForm.vue' import UserImportForm from './UserImportForm.vue' import UserAssignRoleForm from './UserAssignRoleForm.vue' -import DeptTree from './DeptTree.vue' +import OrgList from './OrgList.vue' defineOptions({ name: 'SystemUser' }) @@ -236,7 +243,9 @@ const queryParams = reactive({ mobile: undefined, status: undefined, deptId: undefined, - createTime: [] + createTime: [], + orgId: undefined, + orgName: undefined }) const queryFormRef = ref() // 搜索的表单 @@ -264,15 +273,17 @@ const resetQuery = () => { handleQuery() } -/** 处理部门被点击 */ -const handleDeptNodeClick = async (row: any) => { - if (row === undefined) { - queryParams.deptId = undefined - await getList() +/** 处理机构被点击 */ +const handleOrgNodeClick = async (org: any) => { + if (org === undefined) { + queryParams.orgId = undefined + queryParams.orgName = undefined } else { - queryParams.deptId = row.id - await getList() + queryParams.orgId = org.orgId || org.id // 尝试两个字段 + queryParams.orgName = org.orgName } + queryParams.pageNo = 1 // 重置到第一页 + await getList() } /** 添加/修改操作 */