fix: scope pending approval groups by dept view
This commit is contained in:
parent
b6aa49580a
commit
bf13d13ba0
@ -485,11 +485,13 @@ public class TaskItemController {
|
|||||||
return Result.success(groups);
|
return Result.success(groups);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找用户作为负责人的所有部门
|
// 查找用户作为负责人的所有接单部门
|
||||||
List<com.designhub.entity.Department> leadingDepts = departmentMapper.selectList(
|
List<com.designhub.entity.Department> leadingDepts = departmentMapper.selectList(
|
||||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.designhub.entity.Department>()
|
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<com.designhub.entity.Department>()
|
||||||
.eq(com.designhub.entity.Department::getLeaderId, userId)
|
.eq(com.designhub.entity.Department::getLeaderId, userId)
|
||||||
|
.eq(com.designhub.entity.Department::getDeptType, "receiving")
|
||||||
.eq(com.designhub.entity.Department::getStatus, 1)
|
.eq(com.designhub.entity.Department::getStatus, 1)
|
||||||
|
.eq(com.designhub.entity.Department::getDeleted, 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
log.info("用户 {} 负责的部门数量: {}", userId, leadingDepts.size());
|
log.info("用户 {} 负责的部门数量: {}", userId, leadingDepts.size());
|
||||||
@ -503,6 +505,19 @@ public class TaskItemController {
|
|||||||
return Result.success(new java.util.ArrayList<>());
|
return Result.success(new java.util.ArrayList<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (deptId != null) {
|
||||||
|
boolean canAccessDept = leadingDepts.stream().anyMatch(dept -> deptId.equals(dept.getId()));
|
||||||
|
if (!canAccessDept) {
|
||||||
|
log.warn("用户 {} 试图查询无权限的接单部门待审核子任务组: deptId={}", userId, deptId);
|
||||||
|
return Result.fail("无权查看该接单部门的待审核任务");
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("按指定接单部门过滤待审核子任务组: deptId={}", deptId);
|
||||||
|
List<Map<String, Object>> groups = taskItemService.getPendingApprovalGroups(deptId);
|
||||||
|
log.info("指定部门 {} 返回 {} 个子任务组", deptId, groups.size());
|
||||||
|
return Result.success(groups);
|
||||||
|
}
|
||||||
|
|
||||||
// 合并所有负责部门的待审核子任务组
|
// 合并所有负责部门的待审核子任务组
|
||||||
List<Map<String, Object>> allGroups = new java.util.ArrayList<>();
|
List<Map<String, Object>> allGroups = new java.util.ArrayList<>();
|
||||||
java.util.Set<String> addedKeys = new java.util.HashSet<>();
|
java.util.Set<String> addedKeys = new java.util.HashSet<>();
|
||||||
|
|||||||
@ -613,8 +613,10 @@ export interface TaskGroup {
|
|||||||
/**
|
/**
|
||||||
* 获取待审核的子任务组列表
|
* 获取待审核的子任务组列表
|
||||||
*/
|
*/
|
||||||
export const getPendingApprovalTaskGroups = () => {
|
export const getPendingApprovalTaskGroups = (deptId?: number) => {
|
||||||
return request.get<TaskGroup[]>('/tasks/items/groups/pending-approval')
|
return request.get<TaskGroup[]>('/tasks/items/groups/pending-approval', {
|
||||||
|
params: deptId ? { deptId } : {}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -2624,6 +2624,24 @@ const effectiveDeptId = computed(() => {
|
|||||||
return currentDeptView.value !== undefined ? currentDeptView.value : userDeptId.value
|
return currentDeptView.value !== undefined ? currentDeptView.value : userDeptId.value
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const isCurrentUserAdmin = computed(() => {
|
||||||
|
const user = currentUserInfo.value || {}
|
||||||
|
return user?.isAdmin === 1 || user?.isAdmin === true || user?.role === 'admin'
|
||||||
|
})
|
||||||
|
|
||||||
|
const shouldLoadPendingApprovalGroups = computed(() => {
|
||||||
|
return isCurrentUserAdmin.value || (isDepartmentLeader.value && effectiveDeptType.value === 'receiving')
|
||||||
|
})
|
||||||
|
|
||||||
|
const pendingApprovalGroupDeptId = computed<number | undefined>(() => {
|
||||||
|
if (effectiveDeptType.value !== 'receiving') {
|
||||||
|
return undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
const deptId = effectiveDeptId.value
|
||||||
|
return typeof deptId === 'number' ? deptId : undefined
|
||||||
|
})
|
||||||
|
|
||||||
// 计算是否有导出权限(部门负责人或管理员)
|
// 计算是否有导出权限(部门负责人或管理员)
|
||||||
const canExportTaskHall = computed(() => {
|
const canExportTaskHall = computed(() => {
|
||||||
const userInfo = currentUserInfo.value || {}
|
const userInfo = currentUserInfo.value || {}
|
||||||
@ -3908,11 +3926,13 @@ const loadPendingApprovalTasks = async () => {
|
|||||||
try {
|
try {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
|
|
||||||
// 并行加载主任务和子任务组
|
const shouldLoadGroups = shouldLoadPendingApprovalGroups.value
|
||||||
const [tasksResponse, groupsResponse] = await Promise.all([
|
const promises: Promise<any>[] = [taskApi.getPendingApprovalTasks()]
|
||||||
taskApi.getPendingApprovalTasks(),
|
if (shouldLoadGroups) {
|
||||||
taskApi.getPendingApprovalTaskGroups()
|
promises.push(taskApi.getPendingApprovalTaskGroups(pendingApprovalGroupDeptId.value))
|
||||||
])
|
}
|
||||||
|
|
||||||
|
const [tasksResponse, groupsResponse] = await Promise.all(promises)
|
||||||
|
|
||||||
const approvalItems: ApprovalItem[] = []
|
const approvalItems: ApprovalItem[] = []
|
||||||
|
|
||||||
@ -3939,7 +3959,7 @@ const loadPendingApprovalTasks = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 转换子任务组为ApprovalItem
|
// 转换子任务组为ApprovalItem
|
||||||
if (groupsResponse && groupsResponse.data) {
|
if (shouldLoadGroups && groupsResponse && groupsResponse.data) {
|
||||||
const groups = groupsResponse.data as taskApi.TaskGroup[]
|
const groups = groupsResponse.data as taskApi.TaskGroup[]
|
||||||
groups.forEach(group => {
|
groups.forEach(group => {
|
||||||
approvalItems.push({
|
approvalItems.push({
|
||||||
@ -5278,8 +5298,9 @@ const loadReviewTasks = async (newFilters?: any) => {
|
|||||||
]
|
]
|
||||||
|
|
||||||
// 如果是部门负责人,还要加载待审核的子任务组
|
// 如果是部门负责人,还要加载待审核的子任务组
|
||||||
if (isDepartmentLeader.value) {
|
const shouldLoadGroups = shouldLoadPendingApprovalGroups.value
|
||||||
promises.push(taskApi.getPendingApprovalTaskGroups())
|
if (shouldLoadGroups) {
|
||||||
|
promises.push(taskApi.getPendingApprovalTaskGroups(pendingApprovalGroupDeptId.value))
|
||||||
}
|
}
|
||||||
|
|
||||||
const [tasksResponse, groupsResponse] = await Promise.all(promises)
|
const [tasksResponse, groupsResponse] = await Promise.all(promises)
|
||||||
@ -5296,7 +5317,7 @@ const loadReviewTasks = async (newFilters?: any) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 处理子任务组(如果有)- 使用与主任务相同的数据结构
|
// 处理子任务组(如果有)- 使用与主任务相同的数据结构
|
||||||
if (groupsResponse && groupsResponse.code === 200 && groupsResponse.data) {
|
if (shouldLoadGroups && groupsResponse && groupsResponse.code === 200 && groupsResponse.data) {
|
||||||
for (const group of groupsResponse.data) {
|
for (const group of groupsResponse.data) {
|
||||||
allItems.push({
|
allItems.push({
|
||||||
id: `group-${group.taskId}-${group.groupNo}`,
|
id: `group-${group.taskId}-${group.groupNo}`,
|
||||||
@ -6655,22 +6676,32 @@ const loadAllTabCounts = async () => {
|
|||||||
|
|
||||||
// 3. 待审核任务数量(主任务 + 子任务组)
|
// 3. 待审核任务数量(主任务 + 子任务组)
|
||||||
if (isDepartmentLeader.value) {
|
if (isDepartmentLeader.value) {
|
||||||
// 部门负责人:同时计算主任务和子任务组
|
const shouldLoadGroups = shouldLoadPendingApprovalGroups.value
|
||||||
promises.push(
|
|
||||||
Promise.all([
|
if (!shouldLoadGroups) {
|
||||||
taskApi.getAllPendingApprovalTasks({ page: 1, pageSize: 1 }),
|
promises.push(
|
||||||
taskApi.getPendingApprovalTaskGroups()
|
taskApi.getAllPendingApprovalTasks({ page: 1, pageSize: 1 }).then((tasksRes) => {
|
||||||
]).then(([tasksRes, groupsRes]) => {
|
reviewTotal.value = tasksRes.data?.total || 0
|
||||||
let count = 0
|
}).catch(() => {})
|
||||||
if (tasksRes.data && tasksRes.data.total !== undefined) {
|
)
|
||||||
count += tasksRes.data.total
|
} else {
|
||||||
}
|
// 部门负责人:在接单部门视角下同时计算主任务和子任务组
|
||||||
if (groupsRes.code === 200 && groupsRes.data) {
|
promises.push(
|
||||||
count += groupsRes.data.length
|
Promise.all([
|
||||||
}
|
taskApi.getAllPendingApprovalTasks({ page: 1, pageSize: 1 }),
|
||||||
reviewTotal.value = count
|
taskApi.getPendingApprovalTaskGroups(pendingApprovalGroupDeptId.value)
|
||||||
}).catch(() => {})
|
]).then(([tasksRes, groupsRes]) => {
|
||||||
)
|
let count = 0
|
||||||
|
if (tasksRes.data && tasksRes.data.total !== undefined) {
|
||||||
|
count += tasksRes.data.total
|
||||||
|
}
|
||||||
|
if (groupsRes.code === 200 && groupsRes.data) {
|
||||||
|
count += groupsRes.data.length
|
||||||
|
}
|
||||||
|
reviewTotal.value = count
|
||||||
|
}).catch(() => {})
|
||||||
|
)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// 普通用户:只计算主任务
|
// 普通用户:只计算主任务
|
||||||
promises.push(
|
promises.push(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user