Files
im_manager/docs/admin-adfahi-research/需求文档.md
T

1463 lines
54 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.
# 鸽达达管理后台复刻需求文档
调研对象:https://admin.adfahi.cn
调研时间:2026-09-04
当前登录账号视角:`heiyue`
目标:在本项目中复刻一套功能与页面结构一致的 IM 管理后台。
> 说明:本次通过内置浏览器逐项点击左侧菜单,进入页面后对有查询按钮的页面执行了“查询/查 询”,再采集当前可视区域截图、可见字段、表格列、操作按钮,并下载前端 bundle 反查接口路径。浏览器只读执行环境屏蔽了 `fetch/XMLHttpRequest`,因此未能直接读取接口 JSON body;本文档中的返回字段以页面查询后的渲染结果和前端接口定义反推。
## 0. 本次修订说明
根据补充要求,已做以下修订:
- 截图从原先整页长图改为“当前可视区域截图”,减少大面积空白,更接近实际浏览器视图。
- 每个列表页进入后均点击查询按钮;`群成员管理` 因群号必填,使用群组列表中已有群号 `68127154` 查询,已展示成员数据。
- 单聊消息、群聊消息、文件管理、日志审计、用户登录、IP 统计、登录失败日志等页面查询后均展示了数据。
- 邀请码管理已查询到数据;敏感词库、用户反馈当前查询结果为空,需求文档中按“需支持空态”记录。
- 文档已在每个 `3.x` 页面章节内补充接口字段、查询参数、返回字段、按钮功能、表格字段、枚举、业务动作、危险操作确认、导入导出、分页和空态说明。
- 新截图保存在 `docs/admin-adfahi-research/screenshots-queried/`。
## 1. 总体信息架构
左侧菜单分为 5 个一级模块,当前账号可见 20 个页面:
| 一级模块 | 页面 | 前端路由 |
| --- | --- | --- |
| 数据概览 | 数据概览 | `/dashboard` |
| 用户与群组 | 用户管理 | `/users` |
| 用户与群组 | 用户分组 | `/user-policy-groups` |
| 用户与群组 | 群组管理 | `/groups` |
| 用户与群组 | 群成员管理 | `/group-members` |
| 用户与群组 | 邀请码管理 | `/invite-codes` |
| 内容审核 | 单聊消息 | `/private-messages` |
| 内容审核 | 群聊消息 | `/group-messages` |
| 内容审核 | 敏感词库 | `/sensitive-words` |
| 内容审核 | 文件管理 | `/file-records` |
| 内容审核 | 用户反馈 | `/feedbacks` |
| 日志审计 | 操作日志 | `/audit-logs` |
| 日志审计 | 用户账号审计 | `/user-account-audit` |
| 日志审计 | 群事件审计 | `/group-events` |
| 日志审计 | 管理员登录 | `/admin-login-history` |
| 日志审计 | 用户登录 | `/user-login-history` |
| 日志审计 | IP 账号统计 | `/ip-user-stats` |
| 日志审计 | 登录失败日志 | `/login-failure-logs` |
| 系统设置 | 私域设置 | `/tenant-settings` |
| 系统设置 | 安全策略 | `/security-settings` |
菜单总览截图:
![菜单总览](screenshots-queried/00-menu-overview.png)
## 2. 全局布局与交互
后台采用典型管理系统布局:
- 左侧固定菜单,支持一级菜单展开/收起。
- 顶部显示当前账号头像、用户名、账户操作入口。
- 主区域顶部有多标签页导航,打开过的页面会以 tab 形式保留,可关闭。
- 列表页统一具备查询区、操作按钮区、表格、分页。
- 详情、编辑、重置密码、IP 白名单、处理反馈、分组设置等操作预计以弹窗完成。
- 危险操作需要二次确认,包括封禁、强制下线、强制注销、解散群、删除文件、删除敏感词、解锁账号等。
建议在本项目中按 HotGo 规范实现:后端 GoFrame 分层,前端 Vue 3 + Naive UI,枚举/字典由后端统一维护,前端不硬编码字典文本。
## 3. 页面需求
### 3.1 数据概览
路由:`/dashboard`
接口:`GET /admin/stats`
页面展示统计卡片和趋势表:
- 总用户数:16
- 活跃用户:0
- 总群组数:6
- 总会话数:11
- 总消息数:220
- 今日消息:0
- 用户增长趋势:日期、数量
- 消息增长趋势:日期、数量
字段与数据口径:
| 字段 | 接口字段建议 | 含义 | 展示/统计规则 |
| --- | --- | --- | --- |
| 总用户数 | `total_users` | 当前租户用户总量 | 建议统计未物理删除用户,可包含正常、封禁、注销 |
| 活跃用户 | `active_users` | 近期活跃用户 | 建议按当天或近 7 天登录/发消息口径统计 |
| 总群组数 | `total_groups` | 当前租户群组总量 | 建议包含正常和封禁群,已解散群是否计入需配置 |
| 总会话数 | `total_conversations` | 单聊和群聊会话总数 | 按会话去重统计 |
| 总消息数 | `total_messages` | 历史消息总量 | 包含文本、图片、视频、语音、文件、名片、系统消息 |
| 今日消息 | `today_messages` | 当日新增消息数 | 按服务器时区从 00:00 统计 |
| 用户增长趋势 | `user_growth[]` | 最近 7 天新增用户 | 元素包含 `date`、`count` |
| 消息增长趋势 | `message_growth[]` | 最近 7 天新增消息 | 元素包含 `date`、`count` |
按钮与交互:
- 本页无查询按钮,进入页面自动调用统计接口。
- 统计卡片为空时数字显示 `0`,趋势表仍展示日期行,数量为 `0`。
- 页面需支持后续扩展为折线图,但必须保留日期和数量明细。
截图:
![数据概览](screenshots-queried/01-dashboard.png)
### 3.2 用户管理
路由:`/users`
核心接口:
- `GET /admin/users`
- `POST /admin/users`
- `GET /admin/users/{id}`
- `PATCH /admin/users/{id}/status`
- `POST /admin/users/{id}/reset_password`
- `POST /admin/users/{id}/ip-whitelist`
- `POST /admin/users/{id}/kick`
- `POST /admin/users/{id}/deactivate`
- `POST /admin/users/batch`
- `POST /admin/users/batch-ban`
- `POST /admin/users/ban-by-ip`
- `POST /admin/users/import-xlsx`
查询条件:
- 用户编号
- 用户分组
- 状态
- 关键词:用户名、昵称、手机号
顶部操作:
- 创建用户
- 批量创建
- 导入 Excel
- 下载模板
表格列:
- 编号
- 头像
- 用户名
- 昵称
- 手机号
- 注册方式
- 状态
- 用户分组
- 最近登录
- 创建时间
- 操作
行操作:
- 详情
- 重置密码
- IP 白名单
- 调整分组
- 封禁
- 强制下线
- 强制注销
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查 询 | 按条件筛选用户 | `GET /admin/users` | 点击后页码回到第 1 页;支持编号、分组、状态、关键词组合查询 |
| 重 置 | 清空筛选条件 | `GET /admin/users` | 清空编号、用户分组、状态、关键词后重新查询 |
| 创建用户 | 后台新增单个用户 | `POST /admin/users` | 弹窗填写昵称、手机号、密码、用户分组;平台账号还需选择租户;密码受安全策略限制 |
| 批量创建 | 批量生成用户 | `POST /admin/users/batch` | 支持批量数量、默认密码、默认分组;完成后展示成功/失败并支持下载结果 |
| 导入Excel | Excel 批量导入用户 | `POST /admin/users/import-xlsx` | 上传 `.xlsx`;模板列为昵称、手机号、密码;返回成功数、失败数、失败原因 |
| 下载模板 | 下载导入模板 | 静态生成或导出接口 | 模板示例字段:昵称、手机号、密码 |
| 详 情 | 查看用户详情 | `GET /admin/users/{id}` | 展示基础资料、状态、分组、最近登录、IP 白名单、安全权限等 |
| 重置密码 | 管理员重置密码 | `POST /admin/users/{id}/reset_password` | 弹窗输入新密码或生成密码;成功后写用户账号审计 |
| IP白名单 | 设置用户登录白名单 | `POST /admin/users/{id}/ip-whitelist` | 多行 IP/CIDR;用户白名单不覆盖全局登录 IP 黑名单 |
| 调整分组 | 修改用户策略组 | 用户分组分配接口 | 立即影响好友、建群、APP/Web 登录等权限 |
| 封 禁 / 解封 | 切换用户状态 | `PATCH /admin/users/{id}/status` | 封禁后撤销在线会话并禁止登录;需二次确认 |
| 强制下线 | 踢出在线终端 | `POST /admin/users/{id}/kick` | 不改变用户状态,仅撤销当前登录态 |
| 强制注销 | 注销用户账号 | `POST /admin/users/{id}/deactivate` | 高危操作,需二次确认;注销后按规则清理用户数据 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 编号 | `user_no` | 对外展示的用户编号 | 数字,支持精确查询 |
| 头像 | `avatar` | 用户头像 URL | 显示缩略图;无头像显示默认头像;支持点击查看 |
| 用户名 | `username` | 用户登录名/IM 账号 | 样例:`hy73074162` |
| 昵称 | `nickname` | 用户显示名 | 允许为空,空值显示 `--` |
| 手机号 | `mobile` / `phone` | 绑定手机号 | 建议脱敏展示 |
| 注册方式 | `register_type` | 用户来源 | 后台创建、手机号注册、邀请码注册 |
| 状态 | `status` | 账号状态 | 正常绿色、封禁红色、注销灰色 |
| 用户分组 | `policy_group_name` | 所属策略组 | 样例:默认用户组 |
| 最近登录 | `last_login_at` | 最近一次登录时间 | 无记录显示 `--` |
| 创建时间 | `created_at` | 用户创建时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 用户状态:`active` 正常、`disabled` 已封禁、`deleted` 已注销。
- 注册方式:`admin` 后台创建、`mobile` 手机号注册、`invite_code` 邀请码注册。
- 批量封禁结果:`success` 成功、`failed` 失败,失败项需返回 `username` 和 `reason`。
截图:
![用户管理](screenshots-queried/02-user-management.png)
### 3.3 用户分组
路由:`/user-policy-groups`
核心接口:
- `GET /admin/user-policy-groups`
- `POST /admin/user-policy-groups`
- `PUT /admin/user-policy-groups/{id}`
- `DELETE /admin/user-policy-groups/{id}`
- `GET /admin/user-policy-groups/{id}/users`
- `GET/POST /admin/user-policy-groups/ip-whitelist`
顶部操作:
- 添加分组
- IP 白名单
表格列:
- 分组名称
- 用户数
- 允许加好友
- 允许建群
- 直接加好友
- 好友上限
- APP 登录
- Web 登录
- IP 白名单
- 状态
- 权重
- 操作
编辑分组字段:
- 分组名称
- 默认用户组
- 启用状态
- 允许加好友
- 允许建群
- 直接添加好友
- 允许 APP 登录
- 允许 Web 登录
- 启用 IP 白名单
- 好友数量上限,0 表示不限
- 排序权重
IP 白名单字段:
- APP 登录白名单,每行一个 IPv4、IPv6 或 CIDR
- Web 登录白名单,每行一个 IPv4、IPv6 或 CIDR
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 添加分组 | 新建用户策略组 | `POST /admin/user-policy-groups` | 弹窗填写分组名称、开关权限、好友上限、排序权重 |
| IP 白名单 | 设置租户渠道白名单 | `GET/POST /admin/user-policy-groups/ip-whitelist` | 分 APP 登录白名单和 Web 登录白名单,每行一个 IP/CIDR |
| 编辑 | 修改策略组 | `PUT /admin/user-policy-groups/{id}` | 默认分组部分字段需禁用,避免系统无默认组 |
| 删除 | 删除策略组 | `DELETE /admin/user-policy-groups/{id}` | 默认用户组不可删除;分组下有用户时应阻止或要求迁移 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 分组名称 | `name` | 策略组名称 | 默认组显示“默认”标记 |
| 用户数 | `user_count` | 分组下用户数量 | 可扩展点击查看用户列表 |
| 允许加好友 | `allow_add_friend` | 是否允许主动加好友 | 允许/禁止 |
| 允许建群 | `allow_create_group` | 是否允许创建群 | 允许/禁止 |
| 直接加好友 | `direct_add_friend` | 加好友是否免确认 | 开启显示开启,关闭显示 `--` |
| 好友上限 | `max_friend_count` | 最大好友数量 | `0` 显示不限 |
| APP 登录 | `allow_app_login` | 是否允许 APP 登录 | 允许/禁止 |
| Web 登录 | `allow_web_login` | 是否允许 Web 登录 | 允许/禁止 |
| IP 白名单 | `ip_whitelist_enabled` | 是否启用分组白名单 | 已启用/未启用 |
| 状态 | `enabled` | 分组是否生效 | 启用/停用 |
| 权重 | `sort_order` | 排序或匹配优先级 | 数字 |
枚举说明:
- 布尔权限统一为 `true/false`,前端按字段语义显示为允许/禁止、启用/停用、开启/关闭。
- 好友上限 `0` 代表不限。
- IP 白名单启用后,APP/Web 登录需命中对应白名单;全局黑名单优先级高于白名单。
截图:
![用户分组](screenshots-queried/03-user-groups.png)
### 3.4 群组管理
路由:`/groups`
核心接口:
- `GET /admin/groups`
- `GET /admin/groups/{id}`
- `POST /admin/groups/{id}/ban`
- `POST /admin/groups/{id}/unban`
- `DELETE /admin/groups/{id}`
- `GET /admin/groups/{id}/members`
- `GET /admin/groups/{id}/files`
- `DELETE /admin/groups/{id}/files/{fileId}`
- `POST /admin/groups/quick-create`
查询条件:
- 群号
- 关键词:群名称
- 状态
表格列:
- 群组编号
- 群号
- 群组名称
- 成员数
- 群主昵称
- 群主用户名
- 状态
- 创建时间
- 操作
行操作:
- 详情
- 群文件
- 封禁
- 解散
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查 询 | 按群号、群名、状态筛选 | `GET /admin/groups` | 点击后页码回到第 1 页 |
| 重 置 | 清空筛选条件 | `GET /admin/groups` | 清空群号、关键词、状态后重新查询 |
| 详 情 | 查看群详情 | `GET /admin/groups/{id}` | 展示群号、群名、群主、成员数、状态、创建时间 |
| 群文件 | 查看群文件 | `GET /admin/groups/{id}/files` | 弹窗列表支持类型筛选、下载、删除 |
| 封 禁 / 解封 | 切换群状态 | `POST /admin/groups/{id}/ban`、`POST /admin/groups/{id}/unban` | 封禁后群内不可发送消息;需记录群事件审计 |
| 解 散 | 解散群聊 | `DELETE /admin/groups/{id}` | 高危操作,需二次确认;清理成员关系,保留历史记录 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 群组编号 | `id` | 群内部编号 | 数字 |
| 群号 | `group_no` / `group_code` | 用户端可搜索群号 | 支持精确查询 |
| 群组名称 | `name` | 群显示名称 | 样例:冯、冯氏家族 |
| 成员数 | `member_count` | 当前成员数量 | 数字 |
| 群主昵称 | `owner_nickname` | 群主昵称 | 空值显示 `--` |
| 群主用户名 | `owner_username` | 群主用户名 | 样例:`hy69089908` |
| 状态 | `status` | 群状态 | 正常/封禁/已解散 |
| 创建时间 | `created_at` | 群创建时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 群组状态:`normal` 正常、`banned` 已封禁、`dissolved` 已解散。
- 群文件类型:图片、视频、音频、文档、其他。
截图:
![群组管理](screenshots-queried/04-group-management.png)
### 3.5 群成员管理
路由:`/group-members`
接口依赖:
- `GET /admin/groups/{id}/members`
- `POST /admin/groups/{id}/members/kick`
- `POST /admin/groups/{id}/members/mute`
- `POST /admin/groups/{id}/members/unmute`
查询条件:
- 群号,必填
- 角色
- 关键词:用户名、昵称
表格列:
- 编号
- 用户名
- 昵称
- 群昵称
- 角色
- 禁言状态
- 加入时间
- 操作
顶部操作:
- 查询
- 重置
- 刷新
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查 询 | 按群号查询成员 | `GET /admin/groups/{id}/members` | 群号必填;需先按群号解析群 ID |
| 重 置 | 清空群号、角色、关键词 | - | 清空后表格回到空态 |
| 刷 新 | 保持当前条件刷新 | `GET /admin/groups/{id}/members` | 不清空已输入群号 |
| 禁 言 / 解除禁言 | 设置成员禁言状态 | `POST /admin/groups/{id}/members/mute`、`POST /admin/groups/{id}/members/unmute` | 需填写禁言时长/原因;写群事件审计 |
| 踢 出 | 将成员移出群 | `POST /admin/groups/{id}/members/kick` | 需二次确认;群主不可直接踢出 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 编号 | `user_no` | 成员用户编号 | 样例:3 |
| 用户名 | `username` | 成员用户名 | 样例:`hy69089908` |
| 昵称 | `nickname` | 成员昵称 | 样例:F |
| 群昵称 | `group_nickname` | 群内昵称 | 空值显示 `--` |
| 角色 | `role` | 群角色 | 群主/管理员/成员 |
| 禁言状态 | `mute_status` | 是否禁言 | 正常/已禁言 |
| 加入时间 | `joined_at` | 入群时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 群成员角色:`owner` 群主、`admin` 管理员、`member` 成员。
- 禁言状态:`normal` 正常、`muted` 已禁言。
- 本次查询样例使用群号 `68127154`,查询到成员 `hy69089908 / F`,角色为群主。
截图:
![群成员管理](screenshots-queried/05-group-members.png)
### 3.6 邀请码管理
路由:`/invite-codes`
核心接口:
- `GET /admin/invite-codes`
- `POST /admin/invite-codes`
- `DELETE /admin/invite-codes/{id}`
- `GET /admin/invite-codes/{id}/usages`
查询条件:
- 状态
- 邀请码,6 位数字
顶部操作:
- 生成邀请码
业务说明:
- 每次生成 1 个邀请码,可多次使用。
- 可指定企业与用户。
- 可勾选不限制时间,永久有效。
- 可开启自动加好友,使用该码注册的用户直接成为指定用户好友。
- 可查看使用该邀请码注册的用户列表。
表格列:
- 邀请码
- 指定用户
- 自动加好友
- 使用人数
- 创建人
- 状态
- 过期时间
- 创建时间
- 操作
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查 询 | 按状态/邀请码筛选 | `GET /admin/invite-codes` | 邀请码为 6 位数字 |
| 重 置 | 清空状态和邀请码 | `GET /admin/invite-codes` | 回到全部列表 |
| 生成邀请码 | 创建邀请码 | `POST /admin/invite-codes` | 可指定用户、有效期、是否自动加好友;生成 6 位数字码 |
| 查 看 | 查看使用记录 | `GET /admin/invite-codes/{id}/usages` | 展示使用该码注册的用户列表 |
| 删 除 | 删除/停用邀请码 | `DELETE /admin/invite-codes/{id}` | 已使用邀请码建议标记停用,不物理删除 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 邀请码 | `code` | 6 位数字邀请码 | 样例:323441 |
| 指定用户 | `target_username` / `target_user_no` | 注册后绑定或自动加好友目标 | 样例:往事随风 (#2271) |
| 自动加好友 | `auto_add_friend` | 是否自动成为指定用户好友 | 是/否 |
| 使用人数 | `used_count` | 已使用注册人数 | 可点击查看详情 |
| 创建人 | `creator_name` / `creator_id` | 创建者 | 当前样例显示编号 16 |
| 状态 | `status` | 邀请码状态 | 启用/停用/过期 |
| 过期时间 | `expired_at` | 有效期截止时间 | 永久显示“不限制”或“永久” |
| 创建时间 | `created_at` | 创建时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 邀请码状态:`active` 启用、`disabled` 停用、`expired` 过期。
- 自动加好友:`true` 是、`false` 否。
截图:
![邀请码管理](screenshots-queried/06-invite-codes.png)
### 3.7 单聊消息
路由:`/private-messages`
核心接口:
- `GET /admin/messages/search`
- `GET /admin/messages/{id}`
查询条件:
- 消息类型:全部、文本、图片、视频、语音、文件、名片、系统
- 发送人用户名
- 接收人用户名
- 关键词
- 开始时间
- 结束时间
表格列:
- 发送人
- 接收人
- 类型
- 内容
- 状态
- 发送时间
- 操作
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查 询 | 按消息条件检索 | `GET /admin/messages/search` | 查询参数含 `conversation_type=private` |
| 重 置 | 清空筛选条件 | `GET /admin/messages/search` | 清空消息类型、发送人、接收人、关键词、时间 |
| 刷 新 | 保持当前条件刷新 | `GET /admin/messages/search` | 不改变页码和筛选条件 |
| 删 除 | 删除或隐藏消息 | 消息删除接口 | 需二次确认;写内容审核/操作日志 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 发送人 | `sender_nickname`、`sender_username` | 发送方用户 | 两行展示昵称和用户名 |
| 接收人 | `receiver_nickname`、`receiver_username` | 接收方用户 | 两行展示昵称和用户名 |
| 类型 | `message_type` | 消息类型 | 文本/图片/视频/语音/文件/名片/系统 |
| 内容 | `content` | 消息摘要 | 文本直接展示,媒体显示预览/下载 |
| 状态 | `status` | 消息状态 | 正常/已删除/已撤回/拦截 |
| 发送时间 | `sent_at` | 消息发送时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 消息类型:`text` 文本、`image` 图片、`video` 视频、`voice/audio` 语音、`file` 文件、`card` 名片、`system` 系统。
- 消息状态:`normal` 正常、`deleted` 后台删除、`recalled` 用户撤回、`blocked` 风控拦截。
- 查询后样例:`F / hy69089908` 给 `冯仁飞 / hy91144536` 发送文本 `哈哈哈哈`。
截图:
![单聊消息](screenshots-queried/07-direct-messages.png)
### 3.8 群聊消息
路由:`/group-messages`
核心接口:
- `GET /admin/messages/search`
- `GET /admin/messages/{id}`
查询条件:
- 消息类型:全部、文本、图片、视频、语音、文件、名片、系统
- 发送人用户名
- 关键词
- 开始时间
- 结束时间
表格列:
- 发送人
- 群名称
- 类型
- 内容
- 状态
- 发送时间
- 操作
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查 询 | 按群聊消息条件检索 | `GET /admin/messages/search` | 查询参数含 `conversation_type=group` |
| 重 置 | 清空筛选条件 | `GET /admin/messages/search` | 清空消息类型、发送人、关键词、时间 |
| 刷 新 | 保持当前条件刷新 | `GET /admin/messages/search` | 不改变页码和筛选条件 |
| 删 除 | 删除或隐藏群消息 | 消息删除接口 | 需二次确认;建议写群事件/内容审核日志 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 发送人 | `sender_nickname`、`sender_username` | 发送方用户 | 两行展示 |
| 群名称 | `group_name`、`group_no` | 消息所属群 | 两行展示群名和群号 |
| 类型 | `message_type` | 消息类型 | 文本/图片/视频/语音/文件/名片/系统 |
| 内容 | `content` | 消息摘要 | 文本展示内容,媒体展示预览/下载 |
| 状态 | `status` | 消息状态 | 正常/已删除/已撤回/拦截 |
| 发送时间 | `sent_at` | 发送时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 消息类型和消息状态同单聊消息。
- 查询后样例:`F / hy69089908` 在群 `冯 / 68127154` 发送文本 `哈哈哈哈`。
截图:
![群聊消息](screenshots-queried/08-group-messages.png)
### 3.9 敏感词库
路由:`/sensitive-words`
核心接口:
- `GET /admin/sensitive-words`
- `POST /admin/sensitive-words`
- `PUT /admin/sensitive-words/{id}`
- `DELETE /admin/sensitive-words/{id}`
- `POST /admin/sensitive-words/import`
- `GET /admin/sensitive-words/export`
查询条件:
- 状态
- 等级
- 关键词:敏感词
顶部操作:
- 新增敏感词
- 批量导入
- 文件导入
- 批量导出
表格列:
- ID
- 敏感词
- 等级
- 替换词
- 状态
- 创建时间
- 操作
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查 询 | 按状态、等级、关键词筛选 | `GET /admin/sensitive-words` | 点击后页码回到第 1 页 |
| 重 置 | 清空筛选条件 | `GET /admin/sensitive-words` | 回到全部词库 |
| 新增敏感词 | 新增单个词条 | `POST /admin/sensitive-words` | 弹窗填写敏感词、等级、替换词、状态 |
| 批量导入 | 粘贴多行导入 | `POST /admin/sensitive-words/import` | 返回成功、重复、失败数量 |
| 文件导入 | 上传文件导入 | `POST /admin/sensitive-words/import` | 支持 `.txt`、`.csv`、`.xlsx` |
| 批量导出 | 导出当前筛选词库 | `GET /admin/sensitive-words/export` | 导出 CSV/XLSX |
| 编辑 | 编辑词条 | `PUT /admin/sensitive-words/{id}` | 修改后刷新敏感词缓存 |
| 删除 | 删除词条 | `DELETE /admin/sensitive-words/{id}` | 需二次确认,建议软删除 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| ID | `id` | 敏感词编号 | 数字 |
| 敏感词 | `word` | 待匹配词条 | 必填,建议唯一 |
| 等级 | `level` | 风险等级 | 低/中/高 |
| 替换词 | `replace_word` | 命中替代文本 | 空值显示 `--` |
| 状态 | `status` | 是否生效 | 启用/停用 |
| 创建时间 | `created_at` | 创建时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 敏感词等级:`low` 低、`medium` 中、`high` 高。
- 敏感词状态:`active` 启用、`disabled` 停用。
- 处理动作建议扩展:`replace` 替换、`block` 阻断、`alert` 告警。
- 当前页面查询结果为空,需支持“暂无数据”空态。
截图:
![敏感词库](screenshots-queried/09-sensitive-words.png)
### 3.10 文件管理
路由:`/file-records`
接口:
- 复用 `GET /admin/messages/search`
- 文件删除可复用消息/群文件删除接口
查询条件:
- 文件类型:全部、图片、视频、音频、文档、其他
- 发送人用户名
- 文件名
- 开始时间
- 结束时间
表格列:
- 发送人
- 接收方
- 类型
- 内容
- 文件名
- 文件大小
- URL
- 状态
- 发送时间
- 操作
行操作:
- 预览
- 下载
- 删除
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查 询 | 按文件条件检索 | `GET /admin/messages/search` | 仅筛选包含文件 URL 的消息 |
| 重 置 | 清空筛选条件 | `GET /admin/messages/search` | 清空类型、发送人、文件名、时间 |
| 刷 新 | 保持当前条件刷新 | `GET /admin/messages/search` | 不改变当前页 |
| 预览 | 查看图片/视频/音频 | 文件 URL | 只对可预览类型显示 |
| 下载 | 下载文件 | 文件 URL | URL 需鉴权或短期签名,避免泄露 |
| 删 除 | 删除文件记录/隐藏文件消息 | 消息或群文件删除接口 | 需二次确认;OSS 文件是否物理删除需配置 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 发送人 | `sender_nickname`、`sender_username` | 文件发送方 | 两行展示 |
| 接收方 | `receiver_name` / `group_name` | 单聊接收人或群 | 两行展示名称和编号 |
| 类型 | `file_type` / `message_type` | 文件类型 | 图片/视频/音频/文档/其他 |
| 内容 | `content` | 文件消息摘要 | 显示预览、下载快捷入口 |
| 文件名 | `file_name` | 原始文件名 | 空值显示 `--` |
| 文件大小 | `file_size` | 文件字节数 | 格式化为 B/KB/MB/GB |
| URL | `file_url` | 文件地址 | 表格省略展示,详情里显示完整 URL |
| 状态 | `status` | 文件消息状态 | 正常/已删除 |
| 发送时间 | `sent_at` | 上传或发送时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 文件分类:图片、视频、音频、文档、其他。
- 图片扩展名:`jpg`、`jpeg`、`png`、`gif`、`bmp`、`webp`、`svg`。
- 视频扩展名:`mp4`、`avi`、`mov`、`mkv`、`wmv`、`flv`、`webm`。
- 音频扩展名:`mp3`、`wav`、`flac`、`aac`、`ogg`、`wma`。
- 文档扩展名:`doc`、`docx`、`xls`、`xlsx`、`csv`、`ppt`、`pptx`、`pdf`、`txt`、`md`。
截图:
![文件管理](screenshots-queried/10-files.png)
### 3.11 用户反馈
路由:`/feedbacks`
核心接口:
- `GET /admin/feedbacks`
- `PUT /admin/feedbacks/{id}`
- `POST /admin/feedbacks/{id}/priority`
- `POST /admin/feedbacks/batch-handle`
- `GET /admin/feedbacks/export`
查询条件:
- 用户 ID
- 状态
- 优先级
- 关键词:内容、联系方式
顶部操作:
- 批量处理
- 导出 CSV
表格列:
- 用户
- 优先级
- 内容
- 状态
- 处理人
- 创建时间
- 操作
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查 询 | 按用户、状态、优先级、关键词筛选 | `GET /admin/feedbacks` | 关键词匹配内容或联系方式 |
| 重 置 | 清空筛选条件 | `GET /admin/feedbacks` | 回到全部列表 |
| 批量处理 | 批量更新反馈处理状态 | `POST /admin/feedbacks/batch-handle` | 对选中反馈统一设置状态和处理备注 |
| 导出 CSV | 导出当前筛选结果 | `GET /admin/feedbacks/export` | 包含用户、联系方式、内容、状态、处理信息 |
| 处理 | 单条处理反馈 | `PUT /admin/feedbacks/{id}` | 填写处理状态、处理备注,记录处理人和处理时间 |
| 调整优先级 | 快速修改优先级 | `POST /admin/feedbacks/{id}/priority` | 修改后刷新列表 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 用户 | `user_id`、`username`、`nickname` | 反馈用户 | 支持按用户 ID 筛选 |
| 优先级 | `priority` | 处理优先级 | 低/中/高,颜色区分 |
| 内容 | `content` | 反馈正文 | 长文本省略,详情查看完整 |
| 状态 | `status` | 处理状态 | 待处理/处理中/已处理/已关闭 |
| 处理人 | `handler_name` | 最后处理管理员 | 未处理显示 `--` |
| 创建时间 | `created_at` | 反馈提交时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 优先级:`low` 低、`medium` 中、`high` 高。
- 反馈状态:`pending` 待处理、`processing` 处理中、`resolved` 已处理、`closed` 已关闭。
- 当前页面查询结果为空,需支持“暂无数据”空态。
截图:
![用户反馈](screenshots-queried/11-feedback.png)
### 3.12 操作日志
路由:`/audit-logs`
接口:`GET /admin/audit/logs`
查询条件:
- 动作
- 目标类型
- 目标用户
- 目标群
- 开始时间
- 结束时间
顶部操作:
- 查询
- 重置
- 导出 CSV
表格列:
- 管理员
- 动作
- 目标类型
- 目标
- 查询条件
- IP
- 时间
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查询 | 按动作、目标类型、目标用户、目标群、时间范围筛选 | `GET /admin/audit/logs` | 查询后页码回到第 1 页 |
| 重 置 | 清空筛选条件 | `GET /admin/audit/logs` | 回到全部日志 |
| 导出 CSV | 导出当前筛选日志 | 导出接口 | 用于审计留存 |
| 详情 | 查看操作详情 | `GET /admin/audit/logs` 或详情接口 | 展示请求参数、变更内容、管理员信息 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 管理员 | `admin_username` | 执行动作的后台账号 | 样例:heiyue |
| 动作 | `action` | 操作类型 | 创建用户、重置密码、封禁等 |
| 目标类型 | `target_type` | 操作对象类型 | 用户、群、消息、文件、设置 |
| 目标 | `target_summary` | 目标摘要 | 用户显示昵称和用户名 |
| 查询条件 | `query_condition` | 操作时使用的查询条件 | 无则显示 `--` |
| IP | `ip` | 管理员操作 IP | IPv4/IPv6 |
| 时间 | `created_at` | 操作发生时间 | `YYYY-MM-DD HH:mm:ss` |
枚举说明:
- 动作:创建用户、重置密码、修改用户名、更新状态、调整分组、强制下线、强制注销、批量封禁、按 IP 封禁、封禁群、解封群、解散群、删除消息、删除文件、保存设置等。
- 目标类型:`user` 用户、`group` 群、`message` 消息、`file` 文件、`setting` 设置。
- 查询后样例:`heiyue` 重置用户密码,目标为 `往事随风 / hy17716319`,IP 为 `141.164.107.33`。
截图:
![操作日志](screenshots-queried/12-operation-logs.png)
### 3.13 用户账号审计
路由:`/user-account-audit`
接口:`GET /admin/audit/user-account-logs`
查询条件:
- 用户编号
- 用户名
- 操作者
- 操作
- IP
- 时间范围
操作类型包括:
- 修改昵称、修改头像、修改性别、修改签名、修改生日、修改密码
- 主动注销
- 管理员修改用户名、管理员更新状态、管理员重置密码、管理员更新安全权限
- 管理员强制下线、管理员强制注销、管理员调整分组、管理员批量封禁、管理员按 IP 封禁
表格列:
- 操作时间
- 目标用户
- 操作者
- 操作类型
- 变更摘要
- IP / 归属地
- 设备/客户端
按钮功能说明:
- 查询:按用户编号、用户名、操作者、操作、IP、时间范围筛选用户账号审计日志。
- 重置:清空全部筛选条件并重新查询。
- 本页不提供写操作,只用于审计追踪。
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 操作时间 | `created_at` | 账号变更时间 | 倒序排列 |
| 目标用户 | `target_username`、`target_user_no` | 被操作用户 | 两行展示用户名和编号 |
| 操作者 | `actor_type`、`actor_username` | 管理员或用户本人 | 标签区分管理员/用户本人 |
| 操作类型 | `action` | 账号审计动作 | 字典化为中文 |
| 变更摘要 | `details` / `before_data` / `after_data` | 变更内容 | 长内容 tooltip 展示 |
| IP / 归属地 | `ip`、`ip_location` | 操作来源 | IP 和归属地分行展示 |
| 设备/客户端 | `device_id` / `user_agent` | 客户端信息 | 长文本省略,tooltip 查看 |
操作类型枚举:
| 值 | 中文 |
| --- | --- |
| `change_nickname` | 修改昵称 |
| `change_avatar` | 修改头像 |
| `change_gender` | 修改性别 |
| `change_signature` | 修改签名 |
| `change_birthday` | 修改生日 |
| `change_password` | 修改密码 |
| `deactivate_account` | 主动注销 |
| `update_username` | 管理员修改用户名 |
| `update_status` | 管理员更新状态 |
| `reset_password` | 管理员重置密码 |
| `update_security_perm` | 管理员更新安全权限 |
| `kick_user` | 管理员强制下线 |
| `force_deactivate` | 管理员强制注销 |
| `assign_policy_group` | 管理员调整分组 |
| `batch_ban_users` | 管理员批量封禁 |
| `ban_users_by_ip` | 管理员按 IP 封禁 |
截图:
![用户账号审计](screenshots-queried/13-user-account-audit.png)
### 3.14 群事件审计
路由:`/group-events`
接口:`GET /admin/groups/events`
查询条件:
- 群号
- 操作人
- 目标用户
- 事件类型
- 开始时间
- 结束时间
表格列:
- 群名称
- 事件类型
- 操作人
- 目标用户
- 可见范围
- 旧值
- 新值
- 时间
按钮功能说明:
- 查询:按群号、操作人、目标用户、事件类型、时间范围筛选。
- 重置:清空筛选项重新查询。
- 本页不提供写操作,数据由群创建、成员加入、踢出、禁言、解散等业务自动写入。
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 群名称 | `group_name`、`group_no` | 事件所属群 | 两行展示群名和群号 |
| 事件类型 | `event_type` | 群事件 | 成员加入、群创建等 |
| 操作人 | `operator_username`、`operator_nickname` | 发起事件用户 | 系统事件显示系统 |
| 目标用户 | `target_username`、`target_nickname` | 被操作用户 | 无目标显示 `--` |
| 可见范围 | `visibility` | 事件对谁可见 | 全员可见、管理员可见、仅自己 |
| 旧值 | `old_value` | 变更前值 | 无则 `--` |
| 新值 | `new_value` | 变更后值 | 无则 `--` |
| 时间 | `created_at` | 事件时间 | `YYYY-MM-DD HH:mm:ss` |
事件类型枚举建议:
- `group_created` 群创建。
- `member_joined` 成员加入。
- `member_left` 成员退出。
- `member_kicked` 成员被踢。
- `member_muted` 成员禁言。
- `member_unmuted` 解除禁言。
- `owner_transferred` 群主转让。
- `admin_added` 设置管理员。
- `admin_removed` 取消管理员。
- `group_name_changed` 修改群名。
- `group_banned` 群封禁。
- `group_unbanned` 群解封。
- `group_dissolved` 群解散。
截图:
![群事件审计](screenshots-queried/14-group-event-audit.png)
### 3.15 管理员登录历史
路由:`/admin-login-history`
接口:`GET /admin/admin-login-history`
查询条件:
- 开始时间
- 结束时间
表格列:
- 用户名
- 登录时间
- User-Agent
- IP 地址
按钮功能说明:
- 查询:按开始时间、结束时间筛选管理员登录历史。
- 分页:默认 `20 条/页`。
- 本页不提供写操作。
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 用户名 | `username` | 管理员账号 | 样例:heiyue |
| 登录时间 | `login_at` | 登录成功时间 | 倒序排列 |
| User-Agent | `user_agent` | 浏览器 UA | 长文本横向滚动或 tooltip |
| IP 地址 | `ip` | 登录 IP | IPv4/IPv6 |
截图:
![管理员登录](screenshots-queried/15-admin-login.png)
### 3.16 用户登录历史
路由:`/user-login-history`
接口:`GET /admin/user-login-history`
查询条件:
- 用户编号
- 用户名
- 开始时间
- 结束时间
- IP
表格列:
- 用户编号
- 用户名
- 当前状态
- 登录时间
- 设备类型
- 设备型号
- 系统版本
- App 版本
- IP 地址
- 归属地
- 操作
行操作:
- 快速封禁
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查询 | 按用户编号、用户名、时间、IP 筛选 | `GET /admin/user-login-history` | 查询后页码回到第 1 页 |
| 重 置 | 清空筛选条件 | `GET /admin/user-login-history` | 回到全部登录历史 |
| 快速封禁 | 从登录记录封禁用户 | `PATCH /admin/users/{id}/status` | 需二次确认;封禁后撤销在线会话 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 用户编号 | `user_no` | 用户对外编号 | 支持筛选 |
| 用户名 | `username` | 用户名 | 支持筛选 |
| 当前状态 | `status` | 用户当前状态 | 正常/已封禁/已注销 |
| 登录时间 | `login_at` | 本次登录时间 | 倒序排列 |
| 设备类型 | `device_type` | 登录终端 | web/android/ios |
| 设备型号 | `device_model` | 设备名称 | 样例:OPPO PCHM10 |
| 系统版本 | `os_version` | 操作系统版本 | 样例:Android 11 |
| App 版本 | `app_version` | 客户端版本 | web 可显示 `-` |
| IP 地址 | `ip` | 登录 IP | 支持筛选 |
| 归属地 | `ip_location` | IP 地理位置 | 无法解析显示未知 |
枚举说明:
- 设备类型:`web` Web 端、`android` Android APP、`ios` iOS APP、`unknown` 未知设备。
- 用户状态同用户管理。
截图:
![用户登录](screenshots-queried/16-user-login.png)
### 3.17 IP 账号统计
路由:`/ip-user-stats`
核心接口:
- `GET /admin/audit/ip-user-stats`
- `GET /admin/audit/ip-user-stats/users`
- `POST /admin/users/ban-by-ip`
查询条件:
- IP,支持 IPv4 或 IPv6
表格列:
- IP 地址
- 归属地
- 关联用户
- 注册用户
- 登录用户
- 正常
- 已封禁
- 最近活动
- 操作
行操作:
- 用户列表
- 封禁 IP,平台级账号可见
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查询 | 按 IP 筛选统计 | `GET /admin/audit/ip-user-stats` | 支持 IPv4/IPv6 |
| 重 置 | 清空 IP | `GET /admin/audit/ip-user-stats` | 回到全部统计 |
| 用户列表 | 查看该 IP 关联用户 | `GET /admin/audit/ip-user-stats/users` | 弹窗展示注册/登录命中的用户 |
| 封禁 IP | 封禁该 IP 关联用户 | `POST /admin/users/ban-by-ip` | 平台账号可见;返回命中数、成功数、失败数 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| IP 地址 | `ip` | 统计 IP | IPv4/IPv6 |
| 归属地 | `ip_location` | IP 地理位置 | 样例:浙江 绍兴 |
| 关联用户 | `user_count` | 注册或登录命中过该 IP 的用户数 | 大于 1 显示“多账号”标签 |
| 注册用户 | `register_user_count` | 使用该 IP 注册的用户数 | 数字 |
| 登录用户 | `login_user_count` | 使用该 IP 登录的用户数 | 数字 |
| 正常 | `active_user_count` | 关联用户中正常数量 | 数字 |
| 已封禁 | `disabled_user_count` | 关联用户中封禁数量 | 数字 |
| 最近活动 | `last_seen_at` | 最近注册或登录时间 | `YYYY-MM-DD HH:mm:ss` |
关联用户弹窗字段:
- 用户 ID,平台账号可见。
- 用户编号、用户名、昵称。
- 来源:注册、登录,可同时命中。
- 状态:正常、已封禁。
- 最近活动。
截图:
![IP 账号统计](screenshots-queried/17-ip-account-stats.png)
### 3.18 登录失败日志
路由:`/login-failure-logs`
核心接口:
- `GET /admin/login-failure-logs`
- `POST /admin/security/unlock`
查询条件:
- 类型
- 登录账号
- IP
- 开始时间
- 结束时间
表格列:
- 类型
- 登录账号
- 失败原因
- IP 地址
- User-Agent
- 时间
- 操作
行操作:
- 解锁
按钮功能说明:
| 按钮 | 对应功能 | 接口 | 详细说明 |
| --- | --- | --- | --- |
| 查询 | 按类型、账号、IP、时间筛选 | `GET /admin/login-failure-logs` | 查询后页码回到第 1 页 |
| 重 置 | 清空筛选条件 | `GET /admin/login-failure-logs` | 回到全部失败记录 |
| 解锁 | 解除账号或 IP 登录锁定 | `POST /admin/security/unlock` | 需二次确认 |
表格字段说明:
| 表格字段 | 接口字段建议 | 含义 | 展示规则 |
| --- | --- | --- | --- |
| 类型 | `type` | 登录失败账号类型 | 用户/管理员 |
| 登录账号 | `account` | 输入的账号 | 手机号、用户名或管理员账号 |
| 失败原因 | `reason` | 失败说明 | 样例:密码错误 |
| IP 地址 | `ip` | 失败来源 IP | 支持筛选 |
| User-Agent | `user_agent` | 客户端 UA | 长文本省略 |
| 时间 | `created_at` | 失败时间 | 倒序排列 |
枚举说明:
- 类型:`user` 用户、`admin` 管理员。
- 失败原因:`password_error` 密码错误、`account_not_found` 账号不存在、`account_disabled` 账号被封禁、`captcha_error` 验证码错误、`ip_blocked` IP 被拦截、`too_many_attempts` 连续失败次数过多。
截图:
![登录失败日志](screenshots-queried/18-login-failures.png)
### 3.19 私域设置
路由:`/tenant-settings`
核心接口:
- `GET /admin/tenant-settings`
- `PUT /admin/tenant-settings`
配置项:
- 消息字符上限:范围 1 到 5000,仅允许调低
- 图片大小上限:范围 1 到 1000 MB
- 文件大小上限:范围 1 到 1000 MB,默认 50 MB
- 最大撤回消息时间:范围 1 到 1440 分钟;群主/管理员可撤回自己或他人消息,普通用户撤回自己的消息固定为 2 分钟
- 是否开启手机验证码:关闭后,注册仅支持邀请码,短信登录与忘记密码不可用
操作:
- 保存设置
按钮与字段说明:
| 字段/按钮 | 接口字段建议 | 范围/枚举 | 业务影响 |
| --- | --- | --- | --- |
| 消息字符上限 | `message_char_limit` | 1 到 5000,仅允许调低 | 用户发送文本消息时校验长度 |
| 图片大小上限(MB) | `image_size_limit_mb` | 1 到 1000 | 图片上传前后端双校验 |
| 文件大小上限(MB) | `file_size_limit_mb` | 1 到 1000,默认 50 | 文件上传前后端双校验 |
| 最大撤回消息时间(分钟) | `max_recall_minutes` | 1 到 1440 | 群主/管理员撤回自己或他人消息的最长时限 |
| 是否开启手机验证码 | `sms_code_enabled` | 开启/关闭 | 关闭后注册仅支持邀请码,短信登录与忘记密码不可用 |
| 保存设置 | - | - | 提交当前租户配置,后端校验后清理租户配置缓存 |
枚举说明:
- `sms_code_enabled=true`:开启手机验证码,支持短信登录、忘记密码、手机号验证码注册。
- `sms_code_enabled=false`:关闭手机验证码,仅支持邀请码注册。
截图:
![私域设置](screenshots-queried/19-private-domain-settings.png)
### 3.20 安全策略
路由:`/security-settings`
核心接口:
- `GET /admin/security-settings`
- `PUT /admin/security-settings`
- `POST /admin/security/unlock`
配置分组与字段:
- 用户安全
- 验证码触发次数:连续密码错误该次数后要求验证码,范围 1 到 10
- 密码最小位数:范围 6 到 32
- 强制包含字母
- 注册登录管控
- 用户注册功能
- 修改密码功能
- 用户登录功能
- Web 端多端登录
- 聊天消息管控
- 全局好友功能
- 全局群消息
- 全局私聊消息
- 群聊发言间隔:0 表示不限制;1 到 1000 表示同一群内两次发言的最小间隔
- 群组功能管控
- 群号搜索功能
- 群创建功能
- 群解散功能
- 群管理员功能
- 是否显示群人数
- 其他功能开关
- 允许用户注销账号
- IP 访问控制
- 注册 IP 黑名单:每行一个 IPv4、IPv6 或 CIDR,命中后无法注册及获取注册短信验证码
- 登录 IP 黑名单:命中后无法密码登录、短信登录及刷新 Token;黑名单优先级高于用户分组登录白名单
- 高级功能
- 消息已读状态
操作:
- 保存设置
按钮与字段说明:
| 分组 | 字段 | 接口字段建议 | 范围/枚举 | 业务影响 |
| --- | --- | --- | --- | --- |
| 用户安全 | 验证码触发次数 | `captcha_trigger_count` | 1 到 10 | 连续密码错误达到次数后要求验证码 |
| 用户安全 | 密码最小位数 | `password_min_length` | 6 到 32 | 注册、修改密码、后台重置密码均生效 |
| 用户安全 | 强制包含字母 | `password_require_letter` | 开启/关闭 | 开启后密码必须包含英文字母 |
| 注册登录管控 | 用户注册功能 | `user_register_enabled` | 开启/关闭 | 关闭后用户端隐藏注册入口 |
| 注册登录管控 | 修改密码功能 | `password_change_enabled` | 开启/关闭 | 关闭后用户无法自行修改密码 |
| 注册登录管控 | 用户登录功能 | `user_login_enabled` | 开启/关闭 | 关闭后用户无法登录,不影响已登录用户 |
| 注册登录管控 | Web 端多端登录 | `web_multi_login_enabled` | 开启/关闭 | 开启后同账号可多浏览器同时登录 |
| 聊天消息管控 | 全局好友功能 | `global_friend_enabled` | 开启/关闭 | 关闭后无法搜索和添加好友 |
| 聊天消息管控 | 全局群消息 | `global_group_message_enabled` | 开启/关闭 | 关闭后所有群无法发送消息 |
| 聊天消息管控 | 全局私聊消息 | `global_private_message_enabled` | 开启/关闭 | 关闭后所有私聊无法发送消息 |
| 聊天消息管控 | 群聊发言间隔(秒) | `group_message_interval_seconds` | 0 到 1000 | 0 不限制,其他值限制同群发言间隔 |
| 群组功能管控 | 群号搜索功能 | `group_search_enabled` | 开启/关闭 | 关闭后隐藏群号和群搜索入口 |
| 群组功能管控 | 群创建功能 | `group_create_enabled` | 开启/关闭 | 关闭后所有人无法新建群聊 |
| 群组功能管控 | 群解散功能 | `group_dissolve_enabled` | 开启/关闭 | 关闭后用户端无法解散群,不影响后台 |
| 群组功能管控 | 群管理员功能 | `group_admin_enabled` | 开启/关闭 | 关闭后无法设置群管理员 |
| 群组功能管控 | 是否显示群人数 | `show_group_member_count` | 开启/关闭 | 关闭后用户端群资料不显示总人数 |
| 其他功能开关 | 允许用户注销账号 | `account_deactivate_enabled` | 开启/关闭 | 关闭后隐藏注销账号按钮 |
| IP 访问控制 | 注册 IP 黑名单 | `register_ip_blacklist` | 多行 IP/CIDR | 命中后无法注册和获取注册短信验证码 |
| IP 访问控制 | 登录 IP 黑名单 | `login_ip_blacklist` | 多行 IP/CIDR | 命中后无法密码登录、短信登录和刷新 Token |
| 高级功能 | 消息已读状态 | `message_read_status_enabled` | 开启/关闭 | 开启后显示消息已读/未读标记 |
| 保存设置 | - | - | 保存安全配置,写操作日志,刷新配置缓存 |
枚举说明:
- 所有开关均使用布尔值:`true` 开启,`false` 关闭。
- IP 黑名单每行一个 IPv4、IPv6 或 CIDR,保存时去空行、去重、校验格式。
- 登录 IP 黑名单优先于用户分组白名单。
截图:
![安全策略](screenshots-queried/20-security-policy.png)
## 4. 接口清单
从前端静态资源反查到的接口如下,建议后端按 REST 风格补齐:
| 模块 | 接口 |
| --- | --- |
| 认证 | `/admin/auth/login`, `/admin/auth/profile`, `/admin/auth/password`, `/admin/auth/totp/status`, `/admin/auth/totp/setup`, `/admin/auth/totp/bind`, `/admin/auth/totp/unbind` |
| 统计 | `/admin/stats` |
| 用户 | `/admin/users`, `/admin/users/{id}`, `/admin/users/{id}/status`, `/admin/users/{id}/username`, `/admin/users/{id}/reset_password`, `/admin/users/{id}/ip-whitelist`, `/admin/users/{id}/friend-privilege`, `/admin/users/{id}/security-perm`, `/admin/users/{id}/kick`, `/admin/users/{id}/deactivate`, `/admin/users/batch`, `/admin/users/batch-ban`, `/admin/users/ban-by-ip`, `/admin/users/import-xlsx` |
| 用户分组 | `/admin/user-policy-groups`, `/admin/user-policy-groups/{id}`, `/admin/user-policy-groups/{id}/users`, `/admin/user-policy-groups/ip-whitelist` |
| 群组 | `/admin/groups`, `/admin/groups/{id}`, `/admin/groups/{id}/ban`, `/admin/groups/{id}/unban`, `/admin/groups/{id}/members`, `/admin/groups/{id}/members/kick`, `/admin/groups/{id}/members/mute`, `/admin/groups/{id}/members/unmute`, `/admin/groups/{id}/files`, `/admin/groups/{id}/files/{fileId}`, `/admin/groups/events`, `/admin/groups/quick-create` |
| 消息与文件 | `/admin/messages/search`, `/admin/messages/{id}` |
| 邀请码 | `/admin/invite-codes`, `/admin/invite-codes/{id}`, `/admin/invite-codes/{id}/usages` |
| 敏感词 | `/admin/sensitive-words`, `/admin/sensitive-words/{id}`, `/admin/sensitive-words/import`, `/admin/sensitive-words/export` |
| 反馈 | `/admin/feedbacks`, `/admin/feedbacks/{id}`, `/admin/feedbacks/{id}/priority`, `/admin/feedbacks/batch-handle`, `/admin/feedbacks/export` |
| 审计 | `/admin/audit/logs`, `/admin/audit/user-account-logs`, `/admin/audit/ip-user-stats`, `/admin/audit/ip-user-stats/users`, `/admin/control/audit-logs` |
| 登录日志 | `/admin/admin-login-history`, `/admin/user-login-history`, `/admin/login-failure-logs` |
| 设置 | `/admin/tenant-settings`, `/admin/security-settings`, `/admin/security/unlock` |
| 当前菜单未展示但 bundle 存在 | `/admin/tenants`, `/admin/admins`, `/admin/tenant-admins`, `/admin/roles`, `/admin/nodes`, `/admin/system/nodes-status`, `/admin/avatar-pool`, `/admin/avatar-pool/backfill`, `/admin/system-conversations`, `/admin/system-conversations/send`, `/admin/conversation-notices`, `/admin/reports`, `/admin/login-streak/rank`, `/admin/private-msg/rank`, `/admin/user-password`, `/admin/keyword-alerts`, `/admin/alert-keywords`, `/admin/alert-bot-config`, `/admin/domain/encrypt`, `/admin/domain/decrypt`, `/admin/domain/obfuscate`, `/admin/domain/config`, `/admin/domain/push-update`, `/admin/domain/push-bucket-update` |
通用响应结构建议:
```json
{
"code": 0,
"message": "ok",
"data": {
"items": [],
"total": 0,
"page": 1,
"size": 20
}
}
```
列表接口统一分页参数:
- `page`
- `page_size`
- 各页面查询条件
## 5. 核心数据模型建议
建议至少设计以下数据表或领域模型:
- 管理员账号:账号、密码、TOTP、角色、权限、登录历史
- 用户:用户编号、用户名、昵称、手机号、头像、状态、注册方式、用户分组、最近登录、创建时间
- 用户分组:权限开关、好友上限、登录白名单、排序权重、默认分组标记
- 群组:群号、名称、群主、成员数、状态、创建时间
- 群成员:用户、群、角色、群昵称、禁言状态、加入时间
- 消息:会话类型、发送人、接收人/群、消息类型、内容、文件信息、状态、发送时间
- 文件记录:发送人、接收方、文件类型、文件名、大小、URL、消息关联、状态
- 邀请码:邀请码、指定用户、自动加好友、使用人数、创建人、状态、有效期
- 敏感词:词条、等级、替换词、状态、创建时间
- 用户反馈:用户、联系方式、内容、优先级、状态、处理人、处理备注
- 操作日志:管理员、动作、目标类型、目标、查询条件、IP、时间
- 用户账号审计:目标用户、操作者、操作类型、变更前后、IP、归属地、设备
- 群事件审计:群、事件类型、操作人、目标用户、可见范围、旧值、新值、时间
- 登录历史:账号类型、账号、登录时间、设备信息、IP、归属地
- 登录失败日志:类型、账号、失败原因、IP、User-Agent、锁定/解锁状态
- 租户设置:消息、文件、验证码、撤回时间等私域配置
- 安全策略:密码、注册登录、聊天、群组、注销、IP 黑名单、已读状态配置
## 6. 权限建议
前端 bundle 中能看到的权限点包括:
- `tenant_manage`
- `user_manage`
- `group_manage`
- `view_private_chat`
- `view_group_chat`
- `view_audit_log`
建议在 HotGo 中拆成更细的菜单/按钮权限:
- 用户管理:查看、创建、批量创建、导入、详情、重置密码、调整分组、封禁、强制下线、注销、IP 白名单
- 群组管理:查看、详情、群文件、封禁、解散、成员踢出、禁言/解除禁言
- 内容审核:消息查看、文件预览下载删除、敏感词增删改导入导出、反馈处理导出
- 日志审计:查看、导出、解锁、IP 关联用户查看、按 IP 封禁
- 系统设置:私域设置保存、安全策略保存
## 7. 实现优先级
第一阶段建议先完成可见菜单:
1. 后台登录、权限、菜单、布局。
2. 数据概览统计。
3. 用户管理、用户分组、群组管理、群成员管理、邀请码管理。
4. 单聊/群聊消息、文件管理、敏感词库、用户反馈。
5. 操作日志、用户账号审计、群事件审计、登录历史、IP 统计、失败日志。
6. 私域设置、安全策略。
第二阶段再补 bundle 中存在但当前菜单未展示的能力:
- 租户、管理员、角色、节点、头像池、系统会话、系统通知、报表、排行榜、关键词告警、域名加密等。
## 8. 采集产物
本次调研文件保存在:
- 截图目录:`docs/admin-adfahi-research/screenshots-queried/`
- 每页结构化采集:`docs/admin-adfahi-research/*.json`
- 前端 bundle:`docs/admin-adfahi-research/index-RosMaKu2.js`
- 接口尝试结果:`docs/admin-adfahi-research/api-samples.json`