本文档基于「运维运营管理平台」养生直播管理原型图,整理该模块的字段定义、交互逻辑及功能需求,供前后端开发参考。
| 字段名 | 字段说明 | 类型 | 备注 |
|---|---|---|---|
| 序号 | 列表行号 | int | 固定两条记录,序号分别为 1、2 |
| 课程封面图 | 课程封面缩略图 | 图片 URL | 列表内展示小图 |
| 课程名称 | 直播课程名称 | string | 列表与详情页均展示 |
| 开播时间 | 直播开播时间 | datetime | 格式:YYYY-MM-DD HH:mm;在直播课表中配置 |
| 累计预约人次 | 历史总预约人次 | int | 只读,系统自动累加 |
| 累计观看次数 | 历史总观看次数 | int | 只读,系统自动累加 |
| 可得积分 | 完成答题可得积分数 | int | 对应编辑字段「答题可得积分」 |
| 授课专家 | 关联的授课专家名称 | string | 展示专家姓名,关联 expert 表 |
| 直播状态 | 当前直播状态 | enum tag | 未开始 / 直播中 / 已结束 |
| 启用状态 | 课程启用 / 禁用状态 | enum tag | 启用(绿色)/ 禁用(红色) |
| 操作 | 行内操作入口 | — | 详情、编辑(无新增 / 删除) |
| 字段名 | 字段说明 | 类型 | 备注 |
|---|---|---|---|
| 课程名称 | 直播课程标题 | string | 展示在页头 |
| 课程封面图 | 课程封面展示图 | 图片 URL | 展示单张封面图,展示在页头左侧 |
| 累计预约人数 | 预约该直播的总人数 | int | 页头展示,只读 |
| 累计观看人数 | 观看该直播的总人数 | int | 页头展示,只读 |
| 授课专家 | 关联的授课专家(头像 + 名称) | relation | 展示专家头像和姓名 |
| 开播时间 | 直播开始时间 | datetime | 格式:YYYY-MM-DD HH:mm |
| 可答题时间 | 直播结束后多少分钟内可答题 | int | 展示格式:「直播后XX分钟」 |
| 答题可得积分 | 完成答题可获得积分数 | int | 展示格式:「XX积分」 |
| 适用人群 | 该直播适合的目标用户群体描述 | string | 多行文本展示 |
| 状态 | 课程当前启用状态 | enum tag | 启用 / 禁用 |
| 课程宣传图 | 课程宣传展示图,可多张 | 图片 URL 数组 | 列表展示多张缩略图 |
| 课程介绍 | 课程详细介绍内容 | 富文本 | 展示时渲染为 HTML |
| 字段名 | 是否必填 | 类型 | 校验规则 / 备注 |
|---|---|---|---|
| 课程名称 | 是 | string | 最大 128 字符,不允许为空 |
| 是否启用 | 是 | boolean | Toggle 开关,默认开启;对应字段 status |
| 可答题时间 | 是 | int | 输入数字,单位:分钟;展示格式:「直播 输入框 分钟后」;必须 > 0 |
| 答题可得积分 | 是 | int | 输入数字,必须 ≥ 0 |
| 授课专家 | 是 | relation | 输入搜索下拉框,支持模糊搜索专家名称后下拉选择,关联 expert 表,单选 |
| 适用人群 | 是 | string | 多行文本入框,最大 500 字符 |
| 课程封面图 | 是 | 图片 URL | 单张图片上传,支持 JPG / PNG,存储 OSS URL,上传后预览 |
| 课程宣传图 | 是 | 图片 URL 数组 | 支持多张上传,存储多个 OSS URL;建议尺寸 750×400px |
| 课程介绍 | 是 | 富文本 | 富文本编辑器,支持加粗、斜体、对齐等基础格式,存储 HTML;不允许为空 |
| 操作 | 入口 | 交互逻辑 |
|---|---|---|
| 详情 | 列表行「详情」链接 | 跳转详情页,展示「课程信息」和「直播课表」两个 Tab |
| 编辑 | 列表行「编辑」链接 / 详情页「编辑」按钮 | 跳转编辑页,回显当前课程字段,修改后点击「保存」提交;点击「取消」返回列表页,数据不保存 |
| 禁用 / 启用 | 详情页「禁用/启用」按钮 | 弹出确认弹窗,确认后切换状态并刷新列表,符当前状态动态展示按钮文案;禁用后 APP 展示页不再显示该直播 |
| 观看直播 | 详情页「观看直播」按钮 | 跳转直播间连接 URL,新标签页打开观看;【产品批注】仅当该课程处于「直播中」状态时显示此按钮,其他状态下隐藏 |
本模块不提供「新增」和「删除」功能,课程条数固定为 2 条,仅支持编辑和启用/禁用。
直播课表用于管理该课程各期开播场次,与课程主信息分层管理。
| 筛选项 | 类型 | 匹配方式 | 备注 |
|---|---|---|---|
| 开播时间 | 日期范围选择 | 起止区间 | 对应字段 start_time,格式:开始时间 ~ 结束时间 |
| 上课状态 | 下拉选择 | 精确匹配 | 全部 / 未开始 / 直播中 / 已结束;默认选「全部」 |
| 字段名 | 字段说明 | 类型 | 备注 |
|---|---|---|---|
| 序号 | 列表行号 | int | 按开播时间倒序排列 |
| 开播时间 | 该期直播开始时间 | datetime | 格式:YYYY-MM-DD HH:mm |
| 上课状态 | 直播当前状态 | enum tag | 未开始 / 直播中 / 已结束;系统根据开播时间自动更新 |
| 预约人数 | 该期预约直播的人数 | int | 只读,系统自动累加 |
| 观看人数 | 该期实际观看人数 | int | 只读,未开始时显示"-";【产品批注】本场直播的去重观看人数,同一用户多次进入仅计 1 次 |
| 预约转化率 | 观看人数 / 预约人数 | percent | 只读,未开始时显示"-";【产品批注】公式:观看直播人数 ÷ 总预约人数 |
| 完播率 | 完整观看人数 / 观看人数 | percent | 只读,未开始时显示"-";【产品批注】公式:完整观看直播人数 ÷ 总观看人数 |
| 有效观看率 | 满足有效观看时长的观看人数比例 | percent | 只读,未开始时显示"-";【产品批注】公式:观看直播超过 10 分钟的人数 ÷ 总观看人数 |
| 答题正确数 | 该期答题正确的人数 | int | 只读,未开始时显示“-” |
| 获得积分数 | 该期用户积分发放汇总 | int | 只读,未开始时显示“-” |
| 操作 | 行内操作入口 | — | 按上课状态动态展示,详见下表 |
| 上课状态 | 可用操作 | 交互逻辑 |
|---|---|---|
| 未开始 | 预约记录、编辑、开播、复制、删除 | 「预约记录」:查看该期预约用户列表;「编辑」:修改开播时间及题目等信息;「开播」:手动提前开启直播,状态变为「直播中」;「复制」:复制本条场次并创建新记录;「删除」:弹窗确认后软删除;【产品批注】未开始状态可编辑场次信息,可提前开启直播 |
| 直播中 | 预约记录、观看记录、结束、详情、复制、删除 | 「观看记录」:查看该期实时观看用户列表;「结束」:手动结束直播,弹窗确认,确认后状态变为「已结束」;「详情」:查看该期直播数据详情;「复制」「删除」同上;【产品批注】直播中状态可手动结束直播 |
| 已结束 | 预约记录、观看记录、详情、删除、复制 | 「详情」:查看该期直播完整数据统计;「删除」:弹窗确认后软删除,删除后不影响已预约 / 观看的历史数据;「复制」:复制本期信息并创建一期新场次 |
弹窗标题:添加直播场次
| 字段名 | 是否必填 | 类型 | 备注 |
|---|---|---|---|
| 开始直播时间 | 是 | datetime | 日期时间选择器,格式:YYYY-MM-DD HH:mm;不允许设置过去时间 |
| 视频地址 | 是 | string | 直播间流地址,存储直播间连接 URL;对应「观看直播」按钮跳转地址 |
| 基础预约量 | 否 | int | 初始展示的预约基数;新用户预约后在此数量基础上 +1 展示;不填则默认为 0。 |
| 基础观看量 | 否 | int | 初始展示的观看基数;新用户观看后在此数量基础上 +1 展示;不填则默认为 0。 |
每期场次内置 3 道单选题,用于用户观看直播后答题获得积分。
| 字段名 | 是否必填 | 类型 | 备注 |
|---|---|---|---|
| 题目 1 题干 | 是 | string | 题目描述文字,最大 500 字符 |
| 题目 1 选项 A | 是 | string | 单选项文字;右侧单选按鈕可标记为「正确答案」 |
| 题目 1 选项 B | 是 | string | 同上 |
| 题目 1 选项 C | 是 | string | 同上;三项中必须且仅能选择一项为正确答案 |
| 题目 2 题干 | 是 | string | 同题目 1 |
| 题目 2 选项 A / B / C | 是 | string | 同题目 1,必须标记一个正确答案 |
| 题目 3 题干 | 是 | string | 同题目 1 |
| 题目 3 选项 A / B / C | 是 | string | 同题目 1,必须标记一个正确答案 |
产品批注:基础预约量 / 基础观看量为跦现字段,新建场次后展示的预约数 / 观看数从该基数起算,每新增一个真实预约 / 观看行为在实际数据上 +1。即:**展示数据 = 基础量 + 真实行为数**。
live_course)CREATE TABLE `live_course` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '直播课程 ID',
`name` VARCHAR(128) NOT NULL COMMENT '课程名称',
`cover` VARCHAR(512) DEFAULT NULL COMMENT '课程封面图 OSS URL',
`banner_images` JSON DEFAULT NULL COMMENT '课程宣传图 OSS URL 列表,JSON数组',
`expert_id` BIGINT UNSIGNED NOT NULL COMMENT '授课专家 ID,关联 expert 表',
`answer_delay_min` INT UNSIGNED NOT NULL DEFAULT 30 COMMENT '直播后多少分钟可答题(分钟)',
`answer_score` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '答题可得积分',
`target_audience` VARCHAR(500) DEFAULT NULL COMMENT '适用人群',
`intro` TEXT DEFAULT NULL COMMENT '课程介绍(HTML富文本)',
-- 累计数据(只读)
`total_subscribe` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '累计预约人次',
`total_views` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '累计观看次数',
-- 状态
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用状态:1启用 0禁用',
-- 审计字段
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人名称',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
`updated_by` VARCHAR(64) DEFAULT NULL COMMENT '最后修改人名称',
PRIMARY KEY (`id`),
KEY `idx_status` (`status`),
KEY `idx_expert_id` (`expert_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='养生直播课程表(固定两条)';
live_course_schedule)CREATE TABLE `live_course_schedule` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '场次 ID',
`course_id` BIGINT UNSIGNED NOT NULL COMMENT '关联课程 ID',
`start_time` DATETIME NOT NULL COMMENT '开播时间',
`live_url` VARCHAR(512) NOT NULL COMMENT '直播间视频地址',
`base_subscribe` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '基础预约量(跦现),展示预约数 = 基础量 + 真实预约数',
`base_views` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '基础观看量(跦现),展示观看数 = 基础量 + 真实观看数',
`live_status` TINYINT NOT NULL DEFAULT 0 COMMENT '直播状态:0未开始 1直播中 2已结束',
-- 题目 1
`q1_stem` VARCHAR(500) NOT NULL COMMENT '题目1题干',
`q1_option_a` VARCHAR(255) NOT NULL COMMENT '题目1选项A',
`q1_option_b` VARCHAR(255) NOT NULL COMMENT '题目1选项B',
`q1_option_c` VARCHAR(255) NOT NULL COMMENT '题目1选项C',
`q1_answer` CHAR(1) NOT NULL COMMENT '题目1正确答案:A/B/C',
-- 题目 2
`q2_stem` VARCHAR(500) NOT NULL COMMENT '题目2题干',
`q2_option_a` VARCHAR(255) NOT NULL COMMENT '题目2选项A',
`q2_option_b` VARCHAR(255) NOT NULL COMMENT '题目2选项B',
`q2_option_c` VARCHAR(255) NOT NULL COMMENT '题目2选项C',
`q2_answer` CHAR(1) NOT NULL COMMENT '题目2正确答案:A/B/C',
-- 题目 3
`q3_stem` VARCHAR(500) NOT NULL COMMENT '题目3题干',
`q3_option_a` VARCHAR(255) NOT NULL COMMENT '题目3选项A',
`q3_option_b` VARCHAR(255) NOT NULL COMMENT '题目3选项B',
`q3_option_c` VARCHAR(255) NOT NULL COMMENT '题目3选项C',
`q3_answer` CHAR(1) NOT NULL COMMENT '题目3正确答案:A/B/C',
-- 审计字段
`is_deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除:1已删除 0正常',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人名称',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
`updated_by` VARCHAR(64) DEFAULT NULL COMMENT '最后修改人名称',
PRIMARY KEY (`id`),
KEY `idx_course_id` (`course_id`),
KEY `idx_start_time` (`start_time`),
KEY `idx_live_status` (`live_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='直播场次表';




