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

4.9 KiB
Raw Blame History

目标

  • 在运营管理中新增“称号模板与规则”页面,支持创建/编辑/删除称号(含获取规则 obtain_rules_json 与作用域 scopes_json
  • 新增“称号效果配置”页面(或同页二级标签),支持为每个称号新增/编辑效果项,覆盖六类功能:领取优惠券、抽奖折扣、签到倍数、领取道具卡、概率加成、双倍奖励。
  • 所有配置直写到既有表:system_titlessystem_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_idperiod(day|week|month)times(生成 {template_id,frequency:{period,times}}
      • 抽奖折扣:discount_type(percentage|fixed)value_x1000max_discount_x1000?min_price?
      • 签到倍数:multiplier_x1000daily_cap_points?
      • 领取道具卡:template_idperiodtimes
      • 概率加成:target_prize_ids[](从奖励列表选择)、boost_x1000cap_x1000?combine(sum|max)
      • 双倍奖励:target_prize_ids[]chance_x1000period_cap_times?
      • 通用:stacking_strategycap_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接口与前端页面两个弹窗/二级标签),并完成联调与校验。