Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
- 新增系统称号模板与效果配置表及相关CRUD接口 - 实现用户称号分配与抽奖效果应用逻辑 - 优化抽奖接口支持用户ID参数以应用称号效果 - 新增称号管理前端页面与分配功能 - 修复Windows时区错误与JSON字段初始化问题 - 移除无用管理接口代码并更新文档说明
66 lines
4.9 KiB
Markdown
66 lines
4.9 KiB
Markdown
## 目标
|
||
- 在运营管理中新增“称号模板与规则”页面,支持创建/编辑/删除称号(含获取规则 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接口与前端页面(两个弹窗/二级标签),并完成联调与校验。 |