Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
- 新增系统称号模板与效果配置表及相关CRUD接口 - 实现用户称号分配与抽奖效果应用逻辑 - 优化抽奖接口支持用户ID参数以应用称号效果 - 新增称号管理前端页面与分配功能 - 修复Windows时区错误与JSON字段初始化问题 - 移除无用管理接口代码并更新文档说明
62 lines
3.9 KiB
Markdown
62 lines
3.9 KiB
Markdown
## 目标
|
||
- 在运营管理中接入“批量抽奖”并确保对话框正确对接后端接口(含用户搜索、期数选择、执行与验证)。
|
||
- 在玩家管理页新增“分配称号”功能:支持搜索玩家、选择系统称号并分配(含有效期与备注)。
|
||
|
||
## 改造与新增点
|
||
|
||
### 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 与分配)。
|
||
|
||
确认后我将立即实施上述前后端改造,并进行编译与交互联调。 |