From a803908789fe606fc35d36026f57559052130231 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期二, 24 三月 2026 16:03:10 +0800
Subject: [PATCH] feat:课程分类管理、养身课程
---
backend/sql/init.sql | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 117 insertions(+), 1 deletions(-)
diff --git a/backend/sql/init.sql b/backend/sql/init.sql
index f35b7a3..1062a6e 100644
--- a/backend/sql/init.sql
+++ b/backend/sql/init.sql
@@ -136,12 +136,26 @@
(3077, 3060, '推送开播提醒', 'live_session_push_notification', 'B', NULL, NULL, NULL, 17, 1, 1, 'live:session:push-notification', '直播场次推送提醒按钮', 0),
(3080, 3050, '直播预约记录', 'live_reserve_view', 'C', '/live/course/reserve-records', 'Live/ReserveRecords', NULL, 20, 1, 1, 'live:reserve:view', '直播预约记录菜单', 0),
(3081, 3050, '直播观看记录', 'live_watch_view', 'C', '/live/course/watch-records', 'Live/WatchRecords', NULL, 21, 1, 1, 'live:watch:view', '直播观看记录菜单', 0),
+(3090, 3050, '分类管理', 'live_category_manage', 'C', '/live/course/category', 'Live/CategoryList', NULL, 22, 1, 1, 'live:category:view', '分类管理菜单', 0),
+(3091, 3090, '新增分类', 'live_category_add', 'B', NULL, NULL, NULL, 1, 1, 1, 'live:category:add', '分类新增按钮', 0),
+(3092, 3090, '编辑分类', 'live_category_edit', 'B', NULL, NULL, NULL, 2, 1, 1, 'live:category:edit', '分类编辑按钮', 0),
+(3093, 3090, '删除分类', 'live_category_delete', 'B', NULL, NULL, NULL, 3, 1, 1, 'live:category:delete', '分类删除按钮', 0),
(3082, 3060, '答题记录', 'live_quiz_view', 'B', NULL, NULL, NULL, 22, 1, 1, 'live:quiz:view', '直播答题记录查看权限', 0),
(3100, 3050, '授课专家管理', 'live_expert_manage', 'C', '/live/course/expert', 'Live/ExpertList', NULL, 30, 1, 1, 'live:expert:view', '授课专家管理菜单', 0),
(3101, 3100, '新增授课专家', 'live_expert_add', 'B', NULL, NULL, NULL, 1, 1, 1, 'live:expert:add', '授课专家新增按钮', 0),
(3102, 3100, '编辑授课专家', 'live_expert_edit', 'B', NULL, NULL, NULL, 2, 1, 1, 'live:expert:edit', '授课专家编辑按钮', 0),
(3103, 3100, '启用禁用授课专家', 'live_expert_status', 'B', NULL, NULL, NULL, 3, 1, 1, 'live:expert:status', '授课专家状态按钮', 0),
(3104, 3100, '删除授课专家', 'live_expert_delete', 'B', NULL, NULL, NULL, 4, 1, 1, 'live:expert:delete', '授课专家删除按钮', 0),
+(3110, 3050, '养身课程', 'live_health_course_manage', 'C', '/live/course/health', 'Live/HealthCourseList', NULL, 40, 1, 1, 'live:health-course:view', '养身课程菜单', 0),
+(3111, 3110, '养身课程详情', 'live_health_course_detail', 'B', NULL, NULL, NULL, 1, 1, 1, 'live:health-course:detail', '养身课程详情按钮', 0),
+(3112, 3110, '新增养身课程', 'live_health_course_add', 'B', NULL, NULL, NULL, 2, 1, 1, 'live:health-course:add', '养身课程新增按钮', 0),
+(3113, 3110, '编辑养身课程', 'live_health_course_edit', 'B', NULL, NULL, NULL, 3, 1, 1, 'live:health-course:edit', '养身课程编辑按钮', 0),
+(3114, 3110, '删除养身课程', 'live_health_course_delete', 'B', NULL, NULL, NULL, 4, 1, 1, 'live:health-course:delete', '养身课程删除按钮', 0),
+(3115, 3110, '启用禁用养身课程', 'live_health_course_status', 'B', NULL, NULL, NULL, 5, 1, 1, 'live:health-course:status', '养身课程状态按钮', 0),
+(3116, 3110, '导出养身课程', 'live_health_course_export', 'B', NULL, NULL, NULL, 6, 1, 1, 'live:health-course:export', '养身课程导出按钮', 0),
+(3117, 3110, '新增视频课程', 'live_health_course_video_add', 'B', NULL, NULL, NULL, 7, 1, 1, 'live:health-course:video:add', '养身课程视频新增按钮', 0),
+(3118, 3110, '编辑视频课程', 'live_health_course_video_edit', 'B', NULL, NULL, NULL, 8, 1, 1, 'live:health-course:video:edit', '养身课程视频编辑按钮', 0),
+(3119, 3110, '删除视频课程', 'live_health_course_video_delete', 'B', NULL, NULL, NULL, 9, 1, 1, 'live:health-course:video:delete', '养身课程视频删除按钮', 0),
(4000, 0, '交易与财务', 'trade_root', 'M', '/trade', NULL, 'moneyCollect', 400, 1, 1, NULL, '交易与财务模块', 0),
(4100, 4000, '订单', 'trade_order_group', 'M', '/trade/order', NULL, NULL, 10, 1, 1, NULL, '订单目录', 0),
(4110, 4100, '积分兑换', 'trade_points_exchange', 'C', '/trade/order/points-exchange', 'Trade/PointsExchange', NULL, 10, 1, 1, 'points:exchange:view', '积分兑换菜单', 0),
@@ -161,8 +175,9 @@
(1, 2200), (1, 2210), (1, 2211), (1, 2220), (1, 2221),
(1, 3000), (1, 3050), (1, 3060), (1, 3061), (1, 3062), (1, 3063),
(1, 3070), (1, 3071), (1, 3072), (1, 3073), (1, 3074), (1, 3075), (1, 3076), (1, 3077),
-(1, 3080), (1, 3081), (1, 3082),
+(1, 3080), (1, 3081), (1, 3082), (1, 3090), (1, 3091), (1, 3092), (1, 3093),
(1, 3100), (1, 3101), (1, 3102), (1, 3103), (1, 3104),
+(1, 3110), (1, 3111), (1, 3112), (1, 3113), (1, 3114), (1, 3115), (1, 3116), (1, 3117), (1, 3118), (1, 3119),
(1, 4000), (1, 4100), (1, 4110), (1, 4111), (1, 4112), (1, 4113), (1, 4114),
(1, 4200), (1, 4210), (1, 4211);
@@ -319,6 +334,107 @@
-- ----------------------------
-- 养生直播:课程
-- ----------------------------
+CREATE TABLE IF NOT EXISTS `tcm_live_course_category` (
+ `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '分类ID',
+ `type` VARCHAR(32) NOT NULL COMMENT '分类类型:LEVEL/DIFFICULTY',
+ `name` VARCHAR(32) NOT NULL COMMENT '分类名称',
+ `sort` INT NOT NULL DEFAULT 0 COMMENT '排序值',
+ `deleted` TINYINT(1) NOT NULL DEFAULT 0,
+ `created_by` VARCHAR(64) NOT NULL DEFAULT '系统初始化' COMMENT '创建人',
+ `updated_by` VARCHAR(64) NOT NULL DEFAULT '系统初始化' COMMENT '更新人',
+ `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ PRIMARY KEY (`id`),
+ KEY `idx_type_sort` (`type`, `sort`),
+ KEY `idx_type_name` (`type`, `name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='直播课程分类表';
+
+INSERT IGNORE INTO `tcm_live_course_category` (`id`, `type`, `name`, `sort`, `deleted`)
+VALUES
+(1, 'LEVEL', '初级', 10, 0),
+(2, 'LEVEL', '中级', 20, 0),
+(3, 'LEVEL', '高级', 30, 0),
+(4, 'DIFFICULTY', '简单', 10, 0),
+(5, 'DIFFICULTY', '普通', 20, 0),
+(6, 'DIFFICULTY', '困难', 30, 0);
+
+-- ----------------------------
+-- 养身课程
+-- ----------------------------
+CREATE TABLE IF NOT EXISTS `tcm_health_course` (
+ `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '养身课程ID',
+ `title` VARCHAR(128) NOT NULL COMMENT '课程名称',
+ `level_category_id` BIGINT UNSIGNED NOT NULL COMMENT '养身等级分类ID',
+ `difficulty_category_id` BIGINT UNSIGNED NOT NULL COMMENT '难度分类ID',
+ `expert_id` BIGINT UNSIGNED NOT NULL COMMENT '授课专家ID',
+ `sale_price` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '课程售价',
+ `summary` VARCHAR(500) DEFAULT NULL COMMENT '课程简介',
+ `target_users` VARCHAR(255) DEFAULT NULL COMMENT '适用人群',
+ `cover_img` VARCHAR(255) DEFAULT NULL COMMENT '课程封面图URL',
+ `banner_imgs` JSON DEFAULT NULL COMMENT '课程宣传图URL列表(多图)',
+ `content` LONGTEXT DEFAULT NULL COMMENT '课程介绍(富文本)',
+ `base_sales_count` INT NOT NULL DEFAULT 0 COMMENT '基础销量',
+ `real_sales_count` INT NOT NULL DEFAULT 0 COMMENT '真实销量',
+ `learn_user_count` INT NOT NULL DEFAULT 0 COMMENT '累计学习人数',
+ `favorite_count` INT NOT NULL DEFAULT 0 COMMENT '收藏量',
+ `total_duration_seconds` INT NOT NULL DEFAULT 0 COMMENT '课程总时长(秒)',
+ `video_count` INT NOT NULL DEFAULT 0 COMMENT '视频小节数',
+ `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态:1启用 0禁用',
+ `is_home_recommend` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '首页推荐:1是 0否',
+ `sort` INT NOT NULL DEFAULT 0 COMMENT '排序值',
+ `deleted` TINYINT(1) NOT NULL DEFAULT 0,
+ `created_by` VARCHAR(64) NOT NULL DEFAULT '系统初始化' COMMENT '创建人',
+ `updated_by` VARCHAR(64) NOT NULL DEFAULT '系统初始化' COMMENT '更新人',
+ `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ PRIMARY KEY (`id`),
+ KEY `idx_health_course_level` (`level_category_id`),
+ KEY `idx_health_course_difficulty` (`difficulty_category_id`),
+ KEY `idx_health_course_expert` (`expert_id`),
+ KEY `idx_health_course_status` (`status`),
+ KEY `idx_health_course_home_recommend` (`is_home_recommend`),
+ KEY `idx_health_course_created_at` (`created_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养身课程表';
+
+INSERT IGNORE INTO `tcm_health_course`
+(`id`, `title`, `level_category_id`, `difficulty_category_id`, `expert_id`, `sale_price`, `summary`, `target_users`, `cover_img`, `banner_imgs`, `content`, `base_sales_count`, `real_sales_count`, `learn_user_count`, `favorite_count`, `total_duration_seconds`, `video_count`, `status`, `is_home_recommend`, `sort`, `deleted`)
+VALUES
+(1, '中医针灸资格证', 1, 4, 10, 599.80, '面向针灸入门与基础提升的系统课程。', '针灸初学者、养身爱好者',
+ 'https://example.com/health/course-1-cover.png',
+ JSON_ARRAY('https://example.com/health/course-1-banner-1.png', 'https://example.com/health/course-1-banner-2.png', 'https://example.com/health/course-1-banner-3.png'),
+ '<p>课程介绍:覆盖针灸基础理论、常见穴位与实操思路。</p>',
+ 120, 33, 358, 35, 1118, 5, 1, 1, 10, 0);
+
+CREATE TABLE IF NOT EXISTS `tcm_health_course_video` (
+ `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '视频小节ID',
+ `course_id` BIGINT UNSIGNED NOT NULL COMMENT '所属养身课程ID',
+ `chapter_name` VARCHAR(128) NOT NULL COMMENT '小节名称',
+ `chapter_remark` VARCHAR(500) DEFAULT NULL COMMENT '小节备注',
+ `video_url` VARCHAR(512) DEFAULT NULL COMMENT '视频地址',
+ `duration_seconds` INT NOT NULL DEFAULT 0 COMMENT '视频时长(秒)',
+ `sale_type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '售价类型:0免费 1收费',
+ `sale_price` DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '小节售价',
+ `play_count` INT NOT NULL DEFAULT 0 COMMENT '播放次数',
+ `sort` INT NOT NULL DEFAULT 0 COMMENT '排序值',
+ `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态:1启用 0禁用',
+ `deleted` TINYINT(1) NOT NULL DEFAULT 0,
+ `created_by` VARCHAR(64) NOT NULL DEFAULT '系统初始化' COMMENT '创建人',
+ `updated_by` VARCHAR(64) NOT NULL DEFAULT '系统初始化' COMMENT '更新人',
+ `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ PRIMARY KEY (`id`),
+ KEY `idx_health_course_video_course_sort` (`course_id`, `sort`),
+ KEY `idx_health_course_video_status` (`course_id`, `status`),
+ KEY `idx_health_course_video_sale_type` (`sale_type`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养身课程视频小节表';
+
+INSERT IGNORE INTO `tcm_health_course_video`
+(`id`, `course_id`, `chapter_name`, `chapter_remark`, `video_url`, `duration_seconds`, `sale_type`, `sale_price`, `play_count`, `sort`, `status`, `deleted`)
+VALUES
+(1, 1, '方剂学', '赠送添加视频课程页,需自动传入课程', 'https://example.com/health/course-1-video-1.mp4', 238, 0, 0.00, 358, 10, 1, 0),
+(2, 1, '药剂学', '系统课程配套讲解', 'https://example.com/health/course-1-video-2.mp4', 238, 1, 5999.99, 358, 20, 1, 0),
+(3, 1, '方剂学进阶', '面向基础学习后的专题补充', 'https://example.com/health/course-1-video-3.mp4', 642, 1, 5999.99, 358, 30, 1, 0);
+
CREATE TABLE IF NOT EXISTS `tcm_live_course` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '直播课程ID',
`title` VARCHAR(128) NOT NULL COMMENT '课程名称',
--
Gitblit v1.7.1