web- 用户选择组件

This commit is contained in:
2025-10-22 18:00:47 +08:00
parent 3158a85934
commit 5449e5b5ff
5 changed files with 1021 additions and 28 deletions

View File

@@ -317,9 +317,13 @@
:title="selectorMode === 'add' ? '添加人员' : '删除人员'"
:left-title="selectorMode === 'add' ? '可添加人员' : '当前人员'"
:right-title="selectorMode === 'add' ? '待添加人员' : '待删除人员'"
:available-users="availableUsers"
:available-users="selectorMode === 'remove' ? availableUsers : []"
:initial-target-users="[]"
:loading="saving"
:use-pagination="selectorMode === 'add'"
:fetch-api="selectorMode === 'add' ? userApi.getUserPage : undefined"
:filter-params="userFilterParams"
:page-size="20"
@confirm="handleUserSelectConfirm"
@cancel="closeSelectorModal"
/>
@@ -378,10 +382,10 @@ const deleting = ref(false);
// 人员管理相关
const managingTask = ref<LearningTask | null>(null);
const selectorMode = ref<'add' | 'remove'>('add');
const allUsers = ref<UserVO[]>([]);
const currentUsers = ref<UserVO[]>([]);
const availableUsers = ref<UserVO[]>([]);
const saving = ref(false);
const userFilterParams = ref<any>({});
// 计算显示的页码
const displayPages = computed(() => {
@@ -519,22 +523,23 @@ async function handleUpdateUser(task: LearningTask) {
managingTask.value = task;
try {
// 加载所有用户
const usersRes = await userApi.getUserList({});
if (usersRes.success && usersRes.dataList) {
allUsers.value = usersRes.dataList;
}
// 加载任务详情(包含已分配的用户)
const taskRes = await learningTaskApi.getTaskById(task.taskID!);
if (taskRes.success && taskRes.data) {
const taskUsers = taskRes.data.taskUsers || [];
const assignedUserIds = taskUsers.map(tu => tu.userID!);
// 当前已分配的用户
currentUsers.value = allUsers.value.filter(user =>
assignedUserIds.includes(user.id!)
);
// 加载用户详情(批量查询)
if (assignedUserIds.length > 0) {
const usersRes = await userApi.getUserList({});
if (usersRes.success && usersRes.dataList) {
currentUsers.value = usersRes.dataList.filter(user =>
assignedUserIds.includes(user.id!)
);
}
} else {
currentUsers.value = [];
}
}
showUserList.value = true;
@@ -555,11 +560,8 @@ function closeUserList() {
function showAddUserSelector() {
selectorMode.value = 'add';
// 左侧显示未分配的用户
const currentUserIds = currentUsers.value.map(u => u.id!);
availableUsers.value = allUsers.value.filter(user =>
!currentUserIds.includes(user.id!)
);
// 设置过滤参数(可以过滤掉已分配的用户,但在组件内部会自动过滤)
userFilterParams.value = {};
showUserSelector.value = true;
}