From 8c16de26ada363a14e428e195c2f75c6c8e7e9c2 Mon Sep 17 00:00:00 2001 From: zhangjf Date: Wed, 25 Feb 2026 01:25:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E6=97=A5=E5=8E=86=E5=8F=8A=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=AF=A6=E6=83=85Markdown=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端: - 日历接口支持userId参数(管理员可查他人) - 新增用户列表接口listEnabledUsers 管理后台: - 新增首页日历视图展示日志录入情况 - 管理员可选择人员查看日志日历 - 日历支持月份切换 - 日志详情弹窗支持Markdown渲染 - 工作日志列表新增人员筛选条件 - 列表查看详情支持Markdown渲染 移动端: - 登录页面样式调整(居中、输入框宽度) - 日历日期样式调整(红色数字无边框) - 日志列表UI修复(标题遮挡、按钮分布) - 首页管理员人员选择功能 - 日志详情支持Markdown渲染 --- .../worklog/controller/LogController.java | 5 +- .../worklog/controller/UserController.java | 12 + .../com/wjbl/worklog/service/LogService.java | 10 + .../com/wjbl/worklog/service/UserService.java | 9 + .../worklog/service/impl/LogServiceImpl.java | 11 + .../worklog/service/impl/UserServiceImpl.java | 13 + worklog-mobile/src/api/log.ts | 4 +- worklog-mobile/src/api/user.ts | 20 + worklog-mobile/src/views/home/index.vue | 109 ++++- worklog-mobile/src/views/log/detail.vue | 112 ++++- worklog-mobile/src/views/log/index.vue | 3 +- worklog-mobile/src/views/login/index.vue | 2 - worklog-web/src/api/log.ts | 11 + worklog-web/src/api/user.ts | 5 + worklog-web/src/router/index.ts | 8 +- worklog-web/src/views/dashboard/index.vue | 459 ++++++++++++++++++ worklog-web/src/views/layout/index.vue | 6 +- worklog-web/src/views/log/index.vue | 194 +++++++- 18 files changed, 954 insertions(+), 39 deletions(-) create mode 100644 worklog-mobile/src/api/user.ts create mode 100644 worklog-web/src/views/dashboard/index.vue diff --git a/worklog-api/src/main/java/com/wjbl/worklog/controller/LogController.java b/worklog-api/src/main/java/com/wjbl/worklog/controller/LogController.java index bedfa94..6396445 100644 --- a/worklog-api/src/main/java/com/wjbl/worklog/controller/LogController.java +++ b/worklog-api/src/main/java/com/wjbl/worklog/controller/LogController.java @@ -127,8 +127,9 @@ public class LogController { @GetMapping("/calendar") public Result> getCalendarData( @Parameter(description = "年份") @RequestParam Integer year, - @Parameter(description = "月份(1-12)") @RequestParam Integer month) { - Set dates = logService.getLogDatesByMonth(year, month); + @Parameter(description = "月份(1-12)") @RequestParam Integer month, + @Parameter(description = "用户ID(管理员可用,不传则查当前用户)") @RequestParam(required = false) String userId) { + Set dates = logService.getLogDatesByMonth(year, month, userId); List dateStrings = dates.stream() .map(LocalDate::toString) .toList(); diff --git a/worklog-api/src/main/java/com/wjbl/worklog/controller/UserController.java b/worklog-api/src/main/java/com/wjbl/worklog/controller/UserController.java index 968f8f1..c208700 100644 --- a/worklog-api/src/main/java/com/wjbl/worklog/controller/UserController.java +++ b/worklog-api/src/main/java/com/wjbl/worklog/controller/UserController.java @@ -15,6 +15,8 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 用户控制器 * 处理用户管理相关请求 @@ -117,4 +119,14 @@ public class UserController { userService.resetPassword(id, newPassword); return Result.success(); } + + /** + * 获取所有启用的用户列表 + */ + @Operation(summary = "获取启用用户列表", description = "获取所有启用状态的用户列表") + @GetMapping("/list") + public Result> listEnabledUsers() { + List users = userService.listEnabledUsers(); + return Result.success(users); + } } diff --git a/worklog-api/src/main/java/com/wjbl/worklog/service/LogService.java b/worklog-api/src/main/java/com/wjbl/worklog/service/LogService.java index 5f298cb..96203d7 100644 --- a/worklog-api/src/main/java/com/wjbl/worklog/service/LogService.java +++ b/worklog-api/src/main/java/com/wjbl/worklog/service/LogService.java @@ -77,6 +77,16 @@ public interface LogService { */ Set getLogDatesByMonth(int year, int month); + /** + * 获取指定用户指定月份有日志的日期列表(管理员用) + * + * @param year 年份 + * @param month 月份(1-12) + * @param userId 用户ID(可选,为空则查当前用户) + * @return 有日志的日期集合 + */ + Set getLogDatesByMonth(int year, int month, String userId); + /** * 根据日期获取日志 * diff --git a/worklog-api/src/main/java/com/wjbl/worklog/service/UserService.java b/worklog-api/src/main/java/com/wjbl/worklog/service/UserService.java index b6e9f30..23b9a17 100644 --- a/worklog-api/src/main/java/com/wjbl/worklog/service/UserService.java +++ b/worklog-api/src/main/java/com/wjbl/worklog/service/UserService.java @@ -5,6 +5,8 @@ import com.wjbl.worklog.dto.UserCreateDTO; import com.wjbl.worklog.dto.UserUpdateDTO; import com.wjbl.worklog.vo.UserVO; +import java.util.List; + /** * 用户服务接口 * 处理用户相关的业务逻辑 @@ -70,4 +72,11 @@ public interface UserService { * @param newPassword 新密码 */ void resetPassword(String id, String newPassword); + + /** + * 获取所有启用的用户列表 + * + * @return 用户列表 + */ + List listEnabledUsers(); } diff --git a/worklog-api/src/main/java/com/wjbl/worklog/service/impl/LogServiceImpl.java b/worklog-api/src/main/java/com/wjbl/worklog/service/impl/LogServiceImpl.java index 6738904..b5e2bc4 100644 --- a/worklog-api/src/main/java/com/wjbl/worklog/service/impl/LogServiceImpl.java +++ b/worklog-api/src/main/java/com/wjbl/worklog/service/impl/LogServiceImpl.java @@ -200,6 +200,17 @@ public class LogServiceImpl implements LogService { return workLogDataService.getLogDatesByMonth(currentUserId, year, month); } + @Override + public Set getLogDatesByMonth(int year, int month, String userId) { + // 如果指定了用户ID,则查询指定用户的日志(管理员) + // 否则查询当前用户的日志 + String targetUserId = userId; + if (targetUserId == null || targetUserId.isEmpty()) { + targetUserId = UserContext.getUserId(); + } + return workLogDataService.getLogDatesByMonth(targetUserId, year, month); + } + @Override public LogVO getLogByDate(LocalDate date) { String currentUserId = UserContext.getUserId(); diff --git a/worklog-api/src/main/java/com/wjbl/worklog/service/impl/UserServiceImpl.java b/worklog-api/src/main/java/com/wjbl/worklog/service/impl/UserServiceImpl.java index a19def1..26b6898 100644 --- a/worklog-api/src/main/java/com/wjbl/worklog/service/impl/UserServiceImpl.java +++ b/worklog-api/src/main/java/com/wjbl/worklog/service/impl/UserServiceImpl.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.time.LocalDateTime; +import java.util.List; /** * 用户服务实现类 @@ -194,6 +195,18 @@ public class UserServiceImpl implements UserService { log.info("重置用户密码成功:{}", user.getUsername()); } + @Override + public List listEnabledUsers() { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(User::getStatus, 1) + .orderByAsc(User::getName); + + List users = userDataService.list(wrapper); + return users.stream() + .map(this::convertToVO) + .toList(); + } + /** * 转换为 VO */ diff --git a/worklog-mobile/src/api/log.ts b/worklog-mobile/src/api/log.ts index d0e1f74..a8e9294 100644 --- a/worklog-mobile/src/api/log.ts +++ b/worklog-mobile/src/api/log.ts @@ -70,8 +70,8 @@ export function deleteLog(id: string): Promise { } // 获取日历数据(有日志的日期列表) -export function getCalendarData(year: number, month: number): Promise { - return request.get('/log/calendar', { params: { year, month } }) +export function getCalendarData(year: number, month: number, userId?: string): Promise { + return request.get('/log/calendar', { params: { year, month, userId } }) } // 获取指定日期的日志 diff --git a/worklog-mobile/src/api/user.ts b/worklog-mobile/src/api/user.ts new file mode 100644 index 0000000..e861f01 --- /dev/null +++ b/worklog-mobile/src/api/user.ts @@ -0,0 +1,20 @@ +// 用户相关 API +import { request } from '@/utils/request' + +// 用户信息 +export interface User { + id: string + username: string + name: string + phone: string + email: string + position: string + description: string + role: string + status: number +} + +// 获取所有启用的用户列表 +export function listEnabledUsers(): Promise { + return request.get('/user/list') +} diff --git a/worklog-mobile/src/views/home/index.vue b/worklog-mobile/src/views/home/index.vue index 9c13416..50990e1 100644 --- a/worklog-mobile/src/views/home/index.vue +++ b/worklog-mobile/src/views/home/index.vue @@ -3,6 +3,20 @@
+ + + + + + + @@ -59,13 +73,13 @@
-