39
39
</Dialog >
40
40
</template >
41
41
<script lang="ts" setup>
42
- import { defaultProps , findTreeNode , handleTree } from ' @/utils/tree'
42
+ import { defaultProps , handleTree } from ' @/utils/tree'
43
43
import * as DeptApi from ' @/api/system/dept'
44
44
import * as UserApi from ' @/api/system/user'
45
45
@@ -50,6 +50,7 @@ const emit = defineEmits<{
50
50
const { t } = useI18n () // 国际
51
51
const message = useMessage () // 消息弹窗
52
52
const deptTree = ref <Tree []>([]) // 部门树形结构化
53
+ const deptList = ref <any []>([]) // 保存扁平化的部门列表数据
53
54
const userList = ref <UserApi .UserVO []>([]) // 所有用户列表
54
55
const filteredUserList = ref <UserApi .UserVO []>([]) // 当前部门过滤后的用户列表
55
56
const selectedUserIdList: any = ref ([]) // 选中的用户列表
@@ -79,7 +80,9 @@ const open = async (id: number, selectedList?: any[]) => {
79
80
resetForm ()
80
81
81
82
// 加载部门、用户列表
82
- deptTree .value = handleTree (await DeptApi .getSimpleDeptList ())
83
+ const deptData = await DeptApi .getSimpleDeptList ()
84
+ deptList .value = deptData // 保存扁平结构的部门数据
85
+ deptTree .value = handleTree (deptData ) // 转换成树形结构
83
86
userList .value = await UserApi .getSimpleUserList ()
84
87
85
88
// 初始状态下,过滤列表等于所有用户列表
@@ -88,16 +91,31 @@ const open = async (id: number, selectedList?: any[]) => {
88
91
dialogVisible .value = true
89
92
}
90
93
94
+ /** 获取指定部门及其所有子部门的ID列表 */
95
+ const getChildDeptIds = (deptId : number , deptList : any []): number [] => {
96
+ const ids = [deptId ]
97
+ const children = deptList .filter ((dept ) => dept .parentId === deptId )
98
+ children .forEach ((child ) => {
99
+ ids .push (... getChildDeptIds (child .id , deptList ))
100
+ })
101
+ return ids
102
+ }
103
+
91
104
/** 获取部门过滤后的用户列表 */
92
- const getUserList = async (deptId ? : number ) => {
105
+ const filterUserList = async (deptId ? : number ) => {
93
106
formLoading .value = true
94
107
try {
95
- // @ts-ignore
96
- // TODO @芋艿:替换到 simple List 暂不支持 deptId 过滤
97
- // TODO @Zqqq:这个,可以使用前端过滤么?通过 deptList 获取到 deptId 子节点,然后去 userList
98
- const data = await UserApi .getUserPage ({ pageSize: 100 , pageNo: 1 , deptId })
99
- // 更新过滤后的用户列表
100
- filteredUserList .value = data .list
108
+ if (! deptId ) {
109
+ // 如果没有选择部门,显示所有用户
110
+ filteredUserList .value = [... userList .value ]
111
+ return
112
+ }
113
+
114
+ // 直接使用已保存的部门列表数据进行过滤
115
+ const deptIds = getChildDeptIds (deptId , deptList .value )
116
+
117
+ // 过滤出这些部门下的用户
118
+ filteredUserList .value = userList .value .filter ((user ) => deptIds .includes (user .deptId ))
101
119
} finally {
102
120
formLoading .value = false
103
121
}
@@ -121,14 +139,15 @@ const submitForm = async () => {
121
139
/** 重置表单 */
122
140
const resetForm = () => {
123
141
deptTree .value = []
142
+ deptList .value = []
124
143
userList .value = []
125
144
filteredUserList .value = []
126
145
selectedUserIdList .value = []
127
146
}
128
147
129
148
/** 处理部门被点击 */
130
149
const handleNodeClick = (row : { [key : string ]: any }) => {
131
- getUserList (row .id )
150
+ filterUserList (row .id )
132
151
}
133
152
134
153
defineExpose ({ open }) // 提供 open 方法,用于打开弹窗
0 commit comments