This commit is contained in:
2025-09-04 18:31:00 +08:00
parent 52c321ff57
commit 1064046016
79 changed files with 12873 additions and 7 deletions
+231
View File
@@ -0,0 +1,231 @@
-- =============================================
-- 学习系统完整初始化SQL脚本
-- 包含所有必要的数据字典、菜单权限、API权限配置
-- 执行顺序:先执行此文件,再根据需要执行角色权限配置
-- =============================================
-- 1. 插入学习系统数据字典
INSERT INTO `sys_dictionaries` (`name`, `type`, `status`, `desc`) VALUES
('课程难度', 'course_difficulty', 1, '课程难度等级字典'),
('课程状态', 'course_status', 1, '课程状态字典'),
('章节状态', 'chapter_status', 1, '章节状态字典'),
('知识点状态', 'knowledge_status', 1, '知识点状态字典'),
('题目类型', 'question_type', 1, '题目类型字典'),
('题目难度', 'question_difficulty', 1, '题目难度等级字典'),
('学习状态', 'learning_status', 1, '用户学习状态字典'),
('考试状态', 'exam_status', 1, '考试状态字典');
-- 2. 获取字典ID并插入字典详情
SET @course_difficulty_id = (SELECT id FROM sys_dictionaries WHERE type = 'course_difficulty');
SET @course_status_id = (SELECT id FROM sys_dictionaries WHERE type = 'course_status');
SET @chapter_status_id = (SELECT id FROM sys_dictionaries WHERE type = 'chapter_status');
SET @knowledge_status_id = (SELECT id FROM sys_dictionaries WHERE type = 'knowledge_status');
SET @question_type_id = (SELECT id FROM sys_dictionaries WHERE type = 'question_type');
SET @question_difficulty_id = (SELECT id FROM sys_dictionaries WHERE type = 'question_difficulty');
SET @learning_status_id = (SELECT id FROM sys_dictionaries WHERE type = 'learning_status');
SET @exam_status_id = (SELECT id FROM sys_dictionaries WHERE type = 'exam_status');
-- 3. 插入课程难度字典详情
INSERT INTO `sys_dictionary_details` (`label`, `value`, `status`, `sort`, `sys_dictionary_id`) VALUES
('初级', 'beginner', 1, 1, @course_difficulty_id),
('中级', 'intermediate', 1, 2, @course_difficulty_id),
('高级', 'advanced', 1, 3, @course_difficulty_id);
-- 4. 插入课程状态字典详情
INSERT INTO `sys_dictionary_details` (`label`, `value`, `status`, `sort`, `sys_dictionary_id`) VALUES
('草稿', 'draft', 1, 1, @course_status_id),
('已发布', 'published', 1, 2, @course_status_id),
('已下架', 'archived', 1, 3, @course_status_id);
-- 5. 插入章节状态字典详情
INSERT INTO `sys_dictionary_details` (`label`, `value`, `status`, `sort`, `sys_dictionary_id`) VALUES
('草稿', 'draft', 1, 1, @chapter_status_id),
('已发布', 'published', 1, 2, @chapter_status_id),
('隐藏', 'hidden', 1, 3, @chapter_status_id);
-- 6. 插入知识点状态字典详情
INSERT INTO `sys_dictionary_details` (`label`, `value`, `status`, `sort`, `sys_dictionary_id`) VALUES
('草稿', 'draft', 1, 1, @knowledge_status_id),
('已发布', 'published', 1, 2, @knowledge_status_id),
('隐藏', 'hidden', 1, 3, @knowledge_status_id);
-- 7. 插入题目类型字典详情
INSERT INTO `sys_dictionary_details` (`label`, `value`, `status`, `sort`, `sys_dictionary_id`) VALUES
('单选题', 'single_choice', 1, 1, @question_type_id),
('多选题', 'multiple_choice', 1, 2, @question_type_id),
('判断题', 'true_false', 1, 3, @question_type_id),
('填空题', 'fill_blank', 1, 4, @question_type_id);
-- 8. 插入题目难度字典详情
INSERT INTO `sys_dictionary_details` (`label`, `value`, `status`, `sort`, `sys_dictionary_id`) VALUES
('简单', 'easy', 1, 1, @question_difficulty_id),
('中等', 'medium', 1, 2, @question_difficulty_id),
('困难', 'hard', 1, 3, @question_difficulty_id);
-- 9. 插入学习状态字典详情
INSERT INTO `sys_dictionary_details` (`label`, `value`, `status`, `sort`, `sys_dictionary_id`) VALUES
('未开始', 'not_started', 1, 1, @learning_status_id),
('学习中', 'learning', 1, 2, @learning_status_id),
('已完成', 'completed', 1, 3, @learning_status_id),
('已暂停', 'paused', 1, 4, @learning_status_id);
-- 10. 插入考试状态字典详情
INSERT INTO `sys_dictionary_details` (`label`, `value`, `status`, `sort`, `sys_dictionary_id`) VALUES
('草稿', 'draft', 1, 1, @exam_status_id),
('已发布', 'published', 1, 2, @exam_status_id),
('已结束', 'ended', 1, 3, @exam_status_id),
('已取消', 'cancelled', 1, 4, @exam_status_id);
-- =============================================
-- 菜单权限配置
-- =============================================
-- 11. 插入主菜单
INSERT INTO `sys_base_menus` (`menu_level`, `parent_id`, `path`, `name`, `hidden`, `component`, `sort`, `title`, `icon`, `keep_alive`) VALUES
(0, 0, 'learning', 'learning', 0, 'view/routerHolder.vue', 3, '教学管理', 'management', 0),
(0, 0, 'student', 'student', 0, 'view/routerHolder.vue', 2, '在线学习', 'reading', 0);
-- 12. 获取主菜单ID
SET @learning_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'learning' AND menu_level = 0);
SET @student_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'student' AND menu_level = 0);
-- 13. 插入教学管理子菜单
INSERT INTO `sys_base_menus` (`menu_level`, `parent_id`, `path`, `name`, `hidden`, `component`, `sort`, `title`, `icon`, `keep_alive`) VALUES
(1, @learning_menu_id, 'course', 'course', 0, 'view/learning/admin/course/course.vue', 1, '课程管理', 'notebook', 1),
(1, @learning_menu_id, 'chapter', 'chapter', 0, 'view/learning/admin/chapter/chapter.vue', 2, '章节管理', 'collection', 1),
(1, @learning_menu_id, 'knowledgePoint', 'knowledgePoint', 0, 'view/learning/admin/knowledgePoint/knowledgePoint.vue', 3, '知识点管理', 'document', 1),
(1, @learning_menu_id, 'question', 'question', 0, 'view/learning/admin/question/question.vue', 4, '题目管理', 'edit', 1),
(1, @learning_menu_id, 'exam', 'exam', 0, 'view/learning/admin/exam/exam.vue', 5, '考试管理', 'medal', 1),
(1, @learning_menu_id, 'learningRecords', 'learningRecords', 0, 'view/learning/admin/records/learningRecords.vue', 6, '学习记录', 'histogram', 1);
-- 14. 插入在线学习子菜单
INSERT INTO `sys_base_menus` (`menu_level`, `parent_id`, `path`, `name`, `hidden`, `component`, `sort`, `title`, `icon`, `keep_alive`) VALUES
(1, @student_menu_id, 'dashboard', 'dashboard', 0, 'view/learning/student/dashboard/dashboard.vue', 1, '学习首页', 'house', 1),
(1, @student_menu_id, 'myCourses', 'myCourses', 0, 'view/learning/student/courses/myCourses.vue', 2, '我的课程', 'notebook', 1),
(1, @student_menu_id, 'onlineExam', 'onlineExam', 0, 'view/learning/student/exam/onlineExam.vue', 3, '在线考试', 'medal', 1),
(1, @student_menu_id, 'wrongQuestions', 'wrongQuestions', 0, 'view/learning/student/wrongQuestion/wrongQuestions.vue', 4, '我的错题', 'warning', 1);
-- =============================================
-- API权限配置
-- =============================================
-- 15. 插入学习系统API权限
INSERT INTO `sys_apis` (`path`, `description`, `api_group`, `method`) VALUES
-- 课程管理API
('/course/createCourse', '创建课程', '课程管理', 'POST'),
('/course/deleteCourse', '删除课程', '课程管理', 'DELETE'),
('/course/deleteCourseByIds', '批量删除课程', '课程管理', 'DELETE'),
('/course/updateCourse', '更新课程', '课程管理', 'PUT'),
('/course/findCourse', '根据ID获取课程', '课程管理', 'GET'),
('/course/getCourseList', '获取课程列表', '课程管理', 'GET'),
('/course/getPublishedCourses', '获取已发布课程列表', '课程管理', 'GET'),
-- 章节管理API
('/chapter/createChapter', '创建章节', '章节管理', 'POST'),
('/chapter/deleteChapter', '删除章节', '章节管理', 'DELETE'),
('/chapter/deleteChapterByIds', '批量删除章节', '章节管理', 'DELETE'),
('/chapter/updateChapter', '更新章节', '章节管理', 'PUT'),
('/chapter/findChapter', '根据ID获取章节', '章节管理', 'GET'),
('/chapter/getChapterList', '获取章节列表', '章节管理', 'GET'),
('/chapter/getChaptersByCourse', '根据课程获取章节列表', '章节管理', 'GET'),
-- 知识点管理API
('/knowledgePoint/createKnowledgePoint', '创建知识点', '知识点管理', 'POST'),
('/knowledgePoint/deleteKnowledgePoint', '删除知识点', '知识点管理', 'DELETE'),
('/knowledgePoint/deleteKnowledgePointByIds', '批量删除知识点', '知识点管理', 'DELETE'),
('/knowledgePoint/updateKnowledgePoint', '更新知识点', '知识点管理', 'PUT'),
('/knowledgePoint/findKnowledgePoint', '根据ID获取知识点', '知识点管理', 'GET'),
('/knowledgePoint/getKnowledgePointList', '获取知识点列表', '知识点管理', 'GET'),
('/knowledgePoint/getKnowledgePointsByChapter', '根据章节获取知识点列表', '知识点管理', 'GET'),
-- 题目管理API
('/question/createQuestion', '创建题目', '题目管理', 'POST'),
('/question/deleteQuestion', '删除题目', '题目管理', 'DELETE'),
('/question/deleteQuestionByIds', '批量删除题目', '题目管理', 'DELETE'),
('/question/updateQuestion', '更新题目', '题目管理', 'PUT'),
('/question/findQuestion', '根据ID获取题目', '题目管理', 'GET'),
('/question/getQuestionList', '获取题目列表', '题目管理', 'GET'),
('/question/getQuestionsByKnowledgePoint', '根据知识点获取题目列表', '题目管理', 'GET'),
-- 考试管理API
('/exam/createExam', '创建考试', '考试管理', 'POST'),
('/exam/deleteExam', '删除考试', '考试管理', 'DELETE'),
('/exam/deleteExamByIds', '批量删除考试', '考试管理', 'DELETE'),
('/exam/updateExam', '更新考试', '考试管理', 'PUT'),
('/exam/publishExam', '发布考试', '考试管理', 'PUT'),
('/exam/findExam', '根据ID获取考试', '考试管理', 'GET'),
('/exam/getExamList', '获取考试列表', '考试管理', 'GET'),
('/exam/getActiveExams', '获取进行中的考试列表', '考试管理', 'GET'),
('/exam/getExamsByCourse', '根据课程获取考试列表', '考试管理', 'GET'),
('/exam/getExamStatistics', '获取考试统计', '考试管理', 'GET'),
-- 学习记录管理API
('/userLearning/createUserLearning', '创建学习记录', '学习记录管理', 'POST'),
('/userLearning/deleteUserLearning', '删除学习记录', '学习记录管理', 'DELETE'),
('/userLearning/deleteUserLearningByIds', '批量删除学习记录', '学习记录管理', 'DELETE'),
('/userLearning/updateUserLearning', '更新学习记录', '学习记录管理', 'PUT'),
('/userLearning/findUserLearning', '根据ID获取学习记录', '学习记录管理', 'GET'),
('/userLearning/getUserLearningList', '获取学习记录列表', '学习记录管理', 'GET'),
('/userLearning/getUserProgress', '获取用户学习进度', '学习记录管理', 'GET'),
('/userLearning/getLearningStatistics', '获取用户学习统计', '学习记录管理', 'GET'),
-- 错题本管理API
('/wrongQuestion/createWrongQuestion', '创建错题记录', '错题本管理', 'POST'),
('/wrongQuestion/deleteWrongQuestion', '删除错题记录', '错题本管理', 'DELETE'),
('/wrongQuestion/deleteWrongQuestionByIds', '批量删除错题记录', '错题本管理', 'DELETE'),
('/wrongQuestion/updateWrongQuestion', '更新错题记录', '错题本管理', 'PUT'),
('/wrongQuestion/markAsMastered', '标记题目为已掌握', '错题本管理', 'PUT'),
('/wrongQuestion/findWrongQuestion', '根据ID获取错题记录', '错题本管理', 'GET'),
('/wrongQuestion/getWrongQuestionList', '获取错题记录列表', '错题本管理', 'GET'),
('/wrongQuestion/getUserWrongQuestions', '获取用户错题列表', '错题本管理', 'GET'),
('/wrongQuestion/getWrongQuestionStatistics', '获取错题统计', '错题本管理', 'GET'),
-- 用户考试记录管理API
('/userExam/createUserExam', '创建用户考试记录', '用户考试记录管理', 'POST'),
('/userExam/deleteUserExam', '删除用户考试记录', '用户考试记录管理', 'DELETE'),
('/userExam/deleteUserExamByIds', '批量删除用户考试记录', '用户考试记录管理', 'DELETE'),
('/userExam/updateUserExam', '更新用户考试记录', '用户考试记录管理', 'PUT'),
('/userExam/startExam', '开始考试', '用户考试记录管理', 'POST'),
('/userExam/submitExam', '提交考试', '用户考试记录管理', 'PUT'),
('/userExam/findUserExam', '根据ID获取用户考试记录', '用户考试记录管理', 'GET'),
('/userExam/getUserExamList', '获取用户考试记录列表', '用户考试记录管理', 'GET'),
('/userExam/getUserExamHistory', '获取用户考试历史', '用户考试记录管理', 'GET'),
('/userExam/getUserExamStatistics', '获取用户考试统计', '用户考试记录管理', 'GET'),
('/userExam/getExamRanking', '获取考试排行榜', '用户考试记录管理', 'GET');
-- =============================================
-- 验证查询
-- =============================================
-- 验证字典是否创建成功
-- SELECT d.name, d.type, COUNT(dd.id) as detail_count
-- FROM sys_dictionaries d
-- LEFT JOIN sys_dictionary_details dd ON d.id = dd.sys_dictionary_id
-- WHERE d.type LIKE '%course%' OR d.type LIKE '%chapter%' OR d.type LIKE '%knowledge%'
-- OR d.type LIKE '%question%' OR d.type LIKE '%learning%' OR d.type LIKE '%exam%'
-- GROUP BY d.id, d.name, d.type
-- ORDER BY d.id;
-- 验证菜单是否创建成功
-- SELECT id, menu_level, parent_id, path, name, title, icon
-- FROM sys_base_menus
-- WHERE name IN ('learning', 'student') OR parent_id IN (
-- SELECT id FROM sys_base_menus WHERE name IN ('learning', 'student')
-- )
-- ORDER BY menu_level, parent_id, sort;
-- 验证API是否创建成功
-- SELECT api_group, COUNT(*) as api_count
-- FROM sys_apis
-- WHERE api_group IN ('课程管理', '章节管理', '知识点管理', '题目管理', '考试管理', '学习记录管理', '错题本管理')
-- GROUP BY api_group
-- ORDER BY api_group;
-- =============================================
-- 执行说明
-- =============================================
-- 1. 此脚本包含学习系统的完整初始化配置
-- 2. 包含8个数据字典和对应的字典详情
-- 3. 包含教学管理和在线学习两个主菜单及其子菜单
-- 4. 包含所有学习系统模块的API权限配置
-- 5. 执行后可在系统管理中查看和管理这些配置
-- 6. 如需配置用户角色权限,请执行 learning_system_roles.sql
+225
View File
@@ -0,0 +1,225 @@
-- =============================================
-- 学习系统角色权限配置SQL脚本
-- 创建教师角色和学生角色,并分配相应的菜单和API权限
-- 注意:请先执行 learning_system_init.sql 再执行此文件
-- =============================================
-- 1. 创建角色
INSERT INTO `sys_authorities` (`authority_id`, `authority_name`, `parent_id`, `default_router`) VALUES
(1001, '教师', 0, 'learning'),
(1002, '学生', 0, 'student');
-- 2. 获取菜单ID
SET @learning_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'learning' AND menu_level = 0);
SET @student_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'student' AND menu_level = 0);
-- 获取教学管理子菜单ID
SET @course_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'course' AND parent_id = @learning_menu_id);
SET @chapter_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'chapter' AND parent_id = @learning_menu_id);
SET @knowledge_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'knowledgePoint' AND parent_id = @learning_menu_id);
SET @question_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'question' AND parent_id = @learning_menu_id);
SET @exam_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'exam' AND parent_id = @learning_menu_id);
SET @records_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'learningRecords' AND parent_id = @learning_menu_id);
-- 获取在线学习子菜单ID
SET @dashboard_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'dashboard' AND parent_id = @student_menu_id);
SET @my_courses_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'myCourses' AND parent_id = @student_menu_id);
SET @online_exam_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'onlineExam' AND parent_id = @student_menu_id);
SET @wrong_questions_menu_id = (SELECT id FROM sys_base_menus WHERE name = 'wrongQuestions' AND parent_id = @student_menu_id);
-- 3. 为教师角色分配菜单权限
INSERT INTO `sys_authority_menus` (`sys_base_menu_id`, `sys_authority_authority_id`) VALUES
-- 教学管理主菜单
(@learning_menu_id, 1001),
-- 教学管理子菜单
(@course_menu_id, 1001),
(@chapter_menu_id, 1001),
(@knowledge_menu_id, 1001),
(@question_menu_id, 1001),
(@exam_menu_id, 1001),
(@records_menu_id, 1001);
-- 4. 为学生角色分配菜单权限
INSERT INTO `sys_authority_menus` (`sys_base_menu_id`, `sys_authority_authority_id`) VALUES
-- 在线学习主菜单
(@student_menu_id, 1002),
-- 在线学习子菜单
(@dashboard_menu_id, 1002),
(@my_courses_menu_id, 1002),
(@online_exam_menu_id, 1002),
(@wrong_questions_menu_id, 1002);
-- 5. 为教师角色分配API权限
INSERT INTO `casbin_rule` (`ptype`, `v0`, `v1`, `v2`) VALUES
-- 课程管理API权限
('p', '1001', '/course/createCourse', 'POST'),
('p', '1001', '/course/deleteCourse', 'DELETE'),
('p', '1001', '/course/deleteCourseByIds', 'DELETE'),
('p', '1001', '/course/updateCourse', 'PUT'),
('p', '1001', '/course/findCourse', 'GET'),
('p', '1001', '/course/getCourseList', 'GET'),
('p', '1001', '/course/getPublishedCourses', 'GET'),
-- 章节管理API权限
('p', '1001', '/chapter/createChapter', 'POST'),
('p', '1001', '/chapter/deleteChapter', 'DELETE'),
('p', '1001', '/chapter/deleteChapterByIds', 'DELETE'),
('p', '1001', '/chapter/updateChapter', 'PUT'),
('p', '1001', '/chapter/findChapter', 'GET'),
('p', '1001', '/chapter/getChapterList', 'GET'),
('p', '1001', '/chapter/getChaptersByCourse', 'GET'),
-- 知识点管理API权限
('p', '1001', '/knowledgePoint/createKnowledgePoint', 'POST'),
('p', '1001', '/knowledgePoint/deleteKnowledgePoint', 'DELETE'),
('p', '1001', '/knowledgePoint/deleteKnowledgePointByIds', 'DELETE'),
('p', '1001', '/knowledgePoint/updateKnowledgePoint', 'PUT'),
('p', '1001', '/knowledgePoint/findKnowledgePoint', 'GET'),
('p', '1001', '/knowledgePoint/getKnowledgePointList', 'GET'),
('p', '1001', '/knowledgePoint/getKnowledgePointsByChapter', 'GET'),
-- 题目管理API权限
('p', '1001', '/question/createQuestion', 'POST'),
('p', '1001', '/question/deleteQuestion', 'DELETE'),
('p', '1001', '/question/deleteQuestionByIds', 'DELETE'),
('p', '1001', '/question/updateQuestion', 'PUT'),
('p', '1001', '/question/findQuestion', 'GET'),
('p', '1001', '/question/getQuestionList', 'GET'),
('p', '1001', '/question/getQuestionsByKnowledgePoint', 'GET'),
-- 考试管理API权限
('p', '1001', '/exam/createExam', 'POST'),
('p', '1001', '/exam/deleteExam', 'DELETE'),
('p', '1001', '/exam/deleteExamByIds', 'DELETE'),
('p', '1001', '/exam/updateExam', 'PUT'),
('p', '1001', '/exam/publishExam', 'PUT'),
('p', '1001', '/exam/findExam', 'GET'),
('p', '1001', '/exam/getExamList', 'GET'),
('p', '1001', '/exam/getActiveExams', 'GET'),
('p', '1001', '/exam/getExamsByCourse', 'GET'),
('p', '1001', '/exam/getExamStatistics', 'GET'),
-- 学习记录管理API权限
('p', '1001', '/userLearning/createUserLearning', 'POST'),
('p', '1001', '/userLearning/deleteUserLearning', 'DELETE'),
('p', '1001', '/userLearning/deleteUserLearningByIds', 'DELETE'),
('p', '1001', '/userLearning/updateUserLearning', 'PUT'),
('p', '1001', '/userLearning/findUserLearning', 'GET'),
('p', '1001', '/userLearning/getUserLearningList', 'GET'),
('p', '1001', '/userLearning/getUserProgress', 'GET'),
('p', '1001', '/userLearning/getLearningStatistics', 'GET'),
-- 错题本管理API权限
('p', '1001', '/wrongQuestion/createWrongQuestion', 'POST'),
('p', '1001', '/wrongQuestion/deleteWrongQuestion', 'DELETE'),
('p', '1001', '/wrongQuestion/deleteWrongQuestionByIds', 'DELETE'),
('p', '1001', '/wrongQuestion/updateWrongQuestion', 'PUT'),
('p', '1001', '/wrongQuestion/markAsMastered', 'PUT'),
('p', '1001', '/wrongQuestion/findWrongQuestion', 'GET'),
('p', '1001', '/wrongQuestion/getWrongQuestionList', 'GET'),
('p', '1001', '/wrongQuestion/getUserWrongQuestions', 'GET'),
('p', '1001', '/wrongQuestion/getWrongQuestionStatistics', 'GET'),
-- 用户考试记录管理API权限
('p', '1001', '/userExam/createUserExam', 'POST'),
('p', '1001', '/userExam/deleteUserExam', 'DELETE'),
('p', '1001', '/userExam/deleteUserExamByIds', 'DELETE'),
('p', '1001', '/userExam/updateUserExam', 'PUT'),
('p', '1001', '/userExam/startExam', 'POST'),
('p', '1001', '/userExam/submitExam', 'PUT'),
('p', '1001', '/userExam/findUserExam', 'GET'),
('p', '1001', '/userExam/getUserExamList', 'GET'),
('p', '1001', '/userExam/getUserExamHistory', 'GET'),
('p', '1001', '/userExam/getUserExamStatistics', 'GET'),
('p', '1001', '/userExam/getExamRanking', 'GET');
-- 6. 为学生角色分配API权限(只读权限和学生相关功能)
INSERT INTO `casbin_rule` (`ptype`, `v0`, `v1`, `v2`) VALUES
-- 课程查看权限
('p', '1002', '/course/findCourse', 'GET'),
('p', '1002', '/course/getPublishedCourses', 'GET'),
-- 章节查看权限
('p', '1002', '/chapter/findChapter', 'GET'),
('p', '1002', '/chapter/getChaptersByCourse', 'GET'),
-- 知识点查看权限
('p', '1002', '/knowledgePoint/findKnowledgePoint', 'GET'),
('p', '1002', '/knowledgePoint/getKnowledgePointsByChapter', 'GET'),
-- 题目查看权限
('p', '1002', '/question/findQuestion', 'GET'),
('p', '1002', '/question/getQuestionsByKnowledgePoint', 'GET'),
-- 考试相关权限
('p', '1002', '/exam/findExam', 'GET'),
('p', '1002', '/exam/getActiveExams', 'GET'),
('p', '1002', '/exam/getExamsByCourse', 'GET'),
-- 学习记录权限(学生可以创建和查看自己的学习记录)
('p', '1002', '/userLearning/createUserLearning', 'POST'),
('p', '1002', '/userLearning/updateUserLearning', 'PUT'),
('p', '1002', '/userLearning/findUserLearning', 'GET'),
('p', '1002', '/userLearning/getUserProgress', 'GET'),
('p', '1002', '/userLearning/getLearningStatistics', 'GET'),
-- 错题本权限(学生可以管理自己的错题)
('p', '1002', '/wrongQuestion/createWrongQuestion', 'POST'),
('p', '1002', '/wrongQuestion/updateWrongQuestion', 'PUT'),
('p', '1002', '/wrongQuestion/markAsMastered', 'PUT'),
('p', '1002', '/wrongQuestion/findWrongQuestion', 'GET'),
('p', '1002', '/wrongQuestion/getUserWrongQuestions', 'GET'),
('p', '1002', '/wrongQuestion/getWrongQuestionStatistics', 'GET'),
-- 用户考试记录权限(学生可以参加考试和查看自己的考试记录)
('p', '1002', '/userExam/startExam', 'POST'),
('p', '1002', '/userExam/submitExam', 'PUT'),
('p', '1002', '/userExam/findUserExam', 'GET'),
('p', '1002', '/userExam/getUserExamHistory', 'GET'),
('p', '1002', '/userExam/getUserExamStatistics', 'GET'),
('p', '1002', '/userExam/getExamRanking', 'GET');
-- =============================================
-- 创建测试用户(可选)
-- =============================================
-- 创建教师测试用户
-- INSERT INTO `sys_users` (`uuid`, `username`, `password`, `nick_name`, `side_mode`, `header_img`, `base_color`, `authority_id`, `phone`, `email`) VALUES
-- ('teacher-uuid-001', 'teacher', '$2a$10$we19gyu.geUOEhrMkrVzz.VT64GdGC6IThOvAbf8hlkOOZRxdCdli', '张老师', 'dark', 'https://qmplusimg.henrongyi.top/gva_header.jpg', '#fff', 1001, '13800000001', 'teacher@example.com');
-- 创建学生测试用户
-- INSERT INTO `sys_users` (`uuid`, `username`, `password`, `nick_name`, `side_mode`, `header_img`, `base_color`, `authority_id`, `phone`, `email`) VALUES
-- ('student-uuid-001', 'student', '$2a$10$we19gyu.geUOEhrMkrVzz.VT64GdGC6IThOvAbf8hlkOOZRxdCdli', '李同学', 'dark', 'https://qmplusimg.henrongyi.top/gva_header.jpg', '#fff', 1002, '13800000002', 'student@example.com');
-- =============================================
-- 验证查询
-- =============================================
-- 验证角色是否创建成功
-- SELECT authority_id, authority_name, parent_id, default_router FROM sys_authorities WHERE authority_id IN (1001, 1002);
-- 验证菜单权限是否分配成功
-- SELECT sa.authority_name, sbm.title, sbm.path
-- FROM sys_authority_menus sam
-- JOIN sys_authorities sa ON sam.sys_authority_authority_id = sa.authority_id
-- JOIN sys_base_menus sbm ON sam.sys_base_menu_id = sbm.id
-- WHERE sa.authority_id IN (1001, 1002)
-- ORDER BY sa.authority_id, sbm.sort;
-- 验证API权限是否分配成功
-- SELECT v0 as role, COUNT(*) as api_count
-- FROM casbin_rule
-- WHERE v0 IN ('1001', '1002') AND ptype = 'p'
-- GROUP BY v0;
-- =============================================
-- 使用说明
-- =============================================
-- 1. 执行此脚本前请确保已执行 learning_system_init.sql
-- 2. 此脚本创建了两个角色:1001(教师)和 1002(学生)
-- 3. 教师角色拥有教学管理的完整权限
-- 4. 学生角色拥有在线学习的相关权限
-- 5. 可以取消注释测试用户部分来创建测试账号
-- 6. 默认密码为:123456
-- 7. 教师登录后会看到"教学管理"菜单
-- 8. 学生登录后会看到"在线学习"菜单并跳转到学习首页
+142
View File
@@ -0,0 +1,142 @@
# 学习系统SQL执行指南
## 📋 执行顺序
请按照以下顺序执行SQL文件:
### 1. 基础初始化(必须执行)
```sql
-- 执行学习系统基础配置
source server/sql/01_learning_system_init.sql;
```
**包含内容:**
- ✅ 8个数据字典(课程难度、课程状态、章节状态、知识点状态、题目类型、题目难度、学习状态、考试状态)
- ✅ 所有字典详情配置
- ✅ 教学管理和在线学习两个主菜单
- ✅ 10个子菜单(6个教学管理 + 4个学生学习)
- ✅ 70个API权限配置(8个模块完整覆盖)
### 2. 角色权限配置(推荐执行)
```sql
-- 执行角色权限配置
source server/sql/02_learning_system_roles.sql;
```
**包含内容:**
- ✅ 创建教师角色(teacher)和学生角色(student)
- ✅ 为教师分配教学管理菜单和完整API权限(70个API)
- ✅ 为学生分配在线学习菜单和相应API权限(30个API)
- ✅ 可选的测试用户创建
## 🎯 执行后效果
### 教师用户登录后:
- 默认跳转到 `/learning` 路径
- 看到"教学管理"菜单,包含:
- 课程管理
- 章节管理
- 知识点管理
- 题目管理
- 考试管理
- 学习记录
- 拥有所有教学相关API的完整权限
### 学生用户登录后:
- 默认跳转到 `/student` 路径
- 看到"在线学习"菜单,包含:
- 学习首页(现代化Dashboard)
- 我的课程
- 在线考试
- 我的错题
- 拥有学习相关API的查看和个人数据管理权限
## 🔧 可选配置
### 创建测试用户
如果需要测试用户,可以取消注释 `learning_system_roles.sql` 中的测试用户部分:
```sql
-- 教师测试账号
用户名: teacher
密码: 123456
-- 学生测试账号
用户名: student
密码: 123456
```
## 📊 验证执行结果
### 1. 验证字典配置
```sql
SELECT d.name, d.type, COUNT(dd.id) as detail_count
FROM sys_dictionaries d
LEFT JOIN sys_dictionary_details dd ON d.id = dd.sys_dictionary_id
WHERE d.type LIKE '%course%' OR d.type LIKE '%chapter%' OR d.type LIKE '%knowledge%'
OR d.type LIKE '%question%' OR d.type LIKE '%learning%' OR d.type LIKE '%exam%'
GROUP BY d.id, d.name, d.type
ORDER BY d.id;
```
### 2. 验证菜单配置
```sql
SELECT id, menu_level, parent_id, path, name, title, icon
FROM sys_base_menus
WHERE name IN ('learning', 'student') OR parent_id IN (
SELECT id FROM sys_base_menus WHERE name IN ('learning', 'student')
)
ORDER BY menu_level, parent_id, sort;
```
### 3. 验证API权限
```sql
SELECT api_group, COUNT(*) as api_count
FROM sys_apis
WHERE api_group IN ('课程管理', '章节管理', '知识点管理', '题目管理', '考试管理', '学习记录管理', '错题本管理', '用户考试记录管理')
GROUP BY api_group
ORDER BY api_group;
```
### 4. 验证角色权限
```sql
SELECT v0 as role, COUNT(*) as api_count
FROM casbin_rule
WHERE v0 IN ('teacher', 'student') AND ptype = 'p'
GROUP BY v0;
```
## ⚠️ 注意事项
1. **执行顺序很重要**:必须先执行 `learning_system_init.sql`,再执行 `learning_system_roles.sql`
2. **数据库备份**:执行前建议备份数据库
3. **权限检查**:确保数据库用户有足够的权限执行这些SQL语句
4. **重复执行**:如果需要重复执行,请先清理相关数据或使用 `INSERT IGNORE` 语句
## 🚀 快速开始
如果您想快速体验完整的学习系统,只需执行:
```bash
# 进入MySQL命令行
mysql -u your_username -p your_database
# 执行初始化脚本
source server/sql/01_learning_system_init.sql;
# 执行角色权限脚本
source server/sql/02_learning_system_roles.sql;
# 退出MySQL
exit;
```
执行完成后,重启您的应用程序,就可以体验完整的学习系统了!
## 📞 问题反馈
如果在执行过程中遇到问题,请检查:
1. 数据库连接是否正常
2. 用户权限是否足够
3. 表结构是否已通过应用程序自动创建
4. SQL语法是否与您的MySQL版本兼容
+60
View File
@@ -0,0 +1,60 @@
学习系统SQL执行说明
====================
📋 执行顺序(重要!)
====================
第一步:基础配置
mysql> source server/sql/01_learning_system_init.sql;
第二步:角色权限
mysql> source server/sql/02_learning_system_roles.sql;
🎯 执行后效果
====================
✅ 数据字典:8个完整字典配置
✅ 菜单权限:2个主菜单 + 10个子菜单
✅ API权限:70个接口权限配置
✅ 用户角色:教师角色(1001) + 学生角色(1002)
📊 系统模块统计
====================
后端模块:8个核心模块
- Course(课程管理)
- Chapter(章节管理)
- KnowledgePoint(知识点管理)
- Question(题目管理)
- Exam(考试管理)
- UserLearning(学习记录管理)
- WrongQuestion(错题本管理)
- UserExam(用户考试记录管理)
前端页面:完整的教师端和学生端界面
- 教师端:教学管理界面(6个管理页面)
- 学生端:在线学习界面(4个学习页面)
🔧 测试账号(可选)
====================
如需测试账号,请取消注释02文件中的测试用户部分:
教师账号:teacher / 123456
学生账号:student / 123456
⚠️ 注意事项
====================
1. 必须按顺序执行:01 → 02
2. 执行前请备份数据库
3. 确保数据库用户有足够权限
4. 执行完成后重启应用程序
🚀 完成后体验
====================
教师登录:看到"教学管理"菜单,跳转到/learning
学生登录:看到"在线学习"菜单,跳转到/student(现代化Dashboard)
详细说明请查看:README.md