数据分析页面全面开放:所有用户可查看所有数据,修复用户名显示和进度条文字颜色

This commit is contained in:
Your Name 2026-01-13 14:15:40 +08:00
parent ecbbdb7644
commit e9945779a4
4 changed files with 31 additions and 56 deletions

View File

@ -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<Role> 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<Task> queryWrapper = new LambdaQueryWrapper<Task>()
.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<Task> 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<Role> 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<User> designers = getDesigners(isAdmin, currentUser, deptId);
// 获取所有设计师(接单部门成员,所有用户均可查看所有设计师)
List<User> designers = getDesigners(deptId);
// 获取时间范围内的任务
LambdaQueryWrapper<Task> taskQuery = new LambdaQueryWrapper<Task>()
@ -889,17 +857,15 @@ public class AnalyticsService {
}
/**
* 获取设计师列表
* 获取设计师列表(所有用户均可查看所有设计师)
*/
private List<User> getDesigners(boolean isAdmin, User currentUser, Long deptId) {
private List<User> getDesigners(Long deptId) {
LambdaQueryWrapper<User> userQuery = new LambdaQueryWrapper<User>()
.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<User> allUsers = userMapper.selectList(userQuery);

View File

@ -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; // 已完成数

View File

@ -4,6 +4,7 @@ import request from '@/utils/request';
export interface UserDemandStat {
userId: number;
userName: string;
realName?: string; // 真实姓名
deptName: string;
totalDemands: number;
completedDemands: number;

View File

@ -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;
}
}
}
}
</style>