bindbox-game/.trae/documents/运营端称号规则与效果配置页面实现计划.md
邹方成 8141a47690
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
feat(称号系统): 新增称号管理功能与抽奖效果集成
- 新增系统称号模板与效果配置表及相关CRUD接口
- 实现用户称号分配与抽奖效果应用逻辑
- 优化抽奖接口支持用户ID参数以应用称号效果
- 新增称号管理前端页面与分配功能
- 修复Windows时区错误与JSON字段初始化问题
- 移除无用管理接口代码并更新文档说明
2025-11-16 11:37:40 +08:00

66 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 目标
- 在运营管理中新增“称号模板与规则”页面,支持创建/编辑/删除称号(含获取规则 obtain_rules_json 与作用域 scopes_json
- 新增“称号效果配置”页面(或同页二级标签),支持为每个称号新增/编辑效果项,覆盖六类功能:领取优惠券、抽奖折扣、签到倍数、领取道具卡、概率加成、双倍奖励。
- 所有配置直写到既有表:`system_titles``system_title_effects`并保证JSON合法与可视化表单输入。
## 后端接口CRUD
- 系统称号Templates
- `GET /api/admin/system_titles`分页检索name/status返回 list/total。
- `POST /api/admin/system_titles`:创建称号,入参:`name, description?, status, obtain_rules_json(字符串JSON), scopes_json(字符串JSON)`
- `PUT /api/admin/system_titles/:title_id`:修改;字段同上。
- `DELETE /api/admin/system_titles/:title_id`:删除(可选:级联删除该称号的效果项,需二次确认)。
- 称号效果Effects
- `GET /api/admin/system_titles/:title_id/effects`列表status/effect_type筛选
- `POST /api/admin/system_titles/:title_id/effects`:新增效果;入参:`effect_type, params_json(字符串JSON), stacking_strategy, cap_value_x1000?, scopes_json?, sort, status`
- `PUT /api/admin/system_titles/:title_id/effects/:effect_id`:修改;字段同上。
- `DELETE /api/admin/system_titles/:title_id/effects/:effect_id`:删除。
- 校验与约束
- `obtain_rules_json`/`scopes_json`/`params_json`必须为合法JSON默认 `{}`),否则拒绝并提示。
- `stacking_strategy` 枚举校验0 最大值、1 累加封顶、2 首个匹配。
- `cap_value_x1000`、各类 `*_x1000` 必须为非负整数;必要时设上限。
## 前端页面
- 菜单位置:`运营管理 → 称号管理`(保持现有入口),页面内使用二级标签:
- Tab1称号模板列表 + 新建/编辑弹窗)
- Tab2效果配置左侧选择称号或从行操作进入右侧效果列表 + 新建/编辑弹窗)
- 表单设计
- 称号模板弹窗:
- 基本:名称、描述、状态(启用/停用)
- 获取规则 obtain_rules_json可视化构建器单选/多选项生成JSON
- 任务达成:`{"type":"mission","mission_id":...,"times":...}`
- 等级达成:`{"type":"level","level":...}`
- 支付购买:`{"type":"purchase","product_id":...,"price":...}`
- 手动发放:`{"type":"manual"}`(缺省)
- 作用域 scopes_json选择活动分类/活动/期次,生成:`{"activity_ids":[],"issue_ids":[],"category_ids":[],"exclude":{...}}`
- 效果配置弹窗(按效果类型动态渲染表单):
- 领取优惠券:`template_id``period(day|week|month)``times`(生成 `{template_id,frequency:{period,times}}`
- 抽奖折扣:`discount_type(percentage|fixed)``value_x1000``max_discount_x1000?``min_price?`
- 签到倍数:`multiplier_x1000``daily_cap_points?`
- 领取道具卡:`template_id``period``times`
- 概率加成:`target_prize_ids[]`(从奖励列表选择)、`boost_x1000``cap_x1000?``combine(sum|max)`
- 双倍奖励:`target_prize_ids[]``chance_x1000``period_cap_times?`
- 通用:`stacking_strategy``cap_value_x1000?``scopes_json`(可与模板一致或另设)
- 预览与校验
- JSON编辑器只读预览框展示最终写库JSON前置校验拒绝非法JSON。
- “合并效果预览”按钮:传 `user_id+context` 调用预览接口(可后续实现),便于运营核对。
## 前端技术点
- 组件复用:沿用 `ArtTable/ArtSearchBar/ArtButtonTable` 模式,仿照“道具卡/优惠券”页面实现。
- 表单动态:根据 `effect_type` 切换字段与校验;内置枚举与字典展示中文标签。
- 交互创建成功后刷新列表编辑表单带现有JSON -> 反序列化填入表单。
## 数据与合法性
- 所有 JSON 列默认值使用 `{}`,避免“空文档”错误。
- 金额/比例/倍数统一使用 `x1000` 固定小数避免精度误差。
- 删除称号时,如启用“级联删除效果”需弹窗确认;否则保留效果项以供审计。
## 验收
- 运营可在页面新建/编辑称号模板(含获取规则与作用域),保存成功并后端入库。
- 运营可在页面为指定称号新增/编辑各类效果,保存后生效(后续事件引擎读取)。
- 列表检索与状态切换可用所有JSON合法校验通过非法输入有明确错误提示。
## 后续可选
- 效果预览接口:`GET /api/admin/effects/preview?user_id&context`,返回按叠加策略后的生效明细。
- 审计日志:记录模板与效果的变更历史、操作者与时间。
确认后我将按上述计划补充后端CRUD接口与前端页面两个弹窗/二级标签),并完成联调与校验。