From df30b178462d02cbddedf75069f7fa38c64de00c Mon Sep 17 00:00:00 2001
From: Leo <98382335+gaoziman@users.noreply.github.com>
Date: Sun, 28 Sep 2025 21:49:33 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=95=99=E8=82=B2=E7=AE=A1?=
=?UTF-8?q?=E7=90=86=E6=A8=A1=E5=9D=97=E5=89=8D=E7=AB=AF=E7=95=8C=E9=9D=A2?=
=?UTF-8?q?=E5=92=8CAPI?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增前端API接口:学期管理、课程班级管理、课程安排管理接口
- 新增通用选项配置接口:options.js,提供下拉选择数据
- 新增学期管理页面:semester/index.vue,提供学期的增删改查功能
- 新增课程班级管理页面:courseClass/index.vue,提供班级管理功能
- 集成Element UI组件实现表格、表单、分页等交互功能
- 实现前后端数据交互和状态管理
---
ruoyi-ui/src/api/education/courseClass.js | 171 ++++
ruoyi-ui/src/api/education/options.js | 31 +
ruoyi-ui/src/api/education/schedule.js | 201 +++++
ruoyi-ui/src/api/education/semester.js | 113 +++
.../src/views/education/courseClass/index.vue | 743 ++++++++++++++++++
.../src/views/education/semester/index.vue | 393 +++++++++
6 files changed, 1652 insertions(+)
create mode 100644 ruoyi-ui/src/api/education/courseClass.js
create mode 100644 ruoyi-ui/src/api/education/options.js
create mode 100644 ruoyi-ui/src/api/education/schedule.js
create mode 100644 ruoyi-ui/src/api/education/semester.js
create mode 100644 ruoyi-ui/src/views/education/courseClass/index.vue
create mode 100644 ruoyi-ui/src/views/education/semester/index.vue
diff --git a/ruoyi-ui/src/api/education/courseClass.js b/ruoyi-ui/src/api/education/courseClass.js
new file mode 100644
index 0000000..84e402e
--- /dev/null
+++ b/ruoyi-ui/src/api/education/courseClass.js
@@ -0,0 +1,171 @@
+import request from '@/utils/request'
+
+/**
+ * 查询开课计划列表
+ * @param {Object} query 查询参数
+ */
+export function listCourseClass(query) {
+ return request({
+ url: '/education/courseClass/list',
+ method: 'get',
+ params: query
+ })
+}
+
+/**
+ * 查询开课计划详细
+ * @param {Number} classId 开课计划ID
+ */
+export function getCourseClass(classId) {
+ return request({
+ url: '/education/courseClass/' + classId,
+ method: 'get'
+ })
+}
+
+/**
+ * 新增开课计划
+ * @param {Object} data 开课计划数据
+ */
+export function addCourseClass(data) {
+ return request({
+ url: '/education/courseClass',
+ method: 'post',
+ data: data
+ })
+}
+
+/**
+ * 修改开课计划
+ * @param {Object} data 开课计划数据
+ */
+export function updateCourseClass(data) {
+ return request({
+ url: '/education/courseClass',
+ method: 'put',
+ data: data
+ })
+}
+
+/**
+ * 删除开课计划
+ * @param {Array} classIds 开课计划ID数组
+ */
+export function delCourseClass(classIds) {
+ return request({
+ url: '/education/courseClass/' + classIds,
+ method: 'delete'
+ })
+}
+
+/**
+ * 发布开课计划
+ * @param {Number} classId 开课计划ID
+ */
+export function publishCourseClass(classId) {
+ return request({
+ url: '/education/courseClass/publish/' + classId,
+ method: 'put'
+ })
+}
+
+/**
+ * 批量发布开课计划
+ * @param {Array} classIds 开课计划ID数组
+ */
+export function batchPublishCourseClass(classIds) {
+ return request({
+ url: '/education/courseClass/batchPublish',
+ method: 'put',
+ data: classIds
+ })
+}
+
+/**
+ * 停止选课
+ * @param {Number} classId 开课计划ID
+ */
+export function stopEnrollment(classId) {
+ return request({
+ url: '/education/courseClass/stopEnrollment/' + classId,
+ method: 'put'
+ })
+}
+
+/**
+ * 结课
+ * @param {Number} classId 开课计划ID
+ */
+export function finishCourse(classId) {
+ return request({
+ url: '/education/courseClass/finish/' + classId,
+ method: 'put'
+ })
+}
+
+/**
+ * 调整容量
+ * @param {Number} classId 开课计划ID
+ * @param {Number} newCapacity 新容量
+ */
+export function adjustCapacity(classId, newCapacity) {
+ return request({
+ url: '/education/courseClass/adjustCapacity/' + classId + '/' + newCapacity,
+ method: 'put'
+ })
+}
+
+/**
+ * 获取指定学期的开课计划
+ * @param {Number} semesterId 学期ID
+ */
+export function getCourseClassBySemester(semesterId) {
+ return request({
+ url: '/education/courseClass/semester/' + semesterId,
+ method: 'get'
+ })
+}
+
+/**
+ * 获取指定教师的开课计划
+ * @param {Number} teacherId 教师ID
+ */
+export function getCourseClassByTeacher(teacherId) {
+ return request({
+ url: '/education/courseClass/teacher/' + teacherId,
+ method: 'get'
+ })
+}
+
+/**
+ * 获取可选课的开课计划
+ */
+export function getEnrollableCourseClasses() {
+ return request({
+ url: '/education/courseClass/enrollable',
+ method: 'get'
+ })
+}
+
+/**
+ * 获取开课计划统计信息
+ * @param {Number} semesterId 学期ID
+ */
+export function getCourseClassStatistics(semesterId) {
+ return request({
+ url: '/education/courseClass/statistics/' + semesterId,
+ method: 'get'
+ })
+}
+
+/**
+ * 导出开课计划
+ * @param {Object} query 查询参数
+ */
+export function exportCourseClass(query) {
+ return request({
+ url: '/education/courseClass/export',
+ method: 'post',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/ruoyi-ui/src/api/education/options.js b/ruoyi-ui/src/api/education/options.js
new file mode 100644
index 0000000..ad0f62e
--- /dev/null
+++ b/ruoyi-ui/src/api/education/options.js
@@ -0,0 +1,31 @@
+import request from '@/utils/request'
+
+/**
+ * 获取课程选项
+ */
+export function getCourseOptions() {
+ return request({
+ url: '/education/courseClass/courseOptions',
+ method: 'get'
+ })
+}
+
+/**
+ * 获取教师选项
+ */
+export function getTeacherOptions() {
+ return request({
+ url: '/education/courseClass/teacherOptions',
+ method: 'get'
+ })
+}
+
+/**
+ * 获取教室选项
+ */
+export function getClassroomOptions() {
+ return request({
+ url: '/education/courseClass/classroomOptions',
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/ruoyi-ui/src/api/education/schedule.js b/ruoyi-ui/src/api/education/schedule.js
new file mode 100644
index 0000000..ec44816
--- /dev/null
+++ b/ruoyi-ui/src/api/education/schedule.js
@@ -0,0 +1,201 @@
+import request from '@/utils/request'
+
+/**
+ * 查询开课节次安排列表
+ * @param {Object} query 查询参数
+ */
+export function listSchedule(query) {
+ return request({
+ url: '/education/schedule/list',
+ method: 'get',
+ params: query
+ })
+}
+
+/**
+ * 查询开课节次安排详细
+ * @param {Number} scheduleId 节次安排ID
+ */
+export function getSchedule(scheduleId) {
+ return request({
+ url: '/education/schedule/' + scheduleId,
+ method: 'get'
+ })
+}
+
+/**
+ * 新增开课节次安排
+ * @param {Object} data 节次安排数据
+ */
+export function addSchedule(data) {
+ return request({
+ url: '/education/schedule',
+ method: 'post',
+ data: data
+ })
+}
+
+/**
+ * 修改开课节次安排
+ * @param {Object} data 节次安排数据
+ */
+export function updateSchedule(data) {
+ return request({
+ url: '/education/schedule',
+ method: 'put',
+ data: data
+ })
+}
+
+/**
+ * 删除开课节次安排
+ * @param {Array} scheduleIds 节次安排ID数组
+ */
+export function delSchedule(scheduleIds) {
+ return request({
+ url: '/education/schedule/' + scheduleIds,
+ method: 'delete'
+ })
+}
+
+/**
+ * 根据开课ID查询节次安排
+ * @param {Number} classId 开课ID
+ */
+export function getScheduleByClassId(classId) {
+ return request({
+ url: '/education/schedule/class/' + classId,
+ method: 'get'
+ })
+}
+
+/**
+ * 根据开课ID删除节次安排
+ * @param {Number} classId 开课ID
+ */
+export function delScheduleByClassId(classId) {
+ return request({
+ url: '/education/schedule/class/' + classId,
+ method: 'delete'
+ })
+}
+
+/**
+ * 查询指定教室的课程安排
+ * @param {Number} classroomId 教室ID
+ * @param {Number} semesterId 学期ID
+ */
+export function getScheduleByClassroom(classroomId, semesterId) {
+ return request({
+ url: '/education/schedule/classroom/' + classroomId + '/' + semesterId,
+ method: 'get'
+ })
+}
+
+/**
+ * 查询指定教师的课程安排
+ * @param {Number} teacherId 教师ID
+ * @param {Number} semesterId 学期ID
+ */
+export function getScheduleByTeacher(teacherId, semesterId) {
+ return request({
+ url: '/education/schedule/teacher/' + teacherId + '/' + semesterId,
+ method: 'get'
+ })
+}
+
+/**
+ * 查询指定学期的所有课程安排
+ * @param {Number} semesterId 学期ID
+ */
+export function getScheduleBySemester(semesterId) {
+ return request({
+ url: '/education/schedule/semester/' + semesterId,
+ method: 'get'
+ })
+}
+
+/**
+ * 生成教室课表
+ * @param {Number} classroomId 教室ID
+ * @param {Number} semesterId 学期ID
+ */
+export function generateClassroomTimetable(classroomId, semesterId) {
+ return request({
+ url: '/education/schedule/timetable/classroom/' + classroomId + '/' + semesterId,
+ method: 'get'
+ })
+}
+
+/**
+ * 生成教师课表
+ * @param {Number} teacherId 教师ID
+ * @param {Number} semesterId 学期ID
+ */
+export function generateTeacherTimetable(teacherId, semesterId) {
+ return request({
+ url: '/education/schedule/timetable/teacher/' + teacherId + '/' + semesterId,
+ method: 'get'
+ })
+}
+
+/**
+ * 批量添加节次安排
+ * @param {Number} classId 开课ID
+ * @param {Array} scheduleList 节次安排列表
+ */
+export function batchAddSchedule(classId, scheduleList) {
+ return request({
+ url: '/education/schedule/batch/' + classId,
+ method: 'post',
+ data: scheduleList
+ })
+}
+
+/**
+ * 复制节次安排
+ * @param {Number} sourceClassId 源开课ID
+ * @param {Number} targetClassId 目标开课ID
+ */
+export function copySchedule(sourceClassId, targetClassId) {
+ return request({
+ url: '/education/schedule/copy/' + sourceClassId + '/' + targetClassId,
+ method: 'post'
+ })
+}
+
+/**
+ * 自动排课
+ * @param {Number} classId 开课ID
+ * @param {Number} semesterId 学期ID
+ * @param {Number} courseHours 课程学时
+ */
+export function autoSchedule(classId, semesterId, courseHours) {
+ return request({
+ url: '/education/schedule/auto/' + classId + '/' + semesterId + '/' + courseHours,
+ method: 'post'
+ })
+}
+
+/**
+ * 获取时间段统计信息
+ * @param {Number} semesterId 学期ID
+ */
+export function getScheduleStatistics(semesterId) {
+ return request({
+ url: '/education/schedule/statistics/' + semesterId,
+ method: 'get'
+ })
+}
+
+/**
+ * 导出节次安排
+ * @param {Object} query 查询参数
+ */
+export function exportSchedule(query) {
+ return request({
+ url: '/education/schedule/export',
+ method: 'post',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/ruoyi-ui/src/api/education/semester.js b/ruoyi-ui/src/api/education/semester.js
new file mode 100644
index 0000000..aa5f646
--- /dev/null
+++ b/ruoyi-ui/src/api/education/semester.js
@@ -0,0 +1,113 @@
+import request from '@/utils/request'
+
+/**
+ * 查询学期信息列表
+ * @param {Object} query 查询参数
+ */
+export function listSemester(query) {
+ return request({
+ url: '/education/semester/list',
+ method: 'get',
+ params: query
+ })
+}
+
+/**
+ * 查询学期信息详细
+ * @param {Number} semesterId 学期ID
+ */
+export function getSemester(semesterId) {
+ return request({
+ url: '/education/semester/' + semesterId,
+ method: 'get'
+ })
+}
+
+/**
+ * 新增学期信息
+ * @param {Object} data 学期数据
+ */
+export function addSemester(data) {
+ return request({
+ url: '/education/semester',
+ method: 'post',
+ data: data
+ })
+}
+
+/**
+ * 修改学期信息
+ * @param {Object} data 学期数据
+ */
+export function updateSemester(data) {
+ return request({
+ url: '/education/semester',
+ method: 'put',
+ data: data
+ })
+}
+
+/**
+ * 删除学期信息
+ * @param {Array} semesterIds 学期ID数组
+ */
+export function delSemester(semesterIds) {
+ return request({
+ url: '/education/semester/' + semesterIds,
+ method: 'delete'
+ })
+}
+
+/**
+ * 发布学期
+ * @param {Number} semesterId 学期ID
+ */
+export function publishSemester(semesterId) {
+ return request({
+ url: '/education/semester/publish/' + semesterId,
+ method: 'put'
+ })
+}
+
+/**
+ * 归档学期
+ * @param {Number} semesterId 学期ID
+ */
+export function archiveSemester(semesterId) {
+ return request({
+ url: '/education/semester/archive/' + semesterId,
+ method: 'put'
+ })
+}
+
+/**
+ * 获取当前学期
+ */
+export function getCurrentSemester() {
+ return request({
+ url: '/education/semester/current',
+ method: 'get'
+ })
+}
+
+/**
+ * 获取可选课学期列表
+ */
+export function getEnrollableSemesters() {
+ return request({
+ url: '/education/semester/enrollable',
+ method: 'get'
+ })
+}
+
+/**
+ * 导出学期信息
+ * @param {Object} query 查询参数
+ */
+export function exportSemester(query) {
+ return request({
+ url: '/education/semester/export',
+ method: 'post',
+ params: query
+ })
+}
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/education/courseClass/index.vue b/ruoyi-ui/src/views/education/courseClass/index.vue
new file mode 100644
index 0000000..d41d184
--- /dev/null
+++ b/ruoyi-ui/src/views/education/courseClass/index.vue
@@ -0,0 +1,743 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 批量发布
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.enrolledCount || 0 }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.weekday }} {{ scope.row.timeSlot }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 操作
+
+
+ 修改
+ 节次安排
+ 发布
+ 调整容量
+ 停止选课
+ 结课
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/education/semester/index.vue b/ruoyi-ui/src/views/education/semester/index.vue
new file mode 100644
index 0000000..c94fefa
--- /dev/null
+++ b/ruoyi-ui/src/views/education/semester/index.vue
@@ -0,0 +1,393 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.startDate, '{y}-{m}-{d}') }}
+
+
+
+
+ {{ parseTime(scope.row.endDate, '{y}-{m}-{d}') }}
+
+
+
+
+ {{ parseTime(scope.row.enrollStartTime, '{y}-{m}-{d} {h}:{i}') }}
+
+
+
+
+ {{ parseTime(scope.row.enrollEndTime, '{y}-{m}-{d} {h}:{i}') }}
+
+
+
+
+
+
+
+
+
+ 修改
+ 发布
+ 归档
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file