From 9ad9507a724fc847e5412b184ef8d029f2cd929b Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Fri, 31 Oct 2025 13:17:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/study/task/LearningTaskService.java | 2 +- .../study/controller/CourseTagController.java | 14 +- .../LearningManagementController.java | 192 ----- .../controller/LearningPlanController.java | 204 ----- .../controller/LearningTaskController.java | 2 +- .../xyzh/study/mapper/LearningTaskMapper.java | 11 +- .../impl/SCLearningTaskServiceImpl.java | 10 +- .../resources/mapper/LearningTaskMapper.xml | 24 +- schoolNewsWeb/src/assets/imgs/task-finish.svg | 5 + .../src/assets/imgs/task-learning.svg | 7 + .../src/assets/imgs/task-notstart.svg | 5 + schoolNewsWeb/src/assets/imgs/task-total.svg | 5 + .../views/public/article/ArticleAddView.vue | 1 - .../views/public/task/LearningTaskDetail.vue | 802 +++++++++--------- .../resource-center/ResourceCenterView.vue | 3 +- .../components/ResourceList.vue | 7 - .../user/study-plan/CourseCenterView.vue | 2 +- .../study-plan/LearningTaskDetailView.vue | 2 +- .../views/user/study-plan/StudyTasksView.vue | 366 +++++--- 19 files changed, 693 insertions(+), 971 deletions(-) delete mode 100644 schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningManagementController.java delete mode 100644 schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningPlanController.java create mode 100644 schoolNewsWeb/src/assets/imgs/task-finish.svg create mode 100644 schoolNewsWeb/src/assets/imgs/task-learning.svg create mode 100644 schoolNewsWeb/src/assets/imgs/task-notstart.svg create mode 100644 schoolNewsWeb/src/assets/imgs/task-total.svg diff --git a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java index 7214809..7e97e3b 100644 --- a/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java +++ b/schoolNewsServ/api/api-study/src/main/java/org/xyzh/api/study/task/LearningTaskService.java @@ -96,7 +96,7 @@ public interface LearningTaskService { // ----------------任务用户相关-------------------------------- - ResultDomain getUserTaskPage(TaskItemVO filter, PageParam pageParam); + ResultDomain getUserTaskPage(TaskItemVO filter, PageParam pageParam); /** * @description 获取任务用户列表 diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/CourseTagController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/CourseTagController.java index 77ddbed..1895515 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/CourseTagController.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/CourseTagController.java @@ -37,7 +37,7 @@ public class CourseTagController { * 根据ID获取标签详情 */ @GetMapping("/{tagID}") - public ResultDomain getTagById(@PathVariable String tagID) { + public ResultDomain getTagById(@PathVariable("tagID") String tagID) { return courseTagService.getTagById(tagID); } @@ -45,7 +45,7 @@ public class CourseTagController { * 根据标签获取课程列表 */ @GetMapping("/{tagID}/courses") - public ResultDomain getCoursesByTag(@PathVariable String tagID) { + public ResultDomain getCoursesByTag(@PathVariable("tagID") String tagID) { return null; // return courseTagService.getCoursesByTag(tagID); } @@ -55,8 +55,8 @@ public class CourseTagController { */ @PostMapping("/course/{courseID}/tag") public ResultDomain addTagToCourse( - @PathVariable String courseID, - @RequestParam String tagID) { + @PathVariable("courseID") String courseID, + @RequestParam("tagID") String tagID) { return null; // return courseTagService.addTagToCourse(courseID, tagID); } @@ -66,8 +66,8 @@ public class CourseTagController { */ @DeleteMapping("/course/{courseID}/tag/{tagID}") public ResultDomain removeTagFromCourse( - @PathVariable String courseID, - @PathVariable String tagID) { + @PathVariable("courseID") String courseID, + @PathVariable("tagID") String tagID) { return null; // return courseTagService.removeTagFromCourse(courseID, tagID); } @@ -76,7 +76,7 @@ public class CourseTagController { * 获取课程标签列表 */ @GetMapping("/course/{courseID}/tags") - public ResultDomain getCourseTags(@PathVariable String courseID) { + public ResultDomain getCourseTags(@PathVariable("courseID") String courseID) { return courseTagService.getCourseTags(courseID); } } diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningManagementController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningManagementController.java deleted file mode 100644 index 9cac919..0000000 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningManagementController.java +++ /dev/null @@ -1,192 +0,0 @@ -package org.xyzh.study.controller; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.*; -import org.xyzh.common.core.domain.ResultDomain; -import org.xyzh.common.dto.study.TbLearningTask; -import org.xyzh.common.dto.study.TbTaskUser; - -import java.util.List; -import java.util.Map; - -/** - * @description 学习管理控制器 - * @filename LearningManagementController.java - * @author yslg - * @copyright xyzh - * @since 2025-10-15 - */ -@RestController -@RequestMapping("/study/management") -public class LearningManagementController { - private static final Logger logger = LoggerFactory.getLogger(LearningManagementController.class); - - // ==================== 任务发布管理 ==================== - - /** - * 发布学习任务 - */ - @PostMapping("/task/publish") - public ResultDomain publishLearningTask(@RequestBody Map taskData) { - // TODO: 实现发布学习任务(编辑任务名称、任务描述、任务周期、关联资源/课程) - return null; - } - - /** - * 编辑学习任务 - */ - @PutMapping("/task/edit") - public ResultDomain editLearningTask(@RequestBody TbLearningTask task) { - // TODO: 实现编辑学习任务 - return null; - } - - /** - * 获取任务发布列表 - */ - @GetMapping("/task/published-list") - public ResultDomain getPublishedTaskList( - @RequestParam(required = false) String taskName, - @RequestParam(required = false) Integer status) { - // TODO: 实现获取任务发布列表 - return null; - } - - /** - * 关联资源到任务 - */ - @PostMapping("/task/link-resource") - public ResultDomain linkResourceToTask(@RequestBody Map params) { - // TODO: 实现关联资源/课程到任务 - return null; - } - - /** - * 关联课程到任务 - */ - @PostMapping("/task/link-course") - public ResultDomain linkCourseToTask(@RequestBody Map params) { - // TODO: 实现关联课程到任务 - return null; - } - - // ==================== 人员选定管理 ==================== - - /** - * 按部门筛选人员 - */ - @GetMapping("/personnel/dept-filter") - public ResultDomain> filterPersonnelByDept(@RequestParam String deptID) { - // TODO: 实现按部门层级筛选人员 - return null; - } - - /** - * 手动勾选人员 - */ - @PostMapping("/personnel/select") - public ResultDomain>> selectPersonnel(@RequestBody List userIDs) { - // TODO: 实现手动勾选人员 - return null; - } - - /** - * 生成任务接收名单 - */ - @PostMapping("/personnel/generate-list") - public ResultDomain> generateTaskReceiverList(@RequestBody Map params) { - // TODO: 实现生成任务接收名单 - return null; - } - - /** - * 批量分配任务给用户 - */ - @PostMapping("/personnel/batch-assign") - public ResultDomain batchAssignTaskToUsers(@RequestBody Map params) { - // TODO: 实现批量分配任务给用户 - return null; - } - - /** - * 获取部门人员树形结构 - */ - @GetMapping("/personnel/dept-tree") - public ResultDomain> getDeptPersonnelTree() { - // TODO: 实现获取部门人员树形结构 - return null; - } - - // ==================== 学习记录统计 ==================== - - /** - * 获取学习记录统计 - */ - @GetMapping("/record/statistics") - public ResultDomain> getLearningRecordStatistics( - @RequestParam(required = false) String deptID, - @RequestParam(required = false) String userID, - @RequestParam(required = false) String startDate, - @RequestParam(required = false) String endDate) { - // TODO: 实现获取学习记录统计(支持按部门/个人/时间筛选查询) - return null; - } - - /** - * 获取用户学习时长统计 - */ - @GetMapping("/record/learning-duration") - public ResultDomain> getLearningDurationStatistics(@RequestParam String userID) { - // TODO: 实现统计用户学习时长 - return null; - } - - /** - * 获取学习资源数量统计 - */ - @GetMapping("/record/resource-count") - public ResultDomain> getResourceCountStatistics(@RequestParam String userID) { - // TODO: 实现统计学习资源数量 - return null; - } - - /** - * 获取任务完成情况统计 - */ - @GetMapping("/record/task-completion") - public ResultDomain> getTaskCompletionStatistics(@RequestParam String userID) { - // TODO: 实现统计任务完成情况 - return null; - } - - /** - * 生成可视化数据图表 - */ - @GetMapping("/record/chart-data") - public ResultDomain> getChartData( - @RequestParam String chartType, - @RequestParam(required = false) String userID, - @RequestParam(required = false) String deptID) { - // TODO: 实现生成可视化数据(图表接口) - return null; - } - - /** - * 获取部门学习统计 - */ - @GetMapping("/record/dept-statistics") - public ResultDomain> getDeptLearningStatistics(@RequestParam String deptID) { - // TODO: 实现获取部门学习统计 - return null; - } - - /** - * 导出学习记录报告 - */ - @PostMapping("/record/export-report") - public ResultDomain exportLearningReport(@RequestBody Map params) { - // TODO: 实现导出学习记录报告 - return null; - } -} diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningPlanController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningPlanController.java deleted file mode 100644 index 0ddb377..0000000 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningPlanController.java +++ /dev/null @@ -1,204 +0,0 @@ -package org.xyzh.study.controller; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.*; -import org.xyzh.common.core.domain.ResultDomain; -import org.xyzh.common.dto.study.TbLearningTask; -import org.xyzh.common.dto.study.TbTaskUser; - -import java.util.Map; - -/** - * @description 学习计划控制器 - * @filename LearningPlanController.java - * @author yslg - * @copyright xyzh - * @since 2025-10-15 - */ -@RestController -@RequestMapping("/study/plan") -public class LearningPlanController { - private static final Logger logger = LoggerFactory.getLogger(LearningPlanController.class); - - // ==================== 计划列表管理 ==================== - - /** - * 获取学习计划列表 - */ - @GetMapping("/list") - public ResultDomain getLearningPlanList( - @RequestParam(required = false) String planName, - @RequestParam(required = false) Integer status, - @RequestParam(required = false) Integer pageNum, - @RequestParam(required = false) Integer pageSize) { - // TODO: 实现展示校方统一发布的学习计划(名称、起止时间、任务描述) - return null; - } - - /** - * 获取计划详情 - */ - @GetMapping("/{planID}") - public ResultDomain getPlanDetail(@PathVariable String planID) { - // TODO: 实现获取计划详情 - return null; - } - - /** - * 获取进行中的计划 - */ - @GetMapping("/active") - public ResultDomain getActivePlans() { - // TODO: 实现获取进行中的计划 - return null; - } - - /** - * 获取已完成的计划 - */ - @GetMapping("/completed") - public ResultDomain getCompletedPlans() { - // TODO: 实现获取已完成的计划 - return null; - } - - /** - * 获取即将开始的计划 - */ - @GetMapping("/upcoming") - public ResultDomain getUpcomingPlans() { - // TODO: 实现获取即将开始的计划 - return null; - } - - /** - * 按时间范围筛选计划 - */ - @GetMapping("/filter/date-range") - public ResultDomain filterPlansByDateRange( - @RequestParam String startDate, - @RequestParam String endDate) { - // TODO: 实现按时间范围筛选计划 - return null; - } - - // ==================== 任务进度管理 ==================== - - /** - * 获取当前用户的学习任务 - */ - @GetMapping("/user/{userID}/tasks") - public ResultDomain getUserLearningTasks(@PathVariable String userID) { - // TODO: 实现展示当前用户的学习任务(已完成/未完成) - return null; - } - - /** - * 获取任务进度详情 - */ - @GetMapping("/task/{taskID}/progress") - public ResultDomain> getTaskProgress(@PathVariable String taskID) { - // TODO: 实现获取任务进度详情 - return null; - } - - /** - * 获取用户任务进度 - */ - @GetMapping("/user/{userID}/task/{taskID}/progress") - public ResultDomain> getUserTaskProgress( - @PathVariable String userID, - @PathVariable String taskID) { - // TODO: 实现获取用户任务进度 - return null; - } - - /** - * 更新任务进度 - */ - @PutMapping("/task/{taskID}/progress") - public ResultDomain updateTaskProgress( - @PathVariable String taskID, - @RequestParam String userID, - @RequestParam Integer progress) { - // TODO: 实现更新任务进度 - return null; - } - - /** - * 完成任务 - */ - @PostMapping("/task/{taskID}/complete") - public ResultDomain completeTask( - @PathVariable String taskID, - @RequestParam String userID) { - // TODO: 实现完成任务 - return null; - } - - /** - * 获取进度条数据 - */ - @GetMapping("/user/{userID}/progress-bar") - public ResultDomain> getProgressBarData(@PathVariable String userID) { - // TODO: 实现用进度条显示完成百分比 - return null; - } - - /** - * 获取已完成任务列表 - */ - @GetMapping("/user/{userID}/completed-tasks") - public ResultDomain getCompletedTasks(@PathVariable String userID) { - // TODO: 实现获取已完成任务列表 - return null; - } - - /** - * 获取未完成任务列表 - */ - @GetMapping("/user/{userID}/pending-tasks") - public ResultDomain getPendingTasks(@PathVariable String userID) { - // TODO: 实现获取未完成任务列表 - return null; - } - - /** - * 获取任务统计信息 - */ - @GetMapping("/user/{userID}/task-statistics") - public ResultDomain> getTaskStatistics(@PathVariable String userID) { - // TODO: 实现获取任务统计信息 - return null; - } - - /** - * 获取学习计划统计 - */ - @GetMapping("/statistics") - public ResultDomain> getLearningPlanStatistics() { - // TODO: 实现获取学习计划统计 - return null; - } - - /** - * 获取用户学习计划参与情况 - */ - @GetMapping("/user/{userID}/participation") - public ResultDomain> getUserParticipation(@PathVariable String userID) { - // TODO: 实现获取用户学习计划参与情况 - return null; - } - - /** - * 获取计划排行榜 - */ - @GetMapping("/ranking") - public ResultDomain> getPlanRanking( - @RequestParam(required = false) String planID, - @RequestParam(required = false) Integer limit) { - // TODO: 实现获取计划排行榜 - return null; - } -} diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java index 88232cc..9635c27 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/controller/LearningTaskController.java @@ -145,7 +145,7 @@ public class LearningTaskController { * 用户获取个人任务列表(用户视角) */ @PostMapping("/users/page") - public ResultDomain getUserTaskPage(@RequestBody PageRequest pageRequest) { + public ResultDomain getUserTaskPage(@RequestBody PageRequest pageRequest) { TaskItemVO filter = pageRequest.getFilter(); PageParam pageParam = pageRequest.getPageParam(); return learningTaskService.getUserTaskPage(filter, pageParam); diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java index 214f4aa..8766a92 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/mapper/LearningTaskMapper.java @@ -162,7 +162,16 @@ public interface LearningTaskMapper extends BaseMapper { */ List selectLearningTasksPage(@Param("filter") TbLearningTask filter, @Param("pageParam") PageParam pageParam, @Param("userDeptRoles") List userDeptRoles); - List selectUserLearningTasksPage(@Param("filter") TaskItemVO filter, @Param("pageParam") PageParam pageParam, @Param("userDeptRoles") List userDeptRoles); + /** + * @description 查询用户学习任务分页(包含权限过滤) + * @param filter 过滤条件 + * @param pageParam 分页参数 + * @param userDeptRoles 用户部门角色列表 + * @return List 学习任务列表(包含用户状态信息) + * @author yslg + * @since 2025-10-15 + */ + List selectUserLearningTasksPage(@Param("filter") TaskItemVO filter, @Param("pageParam") PageParam pageParam, @Param("userDeptRoles") List userDeptRoles); /** * @description 统计学习任务总数 diff --git a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java index 788337b..b4d0516 100644 --- a/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java +++ b/schoolNewsServ/study/src/main/java/org/xyzh/study/service/impl/SCLearningTaskServiceImpl.java @@ -162,8 +162,8 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { } @Override - public ResultDomain getUserTaskPage(TaskItemVO filter, PageParam pageParam) { - ResultDomain resultDomain = new ResultDomain<>(); + public ResultDomain getUserTaskPage(TaskItemVO filter, PageParam pageParam) { + ResultDomain resultDomain = new ResultDomain<>(); TbSysUser user = LoginUtil.getCurrentUser(); if (user == null) { resultDomain.fail("请先登录"); @@ -172,14 +172,14 @@ public class SCLearningTaskServiceImpl implements LearningTaskService { filter.setUserID(user.getID()); // 获取当前用户的部门角色 List userDeptRoles = LoginUtil.getCurrentDeptRole(); - List taskList = learningTaskMapper.selectUserLearningTasksPage(filter, pageParam, userDeptRoles); + List taskList = learningTaskMapper.selectUserLearningTasksPage(filter, pageParam, userDeptRoles); long total = learningTaskMapper.countLearningTasks(filter, userDeptRoles); pageParam.setTotalElements(total); pageParam.setTotalPages((int) Math.ceil((double) total / pageParam.getPageSize())); - PageDomain pageDomain = new PageDomain<>(); + PageDomain pageDomain = new PageDomain<>(); pageDomain.setDataList(taskList); pageDomain.setPageParam(pageParam); - resultDomain.success("获取任务列表分页成功", pageDomain); + resultDomain.success("获取用户任务列表分页成功", pageDomain); return resultDomain; } diff --git a/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml b/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml index 0e9a10d..115c952 100644 --- a/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml +++ b/schoolNewsServ/study/src/main/resources/mapper/LearningTaskMapper.xml @@ -19,6 +19,18 @@ + + + + + + + + + + + + id, task_id, name, description, start_time, end_time, status, @@ -282,12 +294,15 @@ - SELECT DISTINCT - tlt.id, tlt.task_id, tlt.name, tlt.description, tlt.start_time, tlt.end_time, ttu.status, - tlt.creator, tlt.updater, tlt.create_time, tlt.update_time + tlt.id, tlt.task_id, tlt.name, tlt.description, tlt.start_time, tlt.end_time, + tlt.creator, tlt.updater, tlt.create_time, tlt.update_time, + ttu.user_id, ttu.status AS user_status, ttu.progress, ttu.complete_time, + ttu.dept_id, d.name AS dept_name, d.parent_id FROM tb_task_user ttu INNER JOIN tb_learning_task tlt ON ttu.task_id = tlt.task_id + LEFT JOIN tb_sys_dept d ON ttu.dept_id = d.dept_id AND d.deleted = 0 INNER JOIN tb_resource_permission rp ON tlt.task_id = rp.resource_id AND rp.resource_type = 3 AND rp.deleted = 0 @@ -311,6 +326,9 @@ WHERE ttu.user_id = #{filter.userID} AND tlt.deleted = 0 AND ttu.deleted = 0 + + AND ttu.status = #{filter.status} + ORDER BY tlt.create_time DESC LIMIT #{pageParam.pageSize} OFFSET #{pageParam.offset} diff --git a/schoolNewsWeb/src/assets/imgs/task-finish.svg b/schoolNewsWeb/src/assets/imgs/task-finish.svg new file mode 100644 index 0000000..ee2fc4b --- /dev/null +++ b/schoolNewsWeb/src/assets/imgs/task-finish.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/schoolNewsWeb/src/assets/imgs/task-learning.svg b/schoolNewsWeb/src/assets/imgs/task-learning.svg new file mode 100644 index 0000000..b54879a --- /dev/null +++ b/schoolNewsWeb/src/assets/imgs/task-learning.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/schoolNewsWeb/src/assets/imgs/task-notstart.svg b/schoolNewsWeb/src/assets/imgs/task-notstart.svg new file mode 100644 index 0000000..107b033 --- /dev/null +++ b/schoolNewsWeb/src/assets/imgs/task-notstart.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/schoolNewsWeb/src/assets/imgs/task-total.svg b/schoolNewsWeb/src/assets/imgs/task-total.svg new file mode 100644 index 0000000..fa85257 --- /dev/null +++ b/schoolNewsWeb/src/assets/imgs/task-total.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/schoolNewsWeb/src/views/public/article/ArticleAddView.vue b/schoolNewsWeb/src/views/public/article/ArticleAddView.vue index 6c696d2..676b712 100644 --- a/schoolNewsWeb/src/views/public/article/ArticleAddView.vue +++ b/schoolNewsWeb/src/views/public/article/ArticleAddView.vue @@ -1,6 +1,5 @@