## 目标 - 在运营管理中新增“称号模板与规则”页面,支持创建/编辑/删除称号(含获取规则 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接口与前端页面(两个弹窗/二级标签),并完成联调与校验。