diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/SchedulingWindowController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/SchedulingWindowController.java index 2fa1cbd08..d4d3231dd 100644 --- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/SchedulingWindowController.java +++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/SchedulingWindowController.java @@ -6,6 +6,7 @@ import com.roomroot.jwgl.service.SchedulingWindowService; import com.roomroot.jwgl.unit.Result; import com.roomroot.jwgl.vo.scheduling.SchedulingViewVO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -32,6 +33,7 @@ public class SchedulingWindowController { /** * 排课窗组合视图:班次头 + 课程列表(排满标绿)+ 周次×星期×节次格子。 */ + @PreAuthorize("@ss.hasPermi('teach:schedulingWindow:list')") @GetMapping("/view") public Result view(@RequestParam("xydxqbh") String xydxqbh) { return Result.success(schedulingWindowService.view(xydxqbh)); @@ -40,6 +42,7 @@ public class SchedulingWindowController { /** * 安排所选节次。硬冲突格忽略并列出,软提示格照常安排并给出提示。 */ + @PreAuthorize("@ss.hasPermi('teach:schedulingWindow:edit')") @PostMapping("/arrange") public Result> arrange(@RequestBody SchedulingArrangeRequest request) { return Result.success(schedulingWindowService.arrange(request)); @@ -48,6 +51,7 @@ public class SchedulingWindowController { /** * 删除所选节次:仅删除该课程在这些格上的课次;已提交实施计划的课次拒绝。 */ + @PreAuthorize("@ss.hasPermi('teach:schedulingWindow:edit')") @PostMapping("/deleteCells") public Result deleteCells(@RequestBody SchedulingCellOpRequest request) { return Result.success(schedulingWindowService.deleteCells(request)); @@ -56,6 +60,7 @@ public class SchedulingWindowController { /** * 删除课程全部节次(课程仍留在列表)。 */ + @PreAuthorize("@ss.hasPermi('teach:schedulingWindow:edit')") @PostMapping("/clearCourse") public Result clearCourse(@RequestParam("sskcbh") String sskcbh) { return Result.success(schedulingWindowService.clearCourse(sskcbh)); @@ -64,6 +69,7 @@ public class SchedulingWindowController { /** * 彻底删除运行课程:课次与列表项一起删,编制侧任务保留(教员不可用)。 */ + @PreAuthorize("@ss.hasPermi('teach:schedulingWindow:edit')") @PostMapping("/deleteCourse") public Result deleteCourse(@RequestParam("sskcbh") String sskcbh) { return Result.success(schedulingWindowService.deleteCourse(sskcbh)); @@ -72,6 +78,7 @@ public class SchedulingWindowController { /** * 排课日志查询:按课程(可叠加操作类型)。 */ + @PreAuthorize("@ss.hasPermi('teach:schedulingWindow:list')") @GetMapping("/logs") public Result>> logs(@RequestParam("sskcbh") String sskcbh, @RequestParam(value = "czlx", required = false) String czlx) { diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYL.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYL.java index 8db3e4392..428a0ed6e 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYL.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYL.java @@ -3,6 +3,7 @@ package com.roomroot.jwgl.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.EqualsAndHashCode; @@ -24,36 +25,43 @@ public class JYL { /** * 名称 */ + @TableField("名称") private String mc; /** * 可排课 */ + @TableField("可排课") private Integer kpk; /** * 日期 */ + @TableField("日期") private LocalDateTime rq; /** * 节次 */ + @TableField("节次") private Integer jc; /** * 创建时间 */ + @TableField("创建时间") private LocalDateTime cjsj; /** * 备注 */ + @TableField("备注") private String bz; /** * 教员编号 */ + @TableField("教员编号") private String jybh; } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCBFZJY.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCBFZJY.java index 824908b51..0613702b7 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCBFZJY.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCBFZJY.java @@ -3,6 +3,7 @@ package com.roomroot.jwgl.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.EqualsAndHashCode; @@ -24,46 +25,55 @@ public class SSKCBFZJY { /** * 实施_课程表编号 */ + @TableField("实施_课程表编号") private String sskcbbh; /** * 辅助教员编号 */ + @TableField("辅助教员编号") private String fzjybh; /** * 主教员 */ + @TableField("主教员") private Integer zjy; /** * 年度 */ + @TableField("年度") private Integer nd; /** * 参与学员测评 */ + @TableField("参与学员测评") private Integer cyxycp; /** * 学员测评平均分 */ + @TableField("学员测评平均分") private Float xycppjf; /** * 备注 */ + @TableField("备注") private String bz; /** * 日期 */ + @TableField("日期") private LocalDateTime rq; /** * 节次 */ + @TableField("节次") private Integer jc; } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCBXYD.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCBXYD.java index 11f7aad2b..67bf729f8 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCBXYD.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCBXYD.java @@ -3,6 +3,7 @@ package com.roomroot.jwgl.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import lombok.EqualsAndHashCode; @@ -24,36 +25,43 @@ public class SSKCBXYD { /** * 实施_课程表编号 */ + @TableField("实施_课程表编号") private String sskcbbh; /** * 学员队编号 */ + @TableField("学员队编号") private String xydbh; /** * 人数 */ + @TableField("人数") private Integer rs; /** * 简称 */ + @TableField("简称") private String jc; /** * 年度 */ + @TableField("年度") private Integer nd; /** * 日期 */ + @TableField("日期") private LocalDateTime rq; /** * 节次 */ + @TableField("节次") private Integer jc2; } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SchedulingWindowServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SchedulingWindowServiceImpl.java index 6a6be44ee..3506c5857 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SchedulingWindowServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/SchedulingWindowServiceImpl.java @@ -399,6 +399,7 @@ public class SchedulingWindowServiceImpl implements SchedulingWindowService { lesson.setBh(UuidUtil.getUUID()); lesson.setSskcbh(course.getBh()); lesson.setJhsjap(0); + lesson.setSjsjap(0); lesson.setJxnr(request.getJxnr()); lesson.setJxyd(request.getJxyd()); lesson.setJxff(request.getJxff() == null || request.getJxff().isEmpty() ? "理论讲授" : request.getJxff()); @@ -406,10 +407,11 @@ public class SchedulingWindowServiceImpl implements SchedulingWindowService { lesson.setJc(cell.getJc()); lesson.setNd(ctx.ndCode); lesson.setSczt(0); + lesson.setXycpzt("未开始"); lesson.setJcdj(request.getJcdj() == null ? 0 : request.getJcdj()); lesson.setJxbzbz(request.getJxbzbz()); lesson.setYcxx(request.getYcxx()); - lesson.setBzms(request.getBzms()); + lesson.setBzms(request.getBzms() == null || request.getBzms().isEmpty() ? "行政班" : request.getBzms()); lesson.setCjsj(now); lesson.setBdsj(now); sskcbMapper.insert(lesson); diff --git a/frontend/src/api/teachBusiness/schedulingWindow.js b/frontend/src/api/teachBusiness/schedulingWindow.js new file mode 100644 index 000000000..d527c8000 --- /dev/null +++ b/frontend/src/api/teachBusiness/schedulingWindow.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +/** + * 实施排课窗口:班次头 + 课程列表 + 周次×星期×节次格子。 + * 后端:SchedulingWindowController /schedulingWindow + */ + +// 排课窗组合视图 +export function getSchedulingView(xydxqbh) { + return request({ + url: '/schedulingWindow/view', + method: 'get', + params: { xydxqbh } + }) +} + +// 安排所选节次(硬冲突格忽略并返回原因;软提示格照常安排) +export function arrangeLessons(data) { + return request({ + url: '/schedulingWindow/arrange', + method: 'post', + data + }) +} + +// 删除所选节次(仅删除该课程在这些格上的课次;已提交实施计划的课次会被拒绝) +export function deleteLessonCells(data) { + return request({ + url: '/schedulingWindow/deleteCells', + method: 'post', + data + }) +} + +// 删除该课程的全部节次(课程仍保留在列表) +export function clearCourseLessons(sskcbh) { + return request({ + url: '/schedulingWindow/clearCourse', + method: 'post', + params: { sskcbh } + }) +} + +// 彻底删除运行课程(课次与列表项一起删,编制侧任务保留) +export function deleteRunningCourse(sskcbh) { + return request({ + url: '/schedulingWindow/deleteCourse', + method: 'post', + params: { sskcbh } + }) +} + +// 排课日志(按课程,可叠加操作类型) +export function listSchedulingLogs(sskcbh, czlx) { + return request({ + url: '/schedulingWindow/logs', + method: 'get', + params: { sskcbh, czlx } + }) +} diff --git a/frontend/src/views/teachBusiness/schedulingWindow/index.vue b/frontend/src/views/teachBusiness/schedulingWindow/index.vue new file mode 100644 index 000000000..36ccdc855 --- /dev/null +++ b/frontend/src/views/teachBusiness/schedulingWindow/index.vue @@ -0,0 +1,1060 @@ + + + + + diff --git a/frontend/src/views/teachOffice/shiftSemester/index.vue b/frontend/src/views/teachOffice/shiftSemester/index.vue index 134bd0f56..449c184f2 100644 --- a/frontend/src/views/teachOffice/shiftSemester/index.vue +++ b/frontend/src/views/teachOffice/shiftSemester/index.vue @@ -121,11 +121,12 @@ - + @@ -637,6 +638,21 @@ export default { this.eventCalendarVisible = true }, + // 跳转到排课窗口,并带上当前班次学期编号 + handleSchedule(row) { + const target = row || this.currentRow + if (!target) { + this.$message.warning('请先在列表中选择一条班次学期信息') + return + } + const bh = target.bh || target.xydxqbh + if (!bh) { + this.$message.warning('该班次学期缺少编号,无法进入排课窗口') + return + } + this.$router.push({ path: '/schedule/schedulingWindow', query: { xydxqbh: bh } }) + }, + handleAllocation(row) { const target = row || this.currentRow if (!target) {