hurx 3 місяців тому
батько
коміт
92887c4ac1

+ 4 - 0
src/api/system/dept/types.ts

@@ -5,6 +5,8 @@ export interface DeptQuery extends PageQuery {
   deptName?: string;
   deptCategory?: string;
   status?: number;
+  isCompanyFlag?: string;
+  companyId?: number | string;
 }
 
 /**
@@ -27,6 +29,7 @@ export interface DeptVO extends BaseEntity {
   ancestors: string;
   menuId: string | number;
   platformCode: string;
+  companyId?: number | string;
 }
 
 /**
@@ -59,4 +62,5 @@ export interface DeptForm {
   delFlag?: string;
   ancestors?: string;
   platformCode?: string;
+  companyId?: number | string;
 }

+ 210 - 173
src/views/company/comDept/index.vue

@@ -4,10 +4,17 @@
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover">
           <el-form ref="queryFormRef" :model="queryParams" :inline="true">
-            <el-form-item label="数据来源" prop="dataSource">
-              <el-input v-model="queryParams.dataSource" placeholder="请输入数据来源" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="部门名称" prop="deptName">
+              <el-input v-model="queryParams.deptName" placeholder="请输入部门名称" clearable @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="类别编码" prop="deptCategory">
+              <el-input v-model="queryParams.deptCategory" placeholder="请输入类别编码" clearable style="width: 240px" @keyup.enter="handleQuery" />
+            </el-form-item>
+            <el-form-item label="状态" prop="status">
+              <el-select v-model="queryParams.status" placeholder="部门状态" clearable>
+                <el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
+              </el-select>
             </el-form-item>
-
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
               <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -17,86 +24,126 @@
       </div>
     </transition>
 
-    <el-card shadow="never">
+    <el-card shadow="hover">
       <template #header>
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="20"><span>部门设定</span> </el-col>
-          <el-col :span="1.5">
-            <el-button type="primary" plain icon="Plus" @click="handleAdd()" v-hasPermi="['system:comDept:add']">新增</el-button>
-          </el-col>
+        <el-row :gutter="10">
+          <!-- <el-col :span="1.5">
+            <el-button v-hasPermi="['system:dept:add']" type="primary" plain icon="Plus" @click="handleAdd()">新增 </el-button>
+          </el-col> -->
           <el-col :span="1.5">
             <el-button type="info" plain icon="Sort" @click="handleToggleExpandAll">展开/折叠</el-button>
           </el-col>
+          <right-toolbar v-model:show-search="showSearch" @query-table="getList"></right-toolbar>
         </el-row>
       </template>
+
       <el-table
-        ref="comDeptTableRef"
+        ref="deptTableRef"
         v-loading="loading"
-        :data="comDeptList"
-        row-key="id"
+        :data="deptList"
+        row-key="deptId"
         border
-        :default-expand-all="isExpandAll"
         :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
+        :default-expand-all="isExpandAll"
       >
-        <!-- <el-table-column label="部门编码" prop="deptCode" /> -->
-        <el-table-column label="部门名称" align="center" prop="deptName" />
-        <el-table-column label="生效日期" align="center" prop="validFrom" width="180">
+        <el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
+        <el-table-column prop="deptCategory" align="center" label="类别编码" width="200"></el-table-column>
+        <el-table-column prop="orderNum" align="center" label="排序" width="200"></el-table-column>
+        <el-table-column prop="status" align="center" label="状态" width="100">
           <template #default="scope">
-            <span>{{ parseTime(scope.row.validFrom, '{y}-{m}-{d}') }}</span>
+            <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
           </template>
         </el-table-column>
-        <el-table-column label="失效日期" align="center" prop="validTo" width="180">
+        <el-table-column label="创建时间" align="center" prop="createTime" width="200">
           <template #default="scope">
-            <span>{{ parseTime(scope.row.validTo, '{y}-{m}-{d}') }}</span>
+            <span>{{ proxy.parseTime(scope.row.createTime) }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="主管" align="center" prop="leader" />
-        <el-table-column label="是否启用" align="center" prop="status">
+        <el-table-column fixed="right" align="center" label="操作">
           <template #default="scope">
-            <el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
-          </template>
-        </el-table-column>
-        <el-table-column label="数据来源" align="center" prop="dataSource" />
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-          <template #default="scope">
-            <el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['system:comDept:add']">新增</el-button>
-
-            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:comDept:edit']">编辑</el-button>
+            <el-tooltip content="修改" placement="top">
+              <el-button v-hasPermi="['system:dept:edit']" link type="primary" icon="Edit" @click="handleUpdate(scope.row)" />
+            </el-tooltip>
+            <el-tooltip content="新增" placement="top">
+              <el-button v-hasPermi="['system:dept:add']" link type="primary" icon="Plus" @click="handleAdd(scope.row)" />
+            </el-tooltip>
+            <el-tooltip content="删除" placement="top">
+              <el-button v-hasPermi="['system:dept:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)" />
+            </el-tooltip>
           </template>
         </el-table-column>
       </el-table>
     </el-card>
-    <!-- 添加或修改企业部门对话框 -->
-    <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
-      <el-form ref="comDeptFormRef" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="部门名称" prop="deptName">
-          <el-input v-model="form.deptName" placeholder="请输入部门名称" />
-        </el-form-item>
-        <el-form-item label="父部门ID" prop="parentId">
-          <el-tree-select
-            v-model="form.parentId"
-            :data="comDeptOptions"
-            :props="{ value: 'id', label: 'deptName', children: 'children' }"
-            value-key="id"
-            placeholder="请选择父部门ID"
-            check-strictly
-          />
-        </el-form-item>
-        <el-form-item label="是否启用" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio v-for="dict in sys_platform_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="生效日期" prop="validFrom">
-          <el-date-picker clearable v-model="form.validFrom" type="date" value-format="YYYY-MM-DD" placeholder="选择生效日期" />
-        </el-form-item>
-        <el-form-item label="失效日期" prop="validTo">
-          <el-date-picker clearable v-model="form.validTo" type="date" value-format="YYYY-MM-DD" placeholder="选择失效日期" />
-        </el-form-item>
+
+    <el-dialog v-model="dialog.visible" :title="dialog.title" destroy-on-close append-to-body width="600px">
+      <el-form ref="deptFormRef" :model="form" :rules="rules" label-width="80px">
+        <el-row>
+          <el-col v-if="form.parentId !== 0" :span="24">
+            <el-form-item label="上级部门" prop="parentId">
+              <el-tree-select
+                v-model="form.parentId"
+                :data="deptOptions"
+                :props="{ value: 'deptId', label: 'deptName', children: 'children' } as any"
+                value-key="deptId"
+                placeholder="选择上级部门"
+                check-strictly
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="部门名称" prop="deptName">
+              <el-input v-model="form.deptName" placeholder="请输入部门名称" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="类别编码" prop="deptCategory">
+              <el-input v-model="form.deptCategory" placeholder="请输入类别编码" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="显示排序" prop="orderNum">
+              <el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="负责人" prop="leader">
+              <el-select v-model="form.leader" placeholder="请选择负责人">
+                <el-option v-for="item in deptUserList" :key="item.userId" :label="item.userName" :value="item.userId" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="联系电话" prop="phone">
+              <el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="邮箱" prop="email">
+              <el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="部门状态">
+              <el-radio-group v-model="form.status">
+                <el-radio v-for="dict in sys_normal_disable" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <!-- 仅当是总控平台时显示 -->
+            <el-form-item v-if="isMainPlatform" label="所属平台" prop="platformCode">
+              <el-select v-model="form.platformCode" placeholder="请选择平台">
+                <el-option v-for="dict in sys_platform_code" :key="dict.value" :label="dict.label" :value="dict.value" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
-          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
+          <el-button type="primary" @click="submitForm">确 定</el-button>
           <el-button @click="cancel">取 消</el-button>
         </div>
       </template>
@@ -104,200 +151,190 @@
   </div>
 </template>
 
-<script setup name="ComDept" lang="ts">
-import { listComDept, getComDept, delComDept, addComDept, updateComDept, changeStatus } from '@/api/company/comDept';
-import { ComDeptVO, ComDeptQuery, ComDeptForm } from '@/api/company/comDept/types';
+<script setup name="Dept" lang="ts">
+import { listDept, getDept, delDept, addDept, updateDept, listDeptExcludeChild } from '@/api/system/dept';
+import { DeptForm, DeptQuery, DeptVO } from '@/api/system/dept/types';
+import { UserVO } from '@/api/system/user/types';
+import { listUserByDeptId } from '@/api/system/user';
+import { getPlatformCode } from '@/utils/platform';
 
-type ComDeptOption = {
-  id: number;
+interface DeptOptionsType {
+  deptId: number | string;
   deptName: string;
-  children?: ComDeptOption[];
-};
+  children: DeptOptionsType[];
+}
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const { sys_normal_disable, sys_platform_code } = toRefs<any>(proxy?.useDict('sys_normal_disable', 'sys_platform_code'));
 
-const { sys_platform_yes_no } = toRefs<any>(proxy?.useDict('sys_platform_yes_no'));
-
-const comDeptList = ref<ComDeptVO[]>([]);
-const comDeptOptions = ref<ComDeptOption[]>([]);
-const buttonLoading = ref(false);
+const deptList = ref<DeptVO[]>([]);
+const loading = ref(true);
 const showSearch = ref(true);
+const deptOptions = ref<DeptOptionsType[]>([]);
 const isExpandAll = ref(true);
-const loading = ref(false);
-
-const queryFormRef = ref<ElFormInstance>();
-const comDeptFormRef = ref<ElFormInstance>();
-const comDeptTableRef = ref<ElTableInstance>();
+const deptUserList = ref<UserVO[]>([]);
+const currentPlatform = getPlatformCode();
+const isMainPlatform = computed(() => currentPlatform === 'main');
 
 const dialog = reactive<DialogOption>({
   visible: false,
   title: ''
 });
 
-const initFormData: ComDeptForm = {
-  id: undefined,
-  deptCode: undefined,
-  companyId: undefined,
-  deptName: undefined,
+const deptTableRef = ref<ElTableInstance>();
+const queryFormRef = ref<ElFormInstance>();
+const deptFormRef = ref<ElFormInstance>();
+
+const initFormData: DeptForm = {
+  deptId: undefined,
   parentId: undefined,
-  ancestors: undefined,
+  deptName: undefined,
+  companyId: undefined,
   deptCategory: undefined,
-  level: undefined,
+  orderNum: 0,
   leader: undefined,
   phone: undefined,
   email: undefined,
-  validFrom: undefined,
-  validTo: undefined,
   status: '0',
-  dataSource: undefined,
-  orderNum: undefined
+  platformCode: ''
 };
-
-const data = reactive<PageData<ComDeptForm, ComDeptQuery>>({
+const initData: PageData<DeptForm, DeptQuery> = {
   form: { ...initFormData },
   queryParams: {
-    deptCode: undefined,
-    companyId: undefined,
+    pageNum: 1,
+    pageSize: 10,
     deptName: undefined,
-    parentId: undefined,
-    ancestors: undefined,
     deptCategory: undefined,
-    level: undefined,
-    leader: undefined,
-    phone: undefined,
-    email: undefined,
-    validFrom: undefined,
-    validTo: undefined,
     status: undefined,
-    dataSource: undefined,
-    orderNum: undefined,
-    platformCode: undefined,
-    params: {}
+    isCompanyFlag: '0',
+    companyId: 1
   },
   rules: {
-    deptName: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }]
+    parentId: [{ required: true, message: '上级部门不能为空', trigger: 'blur' }],
+    deptName: [{ required: true, message: '部门名称不能为空', trigger: 'blur' }],
+    orderNum: [{ required: true, message: '显示排序不能为空', trigger: 'blur' }],
+    platformCode: [{ required: true, message: '所属平台不能为空', trigger: 'blur' }],
+    email: [{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }],
+    phone: [{ pattern: /^1[3456789][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' }]
   }
-});
+};
+const data = reactive<PageData<DeptForm, DeptQuery>>(initData);
 
-const { queryParams, form, rules } = toRefs(data);
+const { queryParams, form, rules } = toRefs<PageData<DeptForm, DeptQuery>>(data);
 
-/** 查询企业部门列表 */
+/** 查询菜单列表 */
 const getList = async () => {
   loading.value = true;
-  const res = await listComDept(queryParams.value);
-  const data = proxy?.handleTree<ComDeptVO>(res.data, 'id', 'parentId');
+  const res = await listDept(queryParams.value);
+  const data = proxy?.handleTree<DeptVO>(res.data, 'deptId');
   if (data) {
-    comDeptList.value = data;
-    loading.value = false;
+    deptList.value = data;
   }
+  loading.value = false;
 };
 
-const handleStatusChange = async (row: ComDeptVO) => {
-  const oldValue = row.status; // 保存旧值(0 或 1)
-
-  try {
-    await changeStatus(row.id, row.status); // 传新值
-    proxy?.$modal.msgSuccess('操作成功');
-  } catch {
-    row.status = oldValue; // 失败回滚
-    proxy?.$modal.msgError('操作失败,请重试');
+/** 查询当前部门的所有用户 */
+async function getDeptAllUser(deptId: any) {
+  if (deptId !== null && deptId !== '' && deptId !== undefined) {
+    const res = await listUserByDeptId(deptId);
+    deptUserList.value = res.data;
   }
-};
-
-/** 查询企业部门下拉树结构 */
-const getTreeselect = async () => {
-  const res = await listComDept();
-  comDeptOptions.value = [];
-  const data: ComDeptOption = { id: 0, deptName: '顶级节点', children: [] };
-  data.children = proxy?.handleTree<ComDeptOption>(res.data, 'id', 'parentId');
-  comDeptOptions.value.push(data);
-};
+}
 
-// 取消按钮
+/** 取消按钮 */
 const cancel = () => {
   reset();
   dialog.visible = false;
 };
-
-// 表单重置
+/** 表单重置 */
 const reset = () => {
   form.value = { ...initFormData };
-  comDeptFormRef.value?.resetFields();
+  deptFormRef.value?.resetFields();
 };
 
 /** 搜索按钮操作 */
 const handleQuery = () => {
   getList();
 };
-
 /** 重置按钮操作 */
 const resetQuery = () => {
   queryFormRef.value?.resetFields();
   handleQuery();
 };
 
-/** 新增按钮操作 */
-const handleAdd = (row?: ComDeptVO) => {
-  reset();
-  getTreeselect();
-  if (row != null && row.id) {
-    form.value.parentId = row.id;
-  } else {
-    form.value.parentId = 0;
-  }
-  dialog.visible = true;
-  dialog.title = '添加企业部门';
-};
-
 /** 展开/折叠操作 */
 const handleToggleExpandAll = () => {
   isExpandAll.value = !isExpandAll.value;
-  toggleExpandAll(comDeptList.value, isExpandAll.value);
+  toggleExpandAll(deptList.value, isExpandAll.value);
 };
-
-/** 展开/折叠操作 */
-const toggleExpandAll = (data: ComDeptVO[], status: boolean) => {
+/** 展开/折叠所有 */
+const toggleExpandAll = (data: DeptVO[], status: boolean) => {
   data.forEach((item) => {
-    comDeptTableRef.value?.toggleRowExpansion(item, status);
+    deptTableRef.value?.toggleRowExpansion(item, status);
     if (item.children && item.children.length > 0) toggleExpandAll(item.children, status);
   });
 };
 
+/** 新增按钮操作 */
+const handleAdd = async (row?: DeptVO) => {
+  reset();
+  const res = await listDept();
+  const data = proxy?.handleTree<DeptOptionsType>(res.data, 'deptId');
+  if (data) {
+    deptOptions.value = data;
+    if (row && row.deptId) {
+      form.value.parentId = row?.deptId;
+    }
+    if (row && row.companyId) {
+      form.value.companyId = row?.companyId;
+    }
+    if (row && row.platformCode) {
+      form.value.platformCode = row?.platformCode;
+    }
+    console.log(row);
+    dialog.visible = true;
+    dialog.title = '添加部门';
+  }
+};
+
 /** 修改按钮操作 */
-const handleUpdate = async (row: ComDeptVO) => {
+const handleUpdate = async (row: DeptVO) => {
   reset();
-  await getTreeselect();
-  if (row != null) {
-    form.value.parentId = row.parentId;
+  //查询当前部门所有用户
+  getDeptAllUser(row.deptId);
+  const res = await getDept(row.deptId);
+  form.value = res.data;
+  const response = await listDeptExcludeChild(row.deptId);
+  const data = proxy?.handleTree<DeptOptionsType>(response.data, 'deptId');
+  if (data) {
+    deptOptions.value = data;
+    if (data.length === 0) {
+      const noResultsOptions: DeptOptionsType = {
+        deptId: res.data.parentId,
+        deptName: res.data.parentName,
+        children: []
+      };
+      deptOptions.value.push(noResultsOptions);
+    }
   }
-  const res = await getComDept(row.id);
-  Object.assign(form.value, res.data);
   dialog.visible = true;
-  dialog.title = '修改企业部门';
+  dialog.title = '修改部门';
 };
-
 /** 提交按钮 */
 const submitForm = () => {
-  comDeptFormRef.value?.validate(async (valid: boolean) => {
+  deptFormRef.value?.validate(async (valid: boolean) => {
     if (valid) {
-      buttonLoading.value = true;
-      if (form.value.id) {
-        await updateComDept(form.value).finally(() => (buttonLoading.value = false));
-      } else {
-        await addComDept(form.value).finally(() => (buttonLoading.value = false));
-      }
+      form.value.deptId ? await updateDept(form.value) : await addDept(form.value);
       proxy?.$modal.msgSuccess('操作成功');
       dialog.visible = false;
-      getList();
+      await getList();
     }
   });
 };
-
 /** 删除按钮操作 */
-const handleDelete = async (row: ComDeptVO) => {
-  await proxy?.$modal.confirm('是否确认删除企业部门编号为"' + row.id + '"的数据项?');
-  loading.value = true;
-  await delComDept(row.id).finally(() => (loading.value = false));
+const handleDelete = async (row: DeptVO) => {
+  await proxy?.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?');
+  await delDept(row.deptId);
   await getList();
   proxy?.$modal.msgSuccess('删除成功');
 };

+ 47 - 17
src/views/company/comStaff/index.vue

@@ -11,8 +11,8 @@
               <el-tree-select
                 v-model="queryParams.deptId"
                 :data="deptList"
-                node-key="id"
-                :props="{ value: 'id', label: 'deptName', children: 'children' }"
+                node-key="deptId"
+                :props="{ value: 'deptId', label: 'deptName', children: 'children' }"
                 placeholder="请选择部门"
                 clearable
               />
@@ -90,8 +90,8 @@
               <el-tree-select
                 v-model="form.deptId"
                 :data="deptList"
-                node-key="id"
-                :props="{ value: 'id', label: 'deptName', children: 'children' }"
+                node-key="deptId"
+                :props="{ value: 'deptId', label: 'deptName', children: 'children' }"
                 placeholder="请选择部门"
               />
             </el-form-item>
@@ -142,10 +142,10 @@
 <script setup name="ComStaff" lang="ts">
 import { listComStaff, getComStaff, delComStaff, addComStaff, updateComStaff, changeStatus } from '@/api/company/comStaff';
 import { ComStaffVO, ComStaffQuery, ComStaffForm } from '@/api/company/comStaff/types';
-import { listComDept } from '@/api/company/comDept';
-import { ComDeptVO } from '@/api/company/comDept/types';
-import { listComPost } from '@/api/company/comPost';
-import { ComPostVO } from '@/api/company/comPost/types';
+import { listDept, getDept, listDeptExcludeChild } from '@/api/system/dept';
+import { DeptVO } from '@/api/system/dept/types';
+import { listPost, getPost, deptTreeSelect } from '@/api/system/post';
+import { PostVO } from '@/api/system/post/types';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { sys_platform_yes_no, sys_user_sex } = toRefs<any>(proxy?.useDict('sys_platform_yes_no', 'sys_user_sex'));
@@ -158,8 +158,8 @@ const ids = ref<Array<string | number>>([]);
 const single = ref(true);
 const multiple = ref(true);
 const total = ref(0);
-const deptList = ref<ComDeptVO[]>([]);
-const postList = ref<ComPostVO[]>([]);
+const deptList = ref<DeptVO[]>([]);
+const postList = ref<PostVO[]>([]);
 
 const queryFormRef = ref<ElFormInstance>();
 const comStaffFormRef = ref<ElFormInstance>();
@@ -214,24 +214,54 @@ const { queryParams, form, rules } = toRefs(data);
 
 /** 获取部门列表(树结构) */
 const getDeptList = async () => {
-  try {
-    const res = await listComDept({ status: '0' });
-    deptList.value = res.data || [];
-  } catch (error) {
-    console.error('获取部门列表失败', error);
+  const res = await listDept();
+  const data = proxy?.handleTree<DeptVO>(res.data, 'deptId');
+  if (data) {
+    deptList.value = data;
   }
+  loading.value = false;
 };
 
 /** 获取岗位列表 */
-const getPostList = async () => {
+const getPostList = async (deptId?: number | string) => {
   try {
-    const res = await listComPost({ pageNum: 1, pageSize: 9999, status: '0' });
+    const res = await listPost({ belongDeptId: deptId });
     postList.value = res.rows || [];
   } catch (error) {
     console.error('获取岗位列表失败', error);
   }
 };
 
+/** 监听部门选择变化,更新岗位列表 */
+watch(
+  () => queryParams.value.deptId,
+  (newDeptId) => {
+    // 清空岗位选择
+    queryParams.value.postId = undefined;
+    // 根据部门获取岗位列表
+    if (newDeptId) {
+      getPostList(newDeptId);
+    } else {
+      getPostList();
+    }
+  }
+);
+
+/** 监听对话框中部门选择变化,更新岗位列表 */
+watch(
+  () => form.value.deptId,
+  (newDeptId) => {
+    // 清空岗位选择
+    form.value.postId = undefined;
+    // 根据部门获取岗位列表
+    if (newDeptId) {
+      getPostList(newDeptId);
+    } else {
+      getPostList();
+    }
+  }
+);
+
 /** 查询人员信息列表 */
 const getList = async () => {
   loading.value = true;