serv\web- 日志

This commit is contained in:
2025-10-30 16:40:56 +08:00
parent 82b6f14e64
commit 2b252e1b3c
91 changed files with 6003 additions and 1485 deletions

View File

@@ -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 = [];
}
// 处理用户选择器确认事件