## 目标
- 在运营管理中新增“头衔管理”菜单与页面 `/operations/titles`，支持称号列表与搜索、并提供为玩家分配称号的入口。
- 兼容当前两种菜单控制模式：前端模块路由与后端动态菜单；确保至少前端可见并可用。

## 变更项

### 前端路由与页面
- 路由：在 `web/admin/src/router/modules/operations.ts` 新增子路由 `titles`（`name: 'Titles'`，`component: '/operations/titles'`，`meta.title: '称号管理'`）。
- 页面：新增 `web/admin/src/views/operations/titles/index.vue`：
  - 列表：调用 `titlesApi.getList` 展示称号名称、状态、创建时间、描述；支持名称与状态筛选。
  - 操作：
    - 行内“分配称号”：弹出 `assign-title-dialog.vue`，为指定玩家分配称号。
    - （占位）创建/编辑/删除：预留按钮，后端 CRUD 未完成则禁用或隐藏。

### 前端 API
- 已有 `web/admin/src/api/titles.ts` 支持 `getList`、`assignToUser`；页面直接复用。

### 菜单显示（后端动态菜单模式）
- 后端菜单接口：`/api/v3/system/menus/simple` 已存在。
- 如需在后端模式下展示菜单：可在后台菜单管理中新增一条菜单记录（父节点为运营），`component: '/operations/titles'`，`name: 'Titles'`，`icon: 'ri:medal-line'`，`status: true`；当前计划不强制修改后端菜单数据，仅完成前端路由与页面以确保可见与可用。

## 验收
- 运营管理左侧菜单出现“称号管理”，进入后能搜索与查看称号列表。
- 行内“分配称号”打开弹窗，提交后接口返回成功并刷新列表。
- 前端构建通过；后端接口已就绪（列表与分配）。

确认后我将立即实施以上前端路由与页面接入，并在必要时协助配置后端菜单以在“后端控制菜单模式”下显示。