文档说明与全局规则
结论:本 PRD 基于项目源码整理,覆盖管理后台实际路由、菜单、页面字段、弹窗状态、搜索筛选、分页排序、订单编号、商品命名、积分扣减优先级、异常处理和验收标准。源码中已存在但未完全满足的规则,本文件按需求明确为研发实现与测试验收标准。
1. 产品范围
| 范围类型 | 内容 |
|---|---|
| 包含范围 | 首页看板、个人用户、学校账户、订单与订阅、会员配置、模型配置、加油包配置 |
| 不包含范围 | 真实支付网关、真实后端接口、真实登录权限体系、外部模型调用链路、财务开票流程。以上仅在前端原型中做字段和状态表达。 |
| 核心目标 | 让研发明确页面数据、业务规则和状态处理;让测试可直接据此编写用例。 |
2. 全局数据与交互规则
| 规则项 | 统一要求 | 验收标准 |
|---|---|---|
| 默认排序 | 所有列表默认按 createdAt 或业务创建时间倒序展示;无创建时间字段时按最新更新时间倒序;仍支持点击可排序列切换升序/降序。 | 新增数据后应出现在列表第一页第一条;刷新后顺序不变。 |
| 分页加载 | 所有列表每页加载 10 条。审计日志源码当前为 15 条,本 PRD 统一要求改为 10 条。 | 第 11 条数据进入第 2 页;分页区显示“显示 1-10 共 N 条”。 |
| 搜索 | 支持模糊查询,用户输入关键字后实时过滤;前后空格应 trim;中文、手机号、订单号、组织代码均支持包含匹配。 | 输入任意连续片段可命中包含该片段的数据;清空搜索恢复全量。 |
| 空态 | 列表无数据时显示模块化空态文案,如“暂无用户数据”“暂无订单数据”。 | 搜索无结果、筛选无结果、真实空数据都不报错。 |
| 弹窗 | 点击遮罩、关闭图标或取消按钮关闭弹窗;必填字段未满足时确认按钮禁用或给出明确错误提示。 | 关闭后表单状态按场景重置;二次打开不保留上次未提交脏数据。 |
| 状态展示 | 统一使用状态标签:进行中、停用、已过期、未生效、即将逾期、已冻结、待支付、已支付、已退款、部分退款、已处理、已忽略。 | 前端状态码与中文文案一一对应,不出现英文裸状态。 |
| 审计追踪 | 配置修改、订单补录、模型配置、冻结/解冻、回滚等关键操作必须保留操作人、对象、对象ID、前后值、原因、操作时间。 | 审计日志可按操作人、对象、对象ID模糊搜索。 |
3. 命名与编号规则
| 对象 | 生成规则 | 示例 |
|---|---|---|
| 个人会员商品名称 | 会员名称+会员类型。会员类型取“月度会员”或“年度会员”。 | Lite 月度会员、Pro 年度会员 |
| 学校会员商品名称 | 会员名称 | 校园标准版 |
| 个人加油包商品名称 | 个人加油包 | 个人加油包 |
| 学校加油包商品名称 | 学校加油包 | 学校加油包 |
| 个人会员订单号 | GRDD + yyyyMMddHHmmss + 随机4位数字。 | GRDD202607081530459127 |
| 个人加油包订单号 | GRJYB + yyyyMMddHHmmss + 随机4位数字。 | GRJYB202607081530451028 |
| 学校会员订单号 | XYDD + yyyyMMddHHmmss + 随机4位数字。 | XYDD202607081530450366 |
| 学校加油包订单号 | XYJYB + yyyyMMddHHmmss + 随机4位数字。 | XYJYB202607081530458801 |
4. 积分扣减优先级
核心规则:当会员积分、加油包积分、赠送/补发积分同时在有效期内时,系统按“先到期先扣除”执行;若到期时间相同,则按 会员积分 → 加油包积分 → 赠送/补发积分 的顺序扣减。
| 场景 | 扣减规则 | 异常处理 |
|---|---|---|
| 单次消耗小于会员积分余额 | 仅扣会员积分。 | 生成一条消费流水。 |
| 单次消耗大于会员积分余额且加油包有效 | 先扣完会员积分,再扣加油包积分。 | 生成两条流水或一条流水中记录分摊明细,后端需保证可追溯。 |
| 会员积分已过期,加油包有效 | 跳过会员积分,仅扣加油包积分。 | 会员积分按重置规则生成过期/重置流水。 |
| 总可用积分不足 | 不允许进入模型调用扣费流程,返回“积分不足”。 | 生成风控事件:积分耗尽。 |
| 学校账户有多名老师消耗 | 统一从学校积分池扣除,老师维度记录消耗归因。 | 老师移除后不再占用名额,后续不可继续使用学校积分。 |
首页看板
菜单/、/dashboard
1. 功能描述
首页看板用于管理人员快速查看收入、用户、积分和学校到期预警,支持按时间范围和账户类型切换统计口径,并可跳转到订单、用户、积分、学校账户等明细页面。
2. 页面结构
| 区域 | 字段/组件 | 交互 |
|---|---|---|
| 筛选栏 | 时间范围:今日、昨日、近7天、本月;账户类型:全部、个人、学校。 | 点击后切换选中态,统计数据按筛选条件刷新。 |
| 收入概况 | 本月收入、今日收入增量、个人订阅、学校订单、加油包收入、收入趋势。 | 点击“详情”跳转订单与订阅。 |
| 用户概况 | 个人付费用户、学校账户、绑定老师。 | 点击“详情”跳转个人用户管理。 |
| 积分概况 | 发放总量、已消耗、已过期、剩余总量、消耗率、过期率。 | 点击“详情”跳转积分账户与流水。 |
| 学校到期预警、 校园会员老师超额预警 | 1、学校到期预警(到期前30天)最多展示5条 2、校园会员绑定老师超额预警(≧1人)最多展示5条(超额的场景:校园版会员高版本到期后,购买低版本) |
3. 业务规则
- 收入构成占比 = 单项收入 / 本月总收入 * 100%,保留 1 位小数。
- 积分消耗率 = 已消耗 / 已发放 * 100%;积分过期率 = 已过期 / 已发放 * 100%。
- 学校到期预警仅展示
orderStatus=expiring_soon的学校,列表最多展示 10 条。 - 当无即将到期学校时,显示空态“暂无即将到期的学校”。
4. 验收标准
- 筛选按钮选中态明确,切换后不会影响其他页面筛选条件。
- 收入、用户、积分数字格式支持千分位;金额保留 2 位小数。
- 所有详情跳转路径正确。
个人用户管理
菜单/users、/users/:id
1. 功能描述
个人用户管理用于查看个人老师账户、会员状态、服务期、会员积分、加油包积分、剩余积分、订单记录、使用记录和操作日志。个人类订单可通过手机号自动派生个人用户。
2. 列表页规则
| 能力 | 规则 |
|---|---|
| 搜索 | 支持按用户姓名、手机号模糊查询。 |
| 状态筛选 | 全部状态、进行中、即将逾期(到期前7日提示)、已过期、未生效。 |
| 列表字段 | 用户、手机号、当前会员、状态、服务期、会员积分、加油包积分、本期剩余积分、操作。 |
| 当前会员展示 | 优先展示最近一笔已支付个人会员/自动续费订单的商品名称;若无会员订单,展示最近一笔已支付个人加油包;若均无,则展示 会员名称 + 月度会员;仍无则展示“免费”。 |
| 本期剩余积分 | 会员积分 + 有效加油包积分 - 本期已消耗积分,最小值为 0。 |
| 排序分页 | 默认按创建/注册时间倒序;每页 10 条;用户可点击可排序列切换排序。 |
3. 详情页规则
| Tab | 内容 | 规则 |
|---|---|---|
| 基础信息 | 老师姓名、手机号、注册时间。 | 用户不存在时显示“用户不存在”和返回用户列表按钮。 |
| 会员信息 | 当前会员、待生效会员、个人加油包。 | 仅 active、pending 展示会员信息;过期状态展示“暂无会员信息”。 |
| 积分账户 | 总发放、总消耗、已过期、剩余、订阅积分、加油包积分、积分流水。 | 流水每页 10 条,按时间倒序。 |
| 订单记录 | 订单号、商品名称、类型、金额、支付方式、状态、创建时间。 | 仅展示当前用户订单。 |
| 使用记录 | 服务类型、消耗积分、使用时间。 | 按使用时间倒序。 |
| 操作日志 | 记录会员和加油包的信息 | 1、类型:购买会员:操作人:操作人姓名,购买日详情展示:会员名称+类型以及有效的开始时间到结束时间(没有会员类型不展示,例如个人会员+类型就是:Lite 月度会员,校园会员就是:校园基础版
2、类型:购买加油包,操作人:操作人姓名,详情展示:加油包名称和积分额度以及有效期
3、类型:补发积分,操作人:后台操作人姓名,详情展示:补发原因,补发积分额度值,补发原因,以及有效期 4、类型:扣减积分,操作人:后台操作人姓名,详情展示:扣减额度,扣减原因 |
4. 弹窗状态
| 触发动作 | 弹窗标题 | 必填项 | 确认后逻辑 |
|---|---|---|---|
| 补发积分 | 补发积分 | 操作原因、积分数量 | 增加用户可用积分,生成 refill 流水和审计日志。 |
| 扣减积分 | 扣减积分 | 操作原因、积分数量 | 按积分扣减优先级扣减,生成 deduct 流水和审计日志。 |
5. 验收标准
- 输入手机号任意连续片段可命中用户。
- 无加油包时“加油包积分”显示
-,不参与剩余积分计算。 - 补发/扣减弹窗未填写原因或数量时不可提交。
学校账户管理
菜单/schools、/schools/:id
1. 功能描述
学校账户管理用于查看学校组织代码、会员、订单状态、老师绑定数、积分池、加油包、客户成功负责人和模型配置。支持单校模型配置、批量模型配置、绑定/移除老师、查看配置历史和回滚,并包含学校会员续费、升级、降级时的老师上限处理规则。
2. 列表页规则
| 能力 | 规则 |
|---|---|
| 搜索 | 支持按学校名称、组织代码模糊查询。 |
| 状态筛选 | 全部状态、即将逾期(到期前30天)、进行中、已过期、未生效。 |
| 批量选择 | 支持全选当前筛选结果、单选学校、清空选择。 |
| 模型配置入口 | 学校 orderStatus=frozen 时,单校配置按钮禁用并提示“学校已冻结”。 |
| 本期剩余积分 | 会员积分 + 有效加油包积分 - 已消耗积分,最小值为 0,可以为负。(为负数的场景:批改,当有积分时可以批改,批改不会中断) |
3. 详情页规则
| Tab | 内容 | 规则 |
|---|---|---|
| 基础信息 | 组织代码、学校名称、客户成功负责人、合同到期日。 | 学校不存在时显示“学校不存在”。 |
| 会员信息 | 当前会员、待生效会员、学校加油包。 | 冻结/过期学校不展示当前会员权益使用入口。 |
| 积分账户 | 订阅积分池、加油包积分、流水。 | 按账户维度统计,老师维度仅做消耗归因。 |
| 老师列表 | 老师姓名、手机号、绑定时间、老师状态、已消耗积分、移除操作。 | 仅“正常可用”老师占用当前会员老师名额;正常可用数达到老师上限时“绑定老师”按钮禁用。 |
| 模型配置 | 对话模型、批改模型、最近变更、最后更新。 | 未配置时使用平台默认模型。 |
| 操作日志 | 记录会员和加油包的信息 | 1、类型:购买会员:操作人:操作人姓名,购买日详情展示:会员名称+类型以及有效的开始时间到结束时间(没有会员类型不展示,例如个人会员+类型就是:Lite 月度会员,校园会员就是:校园基础版
2、类型:购买加油包,操作人:操作人姓名,详情展示:加油包名称和积分额度以及有效期
3、类型:补发积分,操作人:后台操作人姓名,详情展示:补发原因,补发积分额度值,补发原因,以及有效期 4、类型:扣减积分,操作人:后台操作人姓名,详情展示:扣减额度,扣减原因 |
4. 学校会员变更与老师上限规则
核心规则:学校会员变更只影响权益生效时间和可用老师上限,不自动删除老师绑定关系。老师绑定关系与老师可用状态必须拆分管理。
| 场景 | 生效规则 | 老师上限规则 | 老师处理规则 |
|---|---|---|---|
| 低版本续费 | 按排队周期生效,即当前有效会员周期结束后生效。 | 老师数量上限不变。 | 已绑定老师状态不变;若正常可用数已达到上限,继续禁用“绑定老师”。 |
| 低版本升级高版本 | 支付成功后立即生效。原版本积分会累积到新版本总额中 | 老师数量上限立即增加。例如低版本上限 50,高版本上限 80,升级后可新增 30 位正常可用老师。 | 若存在“超额停用”老师,工作人员可优先恢复为“正常可用”;恢复后正常可用数不得超过新上限。 |
| 高版本降级低版本 | 按排队周期生效,即当前高版本周期结束后生效。 | 到期后按低版本老师上限执行。例如高版本上限 80,低版本上限 50,到期后最多 50 位老师保持正常可用。 | 系统不得自动移除多余老师;超出新上限的老师改为“超额停用”,不可继续使用学校会员权益,但后台保留绑定关系和历史数据。 |
| 老师状态 | 状态含义 | 是否占用老师名额 | 是否可使用学校权益 | 允许操作 |
|---|---|---|---|---|
| 正常可用 | 当前会员老师上限覆盖范围内的老师。 | 是 | 是 | 移除、查看消耗记录。 |
| 超额停用 | 因学校会员降级导致超过新版本老师上限的老师。并在列表增加提示 当前已绑定老师数量超过会员上限,最近添加的 1 位老师已被标记为「超额停用」。可解绑部分老师或升级会员后在列表中操作「恢复」。 | 否 | 否 | 恢复为正常可用、移除、查看历史消耗记录。 |
| 已移除 | 工作人员主动解除学校与老师绑定关系,已移除状态不显示 | 否 | 否 | 仅查看历史记录;如需重新使用,需重新绑定。 |
- 降级订单创建后,详情页会员信息 Tab 必须展示“待生效会员”和“降级后老师上限”,并提示当前正常可用老师数是否超过待生效上限。
- 降级生效前,工作人员可在老师列表中选择保留为“正常可用”的老师,选择数量不得超过待生效低版本老师上限。
- 若降级生效前工作人员未选择保留名单,系统按“最近 90 天有使用记录优先;使用记录相同按绑定时间早优先”的规则自动保留老师,其余老师置为“超额停用”。
- 当存在“超额停用”老师时,绑定老师入口继续按正常可用数校验;若正常可用数已达到当前老师上限,不允许新增或恢复老师。
- 所有老师状态变更必须生成操作日志,记录学校、老师、变更前状态、变更后状态、触发来源、操作人和时间。系统自动处理时,操作人记为“系统”。
5. 弹窗/抽屉状态
| 触发动作 | 组件 | 状态规则 | 提交规则 |
|---|---|---|---|
| 绑定老师 | 绑定老师弹窗 | 穿梭框左右列表均支持按姓名、手机号搜索;当前正常可用数达到老师上限时,入口禁用并提示“当前会员老师名额已满”。 | 未选择老师时“确认绑定”禁用;确认后新增老师状态为“正常可用”,增加正常可用老师数并记录绑定时间。 |
| 移除老师 | 移除老师确认弹窗 | 显示老师姓名和风险提示。 | 确认后老师不再占用名额,且不可继续使用学校积分。 |
| 处理超额老师 | 超额老师处理抽屉 | 仅当存在待生效降级且当前正常可用老师数大于待生效老师上限时展示;支持按姓名、手机号、最近使用时间筛选。 | 工作人员必须选择不超过待生效老师上限的保留名单;保存后生成待生效处理方案,到期后系统按方案执行。 |
| 单校模型配置 | 学校模型配置弹窗 | 冻结学校不可提交;无变更时提示“配置未发生变化”;无可用模型时提示“暂无可用模型”。 | 确认后生成配置历史和审计日志。 |
| 批量模型配置 | 五步弹窗 | 步骤:选学校、配置模型、风险确认、执行进度、结果。冻结学校展示“将被跳过”。 | 仅勾选模型类型会被修改;超过 50 所学校时必须输入 CONFIRM。 |
| 配置历史 | 右侧抽屉 | 显示版本、单个/批量、变更类型、操作人、原因、批次ID。 | 回滚原因不少于 5 字;若快照中模型已停用,回滚失败并提示手动配置。 |
6. 验收标准
- 批量配置完成后展示成功数、失败数和失败详情。
- 冻结学校批量配置结果为失败,失败原因“学校已冻结”。
- 每次模型配置变更均生成新版本,版本号递增。
- 学校从低版本升级高版本支付成功后,老师上限立即更新,且可新增老师数等于新上限减当前正常可用老师数。
- 学校从高版本降级低版本时,当前周期内老师状态不变;到期生效后,正常可用老师数不得超过低版本上限。
- 降级生效后,系统不得自动删除超额老师绑定关系;超出上限的老师必须展示为“超额停用”,且不可使用学校会员权益。
- 存在待生效降级且正常可用老师数超过待生效上限时,详情页必须展示超额风险提示和“处理超额老师”入口。
- 工作人员未处理超额老师时,系统到期后必须按默认保留规则自动处理,并生成系统操作日志。
订单与订阅
菜单/orders
1. 功能描述
订单与订阅用于查询个人会员、个人自动续费、个人加油包、学校会员、学校加油包订单,支持补录订单、查看订单详情和退款确认。
2. 列表页规则
| 能力 | 规则 |
|---|---|
| 搜索 | 支持按订单号、账户名称、商品名称模糊查询。 |
| 筛选 | 订单类型:全部、个人会员、个人自动续费、个人加油包、学校会员、学校加油包;订单状态:全部、待支付、已支付、已退款。 |
| 统计卡片 | 总订单数、已支付、总收入、退款订单。 |
| 列表字段 | 订单号、订单类型、账户类型、账户名称、商品名称、实付金额、支付方式、订单状态、服务期、创建时间、操作。 |
| 排序分页 | 默认按创建时间倒序;每页 10 条。 |
3. 创建订单规则
| 订单类型 | 账户绑定 | 商品来源 | 订单号前缀 |
|---|---|---|---|
| 个人会员订单 | 必须输入个人手机号;手机号存在则绑定已有用户,不存在则自动创建用户。 | 启用状态的个人会员配置。 | GRDD |
| 个人自动续费订单 | 必须输入个人手机号。 | 启用且连续包月价格大于 0 的个人会员。 | GRDD |
| 个人加油包订单 | 必须输入个人手机号。 | 个人加油包配置。 | GRJYB |
| 学校会员订单 | 必须选择已存在学校账户。 | 启用状态的学校会员配置。 | XYDD |
| 学校加油包订单 | 必须选择已存在学校账户。 | 学校加油包配置。 | XYJYB |
订单号完整规则:前缀 + yyyyMMddHHmmss + 随机4位数字。同一秒内随机位冲突时,后端必须重试生成。
4. 弹窗状态
| 状态/动作 | 弹窗或按钮 | 显示规则 | 提交后逻辑 |
|---|---|---|---|
| 查看任意订单 | 订单详情弹窗 | 展示订单信息、支付信息、创建订单原因。 | 只读。 |
| 已支付订单 | 退款按钮 + 退款确认弹窗 | 详情底部仅展示“退款”。弹窗提示“退款后订单状态将变更为已退款,该操作不可撤销”。 | 确认后订单状态置为 refunded,生成审计日志。 |
| 待支付订单 | 确认支付、取消订单按钮 | 详情底部展示两个操作按钮。 | 确认支付置为 paid;取消置为 cancelled,均生成审计日志。 |
| 创建订单 | 创建订单弹窗 | 订单类型变化时账户类型自动联动;个人展示手机号输入,学校展示学校选择。 | 必填:绑定对象、商品名称、实付金额、支付方式、订单状态、创建订单原因。原因最多 200 字。 |
5. 验收标准
- 个人类订单选择学校账户时必须阻断并提示“个人订单必须绑定个人账户”。
- 学校类订单未选择学校账户时必须阻断并提示“必须选择已存在的学校账户”。
- 创建订单原因在详情页可见,并进入审计日志。
会员配置
菜单/membership
1. 功能描述
会员配置用于维护个人会员和学校会员的名称、价格、积分、积分重置规则、权益说明、老师数量上限和上下架状态。个人会员支持月度/年度;学校会员以年度为主。
2. 配置字段
| 字段 | 个人会员 | 学校会员 | 规则 |
|---|---|---|---|
| 会员名称 | 必填 | 必填 | 用于生成商品名称。 |
| 订阅定价 | 月度会员、年度会员可配置其一或同时配置。 | 年度会员定价。 | 金额最小值 0,保留 2 位小数。 |
| 发放积分 | 必填数字 | 必填数字 | 购买成功后写入订阅积分池。 |
| 积分重置规则 | 过期重置、过期不重置、自定义重置日期。 | 同个人会员。 | 自定义时必须填写“开通后第 N 日”。 |
| 老师数量上限 | 不适用 | 必填数字 | 学校绑定老师数不得超过上限。 |
| 权益内容说明 | 纯文本 | 纯文本 | 用于前台或运营说明。 |
| 状态 | 启用/停用 | 启用/停用 | 停用后不再进入订单商品下拉。 |
3. 特殊规则
- “首次注册固定项”允许编辑,但不允许停用/删除。
- 个人会员新增/编辑时,切换月度/年度 Tab 需缓存各自价格、积分、权益配置,不得丢失已输入内容。
- 会员商品名称必须按
会员名称 + 会员类型生成,如Lite 月度会员。
4. 弹窗状态
| 动作 | 弹窗 | 提交条件 | 提交后逻辑 |
|---|---|---|---|
| 新增会员 | 新增会员 | 会员名称必填;自定义重置时重置天数必填。 | 创建后状态默认为启用。 |
| 编辑会员 | 编辑会员配置 | 字段校验同新增。 | 保存后列表即时更新,生成审计日志。 |
| 启用/停用 | 无弹窗,直接切换 | 首次注册固定项不展示停用入口。 | 启用进入订单商品候选,停用不进入。 |
5. 验收标准
- 停用会员不会出现在创建订单的商品下拉中。
- 自定义重置规则展示为“开通 N 日后重置”。
- 个人会员配置和学校会员配置分别分页展示,每页 10 条。
模型配置
菜单/models
1. 功能描述
模型配置用于统一维护 AI 模型基础信息、供应商、请求 URL、API Key、模型类型、上下文能力、状态、计费规则和使用统计,支持模型级差异化定价。
2. 页面结构
| Tab | 内容 |
|---|---|
| 模型与计费 | 模型总数、启用中、已停用、本月新增;模型列表;新增/编辑模型;详情;启停;删除;计费规则。 |
| 使用统计 | 输入Token、输出Token、本月成本、消耗积分、模型成本排行、成本与Token趋势。 |
3. 业务规则
- 模型类型包括:对话、批改、生成、分析、嵌入、多模态。
- 供应商包括:OpenAI、Anthropic、百度文心、阿里通义、智普、自研、其他。
- 新增模型需同步创建计费规则;计费规则版本号按模型维度自增。
- 创建立即生效规则时,同模型原 active 规则归档;创建待生效规则时,同模型原 pending 规则归档。
- 停用模型后,新请求不再路由到该模型;已发起请求不受影响;历史统计保留。
- 近 30 天存在调用记录的模型禁止删除,只允许停用。
4. 弹窗状态
| 动作 | 弹窗 | 规则 |
|---|---|---|
| 新增/编辑 | 新增模型配置 / 编辑模型配置 | 必填:供应商、模型名称、请求URL、模型类型、状态、输入/输出/缓存计费规则。 |
| 查看详情 | 模型详情 | 只读展示基础信息、能力参数、当前计费规则、全局成本配置、关联 AI 功能。 |
| 启用/停用 | 启用模型 / 停用模型 | 确认后切换状态;停用提示影响范围。 |
| 删除 | 删除模型 | 有近 30 天调用记录时显示“禁止删除”;无调用记录时必须输入模型名称确认。 |
5. 验收标准
- 停用模型不会出现在学校模型配置的可选模型下拉中。
- 删除确认输入不等于模型名称时,“确认删除”不可用。
- 计费规则回滚会生成新版本,不覆盖历史版本。
加油包配置
菜单/packages
1. 功能描述
加油包配置用于维护个人和学校额外积分包,包括名称、价格、积分额度、有效期、是否可叠加、上下架状态。加油包订单支付成功后写入加油包积分池。
2. 配置字段
| 字段 | 规则 |
|---|---|
| 加油包名称 | 必填。建议按 个人加油包 200积分、学校加油包 20000积分 格式维护。 |
| 类型 | 个人 / 学校。由新增入口决定,不允许提交后切换。 |
| 价格 | 最小值 0,保留 2 位小数。 |
| 积分额度 | 大于 0 的整数。 |
| 有效期 | 个人默认 30 天,学校默认 365 天,可编辑。 |
| 可叠加 | 开启时可购买多个有效加油包;关闭时同账户有效期内只能存在一个同类型加油包。 |
| 状态 | 上架 / 下架。下架后不进入创建订单商品下拉。 |
3. 弹窗状态
| 动作 | 弹窗 | 提交条件 |
|---|---|---|
| 新增加油包 | 新增加油包 | 加油包名称必填;价格、积分、有效期必须为非负数字,其中积分和有效期必须大于 0。 |
| 编辑加油包 | 编辑加油包配置 | 字段校验同新增。 |
| 上架/下架 | 无弹窗,直接切换 | 状态即时更新,生成审计日志。 |
4. 验收标准
- 个人入口新增默认有效期 30 天,学校入口新增默认有效期 365 天。
- 下架加油包不可在创建订单时选择。
- 列表按类型分为个人加油包、学校加油包,每页 10 条。
功能配置
隐藏路由/features
1. 功能描述
功能配置用于维护 AI 功能名称、编码、适用账户、是否消耗积分、是否需要会员、输入/输出 Token 换算基数和启用状态,为会员权益、模型调用和积分扣费提供基础配置。
2. 业务规则
| 字段 | 规则 |
|---|---|
| 功能名称 | 必填,可编辑。 |
| 功能编码 | 必填且唯一;编辑时禁用。 |
| 适用账户 | 全部、个人、学校。 |
| 消耗积分 | 关闭时不生成消费流水;开启时按 Token 换算扣费。 |
| 需要会员权限 | 开启时仅有效会员账户可使用。 |
| Token换算 | 消耗积分 = 输入token / 输入换算基数 + 输出token / 输出换算基数,结果按后端统一取整规则处理。 |
3. 验收标准
- 禁用功能不可被会员权益或前台调用。
- 输入/输出换算基数为 0 时,页面必须提示不可计算或禁止保存。
- 功能编码重复时禁止创建。
积分账户与流水
隐藏路由/credits
1. 功能描述
积分账户与流水用于查看平台积分发放、消耗、过期、人工补发、扣减和剩余情况,并按个人/学校维度分析积分消耗趋势、分布和排行榜。
2. 页面结构
| Tab | 内容 |
|---|---|
| 统计概览 | 总发放、总消耗、已过期、人工补发、剩余;个人/学校积分分布;变动类型分布。 |
| 趋势分析 | 近 7 天发放与消耗趋势、日均发放、日均消耗、单日最高发放/消耗。 |
| 分布分析 | 积分消耗账户类型分布、积分变动类型占比。 |
| 消耗排行 | 个人用户消耗排行 TOP10、学校账户消耗排行 TOP10。 |
3. 流水规则
| 变动类型 | 说明 | 余额变化 |
|---|---|---|
| grant | 订单支付成功、会员开通发放。 | 增加。 |
| consume | 模型调用或功能使用扣费。 | 减少。 |
| expire | 积分到期失效。 | 减少。 |
| reset | 按会员重置规则清零或重置。 | 按规则变化。 |
| refill | 后台人工补发。 | 增加。 |
| deduct | 后台人工扣减。 | 减少。 |
4. 验收标准
- 任一流水必须包含账户类型、账户ID、账户名称、变动类型、变动积分、变动前、变动后、关联订单/服务调用、操作人/原因、创建时间。
- 筛选时间范围和账户类型后,统计卡片、图表和排行榜应同步刷新。
- 人工补发/扣减必须进入审计日志。
成本与价格配置
隐藏路由/cost
1. 功能描述
成本与价格配置用于维护全局输入/输出 Token 单价、Token 换算基数、服务成本比例、交易与渠道成本比例,并进行毛利测算。
2. 计算规则
| 指标 | 公式 |
|---|---|
| 直接模型成本 | 输入Token成本 + 输出Token成本。 |
| 服务成本 | 直接模型成本 * 服务成本比例。 |
| 交易成本 | 商品收入 * 交易与渠道成本比例。 |
| 总成本 | 直接模型成本 + 服务成本 + 交易成本。 |
| 利润 | 商品收入 - 总成本。 |
| 毛利率 | 利润 / 商品收入。 |
3. 验收标准
- 所有比例字段按百分比展示,入库按小数或百分比需由前后端统一。
- 输入任一成本字段后,毛利测算实时刷新。
- 保存全局配置后,模型详情中的全局成本配置同步展示。
风控与异常
隐藏路由/risk
1. 功能描述
风控与异常用于集中处理积分耗尽、异常消耗、老师超限、账户冻结、续费失败等事件,支持按状态和类型筛选,并提供处理/忽略操作。
2. 事件规则
| 异常类型 | 触发条件 | 建议处理 |
|---|---|---|
| 积分耗尽 | 账户可用积分不足以完成本次扣费。 | 引导续费/购买加油包,或人工补发。 |
| 异常消耗 | 短时间内消耗超过阈值或显著高于历史均值。 | 核对服务调用、冻结异常请求。 |
| 老师超限 | 学校绑定老师数达到或超过会员上限。 | 升级会员或移除老师。 |
| 账户冻结 | 学校欠费、违规或运营冻结。 | 确认欠费/违规状态后解冻或保持冻结。 |
| 续费失败 | 自动续费扣款失败。 | 通知用户补缴或更换支付方式。 |
3. 弹窗状态
| 动作 | 规则 |
|---|---|
| 处理 | 仅待处理事件展示;打开“处理风控事件”弹窗,展示异常类型、账户名称、异常描述,处理说明可填写;确认后状态置为已处理,写入处理人和处理时间。 |
| 忽略 | 仅待处理事件展示;点击后状态置为已忽略。 |
4. 验收标准
- 已处理/已忽略事件不再展示处理/忽略按钮。
- 筛选结果数量与列表条数一致。
- 处理事件后统计卡片实时更新。
系统权限与审计
隐藏路由/audit
1. 功能描述
系统权限与审计用于追踪配置、账户、订单、模型等关键操作,便于问题追溯、运营审计和测试验证。
2. 列表规则
| 能力 | 规则 |
|---|---|
| 搜索 | 支持按操作人、操作对象、对象ID模糊查询。 |
| 筛选 | 操作类型:新增、修改、删除、冻结、解冻;对象类型:从日志对象字段动态生成。 |
| 字段 | 操作人、操作对象、对象ID、操作类型、变更前、变更后、操作原因、操作时间。 |
| 分页 | 统一每页 10 条,默认按操作时间倒序。 |
3. 验收标准
- 任一配置变更必须在审计日志中可查。
- 变更前/后值过长时列表截断,但 hover 或详情应可查看完整内容。
- 今日操作统计应按当前自然日计算,不应写死日期。
测试验收清单
1. 核心测试场景
| 编号 | 场景 | 预期结果 | 优先级 |
|---|---|---|---|
| TC-001 | 所有列表默认加载 | 按创建时间倒序,每页 10 条,分页统计正确。 | P0 |
| TC-002 | 各模块模糊搜索 | 输入局部关键字可命中;清空恢复全量;无结果显示空态。 | P0 |
| TC-003 | 创建个人加油包订单 | 订单号为 GRJYByyyyMMddHHmmss随机4位;手机号必填;原因必填。 | P0 |
| TC-004 | 创建学校会员订单未选学校 | 阻断提交,提示必须选择已存在学校账户。 | P0 |
| TC-005 | 已支付订单退款 | 只展示退款按钮;确认弹窗文案正确;确认后状态变为已退款并生成审计日志。 | P0 |
| TC-006 | 待支付订单详情 | 展示确认支付、取消订单按钮,不展示退款按钮。 | P0 |
| TC-007 | 会员积分和加油包积分同时有效 | 按先到期先扣;到期相同先扣会员积分,再扣加油包积分。 | P0 |
| TC-008 | 冻结学校模型配置 | 单校配置按钮禁用;批量配置跳过并记录失败原因。 | P0 |
| TC-009 | 批量配置超过 50 所学校 | 必须输入 CONFIRM 才能执行。 | P1 |
| TC-010 | 配置历史回滚 | 原因不足 5 字禁止回滚;已停用模型快照回滚失败;成功回滚生成新版本。 | P1 |
| TC-011 | 模型删除 | 近 30 天有调用记录禁止删除;无调用记录需输入模型名称确认。 | P1 |
| TC-012 | 风控事件处理 | 待处理事件可处理/忽略;处理后统计卡片刷新,按钮消失。 | P1 |
2. 待研发确认事项
- 前端当前部分操作为原型状态,如订单确认支付/取消订单、补发/扣减积分未完全落库,研发需补齐真实状态变更和接口。
- 积分扣减分摊流水建议后端返回明细,避免前端自行推导导致账务不一致。
- 审计日志“今日操作”当前源码写死日期,需要改为按当前自然日计算。
- 隐藏路由是否需要在正式侧边栏展示,需要产品确认权限策略。