bindbox-game/.trae/documents/运营管理前端接入与玩家称号分配实现计划.md
邹方成 8141a47690
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
feat(称号系统): 新增称号管理功能与抽奖效果集成
- 新增系统称号模板与效果配置表及相关CRUD接口
- 实现用户称号分配与抽奖效果应用逻辑
- 优化抽奖接口支持用户ID参数以应用称号效果
- 新增称号管理前端页面与分配功能
- 修复Windows时区错误与JSON字段初始化问题
- 移除无用管理接口代码并更新文档说明
2025-11-16 11:37:40 +08:00

62 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 目标
- 在运营管理中接入“批量抽奖”并确保对话框正确对接后端接口(含用户搜索、期数选择、执行与验证)。
- 在玩家管理页新增“分配称号”功能:支持搜索玩家、选择系统称号并分配(含有效期与备注)。
## 改造与新增点
### 1. 批量抽奖对话框对接
- 位置:`web/admin/src/views/activity/rewards/modules/batch-draw-dialog.vue`
- 接口统一由 `@/api/adminActivities` 提供;若需要使用“带效果抽奖”后端路径,保持 URL 不变(后端已在同一路由替换为带效果执行),前端无需改参。
- 校验与交互:
- 期数下拉:数据源 `listActivityIssues(activityId)`(已存在)。
- 玩家搜索与选择:数据源 `listAdminUsers(params)`(已存在),保留分页与勾选逻辑。
- 批量执行:`batchDrawForUsers(activityId, issueId, { user_ids })`,展示收据与中奖汇总。
- 结果验证:`verifyDrawReceipt(activityId, issueId, body)` 保持结构一致。
- UI 微调:在结果区增加“效果标识”展示(若收据选中项名称带 `(x2)` 则以标签提示“奖励翻倍”)。
### 2. 玩家管理页新增“分配称号”
- 入口:`web/admin/src/views/player-manage/index.vue` 操作列新增按钮。
- 枚举:`web/admin/src/enums/tableActionEnum.ts` 增加 `ASSIGN_TITLE`,映射中文标签与图标。
- 弹窗组件(新增):`web/admin/src/views/player-manage/modules/assign-title-dialog.vue`
- 表单:
- 选择系统称号(下拉,数据源:`titlesApi.getList({page,page_size,name,status})`)。
- 可选:有效期(日期时间)、备注(文本)。
- 提交:`titlesApi.assignToUser(userId, { title_id, expires_at?, remark? })`,成功后 toast 并关闭。
- 前端 API新增`web/admin/src/api/titles.ts`
- `getList(params)``GET /api/admin/system_titles`(分页检索)。
- `assignToUser(userId, payload)``POST /api/admin/users/:user_id/titles`
- 玩家搜索集成:保留现有搜索栏 `player-search.vue`;在结果表行的操作列加入“分配称号”按钮,点击打开弹窗并携带当前 `user_id`
### 3. 后端路由与处理(需一并落地)
- 路由:`internal/router/router.go`
- 系统称号:`GET/POST/PUT/DELETE /api/admin/system_titles`
- 用户分配称号:`POST /api/admin/users/:user_id/titles`
- Handler`internal/api/admin/titles_admin.go`
- 列表、创建、修改、删除系统称号。
- 用户分配:校验头衔存在与启用状态,写入或更新 `user_titles`(保持 `user_id + title_id` 唯一,激活状态与有效期)。
- 复用服务/DAO`internal/repository/mysql/dao/*``internal/service/title/effects_resolver.go`(后续用于预览用户生效效果)。
## 交互与校验
- 分配称号:
- 重复分配处理:若用户已持有该称号,则更新 `expires_at`/`remark`/`active`
- 时间校验:`expires_at` 可空;若传入需晚于当前时间。
- 批量抽奖:
- 期数必选、用户列表非空;执行后展示收据与命中明细。
- 收据中的 `(x2)` 标签用于前端提示“奖励翻倍”。
## 验收与测试
- 前端:
- 玩家搜索能正常检索与分页;操作列新增“分配称号”按钮弹窗正常。
- 批量抽奖弹窗从运营管理入口可用,执行与验证接口成功,结果展示清晰。
- 后端:
- 系统称号列表与 CRUD 可用;用户分配称号接口成功写 `user_titles`
- 集成:
- 用户分配称号后,管理端批量抽奖能体现概率/双倍效果(已有后端支持)。
## 交付物
- 新增前端 API `titles.ts``assign-title-dialog.vue`
- 更新 `player-manage/index.vue``tableActionEnum.ts` 增加入口。
- 如需对批量抽奖对话框做 `(x2)` 标签显示,补充小型 UI 更新。
- 后端路由与 Handler 实现(称号 CRUD 与分配)。
确认后我将立即实施上述前后端改造,并进行编译与交互联调。