bindbox-game/.trae/documents/工会审核与成员管理完善.md
邹方成 6ee627139c
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 40s
feat: 新增支付测试小程序与微信支付集成
feat(pay): 添加支付API基础结构
feat(miniapp): 创建支付测试小程序页面与配置
feat(wechatpay): 配置微信支付参数与证书
fix(guild): 修复成员列表查询条件
docs: 更新代码规范文档与需求文档
style: 统一前后端枚举显示与注释格式
refactor(admin): 重构用户奖励发放接口参数处理
test(title): 添加称号效果参数验证测试
2025-11-17 00:42:08 +08:00

4.2 KiB
Raw Blame History

现状与缺口

  • 审核未落地: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/memberinternal/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_membersstatus=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/approvePOST .../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
    • 增加 fetchGetGuildApplicationsapproveGuildApplicationrejectGuildApplicationkickGuildMember
  • 成员页(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_applicationsDDL 与 gorm/gen 代码生成);对现有 guild_members 无破坏性更改。
  • 并发与一致性:审批通过与重复申请的幂等处理;用户离开后重新申请的限制延续。
  • 回滚策略:所有写操作事务化;失败回滚不影响既有功能。

请确认以上方案,确认后我将分步骤提交后端与前端改造,并补齐测试与文档。