From 36e5231c6cbf4402cb601582d44fa33411b20c4f Mon Sep 17 00:00:00 2001 From: lbw <1192299468@qq.com> Date: Wed, 31 Dec 2025 16:20:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(plan):=20=E6=B7=BB=E5=8A=A0=E5=AD=A6?= =?UTF-8?q?=E7=94=9F=E5=AD=A6=E6=A1=88=E6=9F=A5=E7=9C=8B=E5=8F=8A=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在学生列表表格中新增“查看学案”按钮,支持查看对应学生的学案列表 - 新增StudentPlanListDialog组件,实现学案列表展示和学案文件下载 - 后端新增查询学生学案接口,支持按学生ID获取未完成学案列表 - 后端数据层和服务层添加按学生ID查询学案的方法 - 调整计划生成相关逻辑,优化学案数据字段命名 - Vue前端调用新增接口,实现学生学案列表动态加载与下载操作 - 完善学案状态显示和列表交互体验 --- .../controller/LessonPlanController.java | 15 +++ .../domain/mapper/LessonPlansDOMapper.java | 2 + .../vo/plan/FindPlanStudentListRspVO.java | 17 ++++ .../model/vo/plan/FindPlanStudentReqVO.java | 14 +++ .../service/service/LessonPlansService.java | 2 + .../service/plan/LessonPlansServiceImpl.java | 7 +- .../resources/mapper/LessonPlansDOMapper.xml | 11 +++ enlish-vue/src/api/plan.js | 6 ++ .../components/StudentPlanListDialog.vue | 96 +++++++++++++++++++ enlish-vue/src/pages/class.vue | 19 +++- 10 files changed, 183 insertions(+), 6 deletions(-) create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/FindPlanStudentListRspVO.java create mode 100644 enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/FindPlanStudentReqVO.java create mode 100644 enlish-vue/src/layouts/components/StudentPlanListDialog.vue diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java index ca0f0fa..17e9b49 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/controller/LessonPlanController.java @@ -8,6 +8,7 @@ import com.yinlihupo.enlish.service.service.LessonPlansService; import com.yinlihupo.enlish.service.utils.TTSUtil; import com.yinlihupo.enlish.service.utils.WordExportUtil; import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog; +import com.yinlihupo.framework.common.response.PageResponse; import com.yinlihupo.framework.common.response.Response; import com.yinlihupo.framework.common.util.JsonUtils; import jakarta.annotation.Resource; @@ -116,5 +117,19 @@ public class LessonPlanController { return Response.success("学案生成完成"); } + @PostMapping("student/list") + @ApiOperationLog(description = "查询学生学案") + public Response findStudentPlans(@RequestBody FindPlanStudentReqVO findPlanStudentReqVO) { + List lessonPlansDOS = lessonPlanService.findLessonPlansByStudentId(findPlanStudentReqVO.getStudentId()); + List list = lessonPlansDOS.stream().map(lessonPlansDO -> LessonPlanItem + .builder() + .id(lessonPlansDO.getId()) + .isFinished(0) + .title(lessonPlansDO.getTitle()) + .build()) + .toList(); + + return Response.success(FindPlanStudentListRspVO.builder().lessonPlanItems(list).build()); + } } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/LessonPlansDOMapper.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/LessonPlansDOMapper.java index d537c77..ad9f2b8 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/LessonPlansDOMapper.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/domain/mapper/LessonPlansDOMapper.java @@ -14,4 +14,6 @@ public interface LessonPlansDOMapper { List findLessonPlansByStudentId(@Param("ids") List ids); LessonPlansDO selectByLessonId(@Param("lessonId") Integer lessonId); + + List selectByStudentId(@Param("studentId") Integer studentId); } \ No newline at end of file diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/FindPlanStudentListRspVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/FindPlanStudentListRspVO.java new file mode 100644 index 0000000..2133e17 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/FindPlanStudentListRspVO.java @@ -0,0 +1,17 @@ +package com.yinlihupo.enlish.service.model.vo.plan; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class FindPlanStudentListRspVO { + + List lessonPlanItems; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/FindPlanStudentReqVO.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/FindPlanStudentReqVO.java new file mode 100644 index 0000000..83f9537 --- /dev/null +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/model/vo/plan/FindPlanStudentReqVO.java @@ -0,0 +1,14 @@ +package com.yinlihupo.enlish.service.model.vo.plan; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Data +@Builder +public class FindPlanStudentReqVO { + private Integer studentId; +} diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/LessonPlansService.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/LessonPlansService.java index f06db4f..cfcad1e 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/LessonPlansService.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/LessonPlansService.java @@ -10,4 +10,6 @@ public interface LessonPlansService { List findLessonPlans(List ids); LessonPlansDO findLessonPlanById(Integer id); + + List findLessonPlansByStudentId(Integer studentId); } diff --git a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/plan/LessonPlansServiceImpl.java b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/plan/LessonPlansServiceImpl.java index 675ff05..ae10fc9 100644 --- a/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/plan/LessonPlansServiceImpl.java +++ b/enlish-service/src/main/java/com/yinlihupo/enlish/service/service/plan/LessonPlansServiceImpl.java @@ -192,6 +192,11 @@ public class LessonPlansServiceImpl implements LessonPlansService { return lessonPlansDOMapper.selectByLessonId(id); } + @Override + public List findLessonPlansByStudentId(Integer studentId) { + return lessonPlansDOMapper.selectByStudentId(studentId); + } + private Map generateWeekendPlans(List words, int day, @@ -218,7 +223,7 @@ public class LessonPlansServiceImpl implements LessonPlansService { data.put("studentId", studentId); data.put("studentStr", studentDO.getName()); data.put("examStr", ExamTitle); - data.put("words", words); + data.put("checkList", words); // LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); // Configure config = Configure.builder() // .bind("checkList", policy) diff --git a/enlish-service/src/main/resources/mapper/LessonPlansDOMapper.xml b/enlish-service/src/main/resources/mapper/LessonPlansDOMapper.xml index 5ffe871..65f027c 100644 --- a/enlish-service/src/main/resources/mapper/LessonPlansDOMapper.xml +++ b/enlish-service/src/main/resources/mapper/LessonPlansDOMapper.xml @@ -39,4 +39,15 @@ where id = #{lessonId} + + \ No newline at end of file diff --git a/enlish-vue/src/api/plan.js b/enlish-vue/src/api/plan.js index 00fcb63..2094ba6 100644 --- a/enlish-vue/src/api/plan.js +++ b/enlish-vue/src/api/plan.js @@ -57,6 +57,12 @@ export function checkIsGenerated(studentId) { }) } +export function getPlanListByStudentId(studentId) { + return axios.post('plan/student/list', { + studentId: studentId + }) +} + const resolveBlob = (res, fileName) => { // 创建 Blob 对象,可以指定 type,也可以让浏览器自动推断 const blob = new Blob([res], { type: 'application/octet-stream' }); diff --git a/enlish-vue/src/layouts/components/StudentPlanListDialog.vue b/enlish-vue/src/layouts/components/StudentPlanListDialog.vue new file mode 100644 index 0000000..bc0c5b0 --- /dev/null +++ b/enlish-vue/src/layouts/components/StudentPlanListDialog.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/enlish-vue/src/pages/class.vue b/enlish-vue/src/pages/class.vue index 8ea48b6..dfa7800 100644 --- a/enlish-vue/src/pages/class.vue +++ b/enlish-vue/src/pages/class.vue @@ -67,7 +67,9 @@ @@ -99,6 +101,10 @@ :student-id="selectedStudentIds[0]" @success="onLessonPlanGenerateSuccess" /> +
@@ -132,6 +138,7 @@ import AddClassDialog from '@/layouts/components/AddClassDialog.vue' import AddGradeDialog from '@/layouts/components/AddGradeDialog.vue' import AddStudentDialog from '@/layouts/components/AddStudentDialog.vue' import LessonPlanDialog from '@/layouts/components/LessonPlanDialog.vue' +import StudentPlanListDialog from '@/layouts/components/StudentPlanListDialog.vue' import { getUnitList, deleteUnit } from '@/api/unit' import AddUnitDialog from '@/layouts/components/AddUnitDialog.vue' import { useRouter, onBeforeRouteLeave } from 'vue-router' @@ -171,6 +178,8 @@ const showAddStudentDialog = ref(false) const showLessonPlanDialog = ref(false) const generatingPercents = ref({}) const pollingTimers = {} +const showPlanListDialog = ref(false) +const planStudentId = ref(null) const units = ref([]) const unitPageNo = ref(1) @@ -284,14 +293,12 @@ function onGradeRowClick(row) { function startLessonPlanPolling(studentId) { if (!studentId) return if (pollingTimers[studentId]) return - pollingTimers[studentId] = setInterval(async () => { + const pollOnce = async () => { try { const res = await checkIsGenerated(studentId) const d = res?.data const ok = d?.success === false || d?.success === false || d === false - console.log(ok) if (ok) { - console.log('ok', d) const p = Number(generatingPercents.value[studentId]) || 1 generatingPercents.value[studentId] = Math.min(p + 5, 95) } else { @@ -303,7 +310,9 @@ function startLessonPlanPolling(studentId) { const p = Number(generatingPercents.value[studentId]) || 1 generatingPercents.value[studentId] = Math.min(p + 3, 95) } - }, 10000) + } + pollOnce() + pollingTimers[studentId] = setInterval(pollOnce, 10000) } function onLessonPlanGenerateSuccess(payload) { const sid = payload?.studentId || selectedStudentIds.value?.[0]