From e9945779a4b4a30280a3b57f49723d96ccfed309 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 13 Jan 2026 14:15:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=88=86=E6=9E=90=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=85=A8=E9=9D=A2=E5=BC=80=E6=94=BE=EF=BC=9A=E6=89=80?= =?UTF-8?q?=E6=9C=89=E7=94=A8=E6=88=B7=E5=8F=AF=E6=9F=A5=E7=9C=8B=E6=89=80?= =?UTF-8?q?=E6=9C=89=E6=95=B0=E6=8D=AE=EF=BC=8C=E4=BF=AE=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=90=8D=E6=98=BE=E7=A4=BA=E5=92=8C=E8=BF=9B=E5=BA=A6?= =?UTF-8?q?=E6=9D=A1=E6=96=87=E5=AD=97=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designhub/service/AnalyticsService.java | 76 +++++-------------- .../com/designhub/vo/DemandStatisticsVO.java | 1 + frontend/src/api/analytics.ts | 1 + frontend/src/views/Analytics.vue | 9 ++- 4 files changed, 31 insertions(+), 56 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/AnalyticsService.java b/backend/src/main/java/com/designhub/service/AnalyticsService.java index 2d9c27f..3f1a29f 100644 --- a/backend/src/main/java/com/designhub/service/AnalyticsService.java +++ b/backend/src/main/java/com/designhub/service/AnalyticsService.java @@ -49,24 +49,8 @@ public class AnalyticsService { * @param month 指定月份(可选,格式 yyyy-MM) */ public DemandStatisticsVO getDemandStatistics(Long currentUserId, String dateRange, Long deptId, Long userId, String month) { - // 获取当前用户角色和部门信息 - List roles = roleService.getRolesByUserId(currentUserId); - User currentUser = userMapper.selectById(currentUserId); - - boolean isAdmin = roles.stream() - .anyMatch(role -> "ADMIN".equals(role.getRoleCode()) || "SUPER_ADMIN".equals(role.getRoleCode())); - - // 检查 isAdmin 字段 - if (!isAdmin && currentUser != null && Integer.valueOf(1).equals(currentUser.getIsAdmin())) { - isAdmin = true; - } - - boolean isDeptHead = roles.stream() - .anyMatch(role -> "DEMAND_DEPT_HEAD".equals(role.getRoleCode()) || - "RECEIVING_DEPT_SUPERVISOR".equals(role.getRoleCode())); - - log.info("获取需求统计数据: currentUserId={}, isAdmin={}, isDeptHead={}, userDeptId={}, dateRange={}, deptId={}, userId={}, month={}", - currentUserId, isAdmin, isDeptHead, currentUser != null ? currentUser.getDeptId() : null, dateRange, deptId, userId, month); + log.info("获取需求统计数据: currentUserId={}, dateRange={}, deptId={}, userId={}, month={}", + currentUserId, dateRange, deptId, userId, month); // 计算时间范围 LocalDateTime startTime; @@ -89,32 +73,23 @@ public class AnalyticsService { endTime = LocalDateTime.now(); } - // 构建查询条件 + // 构建查询条件(所有用户查看所有数据,可通过参数过滤) LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .ge(startTime != null, Task::getCreateTime, startTime) .le(Task::getCreateTime, endTime); - // 根据角色和参数决定查询范围 - if (isAdmin) { - // 管理员:可以通过参数查看特定部门或用户的数据,否则查看所有数据 - if (deptId != null) { - queryWrapper.eq(Task::getPublisherDeptId, deptId); - log.info("管理员查看部门数据: deptId={}", deptId); - } else if (userId != null) { - queryWrapper.eq(Task::getPublisherId, userId); - log.info("管理员查看用户数据: userId={}", userId); - } else { - log.info("管理员查看全部数据"); - } - } else if (isDeptHead && currentUser != null && currentUser.getDeptId() != null) { - // 部门负责人:查看本部门的所有任务 - queryWrapper.eq(Task::getPublisherDeptId, currentUser.getDeptId()); - log.info("部门负责人查看部门数据: deptId={}", currentUser.getDeptId()); - } else { - // 普通用户:只能查看自己发布的任务 - queryWrapper.eq(Task::getPublisherId, currentUserId); - log.info("普通用户查看个人数据: userId={}", currentUserId); + // 如果指定了部门ID,则按部门过滤 + if (deptId != null) { + queryWrapper.eq(Task::getPublisherDeptId, deptId); + log.info("按部门过滤: deptId={}", deptId); } + // 如果指定了用户ID,则按用户过滤 + if (userId != null) { + queryWrapper.eq(Task::getPublisherId, userId); + log.info("按用户过滤: userId={}", userId); + } + + log.info("查看全部数据(所有用户均可访问)"); List tasks = taskMapper.selectList(queryWrapper); log.info("查询到任务数量: {}", tasks.size()); @@ -173,6 +148,7 @@ public class AnalyticsService { stats.add(DemandStatisticsVO.UserDemandStat.builder() .userId(userId) .userName(user.getUsername()) + .realName(user.getRealName() != null ? user.getRealName() : user.getUsername()) .deptName(dept != null ? dept.getDeptName() : "") .totalDemands(totalDemands) .completedDemands(completedDemands) @@ -577,15 +553,7 @@ public class AnalyticsService { * 获取设计师绩效数据 */ public DesignerPerformanceVO getDesignerPerformance(Long currentUserId, String month, Long deptId) { - // 权限检查 - List roles = roleService.getRolesByUserId(currentUserId); - User currentUser = userMapper.selectById(currentUserId); - - boolean isAdmin = roles.stream() - .anyMatch(role -> "ADMIN".equals(role.getRoleCode()) || "SUPER_ADMIN".equals(role.getRoleCode())); - if (!isAdmin && currentUser != null && Integer.valueOf(1).equals(currentUser.getIsAdmin())) { - isAdmin = true; - } + log.info("获取设计师绩效数据: currentUserId={}, month={}, deptId={}", currentUserId, month, deptId); // 计算时间范围和当前月份 LocalDateTime startTime; @@ -611,8 +579,8 @@ public class AnalyticsService { currentMonth = now.format(DateTimeFormatter.ofPattern("yyyy-MM")); } - // 获取所有设计师(接单部门成员) - List designers = getDesigners(isAdmin, currentUser, deptId); + // 获取所有设计师(接单部门成员,所有用户均可查看所有设计师) + List designers = getDesigners(deptId); // 获取时间范围内的任务 LambdaQueryWrapper taskQuery = new LambdaQueryWrapper() @@ -889,17 +857,15 @@ public class AnalyticsService { } /** - * 获取设计师列表 + * 获取设计师列表(所有用户均可查看所有设计师) */ - private List getDesigners(boolean isAdmin, User currentUser, Long deptId) { + private List getDesigners(Long deptId) { LambdaQueryWrapper userQuery = new LambdaQueryWrapper() .eq(User::getStatus, 1); + // 如果指定了部门ID,则按部门过滤 if (deptId != null) { userQuery.eq(User::getDeptId, deptId); - } else if (!isAdmin && currentUser != null && currentUser.getDeptId() != null) { - // 非管理员只能看本部门 - userQuery.eq(User::getDeptId, currentUser.getDeptId()); } List allUsers = userMapper.selectList(userQuery); diff --git a/backend/src/main/java/com/designhub/vo/DemandStatisticsVO.java b/backend/src/main/java/com/designhub/vo/DemandStatisticsVO.java index 1330c24..2a4d5c9 100644 --- a/backend/src/main/java/com/designhub/vo/DemandStatisticsVO.java +++ b/backend/src/main/java/com/designhub/vo/DemandStatisticsVO.java @@ -52,6 +52,7 @@ public class DemandStatisticsVO { public static class UserDemandStat { private Long userId; private String userName; + private String realName; // 真实姓名 private String deptName; private Integer totalDemands; // 总需求数 private Integer completedDemands; // 已完成数 diff --git a/frontend/src/api/analytics.ts b/frontend/src/api/analytics.ts index 2d9735c..c008d46 100644 --- a/frontend/src/api/analytics.ts +++ b/frontend/src/api/analytics.ts @@ -4,6 +4,7 @@ import request from '@/utils/request'; export interface UserDemandStat { userId: number; userName: string; + realName?: string; // 真实姓名 deptName: string; totalDemands: number; completedDemands: number; diff --git a/frontend/src/views/Analytics.vue b/frontend/src/views/Analytics.vue index 848ee42..a200ea8 100644 --- a/frontend/src/views/Analytics.vue +++ b/frontend/src/views/Analytics.vue @@ -603,7 +603,7 @@ const efficiencyTableData = computed(() => [ // 表格列定义 const userColumns = [ { title: '排名', key: 'rank', width: 80, align: 'center' }, - { title: '用户名', dataIndex: 'userName', key: 'userName' }, + { title: '用户名', dataIndex: 'realName', key: 'realName', customRender: ({ record }: any) => record.realName || record.userName }, { title: '部门', dataIndex: 'deptName', key: 'deptName' }, { title: '发起数', dataIndex: 'totalDemands', key: 'totalDemands', sorter: (a: any, b: any) => a.totalDemands - b.totalDemands, align: 'center' }, { title: '完成数', dataIndex: 'completedDemands', key: 'completedDemands', align: 'center' }, @@ -1658,6 +1658,13 @@ onMounted(() => { color: $brand-primary; } } + + // 进度条百分比文字颜色 + .completion-rate-progress { + .ant-progress-text { + color: rgba(255, 255, 255, 0.85) !important; + } + } } }