Răsfoiți Sursa

update 优化 新增编辑用户 过滤禁用的部门

疯狂的狮子Li 4 luni în urmă
părinte
comite
7a9ccedadc
3 a modificat fișierele cu 39 adăugiri și 12 ștergeri
  1. 12 0
      src/api/system/dept/types.ts
  2. 2 2
      src/api/system/user/index.ts
  3. 25 10
      src/views/system/user/index.vue

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

@@ -28,6 +28,18 @@ export interface DeptVO extends BaseEntity {
   menuId: string | number;
 }
 
+/**
+ * 部门类型
+ */
+export interface DeptTreeVO extends BaseEntity {
+  id: number | string;
+  label: string;
+  parentId: number | string;
+  weight: number;
+  children: DeptTreeVO[];
+  disabled: boolean;
+}
+
 /**
  * 部门表单类型
  */

+ 2 - 2
src/api/system/user/index.ts

@@ -1,4 +1,4 @@
-import { DeptVO } from './../dept/types';
+import {DeptTreeVO, DeptVO} from './../dept/types';
 import { RoleVO } from '@/api/system/role/types';
 import request from '@/utils/request';
 import { AxiosPromise } from 'axios';
@@ -202,7 +202,7 @@ export const listUserByDeptId = (deptId: string | number): AxiosPromise<UserVO[]
 /**
  * 查询部门下拉树结构
  */
-export const deptTreeSelect = (): AxiosPromise<DeptVO[]> => {
+export const deptTreeSelect = (): AxiosPromise<DeptTreeVO[]> => {
   return request({
     url: '/system/user/deptTree',
     method: 'get'

+ 25 - 10
src/views/system/user/index.vue

@@ -154,7 +154,7 @@
             <el-form-item label="归属部门" prop="deptId">
               <el-tree-select
                 v-model="form.deptId"
-                :data="deptOptions"
+                :data="enabledDeptOptions"
                 :props="{ value: 'id', label: 'label', children: 'children' }"
                 value-key="id"
                 placeholder="请选择归属部门"
@@ -287,7 +287,7 @@
 <script setup name="User" lang="ts">
 import api from '@/api/system/user';
 import { UserForm, UserQuery, UserVO } from '@/api/system/user/types';
-import { DeptVO } from '@/api/system/dept/types';
+import {DeptTreeVO, DeptVO} from '@/api/system/dept/types';
 import { RoleVO } from '@/api/system/role/types';
 import { PostQuery, PostVO } from '@/api/system/post/types';
 import { treeselect } from '@/api/system/dept';
@@ -307,7 +307,8 @@ const multiple = ref(true);
 const total = ref(0);
 const dateRange = ref<[DateModelType, DateModelType]>(['', '']);
 const deptName = ref('');
-const deptOptions = ref<DeptVO[]>([]);
+const deptOptions = ref<DeptTreeVO[]>([]);
+const enabledDeptOptions = ref<DeptTreeVO[]>([]);
 const initPassword = ref<string>('');
 const postOptions = ref<PostVO[]>([]);
 const roleOptions = ref<RoleVO[]>([]);
@@ -431,12 +432,6 @@ watchEffect(
   }
 );
 
-/** 查询部门下拉树结构 */
-const getTreeSelect = async () => {
-  const res = await api.deptTreeSelect();
-  deptOptions.value = res.data;
-};
-
 /** 查询用户列表 */
 const getList = async () => {
   loading.value = true;
@@ -446,6 +441,26 @@ const getList = async () => {
   total.value = res.total;
 };
 
+/** 查询部门下拉树结构 */
+const getDeptTree = async () => {
+  const res = await api.deptTreeSelect();
+  deptOptions.value = res.data;
+  enabledDeptOptions.value = filterDisabledDept(res.data);
+};
+
+/** 过滤禁用的部门 */
+const filterDisabledDept = (deptList: DeptTreeVO[]) => {
+  return deptList.filter(dept => {
+    if (dept.disabled) {
+      return false;
+    }
+    if (dept.children && dept.children.length) {
+      dept.children = filterDisabledDept(dept.children);
+    }
+    return true;
+  });
+};
+
 /** 节点单击事件 */
 const handleNodeClick = (data: DeptVO) => {
   queryParams.value.deptId = data.id;
@@ -643,7 +658,7 @@ const resetForm = () => {
   form.value.status = '1';
 };
 onMounted(() => {
-  getTreeSelect(); // 初始化部门数据
+  getDeptTree(); // 初始化部门数据
   getList(); // 初始化列表数据
   proxy?.getConfigKey('sys.user.initPassword').then((response) => {
     initPassword.value = response.data;