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