Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 40s
feat(pay): 添加支付API基础结构 feat(miniapp): 创建支付测试小程序页面与配置 feat(wechatpay): 配置微信支付参数与证书 fix(guild): 修复成员列表查询条件 docs: 更新代码规范文档与需求文档 style: 统一前后端枚举显示与注释格式 refactor(admin): 重构用户奖励发放接口参数处理 test(title): 添加称号效果参数验证测试
58 lines
4.2 KiB
Markdown
58 lines
4.2 KiB
Markdown
## 现状与缺口
|
||
- 审核未落地:`internal/service/guild/join.go:13-48` 加入逻辑固定写 `JoinStatus=2`(同意),未按 `join_mode=1` 走待审流程;接口仅 `JoinGuild/LeaveGuild`,无审批。
|
||
- 管理端缺踢人:仅成员列表 `internal/api/admin/guild_members.go:42-73`;前端成员页无操作列 `web/admin/src/views/guild/members/index.vue:30-35`。
|
||
- 角色字段未赋权:虽有 `owner/admin/member`(`internal/repository/mysql/model/guild_members.gen.go:19-23`),但未做权限绑定与校验。
|
||
|
||
## 目标与范围
|
||
- 增加「加入申请与审核」能力:支持待审、通过、拒绝;仅当 `join_mode=1` 生效。
|
||
- 增加「成员剔除」能力:管理端支持踢人,并记录操作日志。
|
||
- 基础优化:完善角色权限(会长/官员)、分页/检索一致性、接口与 Swagger 描述对齐。
|
||
|
||
## 后端改造
|
||
- 模型与数据流
|
||
- 新增表 `guild_join_applications`(推荐方案):字段 `id/guild_id/user_id/apply_time/status(0待审,1通过,2拒绝)/reviewer_id/review_time/remark`。
|
||
- `JoinGuild` 改造:
|
||
- 当 `join_mode=1` 时,仅写一条 `applications(pending)`,不立即写 `guild_members`;返回“申请已提交”。
|
||
- 当 `join_mode=2` 时,维持现状直接入会(`JoinStatus=2`)。
|
||
- 为兼容保留 24h 离开限制与重复加入校验。
|
||
- 审批动作:
|
||
- 通过:写 `guild_members`(`status=1, role=member, start_time=now, join_status=2`),并更新申请为 `approved`;拒绝:仅更新申请为 `rejected`。
|
||
- 踢人动作:新增服务 `KickMember(ctx, guildID, userID)`,仅将成员 `status=2` 并回写时间;禁止踢会长自身,需先转移会长。
|
||
- 服务接口(`internal/service/guild/guild.go`)
|
||
- 新增:`ListApplications/ApproveApplication/RejectApplication/KickMember` 方法。
|
||
- 控制器与路由(Admin)
|
||
- `GET /api/admin/guilds/:guild_id/applications` 列表(分页、按状态过滤)。
|
||
- `POST /api/admin/guilds/:guild_id/applications/:id/approve`、`POST .../reject`。
|
||
- `DELETE /api/admin/guilds/:guild_id/members/:user_id` 踢人。
|
||
- 接口均校验:`IsSuper==1`(现行规则),并记录操作日志(`log_operation`)。
|
||
- 控制器与路由(App,可选)
|
||
- `POST /api/app/guilds/:guild_id/applications` 提交申请;`GET /api/app/guilds/:guild_id/applications/:id` 查询状态。
|
||
- 查询一致性
|
||
- 成员列表 `internal/service/guild/members_list.go:9-29` 保持 `status=1` 过滤;无需受待审数据影响。
|
||
|
||
## 管理端前端改造
|
||
- API 封装(`web/admin/src/api/guild.ts`)
|
||
- 增加 `fetchGetGuildApplications`、`approveGuildApplication`、`rejectGuildApplication`、`kickGuildMember`。
|
||
- 成员页(`web/admin/src/views/guild/members/index.vue`)
|
||
- 增加操作列与「踢出」按钮;调用 `kickGuildMember`,成功后刷新当前页。
|
||
- 新增「申请审核」页
|
||
- 列表展示:用户ID、申请时间、状态;提供「通过/拒绝」操作;支持按状态筛选与分页。
|
||
- 路由与菜单
|
||
- 在 `web/admin/src/router/modules/guild.ts` 增加“工会申请审核”菜单。
|
||
|
||
## 权限与审计
|
||
- 权限:管理端暂按 `IsSuper==1`;后续可拓展为“会长/官员”在 App 端可审与踢人(基于 `GuildMembers.Role` 校验)。
|
||
- 审计:所有审批与踢人动作写入 `log_operation`,包含 guild_id/user_id/reviewer_id/动作/结果。
|
||
|
||
## 验收标准
|
||
- 加入审核:当 `join_mode=1` 时,提交申请后在管理端可见;可通过/拒绝;通过后出现在成员列表。
|
||
- 成员剔除:管理端成员页出现「踢出」操作,成功后该成员不再出现在成员列表;禁止踢会长。
|
||
- 权限:非超管无法访问管理端相关接口;错误提示与状态码规范。
|
||
- 文档:Swagger 增补新端点与模型;接口参数与响应示例完整。
|
||
|
||
## 风险与兼容
|
||
- 数据迁移:新增 `guild_join_applications` 表(DDL 与 gorm/gen 代码生成);对现有 `guild_members` 无破坏性更改。
|
||
- 并发与一致性:审批通过与重复申请的幂等处理;用户离开后重新申请的限制延续。
|
||
- 回滚策略:所有写操作事务化;失败回滚不影响既有功能。
|
||
|
||
请确认以上方案,确认后我将分步骤提交后端与前端改造,并补齐测试与文档。 |