接口修正、成就修正、学习记录修正
This commit is contained in:
@@ -25,8 +25,22 @@
|
||||
<el-table-column prop="phone" label="手机号" min-width="120" />
|
||||
<el-table-column prop="realName" label="真实姓名" min-width="100" />
|
||||
<el-table-column prop="nickname" label="昵称" min-width="100" />
|
||||
<el-table-column prop="deptName" label="部门" min-width="120" />
|
||||
<el-table-column prop="roleName" label="角色" min-width="120" />
|
||||
<el-table-column label="部门-角色" min-width="200">
|
||||
<template #default="{ row }">
|
||||
<div class="tag-container">
|
||||
<el-tag
|
||||
v-for="(combo, index) in row.deptRoleCombos"
|
||||
:key="index"
|
||||
type="primary"
|
||||
size="small"
|
||||
style="margin: 2px"
|
||||
>
|
||||
{{ combo }}
|
||||
</el-tag>
|
||||
<span v-if="!row.deptRoleCombos || row.deptRoleCombos.length === 0" style="color: #909399;">未分配</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="80">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.status === 0 ? 'success' : 'danger'">
|
||||
@@ -340,13 +354,51 @@ onMounted(() => {
|
||||
loadUsers();
|
||||
});
|
||||
|
||||
// 合并同一用户的多个部门角色(部门-角色是绑定关系)
|
||||
function mergeUserDeptRoles(users: UserVO[]): UserVO[] {
|
||||
const userMap = new Map<string, UserVO>();
|
||||
|
||||
users.forEach(user => {
|
||||
const userId = user.id || user.userID;
|
||||
if (!userId) return;
|
||||
|
||||
// 生成部门-角色组合字符串
|
||||
const deptRoleCombo = (user.deptName && user.roleName)
|
||||
? `${user.deptName}-${user.roleName}`
|
||||
: '';
|
||||
|
||||
if (!userMap.has(userId)) {
|
||||
// 首次遇到该用户,初始化
|
||||
userMap.set(userId, {
|
||||
...user,
|
||||
deptRoleCombos: deptRoleCombo ? [deptRoleCombo] : []
|
||||
});
|
||||
} else {
|
||||
// 已存在该用户,合并部门-角色组合
|
||||
const existingUser = userMap.get(userId)!;
|
||||
|
||||
// 添加部门-角色组合(去重)
|
||||
if (deptRoleCombo && !existingUser.deptRoleCombos?.includes(deptRoleCombo)) {
|
||||
existingUser.deptRoleCombos = [...(existingUser.deptRoleCombos || []), deptRoleCombo];
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return Array.from(userMap.values());
|
||||
}
|
||||
|
||||
async function loadUsers() {
|
||||
try {
|
||||
loading.value = true;
|
||||
const result = await userApi.getUserPage(pageParam.value);
|
||||
if (result.success) {
|
||||
userList.value = result.dataList || [];
|
||||
total.value = result.pageParam?.totalElements || 0;
|
||||
const rawUsers = result.dataList || [];
|
||||
// 合并同一用户的多个部门角色
|
||||
userList.value = mergeUserDeptRoles(rawUsers);
|
||||
// 注意:由于合并了数据,total应该是去重后的用户数量
|
||||
// 但是后端返回的total是原始记录数,这里需要调整
|
||||
// 如果后端无法修改,我们需要重新计算total
|
||||
total.value = userList.value.length;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载用户列表失败:', error);
|
||||
@@ -413,8 +465,14 @@ async function handleDeptRoleConfirm(items: any[]) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 【限制】检查是否只选择了一个部门-角色
|
||||
if (items.length === 0) {
|
||||
ElMessage.warning('请至少选择一个部门角色');
|
||||
ElMessage.warning('请选择一个部门角色');
|
||||
return;
|
||||
}
|
||||
|
||||
if (items.length > 1) {
|
||||
ElMessage.error('一个用户只能绑定一个部门-角色,请选择且仅选择一个');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -437,7 +495,8 @@ async function handleDeptRoleConfirm(items: any[]) {
|
||||
const result = await userApi.bindUserDeptRole(userDeptRoleVO);
|
||||
|
||||
if (result.success) {
|
||||
ElMessage.success(`成功绑定 ${items.length} 个部门角色`);
|
||||
ElMessage.success('成功绑定部门角色');
|
||||
showDeptRoleSelector.value = false;
|
||||
loadUsers();
|
||||
} else {
|
||||
ElMessage.error(result.message || '绑定失败');
|
||||
@@ -549,4 +608,11 @@ function handleSizeChange(size: number) {
|
||||
justify-content: flex-end;
|
||||
margin-top: 24px;
|
||||
}
|
||||
|
||||
.tag-container {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 4px;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user