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