serv\web- 日志
This commit is contained in:
@@ -319,16 +319,17 @@
|
||||
:title="selectorMode === 'add' ? '添加人员' : '删除人员'"
|
||||
:left-title="selectorMode === 'add' ? '可添加人员' : '当前人员'"
|
||||
:right-title="selectorMode === 'add' ? '待添加人员' : '待删除人员'"
|
||||
:available-items="selectorMode === 'remove' ? availableUsers : []"
|
||||
:initial-target-items="[]"
|
||||
:fetch-available-api="selectorMode === 'add' ? fetchAllUsers : fetchCurrentUsers"
|
||||
:fetch-selected-api="selectorMode === 'add' ? fetchTaskUsers : undefined"
|
||||
:filter-selected="filterUsers"
|
||||
:loading="saving"
|
||||
:item-config="{ id: 'id', label: 'username', sublabel: 'deptName' }"
|
||||
:use-tree="true"
|
||||
:tree-transform="transformUsersToTree"
|
||||
:tree-props="{ children: 'children', label: 'displayName', id: 'id' }"
|
||||
:only-leaf-selectable="true"
|
||||
unit-name="人"
|
||||
search-placeholder="搜索人员..."
|
||||
:use-pagination="selectorMode === 'add'"
|
||||
:fetch-api="selectorMode === 'add' ? userApi.getUserPage : undefined"
|
||||
:filter-params="userFilterParams"
|
||||
:page-size="20"
|
||||
@confirm="handleUserSelectConfirm"
|
||||
@cancel="closeSelectorModal"
|
||||
/>
|
||||
@@ -388,9 +389,7 @@ const deleting = ref(false);
|
||||
const managingTask = ref<LearningTask | null>(null);
|
||||
const selectorMode = ref<'add' | 'remove'>('add');
|
||||
const currentUsers = ref<UserVO[]>([]);
|
||||
const availableUsers = ref<UserVO[]>([]);
|
||||
const saving = ref(false);
|
||||
const userFilterParams = ref<any>({});
|
||||
|
||||
// 计算显示的页码
|
||||
const displayPages = computed(() => {
|
||||
@@ -523,7 +522,9 @@ function handleEdit(task: LearningTask) {
|
||||
emit('edit', task);
|
||||
}
|
||||
|
||||
function handleStatistics(task: LearningTask) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
function handleStatistics(_task: LearningTask) {
|
||||
// TODO: 实现统计功能
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -565,30 +566,171 @@ function closeUserList() {
|
||||
currentUsers.value = [];
|
||||
}
|
||||
|
||||
// 获取所有用户的API函数
|
||||
async function fetchAllUsers() {
|
||||
const filter: any = { username: undefined };
|
||||
return await userApi.getUserList(filter);
|
||||
}
|
||||
|
||||
// 获取当前任务用户的API函数(用于删除模式)
|
||||
async function fetchCurrentUsers() {
|
||||
// 删除模式时,左侧显示当前任务的用户列表
|
||||
return {
|
||||
success: true,
|
||||
dataList: currentUsers.value,
|
||||
code: 200,
|
||||
message: '',
|
||||
login: true,
|
||||
auth: true
|
||||
};
|
||||
}
|
||||
|
||||
// 获取任务已分配用户的API函数
|
||||
async function fetchTaskUsers() {
|
||||
if (!managingTask.value || !managingTask.value.taskID) {
|
||||
return {
|
||||
success: true,
|
||||
dataList: [],
|
||||
code: 200,
|
||||
message: '',
|
||||
login: true,
|
||||
auth: true
|
||||
};
|
||||
}
|
||||
|
||||
// 从任务详情中获取用户列表
|
||||
const result = await learningTaskApi.getTaskUsers(managingTask.value.taskID);
|
||||
if (result.success && result.dataList) {
|
||||
// 将返回的用户列表转换为UserVO格式
|
||||
const users = (result.dataList || []).map((item: any) => ({
|
||||
id: item.userID,
|
||||
username: item.username,
|
||||
deptID: item.deptID,
|
||||
deptName: item.deptName,
|
||||
parentDeptID: item.parentDeptID
|
||||
}));
|
||||
return {
|
||||
success: true,
|
||||
dataList: users,
|
||||
code: 200,
|
||||
message: '',
|
||||
login: true,
|
||||
auth: true
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
success: false,
|
||||
dataList: [],
|
||||
code: result.code || 500,
|
||||
message: result.message || '获取任务用户失败',
|
||||
login: true,
|
||||
auth: true
|
||||
};
|
||||
}
|
||||
|
||||
// 过滤已选用户
|
||||
function filterUsers(available: any[], selected: any[]) {
|
||||
const selectedIds = new Set(selected.map(item => item.id));
|
||||
return available.filter(item => !selectedIds.has(item.id));
|
||||
}
|
||||
|
||||
// 将用户扁平数据转换为树形结构(按部门分组)
|
||||
function transformUsersToTree(flatData: any[]): any[] {
|
||||
if (!flatData || flatData.length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
// 按部门分组
|
||||
const deptMap = new Map<string, any>();
|
||||
const tree: any[] = [];
|
||||
|
||||
flatData.forEach(item => {
|
||||
const deptID = item.deptID || 'unknown';
|
||||
const deptName = item.deptName || '未分配部门';
|
||||
|
||||
if (!deptMap.has(deptID)) {
|
||||
// 创建部门节点
|
||||
deptMap.set(deptID, {
|
||||
id: `dept_${deptID}`, // 使用特殊前缀避免与用户ID冲突
|
||||
displayName: deptName,
|
||||
deptID: deptID,
|
||||
deptName: deptName,
|
||||
parentDeptID: item.parentDeptID,
|
||||
children: [],
|
||||
isDept: true // 标记这是部门节点
|
||||
});
|
||||
}
|
||||
|
||||
// 添加用户到部门的children中
|
||||
const deptNode = deptMap.get(deptID);
|
||||
if (deptNode) {
|
||||
deptNode.children.push({
|
||||
...item,
|
||||
displayName: item.username || item.id,
|
||||
isDept: false // 标记这是用户节点
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 构建部门层级关系
|
||||
const deptNodes = Array.from(deptMap.values());
|
||||
const deptTreeMap = new Map<string, any>();
|
||||
|
||||
// 初始化所有部门节点
|
||||
deptNodes.forEach(dept => {
|
||||
deptTreeMap.set(dept.deptID, { ...dept });
|
||||
});
|
||||
|
||||
// 构建部门树
|
||||
deptNodes.forEach(dept => {
|
||||
const node = deptTreeMap.get(dept.deptID);
|
||||
if (!node) return;
|
||||
|
||||
if (!dept.parentDeptID || dept.parentDeptID === '0' || dept.parentDeptID === '') {
|
||||
// 根部门
|
||||
tree.push(node);
|
||||
} else {
|
||||
// 子部门
|
||||
const parent = deptTreeMap.get(dept.parentDeptID);
|
||||
if (parent) {
|
||||
// 将用户节点暂存
|
||||
const users = node.children || [];
|
||||
node.children = [];
|
||||
|
||||
// 添加部门到父部门
|
||||
if (!parent.children) {
|
||||
parent.children = [];
|
||||
}
|
||||
parent.children.push(node);
|
||||
|
||||
// 将用户添加回来(放在部门子节点之后)
|
||||
node.children = users;
|
||||
} else {
|
||||
// 找不到父节点,作为根节点
|
||||
tree.push(node);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return tree;
|
||||
}
|
||||
|
||||
// 显示添加人员选择器
|
||||
function showAddUserSelector() {
|
||||
selectorMode.value = 'add';
|
||||
|
||||
// 设置过滤参数(可以过滤掉已分配的用户,但在组件内部会自动过滤)
|
||||
userFilterParams.value = {};
|
||||
|
||||
showUserSelector.value = true;
|
||||
}
|
||||
|
||||
// 显示删除人员选择器
|
||||
function showRemoveUserSelector() {
|
||||
selectorMode.value = 'remove';
|
||||
|
||||
// 左侧显示当前用户
|
||||
availableUsers.value = [...currentUsers.value];
|
||||
|
||||
showUserSelector.value = true;
|
||||
}
|
||||
|
||||
// 关闭选择器弹窗
|
||||
function closeSelectorModal() {
|
||||
showUserSelector.value = false;
|
||||
availableUsers.value = [];
|
||||
}
|
||||
|
||||
// 处理用户选择器确认事件
|
||||
|
||||
Reference in New Issue
Block a user