2991692032 2 months ago
parent 53bf31e28c
commit 8b55f0c5b6

@ -44,6 +44,7 @@ export interface CreateCourseParams {
endTime: string;
startWeek: number;
endWeek: number;
semester?: string;
color?: string;
}
@ -91,6 +92,11 @@ export default {
return get<{ code: number; data: { total: number; list: CourseItem[] } }>(`/courses/day/${dayOfWeek}`);
},
// 获取用户在指定学期的课程
getCoursesBySemester(semester: string) {
return get<{ code: number; data: { total: number; list: CourseItem[] } }>(`/courses/semester/${semester}`);
},
// 更新课程
updateCourse(id: number, data: UpdateCourseParams) {
return put<{ code: number; message: string }>(`/courses/${id}`, data);

@ -14,7 +14,7 @@
<div class="filter-row">
<div class="semester-selector">
<span class="filter-label">学期</span>
<el-select v-model="currentSemester" placeholder="选择学期" style="min-width: 220px;">
<el-select v-model="currentSemester" placeholder="选择学期" style="min-width: 220px;" @change="handleSemesterChange">
<el-option label="2023-2024学年第一学期" value="2023-1"></el-option>
<el-option label="2023-2024学年第二学期" value="2023-2"></el-option>
</el-select>
@ -264,6 +264,7 @@ const courseForm = reactive({
endTime: '',
startWeek: 1,
endWeek: 16,
semester: '2023-1', //
color: '#409EFF'
});
@ -293,7 +294,15 @@ onMounted(async () => {
const fetchCourses = async () => {
loading.value = true;
try {
const res = await scheduleApi.getAllCourses();
let res;
if (currentSemester.value) {
//
res = await scheduleApi.getCoursesBySemester(currentSemester.value);
} else {
//
res = await scheduleApi.getAllCourses();
}
if (res.code === 200) {
courses.value = res.data.list;
}
@ -364,6 +373,7 @@ const handleCellClick = (day: number, timeSlotId: number) => {
courseForm.startWeek = currentWeek.value;
courseForm.endWeek = currentWeek.value + 15 > 20 ? 20 : currentWeek.value + 15;
courseForm.semester = currentSemester.value; //
courseForm.color = getRandomColor();
courseDialogVisible.value = true;
@ -392,6 +402,7 @@ const handleAddCourse = () => {
courseForm.endTime = '09:40';
courseForm.startWeek = 1;
courseForm.endWeek = 16;
courseForm.semester = currentSemester.value; //
courseForm.color = getRandomColor();
courseDialogVisible.value = true;
@ -591,6 +602,7 @@ const saveCourse = async () => {
endTime: formatTime(courseForm.endTime),
startWeek: courseForm.startWeek,
endWeek: courseForm.endWeek,
semester: courseForm.semester,
color: courseForm.color || '#409EFF'
};
@ -667,6 +679,11 @@ const getRandomColor = () => {
];
return colors[Math.floor(Math.random() * colors.length)];
};
//
const handleSemesterChange = () => {
fetchCourses();
};
</script>
<style scoped>

@ -63,6 +63,17 @@ public class CourseController {
return courseService.getCourseListByDayOfWeek(userId, dayOfWeek);
}
@Operation(summary = "获取用户在指定学期的课程")
@GetMapping("/semester/{semester}")
public Result<?> getCourseListBySemester(@PathVariable("semester") String semester) {
// 从当前上下文获取用户ID
Long userId = BaseContext.getId();
if (userId == null) {
return Result.error(401, "未登录");
}
return courseService.getCourseListBySemester(userId, semester);
}
@Operation(summary = "更新课程")
@PutMapping("/{id}")
public Result<?> updateCourse(

@ -52,6 +52,14 @@ public interface CourseMapper {
*/
List<Course> getListByUserIdAndDayOfWeek(@Param("userId") Long userId, @Param("dayOfWeek") Byte dayOfWeek);
/**
*
* @param userId ID
* @param semester 2023-1
* @return
*/
List<Course> getListByUserIdAndSemester(@Param("userId") Long userId, @Param("semester") String semester);
/**
*
* @param userId ID

@ -51,6 +51,11 @@ public class CreateCourseDTO {
*/
private Byte endWeek;
/**
* 2023-1
*/
private String semester;
/**
*
*/

@ -70,6 +70,11 @@ public class Course implements Serializable {
*/
private Byte endWeek;
/**
* 2023-1
*/
private String semester;
/**
*
*/

@ -66,6 +66,11 @@ public class CourseVO {
*/
private Byte endWeek;
/**
* 2023-1
*/
private String semester;
/**
*
*/

@ -38,6 +38,14 @@ public interface CourseService {
*/
Result getCourseListByDayOfWeek(Long userId, Byte dayOfWeek);
/**
*
* @param userId ID
* @param semester 2023-1
* @return
*/
Result getCourseListBySemester(Long userId, String semester);
/**
*
* @param courseId ID

@ -137,6 +137,26 @@ public class CourseServiceImpl implements CourseService {
return Result.success(data);
}
@Override
public Result getCourseListBySemester(Long userId, String semester) {
// 获取用户在指定学期的课程
List<Course> courses = courseMapper.getListByUserIdAndSemester(userId, semester);
// 转换为VO
List<CourseVO> courseVOs = courses.stream().map(course -> {
CourseVO courseVO = new CourseVO();
BeanUtil.copyProperties(course, courseVO);
return courseVO;
}).collect(Collectors.toList());
// 返回结果
Map<String, Object> data = new HashMap<>();
data.put("total", courseVOs.size());
data.put("list", courseVOs);
return Result.success(data);
}
@Override
@Transactional
public Result updateCourse(Long courseId, Long userId, CreateCourseDTO createCourseDTO) {

@ -146,11 +146,13 @@ CREATE TABLE IF NOT EXISTS `courses` (
`end_time` TIME NOT NULL COMMENT '结束时间',
`start_week` TINYINT NOT NULL COMMENT '开始周次',
`end_week` TINYINT NOT NULL COMMENT '结束周次',
`semester` VARCHAR(20) DEFAULT NULL COMMENT '学期2023-1',
`color` VARCHAR(20) DEFAULT NULL COMMENT '显示颜色',
`status` TINYINT DEFAULT 1 COMMENT '状态0-删除, 1-正常)',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX `idx_user_id` (`user_id`),
INDEX `idx_semester` (`semester`),
FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='课程表';
@ -184,4 +186,8 @@ INSERT INTO `categories` (`name`, `description`, `icon`, `sort`, `status`) VALUE
-- 初始化管理员账号
INSERT INTO `users` (`username`, `email`, `password`, `nickname`, `role`, `status`, `is_verified`) VALUES
('admin', 'admin@unilife.com', '123456', '系统管理员', 2, 1, 1);
('admin', 'admin@unilife.com', '123456', '系统管理员', 2, 1, 1);
-- 数据库迁移为现有courses表添加semester字段
ALTER TABLE `courses` ADD COLUMN `semester` VARCHAR(20) DEFAULT NULL COMMENT '学期2023-1' AFTER `end_week`;
ALTER TABLE `courses` ADD INDEX `idx_semester` (`semester`);

@ -12,6 +12,7 @@
<result column="end_time" property="endTime"/>
<result column="start_week" property="startWeek"/>
<result column="end_week" property="endWeek"/>
<result column="semester" property="semester"/>
<result column="color" property="color"/>
<result column="status" property="status"/>
<result column="created_at" property="createdAt"/>
@ -21,23 +22,23 @@
<insert id="insert" parameterType="com.unilife.model.entity.Course" useGeneratedKeys="true" keyProperty="id">
INSERT INTO courses (
user_id, name, teacher, location, day_of_week, start_time, end_time,
start_week, end_week, color, status, created_at, updated_at
start_week, end_week, semester, color, status, created_at, updated_at
) VALUES (
#{userId}, #{name}, #{teacher}, #{location}, #{dayOfWeek}, #{startTime}, #{endTime},
#{startWeek}, #{endWeek}, #{color}, #{status}, NOW(), NOW()
#{startWeek}, #{endWeek}, #{semester}, #{color}, #{status}, NOW(), NOW()
)
</insert>
<select id="getById" resultMap="courseResultMap">
SELECT id, user_id, name, teacher, location, day_of_week, start_time, end_time,
start_week, end_week, color, status, created_at, updated_at
start_week, end_week, semester, color, status, created_at, updated_at
FROM courses
WHERE id = #{id} AND status != 0
</select>
<select id="getListByUserId" resultMap="courseResultMap">
SELECT id, user_id, name, teacher, location, day_of_week, start_time, end_time,
start_week, end_week, color, status, created_at, updated_at
start_week, end_week, semester, color, status, created_at, updated_at
FROM courses
WHERE user_id = #{userId} AND status != 0
ORDER BY day_of_week ASC, start_time ASC
@ -53,6 +54,7 @@
end_time = #{endTime},
start_week = #{startWeek},
end_week = #{endWeek},
semester = #{semester},
color = #{color},
updated_at = NOW()
WHERE id = #{id} AND user_id = #{userId}
@ -67,12 +69,20 @@
<select id="getListByUserIdAndDayOfWeek" resultMap="courseResultMap">
SELECT id, user_id, name, teacher, location, day_of_week, start_time, end_time,
start_week, end_week, color, status, created_at, updated_at
start_week, end_week, semester, color, status, created_at, updated_at
FROM courses
WHERE user_id = #{userId} AND day_of_week = #{dayOfWeek} AND status != 0
ORDER BY start_time ASC
</select>
<select id="getListByUserIdAndSemester" resultMap="courseResultMap">
SELECT id, user_id, name, teacher, location, day_of_week, start_time, end_time,
start_week, end_week, semester, color, status, created_at, updated_at
FROM courses
WHERE user_id = #{userId} AND semester = #{semester} AND status != 0
ORDER BY day_of_week ASC, start_time ASC
</select>
<select id="checkConflict" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM courses

Loading…
Cancel
Save