## 现状与缺口
- 审核未落地：`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` 无破坏性更改。
- 并发与一致性：审批通过与重复申请的幂等处理；用户离开后重新申请的限制延续。
- 回滚策略：所有写操作事务化；失败回滚不影响既有功能。

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