feat:聊天信息支持 文件、图片、语音发送,增加一键启停脚本

This commit is contained in:
bujinyuan
2026-04-20 11:53:27 +08:00
parent 1a5aac9998
commit 0c1540bdee
116 changed files with 20277 additions and 144 deletions

View File

@@ -20,10 +20,11 @@ alwaysApply: true
- 分支:`feature/phase2b-instant-messaging` - 分支:`feature/phase2b-instant-messaging`
- **Phase 2c群聊与已读回执**:✅ 全部完成14 个 Task + 代码审查修复 14 项 + 浏览器测试修复 21 项),设计文档 `docs/plans/2026-03-04-phase2c-design.md` - **Phase 2c群聊与已读回执**:✅ 全部完成14 个 Task + 代码审查修复 14 项 + 浏览器测试修复 21 项),设计文档 `docs/plans/2026-03-04-phase2c-design.md`
- 分支:`feature/phase2c-group-read-receipt` - 分支:`feature/phase2c-group-read-receipt`
- 范围:群聊全功能(三级角色/禁言/@提醒/群公告/入群审批)+ 已读回执(单聊会话级 + 群聊消息级)+ MinIO 文件存储 + 管理端群组管理 - **Phase 2d消息类型扩展**:✅ 全部完成14 个 Task + 代码审查修复 2 项 + 富媒体 Bug 修复 4 项),设计文档 `docs/plans/2026-03-04-phase2d-design.md`
- 代码审查修复Critical×5角色类型/公告字段/at_user_ids/@导航/Wire 注册)+ Important×4 + Minor×2 + Suggestion×3 - 分支:`feature/phase2d-message-types`
- 浏览器测试修复:搜索 ILIKE 替换 to_tsvector、管理端群详情 UI 重设计、群搜索已加入状态、创建/邀请支持非好友搜索、全角色身份标识、全局错误信息路径修复8文件18处、自定义操作弹窗替代 uni.showActionSheet、已读详情页群昵称展示、免打扰 API 补全DAO/Service/Controller/Router、联系人 Tab 页 onShow 刷新 - **开发者运维脚本2026-04-20**:新增 `scripts/{start,stop,status}.sh` 三件套,`scripts/dev-setup.sh` 补齐 MinIO 健康检查;遵循 setup/start 职责分离Rails/Django 社区模式)
- **跨模块通信模式**接口注入标准ws.FriendIDsGetter / im.FriendChecker / im.UserInfoGetter → contact.FriendshipDAOim.OfflineMessagePusher → ws.Handlercontact.OnlineChecker → ws.OnlineServiceim.GroupInfoGetter → group.GroupDAOim.MessageReadRecorder → group.MessageReadDAOgroup.UserInfoProvider → auth.UserDAOgroup.MessageWriter → im.MessageDAO - 范围:图片/语音/文件消息完整流程 + 管理端消息管理(列表+统计+撤回+删除)+ ECharts 仪表板
- **跨模块通信模式**接口注入标准ws.FriendIDsGetter / im.FriendChecker / im.UserInfoGetter → contact.FriendshipDAOim.OfflineMessagePusher → ws.Handlercontact.OnlineChecker → ws.OnlineServiceim.GroupInfoGetter → group.GroupDAOim.MessageReadRecorder → group.MessageReadDAOgroup.UserInfoProvider → auth.UserDAOgroup.MessageWriter → im.MessageDAOadmin.MessageManageService → im.ConversationDAO + ws.PubSub
## 项目概述 ## 项目概述
@@ -32,7 +33,7 @@ EchoChat 是一个实时音视频通讯平台,包含三个子项目:
- `frontend/` — 前台用户端uni-app + Vue 3.4 + Pinia 2.x - `frontend/` — 前台用户端uni-app + Vue 3.4 + Pinia 2.x
- `admin/` — 后台管理端Vue 3.5+ + Element Plus + Pinia 3.x - `admin/` — 后台管理端Vue 3.5+ + Element Plus + Pinia 3.x
已实现模块auth认证、contact联系人、wsWebSocket、admin管理端、im即时通讯 + 已读回执、group群聊管理、file文件上传/MinIO 已实现模块auth认证、contact联系人、wsWebSocketim即时通讯、group群聊、file文件上传admin管理端含消息管理、im即时通讯 + 已读回执、group群聊管理、file文件上传/MinIO
前端常量:`frontend/src/constants/group.js`GROUP_ROLE / GROUP_STATUS / JOIN_REQUEST_STATUS与后端 constants/group.go 对齐) 前端常量:`frontend/src/constants/group.js`GROUP_ROLE / GROUP_STATUS / JOIN_REQUEST_STATUS与后端 constants/group.go 对齐)
## 核心开发规则 ## 核心开发规则
@@ -52,6 +53,12 @@ EchoChat 是一个实时音视频通讯平台,包含三个子项目:
13. **验证方式**:使用 Playwright MCP 进行页面自动化验证 13. **验证方式**:使用 Playwright MCP 进行页面自动化验证
14. **代码审查**:每个 Task 完成后,使用 `code-reviewer` 子代理进行结构化审查,确保代码质量和计划一致性 14. **代码审查**:每个 Task 完成后,使用 `code-reviewer` 子代理进行结构化审查,确保代码质量和计划一致性
15. **完成验证**:使用 `verification-before-completion` 技能,在声称完成前运行验证命令并确认输出 15. **完成验证**:使用 `verification-before-completion` 技能,在声称完成前运行验证命令并确认输出
16. **本地启停脚本(强制)**:启动/停止三端服务统一使用 `scripts/` 下的脚本,**禁止在聊天中直接指导用户敲 `cd backend && go run ...` 等原始命令**
- 首次初始化:`./scripts/dev-setup.sh`(检查 Docker、拉起 Postgres/Redis/MinIO 并健康等待)
- 日常启动:`./scripts/start.sh`(端口占用自动跳过,支持 `backend|frontend|admin|docker|--no-docker` 单项启动)
- 日常停止:`./scripts/stop.sh`(默认保留 Docker 容器,`--all` 全关)
- 状态查看:`./scripts/status.sh`
- 后台进程的 PID 与日志位于 `.run/`(已 gitignore排障优先查看 `.run/logs/*.log`
## 代码风格全局一致规则(最高优先级,强制执行) ## 代码风格全局一致规则(最高优先级,强制执行)

3
.gitignore vendored
View File

@@ -14,6 +14,9 @@ Thumbs.db
*.swo *.swo
*~ *~
# --- Local runtime ---
.run/
# --- Go --- # --- Go ---
backend/go-service/tmp/ backend/go-service/tmp/
*.exe *.exe

View File

@@ -0,0 +1,12 @@
- generic [active] [ref=e1]:
- generic [ref=e3]:
- generic [ref=e8]: 消息
- generic [ref=e15]:
- generic [ref=e19] [cursor=pointer]: 消息
- generic [ref=e22] [cursor=pointer]: 联系人
- generic [ref=e25] [cursor=pointer]: 会议
- generic [ref=e28] [cursor=pointer]: 我的
- generic:
- generic:
- generic:
- paragraph: 认证已过期或无效,请重新登录

View File

@@ -0,0 +1,52 @@
- generic [ref=e168]:
- generic [ref=e169]:
- generic [ref=e171]:
- generic [ref=e173]: 测试用户3
- generic [ref=e175]:
- generic [ref=e179]:
- generic [ref=e181]:
- generic [ref=e182]:
- generic [ref=e185]: 哈哈哈
- generic [ref=e188]:
- generic [ref=e189]: 未读
- generic [ref=e191]:
- generic [ref=e192]:
- generic [ref=e195]: 123hah
- generic [ref=e198]:
- generic [ref=e199]: 未读
- generic [ref=e201]:
- generic [ref=e202]:
- generic [ref=e205]: "2344"
- generic [ref=e208]:
- generic [ref=e209]: 未读
- generic [ref=e211]:
- generic [ref=e212]:
- generic [ref=e215]: 12134哈哈哈哈
- generic [ref=e218]:
- generic [ref=e219]: 未读
- generic [ref=e221]:
- generic [ref=e222]:
- generic [ref=e225]: 2312312313是大大大阿萨 噶傻撒撒Ashas阿萨说啊啊哈说爱上
- generic [ref=e228]:
- generic [ref=e229]: 未读
- generic [ref=e231]:
- generic [ref=e232]:
- generic [ref=e235]: Phase2c测试单聊消息
- generic [ref=e238]:
- generic [ref=e239]: 未读
- generic [ref=e241]:
- generic [ref=e242]:
- generic [ref=e245]: "2222"
- generic [ref=e248]:
- generic [ref=e249]: 未读
- generic [ref=e251]:
- generic [ref=e252]:
- generic [ref=e255]: 已读回执测试消息
- generic [ref=e258]:
- generic [ref=e259]: 未读
- generic [ref=e261]:
- generic [ref=e263]:
- generic [ref=e266]:
- generic: 输入消息...
- textbox [ref=e267]
- generic [ref=e269]:

View File

@@ -0,0 +1,59 @@
- generic [ref=e168]:
- generic [ref=e169]:
- generic [ref=e171]:
- generic [ref=e173]: 测试用户3
- generic [ref=e175]:
- generic [ref=e179]:
- generic [ref=e181]:
- generic [ref=e182]:
- generic [ref=e185]: 哈哈哈
- generic [ref=e188]:
- generic [ref=e189]: 未读
- generic [ref=e191]:
- generic [ref=e192]:
- generic [ref=e195]: 123hah
- generic [ref=e198]:
- generic [ref=e199]: 未读
- generic [ref=e201]:
- generic [ref=e202]:
- generic [ref=e205]: "2344"
- generic [ref=e208]:
- generic [ref=e209]: 未读
- generic [ref=e211]:
- generic [ref=e212]:
- generic [ref=e215]: 12134哈哈哈哈
- generic [ref=e218]:
- generic [ref=e219]: 未读
- generic [ref=e221]:
- generic [ref=e222]:
- generic [ref=e225]: 2312312313是大大大阿萨 噶傻撒撒Ashas阿萨说啊啊哈说爱上
- generic [ref=e228]:
- generic [ref=e229]: 未读
- generic [ref=e231]:
- generic [ref=e232]:
- generic [ref=e235]: Phase2c测试单聊消息
- generic [ref=e238]:
- generic [ref=e239]: 未读
- generic [ref=e241]:
- generic [ref=e242]:
- generic [ref=e245]: "2222"
- generic [ref=e248]:
- generic [ref=e249]: 未读
- generic [ref=e251]:
- generic [ref=e252]:
- generic [ref=e255]: 已读回执测试消息
- generic [ref=e258]:
- generic [ref=e259]: 未读
- generic [ref=e261]:
- generic [ref=e263]:
- generic [ref=e266]:
- generic: 输入消息...
- textbox [ref=e267]
- generic [ref=e269]:
- generic [ref=e271]:
- generic [ref=e272]:
- generic [ref=e274]:
- generic [ref=e275]: 图片
- generic [ref=e276]:
- generic [ref=e278]:
- generic [ref=e279]: 文件

View File

@@ -0,0 +1,50 @@
- generic [ref=e168]:
- generic [ref=e169]:
- generic [ref=e171]:
- generic [ref=e173]: 测试用户3
- generic [ref=e175]:
- generic [ref=e179]:
- generic [ref=e181]:
- generic [ref=e182]:
- generic [ref=e185]: 哈哈哈
- generic [ref=e188]:
- generic [ref=e189]: 未读
- generic [ref=e191]:
- generic [ref=e192]:
- generic [ref=e195]: 123hah
- generic [ref=e198]:
- generic [ref=e199]: 未读
- generic [ref=e201]:
- generic [ref=e202]:
- generic [ref=e205]: "2344"
- generic [ref=e208]:
- generic [ref=e209]: 未读
- generic [ref=e211]:
- generic [ref=e212]:
- generic [ref=e215]: 12134哈哈哈哈
- generic [ref=e218]:
- generic [ref=e219]: 未读
- generic [ref=e221]:
- generic [ref=e222]:
- generic [ref=e225]: 2312312313是大大大阿萨 噶傻撒撒Ashas阿萨说啊啊哈说爱上
- generic [ref=e228]:
- generic [ref=e229]: 未读
- generic [ref=e231]:
- generic [ref=e232]:
- generic [ref=e235]: Phase2c测试单聊消息
- generic [ref=e238]:
- generic [ref=e239]: 未读
- generic [ref=e241]:
- generic [ref=e242]:
- generic [ref=e245]: "2222"
- generic [ref=e248]:
- generic [ref=e249]: 未读
- generic [ref=e251]:
- generic [ref=e252]:
- generic [ref=e255]: 已读回执测试消息
- generic [ref=e258]:
- generic [ref=e259]: 未读
- generic [ref=e261]:
- generic [ref=e263]:
- generic [ref=e282]: 按住 说话
- generic [ref=e269]:

View File

@@ -0,0 +1,52 @@
- generic [ref=e168]:
- generic [ref=e169]:
- generic [ref=e171]:
- generic [ref=e173]: 测试用户3
- generic [ref=e175]:
- generic [ref=e179]:
- generic [ref=e181]:
- generic [ref=e182]:
- generic [ref=e185]: 哈哈哈
- generic [ref=e188]:
- generic [ref=e189]: 未读
- generic [ref=e191]:
- generic [ref=e192]:
- generic [ref=e195]: 123hah
- generic [ref=e198]:
- generic [ref=e199]: 未读
- generic [ref=e201]:
- generic [ref=e202]:
- generic [ref=e205]: "2344"
- generic [ref=e208]:
- generic [ref=e209]: 未读
- generic [ref=e211]:
- generic [ref=e212]:
- generic [ref=e215]: 12134哈哈哈哈
- generic [ref=e218]:
- generic [ref=e219]: 未读
- generic [ref=e221]:
- generic [ref=e222]:
- generic [ref=e225]: 2312312313是大大大阿萨 噶傻撒撒Ashas阿萨说啊啊哈说爱上
- generic [ref=e228]:
- generic [ref=e229]: 未读
- generic [ref=e231]:
- generic [ref=e232]:
- generic [ref=e235]: Phase2c测试单聊消息
- generic [ref=e238]:
- generic [ref=e239]: 未读
- generic [ref=e241]:
- generic [ref=e242]:
- generic [ref=e245]: "2222"
- generic [ref=e248]:
- generic [ref=e249]: 未读
- generic [ref=e251]:
- generic [ref=e252]:
- generic [ref=e255]: 已读回执测试消息
- generic [ref=e258]:
- generic [ref=e259]: 未读
- generic [ref=e261]:
- generic [ref=e263]:
- generic [ref=e285]:
- generic: 输入消息...
- textbox [ref=e286]
- generic [ref=e269]:

View File

@@ -0,0 +1,71 @@
- generic [ref=e3]:
- generic [ref=e287]:
- generic [ref=e291]: 消息
- generic [ref=e295]:
- generic [ref=e296]:
- generic [ref=e297]: 消息
- generic [ref=e298]:
- generic [ref=e300]:
- generic [ref=e302]:
- generic [ref=e303]:
- generic [ref=e305]: 全部
- generic [ref=e307]: 单聊
- generic [ref=e309]: 群聊
- generic [ref=e313]:
- generic [ref=e314]:
- generic [ref=e317]:
- generic [ref=e318]:
- generic [ref=e319]:
- generic [ref=e320]: 测试用户3
- generic [ref=e321]: 3/4
- generic [ref=e322]:
- generic [ref=e324]: 已读回执测试消息
- generic [ref=e326]:
- generic [ref=e327]:
- generic [ref=e328]:
- generic [ref=e330]:
- generic [ref=e332]: "3"
- generic [ref=e333]:
- generic [ref=e334]:
- generic [ref=e335]: 两人群测试
- generic [ref=e336]: 3/12
- generic [ref=e339]: 换届大会打卡还贷款
- generic [ref=e340]:
- generic [ref=e343]:
- generic [ref=e344]:
- generic [ref=e345]:
- generic [ref=e346]: 卜锦元
- generic [ref=e347]: 3/4
- generic [ref=e350]: "112121212"
- generic [ref=e351]:
- generic [ref=e354]:
- generic [ref=e356]:
- generic [ref=e357]: 测试用户2
- generic [ref=e358]: 3/4
- generic [ref=e359]:
- generic [ref=e362]: E
- generic [ref=e363]:
- generic [ref=e364]:
- generic [ref=e365]: EchoChat测试群
- generic [ref=e366]: 3/4
- generic [ref=e369]: 测试已读回执功能
- generic [ref=e370]:
- generic [ref=e371]:
- generic [ref=e372]:
- generic [ref=e373]:
- generic [ref=e374]: "3"
- generic [ref=e375]: 消息
- generic [ref=e376]:
- generic [ref=e378]:
- generic [ref=e379]: 联系人
- generic [ref=e380]:
- generic [ref=e382]:
- generic [ref=e383]: 会议
- generic [ref=e384]:
- generic [ref=e386]:
- generic [ref=e387]: 我的
- generic [ref=e15]:
- generic [ref=e19] [cursor=pointer]: 消息
- generic [ref=e22] [cursor=pointer]: 联系人
- generic [ref=e25] [cursor=pointer]: 会议
- generic [ref=e28] [cursor=pointer]: 我的

View File

@@ -0,0 +1,141 @@
- generic [ref=e391]:
- generic [ref=e392]:
- generic [ref=e394]:
- generic [ref=e395]:
- generic [ref=e396]: 两人群测试
- generic [ref=e397]: (5)
- generic [ref=e399]:
- generic [ref=e403]:
- generic [ref=e405]: 加载更多
- generic [ref=e408]:
- generic [ref=e409]:
- generic [ref=e412]: 测试,哈哈
- generic [ref=e415]:
- generic [ref=e416]: 0人已读
- generic [ref=e419]: 新昵称 更新了群公告
- generic [ref=e422]: 新昵称 邀请 测试用户3 加入了群聊
- generic [ref=e425]: 新昵称 邀请 卜锦元 加入了群聊
- generic [ref=e428]:
- generic [ref=e429]:
- generic [ref=e432]: 测试群聊功能
- generic [ref=e435]:
- generic [ref=e436]: 0人已读
- generic [ref=e439]:
- generic [ref=e440]:
- generic [ref=e443]: 再次测试
- generic [ref=e446]:
- generic [ref=e447]: 0人已读
- generic [ref=e450]:
- generic [ref=e451]:
- generic [ref=e454]: 哈哈哈,我要再次测试
- generic [ref=e457]:
- generic [ref=e458]: 0人已读
- generic [ref=e460]:
- generic [ref=e463]:
- generic [ref=e464]:
- generic [ref=e465]: 卜锦元
- generic [ref=e468]: "1111"
- generic [ref=e470]:
- generic [ref=e473]:
- generic [ref=e474]:
- generic [ref=e475]: 卜锦元
- generic [ref=e478]: "1111"
- generic [ref=e480]:
- generic [ref=e483]:
- generic [ref=e484]:
- generic [ref=e485]: 卜锦元
- generic [ref=e488]: "3333"
- generic [ref=e490]:
- generic [ref=e493]:
- generic [ref=e494]:
- generic [ref=e495]: 卜锦元
- generic [ref=e498]: "1111"
- generic [ref=e500]:
- generic [ref=e503]:
- generic [ref=e504]:
- generic [ref=e505]: 卜锦元
- generic [ref=e508]: 测试111
- generic [ref=e510]:
- generic [ref=e513]:
- generic [ref=e514]:
- generic [ref=e515]: 卜锦元
- generic [ref=e518]: "2222"
- generic [ref=e520]:
- generic [ref=e523]:
- generic [ref=e524]:
- generic [ref=e525]: 卜锦元
- generic [ref=e528]: "1211212"
- generic [ref=e530]:
- generic [ref=e533]:
- generic [ref=e534]:
- generic [ref=e535]: 卜锦元
- generic [ref=e538]: 测试消费
- generic [ref=e541]:
- generic [ref=e542]:
- generic [ref=e545]: 测试哈哈
- generic [ref=e548]:
- generic [ref=e549]: 0人已读
- generic [ref=e552]:
- generic [ref=e553]:
- generic [ref=e556]: "1111"
- generic [ref=e559]:
- generic [ref=e560]: 0人已读
- generic [ref=e563]:
- generic [ref=e564]:
- generic [ref=e567]: 测试你是死是1
- generic [ref=e570]:
- generic [ref=e571]: 0人已读
- generic [ref=e574]: 卜锦元 被设为管理员
- generic [ref=e577]:
- generic [ref=e578]:
- generic [ref=e581]: "112212"
- generic [ref=e584]:
- generic [ref=e585]: 0人已读
- generic [ref=e587]:
- generic [ref=e590]:
- generic [ref=e591]:
- generic [ref=e592]: 卜锦元
- generic [ref=e595]: 哈哈哈,知道我是谁吗
- generic [ref=e597]:
- generic [ref=e600]:
- generic [ref=e601]:
- generic [ref=e602]: 卜锦元
- generic [ref=e605]: 再次测试
- generic [ref=e607]:
- generic [ref=e610]:
- generic [ref=e611]:
- generic [ref=e612]: 卜锦元
- generic [ref=e615]: "111112"
- generic [ref=e618]:
- generic [ref=e619]:
- generic [ref=e622]: 我知道你是谁
- generic [ref=e625]:
- generic [ref=e626]: 0人已读
- generic [ref=e629]: 卜锦元 更新了群公告
- generic [ref=e632]:
- generic [ref=e633]:
- generic [ref=e636]: 哈哈哈,测试
- generic [ref=e639]:
- generic [ref=e640]: 0人已读
- generic [ref=e643]: 卜锦元 邀请 周和智 加入了群聊
- generic [ref=e645]:
- generic [ref=e648]:
- generic [ref=e649]:
- generic [ref=e650]: 卜锦元
- generic [ref=e653]: "@周和智 1111"
- generic [ref=e655]:
- generic [ref=e658]:
- generic [ref=e659]:
- generic [ref=e660]: 卜锦元
- generic [ref=e663]: 你能看到吗
- generic [ref=e665]:
- generic [ref=e668]:
- generic [ref=e669]:
- generic [ref=e670]: 周和智
- generic [ref=e673]: 换届大会打卡还贷款
- generic [ref=e675]:
- generic [ref=e677]:
- generic [ref=e680]:
- generic: 输入消息...
- textbox [ref=e681]
- generic [ref=e683]:

View File

@@ -0,0 +1,67 @@
- generic [ref=e3]:
- complementary [ref=e4]:
- generic [ref=e5]:
- generic [ref=e6]: E
- generic [ref=e7]: EchoChat
- menubar [ref=e8]:
- menuitem "仪表盘" [ref=e9] [cursor=pointer]:
- img [ref=e11]
- text: 仪表盘
- menuitem "用户管理" [ref=e13]:
- generic [ref=e14] [cursor=pointer]:
- img [ref=e16]
- generic [ref=e18]: 用户管理
- img [ref=e20]
- menuitem "联系人管理" [ref=e22]:
- generic [ref=e23] [cursor=pointer]:
- img [ref=e25]
- generic [ref=e28]: 联系人管理
- img [ref=e30]
- menuitem "群组管理" [ref=e32]:
- generic [ref=e33] [cursor=pointer]:
- img [ref=e35]
- generic [ref=e38]: 群组管理
- img [ref=e40]
- menuitem "消息管理" [ref=e42]:
- generic [ref=e43] [cursor=pointer]:
- img [ref=e45]
- generic [ref=e47]: 消息管理
- img [ref=e49]
- menuitem "在线监控" [ref=e51] [cursor=pointer]:
- img [ref=e53]
- text: 在线监控
- generic [ref=e55]:
- generic [ref=e56]:
- img [ref=e59] [cursor=pointer]
- button "新 testuser1" [ref=e63] [cursor=pointer]:
- generic [ref=e64]:
- generic [ref=e65]: testuser1
- img [ref=e67]
- main [ref=e69]:
- generic [ref=e70]:
- heading "仪表盘" [level=2] [ref=e71]
- generic [ref=e72]:
- generic [ref=e75]:
- img [ref=e78]
- generic [ref=e80]: "--"
- generic [ref=e81]: 总用户数
- generic [ref=e84]:
- img [ref=e87]
- generic [ref=e90]: "--"
- generic [ref=e91]: 在线用户
- generic [ref=e94]:
- img [ref=e97]
- generic [ref=e99]: "--"
- generic [ref=e100]: 今日会议
- generic [ref=e103]:
- img [ref=e106]
- generic [ref=e109]: "--"
- generic [ref=e110]: 系统消息
- generic [ref=e111]:
- generic [ref=e112]: 开发进度
- generic [ref=e113]:
- paragraph [ref=e114]:
- text: "Phase 1: 基础设施与用户认证模块 —"
- generic:
- generic: 进行中
- paragraph [ref=e115]: 更多数据面板将在后续阶段中完善IM 统计、会议统计、系统监控等)

View File

@@ -0,0 +1,66 @@
- generic [ref=e3]:
- complementary [ref=e4]:
- generic [ref=e5]:
- generic [ref=e6]: E
- generic [ref=e7]: EchoChat
- menubar [ref=e8]:
- menuitem "仪表盘" [ref=e9] [cursor=pointer]:
- img [ref=e11]
- text: 仪表盘
- menuitem "用户管理" [ref=e13]:
- generic [ref=e14] [cursor=pointer]:
- img [ref=e16]
- generic [ref=e18]: 用户管理
- img [ref=e20]
- menuitem "联系人管理" [ref=e22]:
- generic [ref=e23] [cursor=pointer]:
- img [ref=e25]
- generic [ref=e28]: 联系人管理
- img [ref=e30]
- menuitem "群组管理" [ref=e32]:
- generic [ref=e33] [cursor=pointer]:
- img [ref=e35]
- generic [ref=e38]: 群组管理
- img [ref=e40]
- menuitem "消息管理" [ref=e42]:
- generic [ref=e43] [cursor=pointer]:
- img [ref=e45]
- generic [ref=e47]: 消息管理
- img [ref=e49]
- menuitem "在线监控" [ref=e51] [cursor=pointer]:
- img [ref=e53]
- text: 在线监控
- generic [ref=e55]:
- generic [ref=e56]:
- img [ref=e59] [cursor=pointer]
- button "新 testuser1" [ref=e63] [cursor=pointer]:
- generic [ref=e64]:
- generic [ref=e65]: testuser1
- img [ref=e67]
- main [ref=e69]:
- generic [ref=e70]:
- heading "仪表盘" [level=2] [ref=e71]
- generic [ref=e72]:
- generic [ref=e75]:
- img [ref=e78]
- generic [ref=e80]: "--"
- generic [ref=e81]: 总用户数
- generic [ref=e84]:
- img [ref=e87]
- generic [ref=e90]: "--"
- generic [ref=e91]: 在线用户
- generic [ref=e94]:
- img [ref=e97]
- generic [ref=e99]: "--"
- generic [ref=e100]: 今日会议
- generic [ref=e103]:
- img [ref=e106]
- generic [ref=e109]: "--"
- generic [ref=e110]: 系统消息
- generic [ref=e111]:
- generic [ref=e112]: 开发进度
- generic [ref=e113]:
- paragraph [ref=e114]:
- text: "Phase 1: 基础设施与用户认证模块 —"
- generic [ref=e117]: 进行中
- paragraph [ref=e115]: 更多数据面板将在后续阶段中完善IM 统计、会议统计、系统监控等)

View File

@@ -0,0 +1,70 @@
- generic [active] [ref=e1]:
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e229]:
- heading "仪表盘" [level=2] [ref=e230]
- generic [ref=e231]:
- generic [ref=e234]:
- img [ref=e237]
- generic [ref=e239]: "--"
- generic [ref=e240]: 总用户数
- generic [ref=e243]:
- img [ref=e246]
- generic [ref=e249]: "--"
- generic [ref=e250]: 在线用户
- generic [ref=e253]:
- img [ref=e256]
- generic [ref=e258]: "--"
- generic [ref=e259]: 今日会议
- generic [ref=e262]:
- img [ref=e265]
- generic [ref=e268]: "--"
- generic [ref=e269]: 系统消息
- generic [ref=e270]:
- generic [ref=e271]: 开发进度
- generic [ref=e272]:
- paragraph [ref=e273]:
- text: "Phase 1: 基础设施与用户认证模块 —"
- generic [ref=e275]: 进行中
- paragraph [ref=e276]: 更多数据面板将在后续阶段中完善IM 统计、会议统计、系统监控等)
- alert [ref=e277]:
- img [ref=e279]
- paragraph [ref=e281]: 登录成功

View File

@@ -0,0 +1,127 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e284]:
- heading "消息管理" [level=2] [ref=e286]
- generic [ref=e289]:
- generic [ref=e290]:
- generic [ref=e291]: 关键词
- generic [ref=e294]:
- img [ref=e297]
- textbox "关键词" [ref=e299]:
- /placeholder: 搜索消息内容
- generic [ref=e300]:
- generic [ref=e301]: 类型
- generic [ref=e304] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e306]
- generic [ref=e307]: 全部
- img [ref=e310]
- generic [ref=e312]:
- generic [ref=e313]: 状态
- generic [ref=e316] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e318]
- generic [ref=e319]: 全部
- img [ref=e322]
- generic [ref=e324]:
- generic [ref=e325]: 发送者ID
- spinbutton "发送者ID" [ref=e329]
- generic [ref=e330]:
- generic [ref=e331]: 时间范围
- generic [ref=e333]:
- img [ref=e335]
- combobox "时间范围" [ref=e337]
- generic [ref=e338]:
- combobox "结束日期" [ref=e339]
- generic [ref=e341]:
- button "搜索" [ref=e342] [cursor=pointer]:
- generic [ref=e343]: 搜索
- button "重置" [ref=e344] [cursor=pointer]:
- generic [ref=e345]: 重置
- generic [ref=e347]:
- generic [ref=e348]:
- generic [ref=e349]:
- table [ref=e351]:
- rowgroup [ref=e361]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e362]:
- columnheader "ID" [ref=e363]:
- generic [ref=e364]: ID
- columnheader "发送者" [ref=e365]:
- generic [ref=e366]: 发送者
- columnheader "类型" [ref=e367]:
- generic [ref=e368]: 类型
- columnheader "内容" [ref=e369]:
- generic [ref=e370]: 内容
- columnheader "状态" [ref=e371]:
- generic [ref=e372]: 状态
- columnheader "会话ID" [ref=e373]:
- generic [ref=e374]: 会话ID
- columnheader "发送时间" [ref=e375]:
- generic [ref=e376]: 发送时间
- columnheader "操作" [ref=e377]:
- generic [ref=e378]: 操作
- generic [ref=e382]:
- table:
- rowgroup
- generic [ref=e384]: 暂无数据
- img [ref=e388]
- generic [ref=e391]:
- generic [ref=e392]: 共 0 条
- generic [ref=e395] [cursor=pointer]:
- generic:
- combobox [ref=e397]
- generic [ref=e398]: 20条/页
- img [ref=e401]
- button "上一页" [disabled] [ref=e403]:
- generic:
- img
- list [ref=e404]:
- listitem "第 1 页" [ref=e405]: "1"
- button "下一页" [disabled] [ref=e406]:
- generic:
- img
- generic [ref=e407]:
- generic [ref=e408]: 前往
- spinbutton "页" [ref=e411]: "1"
- generic [ref=e412]:

View File

@@ -0,0 +1,700 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e284]:
- heading "消息管理" [level=2] [ref=e286]
- generic [ref=e289]:
- generic [ref=e290]:
- generic [ref=e291]: 关键词
- generic [ref=e294]:
- img [ref=e297]
- textbox "关键词" [ref=e299]:
- /placeholder: 搜索消息内容
- generic [ref=e300]:
- generic [ref=e301]: 类型
- generic [ref=e304] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e306]
- generic [ref=e307]: 全部
- img [ref=e310]
- generic [ref=e312]:
- generic [ref=e313]: 状态
- generic [ref=e316] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e318]
- generic [ref=e319]: 全部
- img [ref=e322]
- generic [ref=e324]:
- generic [ref=e325]: 发送者ID
- spinbutton "发送者ID" [ref=e329]
- generic [ref=e330]:
- generic [ref=e331]: 时间范围
- generic [ref=e333]:
- img [ref=e335]
- combobox "时间范围" [ref=e337]
- generic [ref=e338]:
- combobox "结束日期" [ref=e339]
- generic [ref=e341]:
- button "搜索" [ref=e342] [cursor=pointer]:
- generic [ref=e343]: 搜索
- button "重置" [ref=e344] [cursor=pointer]:
- generic [ref=e345]: 重置
- generic [ref=e347]:
- generic [ref=e349]:
- table [ref=e351]:
- rowgroup [ref=e361]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e362]:
- columnheader "ID" [ref=e363]:
- generic [ref=e364]: ID
- columnheader "发送者" [ref=e365]:
- generic [ref=e366]: 发送者
- columnheader "类型" [ref=e367]:
- generic [ref=e368]: 类型
- columnheader "内容" [ref=e369]:
- generic [ref=e370]: 内容
- columnheader "状态" [ref=e371]:
- generic [ref=e372]: 状态
- columnheader "会话ID" [ref=e373]:
- generic [ref=e374]: 会话ID
- columnheader "发送时间" [ref=e375]:
- generic [ref=e376]: 发送时间
- columnheader "操作" [ref=e377]:
- generic [ref=e378]: 操作
- table [ref=e414]:
- rowgroup [ref=e424]:
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e425]':
- cell "145" [ref=e426]:
- generic [ref=e427]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e428]':
- generic [ref=e430]:
- generic [ref=e432]:
- generic [ref=e433]:
- generic [ref=e434]: 卜锦元
- generic [ref=e435]: "ID: 7"
- cell "文本" [ref=e436]:
- generic [ref=e439]: 文本
- cell "1111" [ref=e440]:
- generic [ref=e442]: "1111"
- cell "正常" [ref=e443]:
- generic [ref=e446]: 正常
- cell "6" [ref=e447]:
- generic [ref=e448]: "6"
- cell "2026-04-17 14:10:04" [ref=e449]:
- generic [ref=e450]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e451]:
- generic [ref=e452]:
- button "详情" [ref=e453] [cursor=pointer]:
- generic [ref=e454]: 详情
- button "撤回" [ref=e455] [cursor=pointer]:
- generic [ref=e456]: 撤回
- button "删除" [ref=e457] [cursor=pointer]:
- generic [ref=e458]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e459]':
- cell "144" [ref=e460]:
- generic [ref=e461]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e462]':
- generic [ref=e464]:
- generic [ref=e466]:
- generic [ref=e467]:
- generic [ref=e468]: 卜锦元
- generic [ref=e469]: "ID: 7"
- cell "文本" [ref=e470]:
- generic [ref=e473]: 文本
- cell "1112122" [ref=e474]:
- generic [ref=e476]: "1112122"
- cell "正常" [ref=e477]:
- generic [ref=e480]: 正常
- cell "6" [ref=e481]:
- generic [ref=e482]: "6"
- cell "2026-04-17 14:09:48" [ref=e483]:
- generic [ref=e484]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e485]:
- generic [ref=e486]:
- button "详情" [ref=e487] [cursor=pointer]:
- generic [ref=e488]: 详情
- button "撤回" [ref=e489] [cursor=pointer]:
- generic [ref=e490]: 撤回
- button "删除" [ref=e491] [cursor=pointer]:
- generic [ref=e492]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e493]':
- cell "143" [ref=e494]:
- generic [ref=e495]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e496]':
- generic [ref=e498]:
- generic [ref=e500]:
- generic [ref=e501]:
- generic [ref=e502]: 卜锦元
- generic [ref=e503]: "ID: 7"
- cell "文本" [ref=e504]:
- generic [ref=e507]: 文本
- cell "1111" [ref=e508]:
- generic [ref=e510]: "1111"
- cell "正常" [ref=e511]:
- generic [ref=e514]: 正常
- cell "6" [ref=e515]:
- generic [ref=e516]: "6"
- cell "2026-04-17 14:09:36" [ref=e517]:
- generic [ref=e518]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e519]:
- generic [ref=e520]:
- button "详情" [ref=e521] [cursor=pointer]:
- generic [ref=e522]: 详情
- button "撤回" [ref=e523] [cursor=pointer]:
- generic [ref=e524]: 撤回
- button "删除" [ref=e525] [cursor=pointer]:
- generic [ref=e526]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e527]':
- cell "142" [ref=e528]:
- generic [ref=e529]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e530]':
- generic [ref=e532]:
- generic [ref=e534]:
- generic [ref=e535]:
- generic [ref=e536]: 段凌云
- generic [ref=e537]: "ID: 13"
- cell "文本" [ref=e538]:
- generic [ref=e541]: 文本
- cell "111111111223" [ref=e542]:
- generic [ref=e544]: "111111111223"
- cell "正常" [ref=e545]:
- generic [ref=e548]: 正常
- cell "6" [ref=e549]:
- generic [ref=e550]: "6"
- cell "2026-04-17 14:09:20" [ref=e551]:
- generic [ref=e552]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e553]:
- generic [ref=e554]:
- button "详情" [ref=e555] [cursor=pointer]:
- generic [ref=e556]: 详情
- button "撤回" [ref=e557] [cursor=pointer]:
- generic [ref=e558]: 撤回
- button "删除" [ref=e559] [cursor=pointer]:
- generic [ref=e560]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e561]':
- cell "141" [ref=e562]:
- generic [ref=e563]: "141"
- 'cell "周 周和智 ID: 15" [ref=e564]':
- generic [ref=e566]:
- generic [ref=e568]:
- generic [ref=e569]:
- generic [ref=e570]: 周和智
- generic [ref=e571]: "ID: 15"
- cell "文本" [ref=e572]:
- generic [ref=e575]: 文本
- cell "换届大会打卡还贷款" [ref=e576]:
- generic [ref=e578]: 换届大会打卡还贷款
- cell "正常" [ref=e579]:
- generic [ref=e582]: 正常
- cell "8" [ref=e583]:
- generic [ref=e584]: "8"
- cell "2026-03-12 15:04:56" [ref=e585]:
- generic [ref=e586]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e587]:
- generic [ref=e588]:
- button "详情" [ref=e589] [cursor=pointer]:
- generic [ref=e590]: 详情
- button "撤回" [ref=e591] [cursor=pointer]:
- generic [ref=e592]: 撤回
- button "删除" [ref=e593] [cursor=pointer]:
- generic [ref=e594]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e595]':
- cell "140" [ref=e596]:
- generic [ref=e597]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e598]':
- generic [ref=e600]:
- generic [ref=e602]:
- generic [ref=e603]:
- generic [ref=e604]: 卜锦元
- generic [ref=e605]: "ID: 7"
- cell "文本" [ref=e606]:
- generic [ref=e609]: 文本
- cell "你能看到吗" [ref=e610]:
- generic [ref=e612]: 你能看到吗
- cell "正常" [ref=e613]:
- generic [ref=e616]: 正常
- cell "8" [ref=e617]:
- generic [ref=e618]: "8"
- cell "2026-03-12 15:04:54" [ref=e619]:
- generic [ref=e620]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e621]:
- generic [ref=e622]:
- button "详情" [ref=e623] [cursor=pointer]:
- generic [ref=e624]: 详情
- button "撤回" [ref=e625] [cursor=pointer]:
- generic [ref=e626]: 撤回
- button "删除" [ref=e627] [cursor=pointer]:
- generic [ref=e628]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e629]':
- cell "139" [ref=e630]:
- generic [ref=e631]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e632]':
- generic [ref=e634]:
- generic [ref=e636]:
- generic [ref=e637]:
- generic [ref=e638]: 卜锦元
- generic [ref=e639]: "ID: 7"
- cell "文本" [ref=e640]:
- generic [ref=e643]: 文本
- cell "@周和智 1111" [ref=e644]:
- generic [ref=e646]: "@周和智 1111"
- cell "正常" [ref=e647]:
- generic [ref=e650]: 正常
- cell "8" [ref=e651]:
- generic [ref=e652]: "8"
- cell "2026-03-12 15:04:43" [ref=e653]:
- generic [ref=e654]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e655]:
- generic [ref=e656]:
- button "详情" [ref=e657] [cursor=pointer]:
- generic [ref=e658]: 详情
- button "撤回" [ref=e659] [cursor=pointer]:
- generic [ref=e660]: 撤回
- button "删除" [ref=e661] [cursor=pointer]:
- generic [ref=e662]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e663]':
- cell "138" [ref=e664]:
- generic [ref=e665]: "138"
- 'cell "? - ID: 0" [ref=e666]':
- generic [ref=e668]:
- generic [ref=e670]: "?"
- generic [ref=e671]:
- generic [ref=e672]: "-"
- generic [ref=e673]: "ID: 0"
- cell "系统消息" [ref=e674]:
- generic [ref=e677]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e678]:
- generic [ref=e680]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e681]:
- generic [ref=e684]: 正常
- cell "8" [ref=e685]:
- generic [ref=e686]: "8"
- cell "2026-03-12 15:04:20" [ref=e687]:
- generic [ref=e688]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e689]:
- generic [ref=e690]:
- button "详情" [ref=e691] [cursor=pointer]:
- generic [ref=e692]: 详情
- button "撤回" [ref=e693] [cursor=pointer]:
- generic [ref=e694]: 撤回
- button "删除" [ref=e695] [cursor=pointer]:
- generic [ref=e696]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e697]':
- cell "137" [ref=e698]:
- generic [ref=e699]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e700]':
- generic [ref=e702]:
- generic [ref=e704]:
- generic [ref=e705]:
- generic [ref=e706]: 卜锦元
- generic [ref=e707]: "ID: 7"
- cell "文本" [ref=e708]:
- generic [ref=e711]: 文本
- cell "ewqeqwe" [ref=e712]:
- generic [ref=e714]: ewqeqwe
- cell "正常" [ref=e715]:
- generic [ref=e718]: 正常
- cell "10" [ref=e719]:
- generic [ref=e720]: "10"
- cell "2026-03-12 15:03:56" [ref=e721]:
- generic [ref=e722]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e723]:
- generic [ref=e724]:
- button "详情" [ref=e725] [cursor=pointer]:
- generic [ref=e726]: 详情
- button "撤回" [ref=e727] [cursor=pointer]:
- generic [ref=e728]: 撤回
- button "删除" [ref=e729] [cursor=pointer]:
- generic [ref=e730]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e731]':
- cell "136" [ref=e732]:
- generic [ref=e733]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e734]':
- generic [ref=e736]:
- generic [ref=e738]:
- generic [ref=e739]:
- generic [ref=e740]: 卜锦元
- generic [ref=e741]: "ID: 7"
- cell "文本" [ref=e742]:
- generic [ref=e745]: 文本
- cell "23213123" [ref=e746]:
- generic [ref=e748]: "23213123"
- cell "正常" [ref=e749]:
- generic [ref=e752]: 正常
- cell "10" [ref=e753]:
- generic [ref=e754]: "10"
- cell "2026-03-12 15:03:53" [ref=e755]:
- generic [ref=e756]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e757]:
- generic [ref=e758]:
- button "详情" [ref=e759] [cursor=pointer]:
- generic [ref=e760]: 详情
- button "撤回" [ref=e761] [cursor=pointer]:
- generic [ref=e762]: 撤回
- button "删除" [ref=e763] [cursor=pointer]:
- generic [ref=e764]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e765]':
- cell "135" [ref=e766]:
- generic [ref=e767]: "135"
- 'cell "周 周和智 ID: 15" [ref=e768]':
- generic [ref=e770]:
- generic [ref=e772]:
- generic [ref=e773]:
- generic [ref=e774]: 周和智
- generic [ref=e775]: "ID: 15"
- cell "文本" [ref=e776]:
- generic [ref=e779]: 文本
- cell "打打看迦拉克隆离开" [ref=e780]:
- generic [ref=e782]: 打打看迦拉克隆离开
- cell "正常" [ref=e783]:
- generic [ref=e786]: 正常
- cell "10" [ref=e787]:
- generic [ref=e788]: "10"
- cell "2026-03-12 15:03:39" [ref=e789]:
- generic [ref=e790]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e791]:
- generic [ref=e792]:
- button "详情" [ref=e793] [cursor=pointer]:
- generic [ref=e794]: 详情
- button "撤回" [ref=e795] [cursor=pointer]:
- generic [ref=e796]: 撤回
- button "删除" [ref=e797] [cursor=pointer]:
- generic [ref=e798]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e799]':
- cell "134" [ref=e800]:
- generic [ref=e801]: "134"
- 'cell "周 周和智 ID: 15" [ref=e802]':
- generic [ref=e804]:
- generic [ref=e806]:
- generic [ref=e807]:
- generic [ref=e808]: 周和智
- generic [ref=e809]: "ID: 15"
- cell "文本" [ref=e810]:
- generic [ref=e813]: 文本
- cell "啦啦啦啦" [ref=e814]:
- generic [ref=e816]: 啦啦啦啦
- cell "正常" [ref=e817]:
- generic [ref=e820]: 正常
- cell "10" [ref=e821]:
- generic [ref=e822]: "10"
- cell "2026-03-12 15:03:30" [ref=e823]:
- generic [ref=e824]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e825]:
- generic [ref=e826]:
- button "详情" [ref=e827] [cursor=pointer]:
- generic [ref=e828]: 详情
- button "撤回" [ref=e829] [cursor=pointer]:
- generic [ref=e830]: 撤回
- button "删除" [ref=e831] [cursor=pointer]:
- generic [ref=e832]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e833]':
- cell "133" [ref=e834]:
- generic [ref=e835]: "133"
- 'cell "周 周和智 ID: 15" [ref=e836]':
- generic [ref=e838]:
- generic [ref=e840]:
- generic [ref=e841]:
- generic [ref=e842]: 周和智
- generic [ref=e843]: "ID: 15"
- cell "文本" [ref=e844]:
- generic [ref=e847]: 文本
- cell "哈喽" [ref=e848]:
- generic [ref=e850]: 哈喽
- cell "正常" [ref=e851]:
- generic [ref=e854]: 正常
- cell "10" [ref=e855]:
- generic [ref=e856]: "10"
- cell "2026-03-12 15:03:17" [ref=e857]:
- generic [ref=e858]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e859]:
- generic [ref=e860]:
- button "详情" [ref=e861] [cursor=pointer]:
- generic [ref=e862]: 详情
- button "撤回" [ref=e863] [cursor=pointer]:
- generic [ref=e864]: 撤回
- button "删除" [ref=e865] [cursor=pointer]:
- generic [ref=e866]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e867]':
- cell "132" [ref=e868]:
- generic [ref=e869]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e870]':
- generic [ref=e872]:
- generic [ref=e874]:
- generic [ref=e875]:
- generic [ref=e876]: 卜锦元
- generic [ref=e877]: "ID: 7"
- cell "文本" [ref=e878]:
- generic [ref=e881]: 文本
- cell "niahha a" [ref=e882]:
- generic [ref=e884]: niahha a
- cell "正常" [ref=e885]:
- generic [ref=e888]: 正常
- cell "10" [ref=e889]:
- generic [ref=e890]: "10"
- cell "2026-03-12 15:03:08" [ref=e891]:
- generic [ref=e892]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e893]:
- generic [ref=e894]:
- button "详情" [ref=e895] [cursor=pointer]:
- generic [ref=e896]: 详情
- button "撤回" [ref=e897] [cursor=pointer]:
- generic [ref=e898]: 撤回
- button "删除" [ref=e899] [cursor=pointer]:
- generic [ref=e900]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e901]':
- cell "131" [ref=e902]:
- generic [ref=e903]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e904]':
- generic [ref=e906]:
- generic [ref=e908]:
- generic [ref=e909]:
- generic [ref=e910]: 新昵称
- generic [ref=e911]: "ID: 4"
- cell "文本" [ref=e912]:
- generic [ref=e915]: 文本
- cell "哈哈哈,测试" [ref=e916]:
- generic [ref=e918]: 哈哈哈,测试
- cell "正常" [ref=e919]:
- generic [ref=e922]: 正常
- cell "8" [ref=e923]:
- generic [ref=e924]: "8"
- cell "2026-03-04 18:37:53" [ref=e925]:
- generic [ref=e926]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e927]:
- generic [ref=e928]:
- button "详情" [ref=e929] [cursor=pointer]:
- generic [ref=e930]: 详情
- button "撤回" [ref=e931] [cursor=pointer]:
- generic [ref=e932]: 撤回
- button "删除" [ref=e933] [cursor=pointer]:
- generic [ref=e934]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e935]':
- cell "130" [ref=e936]:
- generic [ref=e937]: "130"
- 'cell "? - ID: 0" [ref=e938]':
- generic [ref=e940]:
- generic [ref=e942]: "?"
- generic [ref=e943]:
- generic [ref=e944]: "-"
- generic [ref=e945]: "ID: 0"
- cell "系统消息" [ref=e946]:
- generic [ref=e949]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e950]:
- generic [ref=e952]: 卜锦元 更新了群公告
- cell "正常" [ref=e953]:
- generic [ref=e956]: 正常
- cell "8" [ref=e957]:
- generic [ref=e958]: "8"
- cell "2026-03-04 18:35:52" [ref=e959]:
- generic [ref=e960]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e961]:
- generic [ref=e962]:
- button "详情" [ref=e963] [cursor=pointer]:
- generic [ref=e964]: 详情
- button "撤回" [ref=e965] [cursor=pointer]:
- generic [ref=e966]: 撤回
- button "删除" [ref=e967] [cursor=pointer]:
- generic [ref=e968]: 删除
- 'row "129 新 新昵称 ID: 4 文本 我知道你是谁 正常 8 2026-03-04 18:31:51 详情 撤回 删除" [ref=e969]':
- cell "129" [ref=e970]:
- generic [ref=e971]: "129"
- 'cell "新 新昵称 ID: 4" [ref=e972]':
- generic [ref=e974]:
- generic [ref=e976]:
- generic [ref=e977]:
- generic [ref=e978]: 新昵称
- generic [ref=e979]: "ID: 4"
- cell "文本" [ref=e980]:
- generic [ref=e983]: 文本
- cell "我知道你是谁" [ref=e984]:
- generic [ref=e986]: 我知道你是谁
- cell "正常" [ref=e987]:
- generic [ref=e990]: 正常
- cell "8" [ref=e991]:
- generic [ref=e992]: "8"
- cell "2026-03-04 18:31:51" [ref=e993]:
- generic [ref=e994]: 2026-03-04 18:31:51
- cell "详情 撤回 删除" [ref=e995]:
- generic [ref=e996]:
- button "详情" [ref=e997] [cursor=pointer]:
- generic [ref=e998]: 详情
- button "撤回" [ref=e999] [cursor=pointer]:
- generic [ref=e1000]: 撤回
- button "删除" [ref=e1001] [cursor=pointer]:
- generic [ref=e1002]: 删除
- 'row "128 卜 卜锦元 ID: 7 文本 111112 正常 8 2026-03-04 18:31:37 详情 撤回 删除" [ref=e1003]':
- cell "128" [ref=e1004]:
- generic [ref=e1005]: "128"
- 'cell "卜 卜锦元 ID: 7" [ref=e1006]':
- generic [ref=e1008]:
- generic [ref=e1010]:
- generic [ref=e1011]:
- generic [ref=e1012]: 卜锦元
- generic [ref=e1013]: "ID: 7"
- cell "文本" [ref=e1014]:
- generic [ref=e1017]: 文本
- cell "111112" [ref=e1018]:
- generic [ref=e1020]: "111112"
- cell "正常" [ref=e1021]:
- generic [ref=e1024]: 正常
- cell "8" [ref=e1025]:
- generic [ref=e1026]: "8"
- cell "2026-03-04 18:31:37" [ref=e1027]:
- generic [ref=e1028]: 2026-03-04 18:31:37
- cell "详情 撤回 删除" [ref=e1029]:
- generic [ref=e1030]:
- button "详情" [ref=e1031] [cursor=pointer]:
- generic [ref=e1032]: 详情
- button "撤回" [ref=e1033] [cursor=pointer]:
- generic [ref=e1034]: 撤回
- button "删除" [ref=e1035] [cursor=pointer]:
- generic [ref=e1036]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e1037]':
- cell "127" [ref=e1038]:
- generic [ref=e1039]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e1040]':
- generic [ref=e1042]:
- generic [ref=e1044]:
- generic [ref=e1045]:
- generic [ref=e1046]: 卜锦元
- generic [ref=e1047]: "ID: 7"
- cell "文本" [ref=e1048]:
- generic [ref=e1051]: 文本
- cell "再次测试" [ref=e1052]:
- generic [ref=e1054]: 再次测试
- cell "正常" [ref=e1055]:
- generic [ref=e1058]: 正常
- cell "8" [ref=e1059]:
- generic [ref=e1060]: "8"
- cell "2026-03-04 18:25:29" [ref=e1061]:
- generic [ref=e1062]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e1063]:
- generic [ref=e1064]:
- button "详情" [ref=e1065] [cursor=pointer]:
- generic [ref=e1066]: 详情
- button "撤回" [ref=e1067] [cursor=pointer]:
- generic [ref=e1068]: 撤回
- button "删除" [ref=e1069] [cursor=pointer]:
- generic [ref=e1070]: 删除
- 'row "126 卜 卜锦元 ID: 7 文本 哈哈哈,知道我是谁吗 正常 8 2026-03-04 18:08:32 详情 撤回 删除" [ref=e1071]':
- cell "126" [ref=e1072]:
- generic [ref=e1073]: "126"
- 'cell "卜 卜锦元 ID: 7" [ref=e1074]':
- generic [ref=e1076]:
- generic [ref=e1078]:
- generic [ref=e1079]:
- generic [ref=e1080]: 卜锦元
- generic [ref=e1081]: "ID: 7"
- cell "文本" [ref=e1082]:
- generic [ref=e1085]: 文本
- cell "哈哈哈,知道我是谁吗" [ref=e1086]:
- generic [ref=e1088]: 哈哈哈,知道我是谁吗
- cell "正常" [ref=e1089]:
- generic [ref=e1092]: 正常
- cell "8" [ref=e1093]:
- generic [ref=e1094]: "8"
- cell "2026-03-04 18:08:32" [ref=e1095]:
- generic [ref=e1096]: 2026-03-04 18:08:32
- cell "详情 撤回 删除" [ref=e1097]:
- generic [ref=e1098]:
- button "详情" [ref=e1099] [cursor=pointer]:
- generic [ref=e1100]: 详情
- button "撤回" [ref=e1101] [cursor=pointer]:
- generic [ref=e1102]: 撤回
- button "删除" [ref=e1103] [cursor=pointer]:
- generic [ref=e1104]: 删除
- generic [ref=e391]:
- generic [ref=e392]: 共 141 条
- generic [ref=e395] [cursor=pointer]:
- generic:
- combobox [ref=e397]
- generic [ref=e398]: 20条/页
- img [ref=e401]
- button "上一页" [disabled] [ref=e403]:
- generic:
- img
- list [ref=e404]:
- listitem "第 1 页" [ref=e405]: "1"
- listitem "第 2 页" [ref=e1105] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e1106] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e1107] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e1108] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e1109] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e1110] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e1111] [cursor=pointer]: "8"
- button "下一页" [ref=e406] [cursor=pointer]:
- generic:
- img
- generic [ref=e407]:
- generic [ref=e408]: 前往
- spinbutton "页" [ref=e411]: "1"
- generic [ref=e412]:
- dialog "消息详情" [ref=e1113]:
- generic [active] [ref=e1114]:
- generic [ref=e1115]:
- heading "消息详情" [level=2] [ref=e1116]
- button "关闭此对话框" [ref=e1117] [cursor=pointer]:
- img [ref=e1119]
- generic [ref=e1122]:
- generic [ref=e1123]:
- generic [ref=e1125]:
- generic [ref=e1126]:
- generic [ref=e1127]:
- generic [ref=e1128]: 卜锦元
- generic [ref=e1130]: 正常
- generic [ref=e1131]:
- generic [ref=e1132]: "ID: 145"
- separator [ref=e1133]
- generic [ref=e1134]: "发送者ID: 7"
- separator [ref=e1135]
- generic [ref=e1136]: "会话ID: 6"
- generic [ref=e1137]:
- generic [ref=e1138]:
- generic [ref=e1139]: 消息类型
- generic [ref=e1142]: 文本
- generic [ref=e1143]:
- generic [ref=e1144]: 发送时间
- generic [ref=e1145]: 2026-04-17 14:10:04
- generic [ref=e1146]:
- generic [ref=e1147]: 消息内容
- paragraph [ref=e1149]: "1111"

View File

@@ -0,0 +1,700 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e284]:
- heading "消息管理" [level=2] [ref=e286]
- generic [ref=e289]:
- generic [ref=e290]:
- generic [ref=e291]: 关键词
- generic [ref=e294]:
- img [ref=e297]
- textbox "关键词" [ref=e299]:
- /placeholder: 搜索消息内容
- generic [ref=e300]:
- generic [ref=e301]: 类型
- generic [ref=e304] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e306]
- generic [ref=e307]: 全部
- img [ref=e310]
- generic [ref=e312]:
- generic [ref=e313]: 状态
- generic [ref=e316] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e318]
- generic [ref=e319]: 全部
- img [ref=e322]
- generic [ref=e324]:
- generic [ref=e325]: 发送者ID
- spinbutton "发送者ID" [ref=e329]
- generic [ref=e330]:
- generic [ref=e331]: 时间范围
- generic [ref=e333]:
- img [ref=e335]
- combobox "时间范围" [ref=e337]
- generic [ref=e338]:
- combobox "结束日期" [ref=e339]
- generic [ref=e341]:
- button "搜索" [ref=e342] [cursor=pointer]:
- generic [ref=e343]: 搜索
- button "重置" [ref=e344] [cursor=pointer]:
- generic [ref=e345]: 重置
- generic [ref=e347]:
- generic [ref=e349]:
- table [ref=e351]:
- rowgroup [ref=e361]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e362]:
- columnheader "ID" [ref=e363]:
- generic [ref=e364]: ID
- columnheader "发送者" [ref=e365]:
- generic [ref=e366]: 发送者
- columnheader "类型" [ref=e367]:
- generic [ref=e368]: 类型
- columnheader "内容" [ref=e369]:
- generic [ref=e370]: 内容
- columnheader "状态" [ref=e371]:
- generic [ref=e372]: 状态
- columnheader "会话ID" [ref=e373]:
- generic [ref=e374]: 会话ID
- columnheader "发送时间" [ref=e375]:
- generic [ref=e376]: 发送时间
- columnheader "操作" [ref=e377]:
- generic [ref=e378]: 操作
- table [ref=e414]:
- rowgroup [ref=e424]:
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e425]':
- cell "145" [ref=e426]:
- generic [ref=e427]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e428]':
- generic [ref=e430]:
- generic [ref=e432]:
- generic [ref=e433]:
- generic [ref=e434]: 卜锦元
- generic [ref=e435]: "ID: 7"
- cell "文本" [ref=e436]:
- generic [ref=e439]: 文本
- cell "1111" [ref=e440]:
- generic [ref=e442]: "1111"
- cell "正常" [ref=e443]:
- generic [ref=e446]: 正常
- cell "6" [ref=e447]:
- generic [ref=e448]: "6"
- cell "2026-04-17 14:10:04" [ref=e449]:
- generic [ref=e450]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e451]:
- generic [ref=e452]:
- button "详情" [ref=e453] [cursor=pointer]:
- generic [ref=e454]: 详情
- button "撤回" [ref=e455] [cursor=pointer]:
- generic [ref=e456]: 撤回
- button "删除" [ref=e457] [cursor=pointer]:
- generic [ref=e458]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e459]':
- cell "144" [ref=e460]:
- generic [ref=e461]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e462]':
- generic [ref=e464]:
- generic [ref=e466]:
- generic [ref=e467]:
- generic [ref=e468]: 卜锦元
- generic [ref=e469]: "ID: 7"
- cell "文本" [ref=e470]:
- generic [ref=e473]: 文本
- cell "1112122" [ref=e474]:
- generic [ref=e476]: "1112122"
- cell "正常" [ref=e477]:
- generic [ref=e480]: 正常
- cell "6" [ref=e481]:
- generic [ref=e482]: "6"
- cell "2026-04-17 14:09:48" [ref=e483]:
- generic [ref=e484]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e485]:
- generic [ref=e486]:
- button "详情" [ref=e487] [cursor=pointer]:
- generic [ref=e488]: 详情
- button "撤回" [ref=e489] [cursor=pointer]:
- generic [ref=e490]: 撤回
- button "删除" [ref=e491] [cursor=pointer]:
- generic [ref=e492]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e493]':
- cell "143" [ref=e494]:
- generic [ref=e495]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e496]':
- generic [ref=e498]:
- generic [ref=e500]:
- generic [ref=e501]:
- generic [ref=e502]: 卜锦元
- generic [ref=e503]: "ID: 7"
- cell "文本" [ref=e504]:
- generic [ref=e507]: 文本
- cell "1111" [ref=e508]:
- generic [ref=e510]: "1111"
- cell "正常" [ref=e511]:
- generic [ref=e514]: 正常
- cell "6" [ref=e515]:
- generic [ref=e516]: "6"
- cell "2026-04-17 14:09:36" [ref=e517]:
- generic [ref=e518]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e519]:
- generic [ref=e520]:
- button "详情" [ref=e521] [cursor=pointer]:
- generic [ref=e522]: 详情
- button "撤回" [ref=e523] [cursor=pointer]:
- generic [ref=e524]: 撤回
- button "删除" [ref=e525] [cursor=pointer]:
- generic [ref=e526]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e527]':
- cell "142" [ref=e528]:
- generic [ref=e529]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e530]':
- generic [ref=e532]:
- generic [ref=e534]:
- generic [ref=e535]:
- generic [ref=e536]: 段凌云
- generic [ref=e537]: "ID: 13"
- cell "文本" [ref=e538]:
- generic [ref=e541]: 文本
- cell "111111111223" [ref=e542]:
- generic [ref=e544]: "111111111223"
- cell "正常" [ref=e545]:
- generic [ref=e548]: 正常
- cell "6" [ref=e549]:
- generic [ref=e550]: "6"
- cell "2026-04-17 14:09:20" [ref=e551]:
- generic [ref=e552]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e553]:
- generic [ref=e554]:
- button "详情" [ref=e555] [cursor=pointer]:
- generic [ref=e556]: 详情
- button "撤回" [ref=e557] [cursor=pointer]:
- generic [ref=e558]: 撤回
- button "删除" [ref=e559] [cursor=pointer]:
- generic [ref=e560]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e561]':
- cell "141" [ref=e562]:
- generic [ref=e563]: "141"
- 'cell "周 周和智 ID: 15" [ref=e564]':
- generic [ref=e566]:
- generic [ref=e568]:
- generic [ref=e569]:
- generic [ref=e570]: 周和智
- generic [ref=e571]: "ID: 15"
- cell "文本" [ref=e572]:
- generic [ref=e575]: 文本
- cell "换届大会打卡还贷款" [ref=e576]:
- generic [ref=e578]: 换届大会打卡还贷款
- cell "正常" [ref=e579]:
- generic [ref=e582]: 正常
- cell "8" [ref=e583]:
- generic [ref=e584]: "8"
- cell "2026-03-12 15:04:56" [ref=e585]:
- generic [ref=e586]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e587]:
- generic [ref=e588]:
- button "详情" [ref=e589] [cursor=pointer]:
- generic [ref=e590]: 详情
- button "撤回" [ref=e591] [cursor=pointer]:
- generic [ref=e592]: 撤回
- button "删除" [ref=e593] [cursor=pointer]:
- generic [ref=e594]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e595]':
- cell "140" [ref=e596]:
- generic [ref=e597]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e598]':
- generic [ref=e600]:
- generic [ref=e602]:
- generic [ref=e603]:
- generic [ref=e604]: 卜锦元
- generic [ref=e605]: "ID: 7"
- cell "文本" [ref=e606]:
- generic [ref=e609]: 文本
- cell "你能看到吗" [ref=e610]:
- generic [ref=e612]: 你能看到吗
- cell "正常" [ref=e613]:
- generic [ref=e616]: 正常
- cell "8" [ref=e617]:
- generic [ref=e618]: "8"
- cell "2026-03-12 15:04:54" [ref=e619]:
- generic [ref=e620]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e621]:
- generic [ref=e622]:
- button "详情" [ref=e623] [cursor=pointer]:
- generic [ref=e624]: 详情
- button "撤回" [ref=e625] [cursor=pointer]:
- generic [ref=e626]: 撤回
- button "删除" [ref=e627] [cursor=pointer]:
- generic [ref=e628]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e629]':
- cell "139" [ref=e630]:
- generic [ref=e631]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e632]':
- generic [ref=e634]:
- generic [ref=e636]:
- generic [ref=e637]:
- generic [ref=e638]: 卜锦元
- generic [ref=e639]: "ID: 7"
- cell "文本" [ref=e640]:
- generic [ref=e643]: 文本
- cell "@周和智 1111" [ref=e644]:
- generic [ref=e646]: "@周和智 1111"
- cell "正常" [ref=e647]:
- generic [ref=e650]: 正常
- cell "8" [ref=e651]:
- generic [ref=e652]: "8"
- cell "2026-03-12 15:04:43" [ref=e653]:
- generic [ref=e654]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e655]:
- generic [ref=e656]:
- button "详情" [ref=e657] [cursor=pointer]:
- generic [ref=e658]: 详情
- button "撤回" [ref=e659] [cursor=pointer]:
- generic [ref=e660]: 撤回
- button "删除" [ref=e661] [cursor=pointer]:
- generic [ref=e662]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e663]':
- cell "138" [ref=e664]:
- generic [ref=e665]: "138"
- 'cell "? - ID: 0" [ref=e666]':
- generic [ref=e668]:
- generic [ref=e670]: "?"
- generic [ref=e671]:
- generic [ref=e672]: "-"
- generic [ref=e673]: "ID: 0"
- cell "系统消息" [ref=e674]:
- generic [ref=e677]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e678]:
- generic [ref=e680]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e681]:
- generic [ref=e684]: 正常
- cell "8" [ref=e685]:
- generic [ref=e686]: "8"
- cell "2026-03-12 15:04:20" [ref=e687]:
- generic [ref=e688]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e689]:
- generic [ref=e690]:
- button "详情" [ref=e691] [cursor=pointer]:
- generic [ref=e692]: 详情
- button "撤回" [ref=e693] [cursor=pointer]:
- generic [ref=e694]: 撤回
- button "删除" [ref=e695] [cursor=pointer]:
- generic [ref=e696]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e697]':
- cell "137" [ref=e698]:
- generic [ref=e699]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e700]':
- generic [ref=e702]:
- generic [ref=e704]:
- generic [ref=e705]:
- generic [ref=e706]: 卜锦元
- generic [ref=e707]: "ID: 7"
- cell "文本" [ref=e708]:
- generic [ref=e711]: 文本
- cell "ewqeqwe" [ref=e712]:
- generic [ref=e714]: ewqeqwe
- cell "正常" [ref=e715]:
- generic [ref=e718]: 正常
- cell "10" [ref=e719]:
- generic [ref=e720]: "10"
- cell "2026-03-12 15:03:56" [ref=e721]:
- generic [ref=e722]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e723]:
- generic [ref=e724]:
- button "详情" [ref=e725] [cursor=pointer]:
- generic [ref=e726]: 详情
- button "撤回" [ref=e727] [cursor=pointer]:
- generic [ref=e728]: 撤回
- button "删除" [ref=e729] [cursor=pointer]:
- generic [ref=e730]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e731]':
- cell "136" [ref=e732]:
- generic [ref=e733]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e734]':
- generic [ref=e736]:
- generic [ref=e738]:
- generic [ref=e739]:
- generic [ref=e740]: 卜锦元
- generic [ref=e741]: "ID: 7"
- cell "文本" [ref=e742]:
- generic [ref=e745]: 文本
- cell "23213123" [ref=e746]:
- generic [ref=e748]: "23213123"
- cell "正常" [ref=e749]:
- generic [ref=e752]: 正常
- cell "10" [ref=e753]:
- generic [ref=e754]: "10"
- cell "2026-03-12 15:03:53" [ref=e755]:
- generic [ref=e756]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e757]:
- generic [ref=e758]:
- button "详情" [ref=e759] [cursor=pointer]:
- generic [ref=e760]: 详情
- button "撤回" [ref=e761] [cursor=pointer]:
- generic [ref=e762]: 撤回
- button "删除" [ref=e763] [cursor=pointer]:
- generic [ref=e764]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e765]':
- cell "135" [ref=e766]:
- generic [ref=e767]: "135"
- 'cell "周 周和智 ID: 15" [ref=e768]':
- generic [ref=e770]:
- generic [ref=e772]:
- generic [ref=e773]:
- generic [ref=e774]: 周和智
- generic [ref=e775]: "ID: 15"
- cell "文本" [ref=e776]:
- generic [ref=e779]: 文本
- cell "打打看迦拉克隆离开" [ref=e780]:
- generic [ref=e782]: 打打看迦拉克隆离开
- cell "正常" [ref=e783]:
- generic [ref=e786]: 正常
- cell "10" [ref=e787]:
- generic [ref=e788]: "10"
- cell "2026-03-12 15:03:39" [ref=e789]:
- generic [ref=e790]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e791]:
- generic [ref=e792]:
- button "详情" [ref=e793] [cursor=pointer]:
- generic [ref=e794]: 详情
- button "撤回" [ref=e795] [cursor=pointer]:
- generic [ref=e796]: 撤回
- button "删除" [ref=e797] [cursor=pointer]:
- generic [ref=e798]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e799]':
- cell "134" [ref=e800]:
- generic [ref=e801]: "134"
- 'cell "周 周和智 ID: 15" [ref=e802]':
- generic [ref=e804]:
- generic [ref=e806]:
- generic [ref=e807]:
- generic [ref=e808]: 周和智
- generic [ref=e809]: "ID: 15"
- cell "文本" [ref=e810]:
- generic [ref=e813]: 文本
- cell "啦啦啦啦" [ref=e814]:
- generic [ref=e816]: 啦啦啦啦
- cell "正常" [ref=e817]:
- generic [ref=e820]: 正常
- cell "10" [ref=e821]:
- generic [ref=e822]: "10"
- cell "2026-03-12 15:03:30" [ref=e823]:
- generic [ref=e824]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e825]:
- generic [ref=e826]:
- button "详情" [ref=e827] [cursor=pointer]:
- generic [ref=e828]: 详情
- button "撤回" [ref=e829] [cursor=pointer]:
- generic [ref=e830]: 撤回
- button "删除" [ref=e831] [cursor=pointer]:
- generic [ref=e832]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e833]':
- cell "133" [ref=e834]:
- generic [ref=e835]: "133"
- 'cell "周 周和智 ID: 15" [ref=e836]':
- generic [ref=e838]:
- generic [ref=e840]:
- generic [ref=e841]:
- generic [ref=e842]: 周和智
- generic [ref=e843]: "ID: 15"
- cell "文本" [ref=e844]:
- generic [ref=e847]: 文本
- cell "哈喽" [ref=e848]:
- generic [ref=e850]: 哈喽
- cell "正常" [ref=e851]:
- generic [ref=e854]: 正常
- cell "10" [ref=e855]:
- generic [ref=e856]: "10"
- cell "2026-03-12 15:03:17" [ref=e857]:
- generic [ref=e858]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e859]:
- generic [ref=e860]:
- button "详情" [ref=e861] [cursor=pointer]:
- generic [ref=e862]: 详情
- button "撤回" [ref=e863] [cursor=pointer]:
- generic [ref=e864]: 撤回
- button "删除" [ref=e865] [cursor=pointer]:
- generic [ref=e866]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e867]':
- cell "132" [ref=e868]:
- generic [ref=e869]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e870]':
- generic [ref=e872]:
- generic [ref=e874]:
- generic [ref=e875]:
- generic [ref=e876]: 卜锦元
- generic [ref=e877]: "ID: 7"
- cell "文本" [ref=e878]:
- generic [ref=e881]: 文本
- cell "niahha a" [ref=e882]:
- generic [ref=e884]: niahha a
- cell "正常" [ref=e885]:
- generic [ref=e888]: 正常
- cell "10" [ref=e889]:
- generic [ref=e890]: "10"
- cell "2026-03-12 15:03:08" [ref=e891]:
- generic [ref=e892]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e893]:
- generic [ref=e894]:
- button "详情" [ref=e895] [cursor=pointer]:
- generic [ref=e896]: 详情
- button "撤回" [ref=e897] [cursor=pointer]:
- generic [ref=e898]: 撤回
- button "删除" [ref=e899] [cursor=pointer]:
- generic [ref=e900]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e901]':
- cell "131" [ref=e902]:
- generic [ref=e903]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e904]':
- generic [ref=e906]:
- generic [ref=e908]:
- generic [ref=e909]:
- generic [ref=e910]: 新昵称
- generic [ref=e911]: "ID: 4"
- cell "文本" [ref=e912]:
- generic [ref=e915]: 文本
- cell "哈哈哈,测试" [ref=e916]:
- generic [ref=e918]: 哈哈哈,测试
- cell "正常" [ref=e919]:
- generic [ref=e922]: 正常
- cell "8" [ref=e923]:
- generic [ref=e924]: "8"
- cell "2026-03-04 18:37:53" [ref=e925]:
- generic [ref=e926]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e927]:
- generic [ref=e928]:
- button "详情" [ref=e929] [cursor=pointer]:
- generic [ref=e930]: 详情
- button "撤回" [ref=e931] [cursor=pointer]:
- generic [ref=e932]: 撤回
- button "删除" [ref=e933] [cursor=pointer]:
- generic [ref=e934]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e935]':
- cell "130" [ref=e936]:
- generic [ref=e937]: "130"
- 'cell "? - ID: 0" [ref=e938]':
- generic [ref=e940]:
- generic [ref=e942]: "?"
- generic [ref=e943]:
- generic [ref=e944]: "-"
- generic [ref=e945]: "ID: 0"
- cell "系统消息" [ref=e946]:
- generic [ref=e949]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e950]:
- generic [ref=e952]: 卜锦元 更新了群公告
- cell "正常" [ref=e953]:
- generic [ref=e956]: 正常
- cell "8" [ref=e957]:
- generic [ref=e958]: "8"
- cell "2026-03-04 18:35:52" [ref=e959]:
- generic [ref=e960]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e961]:
- generic [ref=e962]:
- button "详情" [ref=e963] [cursor=pointer]:
- generic [ref=e964]: 详情
- button "撤回" [ref=e965] [cursor=pointer]:
- generic [ref=e966]: 撤回
- button "删除" [ref=e967] [cursor=pointer]:
- generic [ref=e968]: 删除
- 'row "129 新 新昵称 ID: 4 文本 我知道你是谁 正常 8 2026-03-04 18:31:51 详情 撤回 删除" [ref=e969]':
- cell "129" [ref=e970]:
- generic [ref=e971]: "129"
- 'cell "新 新昵称 ID: 4" [ref=e972]':
- generic [ref=e974]:
- generic [ref=e976]:
- generic [ref=e977]:
- generic [ref=e978]: 新昵称
- generic [ref=e979]: "ID: 4"
- cell "文本" [ref=e980]:
- generic [ref=e983]: 文本
- cell "我知道你是谁" [ref=e984]:
- generic [ref=e986]: 我知道你是谁
- cell "正常" [ref=e987]:
- generic [ref=e990]: 正常
- cell "8" [ref=e991]:
- generic [ref=e992]: "8"
- cell "2026-03-04 18:31:51" [ref=e993]:
- generic [ref=e994]: 2026-03-04 18:31:51
- cell "详情 撤回 删除" [ref=e995]:
- generic [ref=e996]:
- button "详情" [ref=e997] [cursor=pointer]:
- generic [ref=e998]: 详情
- button "撤回" [ref=e999] [cursor=pointer]:
- generic [ref=e1000]: 撤回
- button "删除" [ref=e1001] [cursor=pointer]:
- generic [ref=e1002]: 删除
- 'row "128 卜 卜锦元 ID: 7 文本 111112 正常 8 2026-03-04 18:31:37 详情 撤回 删除" [ref=e1003]':
- cell "128" [ref=e1004]:
- generic [ref=e1005]: "128"
- 'cell "卜 卜锦元 ID: 7" [ref=e1006]':
- generic [ref=e1008]:
- generic [ref=e1010]:
- generic [ref=e1011]:
- generic [ref=e1012]: 卜锦元
- generic [ref=e1013]: "ID: 7"
- cell "文本" [ref=e1014]:
- generic [ref=e1017]: 文本
- cell "111112" [ref=e1018]:
- generic [ref=e1020]: "111112"
- cell "正常" [ref=e1021]:
- generic [ref=e1024]: 正常
- cell "8" [ref=e1025]:
- generic [ref=e1026]: "8"
- cell "2026-03-04 18:31:37" [ref=e1027]:
- generic [ref=e1028]: 2026-03-04 18:31:37
- cell "详情 撤回 删除" [ref=e1029]:
- generic [ref=e1030]:
- button "详情" [ref=e1031] [cursor=pointer]:
- generic [ref=e1032]: 详情
- button "撤回" [ref=e1033] [cursor=pointer]:
- generic [ref=e1034]: 撤回
- button "删除" [ref=e1035] [cursor=pointer]:
- generic [ref=e1036]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e1037]':
- cell "127" [ref=e1038]:
- generic [ref=e1039]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e1040]':
- generic [ref=e1042]:
- generic [ref=e1044]:
- generic [ref=e1045]:
- generic [ref=e1046]: 卜锦元
- generic [ref=e1047]: "ID: 7"
- cell "文本" [ref=e1048]:
- generic [ref=e1051]: 文本
- cell "再次测试" [ref=e1052]:
- generic [ref=e1054]: 再次测试
- cell "正常" [ref=e1055]:
- generic [ref=e1058]: 正常
- cell "8" [ref=e1059]:
- generic [ref=e1060]: "8"
- cell "2026-03-04 18:25:29" [ref=e1061]:
- generic [ref=e1062]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e1063]:
- generic [ref=e1064]:
- button "详情" [ref=e1065] [cursor=pointer]:
- generic [ref=e1066]: 详情
- button "撤回" [ref=e1067] [cursor=pointer]:
- generic [ref=e1068]: 撤回
- button "删除" [ref=e1069] [cursor=pointer]:
- generic [ref=e1070]: 删除
- 'row "126 卜 卜锦元 ID: 7 文本 哈哈哈,知道我是谁吗 正常 8 2026-03-04 18:08:32 详情 撤回 删除" [ref=e1071]':
- cell "126" [ref=e1072]:
- generic [ref=e1073]: "126"
- 'cell "卜 卜锦元 ID: 7" [ref=e1074]':
- generic [ref=e1076]:
- generic [ref=e1078]:
- generic [ref=e1079]:
- generic [ref=e1080]: 卜锦元
- generic [ref=e1081]: "ID: 7"
- cell "文本" [ref=e1082]:
- generic [ref=e1085]: 文本
- cell "哈哈哈,知道我是谁吗" [ref=e1086]:
- generic [ref=e1088]: 哈哈哈,知道我是谁吗
- cell "正常" [ref=e1089]:
- generic [ref=e1092]: 正常
- cell "8" [ref=e1093]:
- generic [ref=e1094]: "8"
- cell "2026-03-04 18:08:32" [ref=e1095]:
- generic [ref=e1096]: 2026-03-04 18:08:32
- cell "详情 撤回 删除" [ref=e1097]:
- generic [ref=e1098]:
- button "详情" [ref=e1099] [cursor=pointer]:
- generic [ref=e1100]: 详情
- button "撤回" [ref=e1101] [cursor=pointer]:
- generic [ref=e1102]: 撤回
- button "删除" [ref=e1103] [cursor=pointer]:
- generic [ref=e1104]: 删除
- generic [ref=e391]:
- generic [ref=e392]: 共 141 条
- generic [ref=e395] [cursor=pointer]:
- generic:
- combobox [ref=e397]
- generic [ref=e398]: 20条/页
- img [ref=e401]
- button "上一页" [disabled] [ref=e403]:
- generic:
- img
- list [ref=e404]:
- listitem "第 1 页" [ref=e405]: "1"
- listitem "第 2 页" [ref=e1105] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e1106] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e1107] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e1108] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e1109] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e1110] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e1111] [cursor=pointer]: "8"
- button "下一页" [ref=e406] [cursor=pointer]:
- generic:
- img
- generic [ref=e407]:
- generic [ref=e408]: 前往
- spinbutton "页" [ref=e411]: "1"
- generic [ref=e412]:
- dialog "消息详情" [ref=e1113]:
- generic [active] [ref=e1114]:
- generic [ref=e1115]:
- heading "消息详情" [level=2] [ref=e1116]
- button "关闭此对话框" [ref=e1117] [cursor=pointer]:
- img [ref=e1119]
- generic [ref=e1122]:
- generic [ref=e1123]:
- generic [ref=e1125]:
- generic [ref=e1126]:
- generic [ref=e1127]:
- generic [ref=e1128]: 卜锦元
- generic [ref=e1130]: 正常
- generic [ref=e1131]:
- generic [ref=e1132]: "ID: 145"
- separator [ref=e1133]
- generic [ref=e1134]: "发送者ID: 7"
- separator [ref=e1135]
- generic [ref=e1136]: "会话ID: 6"
- generic [ref=e1137]:
- generic [ref=e1138]:
- generic [ref=e1139]: 消息类型
- generic [ref=e1142]: 文本
- generic [ref=e1143]:
- generic [ref=e1144]: 发送时间
- generic [ref=e1145]: 2026-04-17 14:10:04
- generic [ref=e1146]:
- generic [ref=e1147]: 消息内容
- paragraph [ref=e1149]: "1111"

View File

@@ -0,0 +1,127 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e1230]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1268]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- generic [ref=e1302]:
- table:
- rowgroup
- generic [ref=e1304]: 暂无数据
- img [ref=e1308]
- generic [ref=e1311]:
- generic [ref=e1312]: 共 0 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- button "下一页" [disabled] [ref=e1326]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,671 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [active] [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e1230]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e1344]':
- cell "145" [ref=e1345]:
- generic [ref=e1346]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e1347]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 卜锦元
- generic [ref=e1354]: "ID: 7"
- cell "文本" [ref=e1355]:
- generic [ref=e1358]: 文本
- cell "1111" [ref=e1359]:
- generic [ref=e1361]: "1111"
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "6" [ref=e1366]:
- generic [ref=e1367]: "6"
- cell "2026-04-17 14:10:04" [ref=e1368]:
- generic [ref=e1369]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e1378]':
- cell "144" [ref=e1379]:
- generic [ref=e1380]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e1381]':
- generic [ref=e1383]:
- generic [ref=e1385]:
- generic [ref=e1386]:
- generic [ref=e1387]: 卜锦元
- generic [ref=e1388]: "ID: 7"
- cell "文本" [ref=e1389]:
- generic [ref=e1392]: 文本
- cell "1112122" [ref=e1393]:
- generic [ref=e1395]: "1112122"
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "6" [ref=e1400]:
- generic [ref=e1401]: "6"
- cell "2026-04-17 14:09:48" [ref=e1402]:
- generic [ref=e1403]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e1412]':
- cell "143" [ref=e1413]:
- generic [ref=e1414]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e1415]':
- generic [ref=e1417]:
- generic [ref=e1419]:
- generic [ref=e1420]:
- generic [ref=e1421]: 卜锦元
- generic [ref=e1422]: "ID: 7"
- cell "文本" [ref=e1423]:
- generic [ref=e1426]: 文本
- cell "1111" [ref=e1427]:
- generic [ref=e1429]: "1111"
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "6" [ref=e1434]:
- generic [ref=e1435]: "6"
- cell "2026-04-17 14:09:36" [ref=e1436]:
- generic [ref=e1437]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e1446]':
- cell "142" [ref=e1447]:
- generic [ref=e1448]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e1449]':
- generic [ref=e1451]:
- generic [ref=e1453]:
- generic [ref=e1454]:
- generic [ref=e1455]: 段凌云
- generic [ref=e1456]: "ID: 13"
- cell "文本" [ref=e1457]:
- generic [ref=e1460]: 文本
- cell "111111111223" [ref=e1461]:
- generic [ref=e1463]: "111111111223"
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "6" [ref=e1468]:
- generic [ref=e1469]: "6"
- cell "2026-04-17 14:09:20" [ref=e1470]:
- generic [ref=e1471]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e1480]':
- cell "141" [ref=e1481]:
- generic [ref=e1482]: "141"
- 'cell "周 周和智 ID: 15" [ref=e1483]':
- generic [ref=e1485]:
- generic [ref=e1487]:
- generic [ref=e1488]:
- generic [ref=e1489]: 周和智
- generic [ref=e1490]: "ID: 15"
- cell "文本" [ref=e1491]:
- generic [ref=e1494]: 文本
- cell "换届大会打卡还贷款" [ref=e1495]:
- generic [ref=e1497]: 换届大会打卡还贷款
- cell "正常" [ref=e1498]:
- generic [ref=e1501]: 正常
- cell "8" [ref=e1502]:
- generic [ref=e1503]: "8"
- cell "2026-03-12 15:04:56" [ref=e1504]:
- generic [ref=e1505]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e1506]:
- generic [ref=e1507]:
- button "详情" [ref=e1508] [cursor=pointer]:
- generic [ref=e1509]: 详情
- button "撤回" [ref=e1510] [cursor=pointer]:
- generic [ref=e1511]: 撤回
- button "删除" [ref=e1512] [cursor=pointer]:
- generic [ref=e1513]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e1514]':
- cell "140" [ref=e1515]:
- generic [ref=e1516]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e1517]':
- generic [ref=e1519]:
- generic [ref=e1521]:
- generic [ref=e1522]:
- generic [ref=e1523]: 卜锦元
- generic [ref=e1524]: "ID: 7"
- cell "文本" [ref=e1525]:
- generic [ref=e1528]: 文本
- cell "你能看到吗" [ref=e1529]:
- generic [ref=e1531]: 你能看到吗
- cell "正常" [ref=e1532]:
- generic [ref=e1535]: 正常
- cell "8" [ref=e1536]:
- generic [ref=e1537]: "8"
- cell "2026-03-12 15:04:54" [ref=e1538]:
- generic [ref=e1539]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e1540]:
- generic [ref=e1541]:
- button "详情" [ref=e1542] [cursor=pointer]:
- generic [ref=e1543]: 详情
- button "撤回" [ref=e1544] [cursor=pointer]:
- generic [ref=e1545]: 撤回
- button "删除" [ref=e1546] [cursor=pointer]:
- generic [ref=e1547]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e1548]':
- cell "139" [ref=e1549]:
- generic [ref=e1550]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e1551]':
- generic [ref=e1553]:
- generic [ref=e1555]:
- generic [ref=e1556]:
- generic [ref=e1557]: 卜锦元
- generic [ref=e1558]: "ID: 7"
- cell "文本" [ref=e1559]:
- generic [ref=e1562]: 文本
- cell "@周和智 1111" [ref=e1563]:
- generic [ref=e1565]: "@周和智 1111"
- cell "正常" [ref=e1566]:
- generic [ref=e1569]: 正常
- cell "8" [ref=e1570]:
- generic [ref=e1571]: "8"
- cell "2026-03-12 15:04:43" [ref=e1572]:
- generic [ref=e1573]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e1574]:
- generic [ref=e1575]:
- button "详情" [ref=e1576] [cursor=pointer]:
- generic [ref=e1577]: 详情
- button "撤回" [ref=e1578] [cursor=pointer]:
- generic [ref=e1579]: 撤回
- button "删除" [ref=e1580] [cursor=pointer]:
- generic [ref=e1581]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e1582]':
- cell "138" [ref=e1583]:
- generic [ref=e1584]: "138"
- 'cell "? - ID: 0" [ref=e1585]':
- generic [ref=e1587]:
- generic [ref=e1589]: "?"
- generic [ref=e1590]:
- generic [ref=e1591]: "-"
- generic [ref=e1592]: "ID: 0"
- cell "系统消息" [ref=e1593]:
- generic [ref=e1596]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e1597]:
- generic [ref=e1599]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e1600]:
- generic [ref=e1603]: 正常
- cell "8" [ref=e1604]:
- generic [ref=e1605]: "8"
- cell "2026-03-12 15:04:20" [ref=e1606]:
- generic [ref=e1607]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e1608]:
- generic [ref=e1609]:
- button "详情" [ref=e1610] [cursor=pointer]:
- generic [ref=e1611]: 详情
- button "撤回" [ref=e1612] [cursor=pointer]:
- generic [ref=e1613]: 撤回
- button "删除" [ref=e1614] [cursor=pointer]:
- generic [ref=e1615]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e1616]':
- cell "137" [ref=e1617]:
- generic [ref=e1618]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e1619]':
- generic [ref=e1621]:
- generic [ref=e1623]:
- generic [ref=e1624]:
- generic [ref=e1625]: 卜锦元
- generic [ref=e1626]: "ID: 7"
- cell "文本" [ref=e1627]:
- generic [ref=e1630]: 文本
- cell "ewqeqwe" [ref=e1631]:
- generic [ref=e1633]: ewqeqwe
- cell "正常" [ref=e1634]:
- generic [ref=e1637]: 正常
- cell "10" [ref=e1638]:
- generic [ref=e1639]: "10"
- cell "2026-03-12 15:03:56" [ref=e1640]:
- generic [ref=e1641]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e1642]:
- generic [ref=e1643]:
- button "详情" [ref=e1644] [cursor=pointer]:
- generic [ref=e1645]: 详情
- button "撤回" [ref=e1646] [cursor=pointer]:
- generic [ref=e1647]: 撤回
- button "删除" [ref=e1648] [cursor=pointer]:
- generic [ref=e1649]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e1650]':
- cell "136" [ref=e1651]:
- generic [ref=e1652]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e1653]':
- generic [ref=e1655]:
- generic [ref=e1657]:
- generic [ref=e1658]:
- generic [ref=e1659]: 卜锦元
- generic [ref=e1660]: "ID: 7"
- cell "文本" [ref=e1661]:
- generic [ref=e1664]: 文本
- cell "23213123" [ref=e1665]:
- generic [ref=e1667]: "23213123"
- cell "正常" [ref=e1668]:
- generic [ref=e1671]: 正常
- cell "10" [ref=e1672]:
- generic [ref=e1673]: "10"
- cell "2026-03-12 15:03:53" [ref=e1674]:
- generic [ref=e1675]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e1676]:
- generic [ref=e1677]:
- button "详情" [ref=e1678] [cursor=pointer]:
- generic [ref=e1679]: 详情
- button "撤回" [ref=e1680] [cursor=pointer]:
- generic [ref=e1681]: 撤回
- button "删除" [ref=e1682] [cursor=pointer]:
- generic [ref=e1683]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e1684]':
- cell "135" [ref=e1685]:
- generic [ref=e1686]: "135"
- 'cell "周 周和智 ID: 15" [ref=e1687]':
- generic [ref=e1689]:
- generic [ref=e1691]:
- generic [ref=e1692]:
- generic [ref=e1693]: 周和智
- generic [ref=e1694]: "ID: 15"
- cell "文本" [ref=e1695]:
- generic [ref=e1698]: 文本
- cell "打打看迦拉克隆离开" [ref=e1699]:
- generic [ref=e1701]: 打打看迦拉克隆离开
- cell "正常" [ref=e1702]:
- generic [ref=e1705]: 正常
- cell "10" [ref=e1706]:
- generic [ref=e1707]: "10"
- cell "2026-03-12 15:03:39" [ref=e1708]:
- generic [ref=e1709]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e1710]:
- generic [ref=e1711]:
- button "详情" [ref=e1712] [cursor=pointer]:
- generic [ref=e1713]: 详情
- button "撤回" [ref=e1714] [cursor=pointer]:
- generic [ref=e1715]: 撤回
- button "删除" [ref=e1716] [cursor=pointer]:
- generic [ref=e1717]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e1718]':
- cell "134" [ref=e1719]:
- generic [ref=e1720]: "134"
- 'cell "周 周和智 ID: 15" [ref=e1721]':
- generic [ref=e1723]:
- generic [ref=e1725]:
- generic [ref=e1726]:
- generic [ref=e1727]: 周和智
- generic [ref=e1728]: "ID: 15"
- cell "文本" [ref=e1729]:
- generic [ref=e1732]: 文本
- cell "啦啦啦啦" [ref=e1733]:
- generic [ref=e1735]: 啦啦啦啦
- cell "正常" [ref=e1736]:
- generic [ref=e1739]: 正常
- cell "10" [ref=e1740]:
- generic [ref=e1741]: "10"
- cell "2026-03-12 15:03:30" [ref=e1742]:
- generic [ref=e1743]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e1744]:
- generic [ref=e1745]:
- button "详情" [ref=e1746] [cursor=pointer]:
- generic [ref=e1747]: 详情
- button "撤回" [ref=e1748] [cursor=pointer]:
- generic [ref=e1749]: 撤回
- button "删除" [ref=e1750] [cursor=pointer]:
- generic [ref=e1751]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e1752]':
- cell "133" [ref=e1753]:
- generic [ref=e1754]: "133"
- 'cell "周 周和智 ID: 15" [ref=e1755]':
- generic [ref=e1757]:
- generic [ref=e1759]:
- generic [ref=e1760]:
- generic [ref=e1761]: 周和智
- generic [ref=e1762]: "ID: 15"
- cell "文本" [ref=e1763]:
- generic [ref=e1766]: 文本
- cell "哈喽" [ref=e1767]:
- generic [ref=e1769]: 哈喽
- cell "正常" [ref=e1770]:
- generic [ref=e1773]: 正常
- cell "10" [ref=e1774]:
- generic [ref=e1775]: "10"
- cell "2026-03-12 15:03:17" [ref=e1776]:
- generic [ref=e1777]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e1778]:
- generic [ref=e1779]:
- button "详情" [ref=e1780] [cursor=pointer]:
- generic [ref=e1781]: 详情
- button "撤回" [ref=e1782] [cursor=pointer]:
- generic [ref=e1783]: 撤回
- button "删除" [ref=e1784] [cursor=pointer]:
- generic [ref=e1785]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e1786]':
- cell "132" [ref=e1787]:
- generic [ref=e1788]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e1789]':
- generic [ref=e1791]:
- generic [ref=e1793]:
- generic [ref=e1794]:
- generic [ref=e1795]: 卜锦元
- generic [ref=e1796]: "ID: 7"
- cell "文本" [ref=e1797]:
- generic [ref=e1800]: 文本
- cell "niahha a" [ref=e1801]:
- generic [ref=e1803]: niahha a
- cell "正常" [ref=e1804]:
- generic [ref=e1807]: 正常
- cell "10" [ref=e1808]:
- generic [ref=e1809]: "10"
- cell "2026-03-12 15:03:08" [ref=e1810]:
- generic [ref=e1811]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e1812]:
- generic [ref=e1813]:
- button "详情" [ref=e1814] [cursor=pointer]:
- generic [ref=e1815]: 详情
- button "撤回" [ref=e1816] [cursor=pointer]:
- generic [ref=e1817]: 撤回
- button "删除" [ref=e1818] [cursor=pointer]:
- generic [ref=e1819]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e1820]':
- cell "131" [ref=e1821]:
- generic [ref=e1822]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e1823]':
- generic [ref=e1825]:
- generic [ref=e1827]:
- generic [ref=e1828]:
- generic [ref=e1829]: 新昵称
- generic [ref=e1830]: "ID: 4"
- cell "文本" [ref=e1831]:
- generic [ref=e1834]: 文本
- cell "哈哈哈,测试" [ref=e1835]:
- generic [ref=e1837]: 哈哈哈,测试
- cell "正常" [ref=e1838]:
- generic [ref=e1841]: 正常
- cell "8" [ref=e1842]:
- generic [ref=e1843]: "8"
- cell "2026-03-04 18:37:53" [ref=e1844]:
- generic [ref=e1845]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e1846]:
- generic [ref=e1847]:
- button "详情" [ref=e1848] [cursor=pointer]:
- generic [ref=e1849]: 详情
- button "撤回" [ref=e1850] [cursor=pointer]:
- generic [ref=e1851]: 撤回
- button "删除" [ref=e1852] [cursor=pointer]:
- generic [ref=e1853]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e1854]':
- cell "130" [ref=e1855]:
- generic [ref=e1856]: "130"
- 'cell "? - ID: 0" [ref=e1857]':
- generic [ref=e1859]:
- generic [ref=e1861]: "?"
- generic [ref=e1862]:
- generic [ref=e1863]: "-"
- generic [ref=e1864]: "ID: 0"
- cell "系统消息" [ref=e1865]:
- generic [ref=e1868]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e1869]:
- generic [ref=e1871]: 卜锦元 更新了群公告
- cell "正常" [ref=e1872]:
- generic [ref=e1875]: 正常
- cell "8" [ref=e1876]:
- generic [ref=e1877]: "8"
- cell "2026-03-04 18:35:52" [ref=e1878]:
- generic [ref=e1879]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e1880]:
- generic [ref=e1881]:
- button "详情" [ref=e1882] [cursor=pointer]:
- generic [ref=e1883]: 详情
- button "撤回" [ref=e1884] [cursor=pointer]:
- generic [ref=e1885]: 撤回
- button "删除" [ref=e1886] [cursor=pointer]:
- generic [ref=e1887]: 删除
- 'row "129 新 新昵称 ID: 4 文本 我知道你是谁 正常 8 2026-03-04 18:31:51 详情 撤回 删除" [ref=e1888]':
- cell "129" [ref=e1889]:
- generic [ref=e1890]: "129"
- 'cell "新 新昵称 ID: 4" [ref=e1891]':
- generic [ref=e1893]:
- generic [ref=e1895]:
- generic [ref=e1896]:
- generic [ref=e1897]: 新昵称
- generic [ref=e1898]: "ID: 4"
- cell "文本" [ref=e1899]:
- generic [ref=e1902]: 文本
- cell "我知道你是谁" [ref=e1903]:
- generic [ref=e1905]: 我知道你是谁
- cell "正常" [ref=e1906]:
- generic [ref=e1909]: 正常
- cell "8" [ref=e1910]:
- generic [ref=e1911]: "8"
- cell "2026-03-04 18:31:51" [ref=e1912]:
- generic [ref=e1913]: 2026-03-04 18:31:51
- cell "详情 撤回 删除" [ref=e1914]:
- generic [ref=e1915]:
- button "详情" [ref=e1916] [cursor=pointer]:
- generic [ref=e1917]: 详情
- button "撤回" [ref=e1918] [cursor=pointer]:
- generic [ref=e1919]: 撤回
- button "删除" [ref=e1920] [cursor=pointer]:
- generic [ref=e1921]: 删除
- 'row "128 卜 卜锦元 ID: 7 文本 111112 正常 8 2026-03-04 18:31:37 详情 撤回 删除" [ref=e1922]':
- cell "128" [ref=e1923]:
- generic [ref=e1924]: "128"
- 'cell "卜 卜锦元 ID: 7" [ref=e1925]':
- generic [ref=e1927]:
- generic [ref=e1929]:
- generic [ref=e1930]:
- generic [ref=e1931]: 卜锦元
- generic [ref=e1932]: "ID: 7"
- cell "文本" [ref=e1933]:
- generic [ref=e1936]: 文本
- cell "111112" [ref=e1937]:
- generic [ref=e1939]: "111112"
- cell "正常" [ref=e1940]:
- generic [ref=e1943]: 正常
- cell "8" [ref=e1944]:
- generic [ref=e1945]: "8"
- cell "2026-03-04 18:31:37" [ref=e1946]:
- generic [ref=e1947]: 2026-03-04 18:31:37
- cell "详情 撤回 删除" [ref=e1948]:
- generic [ref=e1949]:
- button "详情" [ref=e1950] [cursor=pointer]:
- generic [ref=e1951]: 详情
- button "撤回" [ref=e1952] [cursor=pointer]:
- generic [ref=e1953]: 撤回
- button "删除" [ref=e1954] [cursor=pointer]:
- generic [ref=e1955]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e1956]':
- cell "127" [ref=e1957]:
- generic [ref=e1958]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e1959]':
- generic [ref=e1961]:
- generic [ref=e1963]:
- generic [ref=e1964]:
- generic [ref=e1965]: 卜锦元
- generic [ref=e1966]: "ID: 7"
- cell "文本" [ref=e1967]:
- generic [ref=e1970]: 文本
- cell "再次测试" [ref=e1971]:
- generic [ref=e1973]: 再次测试
- cell "正常" [ref=e1974]:
- generic [ref=e1977]: 正常
- cell "8" [ref=e1978]:
- generic [ref=e1979]: "8"
- cell "2026-03-04 18:25:29" [ref=e1980]:
- generic [ref=e1981]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e1982]:
- generic [ref=e1983]:
- button "详情" [ref=e1984] [cursor=pointer]:
- generic [ref=e1985]: 详情
- button "撤回" [ref=e1986] [cursor=pointer]:
- generic [ref=e1987]: 撤回
- button "删除" [ref=e1988] [cursor=pointer]:
- generic [ref=e1989]: 删除
- 'row "126 卜 卜锦元 ID: 7 文本 哈哈哈,知道我是谁吗 正常 8 2026-03-04 18:08:32 详情 撤回 删除" [ref=e1990]':
- cell "126" [ref=e1991]:
- generic [ref=e1992]: "126"
- 'cell "卜 卜锦元 ID: 7" [ref=e1993]':
- generic [ref=e1995]:
- generic [ref=e1997]:
- generic [ref=e1998]:
- generic [ref=e1999]: 卜锦元
- generic [ref=e2000]: "ID: 7"
- cell "文本" [ref=e2001]:
- generic [ref=e2004]: 文本
- cell "哈哈哈,知道我是谁吗" [ref=e2005]:
- generic [ref=e2007]: 哈哈哈,知道我是谁吗
- cell "正常" [ref=e2008]:
- generic [ref=e2011]: 正常
- cell "8" [ref=e2012]:
- generic [ref=e2013]: "8"
- cell "2026-03-04 18:08:32" [ref=e2014]:
- generic [ref=e2015]: 2026-03-04 18:08:32
- cell "详情 撤回 删除" [ref=e2016]:
- generic [ref=e2017]:
- button "详情" [ref=e2018] [cursor=pointer]:
- generic [ref=e2019]: 详情
- button "撤回" [ref=e2020] [cursor=pointer]:
- generic [ref=e2021]: 撤回
- button "删除" [ref=e2022] [cursor=pointer]:
- generic [ref=e2023]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- listitem "第 2 页" [ref=e2024] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e2025] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e2026] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e2027] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e2028] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e2029] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e2030] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,665 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- text: 测试
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e1230]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [active] [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e2036]':
- cell "131" [ref=e2037]:
- generic [ref=e1346]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e2038]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 新昵称
- generic [ref=e1354]: "ID: 4"
- cell "文本" [ref=e1355]:
- generic [ref=e1358]: 文本
- cell "哈哈哈,测试" [ref=e2039]:
- generic [ref=e1361]: 哈哈哈,测试
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "8" [ref=e2040]:
- generic [ref=e1367]: "8"
- cell "2026-03-04 18:37:53" [ref=e2041]:
- generic [ref=e1369]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e2042]':
- cell "127" [ref=e2043]:
- generic [ref=e1380]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e1381]':
- generic [ref=e1383]:
- generic [ref=e1385]:
- generic [ref=e1386]:
- generic [ref=e1387]: 卜锦元
- generic [ref=e1388]: "ID: 7"
- cell "文本" [ref=e1389]:
- generic [ref=e1392]: 文本
- cell "再次测试" [ref=e2044]:
- generic [ref=e1395]: 再次测试
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "8" [ref=e2045]:
- generic [ref=e1401]: "8"
- cell "2026-03-04 18:25:29" [ref=e2046]:
- generic [ref=e1403]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "124 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:26:07 详情 撤回 删除" [ref=e2047]':
- cell "124" [ref=e2048]:
- generic [ref=e1414]: "124"
- 'cell "? - ID: 0" [ref=e2049]':
- generic [ref=e1417]:
- generic [ref=e1419]: "?"
- generic [ref=e1420]:
- generic [ref=e1421]: "-"
- generic [ref=e1422]: "ID: 0"
- cell "系统消息" [ref=e2050]:
- generic [ref=e1426]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e2051]:
- generic [ref=e1429]: 测试用户2 被取消管理员
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "7" [ref=e2052]:
- generic [ref=e1435]: "7"
- cell "2026-03-04 17:26:07" [ref=e2053]:
- generic [ref=e1437]: 2026-03-04 17:26:07
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "123 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:26:03 详情 撤回 删除" [ref=e2054]':
- cell "123" [ref=e2055]:
- generic [ref=e1448]: "123"
- 'cell "? - ID: 0" [ref=e2056]':
- generic [ref=e1451]:
- generic [ref=e1453]: "?"
- generic [ref=e1454]:
- generic [ref=e1455]: "-"
- generic [ref=e1456]: "ID: 0"
- cell "系统消息" [ref=e2057]:
- generic [ref=e1460]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e2058]:
- generic [ref=e1463]: 测试用户2 被设为管理员
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "7" [ref=e2059]:
- generic [ref=e1469]: "7"
- cell "2026-03-04 17:26:03" [ref=e2060]:
- generic [ref=e1471]: 2026-03-04 17:26:03
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "122 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:25:54 详情 撤回 删除" [ref=e2061]':
- cell "122" [ref=e2062]:
- generic [ref=e1482]: "122"
- 'cell "? - ID: 0" [ref=e2063]':
- generic [ref=e1485]:
- generic [ref=e1487]: "?"
- generic [ref=e1488]:
- generic [ref=e1489]: "-"
- generic [ref=e1490]: "ID: 0"
- cell "系统消息" [ref=e2064]:
- generic [ref=e1494]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e2065]:
- generic [ref=e1497]: 测试用户2 被取消管理员
- cell "正常" [ref=e1498]:
- generic [ref=e1501]: 正常
- cell "7" [ref=e2066]:
- generic [ref=e1503]: "7"
- cell "2026-03-04 17:25:54" [ref=e2067]:
- generic [ref=e1505]: 2026-03-04 17:25:54
- cell "详情 撤回 删除" [ref=e1506]:
- generic [ref=e1507]:
- button "详情" [ref=e1508] [cursor=pointer]:
- generic [ref=e1509]: 详情
- button "撤回" [ref=e1510] [cursor=pointer]:
- generic [ref=e1511]: 撤回
- button "删除" [ref=e1512] [cursor=pointer]:
- generic [ref=e1513]: 删除
- 'row "121 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:25:50 详情 撤回 删除" [ref=e2068]':
- cell "121" [ref=e2069]:
- generic [ref=e1516]: "121"
- 'cell "? - ID: 0" [ref=e2070]':
- generic [ref=e1519]:
- generic [ref=e1521]: "?"
- generic [ref=e1522]:
- generic [ref=e1523]: "-"
- generic [ref=e1524]: "ID: 0"
- cell "系统消息" [ref=e2071]:
- generic [ref=e1528]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e2072]:
- generic [ref=e1531]: 测试用户2 被设为管理员
- cell "正常" [ref=e1532]:
- generic [ref=e1535]: 正常
- cell "7" [ref=e2073]:
- generic [ref=e1537]: "7"
- cell "2026-03-04 17:25:50" [ref=e2074]:
- generic [ref=e1539]: 2026-03-04 17:25:50
- cell "详情 撤回 删除" [ref=e1540]:
- generic [ref=e1541]:
- button "详情" [ref=e1542] [cursor=pointer]:
- generic [ref=e1543]: 详情
- button "撤回" [ref=e1544] [cursor=pointer]:
- generic [ref=e1545]: 撤回
- button "删除" [ref=e1546] [cursor=pointer]:
- generic [ref=e1547]: 删除
- 'row "119 ? - ID: 0 系统消息 测试用户3 被设为管理员 正常 7 2026-03-04 17:21:13 详情 撤回 删除" [ref=e2075]':
- cell "119" [ref=e2076]:
- generic [ref=e1550]: "119"
- 'cell "? - ID: 0" [ref=e2077]':
- generic [ref=e1553]:
- generic [ref=e1555]: "?"
- generic [ref=e1556]:
- generic [ref=e1557]: "-"
- generic [ref=e1558]: "ID: 0"
- cell "系统消息" [ref=e2078]:
- generic [ref=e1562]: 系统消息
- cell "测试用户3 被设为管理员" [ref=e2079]:
- generic [ref=e1565]: 测试用户3 被设为管理员
- cell "正常" [ref=e1566]:
- generic [ref=e1569]: 正常
- cell "7" [ref=e2080]:
- generic [ref=e1571]: "7"
- cell "2026-03-04 17:21:13" [ref=e2081]:
- generic [ref=e1573]: 2026-03-04 17:21:13
- cell "详情 撤回 删除" [ref=e1574]:
- generic [ref=e1575]:
- button "详情" [ref=e1576] [cursor=pointer]:
- generic [ref=e1577]: 详情
- button "撤回" [ref=e1578] [cursor=pointer]:
- generic [ref=e1579]: 撤回
- button "删除" [ref=e1580] [cursor=pointer]:
- generic [ref=e1581]: 删除
- 'row "118 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:21:07 详情 撤回 删除" [ref=e2082]':
- cell "118" [ref=e2083]:
- generic [ref=e1584]: "118"
- 'cell "? - ID: 0" [ref=e1585]':
- generic [ref=e1587]:
- generic [ref=e1589]: "?"
- generic [ref=e1590]:
- generic [ref=e1591]: "-"
- generic [ref=e1592]: "ID: 0"
- cell "系统消息" [ref=e1593]:
- generic [ref=e1596]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e2084]:
- generic [ref=e1599]: 测试用户2 被取消管理员
- cell "正常" [ref=e1600]:
- generic [ref=e1603]: 正常
- cell "7" [ref=e2085]:
- generic [ref=e1605]: "7"
- cell "2026-03-04 17:21:07" [ref=e2086]:
- generic [ref=e1607]: 2026-03-04 17:21:07
- cell "详情 撤回 删除" [ref=e1608]:
- generic [ref=e1609]:
- button "详情" [ref=e1610] [cursor=pointer]:
- generic [ref=e1611]: 详情
- button "撤回" [ref=e1612] [cursor=pointer]:
- generic [ref=e1613]: 撤回
- button "删除" [ref=e1614] [cursor=pointer]:
- generic [ref=e1615]: 删除
- 'row "117 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:20:31 详情 撤回 删除" [ref=e2087]':
- cell "117" [ref=e2088]:
- generic [ref=e1618]: "117"
- 'cell "? - ID: 0" [ref=e2089]':
- generic [ref=e1621]:
- generic [ref=e1623]: "?"
- generic [ref=e1624]:
- generic [ref=e1625]: "-"
- generic [ref=e1626]: "ID: 0"
- cell "系统消息" [ref=e2090]:
- generic [ref=e1630]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e2091]:
- generic [ref=e1633]: 测试用户2 被设为管理员
- cell "正常" [ref=e1634]:
- generic [ref=e1637]: 正常
- cell "7" [ref=e2092]:
- generic [ref=e1639]: "7"
- cell "2026-03-04 17:20:31" [ref=e2093]:
- generic [ref=e1641]: 2026-03-04 17:20:31
- cell "详情 撤回 删除" [ref=e1642]:
- generic [ref=e1643]:
- button "详情" [ref=e1644] [cursor=pointer]:
- generic [ref=e1645]: 详情
- button "撤回" [ref=e1646] [cursor=pointer]:
- generic [ref=e1647]: 撤回
- button "删除" [ref=e1648] [cursor=pointer]:
- generic [ref=e1649]: 删除
- 'row "113 新 新昵称 ID: 4 文本 测试你是死是1 正常 8 2026-03-04 17:00:57 详情 撤回 删除" [ref=e2094]':
- cell "113" [ref=e2095]:
- generic [ref=e1652]: "113"
- 'cell "新 新昵称 ID: 4" [ref=e2096]':
- generic [ref=e1655]:
- generic [ref=e1657]:
- generic [ref=e1658]:
- generic [ref=e1659]: 新昵称
- generic [ref=e1660]: "ID: 4"
- cell "文本" [ref=e1661]:
- generic [ref=e1664]: 文本
- cell "测试你是死是1" [ref=e2097]:
- generic [ref=e1667]: 测试你是死是1
- cell "正常" [ref=e1668]:
- generic [ref=e1671]: 正常
- cell "8" [ref=e2098]:
- generic [ref=e1673]: "8"
- cell "2026-03-04 17:00:57" [ref=e2099]:
- generic [ref=e1675]: 2026-03-04 17:00:57
- cell "详情 撤回 删除" [ref=e1676]:
- generic [ref=e1677]:
- button "详情" [ref=e1678] [cursor=pointer]:
- generic [ref=e1679]: 详情
- button "撤回" [ref=e1680] [cursor=pointer]:
- generic [ref=e1681]: 撤回
- button "删除" [ref=e1682] [cursor=pointer]:
- generic [ref=e1683]: 删除
- 'row "112 新 新昵称 ID: 4 文本 测试消息发送 正常 9 2026-03-04 16:57:15 详情 撤回 删除" [ref=e2100]':
- cell "112" [ref=e2101]:
- generic [ref=e1686]: "112"
- 'cell "新 新昵称 ID: 4" [ref=e2102]':
- generic [ref=e1689]:
- generic [ref=e1691]:
- generic [ref=e1692]:
- generic [ref=e1693]: 新昵称
- generic [ref=e1694]: "ID: 4"
- cell "文本" [ref=e1695]:
- generic [ref=e1698]: 文本
- cell "测试消息发送" [ref=e2103]:
- generic [ref=e1701]: 测试消息发送
- cell "正常" [ref=e1702]:
- generic [ref=e1705]: 正常
- cell "9" [ref=e2104]:
- generic [ref=e1707]: "9"
- cell "2026-03-04 16:57:15" [ref=e2105]:
- generic [ref=e1709]: 2026-03-04 16:57:15
- cell "详情 撤回 删除" [ref=e1710]:
- generic [ref=e1711]:
- button "详情" [ref=e1712] [cursor=pointer]:
- generic [ref=e1713]: 详情
- button "撤回" [ref=e1714] [cursor=pointer]:
- generic [ref=e1715]: 撤回
- button "删除" [ref=e1716] [cursor=pointer]:
- generic [ref=e1717]: 删除
- 'row "109 新 新昵称 ID: 4 文本 测试哈哈 正常 8 2026-03-04 16:54:25 详情 撤回 删除" [ref=e2106]':
- cell "109" [ref=e2107]:
- generic [ref=e1720]: "109"
- 'cell "新 新昵称 ID: 4" [ref=e2108]':
- generic [ref=e1723]:
- generic [ref=e1725]:
- generic [ref=e1726]:
- generic [ref=e1727]: 新昵称
- generic [ref=e1728]: "ID: 4"
- cell "文本" [ref=e1729]:
- generic [ref=e1732]: 文本
- cell "测试哈哈" [ref=e2109]:
- generic [ref=e1735]: 测试哈哈
- cell "正常" [ref=e1736]:
- generic [ref=e1739]: 正常
- cell "8" [ref=e2110]:
- generic [ref=e1741]: "8"
- cell "2026-03-04 16:54:25" [ref=e2111]:
- generic [ref=e1743]: 2026-03-04 16:54:25
- cell "详情 撤回 删除" [ref=e1744]:
- generic [ref=e1745]:
- button "详情" [ref=e1746] [cursor=pointer]:
- generic [ref=e1747]: 详情
- button "撤回" [ref=e1748] [cursor=pointer]:
- generic [ref=e1749]: 撤回
- button "删除" [ref=e1750] [cursor=pointer]:
- generic [ref=e1751]: 删除
- 'row "107 卜 卜锦元 ID: 7 文本 在测试 正常 9 2026-03-04 16:54:02 详情 撤回 删除" [ref=e2112]':
- cell "107" [ref=e2113]:
- generic [ref=e1754]: "107"
- 'cell "卜 卜锦元 ID: 7" [ref=e2114]':
- generic [ref=e1757]:
- generic [ref=e1759]:
- generic [ref=e1760]:
- generic [ref=e1761]: 卜锦元
- generic [ref=e1762]: "ID: 7"
- cell "文本" [ref=e1763]:
- generic [ref=e1766]: 文本
- cell "在测试" [ref=e2115]:
- generic [ref=e1769]: 在测试
- cell "正常" [ref=e1770]:
- generic [ref=e1773]: 正常
- cell "9" [ref=e2116]:
- generic [ref=e1775]: "9"
- cell "2026-03-04 16:54:02" [ref=e2117]:
- generic [ref=e1777]: 2026-03-04 16:54:02
- cell "详情 撤回 删除" [ref=e1778]:
- generic [ref=e1779]:
- button "详情" [ref=e1780] [cursor=pointer]:
- generic [ref=e1781]: 详情
- button "撤回" [ref=e1782] [cursor=pointer]:
- generic [ref=e1783]: 撤回
- button "删除" [ref=e1784] [cursor=pointer]:
- generic [ref=e1785]: 删除
- 'row "106 卜 卜锦元 ID: 7 文本 哈哈,再次测试 正常 9 2026-03-04 16:53:53 详情 撤回 删除" [ref=e2118]':
- cell "106" [ref=e2119]:
- generic [ref=e1788]: "106"
- 'cell "卜 卜锦元 ID: 7" [ref=e1789]':
- generic [ref=e1791]:
- generic [ref=e1793]:
- generic [ref=e1794]:
- generic [ref=e1795]: 卜锦元
- generic [ref=e1796]: "ID: 7"
- cell "文本" [ref=e1797]:
- generic [ref=e1800]: 文本
- cell "哈哈,再次测试" [ref=e2120]:
- generic [ref=e1803]: 哈哈,再次测试
- cell "正常" [ref=e1804]:
- generic [ref=e1807]: 正常
- cell "9" [ref=e2121]:
- generic [ref=e1809]: "9"
- cell "2026-03-04 16:53:53" [ref=e2122]:
- generic [ref=e1811]: 2026-03-04 16:53:53
- cell "详情 撤回 删除" [ref=e1812]:
- generic [ref=e1813]:
- button "详情" [ref=e1814] [cursor=pointer]:
- generic [ref=e1815]: 详情
- button "撤回" [ref=e1816] [cursor=pointer]:
- generic [ref=e1817]: 撤回
- button "删除" [ref=e1818] [cursor=pointer]:
- generic [ref=e1819]: 删除
- 'row "105 新 新昵称 ID: 4 文本 已读回执测试消息 正常 4 2026-03-04 16:52:06 详情 撤回 删除" [ref=e2123]':
- cell "105" [ref=e2124]:
- generic [ref=e1822]: "105"
- 'cell "新 新昵称 ID: 4" [ref=e1823]':
- generic [ref=e1825]:
- generic [ref=e1827]:
- generic [ref=e1828]:
- generic [ref=e1829]: 新昵称
- generic [ref=e1830]: "ID: 4"
- cell "文本" [ref=e1831]:
- generic [ref=e1834]: 文本
- cell "已读回执测试消息" [ref=e2125]:
- generic [ref=e1837]: 已读回执测试消息
- cell "正常" [ref=e1838]:
- generic [ref=e1841]: 正常
- cell "4" [ref=e2126]:
- generic [ref=e1843]: "4"
- cell "2026-03-04 16:52:06" [ref=e2127]:
- generic [ref=e1845]: 2026-03-04 16:52:06
- cell "详情 撤回 删除" [ref=e1846]:
- generic [ref=e1847]:
- button "详情" [ref=e1848] [cursor=pointer]:
- generic [ref=e1849]: 详情
- button "撤回" [ref=e1850] [cursor=pointer]:
- generic [ref=e1851]: 撤回
- button "删除" [ref=e1852] [cursor=pointer]:
- generic [ref=e1853]: 删除
- 'row "104 新 新昵称 ID: 4 文本 测试已读回执功能 正常 9 2026-03-04 16:51:00 详情 撤回 删除" [ref=e2128]':
- cell "104" [ref=e2129]:
- generic [ref=e1856]: "104"
- 'cell "新 新昵称 ID: 4" [ref=e2130]':
- generic [ref=e1859]:
- generic [ref=e1861]:
- generic [ref=e1862]:
- generic [ref=e1863]: 新昵称
- generic [ref=e1864]: "ID: 4"
- cell "文本" [ref=e2131]:
- generic [ref=e1868]: 文本
- cell "测试已读回执功能" [ref=e2132]:
- generic [ref=e1871]: 测试已读回执功能
- cell "正常" [ref=e1872]:
- generic [ref=e1875]: 正常
- cell "9" [ref=e2133]:
- generic [ref=e1877]: "9"
- cell "2026-03-04 16:51:00" [ref=e2134]:
- generic [ref=e1879]: 2026-03-04 16:51:00
- cell "详情 撤回 删除" [ref=e1880]:
- generic [ref=e1881]:
- button "详情" [ref=e1882] [cursor=pointer]:
- generic [ref=e1883]: 详情
- button "撤回" [ref=e1884] [cursor=pointer]:
- generic [ref=e1885]: 撤回
- button "删除" [ref=e1886] [cursor=pointer]:
- generic [ref=e1887]: 删除
- 'row "103 新 新昵称 ID: 4 文本 测试单聊已读回执 正常 3 2026-03-04 16:50:01 详情 撤回 删除" [ref=e2135]':
- cell "103" [ref=e2136]:
- generic [ref=e1890]: "103"
- 'cell "新 新昵称 ID: 4" [ref=e1891]':
- generic [ref=e1893]:
- generic [ref=e1895]:
- generic [ref=e1896]:
- generic [ref=e1897]: 新昵称
- generic [ref=e1898]: "ID: 4"
- cell "文本" [ref=e1899]:
- generic [ref=e1902]: 文本
- cell "测试单聊已读回执" [ref=e2137]:
- generic [ref=e1905]: 测试单聊已读回执
- cell "正常" [ref=e1906]:
- generic [ref=e1909]: 正常
- cell "3" [ref=e2138]:
- generic [ref=e1911]: "3"
- cell "2026-03-04 16:50:01" [ref=e2139]:
- generic [ref=e1913]: 2026-03-04 16:50:01
- cell "详情 撤回 删除" [ref=e1914]:
- generic [ref=e1915]:
- button "详情" [ref=e1916] [cursor=pointer]:
- generic [ref=e1917]: 详情
- button "撤回" [ref=e1918] [cursor=pointer]:
- generic [ref=e1919]: 撤回
- button "删除" [ref=e1920] [cursor=pointer]:
- generic [ref=e1921]: 删除
- 'row "102 卜 卜锦元 ID: 7 文本 测试 正常 9 2026-03-04 16:43:19 详情 撤回 删除" [ref=e2140]':
- cell "102" [ref=e2141]:
- generic [ref=e1924]: "102"
- 'cell "卜 卜锦元 ID: 7" [ref=e1925]':
- generic [ref=e1927]:
- generic [ref=e1929]:
- generic [ref=e1930]:
- generic [ref=e1931]: 卜锦元
- generic [ref=e1932]: "ID: 7"
- cell "文本" [ref=e1933]:
- generic [ref=e1936]: 文本
- cell "测试" [ref=e2142]:
- generic [ref=e1939]: 测试
- cell "正常" [ref=e1940]:
- generic [ref=e1943]: 正常
- cell "9" [ref=e2143]:
- generic [ref=e1945]: "9"
- cell "2026-03-04 16:43:19" [ref=e2144]:
- generic [ref=e1947]: 2026-03-04 16:43:19
- cell "详情 撤回 删除" [ref=e1948]:
- generic [ref=e1949]:
- button "详情" [ref=e1950] [cursor=pointer]:
- generic [ref=e1951]: 详情
- button "撤回" [ref=e1952] [cursor=pointer]:
- generic [ref=e1953]: 撤回
- button "删除" [ref=e1954] [cursor=pointer]:
- generic [ref=e1955]: 删除
- 'row "101 卜 卜锦元 ID: 7 文本 测试消费 正常 8 2026-03-04 16:43:01 详情 撤回 删除" [ref=e2145]':
- cell "101" [ref=e2146]:
- generic [ref=e1958]: "101"
- 'cell "卜 卜锦元 ID: 7" [ref=e1959]':
- generic [ref=e1961]:
- generic [ref=e1963]:
- generic [ref=e1964]:
- generic [ref=e1965]: 卜锦元
- generic [ref=e1966]: "ID: 7"
- cell "文本" [ref=e1967]:
- generic [ref=e1970]: 文本
- cell "测试消费" [ref=e2147]:
- generic [ref=e1973]: 测试消费
- cell "正常" [ref=e1974]:
- generic [ref=e1977]: 正常
- cell "8" [ref=e1978]:
- generic [ref=e1979]: "8"
- cell "2026-03-04 16:43:01" [ref=e2148]:
- generic [ref=e1981]: 2026-03-04 16:43:01
- cell "详情 撤回 删除" [ref=e1982]:
- generic [ref=e1983]:
- button "详情" [ref=e1984] [cursor=pointer]:
- generic [ref=e1985]: 详情
- button "撤回" [ref=e1986] [cursor=pointer]:
- generic [ref=e1987]: 撤回
- button "删除" [ref=e1988] [cursor=pointer]:
- generic [ref=e1989]: 删除
- 'row "98 卜 卜锦元 ID: 7 文本 测试111 正常 8 2026-03-04 16:39:57 详情 撤回 删除" [ref=e2149]':
- cell "98" [ref=e2150]:
- generic [ref=e1992]: "98"
- 'cell "卜 卜锦元 ID: 7" [ref=e1993]':
- generic [ref=e1995]:
- generic [ref=e1997]:
- generic [ref=e1998]:
- generic [ref=e1999]: 卜锦元
- generic [ref=e2000]: "ID: 7"
- cell "文本" [ref=e2001]:
- generic [ref=e2004]: 文本
- cell "测试111" [ref=e2151]:
- generic [ref=e2007]: 测试111
- cell "正常" [ref=e2008]:
- generic [ref=e2011]: 正常
- cell "8" [ref=e2012]:
- generic [ref=e2013]: "8"
- cell "2026-03-04 16:39:57" [ref=e2152]:
- generic [ref=e2015]: 2026-03-04 16:39:57
- cell "详情 撤回 删除" [ref=e2016]:
- generic [ref=e2017]:
- button "详情" [ref=e2018] [cursor=pointer]:
- generic [ref=e2019]: 详情
- button "撤回" [ref=e2020] [cursor=pointer]:
- generic [ref=e2021]: 撤回
- button "删除" [ref=e2022] [cursor=pointer]:
- generic [ref=e2023]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 31 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- listitem "第 2 页" [ref=e2153] [cursor=pointer]: "2"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,671 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e1230]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [active] [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e2154]':
- cell "145" [ref=e2155]:
- generic [ref=e1346]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e2156]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 卜锦元
- generic [ref=e1354]: "ID: 7"
- cell "文本" [ref=e1355]:
- generic [ref=e1358]: 文本
- cell "1111" [ref=e2157]:
- generic [ref=e1361]: "1111"
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "6" [ref=e2158]:
- generic [ref=e1367]: "6"
- cell "2026-04-17 14:10:04" [ref=e2159]:
- generic [ref=e1369]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e2160]':
- cell "144" [ref=e2161]:
- generic [ref=e1380]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e1381]':
- generic [ref=e1383]:
- generic [ref=e1385]:
- generic [ref=e1386]:
- generic [ref=e1387]: 卜锦元
- generic [ref=e1388]: "ID: 7"
- cell "文本" [ref=e1389]:
- generic [ref=e1392]: 文本
- cell "1112122" [ref=e2162]:
- generic [ref=e1395]: "1112122"
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "6" [ref=e2163]:
- generic [ref=e1401]: "6"
- cell "2026-04-17 14:09:48" [ref=e2164]:
- generic [ref=e1403]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e2165]':
- cell "143" [ref=e2166]:
- generic [ref=e1414]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e2167]':
- generic [ref=e1417]:
- generic [ref=e1419]:
- generic [ref=e1420]:
- generic [ref=e1421]: 卜锦元
- generic [ref=e1422]: "ID: 7"
- cell "文本" [ref=e2168]:
- generic [ref=e1426]: 文本
- cell "1111" [ref=e2169]:
- generic [ref=e1429]: "1111"
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "6" [ref=e2170]:
- generic [ref=e1435]: "6"
- cell "2026-04-17 14:09:36" [ref=e2171]:
- generic [ref=e1437]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e2172]':
- cell "142" [ref=e2173]:
- generic [ref=e1448]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e2174]':
- generic [ref=e1451]:
- generic [ref=e1453]:
- generic [ref=e1454]:
- generic [ref=e1455]: 段凌云
- generic [ref=e1456]: "ID: 13"
- cell "文本" [ref=e2175]:
- generic [ref=e1460]: 文本
- cell "111111111223" [ref=e2176]:
- generic [ref=e1463]: "111111111223"
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "6" [ref=e2177]:
- generic [ref=e1469]: "6"
- cell "2026-04-17 14:09:20" [ref=e2178]:
- generic [ref=e1471]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e2179]':
- cell "141" [ref=e2180]:
- generic [ref=e1482]: "141"
- 'cell "周 周和智 ID: 15" [ref=e2181]':
- generic [ref=e1485]:
- generic [ref=e1487]:
- generic [ref=e1488]:
- generic [ref=e1489]: 周和智
- generic [ref=e1490]: "ID: 15"
- cell "文本" [ref=e2182]:
- generic [ref=e1494]: 文本
- cell "换届大会打卡还贷款" [ref=e2183]:
- generic [ref=e1497]: 换届大会打卡还贷款
- cell "正常" [ref=e1498]:
- generic [ref=e1501]: 正常
- cell "8" [ref=e2184]:
- generic [ref=e1503]: "8"
- cell "2026-03-12 15:04:56" [ref=e2185]:
- generic [ref=e1505]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e1506]:
- generic [ref=e1507]:
- button "详情" [ref=e1508] [cursor=pointer]:
- generic [ref=e1509]: 详情
- button "撤回" [ref=e1510] [cursor=pointer]:
- generic [ref=e1511]: 撤回
- button "删除" [ref=e1512] [cursor=pointer]:
- generic [ref=e1513]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e2186]':
- cell "140" [ref=e2187]:
- generic [ref=e1516]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e2188]':
- generic [ref=e1519]:
- generic [ref=e1521]:
- generic [ref=e1522]:
- generic [ref=e1523]: 卜锦元
- generic [ref=e1524]: "ID: 7"
- cell "文本" [ref=e2189]:
- generic [ref=e1528]: 文本
- cell "你能看到吗" [ref=e2190]:
- generic [ref=e1531]: 你能看到吗
- cell "正常" [ref=e1532]:
- generic [ref=e1535]: 正常
- cell "8" [ref=e2191]:
- generic [ref=e1537]: "8"
- cell "2026-03-12 15:04:54" [ref=e2192]:
- generic [ref=e1539]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e1540]:
- generic [ref=e1541]:
- button "详情" [ref=e1542] [cursor=pointer]:
- generic [ref=e1543]: 详情
- button "撤回" [ref=e1544] [cursor=pointer]:
- generic [ref=e1545]: 撤回
- button "删除" [ref=e1546] [cursor=pointer]:
- generic [ref=e1547]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e2193]':
- cell "139" [ref=e2194]:
- generic [ref=e1550]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e2195]':
- generic [ref=e1553]:
- generic [ref=e1555]:
- generic [ref=e1556]:
- generic [ref=e1557]: 卜锦元
- generic [ref=e1558]: "ID: 7"
- cell "文本" [ref=e2196]:
- generic [ref=e1562]: 文本
- cell "@周和智 1111" [ref=e2197]:
- generic [ref=e1565]: "@周和智 1111"
- cell "正常" [ref=e1566]:
- generic [ref=e1569]: 正常
- cell "8" [ref=e2198]:
- generic [ref=e1571]: "8"
- cell "2026-03-12 15:04:43" [ref=e2199]:
- generic [ref=e1573]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e1574]:
- generic [ref=e1575]:
- button "详情" [ref=e1576] [cursor=pointer]:
- generic [ref=e1577]: 详情
- button "撤回" [ref=e1578] [cursor=pointer]:
- generic [ref=e1579]: 撤回
- button "删除" [ref=e1580] [cursor=pointer]:
- generic [ref=e1581]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e2200]':
- cell "138" [ref=e2201]:
- generic [ref=e1584]: "138"
- 'cell "? - ID: 0" [ref=e1585]':
- generic [ref=e1587]:
- generic [ref=e1589]: "?"
- generic [ref=e1590]:
- generic [ref=e1591]: "-"
- generic [ref=e1592]: "ID: 0"
- cell "系统消息" [ref=e1593]:
- generic [ref=e1596]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e2202]:
- generic [ref=e1599]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e1600]:
- generic [ref=e1603]: 正常
- cell "8" [ref=e2203]:
- generic [ref=e1605]: "8"
- cell "2026-03-12 15:04:20" [ref=e2204]:
- generic [ref=e1607]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e1608]:
- generic [ref=e1609]:
- button "详情" [ref=e1610] [cursor=pointer]:
- generic [ref=e1611]: 详情
- button "撤回" [ref=e1612] [cursor=pointer]:
- generic [ref=e1613]: 撤回
- button "删除" [ref=e1614] [cursor=pointer]:
- generic [ref=e1615]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e2205]':
- cell "137" [ref=e2206]:
- generic [ref=e1618]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e2207]':
- generic [ref=e1621]:
- generic [ref=e1623]:
- generic [ref=e1624]:
- generic [ref=e1625]: 卜锦元
- generic [ref=e1626]: "ID: 7"
- cell "文本" [ref=e2208]:
- generic [ref=e1630]: 文本
- cell "ewqeqwe" [ref=e2209]:
- generic [ref=e1633]: ewqeqwe
- cell "正常" [ref=e1634]:
- generic [ref=e1637]: 正常
- cell "10" [ref=e2210]:
- generic [ref=e1639]: "10"
- cell "2026-03-12 15:03:56" [ref=e2211]:
- generic [ref=e1641]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e1642]:
- generic [ref=e1643]:
- button "详情" [ref=e1644] [cursor=pointer]:
- generic [ref=e1645]: 详情
- button "撤回" [ref=e1646] [cursor=pointer]:
- generic [ref=e1647]: 撤回
- button "删除" [ref=e1648] [cursor=pointer]:
- generic [ref=e1649]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e2212]':
- cell "136" [ref=e2213]:
- generic [ref=e1652]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e2214]':
- generic [ref=e1655]:
- generic [ref=e1657]:
- generic [ref=e1658]:
- generic [ref=e1659]: 卜锦元
- generic [ref=e1660]: "ID: 7"
- cell "文本" [ref=e1661]:
- generic [ref=e1664]: 文本
- cell "23213123" [ref=e2215]:
- generic [ref=e1667]: "23213123"
- cell "正常" [ref=e1668]:
- generic [ref=e1671]: 正常
- cell "10" [ref=e2216]:
- generic [ref=e1673]: "10"
- cell "2026-03-12 15:03:53" [ref=e2217]:
- generic [ref=e1675]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e1676]:
- generic [ref=e1677]:
- button "详情" [ref=e1678] [cursor=pointer]:
- generic [ref=e1679]: 详情
- button "撤回" [ref=e1680] [cursor=pointer]:
- generic [ref=e1681]: 撤回
- button "删除" [ref=e1682] [cursor=pointer]:
- generic [ref=e1683]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e2218]':
- cell "135" [ref=e2219]:
- generic [ref=e1686]: "135"
- 'cell "周 周和智 ID: 15" [ref=e2220]':
- generic [ref=e1689]:
- generic [ref=e1691]:
- generic [ref=e1692]:
- generic [ref=e1693]: 周和智
- generic [ref=e1694]: "ID: 15"
- cell "文本" [ref=e1695]:
- generic [ref=e1698]: 文本
- cell "打打看迦拉克隆离开" [ref=e2221]:
- generic [ref=e1701]: 打打看迦拉克隆离开
- cell "正常" [ref=e1702]:
- generic [ref=e1705]: 正常
- cell "10" [ref=e2222]:
- generic [ref=e1707]: "10"
- cell "2026-03-12 15:03:39" [ref=e2223]:
- generic [ref=e1709]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e1710]:
- generic [ref=e1711]:
- button "详情" [ref=e1712] [cursor=pointer]:
- generic [ref=e1713]: 详情
- button "撤回" [ref=e1714] [cursor=pointer]:
- generic [ref=e1715]: 撤回
- button "删除" [ref=e1716] [cursor=pointer]:
- generic [ref=e1717]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e2224]':
- cell "134" [ref=e2225]:
- generic [ref=e1720]: "134"
- 'cell "周 周和智 ID: 15" [ref=e2226]':
- generic [ref=e1723]:
- generic [ref=e1725]:
- generic [ref=e1726]:
- generic [ref=e1727]: 周和智
- generic [ref=e1728]: "ID: 15"
- cell "文本" [ref=e1729]:
- generic [ref=e1732]: 文本
- cell "啦啦啦啦" [ref=e2227]:
- generic [ref=e1735]: 啦啦啦啦
- cell "正常" [ref=e1736]:
- generic [ref=e1739]: 正常
- cell "10" [ref=e2228]:
- generic [ref=e1741]: "10"
- cell "2026-03-12 15:03:30" [ref=e2229]:
- generic [ref=e1743]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e1744]:
- generic [ref=e1745]:
- button "详情" [ref=e1746] [cursor=pointer]:
- generic [ref=e1747]: 详情
- button "撤回" [ref=e1748] [cursor=pointer]:
- generic [ref=e1749]: 撤回
- button "删除" [ref=e1750] [cursor=pointer]:
- generic [ref=e1751]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e2230]':
- cell "133" [ref=e2231]:
- generic [ref=e1754]: "133"
- 'cell "周 周和智 ID: 15" [ref=e2232]':
- generic [ref=e1757]:
- generic [ref=e1759]:
- generic [ref=e1760]:
- generic [ref=e1761]: 周和智
- generic [ref=e1762]: "ID: 15"
- cell "文本" [ref=e1763]:
- generic [ref=e1766]: 文本
- cell "哈喽" [ref=e2233]:
- generic [ref=e1769]: 哈喽
- cell "正常" [ref=e1770]:
- generic [ref=e1773]: 正常
- cell "10" [ref=e2234]:
- generic [ref=e1775]: "10"
- cell "2026-03-12 15:03:17" [ref=e2235]:
- generic [ref=e1777]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e1778]:
- generic [ref=e1779]:
- button "详情" [ref=e1780] [cursor=pointer]:
- generic [ref=e1781]: 详情
- button "撤回" [ref=e1782] [cursor=pointer]:
- generic [ref=e1783]: 撤回
- button "删除" [ref=e1784] [cursor=pointer]:
- generic [ref=e1785]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e2236]':
- cell "132" [ref=e2237]:
- generic [ref=e1788]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e1789]':
- generic [ref=e1791]:
- generic [ref=e1793]:
- generic [ref=e1794]:
- generic [ref=e1795]: 卜锦元
- generic [ref=e1796]: "ID: 7"
- cell "文本" [ref=e1797]:
- generic [ref=e1800]: 文本
- cell "niahha a" [ref=e2238]:
- generic [ref=e1803]: niahha a
- cell "正常" [ref=e1804]:
- generic [ref=e1807]: 正常
- cell "10" [ref=e2239]:
- generic [ref=e1809]: "10"
- cell "2026-03-12 15:03:08" [ref=e2240]:
- generic [ref=e1811]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e1812]:
- generic [ref=e1813]:
- button "详情" [ref=e1814] [cursor=pointer]:
- generic [ref=e1815]: 详情
- button "撤回" [ref=e1816] [cursor=pointer]:
- generic [ref=e1817]: 撤回
- button "删除" [ref=e1818] [cursor=pointer]:
- generic [ref=e1819]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e2241]':
- cell "131" [ref=e2242]:
- generic [ref=e1822]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e1823]':
- generic [ref=e1825]:
- generic [ref=e1827]:
- generic [ref=e1828]:
- generic [ref=e1829]: 新昵称
- generic [ref=e1830]: "ID: 4"
- cell "文本" [ref=e1831]:
- generic [ref=e1834]: 文本
- cell "哈哈哈,测试" [ref=e2243]:
- generic [ref=e1837]: 哈哈哈,测试
- cell "正常" [ref=e1838]:
- generic [ref=e1841]: 正常
- cell "8" [ref=e2244]:
- generic [ref=e1843]: "8"
- cell "2026-03-04 18:37:53" [ref=e2245]:
- generic [ref=e1845]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e1846]:
- generic [ref=e1847]:
- button "详情" [ref=e1848] [cursor=pointer]:
- generic [ref=e1849]: 详情
- button "撤回" [ref=e1850] [cursor=pointer]:
- generic [ref=e1851]: 撤回
- button "删除" [ref=e1852] [cursor=pointer]:
- generic [ref=e1853]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e2246]':
- cell "130" [ref=e2247]:
- generic [ref=e1856]: "130"
- 'cell "? - ID: 0" [ref=e2248]':
- generic [ref=e1859]:
- generic [ref=e1861]: "?"
- generic [ref=e1862]:
- generic [ref=e1863]: "-"
- generic [ref=e1864]: "ID: 0"
- cell "系统消息" [ref=e2249]:
- generic [ref=e1868]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e2250]:
- generic [ref=e1871]: 卜锦元 更新了群公告
- cell "正常" [ref=e1872]:
- generic [ref=e1875]: 正常
- cell "8" [ref=e2251]:
- generic [ref=e1877]: "8"
- cell "2026-03-04 18:35:52" [ref=e2252]:
- generic [ref=e1879]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e1880]:
- generic [ref=e1881]:
- button "详情" [ref=e1882] [cursor=pointer]:
- generic [ref=e1883]: 详情
- button "撤回" [ref=e1884] [cursor=pointer]:
- generic [ref=e1885]: 撤回
- button "删除" [ref=e1886] [cursor=pointer]:
- generic [ref=e1887]: 删除
- 'row "129 新 新昵称 ID: 4 文本 我知道你是谁 正常 8 2026-03-04 18:31:51 详情 撤回 删除" [ref=e2253]':
- cell "129" [ref=e2254]:
- generic [ref=e1890]: "129"
- 'cell "新 新昵称 ID: 4" [ref=e1891]':
- generic [ref=e1893]:
- generic [ref=e1895]:
- generic [ref=e1896]:
- generic [ref=e1897]: 新昵称
- generic [ref=e1898]: "ID: 4"
- cell "文本" [ref=e1899]:
- generic [ref=e1902]: 文本
- cell "我知道你是谁" [ref=e2255]:
- generic [ref=e1905]: 我知道你是谁
- cell "正常" [ref=e1906]:
- generic [ref=e1909]: 正常
- cell "8" [ref=e2256]:
- generic [ref=e1911]: "8"
- cell "2026-03-04 18:31:51" [ref=e2257]:
- generic [ref=e1913]: 2026-03-04 18:31:51
- cell "详情 撤回 删除" [ref=e1914]:
- generic [ref=e1915]:
- button "详情" [ref=e1916] [cursor=pointer]:
- generic [ref=e1917]: 详情
- button "撤回" [ref=e1918] [cursor=pointer]:
- generic [ref=e1919]: 撤回
- button "删除" [ref=e1920] [cursor=pointer]:
- generic [ref=e1921]: 删除
- 'row "128 卜 卜锦元 ID: 7 文本 111112 正常 8 2026-03-04 18:31:37 详情 撤回 删除" [ref=e2258]':
- cell "128" [ref=e2259]:
- generic [ref=e1924]: "128"
- 'cell "卜 卜锦元 ID: 7" [ref=e1925]':
- generic [ref=e1927]:
- generic [ref=e1929]:
- generic [ref=e1930]:
- generic [ref=e1931]: 卜锦元
- generic [ref=e1932]: "ID: 7"
- cell "文本" [ref=e1933]:
- generic [ref=e1936]: 文本
- cell "111112" [ref=e2260]:
- generic [ref=e1939]: "111112"
- cell "正常" [ref=e1940]:
- generic [ref=e1943]: 正常
- cell "8" [ref=e2261]:
- generic [ref=e1945]: "8"
- cell "2026-03-04 18:31:37" [ref=e2262]:
- generic [ref=e1947]: 2026-03-04 18:31:37
- cell "详情 撤回 删除" [ref=e1948]:
- generic [ref=e1949]:
- button "详情" [ref=e1950] [cursor=pointer]:
- generic [ref=e1951]: 详情
- button "撤回" [ref=e1952] [cursor=pointer]:
- generic [ref=e1953]: 撤回
- button "删除" [ref=e1954] [cursor=pointer]:
- generic [ref=e1955]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e2263]':
- cell "127" [ref=e2264]:
- generic [ref=e1958]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e1959]':
- generic [ref=e1961]:
- generic [ref=e1963]:
- generic [ref=e1964]:
- generic [ref=e1965]: 卜锦元
- generic [ref=e1966]: "ID: 7"
- cell "文本" [ref=e1967]:
- generic [ref=e1970]: 文本
- cell "再次测试" [ref=e2265]:
- generic [ref=e1973]: 再次测试
- cell "正常" [ref=e1974]:
- generic [ref=e1977]: 正常
- cell "8" [ref=e1978]:
- generic [ref=e1979]: "8"
- cell "2026-03-04 18:25:29" [ref=e2266]:
- generic [ref=e1981]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e1982]:
- generic [ref=e1983]:
- button "详情" [ref=e1984] [cursor=pointer]:
- generic [ref=e1985]: 详情
- button "撤回" [ref=e1986] [cursor=pointer]:
- generic [ref=e1987]: 撤回
- button "删除" [ref=e1988] [cursor=pointer]:
- generic [ref=e1989]: 删除
- 'row "126 卜 卜锦元 ID: 7 文本 哈哈哈,知道我是谁吗 正常 8 2026-03-04 18:08:32 详情 撤回 删除" [ref=e2267]':
- cell "126" [ref=e2268]:
- generic [ref=e1992]: "126"
- 'cell "卜 卜锦元 ID: 7" [ref=e1993]':
- generic [ref=e1995]:
- generic [ref=e1997]:
- generic [ref=e1998]:
- generic [ref=e1999]: 卜锦元
- generic [ref=e2000]: "ID: 7"
- cell "文本" [ref=e2001]:
- generic [ref=e2004]: 文本
- cell "哈哈哈,知道我是谁吗" [ref=e2269]:
- generic [ref=e2007]: 哈哈哈,知道我是谁吗
- cell "正常" [ref=e2008]:
- generic [ref=e2011]: 正常
- cell "8" [ref=e2012]:
- generic [ref=e2013]: "8"
- cell "2026-03-04 18:08:32" [ref=e2270]:
- generic [ref=e2015]: 2026-03-04 18:08:32
- cell "详情 撤回 删除" [ref=e2016]:
- generic [ref=e2017]:
- button "详情" [ref=e2018] [cursor=pointer]:
- generic [ref=e2019]: 详情
- button "撤回" [ref=e2020] [cursor=pointer]:
- generic [ref=e2021]: 撤回
- button "删除" [ref=e2022] [cursor=pointer]:
- generic [ref=e2023]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- listitem "第 2 页" [ref=e2271] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e2272] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e2273] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e2274] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e2275] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e2276] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e2277] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,679 @@
- generic [ref=e1]:
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [expanded] [active] [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e1230]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e2154]':
- cell "145" [ref=e2155]:
- generic [ref=e1346]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e2156]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 卜锦元
- generic [ref=e1354]: "ID: 7"
- cell "文本" [ref=e1355]:
- generic [ref=e1358]: 文本
- cell "1111" [ref=e2157]:
- generic [ref=e1361]: "1111"
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "6" [ref=e2158]:
- generic [ref=e1367]: "6"
- cell "2026-04-17 14:10:04" [ref=e2159]:
- generic [ref=e1369]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e2160]':
- cell "144" [ref=e2161]:
- generic [ref=e1380]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e1381]':
- generic [ref=e1383]:
- generic [ref=e1385]:
- generic [ref=e1386]:
- generic [ref=e1387]: 卜锦元
- generic [ref=e1388]: "ID: 7"
- cell "文本" [ref=e1389]:
- generic [ref=e1392]: 文本
- cell "1112122" [ref=e2162]:
- generic [ref=e1395]: "1112122"
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "6" [ref=e2163]:
- generic [ref=e1401]: "6"
- cell "2026-04-17 14:09:48" [ref=e2164]:
- generic [ref=e1403]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e2165]':
- cell "143" [ref=e2166]:
- generic [ref=e1414]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e2167]':
- generic [ref=e1417]:
- generic [ref=e1419]:
- generic [ref=e1420]:
- generic [ref=e1421]: 卜锦元
- generic [ref=e1422]: "ID: 7"
- cell "文本" [ref=e2168]:
- generic [ref=e1426]: 文本
- cell "1111" [ref=e2169]:
- generic [ref=e1429]: "1111"
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "6" [ref=e2170]:
- generic [ref=e1435]: "6"
- cell "2026-04-17 14:09:36" [ref=e2171]:
- generic [ref=e1437]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e2172]':
- cell "142" [ref=e2173]:
- generic [ref=e1448]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e2174]':
- generic [ref=e1451]:
- generic [ref=e1453]:
- generic [ref=e1454]:
- generic [ref=e1455]: 段凌云
- generic [ref=e1456]: "ID: 13"
- cell "文本" [ref=e2175]:
- generic [ref=e1460]: 文本
- cell "111111111223" [ref=e2176]:
- generic [ref=e1463]: "111111111223"
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "6" [ref=e2177]:
- generic [ref=e1469]: "6"
- cell "2026-04-17 14:09:20" [ref=e2178]:
- generic [ref=e1471]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e2179]':
- cell "141" [ref=e2180]:
- generic [ref=e1482]: "141"
- 'cell "周 周和智 ID: 15" [ref=e2181]':
- generic [ref=e1485]:
- generic [ref=e1487]:
- generic [ref=e1488]:
- generic [ref=e1489]: 周和智
- generic [ref=e1490]: "ID: 15"
- cell "文本" [ref=e2182]:
- generic [ref=e1494]: 文本
- cell "换届大会打卡还贷款" [ref=e2183]:
- generic [ref=e1497]: 换届大会打卡还贷款
- cell "正常" [ref=e1498]:
- generic [ref=e1501]: 正常
- cell "8" [ref=e2184]:
- generic [ref=e1503]: "8"
- cell "2026-03-12 15:04:56" [ref=e2185]:
- generic [ref=e1505]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e1506]:
- generic [ref=e1507]:
- button "详情" [ref=e1508] [cursor=pointer]:
- generic [ref=e1509]: 详情
- button "撤回" [ref=e1510] [cursor=pointer]:
- generic [ref=e1511]: 撤回
- button "删除" [ref=e1512] [cursor=pointer]:
- generic [ref=e1513]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e2186]':
- cell "140" [ref=e2187]:
- generic [ref=e1516]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e2188]':
- generic [ref=e1519]:
- generic [ref=e1521]:
- generic [ref=e1522]:
- generic [ref=e1523]: 卜锦元
- generic [ref=e1524]: "ID: 7"
- cell "文本" [ref=e2189]:
- generic [ref=e1528]: 文本
- cell "你能看到吗" [ref=e2190]:
- generic [ref=e1531]: 你能看到吗
- cell "正常" [ref=e1532]:
- generic [ref=e1535]: 正常
- cell "8" [ref=e2191]:
- generic [ref=e1537]: "8"
- cell "2026-03-12 15:04:54" [ref=e2192]:
- generic [ref=e1539]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e1540]:
- generic [ref=e1541]:
- button "详情" [ref=e1542] [cursor=pointer]:
- generic [ref=e1543]: 详情
- button "撤回" [ref=e1544] [cursor=pointer]:
- generic [ref=e1545]: 撤回
- button "删除" [ref=e1546] [cursor=pointer]:
- generic [ref=e1547]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e2193]':
- cell "139" [ref=e2194]:
- generic [ref=e1550]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e2195]':
- generic [ref=e1553]:
- generic [ref=e1555]:
- generic [ref=e1556]:
- generic [ref=e1557]: 卜锦元
- generic [ref=e1558]: "ID: 7"
- cell "文本" [ref=e2196]:
- generic [ref=e1562]: 文本
- cell "@周和智 1111" [ref=e2197]:
- generic [ref=e1565]: "@周和智 1111"
- cell "正常" [ref=e1566]:
- generic [ref=e1569]: 正常
- cell "8" [ref=e2198]:
- generic [ref=e1571]: "8"
- cell "2026-03-12 15:04:43" [ref=e2199]:
- generic [ref=e1573]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e1574]:
- generic [ref=e1575]:
- button "详情" [ref=e1576] [cursor=pointer]:
- generic [ref=e1577]: 详情
- button "撤回" [ref=e1578] [cursor=pointer]:
- generic [ref=e1579]: 撤回
- button "删除" [ref=e1580] [cursor=pointer]:
- generic [ref=e1581]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e2200]':
- cell "138" [ref=e2201]:
- generic [ref=e1584]: "138"
- 'cell "? - ID: 0" [ref=e1585]':
- generic [ref=e1587]:
- generic [ref=e1589]: "?"
- generic [ref=e1590]:
- generic [ref=e1591]: "-"
- generic [ref=e1592]: "ID: 0"
- cell "系统消息" [ref=e1593]:
- generic [ref=e1596]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e2202]:
- generic [ref=e1599]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e1600]:
- generic [ref=e1603]: 正常
- cell "8" [ref=e2203]:
- generic [ref=e1605]: "8"
- cell "2026-03-12 15:04:20" [ref=e2204]:
- generic [ref=e1607]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e1608]:
- generic [ref=e1609]:
- button "详情" [ref=e1610] [cursor=pointer]:
- generic [ref=e1611]: 详情
- button "撤回" [ref=e1612] [cursor=pointer]:
- generic [ref=e1613]: 撤回
- button "删除" [ref=e1614] [cursor=pointer]:
- generic [ref=e1615]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e2205]':
- cell "137" [ref=e2206]:
- generic [ref=e1618]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e2207]':
- generic [ref=e1621]:
- generic [ref=e1623]:
- generic [ref=e1624]:
- generic [ref=e1625]: 卜锦元
- generic [ref=e1626]: "ID: 7"
- cell "文本" [ref=e2208]:
- generic [ref=e1630]: 文本
- cell "ewqeqwe" [ref=e2209]:
- generic [ref=e1633]: ewqeqwe
- cell "正常" [ref=e1634]:
- generic [ref=e1637]: 正常
- cell "10" [ref=e2210]:
- generic [ref=e1639]: "10"
- cell "2026-03-12 15:03:56" [ref=e2211]:
- generic [ref=e1641]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e1642]:
- generic [ref=e1643]:
- button "详情" [ref=e1644] [cursor=pointer]:
- generic [ref=e1645]: 详情
- button "撤回" [ref=e1646] [cursor=pointer]:
- generic [ref=e1647]: 撤回
- button "删除" [ref=e1648] [cursor=pointer]:
- generic [ref=e1649]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e2212]':
- cell "136" [ref=e2213]:
- generic [ref=e1652]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e2214]':
- generic [ref=e1655]:
- generic [ref=e1657]:
- generic [ref=e1658]:
- generic [ref=e1659]: 卜锦元
- generic [ref=e1660]: "ID: 7"
- cell "文本" [ref=e1661]:
- generic [ref=e1664]: 文本
- cell "23213123" [ref=e2215]:
- generic [ref=e1667]: "23213123"
- cell "正常" [ref=e1668]:
- generic [ref=e1671]: 正常
- cell "10" [ref=e2216]:
- generic [ref=e1673]: "10"
- cell "2026-03-12 15:03:53" [ref=e2217]:
- generic [ref=e1675]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e1676]:
- generic [ref=e1677]:
- button "详情" [ref=e1678] [cursor=pointer]:
- generic [ref=e1679]: 详情
- button "撤回" [ref=e1680] [cursor=pointer]:
- generic [ref=e1681]: 撤回
- button "删除" [ref=e1682] [cursor=pointer]:
- generic [ref=e1683]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e2218]':
- cell "135" [ref=e2219]:
- generic [ref=e1686]: "135"
- 'cell "周 周和智 ID: 15" [ref=e2220]':
- generic [ref=e1689]:
- generic [ref=e1691]:
- generic [ref=e1692]:
- generic [ref=e1693]: 周和智
- generic [ref=e1694]: "ID: 15"
- cell "文本" [ref=e1695]:
- generic [ref=e1698]: 文本
- cell "打打看迦拉克隆离开" [ref=e2221]:
- generic [ref=e1701]: 打打看迦拉克隆离开
- cell "正常" [ref=e1702]:
- generic [ref=e1705]: 正常
- cell "10" [ref=e2222]:
- generic [ref=e1707]: "10"
- cell "2026-03-12 15:03:39" [ref=e2223]:
- generic [ref=e1709]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e1710]:
- generic [ref=e1711]:
- button "详情" [ref=e1712] [cursor=pointer]:
- generic [ref=e1713]: 详情
- button "撤回" [ref=e1714] [cursor=pointer]:
- generic [ref=e1715]: 撤回
- button "删除" [ref=e1716] [cursor=pointer]:
- generic [ref=e1717]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e2224]':
- cell "134" [ref=e2225]:
- generic [ref=e1720]: "134"
- 'cell "周 周和智 ID: 15" [ref=e2226]':
- generic [ref=e1723]:
- generic [ref=e1725]:
- generic [ref=e1726]:
- generic [ref=e1727]: 周和智
- generic [ref=e1728]: "ID: 15"
- cell "文本" [ref=e1729]:
- generic [ref=e1732]: 文本
- cell "啦啦啦啦" [ref=e2227]:
- generic [ref=e1735]: 啦啦啦啦
- cell "正常" [ref=e1736]:
- generic [ref=e1739]: 正常
- cell "10" [ref=e2228]:
- generic [ref=e1741]: "10"
- cell "2026-03-12 15:03:30" [ref=e2229]:
- generic [ref=e1743]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e1744]:
- generic [ref=e1745]:
- button "详情" [ref=e1746] [cursor=pointer]:
- generic [ref=e1747]: 详情
- button "撤回" [ref=e1748] [cursor=pointer]:
- generic [ref=e1749]: 撤回
- button "删除" [ref=e1750] [cursor=pointer]:
- generic [ref=e1751]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e2230]':
- cell "133" [ref=e2231]:
- generic [ref=e1754]: "133"
- 'cell "周 周和智 ID: 15" [ref=e2232]':
- generic [ref=e1757]:
- generic [ref=e1759]:
- generic [ref=e1760]:
- generic [ref=e1761]: 周和智
- generic [ref=e1762]: "ID: 15"
- cell "文本" [ref=e1763]:
- generic [ref=e1766]: 文本
- cell "哈喽" [ref=e2233]:
- generic [ref=e1769]: 哈喽
- cell "正常" [ref=e1770]:
- generic [ref=e1773]: 正常
- cell "10" [ref=e2234]:
- generic [ref=e1775]: "10"
- cell "2026-03-12 15:03:17" [ref=e2235]:
- generic [ref=e1777]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e1778]:
- generic [ref=e1779]:
- button "详情" [ref=e1780] [cursor=pointer]:
- generic [ref=e1781]: 详情
- button "撤回" [ref=e1782] [cursor=pointer]:
- generic [ref=e1783]: 撤回
- button "删除" [ref=e1784] [cursor=pointer]:
- generic [ref=e1785]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e2236]':
- cell "132" [ref=e2237]:
- generic [ref=e1788]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e1789]':
- generic [ref=e1791]:
- generic [ref=e1793]:
- generic [ref=e1794]:
- generic [ref=e1795]: 卜锦元
- generic [ref=e1796]: "ID: 7"
- cell "文本" [ref=e1797]:
- generic [ref=e1800]: 文本
- cell "niahha a" [ref=e2238]:
- generic [ref=e1803]: niahha a
- cell "正常" [ref=e1804]:
- generic [ref=e1807]: 正常
- cell "10" [ref=e2239]:
- generic [ref=e1809]: "10"
- cell "2026-03-12 15:03:08" [ref=e2240]:
- generic [ref=e1811]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e1812]:
- generic [ref=e1813]:
- button "详情" [ref=e1814] [cursor=pointer]:
- generic [ref=e1815]: 详情
- button "撤回" [ref=e1816] [cursor=pointer]:
- generic [ref=e1817]: 撤回
- button "删除" [ref=e1818] [cursor=pointer]:
- generic [ref=e1819]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e2241]':
- cell "131" [ref=e2242]:
- generic [ref=e1822]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e1823]':
- generic [ref=e1825]:
- generic [ref=e1827]:
- generic [ref=e1828]:
- generic [ref=e1829]: 新昵称
- generic [ref=e1830]: "ID: 4"
- cell "文本" [ref=e1831]:
- generic [ref=e1834]: 文本
- cell "哈哈哈,测试" [ref=e2243]:
- generic [ref=e1837]: 哈哈哈,测试
- cell "正常" [ref=e1838]:
- generic [ref=e1841]: 正常
- cell "8" [ref=e2244]:
- generic [ref=e1843]: "8"
- cell "2026-03-04 18:37:53" [ref=e2245]:
- generic [ref=e1845]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e1846]:
- generic [ref=e1847]:
- button "详情" [ref=e1848] [cursor=pointer]:
- generic [ref=e1849]: 详情
- button "撤回" [ref=e1850] [cursor=pointer]:
- generic [ref=e1851]: 撤回
- button "删除" [ref=e1852] [cursor=pointer]:
- generic [ref=e1853]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e2246]':
- cell "130" [ref=e2247]:
- generic [ref=e1856]: "130"
- 'cell "? - ID: 0" [ref=e2248]':
- generic [ref=e1859]:
- generic [ref=e1861]: "?"
- generic [ref=e1862]:
- generic [ref=e1863]: "-"
- generic [ref=e1864]: "ID: 0"
- cell "系统消息" [ref=e2249]:
- generic [ref=e1868]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e2250]:
- generic [ref=e1871]: 卜锦元 更新了群公告
- cell "正常" [ref=e1872]:
- generic [ref=e1875]: 正常
- cell "8" [ref=e2251]:
- generic [ref=e1877]: "8"
- cell "2026-03-04 18:35:52" [ref=e2252]:
- generic [ref=e1879]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e1880]:
- generic [ref=e1881]:
- button "详情" [ref=e1882] [cursor=pointer]:
- generic [ref=e1883]: 详情
- button "撤回" [ref=e1884] [cursor=pointer]:
- generic [ref=e1885]: 撤回
- button "删除" [ref=e1886] [cursor=pointer]:
- generic [ref=e1887]: 删除
- 'row "129 新 新昵称 ID: 4 文本 我知道你是谁 正常 8 2026-03-04 18:31:51 详情 撤回 删除" [ref=e2253]':
- cell "129" [ref=e2254]:
- generic [ref=e1890]: "129"
- 'cell "新 新昵称 ID: 4" [ref=e1891]':
- generic [ref=e1893]:
- generic [ref=e1895]:
- generic [ref=e1896]:
- generic [ref=e1897]: 新昵称
- generic [ref=e1898]: "ID: 4"
- cell "文本" [ref=e1899]:
- generic [ref=e1902]: 文本
- cell "我知道你是谁" [ref=e2255]:
- generic [ref=e1905]: 我知道你是谁
- cell "正常" [ref=e1906]:
- generic [ref=e1909]: 正常
- cell "8" [ref=e2256]:
- generic [ref=e1911]: "8"
- cell "2026-03-04 18:31:51" [ref=e2257]:
- generic [ref=e1913]: 2026-03-04 18:31:51
- cell "详情 撤回 删除" [ref=e1914]:
- generic [ref=e1915]:
- button "详情" [ref=e1916] [cursor=pointer]:
- generic [ref=e1917]: 详情
- button "撤回" [ref=e1918] [cursor=pointer]:
- generic [ref=e1919]: 撤回
- button "删除" [ref=e1920] [cursor=pointer]:
- generic [ref=e1921]: 删除
- 'row "128 卜 卜锦元 ID: 7 文本 111112 正常 8 2026-03-04 18:31:37 详情 撤回 删除" [ref=e2258]':
- cell "128" [ref=e2259]:
- generic [ref=e1924]: "128"
- 'cell "卜 卜锦元 ID: 7" [ref=e1925]':
- generic [ref=e1927]:
- generic [ref=e1929]:
- generic [ref=e1930]:
- generic [ref=e1931]: 卜锦元
- generic [ref=e1932]: "ID: 7"
- cell "文本" [ref=e1933]:
- generic [ref=e1936]: 文本
- cell "111112" [ref=e2260]:
- generic [ref=e1939]: "111112"
- cell "正常" [ref=e1940]:
- generic [ref=e1943]: 正常
- cell "8" [ref=e2261]:
- generic [ref=e1945]: "8"
- cell "2026-03-04 18:31:37" [ref=e2262]:
- generic [ref=e1947]: 2026-03-04 18:31:37
- cell "详情 撤回 删除" [ref=e1948]:
- generic [ref=e1949]:
- button "详情" [ref=e1950] [cursor=pointer]:
- generic [ref=e1951]: 详情
- button "撤回" [ref=e1952] [cursor=pointer]:
- generic [ref=e1953]: 撤回
- button "删除" [ref=e1954] [cursor=pointer]:
- generic [ref=e1955]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e2263]':
- cell "127" [ref=e2264]:
- generic [ref=e1958]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e1959]':
- generic [ref=e1961]:
- generic [ref=e1963]:
- generic [ref=e1964]:
- generic [ref=e1965]: 卜锦元
- generic [ref=e1966]: "ID: 7"
- cell "文本" [ref=e1967]:
- generic [ref=e1970]: 文本
- cell "再次测试" [ref=e2265]:
- generic [ref=e1973]: 再次测试
- cell "正常" [ref=e1974]:
- generic [ref=e1977]: 正常
- cell "8" [ref=e1978]:
- generic [ref=e1979]: "8"
- cell "2026-03-04 18:25:29" [ref=e2266]:
- generic [ref=e1981]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e1982]:
- generic [ref=e1983]:
- button "详情" [ref=e1984] [cursor=pointer]:
- generic [ref=e1985]: 详情
- button "撤回" [ref=e1986] [cursor=pointer]:
- generic [ref=e1987]: 撤回
- button "删除" [ref=e1988] [cursor=pointer]:
- generic [ref=e1989]: 删除
- 'row "126 卜 卜锦元 ID: 7 文本 哈哈哈,知道我是谁吗 正常 8 2026-03-04 18:08:32 详情 撤回 删除" [ref=e2267]':
- cell "126" [ref=e2268]:
- generic [ref=e1992]: "126"
- 'cell "卜 卜锦元 ID: 7" [ref=e1993]':
- generic [ref=e1995]:
- generic [ref=e1997]:
- generic [ref=e1998]:
- generic [ref=e1999]: 卜锦元
- generic [ref=e2000]: "ID: 7"
- cell "文本" [ref=e2001]:
- generic [ref=e2004]: 文本
- cell "哈哈哈,知道我是谁吗" [ref=e2269]:
- generic [ref=e2007]: 哈哈哈,知道我是谁吗
- cell "正常" [ref=e2008]:
- generic [ref=e2011]: 正常
- cell "8" [ref=e2012]:
- generic [ref=e2013]: "8"
- cell "2026-03-04 18:08:32" [ref=e2270]:
- generic [ref=e2015]: 2026-03-04 18:08:32
- cell "详情 撤回 删除" [ref=e2016]:
- generic [ref=e2017]:
- button "详情" [ref=e2018] [cursor=pointer]:
- generic [ref=e2019]: 详情
- button "撤回" [ref=e2020] [cursor=pointer]:
- generic [ref=e2021]: 撤回
- button "删除" [ref=e2022] [cursor=pointer]:
- generic [ref=e2023]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- listitem "第 2 页" [ref=e2271] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e2272] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e2273] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e2274] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e2275] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e2276] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e2277] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:
- tooltip [ref=e2278]:
- listbox [ref=e2282]:
- option "文本" [ref=e2283] [cursor=pointer]
- option "图片" [ref=e2284] [cursor=pointer]
- option "语音" [ref=e2285] [cursor=pointer]
- option "文件" [ref=e2286] [cursor=pointer]
- option "系统" [ref=e2287] [cursor=pointer]

View File

@@ -0,0 +1,671 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [active] [ref=e1226]
- generic [ref=e1227]: 系统
- img [ref=e2290]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e2154]':
- cell "145" [ref=e2155]:
- generic [ref=e1346]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e2156]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 卜锦元
- generic [ref=e1354]: "ID: 7"
- cell "文本" [ref=e1355]:
- generic [ref=e1358]: 文本
- cell "1111" [ref=e2157]:
- generic [ref=e1361]: "1111"
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "6" [ref=e2158]:
- generic [ref=e1367]: "6"
- cell "2026-04-17 14:10:04" [ref=e2159]:
- generic [ref=e1369]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e2160]':
- cell "144" [ref=e2161]:
- generic [ref=e1380]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e1381]':
- generic [ref=e1383]:
- generic [ref=e1385]:
- generic [ref=e1386]:
- generic [ref=e1387]: 卜锦元
- generic [ref=e1388]: "ID: 7"
- cell "文本" [ref=e1389]:
- generic [ref=e1392]: 文本
- cell "1112122" [ref=e2162]:
- generic [ref=e1395]: "1112122"
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "6" [ref=e2163]:
- generic [ref=e1401]: "6"
- cell "2026-04-17 14:09:48" [ref=e2164]:
- generic [ref=e1403]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e2165]':
- cell "143" [ref=e2166]:
- generic [ref=e1414]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e2167]':
- generic [ref=e1417]:
- generic [ref=e1419]:
- generic [ref=e1420]:
- generic [ref=e1421]: 卜锦元
- generic [ref=e1422]: "ID: 7"
- cell "文本" [ref=e2168]:
- generic [ref=e1426]: 文本
- cell "1111" [ref=e2169]:
- generic [ref=e1429]: "1111"
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "6" [ref=e2170]:
- generic [ref=e1435]: "6"
- cell "2026-04-17 14:09:36" [ref=e2171]:
- generic [ref=e1437]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e2172]':
- cell "142" [ref=e2173]:
- generic [ref=e1448]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e2174]':
- generic [ref=e1451]:
- generic [ref=e1453]:
- generic [ref=e1454]:
- generic [ref=e1455]: 段凌云
- generic [ref=e1456]: "ID: 13"
- cell "文本" [ref=e2175]:
- generic [ref=e1460]: 文本
- cell "111111111223" [ref=e2176]:
- generic [ref=e1463]: "111111111223"
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "6" [ref=e2177]:
- generic [ref=e1469]: "6"
- cell "2026-04-17 14:09:20" [ref=e2178]:
- generic [ref=e1471]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e2179]':
- cell "141" [ref=e2180]:
- generic [ref=e1482]: "141"
- 'cell "周 周和智 ID: 15" [ref=e2181]':
- generic [ref=e1485]:
- generic [ref=e1487]:
- generic [ref=e1488]:
- generic [ref=e1489]: 周和智
- generic [ref=e1490]: "ID: 15"
- cell "文本" [ref=e2182]:
- generic [ref=e1494]: 文本
- cell "换届大会打卡还贷款" [ref=e2183]:
- generic [ref=e1497]: 换届大会打卡还贷款
- cell "正常" [ref=e1498]:
- generic [ref=e1501]: 正常
- cell "8" [ref=e2184]:
- generic [ref=e1503]: "8"
- cell "2026-03-12 15:04:56" [ref=e2185]:
- generic [ref=e1505]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e1506]:
- generic [ref=e1507]:
- button "详情" [ref=e1508] [cursor=pointer]:
- generic [ref=e1509]: 详情
- button "撤回" [ref=e1510] [cursor=pointer]:
- generic [ref=e1511]: 撤回
- button "删除" [ref=e1512] [cursor=pointer]:
- generic [ref=e1513]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e2186]':
- cell "140" [ref=e2187]:
- generic [ref=e1516]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e2188]':
- generic [ref=e1519]:
- generic [ref=e1521]:
- generic [ref=e1522]:
- generic [ref=e1523]: 卜锦元
- generic [ref=e1524]: "ID: 7"
- cell "文本" [ref=e2189]:
- generic [ref=e1528]: 文本
- cell "你能看到吗" [ref=e2190]:
- generic [ref=e1531]: 你能看到吗
- cell "正常" [ref=e1532]:
- generic [ref=e1535]: 正常
- cell "8" [ref=e2191]:
- generic [ref=e1537]: "8"
- cell "2026-03-12 15:04:54" [ref=e2192]:
- generic [ref=e1539]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e1540]:
- generic [ref=e1541]:
- button "详情" [ref=e1542] [cursor=pointer]:
- generic [ref=e1543]: 详情
- button "撤回" [ref=e1544] [cursor=pointer]:
- generic [ref=e1545]: 撤回
- button "删除" [ref=e1546] [cursor=pointer]:
- generic [ref=e1547]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e2193]':
- cell "139" [ref=e2194]:
- generic [ref=e1550]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e2195]':
- generic [ref=e1553]:
- generic [ref=e1555]:
- generic [ref=e1556]:
- generic [ref=e1557]: 卜锦元
- generic [ref=e1558]: "ID: 7"
- cell "文本" [ref=e2196]:
- generic [ref=e1562]: 文本
- cell "@周和智 1111" [ref=e2197]:
- generic [ref=e1565]: "@周和智 1111"
- cell "正常" [ref=e1566]:
- generic [ref=e1569]: 正常
- cell "8" [ref=e2198]:
- generic [ref=e1571]: "8"
- cell "2026-03-12 15:04:43" [ref=e2199]:
- generic [ref=e1573]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e1574]:
- generic [ref=e1575]:
- button "详情" [ref=e1576] [cursor=pointer]:
- generic [ref=e1577]: 详情
- button "撤回" [ref=e1578] [cursor=pointer]:
- generic [ref=e1579]: 撤回
- button "删除" [ref=e1580] [cursor=pointer]:
- generic [ref=e1581]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e2200]':
- cell "138" [ref=e2201]:
- generic [ref=e1584]: "138"
- 'cell "? - ID: 0" [ref=e1585]':
- generic [ref=e1587]:
- generic [ref=e1589]: "?"
- generic [ref=e1590]:
- generic [ref=e1591]: "-"
- generic [ref=e1592]: "ID: 0"
- cell "系统消息" [ref=e1593]:
- generic [ref=e1596]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e2202]:
- generic [ref=e1599]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e1600]:
- generic [ref=e1603]: 正常
- cell "8" [ref=e2203]:
- generic [ref=e1605]: "8"
- cell "2026-03-12 15:04:20" [ref=e2204]:
- generic [ref=e1607]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e1608]:
- generic [ref=e1609]:
- button "详情" [ref=e1610] [cursor=pointer]:
- generic [ref=e1611]: 详情
- button "撤回" [ref=e1612] [cursor=pointer]:
- generic [ref=e1613]: 撤回
- button "删除" [ref=e1614] [cursor=pointer]:
- generic [ref=e1615]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e2205]':
- cell "137" [ref=e2206]:
- generic [ref=e1618]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e2207]':
- generic [ref=e1621]:
- generic [ref=e1623]:
- generic [ref=e1624]:
- generic [ref=e1625]: 卜锦元
- generic [ref=e1626]: "ID: 7"
- cell "文本" [ref=e2208]:
- generic [ref=e1630]: 文本
- cell "ewqeqwe" [ref=e2209]:
- generic [ref=e1633]: ewqeqwe
- cell "正常" [ref=e1634]:
- generic [ref=e1637]: 正常
- cell "10" [ref=e2210]:
- generic [ref=e1639]: "10"
- cell "2026-03-12 15:03:56" [ref=e2211]:
- generic [ref=e1641]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e1642]:
- generic [ref=e1643]:
- button "详情" [ref=e1644] [cursor=pointer]:
- generic [ref=e1645]: 详情
- button "撤回" [ref=e1646] [cursor=pointer]:
- generic [ref=e1647]: 撤回
- button "删除" [ref=e1648] [cursor=pointer]:
- generic [ref=e1649]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e2212]':
- cell "136" [ref=e2213]:
- generic [ref=e1652]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e2214]':
- generic [ref=e1655]:
- generic [ref=e1657]:
- generic [ref=e1658]:
- generic [ref=e1659]: 卜锦元
- generic [ref=e1660]: "ID: 7"
- cell "文本" [ref=e1661]:
- generic [ref=e1664]: 文本
- cell "23213123" [ref=e2215]:
- generic [ref=e1667]: "23213123"
- cell "正常" [ref=e1668]:
- generic [ref=e1671]: 正常
- cell "10" [ref=e2216]:
- generic [ref=e1673]: "10"
- cell "2026-03-12 15:03:53" [ref=e2217]:
- generic [ref=e1675]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e1676]:
- generic [ref=e1677]:
- button "详情" [ref=e1678] [cursor=pointer]:
- generic [ref=e1679]: 详情
- button "撤回" [ref=e1680] [cursor=pointer]:
- generic [ref=e1681]: 撤回
- button "删除" [ref=e1682] [cursor=pointer]:
- generic [ref=e1683]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e2218]':
- cell "135" [ref=e2219]:
- generic [ref=e1686]: "135"
- 'cell "周 周和智 ID: 15" [ref=e2220]':
- generic [ref=e1689]:
- generic [ref=e1691]:
- generic [ref=e1692]:
- generic [ref=e1693]: 周和智
- generic [ref=e1694]: "ID: 15"
- cell "文本" [ref=e1695]:
- generic [ref=e1698]: 文本
- cell "打打看迦拉克隆离开" [ref=e2221]:
- generic [ref=e1701]: 打打看迦拉克隆离开
- cell "正常" [ref=e1702]:
- generic [ref=e1705]: 正常
- cell "10" [ref=e2222]:
- generic [ref=e1707]: "10"
- cell "2026-03-12 15:03:39" [ref=e2223]:
- generic [ref=e1709]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e1710]:
- generic [ref=e1711]:
- button "详情" [ref=e1712] [cursor=pointer]:
- generic [ref=e1713]: 详情
- button "撤回" [ref=e1714] [cursor=pointer]:
- generic [ref=e1715]: 撤回
- button "删除" [ref=e1716] [cursor=pointer]:
- generic [ref=e1717]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e2224]':
- cell "134" [ref=e2225]:
- generic [ref=e1720]: "134"
- 'cell "周 周和智 ID: 15" [ref=e2226]':
- generic [ref=e1723]:
- generic [ref=e1725]:
- generic [ref=e1726]:
- generic [ref=e1727]: 周和智
- generic [ref=e1728]: "ID: 15"
- cell "文本" [ref=e1729]:
- generic [ref=e1732]: 文本
- cell "啦啦啦啦" [ref=e2227]:
- generic [ref=e1735]: 啦啦啦啦
- cell "正常" [ref=e1736]:
- generic [ref=e1739]: 正常
- cell "10" [ref=e2228]:
- generic [ref=e1741]: "10"
- cell "2026-03-12 15:03:30" [ref=e2229]:
- generic [ref=e1743]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e1744]:
- generic [ref=e1745]:
- button "详情" [ref=e1746] [cursor=pointer]:
- generic [ref=e1747]: 详情
- button "撤回" [ref=e1748] [cursor=pointer]:
- generic [ref=e1749]: 撤回
- button "删除" [ref=e1750] [cursor=pointer]:
- generic [ref=e1751]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e2230]':
- cell "133" [ref=e2231]:
- generic [ref=e1754]: "133"
- 'cell "周 周和智 ID: 15" [ref=e2232]':
- generic [ref=e1757]:
- generic [ref=e1759]:
- generic [ref=e1760]:
- generic [ref=e1761]: 周和智
- generic [ref=e1762]: "ID: 15"
- cell "文本" [ref=e1763]:
- generic [ref=e1766]: 文本
- cell "哈喽" [ref=e2233]:
- generic [ref=e1769]: 哈喽
- cell "正常" [ref=e1770]:
- generic [ref=e1773]: 正常
- cell "10" [ref=e2234]:
- generic [ref=e1775]: "10"
- cell "2026-03-12 15:03:17" [ref=e2235]:
- generic [ref=e1777]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e1778]:
- generic [ref=e1779]:
- button "详情" [ref=e1780] [cursor=pointer]:
- generic [ref=e1781]: 详情
- button "撤回" [ref=e1782] [cursor=pointer]:
- generic [ref=e1783]: 撤回
- button "删除" [ref=e1784] [cursor=pointer]:
- generic [ref=e1785]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e2236]':
- cell "132" [ref=e2237]:
- generic [ref=e1788]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e1789]':
- generic [ref=e1791]:
- generic [ref=e1793]:
- generic [ref=e1794]:
- generic [ref=e1795]: 卜锦元
- generic [ref=e1796]: "ID: 7"
- cell "文本" [ref=e1797]:
- generic [ref=e1800]: 文本
- cell "niahha a" [ref=e2238]:
- generic [ref=e1803]: niahha a
- cell "正常" [ref=e1804]:
- generic [ref=e1807]: 正常
- cell "10" [ref=e2239]:
- generic [ref=e1809]: "10"
- cell "2026-03-12 15:03:08" [ref=e2240]:
- generic [ref=e1811]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e1812]:
- generic [ref=e1813]:
- button "详情" [ref=e1814] [cursor=pointer]:
- generic [ref=e1815]: 详情
- button "撤回" [ref=e1816] [cursor=pointer]:
- generic [ref=e1817]: 撤回
- button "删除" [ref=e1818] [cursor=pointer]:
- generic [ref=e1819]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e2241]':
- cell "131" [ref=e2242]:
- generic [ref=e1822]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e1823]':
- generic [ref=e1825]:
- generic [ref=e1827]:
- generic [ref=e1828]:
- generic [ref=e1829]: 新昵称
- generic [ref=e1830]: "ID: 4"
- cell "文本" [ref=e1831]:
- generic [ref=e1834]: 文本
- cell "哈哈哈,测试" [ref=e2243]:
- generic [ref=e1837]: 哈哈哈,测试
- cell "正常" [ref=e1838]:
- generic [ref=e1841]: 正常
- cell "8" [ref=e2244]:
- generic [ref=e1843]: "8"
- cell "2026-03-04 18:37:53" [ref=e2245]:
- generic [ref=e1845]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e1846]:
- generic [ref=e1847]:
- button "详情" [ref=e1848] [cursor=pointer]:
- generic [ref=e1849]: 详情
- button "撤回" [ref=e1850] [cursor=pointer]:
- generic [ref=e1851]: 撤回
- button "删除" [ref=e1852] [cursor=pointer]:
- generic [ref=e1853]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e2246]':
- cell "130" [ref=e2247]:
- generic [ref=e1856]: "130"
- 'cell "? - ID: 0" [ref=e2248]':
- generic [ref=e1859]:
- generic [ref=e1861]: "?"
- generic [ref=e1862]:
- generic [ref=e1863]: "-"
- generic [ref=e1864]: "ID: 0"
- cell "系统消息" [ref=e2249]:
- generic [ref=e1868]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e2250]:
- generic [ref=e1871]: 卜锦元 更新了群公告
- cell "正常" [ref=e1872]:
- generic [ref=e1875]: 正常
- cell "8" [ref=e2251]:
- generic [ref=e1877]: "8"
- cell "2026-03-04 18:35:52" [ref=e2252]:
- generic [ref=e1879]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e1880]:
- generic [ref=e1881]:
- button "详情" [ref=e1882] [cursor=pointer]:
- generic [ref=e1883]: 详情
- button "撤回" [ref=e1884] [cursor=pointer]:
- generic [ref=e1885]: 撤回
- button "删除" [ref=e1886] [cursor=pointer]:
- generic [ref=e1887]: 删除
- 'row "129 新 新昵称 ID: 4 文本 我知道你是谁 正常 8 2026-03-04 18:31:51 详情 撤回 删除" [ref=e2253]':
- cell "129" [ref=e2254]:
- generic [ref=e1890]: "129"
- 'cell "新 新昵称 ID: 4" [ref=e1891]':
- generic [ref=e1893]:
- generic [ref=e1895]:
- generic [ref=e1896]:
- generic [ref=e1897]: 新昵称
- generic [ref=e1898]: "ID: 4"
- cell "文本" [ref=e1899]:
- generic [ref=e1902]: 文本
- cell "我知道你是谁" [ref=e2255]:
- generic [ref=e1905]: 我知道你是谁
- cell "正常" [ref=e1906]:
- generic [ref=e1909]: 正常
- cell "8" [ref=e2256]:
- generic [ref=e1911]: "8"
- cell "2026-03-04 18:31:51" [ref=e2257]:
- generic [ref=e1913]: 2026-03-04 18:31:51
- cell "详情 撤回 删除" [ref=e1914]:
- generic [ref=e1915]:
- button "详情" [ref=e1916] [cursor=pointer]:
- generic [ref=e1917]: 详情
- button "撤回" [ref=e1918] [cursor=pointer]:
- generic [ref=e1919]: 撤回
- button "删除" [ref=e1920] [cursor=pointer]:
- generic [ref=e1921]: 删除
- 'row "128 卜 卜锦元 ID: 7 文本 111112 正常 8 2026-03-04 18:31:37 详情 撤回 删除" [ref=e2258]':
- cell "128" [ref=e2259]:
- generic [ref=e1924]: "128"
- 'cell "卜 卜锦元 ID: 7" [ref=e1925]':
- generic [ref=e1927]:
- generic [ref=e1929]:
- generic [ref=e1930]:
- generic [ref=e1931]: 卜锦元
- generic [ref=e1932]: "ID: 7"
- cell "文本" [ref=e1933]:
- generic [ref=e1936]: 文本
- cell "111112" [ref=e2260]:
- generic [ref=e1939]: "111112"
- cell "正常" [ref=e1940]:
- generic [ref=e1943]: 正常
- cell "8" [ref=e2261]:
- generic [ref=e1945]: "8"
- cell "2026-03-04 18:31:37" [ref=e2262]:
- generic [ref=e1947]: 2026-03-04 18:31:37
- cell "详情 撤回 删除" [ref=e1948]:
- generic [ref=e1949]:
- button "详情" [ref=e1950] [cursor=pointer]:
- generic [ref=e1951]: 详情
- button "撤回" [ref=e1952] [cursor=pointer]:
- generic [ref=e1953]: 撤回
- button "删除" [ref=e1954] [cursor=pointer]:
- generic [ref=e1955]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e2263]':
- cell "127" [ref=e2264]:
- generic [ref=e1958]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e1959]':
- generic [ref=e1961]:
- generic [ref=e1963]:
- generic [ref=e1964]:
- generic [ref=e1965]: 卜锦元
- generic [ref=e1966]: "ID: 7"
- cell "文本" [ref=e1967]:
- generic [ref=e1970]: 文本
- cell "再次测试" [ref=e2265]:
- generic [ref=e1973]: 再次测试
- cell "正常" [ref=e1974]:
- generic [ref=e1977]: 正常
- cell "8" [ref=e1978]:
- generic [ref=e1979]: "8"
- cell "2026-03-04 18:25:29" [ref=e2266]:
- generic [ref=e1981]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e1982]:
- generic [ref=e1983]:
- button "详情" [ref=e1984] [cursor=pointer]:
- generic [ref=e1985]: 详情
- button "撤回" [ref=e1986] [cursor=pointer]:
- generic [ref=e1987]: 撤回
- button "删除" [ref=e1988] [cursor=pointer]:
- generic [ref=e1989]: 删除
- 'row "126 卜 卜锦元 ID: 7 文本 哈哈哈,知道我是谁吗 正常 8 2026-03-04 18:08:32 详情 撤回 删除" [ref=e2267]':
- cell "126" [ref=e2268]:
- generic [ref=e1992]: "126"
- 'cell "卜 卜锦元 ID: 7" [ref=e1993]':
- generic [ref=e1995]:
- generic [ref=e1997]:
- generic [ref=e1998]:
- generic [ref=e1999]: 卜锦元
- generic [ref=e2000]: "ID: 7"
- cell "文本" [ref=e2001]:
- generic [ref=e2004]: 文本
- cell "哈哈哈,知道我是谁吗" [ref=e2269]:
- generic [ref=e2007]: 哈哈哈,知道我是谁吗
- cell "正常" [ref=e2008]:
- generic [ref=e2011]: 正常
- cell "8" [ref=e2012]:
- generic [ref=e2013]: "8"
- cell "2026-03-04 18:08:32" [ref=e2270]:
- generic [ref=e2015]: 2026-03-04 18:08:32
- cell "详情 撤回 删除" [ref=e2016]:
- generic [ref=e2017]:
- button "详情" [ref=e2018] [cursor=pointer]:
- generic [ref=e2019]: 详情
- button "撤回" [ref=e2020] [cursor=pointer]:
- generic [ref=e2021]: 撤回
- button "删除" [ref=e2022] [cursor=pointer]:
- generic [ref=e2023]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- listitem "第 2 页" [ref=e2271] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e2272] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e2273] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e2274] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e2275] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e2276] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e2277] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,528 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 系统
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [active] [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e2296]':
- cell "138" [ref=e2297]:
- generic [ref=e1346]: "138"
- 'cell "? - ID: 0" [ref=e2298]':
- generic [ref=e1349]:
- generic [ref=e1351]: "?"
- generic [ref=e1352]:
- generic [ref=e1353]: "-"
- generic [ref=e1354]: "ID: 0"
- cell "系统消息" [ref=e2299]:
- generic [ref=e1358]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e2300]:
- generic [ref=e1361]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "8" [ref=e2301]:
- generic [ref=e1367]: "8"
- cell "2026-03-12 15:04:20" [ref=e2302]:
- generic [ref=e1369]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e2303]':
- cell "130" [ref=e2304]:
- generic [ref=e1380]: "130"
- 'cell "? - ID: 0" [ref=e2305]':
- generic [ref=e1383]:
- generic [ref=e1385]: "?"
- generic [ref=e1386]:
- generic [ref=e1387]: "-"
- generic [ref=e1388]: "ID: 0"
- cell "系统消息" [ref=e2306]:
- generic [ref=e1392]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e2307]:
- generic [ref=e1395]: 卜锦元 更新了群公告
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "8" [ref=e2308]:
- generic [ref=e1401]: "8"
- cell "2026-03-04 18:35:52" [ref=e2309]:
- generic [ref=e1403]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "124 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:26:07 详情 撤回 删除" [ref=e2310]':
- cell "124" [ref=e2311]:
- generic [ref=e1414]: "124"
- 'cell "? - ID: 0" [ref=e2312]':
- generic [ref=e1417]:
- generic [ref=e1419]: "?"
- generic [ref=e1420]:
- generic [ref=e1421]: "-"
- generic [ref=e1422]: "ID: 0"
- cell "系统消息" [ref=e2313]:
- generic [ref=e1426]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e2314]:
- generic [ref=e1429]: 测试用户2 被取消管理员
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "7" [ref=e2315]:
- generic [ref=e1435]: "7"
- cell "2026-03-04 17:26:07" [ref=e2316]:
- generic [ref=e1437]: 2026-03-04 17:26:07
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "123 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:26:03 详情 撤回 删除" [ref=e2317]':
- cell "123" [ref=e2318]:
- generic [ref=e1448]: "123"
- 'cell "? - ID: 0" [ref=e2319]':
- generic [ref=e1451]:
- generic [ref=e1453]: "?"
- generic [ref=e1454]:
- generic [ref=e1455]: "-"
- generic [ref=e1456]: "ID: 0"
- cell "系统消息" [ref=e2320]:
- generic [ref=e1460]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e2321]:
- generic [ref=e1463]: 测试用户2 被设为管理员
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "7" [ref=e2322]:
- generic [ref=e1469]: "7"
- cell "2026-03-04 17:26:03" [ref=e2323]:
- generic [ref=e1471]: 2026-03-04 17:26:03
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "122 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:25:54 详情 撤回 删除" [ref=e2324]':
- cell "122" [ref=e2325]:
- generic [ref=e1482]: "122"
- 'cell "? - ID: 0" [ref=e2326]':
- generic [ref=e1485]:
- generic [ref=e1487]: "?"
- generic [ref=e1488]:
- generic [ref=e1489]: "-"
- generic [ref=e1490]: "ID: 0"
- cell "系统消息" [ref=e2327]:
- generic [ref=e1494]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e2328]:
- generic [ref=e1497]: 测试用户2 被取消管理员
- cell "正常" [ref=e1498]:
- generic [ref=e1501]: 正常
- cell "7" [ref=e2329]:
- generic [ref=e1503]: "7"
- cell "2026-03-04 17:25:54" [ref=e2330]:
- generic [ref=e1505]: 2026-03-04 17:25:54
- cell "详情 撤回 删除" [ref=e1506]:
- generic [ref=e1507]:
- button "详情" [ref=e1508] [cursor=pointer]:
- generic [ref=e1509]: 详情
- button "撤回" [ref=e1510] [cursor=pointer]:
- generic [ref=e1511]: 撤回
- button "删除" [ref=e1512] [cursor=pointer]:
- generic [ref=e1513]: 删除
- 'row "121 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:25:50 详情 撤回 删除" [ref=e2331]':
- cell "121" [ref=e2332]:
- generic [ref=e1516]: "121"
- 'cell "? - ID: 0" [ref=e2333]':
- generic [ref=e1519]:
- generic [ref=e1521]: "?"
- generic [ref=e1522]:
- generic [ref=e1523]: "-"
- generic [ref=e1524]: "ID: 0"
- cell "系统消息" [ref=e2334]:
- generic [ref=e1528]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e2335]:
- generic [ref=e1531]: 测试用户2 被设为管理员
- cell "正常" [ref=e1532]:
- generic [ref=e1535]: 正常
- cell "7" [ref=e2336]:
- generic [ref=e1537]: "7"
- cell "2026-03-04 17:25:50" [ref=e2337]:
- generic [ref=e1539]: 2026-03-04 17:25:50
- cell "详情 撤回 删除" [ref=e1540]:
- generic [ref=e1541]:
- button "详情" [ref=e1542] [cursor=pointer]:
- generic [ref=e1543]: 详情
- button "撤回" [ref=e1544] [cursor=pointer]:
- generic [ref=e1545]: 撤回
- button "删除" [ref=e1546] [cursor=pointer]:
- generic [ref=e1547]: 删除
- 'row "120 ? - ID: 0 系统消息 卜锦元 被设为管理员 正常 8 2026-03-04 17:21:43 详情 撤回 删除" [ref=e2338]':
- cell "120" [ref=e2339]:
- generic [ref=e1550]: "120"
- 'cell "? - ID: 0" [ref=e2340]':
- generic [ref=e1553]:
- generic [ref=e1555]: "?"
- generic [ref=e1556]:
- generic [ref=e1557]: "-"
- generic [ref=e1558]: "ID: 0"
- cell "系统消息" [ref=e2341]:
- generic [ref=e1562]: 系统消息
- cell "卜锦元 被设为管理员" [ref=e2342]:
- generic [ref=e1565]: 卜锦元 被设为管理员
- cell "正常" [ref=e1566]:
- generic [ref=e1569]: 正常
- cell "8" [ref=e2198]:
- generic [ref=e1571]: "8"
- cell "2026-03-04 17:21:43" [ref=e2343]:
- generic [ref=e1573]: 2026-03-04 17:21:43
- cell "详情 撤回 删除" [ref=e1574]:
- generic [ref=e1575]:
- button "详情" [ref=e1576] [cursor=pointer]:
- generic [ref=e1577]: 详情
- button "撤回" [ref=e1578] [cursor=pointer]:
- generic [ref=e1579]: 撤回
- button "删除" [ref=e1580] [cursor=pointer]:
- generic [ref=e1581]: 删除
- 'row "119 ? - ID: 0 系统消息 测试用户3 被设为管理员 正常 7 2026-03-04 17:21:13 详情 撤回 删除" [ref=e2344]':
- cell "119" [ref=e2345]:
- generic [ref=e1584]: "119"
- 'cell "? - ID: 0" [ref=e1585]':
- generic [ref=e1587]:
- generic [ref=e1589]: "?"
- generic [ref=e1590]:
- generic [ref=e1591]: "-"
- generic [ref=e1592]: "ID: 0"
- cell "系统消息" [ref=e1593]:
- generic [ref=e1596]: 系统消息
- cell "测试用户3 被设为管理员" [ref=e2346]:
- generic [ref=e1599]: 测试用户3 被设为管理员
- cell "正常" [ref=e1600]:
- generic [ref=e1603]: 正常
- cell "7" [ref=e2347]:
- generic [ref=e1605]: "7"
- cell "2026-03-04 17:21:13" [ref=e2348]:
- generic [ref=e1607]: 2026-03-04 17:21:13
- cell "详情 撤回 删除" [ref=e1608]:
- generic [ref=e1609]:
- button "详情" [ref=e1610] [cursor=pointer]:
- generic [ref=e1611]: 详情
- button "撤回" [ref=e1612] [cursor=pointer]:
- generic [ref=e1613]: 撤回
- button "删除" [ref=e1614] [cursor=pointer]:
- generic [ref=e1615]: 删除
- 'row "118 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:21:07 详情 撤回 删除" [ref=e2349]':
- cell "118" [ref=e2350]:
- generic [ref=e1618]: "118"
- 'cell "? - ID: 0" [ref=e2351]':
- generic [ref=e1621]:
- generic [ref=e1623]: "?"
- generic [ref=e1624]:
- generic [ref=e1625]: "-"
- generic [ref=e1626]: "ID: 0"
- cell "系统消息" [ref=e2352]:
- generic [ref=e1630]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e2353]:
- generic [ref=e1633]: 测试用户2 被取消管理员
- cell "正常" [ref=e1634]:
- generic [ref=e1637]: 正常
- cell "7" [ref=e2354]:
- generic [ref=e1639]: "7"
- cell "2026-03-04 17:21:07" [ref=e2355]:
- generic [ref=e1641]: 2026-03-04 17:21:07
- cell "详情 撤回 删除" [ref=e1642]:
- generic [ref=e1643]:
- button "详情" [ref=e1644] [cursor=pointer]:
- generic [ref=e1645]: 详情
- button "撤回" [ref=e1646] [cursor=pointer]:
- generic [ref=e1647]: 撤回
- button "删除" [ref=e1648] [cursor=pointer]:
- generic [ref=e1649]: 删除
- 'row "117 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:20:31 详情 撤回 删除" [ref=e2356]':
- cell "117" [ref=e2357]:
- generic [ref=e1652]: "117"
- 'cell "? - ID: 0" [ref=e2358]':
- generic [ref=e1655]:
- generic [ref=e1657]: "?"
- generic [ref=e1658]:
- generic [ref=e1659]: "-"
- generic [ref=e1660]: "ID: 0"
- cell "系统消息" [ref=e2359]:
- generic [ref=e1664]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e2360]:
- generic [ref=e1667]: 测试用户2 被设为管理员
- cell "正常" [ref=e1668]:
- generic [ref=e1671]: 正常
- cell "7" [ref=e2361]:
- generic [ref=e1673]: "7"
- cell "2026-03-04 17:20:31" [ref=e2362]:
- generic [ref=e1675]: 2026-03-04 17:20:31
- cell "详情 撤回 删除" [ref=e1676]:
- generic [ref=e1677]:
- button "详情" [ref=e1678] [cursor=pointer]:
- generic [ref=e1679]: 详情
- button "撤回" [ref=e1680] [cursor=pointer]:
- generic [ref=e1681]: 撤回
- button "删除" [ref=e1682] [cursor=pointer]:
- generic [ref=e1683]: 删除
- 'row "87 ? - ID: 0 系统消息 新昵称 邀请 卜锦元 加入了群聊 正常 8 2026-03-04 16:16:14 详情 撤回 删除" [ref=e2363]':
- cell "87" [ref=e2364]:
- generic [ref=e1686]: "87"
- 'cell "? - ID: 0" [ref=e2365]':
- generic [ref=e1689]:
- generic [ref=e1691]: "?"
- generic [ref=e1692]:
- generic [ref=e1693]: "-"
- generic [ref=e1694]: "ID: 0"
- cell "系统消息" [ref=e2366]:
- generic [ref=e1698]: 系统消息
- cell "新昵称 邀请 卜锦元 加入了群聊" [ref=e2367]:
- generic [ref=e1701]: 新昵称 邀请 卜锦元 加入了群聊
- cell "正常" [ref=e1702]:
- generic [ref=e1705]: 正常
- cell "8" [ref=e2368]:
- generic [ref=e1707]: "8"
- cell "2026-03-04 16:16:14" [ref=e2369]:
- generic [ref=e1709]: 2026-03-04 16:16:14
- cell "详情 撤回 删除" [ref=e1710]:
- generic [ref=e1711]:
- button "详情" [ref=e1712] [cursor=pointer]:
- generic [ref=e1713]: 详情
- button "撤回" [ref=e1714] [cursor=pointer]:
- generic [ref=e1715]: 撤回
- button "删除" [ref=e1716] [cursor=pointer]:
- generic [ref=e1717]: 删除
- 'row "86 ? - ID: 0 系统消息 新昵称 邀请 测试用户3 加入了群聊 正常 8 2026-03-04 16:14:25 详情 撤回 删除" [ref=e2370]':
- cell "86" [ref=e2371]:
- generic [ref=e1720]: "86"
- 'cell "? - ID: 0" [ref=e2372]':
- generic [ref=e1723]:
- generic [ref=e1725]: "?"
- generic [ref=e1726]:
- generic [ref=e1727]: "-"
- generic [ref=e1728]: "ID: 0"
- cell "系统消息" [ref=e2373]:
- generic [ref=e1732]: 系统消息
- cell "新昵称 邀请 测试用户3 加入了群聊" [ref=e2374]:
- generic [ref=e1735]: 新昵称 邀请 测试用户3 加入了群聊
- cell "正常" [ref=e1736]:
- generic [ref=e1739]: 正常
- cell "8" [ref=e2375]:
- generic [ref=e1741]: "8"
- cell "2026-03-04 16:14:25" [ref=e2376]:
- generic [ref=e1743]: 2026-03-04 16:14:25
- cell "详情 撤回 删除" [ref=e1744]:
- generic [ref=e1745]:
- button "详情" [ref=e1746] [cursor=pointer]:
- generic [ref=e1747]: 详情
- button "撤回" [ref=e1748] [cursor=pointer]:
- generic [ref=e1749]: 撤回
- button "删除" [ref=e1750] [cursor=pointer]:
- generic [ref=e1751]: 删除
- 'row "85 ? - ID: 0 系统消息 新昵称 更新了群公告 正常 8 2026-03-04 16:14:07 详情 撤回 删除" [ref=e2377]':
- cell "85" [ref=e2378]:
- generic [ref=e1754]: "85"
- 'cell "? - ID: 0" [ref=e2379]':
- generic [ref=e1757]:
- generic [ref=e1759]: "?"
- generic [ref=e1760]:
- generic [ref=e1761]: "-"
- generic [ref=e1762]: "ID: 0"
- cell "系统消息" [ref=e2380]:
- generic [ref=e1766]: 系统消息
- cell "新昵称 更新了群公告" [ref=e2381]:
- generic [ref=e1769]: 新昵称 更新了群公告
- cell "正常" [ref=e1770]:
- generic [ref=e1773]: 正常
- cell "8" [ref=e2382]:
- generic [ref=e1775]: "8"
- cell "2026-03-04 16:14:07" [ref=e2383]:
- generic [ref=e1777]: 2026-03-04 16:14:07
- cell "详情 撤回 删除" [ref=e1778]:
- generic [ref=e1779]:
- button "详情" [ref=e1780] [cursor=pointer]:
- generic [ref=e1781]: 详情
- button "撤回" [ref=e1782] [cursor=pointer]:
- generic [ref=e1783]: 撤回
- button "删除" [ref=e1784] [cursor=pointer]:
- generic [ref=e1785]: 删除
- 'row "83 ? - ID: 0 系统消息 新昵称 创建了群聊 正常 8 2026-03-04 16:00:37 详情 撤回 删除" [ref=e2384]':
- cell "83" [ref=e2385]:
- generic [ref=e1788]: "83"
- 'cell "? - ID: 0" [ref=e2386]':
- generic [ref=e1791]:
- generic [ref=e1793]: "?"
- generic [ref=e1794]:
- generic [ref=e1795]: "-"
- generic [ref=e1796]: "ID: 0"
- cell "系统消息" [ref=e2387]:
- generic [ref=e1800]: 系统消息
- cell "新昵称 创建了群聊" [ref=e2388]:
- generic [ref=e1803]: 新昵称 创建了群聊
- cell "正常" [ref=e1804]:
- generic [ref=e1807]: 正常
- cell "8" [ref=e2389]:
- generic [ref=e1809]: "8"
- cell "2026-03-04 16:00:37" [ref=e2390]:
- generic [ref=e1811]: 2026-03-04 16:00:37
- cell "详情 撤回 删除" [ref=e1812]:
- generic [ref=e1813]:
- button "详情" [ref=e1814] [cursor=pointer]:
- generic [ref=e1815]: 详情
- button "撤回" [ref=e1816] [cursor=pointer]:
- generic [ref=e1817]: 撤回
- button "删除" [ref=e1818] [cursor=pointer]:
- generic [ref=e1819]: 删除
- 'row "76 ? - ID: 0 系统消息 新昵称 创建了群聊 正常 7 2026-03-04 15:34:52 详情 撤回 删除" [ref=e2391]':
- cell "76" [ref=e2392]:
- generic [ref=e1822]: "76"
- 'cell "? - ID: 0" [ref=e2393]':
- generic [ref=e1825]:
- generic [ref=e1827]: "?"
- generic [ref=e1828]:
- generic [ref=e1829]: "-"
- generic [ref=e1830]: "ID: 0"
- cell "系统消息" [ref=e2394]:
- generic [ref=e1834]: 系统消息
- cell "新昵称 创建了群聊" [ref=e2395]:
- generic [ref=e1837]: 新昵称 创建了群聊
- cell "正常" [ref=e1838]:
- generic [ref=e1841]: 正常
- cell "7" [ref=e2396]:
- generic [ref=e1843]: "7"
- cell "2026-03-04 15:34:52" [ref=e2397]:
- generic [ref=e1845]: 2026-03-04 15:34:52
- cell "详情 撤回 删除" [ref=e1846]:
- generic [ref=e1847]:
- button "详情" [ref=e1848] [cursor=pointer]:
- generic [ref=e1849]: 详情
- button "撤回" [ref=e1850] [cursor=pointer]:
- generic [ref=e1851]: 撤回
- button "删除" [ref=e1852] [cursor=pointer]:
- generic [ref=e1853]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 15 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- button "下一页" [disabled] [ref=e1326]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,671 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [active] [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e2398]':
- cell "145" [ref=e2399]:
- generic [ref=e1346]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e2400]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 卜锦元
- generic [ref=e1354]: "ID: 7"
- cell "文本" [ref=e2401]:
- generic [ref=e1358]: 文本
- cell "1111" [ref=e2402]:
- generic [ref=e1361]: "1111"
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "6" [ref=e2403]:
- generic [ref=e1367]: "6"
- cell "2026-04-17 14:10:04" [ref=e2404]:
- generic [ref=e1369]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e2405]':
- cell "144" [ref=e2406]:
- generic [ref=e1380]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e2407]':
- generic [ref=e1383]:
- generic [ref=e1385]:
- generic [ref=e1386]:
- generic [ref=e1387]: 卜锦元
- generic [ref=e1388]: "ID: 7"
- cell "文本" [ref=e2408]:
- generic [ref=e1392]: 文本
- cell "1112122" [ref=e2409]:
- generic [ref=e1395]: "1112122"
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "6" [ref=e2410]:
- generic [ref=e1401]: "6"
- cell "2026-04-17 14:09:48" [ref=e2411]:
- generic [ref=e1403]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e2412]':
- cell "143" [ref=e2413]:
- generic [ref=e1414]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e2414]':
- generic [ref=e1417]:
- generic [ref=e1419]:
- generic [ref=e1420]:
- generic [ref=e1421]: 卜锦元
- generic [ref=e1422]: "ID: 7"
- cell "文本" [ref=e2415]:
- generic [ref=e1426]: 文本
- cell "1111" [ref=e2416]:
- generic [ref=e1429]: "1111"
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "6" [ref=e2417]:
- generic [ref=e1435]: "6"
- cell "2026-04-17 14:09:36" [ref=e2418]:
- generic [ref=e1437]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e2419]':
- cell "142" [ref=e2420]:
- generic [ref=e1448]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e2421]':
- generic [ref=e1451]:
- generic [ref=e1453]:
- generic [ref=e1454]:
- generic [ref=e1455]: 段凌云
- generic [ref=e1456]: "ID: 13"
- cell "文本" [ref=e2422]:
- generic [ref=e1460]: 文本
- cell "111111111223" [ref=e2423]:
- generic [ref=e1463]: "111111111223"
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "6" [ref=e2424]:
- generic [ref=e1469]: "6"
- cell "2026-04-17 14:09:20" [ref=e2425]:
- generic [ref=e1471]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e2426]':
- cell "141" [ref=e2427]:
- generic [ref=e1482]: "141"
- 'cell "周 周和智 ID: 15" [ref=e2428]':
- generic [ref=e1485]:
- generic [ref=e1487]:
- generic [ref=e1488]:
- generic [ref=e1489]: 周和智
- generic [ref=e1490]: "ID: 15"
- cell "文本" [ref=e2429]:
- generic [ref=e1494]: 文本
- cell "换届大会打卡还贷款" [ref=e2430]:
- generic [ref=e1497]: 换届大会打卡还贷款
- cell "正常" [ref=e1498]:
- generic [ref=e1501]: 正常
- cell "8" [ref=e2431]:
- generic [ref=e1503]: "8"
- cell "2026-03-12 15:04:56" [ref=e2432]:
- generic [ref=e1505]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e1506]:
- generic [ref=e1507]:
- button "详情" [ref=e1508] [cursor=pointer]:
- generic [ref=e1509]: 详情
- button "撤回" [ref=e1510] [cursor=pointer]:
- generic [ref=e1511]: 撤回
- button "删除" [ref=e1512] [cursor=pointer]:
- generic [ref=e1513]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e2433]':
- cell "140" [ref=e2434]:
- generic [ref=e1516]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e2435]':
- generic [ref=e1519]:
- generic [ref=e1521]:
- generic [ref=e1522]:
- generic [ref=e1523]: 卜锦元
- generic [ref=e1524]: "ID: 7"
- cell "文本" [ref=e2436]:
- generic [ref=e1528]: 文本
- cell "你能看到吗" [ref=e2437]:
- generic [ref=e1531]: 你能看到吗
- cell "正常" [ref=e1532]:
- generic [ref=e1535]: 正常
- cell "8" [ref=e2438]:
- generic [ref=e1537]: "8"
- cell "2026-03-12 15:04:54" [ref=e2439]:
- generic [ref=e1539]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e1540]:
- generic [ref=e1541]:
- button "详情" [ref=e1542] [cursor=pointer]:
- generic [ref=e1543]: 详情
- button "撤回" [ref=e1544] [cursor=pointer]:
- generic [ref=e1545]: 撤回
- button "删除" [ref=e1546] [cursor=pointer]:
- generic [ref=e1547]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e2440]':
- cell "139" [ref=e2441]:
- generic [ref=e1550]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e2442]':
- generic [ref=e1553]:
- generic [ref=e1555]:
- generic [ref=e1556]:
- generic [ref=e1557]: 卜锦元
- generic [ref=e1558]: "ID: 7"
- cell "文本" [ref=e2443]:
- generic [ref=e1562]: 文本
- cell "@周和智 1111" [ref=e2444]:
- generic [ref=e1565]: "@周和智 1111"
- cell "正常" [ref=e1566]:
- generic [ref=e1569]: 正常
- cell "8" [ref=e2198]:
- generic [ref=e1571]: "8"
- cell "2026-03-12 15:04:43" [ref=e2445]:
- generic [ref=e1573]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e1574]:
- generic [ref=e1575]:
- button "详情" [ref=e1576] [cursor=pointer]:
- generic [ref=e1577]: 详情
- button "撤回" [ref=e1578] [cursor=pointer]:
- generic [ref=e1579]: 撤回
- button "删除" [ref=e1580] [cursor=pointer]:
- generic [ref=e1581]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e2446]':
- cell "138" [ref=e2447]:
- generic [ref=e1584]: "138"
- 'cell "? - ID: 0" [ref=e1585]':
- generic [ref=e1587]:
- generic [ref=e1589]: "?"
- generic [ref=e1590]:
- generic [ref=e1591]: "-"
- generic [ref=e1592]: "ID: 0"
- cell "系统消息" [ref=e1593]:
- generic [ref=e1596]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e2448]:
- generic [ref=e1599]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e1600]:
- generic [ref=e1603]: 正常
- cell "8" [ref=e2449]:
- generic [ref=e1605]: "8"
- cell "2026-03-12 15:04:20" [ref=e2450]:
- generic [ref=e1607]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e1608]:
- generic [ref=e1609]:
- button "详情" [ref=e1610] [cursor=pointer]:
- generic [ref=e1611]: 详情
- button "撤回" [ref=e1612] [cursor=pointer]:
- generic [ref=e1613]: 撤回
- button "删除" [ref=e1614] [cursor=pointer]:
- generic [ref=e1615]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e2451]':
- cell "137" [ref=e2452]:
- generic [ref=e1618]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e2453]':
- generic [ref=e1621]:
- generic [ref=e1623]:
- generic [ref=e1624]:
- generic [ref=e1625]: 卜锦元
- generic [ref=e1626]: "ID: 7"
- cell "文本" [ref=e2454]:
- generic [ref=e1630]: 文本
- cell "ewqeqwe" [ref=e2455]:
- generic [ref=e1633]: ewqeqwe
- cell "正常" [ref=e1634]:
- generic [ref=e1637]: 正常
- cell "10" [ref=e2456]:
- generic [ref=e1639]: "10"
- cell "2026-03-12 15:03:56" [ref=e2457]:
- generic [ref=e1641]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e1642]:
- generic [ref=e1643]:
- button "详情" [ref=e1644] [cursor=pointer]:
- generic [ref=e1645]: 详情
- button "撤回" [ref=e1646] [cursor=pointer]:
- generic [ref=e1647]: 撤回
- button "删除" [ref=e1648] [cursor=pointer]:
- generic [ref=e1649]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e2458]':
- cell "136" [ref=e2459]:
- generic [ref=e1652]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e2460]':
- generic [ref=e1655]:
- generic [ref=e1657]:
- generic [ref=e1658]:
- generic [ref=e1659]: 卜锦元
- generic [ref=e1660]: "ID: 7"
- cell "文本" [ref=e2461]:
- generic [ref=e1664]: 文本
- cell "23213123" [ref=e2462]:
- generic [ref=e1667]: "23213123"
- cell "正常" [ref=e1668]:
- generic [ref=e1671]: 正常
- cell "10" [ref=e2463]:
- generic [ref=e1673]: "10"
- cell "2026-03-12 15:03:53" [ref=e2464]:
- generic [ref=e1675]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e1676]:
- generic [ref=e1677]:
- button "详情" [ref=e1678] [cursor=pointer]:
- generic [ref=e1679]: 详情
- button "撤回" [ref=e1680] [cursor=pointer]:
- generic [ref=e1681]: 撤回
- button "删除" [ref=e1682] [cursor=pointer]:
- generic [ref=e1683]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e2465]':
- cell "135" [ref=e2466]:
- generic [ref=e1686]: "135"
- 'cell "周 周和智 ID: 15" [ref=e2467]':
- generic [ref=e1689]:
- generic [ref=e1691]:
- generic [ref=e1692]:
- generic [ref=e1693]: 周和智
- generic [ref=e1694]: "ID: 15"
- cell "文本" [ref=e2468]:
- generic [ref=e1698]: 文本
- cell "打打看迦拉克隆离开" [ref=e2469]:
- generic [ref=e1701]: 打打看迦拉克隆离开
- cell "正常" [ref=e1702]:
- generic [ref=e1705]: 正常
- cell "10" [ref=e2470]:
- generic [ref=e1707]: "10"
- cell "2026-03-12 15:03:39" [ref=e2471]:
- generic [ref=e1709]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e1710]:
- generic [ref=e1711]:
- button "详情" [ref=e1712] [cursor=pointer]:
- generic [ref=e1713]: 详情
- button "撤回" [ref=e1714] [cursor=pointer]:
- generic [ref=e1715]: 撤回
- button "删除" [ref=e1716] [cursor=pointer]:
- generic [ref=e1717]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e2472]':
- cell "134" [ref=e2473]:
- generic [ref=e1720]: "134"
- 'cell "周 周和智 ID: 15" [ref=e2474]':
- generic [ref=e1723]:
- generic [ref=e1725]:
- generic [ref=e1726]:
- generic [ref=e1727]: 周和智
- generic [ref=e1728]: "ID: 15"
- cell "文本" [ref=e2475]:
- generic [ref=e1732]: 文本
- cell "啦啦啦啦" [ref=e2476]:
- generic [ref=e1735]: 啦啦啦啦
- cell "正常" [ref=e1736]:
- generic [ref=e1739]: 正常
- cell "10" [ref=e2477]:
- generic [ref=e1741]: "10"
- cell "2026-03-12 15:03:30" [ref=e2478]:
- generic [ref=e1743]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e1744]:
- generic [ref=e1745]:
- button "详情" [ref=e1746] [cursor=pointer]:
- generic [ref=e1747]: 详情
- button "撤回" [ref=e1748] [cursor=pointer]:
- generic [ref=e1749]: 撤回
- button "删除" [ref=e1750] [cursor=pointer]:
- generic [ref=e1751]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e2479]':
- cell "133" [ref=e2480]:
- generic [ref=e1754]: "133"
- 'cell "周 周和智 ID: 15" [ref=e2481]':
- generic [ref=e1757]:
- generic [ref=e1759]:
- generic [ref=e1760]:
- generic [ref=e1761]: 周和智
- generic [ref=e1762]: "ID: 15"
- cell "文本" [ref=e2482]:
- generic [ref=e1766]: 文本
- cell "哈喽" [ref=e2483]:
- generic [ref=e1769]: 哈喽
- cell "正常" [ref=e1770]:
- generic [ref=e1773]: 正常
- cell "10" [ref=e2484]:
- generic [ref=e1775]: "10"
- cell "2026-03-12 15:03:17" [ref=e2485]:
- generic [ref=e1777]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e1778]:
- generic [ref=e1779]:
- button "详情" [ref=e1780] [cursor=pointer]:
- generic [ref=e1781]: 详情
- button "撤回" [ref=e1782] [cursor=pointer]:
- generic [ref=e1783]: 撤回
- button "删除" [ref=e1784] [cursor=pointer]:
- generic [ref=e1785]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e2486]':
- cell "132" [ref=e2487]:
- generic [ref=e1788]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e2488]':
- generic [ref=e1791]:
- generic [ref=e1793]:
- generic [ref=e1794]:
- generic [ref=e1795]: 卜锦元
- generic [ref=e1796]: "ID: 7"
- cell "文本" [ref=e2489]:
- generic [ref=e1800]: 文本
- cell "niahha a" [ref=e2490]:
- generic [ref=e1803]: niahha a
- cell "正常" [ref=e1804]:
- generic [ref=e1807]: 正常
- cell "10" [ref=e2491]:
- generic [ref=e1809]: "10"
- cell "2026-03-12 15:03:08" [ref=e2492]:
- generic [ref=e1811]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e1812]:
- generic [ref=e1813]:
- button "详情" [ref=e1814] [cursor=pointer]:
- generic [ref=e1815]: 详情
- button "撤回" [ref=e1816] [cursor=pointer]:
- generic [ref=e1817]: 撤回
- button "删除" [ref=e1818] [cursor=pointer]:
- generic [ref=e1819]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e2493]':
- cell "131" [ref=e2494]:
- generic [ref=e1822]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e2495]':
- generic [ref=e1825]:
- generic [ref=e1827]:
- generic [ref=e1828]:
- generic [ref=e1829]: 新昵称
- generic [ref=e1830]: "ID: 4"
- cell "文本" [ref=e2496]:
- generic [ref=e1834]: 文本
- cell "哈哈哈,测试" [ref=e2497]:
- generic [ref=e1837]: 哈哈哈,测试
- cell "正常" [ref=e1838]:
- generic [ref=e1841]: 正常
- cell "8" [ref=e2498]:
- generic [ref=e1843]: "8"
- cell "2026-03-04 18:37:53" [ref=e2499]:
- generic [ref=e1845]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e1846]:
- generic [ref=e1847]:
- button "详情" [ref=e1848] [cursor=pointer]:
- generic [ref=e1849]: 详情
- button "撤回" [ref=e1850] [cursor=pointer]:
- generic [ref=e1851]: 撤回
- button "删除" [ref=e1852] [cursor=pointer]:
- generic [ref=e1853]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e2500]':
- cell "130" [ref=e2501]:
- generic [ref=e2502]: "130"
- 'cell "? - ID: 0" [ref=e2503]':
- generic [ref=e2505]:
- generic [ref=e2507]: "?"
- generic [ref=e2508]:
- generic [ref=e2509]: "-"
- generic [ref=e2510]: "ID: 0"
- cell "系统消息" [ref=e2511]:
- generic [ref=e2514]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e2515]:
- generic [ref=e2517]: 卜锦元 更新了群公告
- cell "正常" [ref=e2518]:
- generic [ref=e2521]: 正常
- cell "8" [ref=e2522]:
- generic [ref=e2523]: "8"
- cell "2026-03-04 18:35:52" [ref=e2524]:
- generic [ref=e2525]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e2526]:
- generic [ref=e2527]:
- button "详情" [ref=e2528] [cursor=pointer]:
- generic [ref=e2529]: 详情
- button "撤回" [ref=e2530] [cursor=pointer]:
- generic [ref=e2531]: 撤回
- button "删除" [ref=e2532] [cursor=pointer]:
- generic [ref=e2533]: 删除
- 'row "129 新 新昵称 ID: 4 文本 我知道你是谁 正常 8 2026-03-04 18:31:51 详情 撤回 删除" [ref=e2534]':
- cell "129" [ref=e2535]:
- generic [ref=e2536]: "129"
- 'cell "新 新昵称 ID: 4" [ref=e2537]':
- generic [ref=e2539]:
- generic [ref=e2541]:
- generic [ref=e2542]:
- generic [ref=e2543]: 新昵称
- generic [ref=e2544]: "ID: 4"
- cell "文本" [ref=e2545]:
- generic [ref=e2548]: 文本
- cell "我知道你是谁" [ref=e2549]:
- generic [ref=e2551]: 我知道你是谁
- cell "正常" [ref=e2552]:
- generic [ref=e2555]: 正常
- cell "8" [ref=e2556]:
- generic [ref=e2557]: "8"
- cell "2026-03-04 18:31:51" [ref=e2558]:
- generic [ref=e2559]: 2026-03-04 18:31:51
- cell "详情 撤回 删除" [ref=e2560]:
- generic [ref=e2561]:
- button "详情" [ref=e2562] [cursor=pointer]:
- generic [ref=e2563]: 详情
- button "撤回" [ref=e2564] [cursor=pointer]:
- generic [ref=e2565]: 撤回
- button "删除" [ref=e2566] [cursor=pointer]:
- generic [ref=e2567]: 删除
- 'row "128 卜 卜锦元 ID: 7 文本 111112 正常 8 2026-03-04 18:31:37 详情 撤回 删除" [ref=e2568]':
- cell "128" [ref=e2569]:
- generic [ref=e2570]: "128"
- 'cell "卜 卜锦元 ID: 7" [ref=e2571]':
- generic [ref=e2573]:
- generic [ref=e2575]:
- generic [ref=e2576]:
- generic [ref=e2577]: 卜锦元
- generic [ref=e2578]: "ID: 7"
- cell "文本" [ref=e2579]:
- generic [ref=e2582]: 文本
- cell "111112" [ref=e2583]:
- generic [ref=e2585]: "111112"
- cell "正常" [ref=e2586]:
- generic [ref=e2589]: 正常
- cell "8" [ref=e2590]:
- generic [ref=e2591]: "8"
- cell "2026-03-04 18:31:37" [ref=e2592]:
- generic [ref=e2593]: 2026-03-04 18:31:37
- cell "详情 撤回 删除" [ref=e2594]:
- generic [ref=e2595]:
- button "详情" [ref=e2596] [cursor=pointer]:
- generic [ref=e2597]: 详情
- button "撤回" [ref=e2598] [cursor=pointer]:
- generic [ref=e2599]: 撤回
- button "删除" [ref=e2600] [cursor=pointer]:
- generic [ref=e2601]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e2602]':
- cell "127" [ref=e2603]:
- generic [ref=e2604]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e2605]':
- generic [ref=e2607]:
- generic [ref=e2609]:
- generic [ref=e2610]:
- generic [ref=e2611]: 卜锦元
- generic [ref=e2612]: "ID: 7"
- cell "文本" [ref=e2613]:
- generic [ref=e2616]: 文本
- cell "再次测试" [ref=e2617]:
- generic [ref=e2619]: 再次测试
- cell "正常" [ref=e2620]:
- generic [ref=e2623]: 正常
- cell "8" [ref=e2624]:
- generic [ref=e2625]: "8"
- cell "2026-03-04 18:25:29" [ref=e2626]:
- generic [ref=e2627]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e2628]:
- generic [ref=e2629]:
- button "详情" [ref=e2630] [cursor=pointer]:
- generic [ref=e2631]: 详情
- button "撤回" [ref=e2632] [cursor=pointer]:
- generic [ref=e2633]: 撤回
- button "删除" [ref=e2634] [cursor=pointer]:
- generic [ref=e2635]: 删除
- 'row "126 卜 卜锦元 ID: 7 文本 哈哈哈,知道我是谁吗 正常 8 2026-03-04 18:08:32 详情 撤回 删除" [ref=e2636]':
- cell "126" [ref=e2637]:
- generic [ref=e2638]: "126"
- 'cell "卜 卜锦元 ID: 7" [ref=e2639]':
- generic [ref=e2641]:
- generic [ref=e2643]:
- generic [ref=e2644]:
- generic [ref=e2645]: 卜锦元
- generic [ref=e2646]: "ID: 7"
- cell "文本" [ref=e2647]:
- generic [ref=e2650]: 文本
- cell "哈哈哈,知道我是谁吗" [ref=e2651]:
- generic [ref=e2653]: 哈哈哈,知道我是谁吗
- cell "正常" [ref=e2654]:
- generic [ref=e2657]: 正常
- cell "8" [ref=e2658]:
- generic [ref=e2659]: "8"
- cell "2026-03-04 18:08:32" [ref=e2660]:
- generic [ref=e2661]: 2026-03-04 18:08:32
- cell "详情 撤回 删除" [ref=e2662]:
- generic [ref=e2663]:
- button "详情" [ref=e2664] [cursor=pointer]:
- generic [ref=e2665]: 详情
- button "撤回" [ref=e2666] [cursor=pointer]:
- generic [ref=e2667]: 撤回
- button "删除" [ref=e2668] [cursor=pointer]:
- generic [ref=e2669]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- listitem "第 2 页" [ref=e2670] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e2671] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e2672] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e2673] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e2674] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e2675] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e2676] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,671 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [active] [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e2398]':
- cell "145" [ref=e2399]:
- generic [ref=e1346]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e2400]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 卜锦元
- generic [ref=e1354]: "ID: 7"
- cell "文本" [ref=e2401]:
- generic [ref=e1358]: 文本
- cell "1111" [ref=e2402]:
- generic [ref=e1361]: "1111"
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "6" [ref=e2403]:
- generic [ref=e1367]: "6"
- cell "2026-04-17 14:10:04" [ref=e2404]:
- generic [ref=e1369]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e2405]':
- cell "144" [ref=e2406]:
- generic [ref=e1380]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e2407]':
- generic [ref=e1383]:
- generic [ref=e1385]:
- generic [ref=e1386]:
- generic [ref=e1387]: 卜锦元
- generic [ref=e1388]: "ID: 7"
- cell "文本" [ref=e2408]:
- generic [ref=e1392]: 文本
- cell "1112122" [ref=e2409]:
- generic [ref=e1395]: "1112122"
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "6" [ref=e2410]:
- generic [ref=e1401]: "6"
- cell "2026-04-17 14:09:48" [ref=e2411]:
- generic [ref=e1403]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e2412]':
- cell "143" [ref=e2413]:
- generic [ref=e1414]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e2414]':
- generic [ref=e1417]:
- generic [ref=e1419]:
- generic [ref=e1420]:
- generic [ref=e1421]: 卜锦元
- generic [ref=e1422]: "ID: 7"
- cell "文本" [ref=e2415]:
- generic [ref=e1426]: 文本
- cell "1111" [ref=e2416]:
- generic [ref=e1429]: "1111"
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "6" [ref=e2417]:
- generic [ref=e1435]: "6"
- cell "2026-04-17 14:09:36" [ref=e2418]:
- generic [ref=e1437]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e2419]':
- cell "142" [ref=e2420]:
- generic [ref=e1448]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e2421]':
- generic [ref=e1451]:
- generic [ref=e1453]:
- generic [ref=e1454]:
- generic [ref=e1455]: 段凌云
- generic [ref=e1456]: "ID: 13"
- cell "文本" [ref=e2422]:
- generic [ref=e1460]: 文本
- cell "111111111223" [ref=e2423]:
- generic [ref=e1463]: "111111111223"
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "6" [ref=e2424]:
- generic [ref=e1469]: "6"
- cell "2026-04-17 14:09:20" [ref=e2425]:
- generic [ref=e1471]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e2426]':
- cell "141" [ref=e2427]:
- generic [ref=e1482]: "141"
- 'cell "周 周和智 ID: 15" [ref=e2428]':
- generic [ref=e1485]:
- generic [ref=e1487]:
- generic [ref=e1488]:
- generic [ref=e1489]: 周和智
- generic [ref=e1490]: "ID: 15"
- cell "文本" [ref=e2429]:
- generic [ref=e1494]: 文本
- cell "换届大会打卡还贷款" [ref=e2430]:
- generic [ref=e1497]: 换届大会打卡还贷款
- cell "正常" [ref=e1498]:
- generic [ref=e1501]: 正常
- cell "8" [ref=e2431]:
- generic [ref=e1503]: "8"
- cell "2026-03-12 15:04:56" [ref=e2432]:
- generic [ref=e1505]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e1506]:
- generic [ref=e1507]:
- button "详情" [ref=e1508] [cursor=pointer]:
- generic [ref=e1509]: 详情
- button "撤回" [ref=e1510] [cursor=pointer]:
- generic [ref=e1511]: 撤回
- button "删除" [ref=e1512] [cursor=pointer]:
- generic [ref=e1513]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e2433]':
- cell "140" [ref=e2434]:
- generic [ref=e1516]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e2435]':
- generic [ref=e1519]:
- generic [ref=e1521]:
- generic [ref=e1522]:
- generic [ref=e1523]: 卜锦元
- generic [ref=e1524]: "ID: 7"
- cell "文本" [ref=e2436]:
- generic [ref=e1528]: 文本
- cell "你能看到吗" [ref=e2437]:
- generic [ref=e1531]: 你能看到吗
- cell "正常" [ref=e1532]:
- generic [ref=e1535]: 正常
- cell "8" [ref=e2438]:
- generic [ref=e1537]: "8"
- cell "2026-03-12 15:04:54" [ref=e2439]:
- generic [ref=e1539]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e1540]:
- generic [ref=e1541]:
- button "详情" [ref=e1542] [cursor=pointer]:
- generic [ref=e1543]: 详情
- button "撤回" [ref=e1544] [cursor=pointer]:
- generic [ref=e1545]: 撤回
- button "删除" [ref=e1546] [cursor=pointer]:
- generic [ref=e1547]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e2440]':
- cell "139" [ref=e2441]:
- generic [ref=e1550]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e2442]':
- generic [ref=e1553]:
- generic [ref=e1555]:
- generic [ref=e1556]:
- generic [ref=e1557]: 卜锦元
- generic [ref=e1558]: "ID: 7"
- cell "文本" [ref=e2443]:
- generic [ref=e1562]: 文本
- cell "@周和智 1111" [ref=e2444]:
- generic [ref=e1565]: "@周和智 1111"
- cell "正常" [ref=e1566]:
- generic [ref=e1569]: 正常
- cell "8" [ref=e2198]:
- generic [ref=e1571]: "8"
- cell "2026-03-12 15:04:43" [ref=e2445]:
- generic [ref=e1573]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e1574]:
- generic [ref=e1575]:
- button "详情" [ref=e1576] [cursor=pointer]:
- generic [ref=e1577]: 详情
- button "撤回" [ref=e1578] [cursor=pointer]:
- generic [ref=e1579]: 撤回
- button "删除" [ref=e1580] [cursor=pointer]:
- generic [ref=e1581]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e2446]':
- cell "138" [ref=e2447]:
- generic [ref=e1584]: "138"
- 'cell "? - ID: 0" [ref=e1585]':
- generic [ref=e1587]:
- generic [ref=e1589]: "?"
- generic [ref=e1590]:
- generic [ref=e1591]: "-"
- generic [ref=e1592]: "ID: 0"
- cell "系统消息" [ref=e1593]:
- generic [ref=e1596]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e2448]:
- generic [ref=e1599]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e1600]:
- generic [ref=e1603]: 正常
- cell "8" [ref=e2449]:
- generic [ref=e1605]: "8"
- cell "2026-03-12 15:04:20" [ref=e2450]:
- generic [ref=e1607]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e1608]:
- generic [ref=e1609]:
- button "详情" [ref=e1610] [cursor=pointer]:
- generic [ref=e1611]: 详情
- button "撤回" [ref=e1612] [cursor=pointer]:
- generic [ref=e1613]: 撤回
- button "删除" [ref=e1614] [cursor=pointer]:
- generic [ref=e1615]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e2451]':
- cell "137" [ref=e2452]:
- generic [ref=e1618]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e2453]':
- generic [ref=e1621]:
- generic [ref=e1623]:
- generic [ref=e1624]:
- generic [ref=e1625]: 卜锦元
- generic [ref=e1626]: "ID: 7"
- cell "文本" [ref=e2454]:
- generic [ref=e1630]: 文本
- cell "ewqeqwe" [ref=e2455]:
- generic [ref=e1633]: ewqeqwe
- cell "正常" [ref=e1634]:
- generic [ref=e1637]: 正常
- cell "10" [ref=e2456]:
- generic [ref=e1639]: "10"
- cell "2026-03-12 15:03:56" [ref=e2457]:
- generic [ref=e1641]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e1642]:
- generic [ref=e1643]:
- button "详情" [ref=e1644] [cursor=pointer]:
- generic [ref=e1645]: 详情
- button "撤回" [ref=e1646] [cursor=pointer]:
- generic [ref=e1647]: 撤回
- button "删除" [ref=e1648] [cursor=pointer]:
- generic [ref=e1649]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e2458]':
- cell "136" [ref=e2459]:
- generic [ref=e1652]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e2460]':
- generic [ref=e1655]:
- generic [ref=e1657]:
- generic [ref=e1658]:
- generic [ref=e1659]: 卜锦元
- generic [ref=e1660]: "ID: 7"
- cell "文本" [ref=e2461]:
- generic [ref=e1664]: 文本
- cell "23213123" [ref=e2462]:
- generic [ref=e1667]: "23213123"
- cell "正常" [ref=e1668]:
- generic [ref=e1671]: 正常
- cell "10" [ref=e2463]:
- generic [ref=e1673]: "10"
- cell "2026-03-12 15:03:53" [ref=e2464]:
- generic [ref=e1675]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e1676]:
- generic [ref=e1677]:
- button "详情" [ref=e1678] [cursor=pointer]:
- generic [ref=e1679]: 详情
- button "撤回" [ref=e1680] [cursor=pointer]:
- generic [ref=e1681]: 撤回
- button "删除" [ref=e1682] [cursor=pointer]:
- generic [ref=e1683]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e2465]':
- cell "135" [ref=e2466]:
- generic [ref=e1686]: "135"
- 'cell "周 周和智 ID: 15" [ref=e2467]':
- generic [ref=e1689]:
- generic [ref=e1691]:
- generic [ref=e1692]:
- generic [ref=e1693]: 周和智
- generic [ref=e1694]: "ID: 15"
- cell "文本" [ref=e2468]:
- generic [ref=e1698]: 文本
- cell "打打看迦拉克隆离开" [ref=e2469]:
- generic [ref=e1701]: 打打看迦拉克隆离开
- cell "正常" [ref=e1702]:
- generic [ref=e1705]: 正常
- cell "10" [ref=e2470]:
- generic [ref=e1707]: "10"
- cell "2026-03-12 15:03:39" [ref=e2471]:
- generic [ref=e1709]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e1710]:
- generic [ref=e1711]:
- button "详情" [ref=e1712] [cursor=pointer]:
- generic [ref=e1713]: 详情
- button "撤回" [ref=e1714] [cursor=pointer]:
- generic [ref=e1715]: 撤回
- button "删除" [ref=e1716] [cursor=pointer]:
- generic [ref=e1717]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e2472]':
- cell "134" [ref=e2473]:
- generic [ref=e1720]: "134"
- 'cell "周 周和智 ID: 15" [ref=e2474]':
- generic [ref=e1723]:
- generic [ref=e1725]:
- generic [ref=e1726]:
- generic [ref=e1727]: 周和智
- generic [ref=e1728]: "ID: 15"
- cell "文本" [ref=e2475]:
- generic [ref=e1732]: 文本
- cell "啦啦啦啦" [ref=e2476]:
- generic [ref=e1735]: 啦啦啦啦
- cell "正常" [ref=e1736]:
- generic [ref=e1739]: 正常
- cell "10" [ref=e2477]:
- generic [ref=e1741]: "10"
- cell "2026-03-12 15:03:30" [ref=e2478]:
- generic [ref=e1743]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e1744]:
- generic [ref=e1745]:
- button "详情" [ref=e1746] [cursor=pointer]:
- generic [ref=e1747]: 详情
- button "撤回" [ref=e1748] [cursor=pointer]:
- generic [ref=e1749]: 撤回
- button "删除" [ref=e1750] [cursor=pointer]:
- generic [ref=e1751]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e2479]':
- cell "133" [ref=e2480]:
- generic [ref=e1754]: "133"
- 'cell "周 周和智 ID: 15" [ref=e2481]':
- generic [ref=e1757]:
- generic [ref=e1759]:
- generic [ref=e1760]:
- generic [ref=e1761]: 周和智
- generic [ref=e1762]: "ID: 15"
- cell "文本" [ref=e2482]:
- generic [ref=e1766]: 文本
- cell "哈喽" [ref=e2483]:
- generic [ref=e1769]: 哈喽
- cell "正常" [ref=e1770]:
- generic [ref=e1773]: 正常
- cell "10" [ref=e2484]:
- generic [ref=e1775]: "10"
- cell "2026-03-12 15:03:17" [ref=e2485]:
- generic [ref=e1777]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e1778]:
- generic [ref=e1779]:
- button "详情" [ref=e1780] [cursor=pointer]:
- generic [ref=e1781]: 详情
- button "撤回" [ref=e1782] [cursor=pointer]:
- generic [ref=e1783]: 撤回
- button "删除" [ref=e1784] [cursor=pointer]:
- generic [ref=e1785]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e2486]':
- cell "132" [ref=e2487]:
- generic [ref=e1788]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e2488]':
- generic [ref=e1791]:
- generic [ref=e1793]:
- generic [ref=e1794]:
- generic [ref=e1795]: 卜锦元
- generic [ref=e1796]: "ID: 7"
- cell "文本" [ref=e2489]:
- generic [ref=e1800]: 文本
- cell "niahha a" [ref=e2490]:
- generic [ref=e1803]: niahha a
- cell "正常" [ref=e1804]:
- generic [ref=e1807]: 正常
- cell "10" [ref=e2491]:
- generic [ref=e1809]: "10"
- cell "2026-03-12 15:03:08" [ref=e2492]:
- generic [ref=e1811]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e1812]:
- generic [ref=e1813]:
- button "详情" [ref=e1814] [cursor=pointer]:
- generic [ref=e1815]: 详情
- button "撤回" [ref=e1816] [cursor=pointer]:
- generic [ref=e1817]: 撤回
- button "删除" [ref=e1818] [cursor=pointer]:
- generic [ref=e1819]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e2493]':
- cell "131" [ref=e2494]:
- generic [ref=e1822]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e2495]':
- generic [ref=e1825]:
- generic [ref=e1827]:
- generic [ref=e1828]:
- generic [ref=e1829]: 新昵称
- generic [ref=e1830]: "ID: 4"
- cell "文本" [ref=e2496]:
- generic [ref=e1834]: 文本
- cell "哈哈哈,测试" [ref=e2497]:
- generic [ref=e1837]: 哈哈哈,测试
- cell "正常" [ref=e1838]:
- generic [ref=e1841]: 正常
- cell "8" [ref=e2498]:
- generic [ref=e1843]: "8"
- cell "2026-03-04 18:37:53" [ref=e2499]:
- generic [ref=e1845]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e1846]:
- generic [ref=e1847]:
- button "详情" [ref=e1848] [cursor=pointer]:
- generic [ref=e1849]: 详情
- button "撤回" [ref=e1850] [cursor=pointer]:
- generic [ref=e1851]: 撤回
- button "删除" [ref=e1852] [cursor=pointer]:
- generic [ref=e1853]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e2500]':
- cell "130" [ref=e2501]:
- generic [ref=e2502]: "130"
- 'cell "? - ID: 0" [ref=e2503]':
- generic [ref=e2505]:
- generic [ref=e2507]: "?"
- generic [ref=e2508]:
- generic [ref=e2509]: "-"
- generic [ref=e2510]: "ID: 0"
- cell "系统消息" [ref=e2511]:
- generic [ref=e2514]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e2515]:
- generic [ref=e2517]: 卜锦元 更新了群公告
- cell "正常" [ref=e2518]:
- generic [ref=e2521]: 正常
- cell "8" [ref=e2522]:
- generic [ref=e2523]: "8"
- cell "2026-03-04 18:35:52" [ref=e2524]:
- generic [ref=e2525]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e2526]:
- generic [ref=e2527]:
- button "详情" [ref=e2528] [cursor=pointer]:
- generic [ref=e2529]: 详情
- button "撤回" [ref=e2530] [cursor=pointer]:
- generic [ref=e2531]: 撤回
- button "删除" [ref=e2532] [cursor=pointer]:
- generic [ref=e2533]: 删除
- 'row "129 新 新昵称 ID: 4 文本 我知道你是谁 正常 8 2026-03-04 18:31:51 详情 撤回 删除" [ref=e2534]':
- cell "129" [ref=e2535]:
- generic [ref=e2536]: "129"
- 'cell "新 新昵称 ID: 4" [ref=e2537]':
- generic [ref=e2539]:
- generic [ref=e2541]:
- generic [ref=e2542]:
- generic [ref=e2543]: 新昵称
- generic [ref=e2544]: "ID: 4"
- cell "文本" [ref=e2545]:
- generic [ref=e2548]: 文本
- cell "我知道你是谁" [ref=e2549]:
- generic [ref=e2551]: 我知道你是谁
- cell "正常" [ref=e2552]:
- generic [ref=e2555]: 正常
- cell "8" [ref=e2556]:
- generic [ref=e2557]: "8"
- cell "2026-03-04 18:31:51" [ref=e2558]:
- generic [ref=e2559]: 2026-03-04 18:31:51
- cell "详情 撤回 删除" [ref=e2560]:
- generic [ref=e2561]:
- button "详情" [ref=e2562] [cursor=pointer]:
- generic [ref=e2563]: 详情
- button "撤回" [ref=e2564] [cursor=pointer]:
- generic [ref=e2565]: 撤回
- button "删除" [ref=e2566] [cursor=pointer]:
- generic [ref=e2567]: 删除
- 'row "128 卜 卜锦元 ID: 7 文本 111112 正常 8 2026-03-04 18:31:37 详情 撤回 删除" [ref=e2568]':
- cell "128" [ref=e2569]:
- generic [ref=e2570]: "128"
- 'cell "卜 卜锦元 ID: 7" [ref=e2571]':
- generic [ref=e2573]:
- generic [ref=e2575]:
- generic [ref=e2576]:
- generic [ref=e2577]: 卜锦元
- generic [ref=e2578]: "ID: 7"
- cell "文本" [ref=e2579]:
- generic [ref=e2582]: 文本
- cell "111112" [ref=e2583]:
- generic [ref=e2585]: "111112"
- cell "正常" [ref=e2586]:
- generic [ref=e2589]: 正常
- cell "8" [ref=e2590]:
- generic [ref=e2591]: "8"
- cell "2026-03-04 18:31:37" [ref=e2592]:
- generic [ref=e2593]: 2026-03-04 18:31:37
- cell "详情 撤回 删除" [ref=e2594]:
- generic [ref=e2595]:
- button "详情" [ref=e2596] [cursor=pointer]:
- generic [ref=e2597]: 详情
- button "撤回" [ref=e2598] [cursor=pointer]:
- generic [ref=e2599]: 撤回
- button "删除" [ref=e2600] [cursor=pointer]:
- generic [ref=e2601]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e2602]':
- cell "127" [ref=e2603]:
- generic [ref=e2604]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e2605]':
- generic [ref=e2607]:
- generic [ref=e2609]:
- generic [ref=e2610]:
- generic [ref=e2611]: 卜锦元
- generic [ref=e2612]: "ID: 7"
- cell "文本" [ref=e2613]:
- generic [ref=e2616]: 文本
- cell "再次测试" [ref=e2617]:
- generic [ref=e2619]: 再次测试
- cell "正常" [ref=e2620]:
- generic [ref=e2623]: 正常
- cell "8" [ref=e2624]:
- generic [ref=e2625]: "8"
- cell "2026-03-04 18:25:29" [ref=e2626]:
- generic [ref=e2627]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e2628]:
- generic [ref=e2629]:
- button "详情" [ref=e2630] [cursor=pointer]:
- generic [ref=e2631]: 详情
- button "撤回" [ref=e2632] [cursor=pointer]:
- generic [ref=e2633]: 撤回
- button "删除" [ref=e2634] [cursor=pointer]:
- generic [ref=e2635]: 删除
- 'row "126 卜 卜锦元 ID: 7 文本 哈哈哈,知道我是谁吗 正常 8 2026-03-04 18:08:32 详情 撤回 删除" [ref=e2636]':
- cell "126" [ref=e2637]:
- generic [ref=e2638]: "126"
- 'cell "卜 卜锦元 ID: 7" [ref=e2639]':
- generic [ref=e2641]:
- generic [ref=e2643]:
- generic [ref=e2644]:
- generic [ref=e2645]: 卜锦元
- generic [ref=e2646]: "ID: 7"
- cell "文本" [ref=e2647]:
- generic [ref=e2650]: 文本
- cell "哈哈哈,知道我是谁吗" [ref=e2651]:
- generic [ref=e2653]: 哈哈哈,知道我是谁吗
- cell "正常" [ref=e2654]:
- generic [ref=e2657]: 正常
- cell "8" [ref=e2658]:
- generic [ref=e2659]: "8"
- cell "2026-03-04 18:08:32" [ref=e2660]:
- generic [ref=e2661]: 2026-03-04 18:08:32
- cell "详情 撤回 删除" [ref=e2662]:
- generic [ref=e2663]:
- button "详情" [ref=e2664] [cursor=pointer]:
- generic [ref=e2665]: 详情
- button "撤回" [ref=e2666] [cursor=pointer]:
- generic [ref=e2667]: 撤回
- button "删除" [ref=e2668] [cursor=pointer]:
- generic [ref=e2669]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- listitem "第 2 页" [ref=e2670] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e2671] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e2672] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e2673] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e2674] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e2675] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e2676] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,231 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]: "15"
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [active] [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e2682]':
- cell "141" [ref=e2683]:
- generic [ref=e1346]: "141"
- 'cell "周 周和智 ID: 15" [ref=e2684]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 周和智
- generic [ref=e1354]: "ID: 15"
- cell "文本" [ref=e2401]:
- generic [ref=e1358]: 文本
- cell "换届大会打卡还贷款" [ref=e2685]:
- generic [ref=e1361]: 换届大会打卡还贷款
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "8" [ref=e2686]:
- generic [ref=e1367]: "8"
- cell "2026-03-12 15:04:56" [ref=e2687]:
- generic [ref=e1369]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e2688]':
- cell "135" [ref=e2689]:
- generic [ref=e1380]: "135"
- 'cell "周 周和智 ID: 15" [ref=e2690]':
- generic [ref=e1383]:
- generic [ref=e1385]:
- generic [ref=e1386]:
- generic [ref=e1387]: 周和智
- generic [ref=e1388]: "ID: 15"
- cell "文本" [ref=e2408]:
- generic [ref=e1392]: 文本
- cell "打打看迦拉克隆离开" [ref=e2691]:
- generic [ref=e1395]: 打打看迦拉克隆离开
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "10" [ref=e2692]:
- generic [ref=e1401]: "10"
- cell "2026-03-12 15:03:39" [ref=e2693]:
- generic [ref=e1403]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e2694]':
- cell "134" [ref=e2695]:
- generic [ref=e1414]: "134"
- 'cell "周 周和智 ID: 15" [ref=e2696]':
- generic [ref=e1417]:
- generic [ref=e1419]:
- generic [ref=e1420]:
- generic [ref=e1421]: 周和智
- generic [ref=e1422]: "ID: 15"
- cell "文本" [ref=e2415]:
- generic [ref=e1426]: 文本
- cell "啦啦啦啦" [ref=e2697]:
- generic [ref=e1429]: 啦啦啦啦
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "10" [ref=e2698]:
- generic [ref=e1435]: "10"
- cell "2026-03-12 15:03:30" [ref=e2699]:
- generic [ref=e1437]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e2700]':
- cell "133" [ref=e2701]:
- generic [ref=e1448]: "133"
- 'cell "周 周和智 ID: 15" [ref=e2702]':
- generic [ref=e1451]:
- generic [ref=e1453]:
- generic [ref=e1454]:
- generic [ref=e1455]: 周和智
- generic [ref=e1456]: "ID: 15"
- cell "文本" [ref=e2422]:
- generic [ref=e1460]: 文本
- cell "哈喽" [ref=e2703]:
- generic [ref=e1463]: 哈喽
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "10" [ref=e2704]:
- generic [ref=e1469]: "10"
- cell "2026-03-12 15:03:17" [ref=e2705]:
- generic [ref=e1471]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 4 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- button "下一页" [disabled] [ref=e1326]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,671 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [active] [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e2706]':
- cell "145" [ref=e2707]:
- generic [ref=e1346]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e2708]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 卜锦元
- generic [ref=e1354]: "ID: 7"
- cell "文本" [ref=e2401]:
- generic [ref=e1358]: 文本
- cell "1111" [ref=e2709]:
- generic [ref=e1361]: "1111"
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "6" [ref=e2710]:
- generic [ref=e1367]: "6"
- cell "2026-04-17 14:10:04" [ref=e2711]:
- generic [ref=e1369]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e2712]':
- cell "144" [ref=e2713]:
- generic [ref=e1380]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e2714]':
- generic [ref=e1383]:
- generic [ref=e1385]:
- generic [ref=e1386]:
- generic [ref=e1387]: 卜锦元
- generic [ref=e1388]: "ID: 7"
- cell "文本" [ref=e2408]:
- generic [ref=e1392]: 文本
- cell "1112122" [ref=e2715]:
- generic [ref=e1395]: "1112122"
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "6" [ref=e2716]:
- generic [ref=e1401]: "6"
- cell "2026-04-17 14:09:48" [ref=e2717]:
- generic [ref=e1403]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e2718]':
- cell "143" [ref=e2719]:
- generic [ref=e1414]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e2720]':
- generic [ref=e1417]:
- generic [ref=e1419]:
- generic [ref=e1420]:
- generic [ref=e1421]: 卜锦元
- generic [ref=e1422]: "ID: 7"
- cell "文本" [ref=e2415]:
- generic [ref=e1426]: 文本
- cell "1111" [ref=e2721]:
- generic [ref=e1429]: "1111"
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "6" [ref=e2722]:
- generic [ref=e1435]: "6"
- cell "2026-04-17 14:09:36" [ref=e2723]:
- generic [ref=e1437]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e2724]':
- cell "142" [ref=e2725]:
- generic [ref=e1448]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e2726]':
- generic [ref=e1451]:
- generic [ref=e1453]:
- generic [ref=e1454]:
- generic [ref=e1455]: 段凌云
- generic [ref=e1456]: "ID: 13"
- cell "文本" [ref=e2422]:
- generic [ref=e1460]: 文本
- cell "111111111223" [ref=e2727]:
- generic [ref=e1463]: "111111111223"
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "6" [ref=e2728]:
- generic [ref=e1469]: "6"
- cell "2026-04-17 14:09:20" [ref=e2729]:
- generic [ref=e1471]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e2730]':
- cell "141" [ref=e2731]:
- generic [ref=e2732]: "141"
- 'cell "周 周和智 ID: 15" [ref=e2733]':
- generic [ref=e2735]:
- generic [ref=e2737]:
- generic [ref=e2738]:
- generic [ref=e2739]: 周和智
- generic [ref=e2740]: "ID: 15"
- cell "文本" [ref=e2741]:
- generic [ref=e2744]: 文本
- cell "换届大会打卡还贷款" [ref=e2745]:
- generic [ref=e2747]: 换届大会打卡还贷款
- cell "正常" [ref=e2748]:
- generic [ref=e2751]: 正常
- cell "8" [ref=e2752]:
- generic [ref=e2753]: "8"
- cell "2026-03-12 15:04:56" [ref=e2754]:
- generic [ref=e2755]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e2756]:
- generic [ref=e2757]:
- button "详情" [ref=e2758] [cursor=pointer]:
- generic [ref=e2759]: 详情
- button "撤回" [ref=e2760] [cursor=pointer]:
- generic [ref=e2761]: 撤回
- button "删除" [ref=e2762] [cursor=pointer]:
- generic [ref=e2763]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e2764]':
- cell "140" [ref=e2765]:
- generic [ref=e2766]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e2767]':
- generic [ref=e2769]:
- generic [ref=e2771]:
- generic [ref=e2772]:
- generic [ref=e2773]: 卜锦元
- generic [ref=e2774]: "ID: 7"
- cell "文本" [ref=e2775]:
- generic [ref=e2778]: 文本
- cell "你能看到吗" [ref=e2779]:
- generic [ref=e2781]: 你能看到吗
- cell "正常" [ref=e2782]:
- generic [ref=e2785]: 正常
- cell "8" [ref=e2786]:
- generic [ref=e2787]: "8"
- cell "2026-03-12 15:04:54" [ref=e2788]:
- generic [ref=e2789]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e2790]:
- generic [ref=e2791]:
- button "详情" [ref=e2792] [cursor=pointer]:
- generic [ref=e2793]: 详情
- button "撤回" [ref=e2794] [cursor=pointer]:
- generic [ref=e2795]: 撤回
- button "删除" [ref=e2796] [cursor=pointer]:
- generic [ref=e2797]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e2798]':
- cell "139" [ref=e2799]:
- generic [ref=e2800]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e2801]':
- generic [ref=e2803]:
- generic [ref=e2805]:
- generic [ref=e2806]:
- generic [ref=e2807]: 卜锦元
- generic [ref=e2808]: "ID: 7"
- cell "文本" [ref=e2809]:
- generic [ref=e2812]: 文本
- cell "@周和智 1111" [ref=e2813]:
- generic [ref=e2815]: "@周和智 1111"
- cell "正常" [ref=e2816]:
- generic [ref=e2819]: 正常
- cell "8" [ref=e2820]:
- generic [ref=e2821]: "8"
- cell "2026-03-12 15:04:43" [ref=e2822]:
- generic [ref=e2823]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e2824]:
- generic [ref=e2825]:
- button "详情" [ref=e2826] [cursor=pointer]:
- generic [ref=e2827]: 详情
- button "撤回" [ref=e2828] [cursor=pointer]:
- generic [ref=e2829]: 撤回
- button "删除" [ref=e2830] [cursor=pointer]:
- generic [ref=e2831]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e2832]':
- cell "138" [ref=e2833]:
- generic [ref=e2834]: "138"
- 'cell "? - ID: 0" [ref=e2835]':
- generic [ref=e2837]:
- generic [ref=e2839]: "?"
- generic [ref=e2840]:
- generic [ref=e2841]: "-"
- generic [ref=e2842]: "ID: 0"
- cell "系统消息" [ref=e2843]:
- generic [ref=e2846]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e2847]:
- generic [ref=e2849]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e2850]:
- generic [ref=e2853]: 正常
- cell "8" [ref=e2854]:
- generic [ref=e2855]: "8"
- cell "2026-03-12 15:04:20" [ref=e2856]:
- generic [ref=e2857]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e2858]:
- generic [ref=e2859]:
- button "详情" [ref=e2860] [cursor=pointer]:
- generic [ref=e2861]: 详情
- button "撤回" [ref=e2862] [cursor=pointer]:
- generic [ref=e2863]: 撤回
- button "删除" [ref=e2864] [cursor=pointer]:
- generic [ref=e2865]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e2866]':
- cell "137" [ref=e2867]:
- generic [ref=e2868]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e2869]':
- generic [ref=e2871]:
- generic [ref=e2873]:
- generic [ref=e2874]:
- generic [ref=e2875]: 卜锦元
- generic [ref=e2876]: "ID: 7"
- cell "文本" [ref=e2877]:
- generic [ref=e2880]: 文本
- cell "ewqeqwe" [ref=e2881]:
- generic [ref=e2883]: ewqeqwe
- cell "正常" [ref=e2884]:
- generic [ref=e2887]: 正常
- cell "10" [ref=e2888]:
- generic [ref=e2889]: "10"
- cell "2026-03-12 15:03:56" [ref=e2890]:
- generic [ref=e2891]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e2892]:
- generic [ref=e2893]:
- button "详情" [ref=e2894] [cursor=pointer]:
- generic [ref=e2895]: 详情
- button "撤回" [ref=e2896] [cursor=pointer]:
- generic [ref=e2897]: 撤回
- button "删除" [ref=e2898] [cursor=pointer]:
- generic [ref=e2899]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e2900]':
- cell "136" [ref=e2901]:
- generic [ref=e2902]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e2903]':
- generic [ref=e2905]:
- generic [ref=e2907]:
- generic [ref=e2908]:
- generic [ref=e2909]: 卜锦元
- generic [ref=e2910]: "ID: 7"
- cell "文本" [ref=e2911]:
- generic [ref=e2914]: 文本
- cell "23213123" [ref=e2915]:
- generic [ref=e2917]: "23213123"
- cell "正常" [ref=e2918]:
- generic [ref=e2921]: 正常
- cell "10" [ref=e2922]:
- generic [ref=e2923]: "10"
- cell "2026-03-12 15:03:53" [ref=e2924]:
- generic [ref=e2925]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e2926]:
- generic [ref=e2927]:
- button "详情" [ref=e2928] [cursor=pointer]:
- generic [ref=e2929]: 详情
- button "撤回" [ref=e2930] [cursor=pointer]:
- generic [ref=e2931]: 撤回
- button "删除" [ref=e2932] [cursor=pointer]:
- generic [ref=e2933]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e2934]':
- cell "135" [ref=e2935]:
- generic [ref=e2936]: "135"
- 'cell "周 周和智 ID: 15" [ref=e2937]':
- generic [ref=e2939]:
- generic [ref=e2941]:
- generic [ref=e2942]:
- generic [ref=e2943]: 周和智
- generic [ref=e2944]: "ID: 15"
- cell "文本" [ref=e2945]:
- generic [ref=e2948]: 文本
- cell "打打看迦拉克隆离开" [ref=e2949]:
- generic [ref=e2951]: 打打看迦拉克隆离开
- cell "正常" [ref=e2952]:
- generic [ref=e2955]: 正常
- cell "10" [ref=e2956]:
- generic [ref=e2957]: "10"
- cell "2026-03-12 15:03:39" [ref=e2958]:
- generic [ref=e2959]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e2960]:
- generic [ref=e2961]:
- button "详情" [ref=e2962] [cursor=pointer]:
- generic [ref=e2963]: 详情
- button "撤回" [ref=e2964] [cursor=pointer]:
- generic [ref=e2965]: 撤回
- button "删除" [ref=e2966] [cursor=pointer]:
- generic [ref=e2967]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e2968]':
- cell "134" [ref=e2969]:
- generic [ref=e2970]: "134"
- 'cell "周 周和智 ID: 15" [ref=e2971]':
- generic [ref=e2973]:
- generic [ref=e2975]:
- generic [ref=e2976]:
- generic [ref=e2977]: 周和智
- generic [ref=e2978]: "ID: 15"
- cell "文本" [ref=e2979]:
- generic [ref=e2982]: 文本
- cell "啦啦啦啦" [ref=e2983]:
- generic [ref=e2985]: 啦啦啦啦
- cell "正常" [ref=e2986]:
- generic [ref=e2989]: 正常
- cell "10" [ref=e2990]:
- generic [ref=e2991]: "10"
- cell "2026-03-12 15:03:30" [ref=e2992]:
- generic [ref=e2993]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e2994]:
- generic [ref=e2995]:
- button "详情" [ref=e2996] [cursor=pointer]:
- generic [ref=e2997]: 详情
- button "撤回" [ref=e2998] [cursor=pointer]:
- generic [ref=e2999]: 撤回
- button "删除" [ref=e3000] [cursor=pointer]:
- generic [ref=e3001]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e3002]':
- cell "133" [ref=e3003]:
- generic [ref=e3004]: "133"
- 'cell "周 周和智 ID: 15" [ref=e3005]':
- generic [ref=e3007]:
- generic [ref=e3009]:
- generic [ref=e3010]:
- generic [ref=e3011]: 周和智
- generic [ref=e3012]: "ID: 15"
- cell "文本" [ref=e3013]:
- generic [ref=e3016]: 文本
- cell "哈喽" [ref=e3017]:
- generic [ref=e3019]: 哈喽
- cell "正常" [ref=e3020]:
- generic [ref=e3023]: 正常
- cell "10" [ref=e3024]:
- generic [ref=e3025]: "10"
- cell "2026-03-12 15:03:17" [ref=e3026]:
- generic [ref=e3027]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e3028]:
- generic [ref=e3029]:
- button "详情" [ref=e3030] [cursor=pointer]:
- generic [ref=e3031]: 详情
- button "撤回" [ref=e3032] [cursor=pointer]:
- generic [ref=e3033]: 撤回
- button "删除" [ref=e3034] [cursor=pointer]:
- generic [ref=e3035]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e3036]':
- cell "132" [ref=e3037]:
- generic [ref=e3038]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e3039]':
- generic [ref=e3041]:
- generic [ref=e3043]:
- generic [ref=e3044]:
- generic [ref=e3045]: 卜锦元
- generic [ref=e3046]: "ID: 7"
- cell "文本" [ref=e3047]:
- generic [ref=e3050]: 文本
- cell "niahha a" [ref=e3051]:
- generic [ref=e3053]: niahha a
- cell "正常" [ref=e3054]:
- generic [ref=e3057]: 正常
- cell "10" [ref=e3058]:
- generic [ref=e3059]: "10"
- cell "2026-03-12 15:03:08" [ref=e3060]:
- generic [ref=e3061]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e3062]:
- generic [ref=e3063]:
- button "详情" [ref=e3064] [cursor=pointer]:
- generic [ref=e3065]: 详情
- button "撤回" [ref=e3066] [cursor=pointer]:
- generic [ref=e3067]: 撤回
- button "删除" [ref=e3068] [cursor=pointer]:
- generic [ref=e3069]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e3070]':
- cell "131" [ref=e3071]:
- generic [ref=e3072]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e3073]':
- generic [ref=e3075]:
- generic [ref=e3077]:
- generic [ref=e3078]:
- generic [ref=e3079]: 新昵称
- generic [ref=e3080]: "ID: 4"
- cell "文本" [ref=e3081]:
- generic [ref=e3084]: 文本
- cell "哈哈哈,测试" [ref=e3085]:
- generic [ref=e3087]: 哈哈哈,测试
- cell "正常" [ref=e3088]:
- generic [ref=e3091]: 正常
- cell "8" [ref=e3092]:
- generic [ref=e3093]: "8"
- cell "2026-03-04 18:37:53" [ref=e3094]:
- generic [ref=e3095]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e3096]:
- generic [ref=e3097]:
- button "详情" [ref=e3098] [cursor=pointer]:
- generic [ref=e3099]: 详情
- button "撤回" [ref=e3100] [cursor=pointer]:
- generic [ref=e3101]: 撤回
- button "删除" [ref=e3102] [cursor=pointer]:
- generic [ref=e3103]: 删除
- 'row "130 ? - ID: 0 系统消息 卜锦元 更新了群公告 正常 8 2026-03-04 18:35:52 详情 撤回 删除" [ref=e3104]':
- cell "130" [ref=e3105]:
- generic [ref=e3106]: "130"
- 'cell "? - ID: 0" [ref=e3107]':
- generic [ref=e3109]:
- generic [ref=e3111]: "?"
- generic [ref=e3112]:
- generic [ref=e3113]: "-"
- generic [ref=e3114]: "ID: 0"
- cell "系统消息" [ref=e3115]:
- generic [ref=e3118]: 系统消息
- cell "卜锦元 更新了群公告" [ref=e3119]:
- generic [ref=e3121]: 卜锦元 更新了群公告
- cell "正常" [ref=e3122]:
- generic [ref=e3125]: 正常
- cell "8" [ref=e3126]:
- generic [ref=e3127]: "8"
- cell "2026-03-04 18:35:52" [ref=e3128]:
- generic [ref=e3129]: 2026-03-04 18:35:52
- cell "详情 撤回 删除" [ref=e3130]:
- generic [ref=e3131]:
- button "详情" [ref=e3132] [cursor=pointer]:
- generic [ref=e3133]: 详情
- button "撤回" [ref=e3134] [cursor=pointer]:
- generic [ref=e3135]: 撤回
- button "删除" [ref=e3136] [cursor=pointer]:
- generic [ref=e3137]: 删除
- 'row "129 新 新昵称 ID: 4 文本 我知道你是谁 正常 8 2026-03-04 18:31:51 详情 撤回 删除" [ref=e3138]':
- cell "129" [ref=e3139]:
- generic [ref=e3140]: "129"
- 'cell "新 新昵称 ID: 4" [ref=e3141]':
- generic [ref=e3143]:
- generic [ref=e3145]:
- generic [ref=e3146]:
- generic [ref=e3147]: 新昵称
- generic [ref=e3148]: "ID: 4"
- cell "文本" [ref=e3149]:
- generic [ref=e3152]: 文本
- cell "我知道你是谁" [ref=e3153]:
- generic [ref=e3155]: 我知道你是谁
- cell "正常" [ref=e3156]:
- generic [ref=e3159]: 正常
- cell "8" [ref=e3160]:
- generic [ref=e3161]: "8"
- cell "2026-03-04 18:31:51" [ref=e3162]:
- generic [ref=e3163]: 2026-03-04 18:31:51
- cell "详情 撤回 删除" [ref=e3164]:
- generic [ref=e3165]:
- button "详情" [ref=e3166] [cursor=pointer]:
- generic [ref=e3167]: 详情
- button "撤回" [ref=e3168] [cursor=pointer]:
- generic [ref=e3169]: 撤回
- button "删除" [ref=e3170] [cursor=pointer]:
- generic [ref=e3171]: 删除
- 'row "128 卜 卜锦元 ID: 7 文本 111112 正常 8 2026-03-04 18:31:37 详情 撤回 删除" [ref=e3172]':
- cell "128" [ref=e3173]:
- generic [ref=e3174]: "128"
- 'cell "卜 卜锦元 ID: 7" [ref=e3175]':
- generic [ref=e3177]:
- generic [ref=e3179]:
- generic [ref=e3180]:
- generic [ref=e3181]: 卜锦元
- generic [ref=e3182]: "ID: 7"
- cell "文本" [ref=e3183]:
- generic [ref=e3186]: 文本
- cell "111112" [ref=e3187]:
- generic [ref=e3189]: "111112"
- cell "正常" [ref=e3190]:
- generic [ref=e3193]: 正常
- cell "8" [ref=e3194]:
- generic [ref=e3195]: "8"
- cell "2026-03-04 18:31:37" [ref=e3196]:
- generic [ref=e3197]: 2026-03-04 18:31:37
- cell "详情 撤回 删除" [ref=e3198]:
- generic [ref=e3199]:
- button "详情" [ref=e3200] [cursor=pointer]:
- generic [ref=e3201]: 详情
- button "撤回" [ref=e3202] [cursor=pointer]:
- generic [ref=e3203]: 撤回
- button "删除" [ref=e3204] [cursor=pointer]:
- generic [ref=e3205]: 删除
- 'row "127 卜 卜锦元 ID: 7 文本 再次测试 正常 8 2026-03-04 18:25:29 详情 撤回 删除" [ref=e3206]':
- cell "127" [ref=e3207]:
- generic [ref=e3208]: "127"
- 'cell "卜 卜锦元 ID: 7" [ref=e3209]':
- generic [ref=e3211]:
- generic [ref=e3213]:
- generic [ref=e3214]:
- generic [ref=e3215]: 卜锦元
- generic [ref=e3216]: "ID: 7"
- cell "文本" [ref=e3217]:
- generic [ref=e3220]: 文本
- cell "再次测试" [ref=e3221]:
- generic [ref=e3223]: 再次测试
- cell "正常" [ref=e3224]:
- generic [ref=e3227]: 正常
- cell "8" [ref=e3228]:
- generic [ref=e3229]: "8"
- cell "2026-03-04 18:25:29" [ref=e3230]:
- generic [ref=e3231]: 2026-03-04 18:25:29
- cell "详情 撤回 删除" [ref=e3232]:
- generic [ref=e3233]:
- button "详情" [ref=e3234] [cursor=pointer]:
- generic [ref=e3235]: 详情
- button "撤回" [ref=e3236] [cursor=pointer]:
- generic [ref=e3237]: 撤回
- button "删除" [ref=e3238] [cursor=pointer]:
- generic [ref=e3239]: 删除
- 'row "126 卜 卜锦元 ID: 7 文本 哈哈哈,知道我是谁吗 正常 8 2026-03-04 18:08:32 详情 撤回 删除" [ref=e3240]':
- cell "126" [ref=e3241]:
- generic [ref=e3242]: "126"
- 'cell "卜 卜锦元 ID: 7" [ref=e3243]':
- generic [ref=e3245]:
- generic [ref=e3247]:
- generic [ref=e3248]:
- generic [ref=e3249]: 卜锦元
- generic [ref=e3250]: "ID: 7"
- cell "文本" [ref=e3251]:
- generic [ref=e3254]: 文本
- cell "哈哈哈,知道我是谁吗" [ref=e3255]:
- generic [ref=e3257]: 哈哈哈,知道我是谁吗
- cell "正常" [ref=e3258]:
- generic [ref=e3261]: 正常
- cell "8" [ref=e3262]:
- generic [ref=e3263]: "8"
- cell "2026-03-04 18:08:32" [ref=e3264]:
- generic [ref=e3265]: 2026-03-04 18:08:32
- cell "详情 撤回 删除" [ref=e3266]:
- generic [ref=e3267]:
- button "详情" [ref=e3268] [cursor=pointer]:
- generic [ref=e3269]: 详情
- button "撤回" [ref=e3270] [cursor=pointer]:
- generic [ref=e3271]: 撤回
- button "删除" [ref=e3272] [cursor=pointer]:
- generic [ref=e3273]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [disabled] [ref=e1323]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325]: "1"
- listitem "第 2 页" [ref=e3274] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e3275] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e3276] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e3277] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e3278] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e3279] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e3280] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "1"
- generic [ref=e1332]:

View File

@@ -0,0 +1,671 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "125 新 新昵称 ID: 4 文本 112212 正常 8 2026-03-04 18:06:48 详情 撤回 删除" [ref=e3281]':
- cell "125" [ref=e3282]:
- generic [ref=e1346]: "125"
- 'cell "新 新昵称 ID: 4" [ref=e3283]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 新昵称
- generic [ref=e1354]: "ID: 4"
- cell "文本" [ref=e2401]:
- generic [ref=e1358]: 文本
- cell "112212" [ref=e3284]:
- generic [ref=e1361]: "112212"
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "8" [ref=e3285]:
- generic [ref=e1367]: "8"
- cell "2026-03-04 18:06:48" [ref=e3286]:
- generic [ref=e1369]: 2026-03-04 18:06:48
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "124 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:26:07 详情 撤回 删除" [ref=e3287]':
- cell "124" [ref=e3288]:
- generic [ref=e1380]: "124"
- 'cell "? - ID: 0" [ref=e3289]':
- generic [ref=e1383]:
- generic [ref=e1385]: "?"
- generic [ref=e1386]:
- generic [ref=e1387]: "-"
- generic [ref=e1388]: "ID: 0"
- cell "系统消息" [ref=e3290]:
- generic [ref=e1392]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3291]:
- generic [ref=e1395]: 测试用户2 被取消管理员
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "7" [ref=e3292]:
- generic [ref=e1401]: "7"
- cell "2026-03-04 17:26:07" [ref=e3293]:
- generic [ref=e1403]: 2026-03-04 17:26:07
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "123 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:26:03 详情 撤回 删除" [ref=e3294]':
- cell "123" [ref=e3295]:
- generic [ref=e1414]: "123"
- 'cell "? - ID: 0" [ref=e3296]':
- generic [ref=e1417]:
- generic [ref=e1419]: "?"
- generic [ref=e1420]:
- generic [ref=e1421]: "-"
- generic [ref=e1422]: "ID: 0"
- cell "系统消息" [ref=e3297]:
- generic [ref=e1426]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3298]:
- generic [ref=e1429]: 测试用户2 被设为管理员
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "7" [ref=e3299]:
- generic [ref=e1435]: "7"
- cell "2026-03-04 17:26:03" [ref=e3300]:
- generic [ref=e1437]: 2026-03-04 17:26:03
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "122 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:25:54 详情 撤回 删除" [ref=e3301]':
- cell "122" [ref=e3302]:
- generic [ref=e1448]: "122"
- 'cell "? - ID: 0" [ref=e3303]':
- generic [ref=e1451]:
- generic [ref=e1453]: "?"
- generic [ref=e1454]:
- generic [ref=e1455]: "-"
- generic [ref=e1456]: "ID: 0"
- cell "系统消息" [ref=e3304]:
- generic [ref=e1460]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3305]:
- generic [ref=e1463]: 测试用户2 被取消管理员
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "7" [ref=e3306]:
- generic [ref=e1469]: "7"
- cell "2026-03-04 17:25:54" [ref=e3307]:
- generic [ref=e1471]: 2026-03-04 17:25:54
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "121 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:25:50 详情 撤回 删除" [ref=e3308]':
- cell "121" [ref=e3309]:
- generic [ref=e2732]: "121"
- 'cell "? - ID: 0" [ref=e3310]':
- generic [ref=e2735]:
- generic [ref=e2737]: "?"
- generic [ref=e2738]:
- generic [ref=e2739]: "-"
- generic [ref=e2740]: "ID: 0"
- cell "系统消息" [ref=e3311]:
- generic [ref=e2744]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3312]:
- generic [ref=e2747]: 测试用户2 被设为管理员
- cell "正常" [ref=e2748]:
- generic [ref=e2751]: 正常
- cell "7" [ref=e3313]:
- generic [ref=e2753]: "7"
- cell "2026-03-04 17:25:50" [ref=e3314]:
- generic [ref=e2755]: 2026-03-04 17:25:50
- cell "详情 撤回 删除" [ref=e2756]:
- generic [ref=e2757]:
- button "详情" [ref=e2758] [cursor=pointer]:
- generic [ref=e2759]: 详情
- button "撤回" [ref=e2760] [cursor=pointer]:
- generic [ref=e2761]: 撤回
- button "删除" [ref=e2762] [cursor=pointer]:
- generic [ref=e2763]: 删除
- 'row "120 ? - ID: 0 系统消息 卜锦元 被设为管理员 正常 8 2026-03-04 17:21:43 详情 撤回 删除" [ref=e3315]':
- cell "120" [ref=e3316]:
- generic [ref=e2766]: "120"
- 'cell "? - ID: 0" [ref=e3317]':
- generic [ref=e2769]:
- generic [ref=e2771]: "?"
- generic [ref=e2772]:
- generic [ref=e2773]: "-"
- generic [ref=e2774]: "ID: 0"
- cell "系统消息" [ref=e3318]:
- generic [ref=e2778]: 系统消息
- cell "卜锦元 被设为管理员" [ref=e3319]:
- generic [ref=e2781]: 卜锦元 被设为管理员
- cell "正常" [ref=e2782]:
- generic [ref=e2785]: 正常
- cell "8" [ref=e2786]:
- generic [ref=e2787]: "8"
- cell "2026-03-04 17:21:43" [ref=e3320]:
- generic [ref=e2789]: 2026-03-04 17:21:43
- cell "详情 撤回 删除" [ref=e2790]:
- generic [ref=e2791]:
- button "详情" [ref=e2792] [cursor=pointer]:
- generic [ref=e2793]: 详情
- button "撤回" [ref=e2794] [cursor=pointer]:
- generic [ref=e2795]: 撤回
- button "删除" [ref=e2796] [cursor=pointer]:
- generic [ref=e2797]: 删除
- 'row "119 ? - ID: 0 系统消息 测试用户3 被设为管理员 正常 7 2026-03-04 17:21:13 详情 撤回 删除" [ref=e3321]':
- cell "119" [ref=e3322]:
- generic [ref=e2800]: "119"
- 'cell "? - ID: 0" [ref=e3323]':
- generic [ref=e2803]:
- generic [ref=e2805]: "?"
- generic [ref=e2806]:
- generic [ref=e2807]: "-"
- generic [ref=e2808]: "ID: 0"
- cell "系统消息" [ref=e3324]:
- generic [ref=e2812]: 系统消息
- cell "测试用户3 被设为管理员" [ref=e3325]:
- generic [ref=e2815]: 测试用户3 被设为管理员
- cell "正常" [ref=e2816]:
- generic [ref=e2819]: 正常
- cell "7" [ref=e3326]:
- generic [ref=e2821]: "7"
- cell "2026-03-04 17:21:13" [ref=e3327]:
- generic [ref=e2823]: 2026-03-04 17:21:13
- cell "详情 撤回 删除" [ref=e2824]:
- generic [ref=e2825]:
- button "详情" [ref=e2826] [cursor=pointer]:
- generic [ref=e2827]: 详情
- button "撤回" [ref=e2828] [cursor=pointer]:
- generic [ref=e2829]: 撤回
- button "删除" [ref=e2830] [cursor=pointer]:
- generic [ref=e2831]: 删除
- 'row "118 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:21:07 详情 撤回 删除" [ref=e3328]':
- cell "118" [ref=e3329]:
- generic [ref=e2834]: "118"
- 'cell "? - ID: 0" [ref=e2835]':
- generic [ref=e2837]:
- generic [ref=e2839]: "?"
- generic [ref=e2840]:
- generic [ref=e2841]: "-"
- generic [ref=e2842]: "ID: 0"
- cell "系统消息" [ref=e2843]:
- generic [ref=e2846]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3330]:
- generic [ref=e2849]: 测试用户2 被取消管理员
- cell "正常" [ref=e2850]:
- generic [ref=e2853]: 正常
- cell "7" [ref=e3331]:
- generic [ref=e2855]: "7"
- cell "2026-03-04 17:21:07" [ref=e3332]:
- generic [ref=e2857]: 2026-03-04 17:21:07
- cell "详情 撤回 删除" [ref=e2858]:
- generic [ref=e2859]:
- button "详情" [ref=e2860] [cursor=pointer]:
- generic [ref=e2861]: 详情
- button "撤回" [ref=e2862] [cursor=pointer]:
- generic [ref=e2863]: 撤回
- button "删除" [ref=e2864] [cursor=pointer]:
- generic [ref=e2865]: 删除
- 'row "117 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:20:31 详情 撤回 删除" [ref=e3333]':
- cell "117" [ref=e3334]:
- generic [ref=e2868]: "117"
- 'cell "? - ID: 0" [ref=e3335]':
- generic [ref=e2871]:
- generic [ref=e2873]: "?"
- generic [ref=e2874]:
- generic [ref=e2875]: "-"
- generic [ref=e2876]: "ID: 0"
- cell "系统消息" [ref=e3336]:
- generic [ref=e2880]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3337]:
- generic [ref=e2883]: 测试用户2 被设为管理员
- cell "正常" [ref=e2884]:
- generic [ref=e2887]: 正常
- cell "7" [ref=e3338]:
- generic [ref=e2889]: "7"
- cell "2026-03-04 17:20:31" [ref=e3339]:
- generic [ref=e2891]: 2026-03-04 17:20:31
- cell "详情 撤回 删除" [ref=e2892]:
- generic [ref=e2893]:
- button "详情" [ref=e2894] [cursor=pointer]:
- generic [ref=e2895]: 详情
- button "撤回" [ref=e2896] [cursor=pointer]:
- generic [ref=e2897]: 撤回
- button "删除" [ref=e2898] [cursor=pointer]:
- generic [ref=e2899]: 删除
- 'row "116 新 新昵称 ID: 4 文本 112121212 正常 9 2026-03-04 17:09:04 详情 撤回 删除" [ref=e3340]':
- cell "116" [ref=e3341]:
- generic [ref=e2902]: "116"
- 'cell "新 新昵称 ID: 4" [ref=e3342]':
- generic [ref=e2905]:
- generic [ref=e2907]:
- generic [ref=e2908]:
- generic [ref=e2909]: 新昵称
- generic [ref=e2910]: "ID: 4"
- cell "文本" [ref=e2911]:
- generic [ref=e2914]: 文本
- cell "112121212" [ref=e3343]:
- generic [ref=e2917]: "112121212"
- cell "正常" [ref=e2918]:
- generic [ref=e2921]: 正常
- cell "9" [ref=e3344]:
- generic [ref=e2923]: "9"
- cell "2026-03-04 17:09:04" [ref=e3345]:
- generic [ref=e2925]: 2026-03-04 17:09:04
- cell "详情 撤回 删除" [ref=e2926]:
- generic [ref=e2927]:
- button "详情" [ref=e2928] [cursor=pointer]:
- generic [ref=e2929]: 详情
- button "撤回" [ref=e2930] [cursor=pointer]:
- generic [ref=e2931]: 撤回
- button "删除" [ref=e2932] [cursor=pointer]:
- generic [ref=e2933]: 删除
- 'row "115 卜 卜锦元 ID: 7 文本 111 正常 9 2026-03-04 17:08:51 详情 撤回 删除" [ref=e3346]':
- cell "115" [ref=e3347]:
- generic [ref=e2936]: "115"
- 'cell "卜 卜锦元 ID: 7" [ref=e3348]':
- generic [ref=e2939]:
- generic [ref=e2941]:
- generic [ref=e2942]:
- generic [ref=e2943]: 卜锦元
- generic [ref=e2944]: "ID: 7"
- cell "文本" [ref=e2945]:
- generic [ref=e2948]: 文本
- cell "111" [ref=e3349]:
- generic [ref=e2951]: "111"
- cell "正常" [ref=e2952]:
- generic [ref=e2955]: 正常
- cell "9" [ref=e3350]:
- generic [ref=e2957]: "9"
- cell "2026-03-04 17:08:51" [ref=e3351]:
- generic [ref=e2959]: 2026-03-04 17:08:51
- cell "详情 撤回 删除" [ref=e2960]:
- generic [ref=e2961]:
- button "详情" [ref=e2962] [cursor=pointer]:
- generic [ref=e2963]: 详情
- button "撤回" [ref=e2964] [cursor=pointer]:
- generic [ref=e2965]: 撤回
- button "删除" [ref=e2966] [cursor=pointer]:
- generic [ref=e2967]: 删除
- 'row "114 卜 卜锦元 ID: 7 文本 111122fas 正常 9 2026-03-04 17:07:49 详情 撤回 删除" [ref=e3352]':
- cell "114" [ref=e3353]:
- generic [ref=e2970]: "114"
- 'cell "卜 卜锦元 ID: 7" [ref=e3354]':
- generic [ref=e2973]:
- generic [ref=e2975]:
- generic [ref=e2976]:
- generic [ref=e2977]: 卜锦元
- generic [ref=e2978]: "ID: 7"
- cell "文本" [ref=e2979]:
- generic [ref=e2982]: 文本
- cell "111122fas" [ref=e3355]:
- generic [ref=e2985]: 111122fas
- cell "正常" [ref=e2986]:
- generic [ref=e2989]: 正常
- cell "9" [ref=e3356]:
- generic [ref=e2991]: "9"
- cell "2026-03-04 17:07:49" [ref=e3357]:
- generic [ref=e2993]: 2026-03-04 17:07:49
- cell "详情 撤回 删除" [ref=e2994]:
- generic [ref=e2995]:
- button "详情" [ref=e2996] [cursor=pointer]:
- generic [ref=e2997]: 详情
- button "撤回" [ref=e2998] [cursor=pointer]:
- generic [ref=e2999]: 撤回
- button "删除" [ref=e3000] [cursor=pointer]:
- generic [ref=e3001]: 删除
- 'row "113 新 新昵称 ID: 4 文本 测试你是死是1 正常 8 2026-03-04 17:00:57 详情 撤回 删除" [ref=e3358]':
- cell "113" [ref=e3359]:
- generic [ref=e3004]: "113"
- 'cell "新 新昵称 ID: 4" [ref=e3360]':
- generic [ref=e3007]:
- generic [ref=e3009]:
- generic [ref=e3010]:
- generic [ref=e3011]: 新昵称
- generic [ref=e3012]: "ID: 4"
- cell "文本" [ref=e3013]:
- generic [ref=e3016]: 文本
- cell "测试你是死是1" [ref=e3361]:
- generic [ref=e3019]: 测试你是死是1
- cell "正常" [ref=e3020]:
- generic [ref=e3023]: 正常
- cell "8" [ref=e3362]:
- generic [ref=e3025]: "8"
- cell "2026-03-04 17:00:57" [ref=e3363]:
- generic [ref=e3027]: 2026-03-04 17:00:57
- cell "详情 撤回 删除" [ref=e3028]:
- generic [ref=e3029]:
- button "详情" [ref=e3030] [cursor=pointer]:
- generic [ref=e3031]: 详情
- button "撤回" [ref=e3032] [cursor=pointer]:
- generic [ref=e3033]: 撤回
- button "删除" [ref=e3034] [cursor=pointer]:
- generic [ref=e3035]: 删除
- 'row "112 新 新昵称 ID: 4 文本 测试消息发送 正常 9 2026-03-04 16:57:15 详情 撤回 删除" [ref=e3364]':
- cell "112" [ref=e3365]:
- generic [ref=e3038]: "112"
- 'cell "新 新昵称 ID: 4" [ref=e3366]':
- generic [ref=e3041]:
- generic [ref=e3043]:
- generic [ref=e3044]:
- generic [ref=e3045]: 新昵称
- generic [ref=e3046]: "ID: 4"
- cell "文本" [ref=e3047]:
- generic [ref=e3050]: 文本
- cell "测试消息发送" [ref=e3367]:
- generic [ref=e3053]: 测试消息发送
- cell "正常" [ref=e3054]:
- generic [ref=e3057]: 正常
- cell "9" [ref=e3368]:
- generic [ref=e3059]: "9"
- cell "2026-03-04 16:57:15" [ref=e3369]:
- generic [ref=e3061]: 2026-03-04 16:57:15
- cell "详情 撤回 删除" [ref=e3062]:
- generic [ref=e3063]:
- button "详情" [ref=e3064] [cursor=pointer]:
- generic [ref=e3065]: 详情
- button "撤回" [ref=e3066] [cursor=pointer]:
- generic [ref=e3067]: 撤回
- button "删除" [ref=e3068] [cursor=pointer]:
- generic [ref=e3069]: 删除
- 'row "111 新 新昵称 ID: 4 文本 21433 正常 9 2026-03-04 16:54:46 详情 撤回 删除" [ref=e3370]':
- cell "111" [ref=e3371]:
- generic [ref=e3072]: "111"
- 'cell "新 新昵称 ID: 4" [ref=e3073]':
- generic [ref=e3075]:
- generic [ref=e3077]:
- generic [ref=e3078]:
- generic [ref=e3079]: 新昵称
- generic [ref=e3080]: "ID: 4"
- cell "文本" [ref=e3081]:
- generic [ref=e3084]: 文本
- cell "21433" [ref=e3372]:
- generic [ref=e3087]: "21433"
- cell "正常" [ref=e3088]:
- generic [ref=e3091]: 正常
- cell "9" [ref=e3373]:
- generic [ref=e3093]: "9"
- cell "2026-03-04 16:54:46" [ref=e3374]:
- generic [ref=e3095]: 2026-03-04 16:54:46
- cell "详情 撤回 删除" [ref=e3096]:
- generic [ref=e3097]:
- button "详情" [ref=e3098] [cursor=pointer]:
- generic [ref=e3099]: 详情
- button "撤回" [ref=e3100] [cursor=pointer]:
- generic [ref=e3101]: 撤回
- button "删除" [ref=e3102] [cursor=pointer]:
- generic [ref=e3103]: 删除
- 'row "110 新 新昵称 ID: 4 文本 1111 正常 8 2026-03-04 16:54:36 详情 撤回 删除" [ref=e3375]':
- cell "110" [ref=e3376]:
- generic [ref=e3106]: "110"
- 'cell "新 新昵称 ID: 4" [ref=e3377]':
- generic [ref=e3109]:
- generic [ref=e3111]:
- generic [ref=e3112]:
- generic [ref=e3113]: 新昵称
- generic [ref=e3114]: "ID: 4"
- cell "文本" [ref=e3378]:
- generic [ref=e3118]: 文本
- cell "1111" [ref=e3379]:
- generic [ref=e3121]: "1111"
- cell "正常" [ref=e3122]:
- generic [ref=e3125]: 正常
- cell "8" [ref=e3126]:
- generic [ref=e3127]: "8"
- cell "2026-03-04 16:54:36" [ref=e3380]:
- generic [ref=e3129]: 2026-03-04 16:54:36
- cell "详情 撤回 删除" [ref=e3130]:
- generic [ref=e3131]:
- button "详情" [ref=e3132] [cursor=pointer]:
- generic [ref=e3133]: 详情
- button "撤回" [ref=e3134] [cursor=pointer]:
- generic [ref=e3135]: 撤回
- button "删除" [ref=e3136] [cursor=pointer]:
- generic [ref=e3137]: 删除
- 'row "109 新 新昵称 ID: 4 文本 测试哈哈 正常 8 2026-03-04 16:54:25 详情 撤回 删除" [ref=e3381]':
- cell "109" [ref=e3382]:
- generic [ref=e3140]: "109"
- 'cell "新 新昵称 ID: 4" [ref=e3141]':
- generic [ref=e3143]:
- generic [ref=e3145]:
- generic [ref=e3146]:
- generic [ref=e3147]: 新昵称
- generic [ref=e3148]: "ID: 4"
- cell "文本" [ref=e3149]:
- generic [ref=e3152]: 文本
- cell "测试哈哈" [ref=e3383]:
- generic [ref=e3155]: 测试哈哈
- cell "正常" [ref=e3156]:
- generic [ref=e3159]: 正常
- cell "8" [ref=e3160]:
- generic [ref=e3161]: "8"
- cell "2026-03-04 16:54:25" [ref=e3384]:
- generic [ref=e3163]: 2026-03-04 16:54:25
- cell "详情 撤回 删除" [ref=e3164]:
- generic [ref=e3165]:
- button "详情" [ref=e3166] [cursor=pointer]:
- generic [ref=e3167]: 详情
- button "撤回" [ref=e3168] [cursor=pointer]:
- generic [ref=e3169]: 撤回
- button "删除" [ref=e3170] [cursor=pointer]:
- generic [ref=e3171]: 删除
- 'row "108 卜 卜锦元 ID: 7 文本 咋子爱爱在 正常 9 2026-03-04 16:54:12 详情 撤回 删除" [ref=e3385]':
- cell "108" [ref=e3386]:
- generic [ref=e3174]: "108"
- 'cell "卜 卜锦元 ID: 7" [ref=e3175]':
- generic [ref=e3177]:
- generic [ref=e3179]:
- generic [ref=e3180]:
- generic [ref=e3181]: 卜锦元
- generic [ref=e3182]: "ID: 7"
- cell "文本" [ref=e3183]:
- generic [ref=e3186]: 文本
- cell "咋子爱爱在" [ref=e3387]:
- generic [ref=e3189]: 咋子爱爱在
- cell "正常" [ref=e3190]:
- generic [ref=e3193]: 正常
- cell "9" [ref=e3388]:
- generic [ref=e3195]: "9"
- cell "2026-03-04 16:54:12" [ref=e3389]:
- generic [ref=e3197]: 2026-03-04 16:54:12
- cell "详情 撤回 删除" [ref=e3198]:
- generic [ref=e3199]:
- button "详情" [ref=e3200] [cursor=pointer]:
- generic [ref=e3201]: 详情
- button "撤回" [ref=e3202] [cursor=pointer]:
- generic [ref=e3203]: 撤回
- button "删除" [ref=e3204] [cursor=pointer]:
- generic [ref=e3205]: 删除
- 'row "107 卜 卜锦元 ID: 7 文本 在测试 正常 9 2026-03-04 16:54:02 详情 撤回 删除" [ref=e3390]':
- cell "107" [ref=e3391]:
- generic [ref=e3208]: "107"
- 'cell "卜 卜锦元 ID: 7" [ref=e3209]':
- generic [ref=e3211]:
- generic [ref=e3213]:
- generic [ref=e3214]:
- generic [ref=e3215]: 卜锦元
- generic [ref=e3216]: "ID: 7"
- cell "文本" [ref=e3217]:
- generic [ref=e3220]: 文本
- cell "在测试" [ref=e3392]:
- generic [ref=e3223]: 在测试
- cell "正常" [ref=e3224]:
- generic [ref=e3227]: 正常
- cell "9" [ref=e3393]:
- generic [ref=e3229]: "9"
- cell "2026-03-04 16:54:02" [ref=e3394]:
- generic [ref=e3231]: 2026-03-04 16:54:02
- cell "详情 撤回 删除" [ref=e3232]:
- generic [ref=e3233]:
- button "详情" [ref=e3234] [cursor=pointer]:
- generic [ref=e3235]: 详情
- button "撤回" [ref=e3236] [cursor=pointer]:
- generic [ref=e3237]: 撤回
- button "删除" [ref=e3238] [cursor=pointer]:
- generic [ref=e3239]: 删除
- 'row "106 卜 卜锦元 ID: 7 文本 哈哈,再次测试 正常 9 2026-03-04 16:53:53 详情 撤回 删除" [ref=e3395]':
- cell "106" [ref=e3396]:
- generic [ref=e3242]: "106"
- 'cell "卜 卜锦元 ID: 7" [ref=e3243]':
- generic [ref=e3245]:
- generic [ref=e3247]:
- generic [ref=e3248]:
- generic [ref=e3249]: 卜锦元
- generic [ref=e3250]: "ID: 7"
- cell "文本" [ref=e3251]:
- generic [ref=e3254]: 文本
- cell "哈哈,再次测试" [ref=e3397]:
- generic [ref=e3257]: 哈哈,再次测试
- cell "正常" [ref=e3258]:
- generic [ref=e3261]: 正常
- cell "9" [ref=e3398]:
- generic [ref=e3263]: "9"
- cell "2026-03-04 16:53:53" [ref=e3399]:
- generic [ref=e3265]: 2026-03-04 16:53:53
- cell "详情 撤回 删除" [ref=e3266]:
- generic [ref=e3267]:
- button "详情" [ref=e3268] [cursor=pointer]:
- generic [ref=e3269]: 详情
- button "撤回" [ref=e3270] [cursor=pointer]:
- generic [ref=e3271]: 撤回
- button "删除" [ref=e3272] [cursor=pointer]:
- generic [ref=e3273]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [ref=e1323] [cursor=pointer]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325] [cursor=pointer]: "1"
- listitem "第 2 页" [active] [ref=e3274]: "2"
- listitem "第 3 页" [ref=e3275] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e3276] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e3277] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e3278] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e3279] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e3280] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "2"
- generic [ref=e1332]:

View File

@@ -0,0 +1,686 @@
- generic [ref=e1]:
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "125 新 新昵称 ID: 4 文本 112212 正常 8 2026-03-04 18:06:48 详情 撤回 删除" [ref=e3281]':
- cell "125" [ref=e3282]:
- generic [ref=e1346]: "125"
- 'cell "新 新昵称 ID: 4" [ref=e3283]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 新昵称
- generic [ref=e1354]: "ID: 4"
- cell "文本" [ref=e2401]:
- generic [ref=e1358]: 文本
- cell "112212" [ref=e3284]:
- generic [ref=e1361]: "112212"
- cell "正常" [ref=e1362]:
- generic [ref=e1365]: 正常
- cell "8" [ref=e3285]:
- generic [ref=e1367]: "8"
- cell "2026-03-04 18:06:48" [ref=e3286]:
- generic [ref=e1369]: 2026-03-04 18:06:48
- cell "详情 撤回 删除" [ref=e1370]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "撤回" [ref=e1374] [cursor=pointer]:
- generic [ref=e1375]: 撤回
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "124 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:26:07 详情 撤回 删除" [ref=e3287]':
- cell "124" [ref=e3288]:
- generic [ref=e1380]: "124"
- 'cell "? - ID: 0" [ref=e3289]':
- generic [ref=e1383]:
- generic [ref=e1385]: "?"
- generic [ref=e1386]:
- generic [ref=e1387]: "-"
- generic [ref=e1388]: "ID: 0"
- cell "系统消息" [ref=e3290]:
- generic [ref=e1392]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3291]:
- generic [ref=e1395]: 测试用户2 被取消管理员
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "7" [ref=e3292]:
- generic [ref=e1401]: "7"
- cell "2026-03-04 17:26:07" [ref=e3293]:
- generic [ref=e1403]: 2026-03-04 17:26:07
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "123 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:26:03 详情 撤回 删除" [ref=e3294]':
- cell "123" [ref=e3295]:
- generic [ref=e1414]: "123"
- 'cell "? - ID: 0" [ref=e3296]':
- generic [ref=e1417]:
- generic [ref=e1419]: "?"
- generic [ref=e1420]:
- generic [ref=e1421]: "-"
- generic [ref=e1422]: "ID: 0"
- cell "系统消息" [ref=e3297]:
- generic [ref=e1426]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3298]:
- generic [ref=e1429]: 测试用户2 被设为管理员
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "7" [ref=e3299]:
- generic [ref=e1435]: "7"
- cell "2026-03-04 17:26:03" [ref=e3300]:
- generic [ref=e1437]: 2026-03-04 17:26:03
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "122 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:25:54 详情 撤回 删除" [ref=e3301]':
- cell "122" [ref=e3302]:
- generic [ref=e1448]: "122"
- 'cell "? - ID: 0" [ref=e3303]':
- generic [ref=e1451]:
- generic [ref=e1453]: "?"
- generic [ref=e1454]:
- generic [ref=e1455]: "-"
- generic [ref=e1456]: "ID: 0"
- cell "系统消息" [ref=e3304]:
- generic [ref=e1460]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3305]:
- generic [ref=e1463]: 测试用户2 被取消管理员
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "7" [ref=e3306]:
- generic [ref=e1469]: "7"
- cell "2026-03-04 17:25:54" [ref=e3307]:
- generic [ref=e1471]: 2026-03-04 17:25:54
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "121 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:25:50 详情 撤回 删除" [ref=e3308]':
- cell "121" [ref=e3309]:
- generic [ref=e2732]: "121"
- 'cell "? - ID: 0" [ref=e3310]':
- generic [ref=e2735]:
- generic [ref=e2737]: "?"
- generic [ref=e2738]:
- generic [ref=e2739]: "-"
- generic [ref=e2740]: "ID: 0"
- cell "系统消息" [ref=e3311]:
- generic [ref=e2744]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3312]:
- generic [ref=e2747]: 测试用户2 被设为管理员
- cell "正常" [ref=e2748]:
- generic [ref=e2751]: 正常
- cell "7" [ref=e3313]:
- generic [ref=e2753]: "7"
- cell "2026-03-04 17:25:50" [ref=e3314]:
- generic [ref=e2755]: 2026-03-04 17:25:50
- cell "详情 撤回 删除" [ref=e2756]:
- generic [ref=e2757]:
- button "详情" [ref=e2758] [cursor=pointer]:
- generic [ref=e2759]: 详情
- button "撤回" [ref=e2760] [cursor=pointer]:
- generic [ref=e2761]: 撤回
- button "删除" [ref=e2762] [cursor=pointer]:
- generic [ref=e2763]: 删除
- 'row "120 ? - ID: 0 系统消息 卜锦元 被设为管理员 正常 8 2026-03-04 17:21:43 详情 撤回 删除" [ref=e3315]':
- cell "120" [ref=e3316]:
- generic [ref=e2766]: "120"
- 'cell "? - ID: 0" [ref=e3317]':
- generic [ref=e2769]:
- generic [ref=e2771]: "?"
- generic [ref=e2772]:
- generic [ref=e2773]: "-"
- generic [ref=e2774]: "ID: 0"
- cell "系统消息" [ref=e3318]:
- generic [ref=e2778]: 系统消息
- cell "卜锦元 被设为管理员" [ref=e3319]:
- generic [ref=e2781]: 卜锦元 被设为管理员
- cell "正常" [ref=e2782]:
- generic [ref=e2785]: 正常
- cell "8" [ref=e2786]:
- generic [ref=e2787]: "8"
- cell "2026-03-04 17:21:43" [ref=e3320]:
- generic [ref=e2789]: 2026-03-04 17:21:43
- cell "详情 撤回 删除" [ref=e2790]:
- generic [ref=e2791]:
- button "详情" [ref=e2792] [cursor=pointer]:
- generic [ref=e2793]: 详情
- button "撤回" [ref=e2794] [cursor=pointer]:
- generic [ref=e2795]: 撤回
- button "删除" [ref=e2796] [cursor=pointer]:
- generic [ref=e2797]: 删除
- 'row "119 ? - ID: 0 系统消息 测试用户3 被设为管理员 正常 7 2026-03-04 17:21:13 详情 撤回 删除" [ref=e3321]':
- cell "119" [ref=e3322]:
- generic [ref=e2800]: "119"
- 'cell "? - ID: 0" [ref=e3323]':
- generic [ref=e2803]:
- generic [ref=e2805]: "?"
- generic [ref=e2806]:
- generic [ref=e2807]: "-"
- generic [ref=e2808]: "ID: 0"
- cell "系统消息" [ref=e3324]:
- generic [ref=e2812]: 系统消息
- cell "测试用户3 被设为管理员" [ref=e3325]:
- generic [ref=e2815]: 测试用户3 被设为管理员
- cell "正常" [ref=e2816]:
- generic [ref=e2819]: 正常
- cell "7" [ref=e3326]:
- generic [ref=e2821]: "7"
- cell "2026-03-04 17:21:13" [ref=e3327]:
- generic [ref=e2823]: 2026-03-04 17:21:13
- cell "详情 撤回 删除" [ref=e2824]:
- generic [ref=e2825]:
- button "详情" [ref=e2826] [cursor=pointer]:
- generic [ref=e2827]: 详情
- button "撤回" [ref=e2828] [cursor=pointer]:
- generic [ref=e2829]: 撤回
- button "删除" [ref=e2830] [cursor=pointer]:
- generic [ref=e2831]: 删除
- 'row "118 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:21:07 详情 撤回 删除" [ref=e3328]':
- cell "118" [ref=e3329]:
- generic [ref=e2834]: "118"
- 'cell "? - ID: 0" [ref=e2835]':
- generic [ref=e2837]:
- generic [ref=e2839]: "?"
- generic [ref=e2840]:
- generic [ref=e2841]: "-"
- generic [ref=e2842]: "ID: 0"
- cell "系统消息" [ref=e2843]:
- generic [ref=e2846]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3330]:
- generic [ref=e2849]: 测试用户2 被取消管理员
- cell "正常" [ref=e2850]:
- generic [ref=e2853]: 正常
- cell "7" [ref=e3331]:
- generic [ref=e2855]: "7"
- cell "2026-03-04 17:21:07" [ref=e3332]:
- generic [ref=e2857]: 2026-03-04 17:21:07
- cell "详情 撤回 删除" [ref=e2858]:
- generic [ref=e2859]:
- button "详情" [ref=e2860] [cursor=pointer]:
- generic [ref=e2861]: 详情
- button "撤回" [ref=e2862] [cursor=pointer]:
- generic [ref=e2863]: 撤回
- button "删除" [ref=e2864] [cursor=pointer]:
- generic [ref=e2865]: 删除
- 'row "117 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:20:31 详情 撤回 删除" [ref=e3333]':
- cell "117" [ref=e3334]:
- generic [ref=e2868]: "117"
- 'cell "? - ID: 0" [ref=e3335]':
- generic [ref=e2871]:
- generic [ref=e2873]: "?"
- generic [ref=e2874]:
- generic [ref=e2875]: "-"
- generic [ref=e2876]: "ID: 0"
- cell "系统消息" [ref=e3336]:
- generic [ref=e2880]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3337]:
- generic [ref=e2883]: 测试用户2 被设为管理员
- cell "正常" [ref=e2884]:
- generic [ref=e2887]: 正常
- cell "7" [ref=e3338]:
- generic [ref=e2889]: "7"
- cell "2026-03-04 17:20:31" [ref=e3339]:
- generic [ref=e2891]: 2026-03-04 17:20:31
- cell "详情 撤回 删除" [ref=e2892]:
- generic [ref=e2893]:
- button "详情" [ref=e2894] [cursor=pointer]:
- generic [ref=e2895]: 详情
- button "撤回" [ref=e2896] [cursor=pointer]:
- generic [ref=e2897]: 撤回
- button "删除" [ref=e2898] [cursor=pointer]:
- generic [ref=e2899]: 删除
- 'row "116 新 新昵称 ID: 4 文本 112121212 正常 9 2026-03-04 17:09:04 详情 撤回 删除" [ref=e3340]':
- cell "116" [ref=e3341]:
- generic [ref=e2902]: "116"
- 'cell "新 新昵称 ID: 4" [ref=e3342]':
- generic [ref=e2905]:
- generic [ref=e2907]:
- generic [ref=e2908]:
- generic [ref=e2909]: 新昵称
- generic [ref=e2910]: "ID: 4"
- cell "文本" [ref=e2911]:
- generic [ref=e2914]: 文本
- cell "112121212" [ref=e3343]:
- generic [ref=e2917]: "112121212"
- cell "正常" [ref=e2918]:
- generic [ref=e2921]: 正常
- cell "9" [ref=e3344]:
- generic [ref=e2923]: "9"
- cell "2026-03-04 17:09:04" [ref=e3345]:
- generic [ref=e2925]: 2026-03-04 17:09:04
- cell "详情 撤回 删除" [ref=e2926]:
- generic [ref=e2927]:
- button "详情" [ref=e2928] [cursor=pointer]:
- generic [ref=e2929]: 详情
- button "撤回" [ref=e2930] [cursor=pointer]:
- generic [ref=e2931]: 撤回
- button "删除" [ref=e2932] [cursor=pointer]:
- generic [ref=e2933]: 删除
- 'row "115 卜 卜锦元 ID: 7 文本 111 正常 9 2026-03-04 17:08:51 详情 撤回 删除" [ref=e3346]':
- cell "115" [ref=e3347]:
- generic [ref=e2936]: "115"
- 'cell "卜 卜锦元 ID: 7" [ref=e3348]':
- generic [ref=e2939]:
- generic [ref=e2941]:
- generic [ref=e2942]:
- generic [ref=e2943]: 卜锦元
- generic [ref=e2944]: "ID: 7"
- cell "文本" [ref=e2945]:
- generic [ref=e2948]: 文本
- cell "111" [ref=e3349]:
- generic [ref=e2951]: "111"
- cell "正常" [ref=e2952]:
- generic [ref=e2955]: 正常
- cell "9" [ref=e3350]:
- generic [ref=e2957]: "9"
- cell "2026-03-04 17:08:51" [ref=e3351]:
- generic [ref=e2959]: 2026-03-04 17:08:51
- cell "详情 撤回 删除" [ref=e2960]:
- generic [ref=e2961]:
- button "详情" [ref=e2962] [cursor=pointer]:
- generic [ref=e2963]: 详情
- button "撤回" [ref=e2964] [cursor=pointer]:
- generic [ref=e2965]: 撤回
- button "删除" [ref=e2966] [cursor=pointer]:
- generic [ref=e2967]: 删除
- 'row "114 卜 卜锦元 ID: 7 文本 111122fas 正常 9 2026-03-04 17:07:49 详情 撤回 删除" [ref=e3352]':
- cell "114" [ref=e3353]:
- generic [ref=e2970]: "114"
- 'cell "卜 卜锦元 ID: 7" [ref=e3354]':
- generic [ref=e2973]:
- generic [ref=e2975]:
- generic [ref=e2976]:
- generic [ref=e2977]: 卜锦元
- generic [ref=e2978]: "ID: 7"
- cell "文本" [ref=e2979]:
- generic [ref=e2982]: 文本
- cell "111122fas" [ref=e3355]:
- generic [ref=e2985]: 111122fas
- cell "正常" [ref=e2986]:
- generic [ref=e2989]: 正常
- cell "9" [ref=e3356]:
- generic [ref=e2991]: "9"
- cell "2026-03-04 17:07:49" [ref=e3357]:
- generic [ref=e2993]: 2026-03-04 17:07:49
- cell "详情 撤回 删除" [ref=e2994]:
- generic [ref=e2995]:
- button "详情" [ref=e2996] [cursor=pointer]:
- generic [ref=e2997]: 详情
- button "撤回" [ref=e2998] [cursor=pointer]:
- generic [ref=e2999]: 撤回
- button "删除" [ref=e3000] [cursor=pointer]:
- generic [ref=e3001]: 删除
- 'row "113 新 新昵称 ID: 4 文本 测试你是死是1 正常 8 2026-03-04 17:00:57 详情 撤回 删除" [ref=e3358]':
- cell "113" [ref=e3359]:
- generic [ref=e3004]: "113"
- 'cell "新 新昵称 ID: 4" [ref=e3360]':
- generic [ref=e3007]:
- generic [ref=e3009]:
- generic [ref=e3010]:
- generic [ref=e3011]: 新昵称
- generic [ref=e3012]: "ID: 4"
- cell "文本" [ref=e3013]:
- generic [ref=e3016]: 文本
- cell "测试你是死是1" [ref=e3361]:
- generic [ref=e3019]: 测试你是死是1
- cell "正常" [ref=e3020]:
- generic [ref=e3023]: 正常
- cell "8" [ref=e3362]:
- generic [ref=e3025]: "8"
- cell "2026-03-04 17:00:57" [ref=e3363]:
- generic [ref=e3027]: 2026-03-04 17:00:57
- cell "详情 撤回 删除" [ref=e3028]:
- generic [ref=e3029]:
- button "详情" [ref=e3030] [cursor=pointer]:
- generic [ref=e3031]: 详情
- button "撤回" [ref=e3032] [cursor=pointer]:
- generic [ref=e3033]: 撤回
- button "删除" [ref=e3034] [cursor=pointer]:
- generic [ref=e3035]: 删除
- 'row "112 新 新昵称 ID: 4 文本 测试消息发送 正常 9 2026-03-04 16:57:15 详情 撤回 删除" [ref=e3364]':
- cell "112" [ref=e3365]:
- generic [ref=e3038]: "112"
- 'cell "新 新昵称 ID: 4" [ref=e3366]':
- generic [ref=e3041]:
- generic [ref=e3043]:
- generic [ref=e3044]:
- generic [ref=e3045]: 新昵称
- generic [ref=e3046]: "ID: 4"
- cell "文本" [ref=e3047]:
- generic [ref=e3050]: 文本
- cell "测试消息发送" [ref=e3367]:
- generic [ref=e3053]: 测试消息发送
- cell "正常" [ref=e3054]:
- generic [ref=e3057]: 正常
- cell "9" [ref=e3368]:
- generic [ref=e3059]: "9"
- cell "2026-03-04 16:57:15" [ref=e3369]:
- generic [ref=e3061]: 2026-03-04 16:57:15
- cell "详情 撤回 删除" [ref=e3062]:
- generic [ref=e3063]:
- button "详情" [ref=e3064] [cursor=pointer]:
- generic [ref=e3065]: 详情
- button "撤回" [ref=e3066] [cursor=pointer]:
- generic [ref=e3067]: 撤回
- button "删除" [ref=e3068] [cursor=pointer]:
- generic [ref=e3069]: 删除
- 'row "111 新 新昵称 ID: 4 文本 21433 正常 9 2026-03-04 16:54:46 详情 撤回 删除" [ref=e3370]':
- cell "111" [ref=e3371]:
- generic [ref=e3072]: "111"
- 'cell "新 新昵称 ID: 4" [ref=e3073]':
- generic [ref=e3075]:
- generic [ref=e3077]:
- generic [ref=e3078]:
- generic [ref=e3079]: 新昵称
- generic [ref=e3080]: "ID: 4"
- cell "文本" [ref=e3081]:
- generic [ref=e3084]: 文本
- cell "21433" [ref=e3372]:
- generic [ref=e3087]: "21433"
- cell "正常" [ref=e3088]:
- generic [ref=e3091]: 正常
- cell "9" [ref=e3373]:
- generic [ref=e3093]: "9"
- cell "2026-03-04 16:54:46" [ref=e3374]:
- generic [ref=e3095]: 2026-03-04 16:54:46
- cell "详情 撤回 删除" [ref=e3096]:
- generic [ref=e3097]:
- button "详情" [ref=e3098] [cursor=pointer]:
- generic [ref=e3099]: 详情
- button "撤回" [ref=e3100] [cursor=pointer]:
- generic [ref=e3101]: 撤回
- button "删除" [ref=e3102] [cursor=pointer]:
- generic [ref=e3103]: 删除
- 'row "110 新 新昵称 ID: 4 文本 1111 正常 8 2026-03-04 16:54:36 详情 撤回 删除" [ref=e3375]':
- cell "110" [ref=e3376]:
- generic [ref=e3106]: "110"
- 'cell "新 新昵称 ID: 4" [ref=e3377]':
- generic [ref=e3109]:
- generic [ref=e3111]:
- generic [ref=e3112]:
- generic [ref=e3113]: 新昵称
- generic [ref=e3114]: "ID: 4"
- cell "文本" [ref=e3378]:
- generic [ref=e3118]: 文本
- cell "1111" [ref=e3379]:
- generic [ref=e3121]: "1111"
- cell "正常" [ref=e3122]:
- generic [ref=e3125]: 正常
- cell "8" [ref=e3126]:
- generic [ref=e3127]: "8"
- cell "2026-03-04 16:54:36" [ref=e3380]:
- generic [ref=e3129]: 2026-03-04 16:54:36
- cell "详情 撤回 删除" [ref=e3130]:
- generic [ref=e3131]:
- button "详情" [ref=e3132] [cursor=pointer]:
- generic [ref=e3133]: 详情
- button "撤回" [ref=e3134] [cursor=pointer]:
- generic [ref=e3135]: 撤回
- button "删除" [ref=e3136] [cursor=pointer]:
- generic [ref=e3137]: 删除
- 'row "109 新 新昵称 ID: 4 文本 测试哈哈 正常 8 2026-03-04 16:54:25 详情 撤回 删除" [ref=e3381]':
- cell "109" [ref=e3382]:
- generic [ref=e3140]: "109"
- 'cell "新 新昵称 ID: 4" [ref=e3141]':
- generic [ref=e3143]:
- generic [ref=e3145]:
- generic [ref=e3146]:
- generic [ref=e3147]: 新昵称
- generic [ref=e3148]: "ID: 4"
- cell "文本" [ref=e3149]:
- generic [ref=e3152]: 文本
- cell "测试哈哈" [ref=e3383]:
- generic [ref=e3155]: 测试哈哈
- cell "正常" [ref=e3156]:
- generic [ref=e3159]: 正常
- cell "8" [ref=e3160]:
- generic [ref=e3161]: "8"
- cell "2026-03-04 16:54:25" [ref=e3384]:
- generic [ref=e3163]: 2026-03-04 16:54:25
- cell "详情 撤回 删除" [ref=e3164]:
- generic [ref=e3165]:
- button "详情" [ref=e3166] [cursor=pointer]:
- generic [ref=e3167]: 详情
- button "撤回" [ref=e3168] [cursor=pointer]:
- generic [ref=e3169]: 撤回
- button "删除" [ref=e3170] [cursor=pointer]:
- generic [ref=e3171]: 删除
- 'row "108 卜 卜锦元 ID: 7 文本 咋子爱爱在 正常 9 2026-03-04 16:54:12 详情 撤回 删除" [ref=e3385]':
- cell "108" [ref=e3386]:
- generic [ref=e3174]: "108"
- 'cell "卜 卜锦元 ID: 7" [ref=e3175]':
- generic [ref=e3177]:
- generic [ref=e3179]:
- generic [ref=e3180]:
- generic [ref=e3181]: 卜锦元
- generic [ref=e3182]: "ID: 7"
- cell "文本" [ref=e3183]:
- generic [ref=e3186]: 文本
- cell "咋子爱爱在" [ref=e3387]:
- generic [ref=e3189]: 咋子爱爱在
- cell "正常" [ref=e3190]:
- generic [ref=e3193]: 正常
- cell "9" [ref=e3388]:
- generic [ref=e3195]: "9"
- cell "2026-03-04 16:54:12" [ref=e3389]:
- generic [ref=e3197]: 2026-03-04 16:54:12
- cell "详情 撤回 删除" [ref=e3198]:
- generic [ref=e3199]:
- button "详情" [ref=e3200] [cursor=pointer]:
- generic [ref=e3201]: 详情
- button "撤回" [ref=e3202] [cursor=pointer]:
- generic [ref=e3203]: 撤回
- button "删除" [ref=e3204] [cursor=pointer]:
- generic [ref=e3205]: 删除
- 'row "107 卜 卜锦元 ID: 7 文本 在测试 正常 9 2026-03-04 16:54:02 详情 撤回 删除" [ref=e3390]':
- cell "107" [ref=e3391]:
- generic [ref=e3208]: "107"
- 'cell "卜 卜锦元 ID: 7" [ref=e3209]':
- generic [ref=e3211]:
- generic [ref=e3213]:
- generic [ref=e3214]:
- generic [ref=e3215]: 卜锦元
- generic [ref=e3216]: "ID: 7"
- cell "文本" [ref=e3217]:
- generic [ref=e3220]: 文本
- cell "在测试" [ref=e3392]:
- generic [ref=e3223]: 在测试
- cell "正常" [ref=e3224]:
- generic [ref=e3227]: 正常
- cell "9" [ref=e3393]:
- generic [ref=e3229]: "9"
- cell "2026-03-04 16:54:02" [ref=e3394]:
- generic [ref=e3231]: 2026-03-04 16:54:02
- cell "详情 撤回 删除" [ref=e3232]:
- generic [ref=e3233]:
- button "详情" [ref=e3234] [cursor=pointer]:
- generic [ref=e3235]: 详情
- button "撤回" [ref=e3236] [cursor=pointer]:
- generic [ref=e3237]: 撤回
- button "删除" [ref=e3238] [cursor=pointer]:
- generic [ref=e3239]: 删除
- 'row "106 卜 卜锦元 ID: 7 文本 哈哈,再次测试 正常 9 2026-03-04 16:53:53 详情 撤回 删除" [ref=e3395]':
- cell "106" [ref=e3396]:
- generic [ref=e3242]: "106"
- 'cell "卜 卜锦元 ID: 7" [ref=e3243]':
- generic [ref=e3245]:
- generic [ref=e3247]:
- generic [ref=e3248]:
- generic [ref=e3249]: 卜锦元
- generic [ref=e3250]: "ID: 7"
- cell "文本" [ref=e3251]:
- generic [ref=e3254]: 文本
- cell "哈哈,再次测试" [ref=e3397]:
- generic [ref=e3257]: 哈哈,再次测试
- cell "正常" [ref=e3258]:
- generic [ref=e3261]: 正常
- cell "9" [ref=e3398]:
- generic [ref=e3263]: "9"
- cell "2026-03-04 16:53:53" [ref=e3399]:
- generic [ref=e3265]: 2026-03-04 16:53:53
- cell "详情 撤回 删除" [ref=e3266]:
- generic [ref=e3267]:
- button "详情" [ref=e3268] [cursor=pointer]:
- generic [ref=e3269]: 详情
- button "撤回" [ref=e3270] [cursor=pointer]:
- generic [ref=e3271]: 撤回
- button "删除" [ref=e3272] [cursor=pointer]:
- generic [ref=e3273]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [ref=e1323] [cursor=pointer]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325] [cursor=pointer]: "1"
- listitem "第 2 页" [ref=e3274]: "2"
- listitem "第 3 页" [ref=e3275] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e3276] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e3277] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e3278] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e3279] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e3280] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "2"
- generic [ref=e1332]:
- dialog "撤回消息" [ref=e3401]:
- generic [ref=e3402]:
- generic [ref=e3403]:
- generic [ref=e3404]: 撤回消息
- button "关闭此对话框" [ref=e3405] [cursor=pointer]:
- img [ref=e3407]
- generic [ref=e3410]:
- img [ref=e3412]
- paragraph [ref=e3415]: "确定要撤回消息 #125 吗?撤回后该消息对所有用户不可见。"
- generic [ref=e3416]:
- button "取消" [ref=e3417] [cursor=pointer]:
- generic [ref=e3418]: 取消
- button "确定撤回" [active] [ref=e3419] [cursor=pointer]:
- generic [ref=e3420]: 确定撤回

View File

@@ -0,0 +1,673 @@
- generic [active] [ref=e1]:
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "125 新 新昵称 ID: 4 文本 [已撤回] 已撤回 8 2026-03-04 18:06:48 详情 删除" [ref=e3421]':
- cell "125" [ref=e3282]:
- generic [ref=e1346]: "125"
- 'cell "新 新昵称 ID: 4" [ref=e3283]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 新昵称
- generic [ref=e1354]: "ID: 4"
- cell "文本" [ref=e2401]:
- generic [ref=e1358]: 文本
- cell "[已撤回]" [ref=e3422]:
- generic [ref=e1361]: "[已撤回]"
- cell "已撤回" [ref=e3423]:
- generic [ref=e1365]: 已撤回
- cell "8" [ref=e3285]:
- generic [ref=e1367]: "8"
- cell "2026-03-04 18:06:48" [ref=e3286]:
- generic [ref=e1369]: 2026-03-04 18:06:48
- cell "详情 删除" [ref=e3424]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "124 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:26:07 详情 撤回 删除" [ref=e3287]':
- cell "124" [ref=e3288]:
- generic [ref=e1380]: "124"
- 'cell "? - ID: 0" [ref=e3289]':
- generic [ref=e1383]:
- generic [ref=e1385]: "?"
- generic [ref=e1386]:
- generic [ref=e1387]: "-"
- generic [ref=e1388]: "ID: 0"
- cell "系统消息" [ref=e3290]:
- generic [ref=e1392]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3291]:
- generic [ref=e1395]: 测试用户2 被取消管理员
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "7" [ref=e3292]:
- generic [ref=e1401]: "7"
- cell "2026-03-04 17:26:07" [ref=e3293]:
- generic [ref=e1403]: 2026-03-04 17:26:07
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "123 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:26:03 详情 撤回 删除" [ref=e3294]':
- cell "123" [ref=e3295]:
- generic [ref=e1414]: "123"
- 'cell "? - ID: 0" [ref=e3296]':
- generic [ref=e1417]:
- generic [ref=e1419]: "?"
- generic [ref=e1420]:
- generic [ref=e1421]: "-"
- generic [ref=e1422]: "ID: 0"
- cell "系统消息" [ref=e3297]:
- generic [ref=e1426]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3298]:
- generic [ref=e1429]: 测试用户2 被设为管理员
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "7" [ref=e3299]:
- generic [ref=e1435]: "7"
- cell "2026-03-04 17:26:03" [ref=e3300]:
- generic [ref=e1437]: 2026-03-04 17:26:03
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "122 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:25:54 详情 撤回 删除" [ref=e3301]':
- cell "122" [ref=e3302]:
- generic [ref=e1448]: "122"
- 'cell "? - ID: 0" [ref=e3303]':
- generic [ref=e1451]:
- generic [ref=e1453]: "?"
- generic [ref=e1454]:
- generic [ref=e1455]: "-"
- generic [ref=e1456]: "ID: 0"
- cell "系统消息" [ref=e3304]:
- generic [ref=e1460]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3305]:
- generic [ref=e1463]: 测试用户2 被取消管理员
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "7" [ref=e3306]:
- generic [ref=e1469]: "7"
- cell "2026-03-04 17:25:54" [ref=e3307]:
- generic [ref=e1471]: 2026-03-04 17:25:54
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "121 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:25:50 详情 撤回 删除" [ref=e3308]':
- cell "121" [ref=e3309]:
- generic [ref=e2732]: "121"
- 'cell "? - ID: 0" [ref=e3310]':
- generic [ref=e2735]:
- generic [ref=e2737]: "?"
- generic [ref=e2738]:
- generic [ref=e2739]: "-"
- generic [ref=e2740]: "ID: 0"
- cell "系统消息" [ref=e3311]:
- generic [ref=e2744]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3312]:
- generic [ref=e2747]: 测试用户2 被设为管理员
- cell "正常" [ref=e2748]:
- generic [ref=e2751]: 正常
- cell "7" [ref=e3313]:
- generic [ref=e2753]: "7"
- cell "2026-03-04 17:25:50" [ref=e3314]:
- generic [ref=e2755]: 2026-03-04 17:25:50
- cell "详情 撤回 删除" [ref=e2756]:
- generic [ref=e2757]:
- button "详情" [ref=e2758] [cursor=pointer]:
- generic [ref=e2759]: 详情
- button "撤回" [ref=e2760] [cursor=pointer]:
- generic [ref=e2761]: 撤回
- button "删除" [ref=e2762] [cursor=pointer]:
- generic [ref=e2763]: 删除
- 'row "120 ? - ID: 0 系统消息 卜锦元 被设为管理员 正常 8 2026-03-04 17:21:43 详情 撤回 删除" [ref=e3315]':
- cell "120" [ref=e3316]:
- generic [ref=e2766]: "120"
- 'cell "? - ID: 0" [ref=e3317]':
- generic [ref=e2769]:
- generic [ref=e2771]: "?"
- generic [ref=e2772]:
- generic [ref=e2773]: "-"
- generic [ref=e2774]: "ID: 0"
- cell "系统消息" [ref=e3318]:
- generic [ref=e2778]: 系统消息
- cell "卜锦元 被设为管理员" [ref=e3319]:
- generic [ref=e2781]: 卜锦元 被设为管理员
- cell "正常" [ref=e2782]:
- generic [ref=e2785]: 正常
- cell "8" [ref=e2786]:
- generic [ref=e2787]: "8"
- cell "2026-03-04 17:21:43" [ref=e3320]:
- generic [ref=e2789]: 2026-03-04 17:21:43
- cell "详情 撤回 删除" [ref=e2790]:
- generic [ref=e2791]:
- button "详情" [ref=e2792] [cursor=pointer]:
- generic [ref=e2793]: 详情
- button "撤回" [ref=e2794] [cursor=pointer]:
- generic [ref=e2795]: 撤回
- button "删除" [ref=e2796] [cursor=pointer]:
- generic [ref=e2797]: 删除
- 'row "119 ? - ID: 0 系统消息 测试用户3 被设为管理员 正常 7 2026-03-04 17:21:13 详情 撤回 删除" [ref=e3321]':
- cell "119" [ref=e3322]:
- generic [ref=e2800]: "119"
- 'cell "? - ID: 0" [ref=e3323]':
- generic [ref=e2803]:
- generic [ref=e2805]: "?"
- generic [ref=e2806]:
- generic [ref=e2807]: "-"
- generic [ref=e2808]: "ID: 0"
- cell "系统消息" [ref=e3324]:
- generic [ref=e2812]: 系统消息
- cell "测试用户3 被设为管理员" [ref=e3325]:
- generic [ref=e2815]: 测试用户3 被设为管理员
- cell "正常" [ref=e2816]:
- generic [ref=e2819]: 正常
- cell "7" [ref=e3326]:
- generic [ref=e2821]: "7"
- cell "2026-03-04 17:21:13" [ref=e3327]:
- generic [ref=e2823]: 2026-03-04 17:21:13
- cell "详情 撤回 删除" [ref=e2824]:
- generic [ref=e2825]:
- button "详情" [ref=e2826] [cursor=pointer]:
- generic [ref=e2827]: 详情
- button "撤回" [ref=e2828] [cursor=pointer]:
- generic [ref=e2829]: 撤回
- button "删除" [ref=e2830] [cursor=pointer]:
- generic [ref=e2831]: 删除
- 'row "118 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:21:07 详情 撤回 删除" [ref=e3328]':
- cell "118" [ref=e3329]:
- generic [ref=e2834]: "118"
- 'cell "? - ID: 0" [ref=e2835]':
- generic [ref=e2837]:
- generic [ref=e2839]: "?"
- generic [ref=e2840]:
- generic [ref=e2841]: "-"
- generic [ref=e2842]: "ID: 0"
- cell "系统消息" [ref=e2843]:
- generic [ref=e2846]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3330]:
- generic [ref=e2849]: 测试用户2 被取消管理员
- cell "正常" [ref=e2850]:
- generic [ref=e2853]: 正常
- cell "7" [ref=e3331]:
- generic [ref=e2855]: "7"
- cell "2026-03-04 17:21:07" [ref=e3332]:
- generic [ref=e2857]: 2026-03-04 17:21:07
- cell "详情 撤回 删除" [ref=e2858]:
- generic [ref=e2859]:
- button "详情" [ref=e2860] [cursor=pointer]:
- generic [ref=e2861]: 详情
- button "撤回" [ref=e2862] [cursor=pointer]:
- generic [ref=e2863]: 撤回
- button "删除" [ref=e2864] [cursor=pointer]:
- generic [ref=e2865]: 删除
- 'row "117 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:20:31 详情 撤回 删除" [ref=e3333]':
- cell "117" [ref=e3334]:
- generic [ref=e2868]: "117"
- 'cell "? - ID: 0" [ref=e3335]':
- generic [ref=e2871]:
- generic [ref=e2873]: "?"
- generic [ref=e2874]:
- generic [ref=e2875]: "-"
- generic [ref=e2876]: "ID: 0"
- cell "系统消息" [ref=e3336]:
- generic [ref=e2880]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3337]:
- generic [ref=e2883]: 测试用户2 被设为管理员
- cell "正常" [ref=e2884]:
- generic [ref=e2887]: 正常
- cell "7" [ref=e3338]:
- generic [ref=e2889]: "7"
- cell "2026-03-04 17:20:31" [ref=e3339]:
- generic [ref=e2891]: 2026-03-04 17:20:31
- cell "详情 撤回 删除" [ref=e2892]:
- generic [ref=e2893]:
- button "详情" [ref=e2894] [cursor=pointer]:
- generic [ref=e2895]: 详情
- button "撤回" [ref=e2896] [cursor=pointer]:
- generic [ref=e2897]: 撤回
- button "删除" [ref=e2898] [cursor=pointer]:
- generic [ref=e2899]: 删除
- 'row "116 新 新昵称 ID: 4 文本 112121212 正常 9 2026-03-04 17:09:04 详情 撤回 删除" [ref=e3340]':
- cell "116" [ref=e3341]:
- generic [ref=e2902]: "116"
- 'cell "新 新昵称 ID: 4" [ref=e3342]':
- generic [ref=e2905]:
- generic [ref=e2907]:
- generic [ref=e2908]:
- generic [ref=e2909]: 新昵称
- generic [ref=e2910]: "ID: 4"
- cell "文本" [ref=e2911]:
- generic [ref=e2914]: 文本
- cell "112121212" [ref=e3343]:
- generic [ref=e2917]: "112121212"
- cell "正常" [ref=e2918]:
- generic [ref=e2921]: 正常
- cell "9" [ref=e3344]:
- generic [ref=e2923]: "9"
- cell "2026-03-04 17:09:04" [ref=e3345]:
- generic [ref=e2925]: 2026-03-04 17:09:04
- cell "详情 撤回 删除" [ref=e2926]:
- generic [ref=e2927]:
- button "详情" [ref=e2928] [cursor=pointer]:
- generic [ref=e2929]: 详情
- button "撤回" [ref=e2930] [cursor=pointer]:
- generic [ref=e2931]: 撤回
- button "删除" [ref=e2932] [cursor=pointer]:
- generic [ref=e2933]: 删除
- 'row "115 卜 卜锦元 ID: 7 文本 111 正常 9 2026-03-04 17:08:51 详情 撤回 删除" [ref=e3346]':
- cell "115" [ref=e3347]:
- generic [ref=e2936]: "115"
- 'cell "卜 卜锦元 ID: 7" [ref=e3348]':
- generic [ref=e2939]:
- generic [ref=e2941]:
- generic [ref=e2942]:
- generic [ref=e2943]: 卜锦元
- generic [ref=e2944]: "ID: 7"
- cell "文本" [ref=e2945]:
- generic [ref=e2948]: 文本
- cell "111" [ref=e3349]:
- generic [ref=e2951]: "111"
- cell "正常" [ref=e2952]:
- generic [ref=e2955]: 正常
- cell "9" [ref=e3350]:
- generic [ref=e2957]: "9"
- cell "2026-03-04 17:08:51" [ref=e3351]:
- generic [ref=e2959]: 2026-03-04 17:08:51
- cell "详情 撤回 删除" [ref=e2960]:
- generic [ref=e2961]:
- button "详情" [ref=e2962] [cursor=pointer]:
- generic [ref=e2963]: 详情
- button "撤回" [ref=e2964] [cursor=pointer]:
- generic [ref=e2965]: 撤回
- button "删除" [ref=e2966] [cursor=pointer]:
- generic [ref=e2967]: 删除
- 'row "114 卜 卜锦元 ID: 7 文本 111122fas 正常 9 2026-03-04 17:07:49 详情 撤回 删除" [ref=e3352]':
- cell "114" [ref=e3353]:
- generic [ref=e2970]: "114"
- 'cell "卜 卜锦元 ID: 7" [ref=e3354]':
- generic [ref=e2973]:
- generic [ref=e2975]:
- generic [ref=e2976]:
- generic [ref=e2977]: 卜锦元
- generic [ref=e2978]: "ID: 7"
- cell "文本" [ref=e2979]:
- generic [ref=e2982]: 文本
- cell "111122fas" [ref=e3355]:
- generic [ref=e2985]: 111122fas
- cell "正常" [ref=e2986]:
- generic [ref=e2989]: 正常
- cell "9" [ref=e3356]:
- generic [ref=e2991]: "9"
- cell "2026-03-04 17:07:49" [ref=e3357]:
- generic [ref=e2993]: 2026-03-04 17:07:49
- cell "详情 撤回 删除" [ref=e2994]:
- generic [ref=e2995]:
- button "详情" [ref=e2996] [cursor=pointer]:
- generic [ref=e2997]: 详情
- button "撤回" [ref=e2998] [cursor=pointer]:
- generic [ref=e2999]: 撤回
- button "删除" [ref=e3000] [cursor=pointer]:
- generic [ref=e3001]: 删除
- 'row "113 新 新昵称 ID: 4 文本 测试你是死是1 正常 8 2026-03-04 17:00:57 详情 撤回 删除" [ref=e3358]':
- cell "113" [ref=e3359]:
- generic [ref=e3004]: "113"
- 'cell "新 新昵称 ID: 4" [ref=e3360]':
- generic [ref=e3007]:
- generic [ref=e3009]:
- generic [ref=e3010]:
- generic [ref=e3011]: 新昵称
- generic [ref=e3012]: "ID: 4"
- cell "文本" [ref=e3013]:
- generic [ref=e3016]: 文本
- cell "测试你是死是1" [ref=e3361]:
- generic [ref=e3019]: 测试你是死是1
- cell "正常" [ref=e3020]:
- generic [ref=e3023]: 正常
- cell "8" [ref=e3362]:
- generic [ref=e3025]: "8"
- cell "2026-03-04 17:00:57" [ref=e3363]:
- generic [ref=e3027]: 2026-03-04 17:00:57
- cell "详情 撤回 删除" [ref=e3028]:
- generic [ref=e3029]:
- button "详情" [ref=e3030] [cursor=pointer]:
- generic [ref=e3031]: 详情
- button "撤回" [ref=e3032] [cursor=pointer]:
- generic [ref=e3033]: 撤回
- button "删除" [ref=e3034] [cursor=pointer]:
- generic [ref=e3035]: 删除
- 'row "112 新 新昵称 ID: 4 文本 测试消息发送 正常 9 2026-03-04 16:57:15 详情 撤回 删除" [ref=e3364]':
- cell "112" [ref=e3365]:
- generic [ref=e3038]: "112"
- 'cell "新 新昵称 ID: 4" [ref=e3366]':
- generic [ref=e3041]:
- generic [ref=e3043]:
- generic [ref=e3044]:
- generic [ref=e3045]: 新昵称
- generic [ref=e3046]: "ID: 4"
- cell "文本" [ref=e3047]:
- generic [ref=e3050]: 文本
- cell "测试消息发送" [ref=e3367]:
- generic [ref=e3053]: 测试消息发送
- cell "正常" [ref=e3054]:
- generic [ref=e3057]: 正常
- cell "9" [ref=e3368]:
- generic [ref=e3059]: "9"
- cell "2026-03-04 16:57:15" [ref=e3369]:
- generic [ref=e3061]: 2026-03-04 16:57:15
- cell "详情 撤回 删除" [ref=e3062]:
- generic [ref=e3063]:
- button "详情" [ref=e3064] [cursor=pointer]:
- generic [ref=e3065]: 详情
- button "撤回" [ref=e3066] [cursor=pointer]:
- generic [ref=e3067]: 撤回
- button "删除" [ref=e3068] [cursor=pointer]:
- generic [ref=e3069]: 删除
- 'row "111 新 新昵称 ID: 4 文本 21433 正常 9 2026-03-04 16:54:46 详情 撤回 删除" [ref=e3370]':
- cell "111" [ref=e3371]:
- generic [ref=e3072]: "111"
- 'cell "新 新昵称 ID: 4" [ref=e3073]':
- generic [ref=e3075]:
- generic [ref=e3077]:
- generic [ref=e3078]:
- generic [ref=e3079]: 新昵称
- generic [ref=e3080]: "ID: 4"
- cell "文本" [ref=e3081]:
- generic [ref=e3084]: 文本
- cell "21433" [ref=e3372]:
- generic [ref=e3087]: "21433"
- cell "正常" [ref=e3088]:
- generic [ref=e3091]: 正常
- cell "9" [ref=e3373]:
- generic [ref=e3093]: "9"
- cell "2026-03-04 16:54:46" [ref=e3374]:
- generic [ref=e3095]: 2026-03-04 16:54:46
- cell "详情 撤回 删除" [ref=e3096]:
- generic [ref=e3097]:
- button "详情" [ref=e3098] [cursor=pointer]:
- generic [ref=e3099]: 详情
- button "撤回" [ref=e3100] [cursor=pointer]:
- generic [ref=e3101]: 撤回
- button "删除" [ref=e3102] [cursor=pointer]:
- generic [ref=e3103]: 删除
- 'row "110 新 新昵称 ID: 4 文本 1111 正常 8 2026-03-04 16:54:36 详情 撤回 删除" [ref=e3375]':
- cell "110" [ref=e3376]:
- generic [ref=e3106]: "110"
- 'cell "新 新昵称 ID: 4" [ref=e3377]':
- generic [ref=e3109]:
- generic [ref=e3111]:
- generic [ref=e3112]:
- generic [ref=e3113]: 新昵称
- generic [ref=e3114]: "ID: 4"
- cell "文本" [ref=e3378]:
- generic [ref=e3118]: 文本
- cell "1111" [ref=e3379]:
- generic [ref=e3121]: "1111"
- cell "正常" [ref=e3122]:
- generic [ref=e3125]: 正常
- cell "8" [ref=e3126]:
- generic [ref=e3127]: "8"
- cell "2026-03-04 16:54:36" [ref=e3380]:
- generic [ref=e3129]: 2026-03-04 16:54:36
- cell "详情 撤回 删除" [ref=e3130]:
- generic [ref=e3131]:
- button "详情" [ref=e3132] [cursor=pointer]:
- generic [ref=e3133]: 详情
- button "撤回" [ref=e3134] [cursor=pointer]:
- generic [ref=e3135]: 撤回
- button "删除" [ref=e3136] [cursor=pointer]:
- generic [ref=e3137]: 删除
- 'row "109 新 新昵称 ID: 4 文本 测试哈哈 正常 8 2026-03-04 16:54:25 详情 撤回 删除" [ref=e3381]':
- cell "109" [ref=e3382]:
- generic [ref=e3140]: "109"
- 'cell "新 新昵称 ID: 4" [ref=e3141]':
- generic [ref=e3143]:
- generic [ref=e3145]:
- generic [ref=e3146]:
- generic [ref=e3147]: 新昵称
- generic [ref=e3148]: "ID: 4"
- cell "文本" [ref=e3149]:
- generic [ref=e3152]: 文本
- cell "测试哈哈" [ref=e3383]:
- generic [ref=e3155]: 测试哈哈
- cell "正常" [ref=e3156]:
- generic [ref=e3159]: 正常
- cell "8" [ref=e3160]:
- generic [ref=e3161]: "8"
- cell "2026-03-04 16:54:25" [ref=e3384]:
- generic [ref=e3163]: 2026-03-04 16:54:25
- cell "详情 撤回 删除" [ref=e3164]:
- generic [ref=e3165]:
- button "详情" [ref=e3166] [cursor=pointer]:
- generic [ref=e3167]: 详情
- button "撤回" [ref=e3168] [cursor=pointer]:
- generic [ref=e3169]: 撤回
- button "删除" [ref=e3170] [cursor=pointer]:
- generic [ref=e3171]: 删除
- 'row "108 卜 卜锦元 ID: 7 文本 咋子爱爱在 正常 9 2026-03-04 16:54:12 详情 撤回 删除" [ref=e3385]':
- cell "108" [ref=e3386]:
- generic [ref=e3174]: "108"
- 'cell "卜 卜锦元 ID: 7" [ref=e3175]':
- generic [ref=e3177]:
- generic [ref=e3179]:
- generic [ref=e3180]:
- generic [ref=e3181]: 卜锦元
- generic [ref=e3182]: "ID: 7"
- cell "文本" [ref=e3183]:
- generic [ref=e3186]: 文本
- cell "咋子爱爱在" [ref=e3387]:
- generic [ref=e3189]: 咋子爱爱在
- cell "正常" [ref=e3190]:
- generic [ref=e3193]: 正常
- cell "9" [ref=e3388]:
- generic [ref=e3195]: "9"
- cell "2026-03-04 16:54:12" [ref=e3389]:
- generic [ref=e3197]: 2026-03-04 16:54:12
- cell "详情 撤回 删除" [ref=e3198]:
- generic [ref=e3199]:
- button "详情" [ref=e3200] [cursor=pointer]:
- generic [ref=e3201]: 详情
- button "撤回" [ref=e3202] [cursor=pointer]:
- generic [ref=e3203]: 撤回
- button "删除" [ref=e3204] [cursor=pointer]:
- generic [ref=e3205]: 删除
- 'row "107 卜 卜锦元 ID: 7 文本 在测试 正常 9 2026-03-04 16:54:02 详情 撤回 删除" [ref=e3390]':
- cell "107" [ref=e3391]:
- generic [ref=e3208]: "107"
- 'cell "卜 卜锦元 ID: 7" [ref=e3209]':
- generic [ref=e3211]:
- generic [ref=e3213]:
- generic [ref=e3214]:
- generic [ref=e3215]: 卜锦元
- generic [ref=e3216]: "ID: 7"
- cell "文本" [ref=e3217]:
- generic [ref=e3220]: 文本
- cell "在测试" [ref=e3392]:
- generic [ref=e3223]: 在测试
- cell "正常" [ref=e3224]:
- generic [ref=e3227]: 正常
- cell "9" [ref=e3393]:
- generic [ref=e3229]: "9"
- cell "2026-03-04 16:54:02" [ref=e3394]:
- generic [ref=e3231]: 2026-03-04 16:54:02
- cell "详情 撤回 删除" [ref=e3232]:
- generic [ref=e3233]:
- button "详情" [ref=e3234] [cursor=pointer]:
- generic [ref=e3235]: 详情
- button "撤回" [ref=e3236] [cursor=pointer]:
- generic [ref=e3237]: 撤回
- button "删除" [ref=e3238] [cursor=pointer]:
- generic [ref=e3239]: 删除
- 'row "106 卜 卜锦元 ID: 7 文本 哈哈,再次测试 正常 9 2026-03-04 16:53:53 详情 撤回 删除" [ref=e3395]':
- cell "106" [ref=e3396]:
- generic [ref=e3242]: "106"
- 'cell "卜 卜锦元 ID: 7" [ref=e3243]':
- generic [ref=e3245]:
- generic [ref=e3247]:
- generic [ref=e3248]:
- generic [ref=e3249]: 卜锦元
- generic [ref=e3250]: "ID: 7"
- cell "文本" [ref=e3251]:
- generic [ref=e3254]: 文本
- cell "哈哈,再次测试" [ref=e3397]:
- generic [ref=e3257]: 哈哈,再次测试
- cell "正常" [ref=e3258]:
- generic [ref=e3261]: 正常
- cell "9" [ref=e3398]:
- generic [ref=e3263]: "9"
- cell "2026-03-04 16:53:53" [ref=e3399]:
- generic [ref=e3265]: 2026-03-04 16:53:53
- cell "详情 撤回 删除" [ref=e3266]:
- generic [ref=e3267]:
- button "详情" [ref=e3268] [cursor=pointer]:
- generic [ref=e3269]: 详情
- button "撤回" [ref=e3270] [cursor=pointer]:
- generic [ref=e3271]: 撤回
- button "删除" [ref=e3272] [cursor=pointer]:
- generic [ref=e3273]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [ref=e1323] [cursor=pointer]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325] [cursor=pointer]: "1"
- listitem "第 2 页" [ref=e3274]: "2"
- listitem "第 3 页" [ref=e3275] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e3276] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e3277] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e3278] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e3279] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e3280] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "2"
- generic [ref=e1332]:
- alert [ref=e3425]:
- img [ref=e3427]
- paragraph [ref=e3429]: 消息已撤回

View File

@@ -0,0 +1,684 @@
- generic [ref=e1]:
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "125 新 新昵称 ID: 4 文本 [已撤回] 已撤回 8 2026-03-04 18:06:48 详情 删除" [ref=e3421]':
- cell "125" [ref=e3282]:
- generic [ref=e1346]: "125"
- 'cell "新 新昵称 ID: 4" [ref=e3283]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 新昵称
- generic [ref=e1354]: "ID: 4"
- cell "文本" [ref=e2401]:
- generic [ref=e1358]: 文本
- cell "[已撤回]" [ref=e3422]:
- generic [ref=e1361]: "[已撤回]"
- cell "已撤回" [ref=e3423]:
- generic [ref=e1365]: 已撤回
- cell "8" [ref=e3285]:
- generic [ref=e1367]: "8"
- cell "2026-03-04 18:06:48" [ref=e3286]:
- generic [ref=e1369]: 2026-03-04 18:06:48
- cell "详情 删除" [ref=e3424]:
- generic [ref=e1371]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- button "删除" [ref=e1376] [cursor=pointer]:
- generic [ref=e1377]: 删除
- 'row "124 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:26:07 详情 撤回 删除" [ref=e3287]':
- cell "124" [ref=e3288]:
- generic [ref=e1380]: "124"
- 'cell "? - ID: 0" [ref=e3289]':
- generic [ref=e1383]:
- generic [ref=e1385]: "?"
- generic [ref=e1386]:
- generic [ref=e1387]: "-"
- generic [ref=e1388]: "ID: 0"
- cell "系统消息" [ref=e3290]:
- generic [ref=e1392]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3291]:
- generic [ref=e1395]: 测试用户2 被取消管理员
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "7" [ref=e3292]:
- generic [ref=e1401]: "7"
- cell "2026-03-04 17:26:07" [ref=e3293]:
- generic [ref=e1403]: 2026-03-04 17:26:07
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "123 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:26:03 详情 撤回 删除" [ref=e3294]':
- cell "123" [ref=e3295]:
- generic [ref=e1414]: "123"
- 'cell "? - ID: 0" [ref=e3296]':
- generic [ref=e1417]:
- generic [ref=e1419]: "?"
- generic [ref=e1420]:
- generic [ref=e1421]: "-"
- generic [ref=e1422]: "ID: 0"
- cell "系统消息" [ref=e3297]:
- generic [ref=e1426]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3298]:
- generic [ref=e1429]: 测试用户2 被设为管理员
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "7" [ref=e3299]:
- generic [ref=e1435]: "7"
- cell "2026-03-04 17:26:03" [ref=e3300]:
- generic [ref=e1437]: 2026-03-04 17:26:03
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "122 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:25:54 详情 撤回 删除" [ref=e3301]':
- cell "122" [ref=e3302]:
- generic [ref=e1448]: "122"
- 'cell "? - ID: 0" [ref=e3303]':
- generic [ref=e1451]:
- generic [ref=e1453]: "?"
- generic [ref=e1454]:
- generic [ref=e1455]: "-"
- generic [ref=e1456]: "ID: 0"
- cell "系统消息" [ref=e3304]:
- generic [ref=e1460]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3305]:
- generic [ref=e1463]: 测试用户2 被取消管理员
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "7" [ref=e3306]:
- generic [ref=e1469]: "7"
- cell "2026-03-04 17:25:54" [ref=e3307]:
- generic [ref=e1471]: 2026-03-04 17:25:54
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "121 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:25:50 详情 撤回 删除" [ref=e3308]':
- cell "121" [ref=e3309]:
- generic [ref=e2732]: "121"
- 'cell "? - ID: 0" [ref=e3310]':
- generic [ref=e2735]:
- generic [ref=e2737]: "?"
- generic [ref=e2738]:
- generic [ref=e2739]: "-"
- generic [ref=e2740]: "ID: 0"
- cell "系统消息" [ref=e3311]:
- generic [ref=e2744]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3312]:
- generic [ref=e2747]: 测试用户2 被设为管理员
- cell "正常" [ref=e2748]:
- generic [ref=e2751]: 正常
- cell "7" [ref=e3313]:
- generic [ref=e2753]: "7"
- cell "2026-03-04 17:25:50" [ref=e3314]:
- generic [ref=e2755]: 2026-03-04 17:25:50
- cell "详情 撤回 删除" [ref=e2756]:
- generic [ref=e2757]:
- button "详情" [ref=e2758] [cursor=pointer]:
- generic [ref=e2759]: 详情
- button "撤回" [ref=e2760] [cursor=pointer]:
- generic [ref=e2761]: 撤回
- button "删除" [ref=e2762] [cursor=pointer]:
- generic [ref=e2763]: 删除
- 'row "120 ? - ID: 0 系统消息 卜锦元 被设为管理员 正常 8 2026-03-04 17:21:43 详情 撤回 删除" [ref=e3315]':
- cell "120" [ref=e3316]:
- generic [ref=e2766]: "120"
- 'cell "? - ID: 0" [ref=e3317]':
- generic [ref=e2769]:
- generic [ref=e2771]: "?"
- generic [ref=e2772]:
- generic [ref=e2773]: "-"
- generic [ref=e2774]: "ID: 0"
- cell "系统消息" [ref=e3318]:
- generic [ref=e2778]: 系统消息
- cell "卜锦元 被设为管理员" [ref=e3319]:
- generic [ref=e2781]: 卜锦元 被设为管理员
- cell "正常" [ref=e2782]:
- generic [ref=e2785]: 正常
- cell "8" [ref=e2786]:
- generic [ref=e2787]: "8"
- cell "2026-03-04 17:21:43" [ref=e3320]:
- generic [ref=e2789]: 2026-03-04 17:21:43
- cell "详情 撤回 删除" [ref=e2790]:
- generic [ref=e2791]:
- button "详情" [ref=e2792] [cursor=pointer]:
- generic [ref=e2793]: 详情
- button "撤回" [ref=e2794] [cursor=pointer]:
- generic [ref=e2795]: 撤回
- button "删除" [ref=e2796] [cursor=pointer]:
- generic [ref=e2797]: 删除
- 'row "119 ? - ID: 0 系统消息 测试用户3 被设为管理员 正常 7 2026-03-04 17:21:13 详情 撤回 删除" [ref=e3321]':
- cell "119" [ref=e3322]:
- generic [ref=e2800]: "119"
- 'cell "? - ID: 0" [ref=e3323]':
- generic [ref=e2803]:
- generic [ref=e2805]: "?"
- generic [ref=e2806]:
- generic [ref=e2807]: "-"
- generic [ref=e2808]: "ID: 0"
- cell "系统消息" [ref=e3324]:
- generic [ref=e2812]: 系统消息
- cell "测试用户3 被设为管理员" [ref=e3325]:
- generic [ref=e2815]: 测试用户3 被设为管理员
- cell "正常" [ref=e2816]:
- generic [ref=e2819]: 正常
- cell "7" [ref=e3326]:
- generic [ref=e2821]: "7"
- cell "2026-03-04 17:21:13" [ref=e3327]:
- generic [ref=e2823]: 2026-03-04 17:21:13
- cell "详情 撤回 删除" [ref=e2824]:
- generic [ref=e2825]:
- button "详情" [ref=e2826] [cursor=pointer]:
- generic [ref=e2827]: 详情
- button "撤回" [ref=e2828] [cursor=pointer]:
- generic [ref=e2829]: 撤回
- button "删除" [ref=e2830] [cursor=pointer]:
- generic [ref=e2831]: 删除
- 'row "118 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:21:07 详情 撤回 删除" [ref=e3328]':
- cell "118" [ref=e3329]:
- generic [ref=e2834]: "118"
- 'cell "? - ID: 0" [ref=e2835]':
- generic [ref=e2837]:
- generic [ref=e2839]: "?"
- generic [ref=e2840]:
- generic [ref=e2841]: "-"
- generic [ref=e2842]: "ID: 0"
- cell "系统消息" [ref=e2843]:
- generic [ref=e2846]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3330]:
- generic [ref=e2849]: 测试用户2 被取消管理员
- cell "正常" [ref=e2850]:
- generic [ref=e2853]: 正常
- cell "7" [ref=e3331]:
- generic [ref=e2855]: "7"
- cell "2026-03-04 17:21:07" [ref=e3332]:
- generic [ref=e2857]: 2026-03-04 17:21:07
- cell "详情 撤回 删除" [ref=e2858]:
- generic [ref=e2859]:
- button "详情" [ref=e2860] [cursor=pointer]:
- generic [ref=e2861]: 详情
- button "撤回" [ref=e2862] [cursor=pointer]:
- generic [ref=e2863]: 撤回
- button "删除" [ref=e2864] [cursor=pointer]:
- generic [ref=e2865]: 删除
- 'row "117 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:20:31 详情 撤回 删除" [ref=e3333]':
- cell "117" [ref=e3334]:
- generic [ref=e2868]: "117"
- 'cell "? - ID: 0" [ref=e3335]':
- generic [ref=e2871]:
- generic [ref=e2873]: "?"
- generic [ref=e2874]:
- generic [ref=e2875]: "-"
- generic [ref=e2876]: "ID: 0"
- cell "系统消息" [ref=e3336]:
- generic [ref=e2880]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3337]:
- generic [ref=e2883]: 测试用户2 被设为管理员
- cell "正常" [ref=e2884]:
- generic [ref=e2887]: 正常
- cell "7" [ref=e3338]:
- generic [ref=e2889]: "7"
- cell "2026-03-04 17:20:31" [ref=e3339]:
- generic [ref=e2891]: 2026-03-04 17:20:31
- cell "详情 撤回 删除" [ref=e2892]:
- generic [ref=e2893]:
- button "详情" [ref=e2894] [cursor=pointer]:
- generic [ref=e2895]: 详情
- button "撤回" [ref=e2896] [cursor=pointer]:
- generic [ref=e2897]: 撤回
- button "删除" [ref=e2898] [cursor=pointer]:
- generic [ref=e2899]: 删除
- 'row "116 新 新昵称 ID: 4 文本 112121212 正常 9 2026-03-04 17:09:04 详情 撤回 删除" [ref=e3340]':
- cell "116" [ref=e3341]:
- generic [ref=e2902]: "116"
- 'cell "新 新昵称 ID: 4" [ref=e3342]':
- generic [ref=e2905]:
- generic [ref=e2907]:
- generic [ref=e2908]:
- generic [ref=e2909]: 新昵称
- generic [ref=e2910]: "ID: 4"
- cell "文本" [ref=e2911]:
- generic [ref=e2914]: 文本
- cell "112121212" [ref=e3343]:
- generic [ref=e2917]: "112121212"
- cell "正常" [ref=e2918]:
- generic [ref=e2921]: 正常
- cell "9" [ref=e3344]:
- generic [ref=e2923]: "9"
- cell "2026-03-04 17:09:04" [ref=e3345]:
- generic [ref=e2925]: 2026-03-04 17:09:04
- cell "详情 撤回 删除" [ref=e2926]:
- generic [ref=e2927]:
- button "详情" [ref=e2928] [cursor=pointer]:
- generic [ref=e2929]: 详情
- button "撤回" [ref=e2930] [cursor=pointer]:
- generic [ref=e2931]: 撤回
- button "删除" [ref=e2932] [cursor=pointer]:
- generic [ref=e2933]: 删除
- 'row "115 卜 卜锦元 ID: 7 文本 111 正常 9 2026-03-04 17:08:51 详情 撤回 删除" [ref=e3346]':
- cell "115" [ref=e3347]:
- generic [ref=e2936]: "115"
- 'cell "卜 卜锦元 ID: 7" [ref=e3348]':
- generic [ref=e2939]:
- generic [ref=e2941]:
- generic [ref=e2942]:
- generic [ref=e2943]: 卜锦元
- generic [ref=e2944]: "ID: 7"
- cell "文本" [ref=e2945]:
- generic [ref=e2948]: 文本
- cell "111" [ref=e3349]:
- generic [ref=e2951]: "111"
- cell "正常" [ref=e2952]:
- generic [ref=e2955]: 正常
- cell "9" [ref=e3350]:
- generic [ref=e2957]: "9"
- cell "2026-03-04 17:08:51" [ref=e3351]:
- generic [ref=e2959]: 2026-03-04 17:08:51
- cell "详情 撤回 删除" [ref=e2960]:
- generic [ref=e2961]:
- button "详情" [ref=e2962] [cursor=pointer]:
- generic [ref=e2963]: 详情
- button "撤回" [ref=e2964] [cursor=pointer]:
- generic [ref=e2965]: 撤回
- button "删除" [ref=e2966] [cursor=pointer]:
- generic [ref=e2967]: 删除
- 'row "114 卜 卜锦元 ID: 7 文本 111122fas 正常 9 2026-03-04 17:07:49 详情 撤回 删除" [ref=e3352]':
- cell "114" [ref=e3353]:
- generic [ref=e2970]: "114"
- 'cell "卜 卜锦元 ID: 7" [ref=e3354]':
- generic [ref=e2973]:
- generic [ref=e2975]:
- generic [ref=e2976]:
- generic [ref=e2977]: 卜锦元
- generic [ref=e2978]: "ID: 7"
- cell "文本" [ref=e2979]:
- generic [ref=e2982]: 文本
- cell "111122fas" [ref=e3355]:
- generic [ref=e2985]: 111122fas
- cell "正常" [ref=e2986]:
- generic [ref=e2989]: 正常
- cell "9" [ref=e3356]:
- generic [ref=e2991]: "9"
- cell "2026-03-04 17:07:49" [ref=e3357]:
- generic [ref=e2993]: 2026-03-04 17:07:49
- cell "详情 撤回 删除" [ref=e2994]:
- generic [ref=e2995]:
- button "详情" [ref=e2996] [cursor=pointer]:
- generic [ref=e2997]: 详情
- button "撤回" [ref=e2998] [cursor=pointer]:
- generic [ref=e2999]: 撤回
- button "删除" [ref=e3000] [cursor=pointer]:
- generic [ref=e3001]: 删除
- 'row "113 新 新昵称 ID: 4 文本 测试你是死是1 正常 8 2026-03-04 17:00:57 详情 撤回 删除" [ref=e3358]':
- cell "113" [ref=e3359]:
- generic [ref=e3004]: "113"
- 'cell "新 新昵称 ID: 4" [ref=e3360]':
- generic [ref=e3007]:
- generic [ref=e3009]:
- generic [ref=e3010]:
- generic [ref=e3011]: 新昵称
- generic [ref=e3012]: "ID: 4"
- cell "文本" [ref=e3013]:
- generic [ref=e3016]: 文本
- cell "测试你是死是1" [ref=e3361]:
- generic [ref=e3019]: 测试你是死是1
- cell "正常" [ref=e3020]:
- generic [ref=e3023]: 正常
- cell "8" [ref=e3362]:
- generic [ref=e3025]: "8"
- cell "2026-03-04 17:00:57" [ref=e3363]:
- generic [ref=e3027]: 2026-03-04 17:00:57
- cell "详情 撤回 删除" [ref=e3028]:
- generic [ref=e3029]:
- button "详情" [ref=e3030] [cursor=pointer]:
- generic [ref=e3031]: 详情
- button "撤回" [ref=e3032] [cursor=pointer]:
- generic [ref=e3033]: 撤回
- button "删除" [ref=e3034] [cursor=pointer]:
- generic [ref=e3035]: 删除
- 'row "112 新 新昵称 ID: 4 文本 测试消息发送 正常 9 2026-03-04 16:57:15 详情 撤回 删除" [ref=e3364]':
- cell "112" [ref=e3365]:
- generic [ref=e3038]: "112"
- 'cell "新 新昵称 ID: 4" [ref=e3366]':
- generic [ref=e3041]:
- generic [ref=e3043]:
- generic [ref=e3044]:
- generic [ref=e3045]: 新昵称
- generic [ref=e3046]: "ID: 4"
- cell "文本" [ref=e3047]:
- generic [ref=e3050]: 文本
- cell "测试消息发送" [ref=e3367]:
- generic [ref=e3053]: 测试消息发送
- cell "正常" [ref=e3054]:
- generic [ref=e3057]: 正常
- cell "9" [ref=e3368]:
- generic [ref=e3059]: "9"
- cell "2026-03-04 16:57:15" [ref=e3369]:
- generic [ref=e3061]: 2026-03-04 16:57:15
- cell "详情 撤回 删除" [ref=e3062]:
- generic [ref=e3063]:
- button "详情" [ref=e3064] [cursor=pointer]:
- generic [ref=e3065]: 详情
- button "撤回" [ref=e3066] [cursor=pointer]:
- generic [ref=e3067]: 撤回
- button "删除" [ref=e3068] [cursor=pointer]:
- generic [ref=e3069]: 删除
- 'row "111 新 新昵称 ID: 4 文本 21433 正常 9 2026-03-04 16:54:46 详情 撤回 删除" [ref=e3370]':
- cell "111" [ref=e3371]:
- generic [ref=e3072]: "111"
- 'cell "新 新昵称 ID: 4" [ref=e3073]':
- generic [ref=e3075]:
- generic [ref=e3077]:
- generic [ref=e3078]:
- generic [ref=e3079]: 新昵称
- generic [ref=e3080]: "ID: 4"
- cell "文本" [ref=e3081]:
- generic [ref=e3084]: 文本
- cell "21433" [ref=e3372]:
- generic [ref=e3087]: "21433"
- cell "正常" [ref=e3088]:
- generic [ref=e3091]: 正常
- cell "9" [ref=e3373]:
- generic [ref=e3093]: "9"
- cell "2026-03-04 16:54:46" [ref=e3374]:
- generic [ref=e3095]: 2026-03-04 16:54:46
- cell "详情 撤回 删除" [ref=e3096]:
- generic [ref=e3097]:
- button "详情" [ref=e3098] [cursor=pointer]:
- generic [ref=e3099]: 详情
- button "撤回" [ref=e3100] [cursor=pointer]:
- generic [ref=e3101]: 撤回
- button "删除" [ref=e3102] [cursor=pointer]:
- generic [ref=e3103]: 删除
- 'row "110 新 新昵称 ID: 4 文本 1111 正常 8 2026-03-04 16:54:36 详情 撤回 删除" [ref=e3375]':
- cell "110" [ref=e3376]:
- generic [ref=e3106]: "110"
- 'cell "新 新昵称 ID: 4" [ref=e3377]':
- generic [ref=e3109]:
- generic [ref=e3111]:
- generic [ref=e3112]:
- generic [ref=e3113]: 新昵称
- generic [ref=e3114]: "ID: 4"
- cell "文本" [ref=e3378]:
- generic [ref=e3118]: 文本
- cell "1111" [ref=e3379]:
- generic [ref=e3121]: "1111"
- cell "正常" [ref=e3122]:
- generic [ref=e3125]: 正常
- cell "8" [ref=e3126]:
- generic [ref=e3127]: "8"
- cell "2026-03-04 16:54:36" [ref=e3380]:
- generic [ref=e3129]: 2026-03-04 16:54:36
- cell "详情 撤回 删除" [ref=e3130]:
- generic [ref=e3131]:
- button "详情" [ref=e3132] [cursor=pointer]:
- generic [ref=e3133]: 详情
- button "撤回" [ref=e3134] [cursor=pointer]:
- generic [ref=e3135]: 撤回
- button "删除" [ref=e3136] [cursor=pointer]:
- generic [ref=e3137]: 删除
- 'row "109 新 新昵称 ID: 4 文本 测试哈哈 正常 8 2026-03-04 16:54:25 详情 撤回 删除" [ref=e3381]':
- cell "109" [ref=e3382]:
- generic [ref=e3140]: "109"
- 'cell "新 新昵称 ID: 4" [ref=e3141]':
- generic [ref=e3143]:
- generic [ref=e3145]:
- generic [ref=e3146]:
- generic [ref=e3147]: 新昵称
- generic [ref=e3148]: "ID: 4"
- cell "文本" [ref=e3149]:
- generic [ref=e3152]: 文本
- cell "测试哈哈" [ref=e3383]:
- generic [ref=e3155]: 测试哈哈
- cell "正常" [ref=e3156]:
- generic [ref=e3159]: 正常
- cell "8" [ref=e3160]:
- generic [ref=e3161]: "8"
- cell "2026-03-04 16:54:25" [ref=e3384]:
- generic [ref=e3163]: 2026-03-04 16:54:25
- cell "详情 撤回 删除" [ref=e3164]:
- generic [ref=e3165]:
- button "详情" [ref=e3166] [cursor=pointer]:
- generic [ref=e3167]: 详情
- button "撤回" [ref=e3168] [cursor=pointer]:
- generic [ref=e3169]: 撤回
- button "删除" [ref=e3170] [cursor=pointer]:
- generic [ref=e3171]: 删除
- 'row "108 卜 卜锦元 ID: 7 文本 咋子爱爱在 正常 9 2026-03-04 16:54:12 详情 撤回 删除" [ref=e3385]':
- cell "108" [ref=e3386]:
- generic [ref=e3174]: "108"
- 'cell "卜 卜锦元 ID: 7" [ref=e3175]':
- generic [ref=e3177]:
- generic [ref=e3179]:
- generic [ref=e3180]:
- generic [ref=e3181]: 卜锦元
- generic [ref=e3182]: "ID: 7"
- cell "文本" [ref=e3183]:
- generic [ref=e3186]: 文本
- cell "咋子爱爱在" [ref=e3387]:
- generic [ref=e3189]: 咋子爱爱在
- cell "正常" [ref=e3190]:
- generic [ref=e3193]: 正常
- cell "9" [ref=e3388]:
- generic [ref=e3195]: "9"
- cell "2026-03-04 16:54:12" [ref=e3389]:
- generic [ref=e3197]: 2026-03-04 16:54:12
- cell "详情 撤回 删除" [ref=e3198]:
- generic [ref=e3199]:
- button "详情" [ref=e3200] [cursor=pointer]:
- generic [ref=e3201]: 详情
- button "撤回" [ref=e3202] [cursor=pointer]:
- generic [ref=e3203]: 撤回
- button "删除" [ref=e3204] [cursor=pointer]:
- generic [ref=e3205]: 删除
- 'row "107 卜 卜锦元 ID: 7 文本 在测试 正常 9 2026-03-04 16:54:02 详情 撤回 删除" [ref=e3390]':
- cell "107" [ref=e3391]:
- generic [ref=e3208]: "107"
- 'cell "卜 卜锦元 ID: 7" [ref=e3209]':
- generic [ref=e3211]:
- generic [ref=e3213]:
- generic [ref=e3214]:
- generic [ref=e3215]: 卜锦元
- generic [ref=e3216]: "ID: 7"
- cell "文本" [ref=e3217]:
- generic [ref=e3220]: 文本
- cell "在测试" [ref=e3392]:
- generic [ref=e3223]: 在测试
- cell "正常" [ref=e3224]:
- generic [ref=e3227]: 正常
- cell "9" [ref=e3393]:
- generic [ref=e3229]: "9"
- cell "2026-03-04 16:54:02" [ref=e3394]:
- generic [ref=e3231]: 2026-03-04 16:54:02
- cell "详情 撤回 删除" [ref=e3232]:
- generic [ref=e3233]:
- button "详情" [ref=e3234] [cursor=pointer]:
- generic [ref=e3235]: 详情
- button "撤回" [ref=e3236] [cursor=pointer]:
- generic [ref=e3237]: 撤回
- button "删除" [ref=e3238] [cursor=pointer]:
- generic [ref=e3239]: 删除
- 'row "106 卜 卜锦元 ID: 7 文本 哈哈,再次测试 正常 9 2026-03-04 16:53:53 详情 撤回 删除" [ref=e3395]':
- cell "106" [ref=e3396]:
- generic [ref=e3242]: "106"
- 'cell "卜 卜锦元 ID: 7" [ref=e3243]':
- generic [ref=e3245]:
- generic [ref=e3247]:
- generic [ref=e3248]:
- generic [ref=e3249]: 卜锦元
- generic [ref=e3250]: "ID: 7"
- cell "文本" [ref=e3251]:
- generic [ref=e3254]: 文本
- cell "哈哈,再次测试" [ref=e3397]:
- generic [ref=e3257]: 哈哈,再次测试
- cell "正常" [ref=e3258]:
- generic [ref=e3261]: 正常
- cell "9" [ref=e3398]:
- generic [ref=e3263]: "9"
- cell "2026-03-04 16:53:53" [ref=e3399]:
- generic [ref=e3265]: 2026-03-04 16:53:53
- cell "详情 撤回 删除" [ref=e3266]:
- generic [ref=e3267]:
- button "详情" [ref=e3268] [cursor=pointer]:
- generic [ref=e3269]: 详情
- button "撤回" [ref=e3270] [cursor=pointer]:
- generic [ref=e3271]: 撤回
- button "删除" [ref=e3272] [cursor=pointer]:
- generic [ref=e3273]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [ref=e1323] [cursor=pointer]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325] [cursor=pointer]: "1"
- listitem "第 2 页" [ref=e3274]: "2"
- listitem "第 3 页" [ref=e3275] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e3276] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e3277] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e3278] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e3279] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e3280] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "2"
- generic [ref=e1332]:
- dialog "删除消息" [ref=e3431]:
- generic [ref=e3432]:
- generic [ref=e3433]:
- generic [ref=e3434]: 删除消息
- button "关闭此对话框" [ref=e3435] [cursor=pointer]:
- img [ref=e3437]
- generic [ref=e3440]:
- img [ref=e3442]
- paragraph [ref=e3445]: "确定要删除消息 #125 吗?"
- generic [ref=e3446]:
- button "取消" [ref=e3447] [cursor=pointer]:
- generic [ref=e3448]: 取消
- button "确定删除" [active] [ref=e3449] [cursor=pointer]:
- generic [ref=e3450]: 确定删除

View File

@@ -0,0 +1,670 @@
- generic [active] [ref=e1]:
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e1204]:
- heading "消息管理" [level=2] [ref=e1206]
- generic [ref=e1209]:
- generic [ref=e1210]:
- generic [ref=e1211]: 关键词
- generic [ref=e1214]:
- img [ref=e1217]
- textbox "关键词" [ref=e1219]:
- /placeholder: 搜索消息内容
- generic [ref=e1220]:
- generic [ref=e1221]: 类型
- generic [ref=e1224] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e1226]
- generic [ref=e1227]: 全部
- img [ref=e2294]
- generic [ref=e1232]:
- generic [ref=e1233]: 状态
- generic [ref=e1236] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e1238]
- generic [ref=e1239]: 全部
- img [ref=e1242]
- generic [ref=e1244]:
- generic [ref=e1245]: 发送者ID
- spinbutton "发送者ID" [ref=e1249]
- generic [ref=e1250]:
- generic [ref=e1251]: 时间范围
- generic [ref=e1253]:
- img [ref=e1255]
- combobox "时间范围" [ref=e1257]
- generic [ref=e1258]:
- combobox "结束日期" [ref=e1259]
- generic [ref=e1261]:
- button "搜索" [ref=e1262] [cursor=pointer]:
- generic [ref=e1263]: 搜索
- button "重置" [ref=e1264] [cursor=pointer]:
- generic [ref=e1265]: 重置
- generic [ref=e1267]:
- generic [ref=e1269]:
- table [ref=e1271]:
- rowgroup [ref=e1281]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e1282]:
- columnheader "ID" [ref=e1283]:
- generic [ref=e1284]: ID
- columnheader "发送者" [ref=e1285]:
- generic [ref=e1286]: 发送者
- columnheader "类型" [ref=e1287]:
- generic [ref=e1288]: 类型
- columnheader "内容" [ref=e1289]:
- generic [ref=e1290]: 内容
- columnheader "状态" [ref=e1291]:
- generic [ref=e1292]: 状态
- columnheader "会话ID" [ref=e1293]:
- generic [ref=e1294]: 会话ID
- columnheader "发送时间" [ref=e1295]:
- generic [ref=e1296]: 发送时间
- columnheader "操作" [ref=e1297]:
- generic [ref=e1298]: 操作
- table [ref=e1333]:
- rowgroup [ref=e1343]:
- 'row "125 新 新昵称 ID: 4 文本 [已删除] 已删除 8 2026-03-04 18:06:48 详情" [ref=e3451]':
- cell "125" [ref=e3282]:
- generic [ref=e1346]: "125"
- 'cell "新 新昵称 ID: 4" [ref=e3283]':
- generic [ref=e1349]:
- generic [ref=e1351]:
- generic [ref=e1352]:
- generic [ref=e1353]: 新昵称
- generic [ref=e1354]: "ID: 4"
- cell "文本" [ref=e2401]:
- generic [ref=e1358]: 文本
- cell "[已删除]" [ref=e3452]:
- generic [ref=e1361]: "[已删除]"
- cell "已删除" [ref=e3453]:
- generic [ref=e1365]: 已删除
- cell "8" [ref=e3285]:
- generic [ref=e1367]: "8"
- cell "2026-03-04 18:06:48" [ref=e3286]:
- generic [ref=e1369]: 2026-03-04 18:06:48
- cell "详情" [ref=e3454]:
- button "详情" [ref=e1372] [cursor=pointer]:
- generic [ref=e1373]: 详情
- 'row "124 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:26:07 详情 撤回 删除" [ref=e3287]':
- cell "124" [ref=e3288]:
- generic [ref=e1380]: "124"
- 'cell "? - ID: 0" [ref=e3289]':
- generic [ref=e1383]:
- generic [ref=e1385]: "?"
- generic [ref=e1386]:
- generic [ref=e1387]: "-"
- generic [ref=e1388]: "ID: 0"
- cell "系统消息" [ref=e3290]:
- generic [ref=e1392]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3291]:
- generic [ref=e1395]: 测试用户2 被取消管理员
- cell "正常" [ref=e1396]:
- generic [ref=e1399]: 正常
- cell "7" [ref=e3292]:
- generic [ref=e1401]: "7"
- cell "2026-03-04 17:26:07" [ref=e3293]:
- generic [ref=e1403]: 2026-03-04 17:26:07
- cell "详情 撤回 删除" [ref=e1404]:
- generic [ref=e1405]:
- button "详情" [ref=e1406] [cursor=pointer]:
- generic [ref=e1407]: 详情
- button "撤回" [ref=e1408] [cursor=pointer]:
- generic [ref=e1409]: 撤回
- button "删除" [ref=e1410] [cursor=pointer]:
- generic [ref=e1411]: 删除
- 'row "123 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:26:03 详情 撤回 删除" [ref=e3294]':
- cell "123" [ref=e3295]:
- generic [ref=e1414]: "123"
- 'cell "? - ID: 0" [ref=e3296]':
- generic [ref=e1417]:
- generic [ref=e1419]: "?"
- generic [ref=e1420]:
- generic [ref=e1421]: "-"
- generic [ref=e1422]: "ID: 0"
- cell "系统消息" [ref=e3297]:
- generic [ref=e1426]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3298]:
- generic [ref=e1429]: 测试用户2 被设为管理员
- cell "正常" [ref=e1430]:
- generic [ref=e1433]: 正常
- cell "7" [ref=e3299]:
- generic [ref=e1435]: "7"
- cell "2026-03-04 17:26:03" [ref=e3300]:
- generic [ref=e1437]: 2026-03-04 17:26:03
- cell "详情 撤回 删除" [ref=e1438]:
- generic [ref=e1439]:
- button "详情" [ref=e1440] [cursor=pointer]:
- generic [ref=e1441]: 详情
- button "撤回" [ref=e1442] [cursor=pointer]:
- generic [ref=e1443]: 撤回
- button "删除" [ref=e1444] [cursor=pointer]:
- generic [ref=e1445]: 删除
- 'row "122 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:25:54 详情 撤回 删除" [ref=e3301]':
- cell "122" [ref=e3302]:
- generic [ref=e1448]: "122"
- 'cell "? - ID: 0" [ref=e3303]':
- generic [ref=e1451]:
- generic [ref=e1453]: "?"
- generic [ref=e1454]:
- generic [ref=e1455]: "-"
- generic [ref=e1456]: "ID: 0"
- cell "系统消息" [ref=e3304]:
- generic [ref=e1460]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3305]:
- generic [ref=e1463]: 测试用户2 被取消管理员
- cell "正常" [ref=e1464]:
- generic [ref=e1467]: 正常
- cell "7" [ref=e3306]:
- generic [ref=e1469]: "7"
- cell "2026-03-04 17:25:54" [ref=e3307]:
- generic [ref=e1471]: 2026-03-04 17:25:54
- cell "详情 撤回 删除" [ref=e1472]:
- generic [ref=e1473]:
- button "详情" [ref=e1474] [cursor=pointer]:
- generic [ref=e1475]: 详情
- button "撤回" [ref=e1476] [cursor=pointer]:
- generic [ref=e1477]: 撤回
- button "删除" [ref=e1478] [cursor=pointer]:
- generic [ref=e1479]: 删除
- 'row "121 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:25:50 详情 撤回 删除" [ref=e3308]':
- cell "121" [ref=e3309]:
- generic [ref=e2732]: "121"
- 'cell "? - ID: 0" [ref=e3310]':
- generic [ref=e2735]:
- generic [ref=e2737]: "?"
- generic [ref=e2738]:
- generic [ref=e2739]: "-"
- generic [ref=e2740]: "ID: 0"
- cell "系统消息" [ref=e3311]:
- generic [ref=e2744]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3312]:
- generic [ref=e2747]: 测试用户2 被设为管理员
- cell "正常" [ref=e2748]:
- generic [ref=e2751]: 正常
- cell "7" [ref=e3313]:
- generic [ref=e2753]: "7"
- cell "2026-03-04 17:25:50" [ref=e3314]:
- generic [ref=e2755]: 2026-03-04 17:25:50
- cell "详情 撤回 删除" [ref=e2756]:
- generic [ref=e2757]:
- button "详情" [ref=e2758] [cursor=pointer]:
- generic [ref=e2759]: 详情
- button "撤回" [ref=e2760] [cursor=pointer]:
- generic [ref=e2761]: 撤回
- button "删除" [ref=e2762] [cursor=pointer]:
- generic [ref=e2763]: 删除
- 'row "120 ? - ID: 0 系统消息 卜锦元 被设为管理员 正常 8 2026-03-04 17:21:43 详情 撤回 删除" [ref=e3315]':
- cell "120" [ref=e3316]:
- generic [ref=e2766]: "120"
- 'cell "? - ID: 0" [ref=e3317]':
- generic [ref=e2769]:
- generic [ref=e2771]: "?"
- generic [ref=e2772]:
- generic [ref=e2773]: "-"
- generic [ref=e2774]: "ID: 0"
- cell "系统消息" [ref=e3318]:
- generic [ref=e2778]: 系统消息
- cell "卜锦元 被设为管理员" [ref=e3319]:
- generic [ref=e2781]: 卜锦元 被设为管理员
- cell "正常" [ref=e2782]:
- generic [ref=e2785]: 正常
- cell "8" [ref=e2786]:
- generic [ref=e2787]: "8"
- cell "2026-03-04 17:21:43" [ref=e3320]:
- generic [ref=e2789]: 2026-03-04 17:21:43
- cell "详情 撤回 删除" [ref=e2790]:
- generic [ref=e2791]:
- button "详情" [ref=e2792] [cursor=pointer]:
- generic [ref=e2793]: 详情
- button "撤回" [ref=e2794] [cursor=pointer]:
- generic [ref=e2795]: 撤回
- button "删除" [ref=e2796] [cursor=pointer]:
- generic [ref=e2797]: 删除
- 'row "119 ? - ID: 0 系统消息 测试用户3 被设为管理员 正常 7 2026-03-04 17:21:13 详情 撤回 删除" [ref=e3321]':
- cell "119" [ref=e3322]:
- generic [ref=e2800]: "119"
- 'cell "? - ID: 0" [ref=e3323]':
- generic [ref=e2803]:
- generic [ref=e2805]: "?"
- generic [ref=e2806]:
- generic [ref=e2807]: "-"
- generic [ref=e2808]: "ID: 0"
- cell "系统消息" [ref=e3324]:
- generic [ref=e2812]: 系统消息
- cell "测试用户3 被设为管理员" [ref=e3325]:
- generic [ref=e2815]: 测试用户3 被设为管理员
- cell "正常" [ref=e2816]:
- generic [ref=e2819]: 正常
- cell "7" [ref=e3326]:
- generic [ref=e2821]: "7"
- cell "2026-03-04 17:21:13" [ref=e3327]:
- generic [ref=e2823]: 2026-03-04 17:21:13
- cell "详情 撤回 删除" [ref=e2824]:
- generic [ref=e2825]:
- button "详情" [ref=e2826] [cursor=pointer]:
- generic [ref=e2827]: 详情
- button "撤回" [ref=e2828] [cursor=pointer]:
- generic [ref=e2829]: 撤回
- button "删除" [ref=e2830] [cursor=pointer]:
- generic [ref=e2831]: 删除
- 'row "118 ? - ID: 0 系统消息 测试用户2 被取消管理员 正常 7 2026-03-04 17:21:07 详情 撤回 删除" [ref=e3328]':
- cell "118" [ref=e3329]:
- generic [ref=e2834]: "118"
- 'cell "? - ID: 0" [ref=e2835]':
- generic [ref=e2837]:
- generic [ref=e2839]: "?"
- generic [ref=e2840]:
- generic [ref=e2841]: "-"
- generic [ref=e2842]: "ID: 0"
- cell "系统消息" [ref=e2843]:
- generic [ref=e2846]: 系统消息
- cell "测试用户2 被取消管理员" [ref=e3330]:
- generic [ref=e2849]: 测试用户2 被取消管理员
- cell "正常" [ref=e2850]:
- generic [ref=e2853]: 正常
- cell "7" [ref=e3331]:
- generic [ref=e2855]: "7"
- cell "2026-03-04 17:21:07" [ref=e3332]:
- generic [ref=e2857]: 2026-03-04 17:21:07
- cell "详情 撤回 删除" [ref=e2858]:
- generic [ref=e2859]:
- button "详情" [ref=e2860] [cursor=pointer]:
- generic [ref=e2861]: 详情
- button "撤回" [ref=e2862] [cursor=pointer]:
- generic [ref=e2863]: 撤回
- button "删除" [ref=e2864] [cursor=pointer]:
- generic [ref=e2865]: 删除
- 'row "117 ? - ID: 0 系统消息 测试用户2 被设为管理员 正常 7 2026-03-04 17:20:31 详情 撤回 删除" [ref=e3333]':
- cell "117" [ref=e3334]:
- generic [ref=e2868]: "117"
- 'cell "? - ID: 0" [ref=e3335]':
- generic [ref=e2871]:
- generic [ref=e2873]: "?"
- generic [ref=e2874]:
- generic [ref=e2875]: "-"
- generic [ref=e2876]: "ID: 0"
- cell "系统消息" [ref=e3336]:
- generic [ref=e2880]: 系统消息
- cell "测试用户2 被设为管理员" [ref=e3337]:
- generic [ref=e2883]: 测试用户2 被设为管理员
- cell "正常" [ref=e2884]:
- generic [ref=e2887]: 正常
- cell "7" [ref=e3338]:
- generic [ref=e2889]: "7"
- cell "2026-03-04 17:20:31" [ref=e3339]:
- generic [ref=e2891]: 2026-03-04 17:20:31
- cell "详情 撤回 删除" [ref=e2892]:
- generic [ref=e2893]:
- button "详情" [ref=e2894] [cursor=pointer]:
- generic [ref=e2895]: 详情
- button "撤回" [ref=e2896] [cursor=pointer]:
- generic [ref=e2897]: 撤回
- button "删除" [ref=e2898] [cursor=pointer]:
- generic [ref=e2899]: 删除
- 'row "116 新 新昵称 ID: 4 文本 112121212 正常 9 2026-03-04 17:09:04 详情 撤回 删除" [ref=e3340]':
- cell "116" [ref=e3341]:
- generic [ref=e2902]: "116"
- 'cell "新 新昵称 ID: 4" [ref=e3342]':
- generic [ref=e2905]:
- generic [ref=e2907]:
- generic [ref=e2908]:
- generic [ref=e2909]: 新昵称
- generic [ref=e2910]: "ID: 4"
- cell "文本" [ref=e2911]:
- generic [ref=e2914]: 文本
- cell "112121212" [ref=e3343]:
- generic [ref=e2917]: "112121212"
- cell "正常" [ref=e2918]:
- generic [ref=e2921]: 正常
- cell "9" [ref=e3344]:
- generic [ref=e2923]: "9"
- cell "2026-03-04 17:09:04" [ref=e3345]:
- generic [ref=e2925]: 2026-03-04 17:09:04
- cell "详情 撤回 删除" [ref=e2926]:
- generic [ref=e2927]:
- button "详情" [ref=e2928] [cursor=pointer]:
- generic [ref=e2929]: 详情
- button "撤回" [ref=e2930] [cursor=pointer]:
- generic [ref=e2931]: 撤回
- button "删除" [ref=e2932] [cursor=pointer]:
- generic [ref=e2933]: 删除
- 'row "115 卜 卜锦元 ID: 7 文本 111 正常 9 2026-03-04 17:08:51 详情 撤回 删除" [ref=e3346]':
- cell "115" [ref=e3347]:
- generic [ref=e2936]: "115"
- 'cell "卜 卜锦元 ID: 7" [ref=e3348]':
- generic [ref=e2939]:
- generic [ref=e2941]:
- generic [ref=e2942]:
- generic [ref=e2943]: 卜锦元
- generic [ref=e2944]: "ID: 7"
- cell "文本" [ref=e2945]:
- generic [ref=e2948]: 文本
- cell "111" [ref=e3349]:
- generic [ref=e2951]: "111"
- cell "正常" [ref=e2952]:
- generic [ref=e2955]: 正常
- cell "9" [ref=e3350]:
- generic [ref=e2957]: "9"
- cell "2026-03-04 17:08:51" [ref=e3351]:
- generic [ref=e2959]: 2026-03-04 17:08:51
- cell "详情 撤回 删除" [ref=e2960]:
- generic [ref=e2961]:
- button "详情" [ref=e2962] [cursor=pointer]:
- generic [ref=e2963]: 详情
- button "撤回" [ref=e2964] [cursor=pointer]:
- generic [ref=e2965]: 撤回
- button "删除" [ref=e2966] [cursor=pointer]:
- generic [ref=e2967]: 删除
- 'row "114 卜 卜锦元 ID: 7 文本 111122fas 正常 9 2026-03-04 17:07:49 详情 撤回 删除" [ref=e3352]':
- cell "114" [ref=e3353]:
- generic [ref=e2970]: "114"
- 'cell "卜 卜锦元 ID: 7" [ref=e3354]':
- generic [ref=e2973]:
- generic [ref=e2975]:
- generic [ref=e2976]:
- generic [ref=e2977]: 卜锦元
- generic [ref=e2978]: "ID: 7"
- cell "文本" [ref=e2979]:
- generic [ref=e2982]: 文本
- cell "111122fas" [ref=e3355]:
- generic [ref=e2985]: 111122fas
- cell "正常" [ref=e2986]:
- generic [ref=e2989]: 正常
- cell "9" [ref=e3356]:
- generic [ref=e2991]: "9"
- cell "2026-03-04 17:07:49" [ref=e3357]:
- generic [ref=e2993]: 2026-03-04 17:07:49
- cell "详情 撤回 删除" [ref=e2994]:
- generic [ref=e2995]:
- button "详情" [ref=e2996] [cursor=pointer]:
- generic [ref=e2997]: 详情
- button "撤回" [ref=e2998] [cursor=pointer]:
- generic [ref=e2999]: 撤回
- button "删除" [ref=e3000] [cursor=pointer]:
- generic [ref=e3001]: 删除
- 'row "113 新 新昵称 ID: 4 文本 测试你是死是1 正常 8 2026-03-04 17:00:57 详情 撤回 删除" [ref=e3358]':
- cell "113" [ref=e3359]:
- generic [ref=e3004]: "113"
- 'cell "新 新昵称 ID: 4" [ref=e3360]':
- generic [ref=e3007]:
- generic [ref=e3009]:
- generic [ref=e3010]:
- generic [ref=e3011]: 新昵称
- generic [ref=e3012]: "ID: 4"
- cell "文本" [ref=e3013]:
- generic [ref=e3016]: 文本
- cell "测试你是死是1" [ref=e3361]:
- generic [ref=e3019]: 测试你是死是1
- cell "正常" [ref=e3020]:
- generic [ref=e3023]: 正常
- cell "8" [ref=e3362]:
- generic [ref=e3025]: "8"
- cell "2026-03-04 17:00:57" [ref=e3363]:
- generic [ref=e3027]: 2026-03-04 17:00:57
- cell "详情 撤回 删除" [ref=e3028]:
- generic [ref=e3029]:
- button "详情" [ref=e3030] [cursor=pointer]:
- generic [ref=e3031]: 详情
- button "撤回" [ref=e3032] [cursor=pointer]:
- generic [ref=e3033]: 撤回
- button "删除" [ref=e3034] [cursor=pointer]:
- generic [ref=e3035]: 删除
- 'row "112 新 新昵称 ID: 4 文本 测试消息发送 正常 9 2026-03-04 16:57:15 详情 撤回 删除" [ref=e3364]':
- cell "112" [ref=e3365]:
- generic [ref=e3038]: "112"
- 'cell "新 新昵称 ID: 4" [ref=e3366]':
- generic [ref=e3041]:
- generic [ref=e3043]:
- generic [ref=e3044]:
- generic [ref=e3045]: 新昵称
- generic [ref=e3046]: "ID: 4"
- cell "文本" [ref=e3047]:
- generic [ref=e3050]: 文本
- cell "测试消息发送" [ref=e3367]:
- generic [ref=e3053]: 测试消息发送
- cell "正常" [ref=e3054]:
- generic [ref=e3057]: 正常
- cell "9" [ref=e3368]:
- generic [ref=e3059]: "9"
- cell "2026-03-04 16:57:15" [ref=e3369]:
- generic [ref=e3061]: 2026-03-04 16:57:15
- cell "详情 撤回 删除" [ref=e3062]:
- generic [ref=e3063]:
- button "详情" [ref=e3064] [cursor=pointer]:
- generic [ref=e3065]: 详情
- button "撤回" [ref=e3066] [cursor=pointer]:
- generic [ref=e3067]: 撤回
- button "删除" [ref=e3068] [cursor=pointer]:
- generic [ref=e3069]: 删除
- 'row "111 新 新昵称 ID: 4 文本 21433 正常 9 2026-03-04 16:54:46 详情 撤回 删除" [ref=e3370]':
- cell "111" [ref=e3371]:
- generic [ref=e3072]: "111"
- 'cell "新 新昵称 ID: 4" [ref=e3073]':
- generic [ref=e3075]:
- generic [ref=e3077]:
- generic [ref=e3078]:
- generic [ref=e3079]: 新昵称
- generic [ref=e3080]: "ID: 4"
- cell "文本" [ref=e3081]:
- generic [ref=e3084]: 文本
- cell "21433" [ref=e3372]:
- generic [ref=e3087]: "21433"
- cell "正常" [ref=e3088]:
- generic [ref=e3091]: 正常
- cell "9" [ref=e3373]:
- generic [ref=e3093]: "9"
- cell "2026-03-04 16:54:46" [ref=e3374]:
- generic [ref=e3095]: 2026-03-04 16:54:46
- cell "详情 撤回 删除" [ref=e3096]:
- generic [ref=e3097]:
- button "详情" [ref=e3098] [cursor=pointer]:
- generic [ref=e3099]: 详情
- button "撤回" [ref=e3100] [cursor=pointer]:
- generic [ref=e3101]: 撤回
- button "删除" [ref=e3102] [cursor=pointer]:
- generic [ref=e3103]: 删除
- 'row "110 新 新昵称 ID: 4 文本 1111 正常 8 2026-03-04 16:54:36 详情 撤回 删除" [ref=e3375]':
- cell "110" [ref=e3376]:
- generic [ref=e3106]: "110"
- 'cell "新 新昵称 ID: 4" [ref=e3377]':
- generic [ref=e3109]:
- generic [ref=e3111]:
- generic [ref=e3112]:
- generic [ref=e3113]: 新昵称
- generic [ref=e3114]: "ID: 4"
- cell "文本" [ref=e3378]:
- generic [ref=e3118]: 文本
- cell "1111" [ref=e3379]:
- generic [ref=e3121]: "1111"
- cell "正常" [ref=e3122]:
- generic [ref=e3125]: 正常
- cell "8" [ref=e3126]:
- generic [ref=e3127]: "8"
- cell "2026-03-04 16:54:36" [ref=e3380]:
- generic [ref=e3129]: 2026-03-04 16:54:36
- cell "详情 撤回 删除" [ref=e3130]:
- generic [ref=e3131]:
- button "详情" [ref=e3132] [cursor=pointer]:
- generic [ref=e3133]: 详情
- button "撤回" [ref=e3134] [cursor=pointer]:
- generic [ref=e3135]: 撤回
- button "删除" [ref=e3136] [cursor=pointer]:
- generic [ref=e3137]: 删除
- 'row "109 新 新昵称 ID: 4 文本 测试哈哈 正常 8 2026-03-04 16:54:25 详情 撤回 删除" [ref=e3381]':
- cell "109" [ref=e3382]:
- generic [ref=e3140]: "109"
- 'cell "新 新昵称 ID: 4" [ref=e3141]':
- generic [ref=e3143]:
- generic [ref=e3145]:
- generic [ref=e3146]:
- generic [ref=e3147]: 新昵称
- generic [ref=e3148]: "ID: 4"
- cell "文本" [ref=e3149]:
- generic [ref=e3152]: 文本
- cell "测试哈哈" [ref=e3383]:
- generic [ref=e3155]: 测试哈哈
- cell "正常" [ref=e3156]:
- generic [ref=e3159]: 正常
- cell "8" [ref=e3160]:
- generic [ref=e3161]: "8"
- cell "2026-03-04 16:54:25" [ref=e3384]:
- generic [ref=e3163]: 2026-03-04 16:54:25
- cell "详情 撤回 删除" [ref=e3164]:
- generic [ref=e3165]:
- button "详情" [ref=e3166] [cursor=pointer]:
- generic [ref=e3167]: 详情
- button "撤回" [ref=e3168] [cursor=pointer]:
- generic [ref=e3169]: 撤回
- button "删除" [ref=e3170] [cursor=pointer]:
- generic [ref=e3171]: 删除
- 'row "108 卜 卜锦元 ID: 7 文本 咋子爱爱在 正常 9 2026-03-04 16:54:12 详情 撤回 删除" [ref=e3385]':
- cell "108" [ref=e3386]:
- generic [ref=e3174]: "108"
- 'cell "卜 卜锦元 ID: 7" [ref=e3175]':
- generic [ref=e3177]:
- generic [ref=e3179]:
- generic [ref=e3180]:
- generic [ref=e3181]: 卜锦元
- generic [ref=e3182]: "ID: 7"
- cell "文本" [ref=e3183]:
- generic [ref=e3186]: 文本
- cell "咋子爱爱在" [ref=e3387]:
- generic [ref=e3189]: 咋子爱爱在
- cell "正常" [ref=e3190]:
- generic [ref=e3193]: 正常
- cell "9" [ref=e3388]:
- generic [ref=e3195]: "9"
- cell "2026-03-04 16:54:12" [ref=e3389]:
- generic [ref=e3197]: 2026-03-04 16:54:12
- cell "详情 撤回 删除" [ref=e3198]:
- generic [ref=e3199]:
- button "详情" [ref=e3200] [cursor=pointer]:
- generic [ref=e3201]: 详情
- button "撤回" [ref=e3202] [cursor=pointer]:
- generic [ref=e3203]: 撤回
- button "删除" [ref=e3204] [cursor=pointer]:
- generic [ref=e3205]: 删除
- 'row "107 卜 卜锦元 ID: 7 文本 在测试 正常 9 2026-03-04 16:54:02 详情 撤回 删除" [ref=e3390]':
- cell "107" [ref=e3391]:
- generic [ref=e3208]: "107"
- 'cell "卜 卜锦元 ID: 7" [ref=e3209]':
- generic [ref=e3211]:
- generic [ref=e3213]:
- generic [ref=e3214]:
- generic [ref=e3215]: 卜锦元
- generic [ref=e3216]: "ID: 7"
- cell "文本" [ref=e3217]:
- generic [ref=e3220]: 文本
- cell "在测试" [ref=e3392]:
- generic [ref=e3223]: 在测试
- cell "正常" [ref=e3224]:
- generic [ref=e3227]: 正常
- cell "9" [ref=e3393]:
- generic [ref=e3229]: "9"
- cell "2026-03-04 16:54:02" [ref=e3394]:
- generic [ref=e3231]: 2026-03-04 16:54:02
- cell "详情 撤回 删除" [ref=e3232]:
- generic [ref=e3233]:
- button "详情" [ref=e3234] [cursor=pointer]:
- generic [ref=e3235]: 详情
- button "撤回" [ref=e3236] [cursor=pointer]:
- generic [ref=e3237]: 撤回
- button "删除" [ref=e3238] [cursor=pointer]:
- generic [ref=e3239]: 删除
- 'row "106 卜 卜锦元 ID: 7 文本 哈哈,再次测试 正常 9 2026-03-04 16:53:53 详情 撤回 删除" [ref=e3395]':
- cell "106" [ref=e3396]:
- generic [ref=e3242]: "106"
- 'cell "卜 卜锦元 ID: 7" [ref=e3243]':
- generic [ref=e3245]:
- generic [ref=e3247]:
- generic [ref=e3248]:
- generic [ref=e3249]: 卜锦元
- generic [ref=e3250]: "ID: 7"
- cell "文本" [ref=e3251]:
- generic [ref=e3254]: 文本
- cell "哈哈,再次测试" [ref=e3397]:
- generic [ref=e3257]: 哈哈,再次测试
- cell "正常" [ref=e3258]:
- generic [ref=e3261]: 正常
- cell "9" [ref=e3398]:
- generic [ref=e3263]: "9"
- cell "2026-03-04 16:53:53" [ref=e3399]:
- generic [ref=e3265]: 2026-03-04 16:53:53
- cell "详情 撤回 删除" [ref=e3266]:
- generic [ref=e3267]:
- button "详情" [ref=e3268] [cursor=pointer]:
- generic [ref=e3269]: 详情
- button "撤回" [ref=e3270] [cursor=pointer]:
- generic [ref=e3271]: 撤回
- button "删除" [ref=e3272] [cursor=pointer]:
- generic [ref=e3273]: 删除
- generic [ref=e1311]:
- generic [ref=e1312]: 共 141 条
- generic [ref=e1315] [cursor=pointer]:
- generic:
- combobox [ref=e1317]
- generic [ref=e1318]: 20条/页
- img [ref=e1321]
- button "上一页" [ref=e1323] [cursor=pointer]:
- generic:
- img
- list [ref=e1324]:
- listitem "第 1 页" [ref=e1325] [cursor=pointer]: "1"
- listitem "第 2 页" [ref=e3274]: "2"
- listitem "第 3 页" [ref=e3275] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e3276] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e3277] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e3278] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e3279] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e3280] [cursor=pointer]: "8"
- button "下一页" [ref=e1326] [cursor=pointer]:
- generic:
- img
- generic [ref=e1327]:
- generic [ref=e1328]: 前往
- spinbutton "页" [ref=e1331]: "2"
- generic [ref=e1332]:
- alert [ref=e3455]:
- img [ref=e3457]
- paragraph [ref=e3459]: 消息已删除

View File

@@ -0,0 +1,70 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e3460]:
- generic [ref=e3461]:
- heading "消息统计" [level=2] [ref=e3462]
- radiogroup "radio-group" [ref=e3464]:
- generic [ref=e3465]:
- radio "近 7 天" [checked] [ref=e3466]
- generic [ref=e3467] [cursor=pointer]: 近 7 天
- generic [ref=e3468]:
- radio "近 30 天" [ref=e3469]
- generic [ref=e3470] [cursor=pointer]: 近 30 天
- generic [ref=e3471]:
- generic [ref=e3472]:
- img [ref=e3475]
- generic [ref=e3478]:
- generic [ref=e3479]: 消息总数
- generic [ref=e3480]: "0"
- generic [ref=e3481]:
- img [ref=e3484]
- generic [ref=e3486]:
- generic [ref=e3487]: 今日消息
- generic [ref=e3488]: "0"
- generic [ref=e3489]:
- generic [ref=e3491]: 消息趋势
- generic [ref=e3495]: 类型分布
- generic [ref=e3499]: 活跃用户 Top 10
- generic [ref=e3503]: 活跃群组 Top 10
- img [ref=e3508]

View File

@@ -0,0 +1,69 @@
- generic [ref=e162]:
- complementary [ref=e163]:
- generic [ref=e164]:
- generic [ref=e165]: E
- generic [ref=e166]: EchoChat
- menubar [ref=e167]:
- menuitem "仪表盘" [ref=e168] [cursor=pointer]:
- img [ref=e170]
- text: 仪表盘
- menuitem "用户管理" [ref=e172]:
- generic [ref=e173] [cursor=pointer]:
- img [ref=e175]
- generic [ref=e177]: 用户管理
- img [ref=e179]
- menuitem "联系人管理" [ref=e181]:
- generic [ref=e182] [cursor=pointer]:
- img [ref=e184]
- generic [ref=e187]: 联系人管理
- img [ref=e189]
- menuitem "群组管理" [ref=e191]:
- generic [ref=e192] [cursor=pointer]:
- img [ref=e194]
- generic [ref=e197]: 群组管理
- img [ref=e199]
- menuitem "消息管理" [expanded] [ref=e201]:
- generic [ref=e202] [cursor=pointer]:
- img [ref=e204]
- generic [ref=e206]: 消息管理
- img [ref=e208]
- menu [ref=e413]:
- menuitem "消息列表" [ref=e282] [cursor=pointer]
- menuitem "消息统计" [ref=e283] [cursor=pointer]
- menuitem "在线监控" [ref=e210] [cursor=pointer]:
- img [ref=e212]
- text: 在线监控
- generic [ref=e214]:
- generic [ref=e215]:
- img [ref=e218] [cursor=pointer]
- button "管 admin_test" [ref=e222] [cursor=pointer]:
- generic [ref=e223]:
- generic [ref=e224]: admin_test
- img [ref=e226]
- main [ref=e228]:
- generic [ref=e3460]:
- generic [ref=e3461]:
- heading "消息统计" [level=2] [ref=e3462]
- radiogroup "radio-group" [ref=e3464]:
- generic [ref=e3465]:
- radio "近 7 天" [ref=e3466]
- generic [ref=e3467] [cursor=pointer]: 近 7 天
- generic [ref=e3468]:
- radio "近 30 天" [checked] [active] [ref=e3469]
- generic [ref=e3470] [cursor=pointer]: 近 30 天
- generic [ref=e3471]:
- generic [ref=e3472]:
- img [ref=e3475]
- generic [ref=e3478]:
- generic [ref=e3479]: 消息总数
- generic [ref=e3480]: "141"
- generic [ref=e3481]:
- img [ref=e3484]
- generic [ref=e3486]:
- generic [ref=e3487]: 今日消息
- generic [ref=e3488]: "4"
- generic [ref=e3489]:
- generic [ref=e3491]: 消息趋势
- generic [ref=e3495]: 类型分布
- generic [ref=e3499]: 活跃用户 Top 10
- generic [ref=e3503]: 活跃群组 Top 10

View File

@@ -0,0 +1,12 @@
- generic [active] [ref=e1]:
- generic [ref=e3]:
- generic [ref=e8]: 消息
- generic [ref=e15]:
- generic [ref=e19] [cursor=pointer]: 消息
- generic [ref=e22] [cursor=pointer]: 联系人
- generic [ref=e25] [cursor=pointer]: 会议
- generic [ref=e28] [cursor=pointer]: 我的
- generic:
- generic:
- generic:
- paragraph: 认证已过期或无效,请重新登录

View File

@@ -0,0 +1,21 @@
- generic [ref=e30]:
- generic [ref=e34]: 登录
- generic [ref=e38]:
- generic [ref=e39]:
- generic [ref=e41]: E
- generic [ref=e42]: EchoChat
- generic [ref=e43]: 连接无限,沟通无界
- generic [ref=e44]:
- generic [ref=e45]: 登录
- generic [ref=e46]:
- generic [ref=e47]: 账号
- textbox [ref=e51]: testuser1
- generic [ref=e52]:
- generic [ref=e53]: 密码
- generic [ref=e54]:
- textbox [active] [ref=e57]: password123
- generic [ref=e58]: 显示
- generic [ref=e60] [cursor=pointer]: 登录
- generic [ref=e61]:
- generic [ref=e62]: 还没有账号?
- generic [ref=e63]: 立即注册

View File

@@ -0,0 +1,67 @@
- generic [ref=e3]:
- generic [ref=e64]:
- generic [ref=e68]: 消息
- generic [ref=e72]:
- generic [ref=e73]:
- generic [ref=e74]: 消息
- generic [ref=e75]:
- generic [ref=e77]:
- generic [ref=e79]:
- generic [ref=e80]:
- generic [ref=e82]: 全部
- generic [ref=e84]: 单聊
- generic [ref=e86]: 群聊
- generic [ref=e90]:
- generic [ref=e91]:
- generic [ref=e94]:
- generic [ref=e95]:
- generic [ref=e96]:
- generic [ref=e97]: 测试用户3
- generic [ref=e98]: 3/4
- generic [ref=e99]:
- generic [ref=e101]: 已读回执测试消息
- generic [ref=e103]:
- generic [ref=e104]:
- generic [ref=e107]:
- generic [ref=e108]:
- generic [ref=e109]:
- generic [ref=e110]: 两人群测试
- generic [ref=e111]: 3/12
- generic [ref=e114]: 换届大会打卡还贷款
- generic [ref=e115]:
- generic [ref=e118]:
- generic [ref=e119]:
- generic [ref=e120]:
- generic [ref=e121]: 卜锦元
- generic [ref=e122]: 3/4
- generic [ref=e125]: "112121212"
- generic [ref=e126]:
- generic [ref=e129]:
- generic [ref=e131]:
- generic [ref=e132]: 测试用户2
- generic [ref=e133]: 3/4
- generic [ref=e134]:
- generic [ref=e137]: E
- generic [ref=e138]:
- generic [ref=e139]:
- generic [ref=e140]: EchoChat测试群
- generic [ref=e141]: 3/4
- generic [ref=e144]: 测试已读回执功能
- generic [ref=e145]:
- generic [ref=e146]:
- generic [ref=e148]:
- generic [ref=e149]: 消息
- generic [ref=e150]:
- generic [ref=e152]:
- generic [ref=e153]: 联系人
- generic [ref=e154]:
- generic [ref=e156]:
- generic [ref=e157]: 会议
- generic [ref=e158]:
- generic [ref=e160]:
- generic [ref=e161]: 我的
- generic [ref=e15]:
- generic [ref=e19] [cursor=pointer]: 消息
- generic [ref=e22] [cursor=pointer]: 联系人
- generic [ref=e25] [cursor=pointer]: 会议
- generic [ref=e28] [cursor=pointer]: 我的

View File

@@ -0,0 +1,20 @@
- generic [ref=e165]:
- generic [ref=e166]:
- generic [ref=e168]:
- generic [ref=e170]: 卜锦元
- generic [ref=e172]:
- generic [ref=e176]:
- generic [ref=e177]:
- generic [ref=e180]:
- generic [ref=e183]: "111"
- generic [ref=e185]:
- generic [ref=e186]:
- generic [ref=e189]: "112121212"
- generic [ref=e192]:
- generic [ref=e193]: 未读
- generic [ref=e195]:
- generic [ref=e197]:
- generic [ref=e200]:
- generic: 输入消息...
- textbox [ref=e201]
- generic [ref=e203]:

View File

@@ -0,0 +1,27 @@
- generic [ref=e165]:
- generic [ref=e166]:
- generic [ref=e168]:
- generic [ref=e170]: 卜锦元
- generic [ref=e172]:
- generic [ref=e176]:
- generic [ref=e177]:
- generic [ref=e180]:
- generic [ref=e183]: "111"
- generic [ref=e185]:
- generic [ref=e186]:
- generic [ref=e189]: "112121212"
- generic [ref=e192]:
- generic [ref=e193]: 未读
- generic [ref=e195]:
- generic [ref=e197]:
- generic [ref=e200]:
- generic: 输入消息...
- textbox [ref=e201]
- generic [ref=e203]:
- generic [ref=e205]:
- generic [ref=e206]:
- generic [ref=e208]:
- generic [ref=e209]: 图片
- generic [ref=e210]:
- generic [ref=e212]:
- generic [ref=e213]: 文件

View File

@@ -0,0 +1,20 @@
- generic [ref=e165]:
- generic [ref=e166]:
- generic [ref=e168]:
- generic [ref=e170]: 卜锦元
- generic [ref=e172]:
- generic [ref=e176]:
- generic [ref=e177]:
- generic [ref=e180]:
- generic [ref=e183]: "111"
- generic [ref=e185]:
- generic [ref=e186]:
- generic [ref=e189]: "112121212"
- generic [ref=e192]:
- generic [ref=e193]: 未读
- generic [ref=e195]:
- generic [ref=e197]:
- generic [ref=e200]:
- generic: 输入消息...
- textbox [ref=e201]
- generic [ref=e203]:

View File

@@ -0,0 +1,20 @@
- generic [ref=e217]:
- generic [ref=e218]:
- generic [ref=e220]:
- generic [ref=e222]: 卜锦元
- generic [ref=e224]:
- generic [ref=e228]:
- generic [ref=e229]:
- generic [ref=e232]:
- generic [ref=e235]: "111"
- generic [ref=e237]:
- generic [ref=e238]:
- generic [ref=e241]: "112121212"
- generic [ref=e244]:
- generic [ref=e245]: 未读
- generic [ref=e247]:
- generic [ref=e249]:
- generic [ref=e252]:
- generic: 输入消息...
- textbox [ref=e253]
- generic [ref=e255]:

View File

@@ -0,0 +1,20 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e39]:
- generic [ref=e42]:
- generic: 输入消息...
- textbox [ref=e43]
- generic [ref=e45]:

View File

@@ -0,0 +1,27 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e39]:
- generic [ref=e42]:
- generic: 输入消息...
- textbox [ref=e43]
- generic [ref=e45]:
- generic [ref=e47]:
- generic [ref=e48]:
- generic [ref=e50]:
- generic [ref=e51]: 图片
- generic [ref=e52]:
- generic [ref=e54]:
- generic [ref=e55]: 文件

View File

@@ -0,0 +1,23 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e57]:
- generic [ref=e62]:
- generic [ref=e63]: 未读
- generic [ref=e37]:
- generic [ref=e39]:
- generic [ref=e42]:
- generic: 输入消息...
- textbox [ref=e43]
- generic [ref=e45]:

View File

@@ -0,0 +1,23 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e57]:
- generic [ref=e62]:
- generic [ref=e63]: 未读
- generic [ref=e37]:
- generic [ref=e39]:
- generic [ref=e42]:
- generic: 输入消息...
- textbox [ref=e43]
- generic [ref=e45]:

View File

@@ -0,0 +1,67 @@
- generic [ref=e3]:
- generic [ref=e38]:
- generic [ref=e42]: 消息
- generic [ref=e46]:
- generic [ref=e47]:
- generic [ref=e48]: 消息
- generic [ref=e49]:
- generic [ref=e51]:
- generic [ref=e53]:
- generic [ref=e54]:
- generic [ref=e56]: 全部
- generic [ref=e58]: 单聊
- generic [ref=e60]: 群聊
- generic [ref=e64]:
- generic [ref=e65]:
- generic [ref=e68]:
- generic [ref=e69]:
- generic [ref=e70]:
- generic [ref=e71]: 测试用户3
- generic [ref=e72]: 3/4
- generic [ref=e73]:
- generic [ref=e75]: 已读回执测试消息
- generic [ref=e77]:
- generic [ref=e78]:
- generic [ref=e81]:
- generic [ref=e82]:
- generic [ref=e83]:
- generic [ref=e84]: 卜锦元
- generic [ref=e85]: 10:49
- generic [ref=e88]: "[图片]"
- generic [ref=e89]:
- generic [ref=e92]:
- generic [ref=e93]:
- generic [ref=e94]:
- generic [ref=e95]: 两人群测试
- generic [ref=e96]: 3/12
- generic [ref=e99]: 换届大会打卡还贷款
- generic [ref=e100]:
- generic [ref=e103]:
- generic [ref=e105]:
- generic [ref=e106]: 测试用户2
- generic [ref=e107]: 3/4
- generic [ref=e108]:
- generic [ref=e111]: E
- generic [ref=e112]:
- generic [ref=e113]:
- generic [ref=e114]: EchoChat测试群
- generic [ref=e115]: 3/4
- generic [ref=e118]: 测试已读回执功能
- generic [ref=e119]:
- generic [ref=e120]:
- generic [ref=e122]:
- generic [ref=e123]: 消息
- generic [ref=e124]:
- generic [ref=e126]:
- generic [ref=e127]: 联系人
- generic [ref=e128]:
- generic [ref=e130]:
- generic [ref=e131]: 会议
- generic [ref=e132]:
- generic [ref=e134]:
- generic [ref=e135]: 我的
- generic [ref=e137]:
- generic [ref=e141] [cursor=pointer]: 消息
- generic [ref=e144] [cursor=pointer]: 联系人
- generic [ref=e147] [cursor=pointer]: 会议
- generic [ref=e150] [cursor=pointer]: 我的

View File

@@ -0,0 +1,23 @@
- generic [ref=e155]:
- generic [ref=e156]:
- generic [ref=e158]:
- generic [ref=e160]: 卜锦元
- generic [ref=e162]:
- generic [ref=e166]:
- generic [ref=e167]:
- generic [ref=e170]:
- generic [ref=e173]: "111"
- generic [ref=e175]:
- generic [ref=e176]:
- generic [ref=e179]: "112121212"
- generic [ref=e182]:
- generic [ref=e183]: 未读
- generic [ref=e185]:
- generic [ref=e190]:
- generic [ref=e191]: 未读
- generic [ref=e193]:
- generic [ref=e195]:
- generic [ref=e198]:
- generic: 输入消息...
- textbox [ref=e199]
- generic [ref=e201]:

View File

@@ -0,0 +1,23 @@
- generic [ref=e155]:
- generic [ref=e156]:
- generic [ref=e158]:
- generic [ref=e160]: 卜锦元
- generic [ref=e162]:
- generic [ref=e166]:
- generic [ref=e167]:
- generic [ref=e170]:
- generic [ref=e173]: "111"
- generic [ref=e175]:
- generic [ref=e176]:
- generic [ref=e179]: "112121212"
- generic [ref=e182]:
- generic [ref=e183]: 未读
- generic [ref=e185]:
- generic [ref=e190]:
- generic [ref=e191]: 未读
- generic [ref=e193]:
- generic [ref=e195]:
- generic [ref=e198]:
- generic: 输入消息...
- textbox [ref=e199]
- generic [ref=e201]:

View File

@@ -0,0 +1,26 @@
- generic [ref=e155]:
- generic [ref=e156]:
- generic [ref=e158]:
- generic [ref=e160]: 卜锦元
- generic [ref=e162]:
- generic [ref=e166]:
- generic [ref=e167]:
- generic [ref=e170]:
- generic [ref=e173]: "111"
- generic [ref=e175]:
- generic [ref=e176]:
- generic [ref=e179]: "112121212"
- generic [ref=e182]:
- generic [ref=e183]: 未读
- generic [ref=e185]:
- generic [ref=e190]:
- generic [ref=e191]: 未读
- generic [ref=e213]:
- generic [ref=e218]:
- generic [ref=e219]: 未读
- generic [ref=e193]:
- generic [ref=e195]:
- generic [ref=e198]:
- generic: 输入消息...
- textbox [ref=e199]
- generic [ref=e201]:

View File

@@ -0,0 +1,26 @@
- generic [ref=e155]:
- generic [ref=e156]:
- generic [ref=e158]:
- generic [ref=e160]: 卜锦元
- generic [ref=e162]:
- generic [ref=e166]:
- generic [ref=e167]:
- generic [ref=e170]:
- generic [ref=e173]: "111"
- generic [ref=e175]:
- generic [ref=e176]:
- generic [ref=e179]: "112121212"
- generic [ref=e182]:
- generic [ref=e183]: 未读
- generic [ref=e185]:
- generic [ref=e190]:
- generic [ref=e191]: 未读
- generic [ref=e213]:
- generic [ref=e218]:
- generic [ref=e219]: 未读
- generic [ref=e193]:
- generic [ref=e195]:
- generic [ref=e198]:
- generic: 输入消息...
- textbox [ref=e199]
- generic [ref=e201]:

View File

@@ -0,0 +1,38 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- generic [ref=e39]:
- generic:
- generic:
- generic:
- img
- generic [ref=e42]:
- generic [ref=e43]: 未读
- generic [ref=e45]:
- generic [ref=e46]:
- generic [ref=e47]:
- generic:
- generic:
- generic:
- img
- generic [ref=e50]:
- generic [ref=e51]: 未读
- generic [ref=e53]:
- generic [ref=e55]:
- generic [ref=e58]:
- generic: 输入消息...
- textbox [ref=e59]
- generic [ref=e61]:

View File

@@ -0,0 +1,30 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- img [ref=e44]
- generic [ref=e47]:
- generic [ref=e48]: 未读
- generic [ref=e50]:
- generic [ref=e51]:
- img [ref=e57]
- generic [ref=e60]:
- generic [ref=e61]: 未读
- generic [ref=e63]:
- generic [ref=e65]:
- generic [ref=e68]:
- generic: 输入消息...
- textbox [ref=e69]
- generic [ref=e71]:

View File

@@ -0,0 +1,35 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- img [ref=e44]
- generic [ref=e47]:
- generic [ref=e48]: 未读
- generic [ref=e50]:
- generic [ref=e51]:
- img [ref=e57]
- generic [ref=e60]:
- generic [ref=e61]: 未读
- generic [ref=e83]:
- generic [ref=e84]:
- img [ref=e90]
- generic [ref=e93]:
- generic [ref=e94]: 未读
- generic [ref=e63]:
- generic [ref=e65]:
- generic [ref=e68]:
- generic: 输入消息...
- textbox [ref=e69]
- generic [ref=e71]:

View File

@@ -0,0 +1,35 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- img [ref=e44]
- generic [ref=e47]:
- generic [ref=e48]: 未读
- generic [ref=e50]:
- generic [ref=e51]:
- img [ref=e57]
- generic [ref=e60]:
- generic [ref=e61]: 未读
- generic [ref=e83]:
- generic [ref=e84]:
- img [ref=e90]
- generic [ref=e93]:
- generic [ref=e94]: 未读
- generic [ref=e63]:
- generic [ref=e65]:
- generic [ref=e68]:
- generic: 输入消息...
- textbox [ref=e69]
- generic [ref=e71]:

View File

@@ -0,0 +1,44 @@
- generic [active] [ref=e1]:
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- img [ref=e44]
- generic [ref=e47]:
- generic [ref=e48]: 未读
- generic [ref=e50]:
- generic [ref=e51]:
- img [ref=e57]
- generic [ref=e60]:
- generic [ref=e61]: 未读
- generic [ref=e83]:
- generic [ref=e84]:
- img [ref=e90]
- generic [ref=e93]:
- generic [ref=e94]: 未读
- generic [ref=e63]:
- generic [ref=e65]:
- generic [ref=e68]:
- generic: 输入消息...
- textbox [ref=e69]
- generic [ref=e71]:
- generic [ref=e95]:
- generic [ref=e97]:
- img [ref=e103]
- generic:
- img
- generic:
- img
- img [ref=e105] [cursor=pointer]

View File

@@ -0,0 +1,44 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- img [ref=e44]
- generic [ref=e47]:
- generic [ref=e48]: 未读
- generic [ref=e50]:
- generic [ref=e51]:
- img [ref=e57]
- generic [ref=e60]:
- generic [ref=e61]: 未读
- generic [ref=e83]:
- generic [ref=e84]:
- img [ref=e90]
- generic [ref=e93]:
- generic [ref=e94]: 未读
- generic [ref=e118]:
- generic [ref=e119]:
- generic [ref=e121] [cursor=pointer]:
- generic [ref=e123]: 文件
- generic [ref=e124]:
- generic [ref=e125]: file-1776653949262
- generic [ref=e126]: 48 B
- generic [ref=e129]:
- generic [ref=e130]: 未读
- generic [ref=e63]:
- generic [ref=e65]:
- generic [ref=e68]:
- generic: 输入消息...
- textbox [ref=e69]
- generic [ref=e71]:

View File

@@ -0,0 +1,44 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- img [ref=e44]
- generic [ref=e47]:
- generic [ref=e48]: 未读
- generic [ref=e50]:
- generic [ref=e51]:
- img [ref=e57]
- generic [ref=e60]:
- generic [ref=e61]: 未读
- generic [ref=e83]:
- generic [ref=e84]:
- img [ref=e90]
- generic [ref=e93]:
- generic [ref=e94]: 未读
- generic [ref=e118]:
- generic [ref=e119]:
- generic [ref=e121] [cursor=pointer]:
- generic [ref=e123]: 文件
- generic [ref=e124]:
- generic [ref=e125]: file-1776653949262
- generic [ref=e126]: 48 B
- generic [ref=e129]:
- generic [ref=e130]: 未读
- generic [ref=e63]:
- generic [ref=e65]:
- generic [ref=e68]:
- generic: 输入消息...
- textbox [ref=e69]
- generic [ref=e71]:

View File

@@ -0,0 +1,44 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- img [ref=e44]
- generic [ref=e47]:
- generic [ref=e48]: 未读
- generic [ref=e50]:
- generic [ref=e51]:
- img [ref=e57]
- generic [ref=e60]:
- generic [ref=e61]: 未读
- generic [ref=e63]:
- generic [ref=e64]:
- img [ref=e70]
- generic [ref=e73]:
- generic [ref=e74]: 未读
- generic [ref=e76]:
- generic [ref=e77]:
- generic [ref=e79] [cursor=pointer]:
- generic [ref=e81]: 文件
- generic [ref=e82]:
- generic [ref=e83]: file-1776653949262
- generic [ref=e84]: 48 B
- generic [ref=e87]:
- generic [ref=e88]: 未读
- generic [ref=e90]:
- generic [ref=e92]:
- generic [ref=e95]:
- generic: 输入消息...
- textbox [ref=e96]
- generic [ref=e98]:

View File

@@ -0,0 +1,53 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- img [ref=e44]
- generic [ref=e47]:
- generic [ref=e48]: 未读
- generic [ref=e50]:
- generic [ref=e51]:
- img [ref=e57]
- generic [ref=e60]:
- generic [ref=e61]: 未读
- generic [ref=e63]:
- generic [ref=e64]:
- img [ref=e70]
- generic [ref=e73]:
- generic [ref=e74]: 未读
- generic [ref=e76]:
- generic [ref=e77]:
- generic [ref=e79] [cursor=pointer]:
- generic [ref=e81]: 文件
- generic [ref=e82]:
- generic [ref=e83]: file-1776653949262
- generic [ref=e84]: 48 B
- generic [ref=e87]:
- generic [ref=e88]: 未读
- generic [ref=e110]:
- generic [ref=e111]:
- generic [ref=e113] [cursor=pointer]:
- generic [ref=e115]: 文件
- generic [ref=e116]:
- generic [ref=e117]: test-doc.txt
- generic [ref=e118]: 48 B
- generic [ref=e121]:
- generic [ref=e122]: 未读
- generic [ref=e90]:
- generic [ref=e92]:
- generic [ref=e95]:
- generic: 输入消息...
- textbox [ref=e96]
- generic [ref=e98]:

View File

@@ -0,0 +1,53 @@
- generic [ref=e7]:
- generic [ref=e8]:
- generic [ref=e10]:
- generic [ref=e12]: 卜锦元
- generic [ref=e14]:
- generic [ref=e18]:
- generic [ref=e19]:
- generic [ref=e22]:
- generic [ref=e25]: "111"
- generic [ref=e27]:
- generic [ref=e28]:
- generic [ref=e31]: "112121212"
- generic [ref=e34]:
- generic [ref=e35]: 未读
- generic [ref=e37]:
- generic [ref=e38]:
- img [ref=e44]
- generic [ref=e47]:
- generic [ref=e48]: 未读
- generic [ref=e50]:
- generic [ref=e51]:
- img [ref=e57]
- generic [ref=e60]:
- generic [ref=e61]: 未读
- generic [ref=e63]:
- generic [ref=e64]:
- img [ref=e70]
- generic [ref=e73]:
- generic [ref=e74]: 未读
- generic [ref=e76]:
- generic [ref=e77]:
- generic [ref=e79] [cursor=pointer]:
- generic [ref=e81]: 文件
- generic [ref=e82]:
- generic [ref=e83]: file-1776653949262
- generic [ref=e84]: 48 B
- generic [ref=e87]:
- generic [ref=e88]: 未读
- generic [ref=e110]:
- generic [ref=e111]:
- generic [ref=e113] [cursor=pointer]:
- generic [ref=e115]: 文件
- generic [ref=e116]:
- generic [ref=e117]: test-doc.txt
- generic [ref=e118]: 48 B
- generic [ref=e121]:
- generic [ref=e122]: 未读
- generic [ref=e90]:
- generic [ref=e92]:
- generic [ref=e95]:
- generic: 输入消息...
- textbox [ref=e96]
- generic [ref=e98]:

View File

@@ -0,0 +1,22 @@
- generic [ref=e3]:
- generic [ref=e4]:
- generic [ref=e5]:
- generic [ref=e6]: E
- heading "EchoChat 管理后台" [level=1] [ref=e7]
- paragraph [ref=e8]: 管理员专用,请使用管理员账号登录
- generic [ref=e9]:
- generic [ref=e10]:
- generic [ref=e11]: "*账号"
- generic [ref=e14]:
- img [ref=e17]
- textbox "*账号" [ref=e19]:
- /placeholder: 请输入管理员账号
- generic [ref=e20]:
- generic [ref=e21]: "*密码"
- generic [ref=e24]:
- img [ref=e27]
- textbox "*密码" [ref=e30]:
- /placeholder: 请输入密码
- button "登 录" [ref=e33] [cursor=pointer]:
- generic [ref=e34]: 登 录
- paragraph [ref=e36]: EchoChat © 2026 · 实时音视频通讯平台

View File

@@ -0,0 +1,70 @@
- generic [active] [ref=e1]:
- generic [ref=e47]:
- complementary [ref=e48]:
- generic [ref=e49]:
- generic [ref=e50]: E
- generic [ref=e51]: EchoChat
- menubar [ref=e52]:
- menuitem "仪表盘" [ref=e53] [cursor=pointer]:
- img [ref=e55]
- text: 仪表盘
- menuitem "用户管理" [ref=e57]:
- generic [ref=e58] [cursor=pointer]:
- img [ref=e60]
- generic [ref=e62]: 用户管理
- img [ref=e64]
- menuitem "联系人管理" [ref=e66]:
- generic [ref=e67] [cursor=pointer]:
- img [ref=e69]
- generic [ref=e72]: 联系人管理
- img [ref=e74]
- menuitem "群组管理" [ref=e76]:
- generic [ref=e77] [cursor=pointer]:
- img [ref=e79]
- generic [ref=e82]: 群组管理
- img [ref=e84]
- menuitem "消息管理" [ref=e86]:
- generic [ref=e87] [cursor=pointer]:
- img [ref=e89]
- generic [ref=e91]: 消息管理
- img [ref=e93]
- menuitem "在线监控" [ref=e95] [cursor=pointer]:
- img [ref=e97]
- text: 在线监控
- generic [ref=e99]:
- generic [ref=e100]:
- img [ref=e103] [cursor=pointer]
- button "管 admin_test" [ref=e107] [cursor=pointer]:
- generic [ref=e108]:
- generic [ref=e109]: admin_test
- img [ref=e111]
- main [ref=e113]:
- generic [ref=e114]:
- heading "仪表盘" [level=2] [ref=e115]
- generic [ref=e116]:
- generic [ref=e119]:
- img [ref=e122]
- generic [ref=e124]: "--"
- generic [ref=e125]: 总用户数
- generic [ref=e128]:
- img [ref=e131]
- generic [ref=e134]: "--"
- generic [ref=e135]: 在线用户
- generic [ref=e138]:
- img [ref=e141]
- generic [ref=e143]: "--"
- generic [ref=e144]: 今日会议
- generic [ref=e147]:
- img [ref=e150]
- generic [ref=e153]: "--"
- generic [ref=e154]: 系统消息
- generic [ref=e155]:
- generic [ref=e156]: 开发进度
- generic [ref=e157]:
- paragraph [ref=e158]:
- text: "Phase 1: 基础设施与用户认证模块 —"
- generic [ref=e160]: 进行中
- paragraph [ref=e161]: 更多数据面板将在后续阶段中完善IM 统计、会议统计、系统监控等)
- alert [ref=e162]:
- img [ref=e164]
- paragraph [ref=e166]: 登录成功

View File

@@ -0,0 +1,66 @@
- generic [ref=e47]:
- complementary [ref=e48]:
- generic [ref=e49]:
- generic [ref=e50]: E
- generic [ref=e51]: EchoChat
- menubar [ref=e52]:
- menuitem "仪表盘" [ref=e53] [cursor=pointer]:
- img [ref=e55]
- text: 仪表盘
- menuitem "用户管理" [ref=e57]:
- generic [ref=e58] [cursor=pointer]:
- img [ref=e60]
- generic [ref=e62]: 用户管理
- img [ref=e64]
- menuitem "联系人管理" [ref=e66]:
- generic [ref=e67] [cursor=pointer]:
- img [ref=e69]
- generic [ref=e72]: 联系人管理
- img [ref=e74]
- menuitem "群组管理" [ref=e76]:
- generic [ref=e77] [cursor=pointer]:
- img [ref=e79]
- generic [ref=e82]: 群组管理
- img [ref=e84]
- menuitem "消息管理" [ref=e86]:
- generic [ref=e87] [cursor=pointer]:
- img [ref=e89]
- generic [ref=e91]: 消息管理
- img [ref=e93]
- menuitem "在线监控" [ref=e95] [cursor=pointer]:
- img [ref=e97]
- text: 在线监控
- generic [ref=e99]:
- generic [ref=e100]:
- img [ref=e103] [cursor=pointer]
- button "管 admin_test" [ref=e107] [cursor=pointer]:
- generic [ref=e108]:
- generic [ref=e109]: admin_test
- img [ref=e111]
- main [ref=e113]:
- generic [ref=e114]:
- heading "仪表盘" [level=2] [ref=e115]
- generic [ref=e116]:
- generic [ref=e119]:
- img [ref=e122]
- generic [ref=e124]: "--"
- generic [ref=e125]: 总用户数
- generic [ref=e128]:
- img [ref=e131]
- generic [ref=e134]: "--"
- generic [ref=e135]: 在线用户
- generic [ref=e138]:
- img [ref=e141]
- generic [ref=e143]: "--"
- generic [ref=e144]: 今日会议
- generic [ref=e147]:
- img [ref=e150]
- generic [ref=e153]: "--"
- generic [ref=e154]: 系统消息
- generic [ref=e155]:
- generic [ref=e156]: 开发进度
- generic [ref=e157]:
- paragraph [ref=e158]:
- text: "Phase 1: 基础设施与用户认证模块 —"
- generic [ref=e160]: 进行中
- paragraph [ref=e161]: 更多数据面板将在后续阶段中完善IM 统计、会议统计、系统监控等)

View File

@@ -0,0 +1,671 @@
- generic [ref=e47]:
- complementary [ref=e48]:
- generic [ref=e49]:
- generic [ref=e50]: E
- generic [ref=e51]: EchoChat
- menubar [ref=e52]:
- menuitem "仪表盘" [ref=e53] [cursor=pointer]:
- img [ref=e55]
- text: 仪表盘
- menuitem "用户管理" [ref=e57]:
- generic [ref=e58] [cursor=pointer]:
- img [ref=e60]
- generic [ref=e62]: 用户管理
- img [ref=e64]
- menuitem "联系人管理" [ref=e66]:
- generic [ref=e67] [cursor=pointer]:
- img [ref=e69]
- generic [ref=e72]: 联系人管理
- img [ref=e74]
- menuitem "群组管理" [ref=e76]:
- generic [ref=e77] [cursor=pointer]:
- img [ref=e79]
- generic [ref=e82]: 群组管理
- img [ref=e84]
- menuitem "消息管理" [expanded] [ref=e86]:
- generic [ref=e87] [cursor=pointer]:
- img [ref=e89]
- generic [ref=e91]: 消息管理
- img [ref=e93]
- menu [ref=e167]:
- menuitem "消息列表" [ref=e168] [cursor=pointer]
- menuitem "消息统计" [ref=e169] [cursor=pointer]
- menuitem "在线监控" [ref=e95] [cursor=pointer]:
- img [ref=e97]
- text: 在线监控
- generic [ref=e99]:
- generic [ref=e100]:
- img [ref=e103] [cursor=pointer]
- button "管 admin_test" [ref=e107] [cursor=pointer]:
- generic [ref=e108]:
- generic [ref=e109]: admin_test
- img [ref=e111]
- main [ref=e113]:
- generic [ref=e170]:
- heading "消息管理" [level=2] [ref=e172]
- generic [ref=e175]:
- generic [ref=e176]:
- generic [ref=e177]: 关键词
- generic [ref=e180]:
- img [ref=e183]
- textbox "关键词" [ref=e185]:
- /placeholder: 搜索消息内容
- generic [ref=e186]:
- generic [ref=e187]: 类型
- generic [ref=e190] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e192]
- generic [ref=e193]: 全部
- img [ref=e196]
- generic [ref=e198]:
- generic [ref=e199]: 状态
- generic [ref=e202] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e204]
- generic [ref=e205]: 全部
- img [ref=e208]
- generic [ref=e210]:
- generic [ref=e211]: 发送者ID
- spinbutton "发送者ID" [ref=e215]
- generic [ref=e216]:
- generic [ref=e217]: 时间范围
- generic [ref=e219]:
- img [ref=e221]
- combobox "时间范围" [ref=e223]
- generic [ref=e224]:
- combobox "结束日期" [ref=e225]
- generic [ref=e227]:
- button "搜索" [ref=e228] [cursor=pointer]:
- generic [ref=e229]: 搜索
- button "重置" [ref=e230] [cursor=pointer]:
- generic [ref=e231]: 重置
- generic [ref=e233]:
- generic [ref=e235]:
- table [ref=e237]:
- rowgroup [ref=e247]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e248]:
- columnheader "ID" [ref=e249]:
- generic [ref=e250]: ID
- columnheader "发送者" [ref=e251]:
- generic [ref=e252]: 发送者
- columnheader "类型" [ref=e253]:
- generic [ref=e254]: 类型
- columnheader "内容" [ref=e255]:
- generic [ref=e256]: 内容
- columnheader "状态" [ref=e257]:
- generic [ref=e258]: 状态
- columnheader "会话ID" [ref=e259]:
- generic [ref=e260]: 会话ID
- columnheader "发送时间" [ref=e261]:
- generic [ref=e262]: 发送时间
- columnheader "操作" [ref=e263]:
- generic [ref=e264]: 操作
- table [ref=e269]:
- rowgroup [ref=e279]:
- 'row "150 新 新昵称 ID: 4 文件 [文件] 正常 9 2026-04-20 11:00:42 详情 撤回 删除" [ref=e280]':
- cell "150" [ref=e281]:
- generic [ref=e282]: "150"
- 'cell "新 新昵称 ID: 4" [ref=e283]':
- generic [ref=e285]:
- generic [ref=e287]:
- generic [ref=e288]:
- generic [ref=e289]: 新昵称
- generic [ref=e290]: "ID: 4"
- cell "文件" [ref=e291]:
- generic [ref=e294]: 文件
- cell "[文件]" [ref=e295]:
- generic [ref=e297]: "[文件]"
- cell "正常" [ref=e298]:
- generic [ref=e301]: 正常
- cell "9" [ref=e302]:
- generic [ref=e303]: "9"
- cell "2026-04-20 11:00:42" [ref=e304]:
- generic [ref=e305]: 2026-04-20 11:00:42
- cell "详情 撤回 删除" [ref=e306]:
- generic [ref=e307]:
- button "详情" [ref=e308] [cursor=pointer]:
- generic [ref=e309]: 详情
- button "撤回" [ref=e310] [cursor=pointer]:
- generic [ref=e311]: 撤回
- button "删除" [ref=e312] [cursor=pointer]:
- generic [ref=e313]: 删除
- 'row "149 新 新昵称 ID: 4 文件 [文件] 正常 9 2026-04-20 10:59:09 详情 撤回 删除" [ref=e314]':
- cell "149" [ref=e315]:
- generic [ref=e316]: "149"
- 'cell "新 新昵称 ID: 4" [ref=e317]':
- generic [ref=e319]:
- generic [ref=e321]:
- generic [ref=e322]:
- generic [ref=e323]: 新昵称
- generic [ref=e324]: "ID: 4"
- cell "文件" [ref=e325]:
- generic [ref=e328]: 文件
- cell "[文件]" [ref=e329]:
- generic [ref=e331]: "[文件]"
- cell "正常" [ref=e332]:
- generic [ref=e335]: 正常
- cell "9" [ref=e336]:
- generic [ref=e337]: "9"
- cell "2026-04-20 10:59:09" [ref=e338]:
- generic [ref=e339]: 2026-04-20 10:59:09
- cell "详情 撤回 删除" [ref=e340]:
- generic [ref=e341]:
- button "详情" [ref=e342] [cursor=pointer]:
- generic [ref=e343]: 详情
- button "撤回" [ref=e344] [cursor=pointer]:
- generic [ref=e345]: 撤回
- button "删除" [ref=e346] [cursor=pointer]:
- generic [ref=e347]: 删除
- 'row "148 新 新昵称 ID: 4 图片 [图片] 正常 9 2026-04-20 10:57:27 详情 撤回 删除" [ref=e348]':
- cell "148" [ref=e349]:
- generic [ref=e350]: "148"
- 'cell "新 新昵称 ID: 4" [ref=e351]':
- generic [ref=e353]:
- generic [ref=e355]:
- generic [ref=e356]:
- generic [ref=e357]: 新昵称
- generic [ref=e358]: "ID: 4"
- cell "图片" [ref=e359]:
- generic [ref=e362]: 图片
- cell "[图片]" [ref=e363]:
- generic [ref=e365]: "[图片]"
- cell "正常" [ref=e366]:
- generic [ref=e369]: 正常
- cell "9" [ref=e370]:
- generic [ref=e371]: "9"
- cell "2026-04-20 10:57:27" [ref=e372]:
- generic [ref=e373]: 2026-04-20 10:57:27
- cell "详情 撤回 删除" [ref=e374]:
- generic [ref=e375]:
- button "详情" [ref=e376] [cursor=pointer]:
- generic [ref=e377]: 详情
- button "撤回" [ref=e378] [cursor=pointer]:
- generic [ref=e379]: 撤回
- button "删除" [ref=e380] [cursor=pointer]:
- generic [ref=e381]: 删除
- 'row "147 新 新昵称 ID: 4 图片 [图片] 正常 9 2026-04-20 10:53:18 详情 撤回 删除" [ref=e382]':
- cell "147" [ref=e383]:
- generic [ref=e384]: "147"
- 'cell "新 新昵称 ID: 4" [ref=e385]':
- generic [ref=e387]:
- generic [ref=e389]:
- generic [ref=e390]:
- generic [ref=e391]: 新昵称
- generic [ref=e392]: "ID: 4"
- cell "图片" [ref=e393]:
- generic [ref=e396]: 图片
- cell "[图片]" [ref=e397]:
- generic [ref=e399]: "[图片]"
- cell "正常" [ref=e400]:
- generic [ref=e403]: 正常
- cell "9" [ref=e404]:
- generic [ref=e405]: "9"
- cell "2026-04-20 10:53:18" [ref=e406]:
- generic [ref=e407]: 2026-04-20 10:53:18
- cell "详情 撤回 删除" [ref=e408]:
- generic [ref=e409]:
- button "详情" [ref=e410] [cursor=pointer]:
- generic [ref=e411]: 详情
- button "撤回" [ref=e412] [cursor=pointer]:
- generic [ref=e413]: 撤回
- button "删除" [ref=e414] [cursor=pointer]:
- generic [ref=e415]: 删除
- 'row "146 新 新昵称 ID: 4 图片 [图片] 正常 9 2026-04-20 10:49:56 详情 撤回 删除" [ref=e416]':
- cell "146" [ref=e417]:
- generic [ref=e418]: "146"
- 'cell "新 新昵称 ID: 4" [ref=e419]':
- generic [ref=e421]:
- generic [ref=e423]:
- generic [ref=e424]:
- generic [ref=e425]: 新昵称
- generic [ref=e426]: "ID: 4"
- cell "图片" [ref=e427]:
- generic [ref=e430]: 图片
- cell "[图片]" [ref=e431]:
- generic [ref=e433]: "[图片]"
- cell "正常" [ref=e434]:
- generic [ref=e437]: 正常
- cell "9" [ref=e438]:
- generic [ref=e439]: "9"
- cell "2026-04-20 10:49:56" [ref=e440]:
- generic [ref=e441]: 2026-04-20 10:49:56
- cell "详情 撤回 删除" [ref=e442]:
- generic [ref=e443]:
- button "详情" [ref=e444] [cursor=pointer]:
- generic [ref=e445]: 详情
- button "撤回" [ref=e446] [cursor=pointer]:
- generic [ref=e447]: 撤回
- button "删除" [ref=e448] [cursor=pointer]:
- generic [ref=e449]: 删除
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e450]':
- cell "145" [ref=e451]:
- generic [ref=e452]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e453]':
- generic [ref=e455]:
- generic [ref=e457]:
- generic [ref=e458]:
- generic [ref=e459]: 卜锦元
- generic [ref=e460]: "ID: 7"
- cell "文本" [ref=e461]:
- generic [ref=e464]: 文本
- cell "1111" [ref=e465]:
- generic [ref=e467]: "1111"
- cell "正常" [ref=e468]:
- generic [ref=e471]: 正常
- cell "6" [ref=e472]:
- generic [ref=e473]: "6"
- cell "2026-04-17 14:10:04" [ref=e474]:
- generic [ref=e475]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e476]:
- generic [ref=e477]:
- button "详情" [ref=e478] [cursor=pointer]:
- generic [ref=e479]: 详情
- button "撤回" [ref=e480] [cursor=pointer]:
- generic [ref=e481]: 撤回
- button "删除" [ref=e482] [cursor=pointer]:
- generic [ref=e483]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e484]':
- cell "144" [ref=e485]:
- generic [ref=e486]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e487]':
- generic [ref=e489]:
- generic [ref=e491]:
- generic [ref=e492]:
- generic [ref=e493]: 卜锦元
- generic [ref=e494]: "ID: 7"
- cell "文本" [ref=e495]:
- generic [ref=e498]: 文本
- cell "1112122" [ref=e499]:
- generic [ref=e501]: "1112122"
- cell "正常" [ref=e502]:
- generic [ref=e505]: 正常
- cell "6" [ref=e506]:
- generic [ref=e507]: "6"
- cell "2026-04-17 14:09:48" [ref=e508]:
- generic [ref=e509]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e510]:
- generic [ref=e511]:
- button "详情" [ref=e512] [cursor=pointer]:
- generic [ref=e513]: 详情
- button "撤回" [ref=e514] [cursor=pointer]:
- generic [ref=e515]: 撤回
- button "删除" [ref=e516] [cursor=pointer]:
- generic [ref=e517]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e518]':
- cell "143" [ref=e519]:
- generic [ref=e520]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e521]':
- generic [ref=e523]:
- generic [ref=e525]:
- generic [ref=e526]:
- generic [ref=e527]: 卜锦元
- generic [ref=e528]: "ID: 7"
- cell "文本" [ref=e529]:
- generic [ref=e532]: 文本
- cell "1111" [ref=e533]:
- generic [ref=e535]: "1111"
- cell "正常" [ref=e536]:
- generic [ref=e539]: 正常
- cell "6" [ref=e540]:
- generic [ref=e541]: "6"
- cell "2026-04-17 14:09:36" [ref=e542]:
- generic [ref=e543]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e544]:
- generic [ref=e545]:
- button "详情" [ref=e546] [cursor=pointer]:
- generic [ref=e547]: 详情
- button "撤回" [ref=e548] [cursor=pointer]:
- generic [ref=e549]: 撤回
- button "删除" [ref=e550] [cursor=pointer]:
- generic [ref=e551]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e552]':
- cell "142" [ref=e553]:
- generic [ref=e554]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e555]':
- generic [ref=e557]:
- generic [ref=e559]:
- generic [ref=e560]:
- generic [ref=e561]: 段凌云
- generic [ref=e562]: "ID: 13"
- cell "文本" [ref=e563]:
- generic [ref=e566]: 文本
- cell "111111111223" [ref=e567]:
- generic [ref=e569]: "111111111223"
- cell "正常" [ref=e570]:
- generic [ref=e573]: 正常
- cell "6" [ref=e574]:
- generic [ref=e575]: "6"
- cell "2026-04-17 14:09:20" [ref=e576]:
- generic [ref=e577]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e578]:
- generic [ref=e579]:
- button "详情" [ref=e580] [cursor=pointer]:
- generic [ref=e581]: 详情
- button "撤回" [ref=e582] [cursor=pointer]:
- generic [ref=e583]: 撤回
- button "删除" [ref=e584] [cursor=pointer]:
- generic [ref=e585]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e586]':
- cell "141" [ref=e587]:
- generic [ref=e588]: "141"
- 'cell "周 周和智 ID: 15" [ref=e589]':
- generic [ref=e591]:
- generic [ref=e593]:
- generic [ref=e594]:
- generic [ref=e595]: 周和智
- generic [ref=e596]: "ID: 15"
- cell "文本" [ref=e597]:
- generic [ref=e600]: 文本
- cell "换届大会打卡还贷款" [ref=e601]:
- generic [ref=e603]: 换届大会打卡还贷款
- cell "正常" [ref=e604]:
- generic [ref=e607]: 正常
- cell "8" [ref=e608]:
- generic [ref=e609]: "8"
- cell "2026-03-12 15:04:56" [ref=e610]:
- generic [ref=e611]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e612]:
- generic [ref=e613]:
- button "详情" [ref=e614] [cursor=pointer]:
- generic [ref=e615]: 详情
- button "撤回" [ref=e616] [cursor=pointer]:
- generic [ref=e617]: 撤回
- button "删除" [ref=e618] [cursor=pointer]:
- generic [ref=e619]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e620]':
- cell "140" [ref=e621]:
- generic [ref=e622]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e623]':
- generic [ref=e625]:
- generic [ref=e627]:
- generic [ref=e628]:
- generic [ref=e629]: 卜锦元
- generic [ref=e630]: "ID: 7"
- cell "文本" [ref=e631]:
- generic [ref=e634]: 文本
- cell "你能看到吗" [ref=e635]:
- generic [ref=e637]: 你能看到吗
- cell "正常" [ref=e638]:
- generic [ref=e641]: 正常
- cell "8" [ref=e642]:
- generic [ref=e643]: "8"
- cell "2026-03-12 15:04:54" [ref=e644]:
- generic [ref=e645]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e646]:
- generic [ref=e647]:
- button "详情" [ref=e648] [cursor=pointer]:
- generic [ref=e649]: 详情
- button "撤回" [ref=e650] [cursor=pointer]:
- generic [ref=e651]: 撤回
- button "删除" [ref=e652] [cursor=pointer]:
- generic [ref=e653]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e654]':
- cell "139" [ref=e655]:
- generic [ref=e656]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e657]':
- generic [ref=e659]:
- generic [ref=e661]:
- generic [ref=e662]:
- generic [ref=e663]: 卜锦元
- generic [ref=e664]: "ID: 7"
- cell "文本" [ref=e665]:
- generic [ref=e668]: 文本
- cell "@周和智 1111" [ref=e669]:
- generic [ref=e671]: "@周和智 1111"
- cell "正常" [ref=e672]:
- generic [ref=e675]: 正常
- cell "8" [ref=e676]:
- generic [ref=e677]: "8"
- cell "2026-03-12 15:04:43" [ref=e678]:
- generic [ref=e679]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e680]:
- generic [ref=e681]:
- button "详情" [ref=e682] [cursor=pointer]:
- generic [ref=e683]: 详情
- button "撤回" [ref=e684] [cursor=pointer]:
- generic [ref=e685]: 撤回
- button "删除" [ref=e686] [cursor=pointer]:
- generic [ref=e687]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e688]':
- cell "138" [ref=e689]:
- generic [ref=e690]: "138"
- 'cell "? - ID: 0" [ref=e691]':
- generic [ref=e693]:
- generic [ref=e695]: "?"
- generic [ref=e696]:
- generic [ref=e697]: "-"
- generic [ref=e698]: "ID: 0"
- cell "系统消息" [ref=e699]:
- generic [ref=e702]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e703]:
- generic [ref=e705]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e706]:
- generic [ref=e709]: 正常
- cell "8" [ref=e710]:
- generic [ref=e711]: "8"
- cell "2026-03-12 15:04:20" [ref=e712]:
- generic [ref=e713]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e714]:
- generic [ref=e715]:
- button "详情" [ref=e716] [cursor=pointer]:
- generic [ref=e717]: 详情
- button "撤回" [ref=e718] [cursor=pointer]:
- generic [ref=e719]: 撤回
- button "删除" [ref=e720] [cursor=pointer]:
- generic [ref=e721]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e722]':
- cell "137" [ref=e723]:
- generic [ref=e724]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e725]':
- generic [ref=e727]:
- generic [ref=e729]:
- generic [ref=e730]:
- generic [ref=e731]: 卜锦元
- generic [ref=e732]: "ID: 7"
- cell "文本" [ref=e733]:
- generic [ref=e736]: 文本
- cell "ewqeqwe" [ref=e737]:
- generic [ref=e739]: ewqeqwe
- cell "正常" [ref=e740]:
- generic [ref=e743]: 正常
- cell "10" [ref=e744]:
- generic [ref=e745]: "10"
- cell "2026-03-12 15:03:56" [ref=e746]:
- generic [ref=e747]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e748]:
- generic [ref=e749]:
- button "详情" [ref=e750] [cursor=pointer]:
- generic [ref=e751]: 详情
- button "撤回" [ref=e752] [cursor=pointer]:
- generic [ref=e753]: 撤回
- button "删除" [ref=e754] [cursor=pointer]:
- generic [ref=e755]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e756]':
- cell "136" [ref=e757]:
- generic [ref=e758]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e759]':
- generic [ref=e761]:
- generic [ref=e763]:
- generic [ref=e764]:
- generic [ref=e765]: 卜锦元
- generic [ref=e766]: "ID: 7"
- cell "文本" [ref=e767]:
- generic [ref=e770]: 文本
- cell "23213123" [ref=e771]:
- generic [ref=e773]: "23213123"
- cell "正常" [ref=e774]:
- generic [ref=e777]: 正常
- cell "10" [ref=e778]:
- generic [ref=e779]: "10"
- cell "2026-03-12 15:03:53" [ref=e780]:
- generic [ref=e781]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e782]:
- generic [ref=e783]:
- button "详情" [ref=e784] [cursor=pointer]:
- generic [ref=e785]: 详情
- button "撤回" [ref=e786] [cursor=pointer]:
- generic [ref=e787]: 撤回
- button "删除" [ref=e788] [cursor=pointer]:
- generic [ref=e789]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e790]':
- cell "135" [ref=e791]:
- generic [ref=e792]: "135"
- 'cell "周 周和智 ID: 15" [ref=e793]':
- generic [ref=e795]:
- generic [ref=e797]:
- generic [ref=e798]:
- generic [ref=e799]: 周和智
- generic [ref=e800]: "ID: 15"
- cell "文本" [ref=e801]:
- generic [ref=e804]: 文本
- cell "打打看迦拉克隆离开" [ref=e805]:
- generic [ref=e807]: 打打看迦拉克隆离开
- cell "正常" [ref=e808]:
- generic [ref=e811]: 正常
- cell "10" [ref=e812]:
- generic [ref=e813]: "10"
- cell "2026-03-12 15:03:39" [ref=e814]:
- generic [ref=e815]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e816]:
- generic [ref=e817]:
- button "详情" [ref=e818] [cursor=pointer]:
- generic [ref=e819]: 详情
- button "撤回" [ref=e820] [cursor=pointer]:
- generic [ref=e821]: 撤回
- button "删除" [ref=e822] [cursor=pointer]:
- generic [ref=e823]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e824]':
- cell "134" [ref=e825]:
- generic [ref=e826]: "134"
- 'cell "周 周和智 ID: 15" [ref=e827]':
- generic [ref=e829]:
- generic [ref=e831]:
- generic [ref=e832]:
- generic [ref=e833]: 周和智
- generic [ref=e834]: "ID: 15"
- cell "文本" [ref=e835]:
- generic [ref=e838]: 文本
- cell "啦啦啦啦" [ref=e839]:
- generic [ref=e841]: 啦啦啦啦
- cell "正常" [ref=e842]:
- generic [ref=e845]: 正常
- cell "10" [ref=e846]:
- generic [ref=e847]: "10"
- cell "2026-03-12 15:03:30" [ref=e848]:
- generic [ref=e849]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e850]:
- generic [ref=e851]:
- button "详情" [ref=e852] [cursor=pointer]:
- generic [ref=e853]: 详情
- button "撤回" [ref=e854] [cursor=pointer]:
- generic [ref=e855]: 撤回
- button "删除" [ref=e856] [cursor=pointer]:
- generic [ref=e857]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e858]':
- cell "133" [ref=e859]:
- generic [ref=e860]: "133"
- 'cell "周 周和智 ID: 15" [ref=e861]':
- generic [ref=e863]:
- generic [ref=e865]:
- generic [ref=e866]:
- generic [ref=e867]: 周和智
- generic [ref=e868]: "ID: 15"
- cell "文本" [ref=e869]:
- generic [ref=e872]: 文本
- cell "哈喽" [ref=e873]:
- generic [ref=e875]: 哈喽
- cell "正常" [ref=e876]:
- generic [ref=e879]: 正常
- cell "10" [ref=e880]:
- generic [ref=e881]: "10"
- cell "2026-03-12 15:03:17" [ref=e882]:
- generic [ref=e883]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e884]:
- generic [ref=e885]:
- button "详情" [ref=e886] [cursor=pointer]:
- generic [ref=e887]: 详情
- button "撤回" [ref=e888] [cursor=pointer]:
- generic [ref=e889]: 撤回
- button "删除" [ref=e890] [cursor=pointer]:
- generic [ref=e891]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e892]':
- cell "132" [ref=e893]:
- generic [ref=e894]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e895]':
- generic [ref=e897]:
- generic [ref=e899]:
- generic [ref=e900]:
- generic [ref=e901]: 卜锦元
- generic [ref=e902]: "ID: 7"
- cell "文本" [ref=e903]:
- generic [ref=e906]: 文本
- cell "niahha a" [ref=e907]:
- generic [ref=e909]: niahha a
- cell "正常" [ref=e910]:
- generic [ref=e913]: 正常
- cell "10" [ref=e914]:
- generic [ref=e915]: "10"
- cell "2026-03-12 15:03:08" [ref=e916]:
- generic [ref=e917]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e918]:
- generic [ref=e919]:
- button "详情" [ref=e920] [cursor=pointer]:
- generic [ref=e921]: 详情
- button "撤回" [ref=e922] [cursor=pointer]:
- generic [ref=e923]: 撤回
- button "删除" [ref=e924] [cursor=pointer]:
- generic [ref=e925]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e926]':
- cell "131" [ref=e927]:
- generic [ref=e928]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e929]':
- generic [ref=e931]:
- generic [ref=e933]:
- generic [ref=e934]:
- generic [ref=e935]: 新昵称
- generic [ref=e936]: "ID: 4"
- cell "文本" [ref=e937]:
- generic [ref=e940]: 文本
- cell "哈哈哈,测试" [ref=e941]:
- generic [ref=e943]: 哈哈哈,测试
- cell "正常" [ref=e944]:
- generic [ref=e947]: 正常
- cell "8" [ref=e948]:
- generic [ref=e949]: "8"
- cell "2026-03-04 18:37:53" [ref=e950]:
- generic [ref=e951]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e952]:
- generic [ref=e953]:
- button "详情" [ref=e954] [cursor=pointer]:
- generic [ref=e955]: 详情
- button "撤回" [ref=e956] [cursor=pointer]:
- generic [ref=e957]: 撤回
- button "删除" [ref=e958] [cursor=pointer]:
- generic [ref=e959]: 删除
- generic [ref=e962]:
- generic [ref=e963]: 共 146 条
- generic [ref=e966] [cursor=pointer]:
- generic:
- combobox [ref=e968]
- generic [ref=e969]: 20条/页
- img [ref=e972]
- button "上一页" [disabled] [ref=e974]:
- generic:
- img
- list [ref=e975]:
- listitem "第 1 页" [ref=e976]: "1"
- listitem "第 2 页" [ref=e977] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e978] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e979] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e980] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e981] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e982] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e983] [cursor=pointer]: "8"
- button "下一页" [ref=e984] [cursor=pointer]:
- generic:
- img
- generic [ref=e985]:
- generic [ref=e986]: 前往
- spinbutton "页" [ref=e989]: "1"
- generic [ref=e990]:

View File

@@ -0,0 +1,706 @@
- generic [ref=e47]:
- complementary [ref=e48]:
- generic [ref=e49]:
- generic [ref=e50]: E
- generic [ref=e51]: EchoChat
- menubar [ref=e52]:
- menuitem "仪表盘" [ref=e53] [cursor=pointer]:
- img [ref=e55]
- text: 仪表盘
- menuitem "用户管理" [ref=e57]:
- generic [ref=e58] [cursor=pointer]:
- img [ref=e60]
- generic [ref=e62]: 用户管理
- img [ref=e64]
- menuitem "联系人管理" [ref=e66]:
- generic [ref=e67] [cursor=pointer]:
- img [ref=e69]
- generic [ref=e72]: 联系人管理
- img [ref=e74]
- menuitem "群组管理" [ref=e76]:
- generic [ref=e77] [cursor=pointer]:
- img [ref=e79]
- generic [ref=e82]: 群组管理
- img [ref=e84]
- menuitem "消息管理" [expanded] [ref=e86]:
- generic [ref=e87] [cursor=pointer]:
- img [ref=e89]
- generic [ref=e91]: 消息管理
- img [ref=e93]
- menu [ref=e167]:
- menuitem "消息列表" [ref=e168] [cursor=pointer]
- menuitem "消息统计" [ref=e169] [cursor=pointer]
- menuitem "在线监控" [ref=e95] [cursor=pointer]:
- img [ref=e97]
- text: 在线监控
- generic [ref=e99]:
- generic [ref=e100]:
- img [ref=e103] [cursor=pointer]
- button "管 admin_test" [ref=e107] [cursor=pointer]:
- generic [ref=e108]:
- generic [ref=e109]: admin_test
- img [ref=e111]
- main [ref=e113]:
- generic [ref=e170]:
- heading "消息管理" [level=2] [ref=e172]
- generic [ref=e175]:
- generic [ref=e176]:
- generic [ref=e177]: 关键词
- generic [ref=e180]:
- img [ref=e183]
- textbox "关键词" [ref=e185]:
- /placeholder: 搜索消息内容
- generic [ref=e186]:
- generic [ref=e187]: 类型
- generic [ref=e190] [cursor=pointer]:
- generic:
- combobox "类型" [ref=e192]
- generic [ref=e193]: 全部
- img [ref=e196]
- generic [ref=e198]:
- generic [ref=e199]: 状态
- generic [ref=e202] [cursor=pointer]:
- generic:
- combobox "状态" [ref=e204]
- generic [ref=e205]: 全部
- img [ref=e208]
- generic [ref=e210]:
- generic [ref=e211]: 发送者ID
- spinbutton "发送者ID" [ref=e215]
- generic [ref=e216]:
- generic [ref=e217]: 时间范围
- generic [ref=e219]:
- img [ref=e221]
- combobox "时间范围" [ref=e223]
- generic [ref=e224]:
- combobox "结束日期" [ref=e225]
- generic [ref=e227]:
- button "搜索" [ref=e228] [cursor=pointer]:
- generic [ref=e229]: 搜索
- button "重置" [ref=e230] [cursor=pointer]:
- generic [ref=e231]: 重置
- generic [ref=e233]:
- generic [ref=e235]:
- table [ref=e237]:
- rowgroup [ref=e247]:
- row "ID 发送者 类型 内容 状态 会话ID 发送时间 操作" [ref=e248]:
- columnheader "ID" [ref=e249]:
- generic [ref=e250]: ID
- columnheader "发送者" [ref=e251]:
- generic [ref=e252]: 发送者
- columnheader "类型" [ref=e253]:
- generic [ref=e254]: 类型
- columnheader "内容" [ref=e255]:
- generic [ref=e256]: 内容
- columnheader "状态" [ref=e257]:
- generic [ref=e258]: 状态
- columnheader "会话ID" [ref=e259]:
- generic [ref=e260]: 会话ID
- columnheader "发送时间" [ref=e261]:
- generic [ref=e262]: 发送时间
- columnheader "操作" [ref=e263]:
- generic [ref=e264]: 操作
- table [ref=e269]:
- rowgroup [ref=e279]:
- 'row "150 新 新昵称 ID: 4 文件 [文件] 正常 9 2026-04-20 11:00:42 详情 撤回 删除" [ref=e280]':
- cell "150" [ref=e281]:
- generic [ref=e282]: "150"
- 'cell "新 新昵称 ID: 4" [ref=e283]':
- generic [ref=e285]:
- generic [ref=e287]:
- generic [ref=e288]:
- generic [ref=e289]: 新昵称
- generic [ref=e290]: "ID: 4"
- cell "文件" [ref=e291]:
- generic [ref=e294]: 文件
- cell "[文件]" [ref=e295]:
- generic [ref=e297]: "[文件]"
- cell "正常" [ref=e298]:
- generic [ref=e301]: 正常
- cell "9" [ref=e302]:
- generic [ref=e303]: "9"
- cell "2026-04-20 11:00:42" [ref=e304]:
- generic [ref=e305]: 2026-04-20 11:00:42
- cell "详情 撤回 删除" [ref=e306]:
- generic [ref=e307]:
- button "详情" [ref=e308] [cursor=pointer]:
- generic [ref=e309]: 详情
- button "撤回" [ref=e310] [cursor=pointer]:
- generic [ref=e311]: 撤回
- button "删除" [ref=e312] [cursor=pointer]:
- generic [ref=e313]: 删除
- 'row "149 新 新昵称 ID: 4 文件 [文件] 正常 9 2026-04-20 10:59:09 详情 撤回 删除" [ref=e314]':
- cell "149" [ref=e315]:
- generic [ref=e316]: "149"
- 'cell "新 新昵称 ID: 4" [ref=e317]':
- generic [ref=e319]:
- generic [ref=e321]:
- generic [ref=e322]:
- generic [ref=e323]: 新昵称
- generic [ref=e324]: "ID: 4"
- cell "文件" [ref=e325]:
- generic [ref=e328]: 文件
- cell "[文件]" [ref=e329]:
- generic [ref=e331]: "[文件]"
- cell "正常" [ref=e332]:
- generic [ref=e335]: 正常
- cell "9" [ref=e336]:
- generic [ref=e337]: "9"
- cell "2026-04-20 10:59:09" [ref=e338]:
- generic [ref=e339]: 2026-04-20 10:59:09
- cell "详情 撤回 删除" [ref=e340]:
- generic [ref=e341]:
- button "详情" [ref=e342] [cursor=pointer]:
- generic [ref=e343]: 详情
- button "撤回" [ref=e344] [cursor=pointer]:
- generic [ref=e345]: 撤回
- button "删除" [ref=e346] [cursor=pointer]:
- generic [ref=e347]: 删除
- 'row "148 新 新昵称 ID: 4 图片 [图片] 正常 9 2026-04-20 10:57:27 详情 撤回 删除" [ref=e348]':
- cell "148" [ref=e349]:
- generic [ref=e350]: "148"
- 'cell "新 新昵称 ID: 4" [ref=e351]':
- generic [ref=e353]:
- generic [ref=e355]:
- generic [ref=e356]:
- generic [ref=e357]: 新昵称
- generic [ref=e358]: "ID: 4"
- cell "图片" [ref=e359]:
- generic [ref=e362]: 图片
- cell "[图片]" [ref=e363]:
- generic [ref=e365]: "[图片]"
- cell "正常" [ref=e366]:
- generic [ref=e369]: 正常
- cell "9" [ref=e370]:
- generic [ref=e371]: "9"
- cell "2026-04-20 10:57:27" [ref=e372]:
- generic [ref=e373]: 2026-04-20 10:57:27
- cell "详情 撤回 删除" [ref=e374]:
- generic [ref=e375]:
- button "详情" [ref=e376] [cursor=pointer]:
- generic [ref=e377]: 详情
- button "撤回" [ref=e378] [cursor=pointer]:
- generic [ref=e379]: 撤回
- button "删除" [ref=e380] [cursor=pointer]:
- generic [ref=e381]: 删除
- 'row "147 新 新昵称 ID: 4 图片 [图片] 正常 9 2026-04-20 10:53:18 详情 撤回 删除" [ref=e382]':
- cell "147" [ref=e383]:
- generic [ref=e384]: "147"
- 'cell "新 新昵称 ID: 4" [ref=e385]':
- generic [ref=e387]:
- generic [ref=e389]:
- generic [ref=e390]:
- generic [ref=e391]: 新昵称
- generic [ref=e392]: "ID: 4"
- cell "图片" [ref=e393]:
- generic [ref=e396]: 图片
- cell "[图片]" [ref=e397]:
- generic [ref=e399]: "[图片]"
- cell "正常" [ref=e400]:
- generic [ref=e403]: 正常
- cell "9" [ref=e404]:
- generic [ref=e405]: "9"
- cell "2026-04-20 10:53:18" [ref=e406]:
- generic [ref=e407]: 2026-04-20 10:53:18
- cell "详情 撤回 删除" [ref=e408]:
- generic [ref=e409]:
- button "详情" [ref=e410] [cursor=pointer]:
- generic [ref=e411]: 详情
- button "撤回" [ref=e412] [cursor=pointer]:
- generic [ref=e413]: 撤回
- button "删除" [ref=e414] [cursor=pointer]:
- generic [ref=e415]: 删除
- 'row "146 新 新昵称 ID: 4 图片 [图片] 正常 9 2026-04-20 10:49:56 详情 撤回 删除" [ref=e416]':
- cell "146" [ref=e417]:
- generic [ref=e418]: "146"
- 'cell "新 新昵称 ID: 4" [ref=e419]':
- generic [ref=e421]:
- generic [ref=e423]:
- generic [ref=e424]:
- generic [ref=e425]: 新昵称
- generic [ref=e426]: "ID: 4"
- cell "图片" [ref=e427]:
- generic [ref=e430]: 图片
- cell "[图片]" [ref=e431]:
- generic [ref=e433]: "[图片]"
- cell "正常" [ref=e434]:
- generic [ref=e437]: 正常
- cell "9" [ref=e438]:
- generic [ref=e439]: "9"
- cell "2026-04-20 10:49:56" [ref=e440]:
- generic [ref=e441]: 2026-04-20 10:49:56
- cell "详情 撤回 删除" [ref=e442]:
- generic [ref=e443]:
- button "详情" [ref=e444] [cursor=pointer]:
- generic [ref=e445]: 详情
- button "撤回" [ref=e446] [cursor=pointer]:
- generic [ref=e447]: 撤回
- button "删除" [ref=e448] [cursor=pointer]:
- generic [ref=e449]: 删除
- 'row "145 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:10:04 详情 撤回 删除" [ref=e450]':
- cell "145" [ref=e451]:
- generic [ref=e452]: "145"
- 'cell "卜 卜锦元 ID: 7" [ref=e453]':
- generic [ref=e455]:
- generic [ref=e457]:
- generic [ref=e458]:
- generic [ref=e459]: 卜锦元
- generic [ref=e460]: "ID: 7"
- cell "文本" [ref=e461]:
- generic [ref=e464]: 文本
- cell "1111" [ref=e465]:
- generic [ref=e467]: "1111"
- cell "正常" [ref=e468]:
- generic [ref=e471]: 正常
- cell "6" [ref=e472]:
- generic [ref=e473]: "6"
- cell "2026-04-17 14:10:04" [ref=e474]:
- generic [ref=e475]: 2026-04-17 14:10:04
- cell "详情 撤回 删除" [ref=e476]:
- generic [ref=e477]:
- button "详情" [ref=e478] [cursor=pointer]:
- generic [ref=e479]: 详情
- button "撤回" [ref=e480] [cursor=pointer]:
- generic [ref=e481]: 撤回
- button "删除" [ref=e482] [cursor=pointer]:
- generic [ref=e483]: 删除
- 'row "144 卜 卜锦元 ID: 7 文本 1112122 正常 6 2026-04-17 14:09:48 详情 撤回 删除" [ref=e484]':
- cell "144" [ref=e485]:
- generic [ref=e486]: "144"
- 'cell "卜 卜锦元 ID: 7" [ref=e487]':
- generic [ref=e489]:
- generic [ref=e491]:
- generic [ref=e492]:
- generic [ref=e493]: 卜锦元
- generic [ref=e494]: "ID: 7"
- cell "文本" [ref=e495]:
- generic [ref=e498]: 文本
- cell "1112122" [ref=e499]:
- generic [ref=e501]: "1112122"
- cell "正常" [ref=e502]:
- generic [ref=e505]: 正常
- cell "6" [ref=e506]:
- generic [ref=e507]: "6"
- cell "2026-04-17 14:09:48" [ref=e508]:
- generic [ref=e509]: 2026-04-17 14:09:48
- cell "详情 撤回 删除" [ref=e510]:
- generic [ref=e511]:
- button "详情" [ref=e512] [cursor=pointer]:
- generic [ref=e513]: 详情
- button "撤回" [ref=e514] [cursor=pointer]:
- generic [ref=e515]: 撤回
- button "删除" [ref=e516] [cursor=pointer]:
- generic [ref=e517]: 删除
- 'row "143 卜 卜锦元 ID: 7 文本 1111 正常 6 2026-04-17 14:09:36 详情 撤回 删除" [ref=e518]':
- cell "143" [ref=e519]:
- generic [ref=e520]: "143"
- 'cell "卜 卜锦元 ID: 7" [ref=e521]':
- generic [ref=e523]:
- generic [ref=e525]:
- generic [ref=e526]:
- generic [ref=e527]: 卜锦元
- generic [ref=e528]: "ID: 7"
- cell "文本" [ref=e529]:
- generic [ref=e532]: 文本
- cell "1111" [ref=e533]:
- generic [ref=e535]: "1111"
- cell "正常" [ref=e536]:
- generic [ref=e539]: 正常
- cell "6" [ref=e540]:
- generic [ref=e541]: "6"
- cell "2026-04-17 14:09:36" [ref=e542]:
- generic [ref=e543]: 2026-04-17 14:09:36
- cell "详情 撤回 删除" [ref=e544]:
- generic [ref=e545]:
- button "详情" [ref=e546] [cursor=pointer]:
- generic [ref=e547]: 详情
- button "撤回" [ref=e548] [cursor=pointer]:
- generic [ref=e549]: 撤回
- button "删除" [ref=e550] [cursor=pointer]:
- generic [ref=e551]: 删除
- 'row "142 段 段凌云 ID: 13 文本 111111111223 正常 6 2026-04-17 14:09:20 详情 撤回 删除" [ref=e552]':
- cell "142" [ref=e553]:
- generic [ref=e554]: "142"
- 'cell "段 段凌云 ID: 13" [ref=e555]':
- generic [ref=e557]:
- generic [ref=e559]:
- generic [ref=e560]:
- generic [ref=e561]: 段凌云
- generic [ref=e562]: "ID: 13"
- cell "文本" [ref=e563]:
- generic [ref=e566]: 文本
- cell "111111111223" [ref=e567]:
- generic [ref=e569]: "111111111223"
- cell "正常" [ref=e570]:
- generic [ref=e573]: 正常
- cell "6" [ref=e574]:
- generic [ref=e575]: "6"
- cell "2026-04-17 14:09:20" [ref=e576]:
- generic [ref=e577]: 2026-04-17 14:09:20
- cell "详情 撤回 删除" [ref=e578]:
- generic [ref=e579]:
- button "详情" [ref=e580] [cursor=pointer]:
- generic [ref=e581]: 详情
- button "撤回" [ref=e582] [cursor=pointer]:
- generic [ref=e583]: 撤回
- button "删除" [ref=e584] [cursor=pointer]:
- generic [ref=e585]: 删除
- 'row "141 周 周和智 ID: 15 文本 换届大会打卡还贷款 正常 8 2026-03-12 15:04:56 详情 撤回 删除" [ref=e586]':
- cell "141" [ref=e587]:
- generic [ref=e588]: "141"
- 'cell "周 周和智 ID: 15" [ref=e589]':
- generic [ref=e591]:
- generic [ref=e593]:
- generic [ref=e594]:
- generic [ref=e595]: 周和智
- generic [ref=e596]: "ID: 15"
- cell "文本" [ref=e597]:
- generic [ref=e600]: 文本
- cell "换届大会打卡还贷款" [ref=e601]:
- generic [ref=e603]: 换届大会打卡还贷款
- cell "正常" [ref=e604]:
- generic [ref=e607]: 正常
- cell "8" [ref=e608]:
- generic [ref=e609]: "8"
- cell "2026-03-12 15:04:56" [ref=e610]:
- generic [ref=e611]: 2026-03-12 15:04:56
- cell "详情 撤回 删除" [ref=e612]:
- generic [ref=e613]:
- button "详情" [ref=e614] [cursor=pointer]:
- generic [ref=e615]: 详情
- button "撤回" [ref=e616] [cursor=pointer]:
- generic [ref=e617]: 撤回
- button "删除" [ref=e618] [cursor=pointer]:
- generic [ref=e619]: 删除
- 'row "140 卜 卜锦元 ID: 7 文本 你能看到吗 正常 8 2026-03-12 15:04:54 详情 撤回 删除" [ref=e620]':
- cell "140" [ref=e621]:
- generic [ref=e622]: "140"
- 'cell "卜 卜锦元 ID: 7" [ref=e623]':
- generic [ref=e625]:
- generic [ref=e627]:
- generic [ref=e628]:
- generic [ref=e629]: 卜锦元
- generic [ref=e630]: "ID: 7"
- cell "文本" [ref=e631]:
- generic [ref=e634]: 文本
- cell "你能看到吗" [ref=e635]:
- generic [ref=e637]: 你能看到吗
- cell "正常" [ref=e638]:
- generic [ref=e641]: 正常
- cell "8" [ref=e642]:
- generic [ref=e643]: "8"
- cell "2026-03-12 15:04:54" [ref=e644]:
- generic [ref=e645]: 2026-03-12 15:04:54
- cell "详情 撤回 删除" [ref=e646]:
- generic [ref=e647]:
- button "详情" [ref=e648] [cursor=pointer]:
- generic [ref=e649]: 详情
- button "撤回" [ref=e650] [cursor=pointer]:
- generic [ref=e651]: 撤回
- button "删除" [ref=e652] [cursor=pointer]:
- generic [ref=e653]: 删除
- 'row "139 卜 卜锦元 ID: 7 文本 @周和智 1111 正常 8 2026-03-12 15:04:43 详情 撤回 删除" [ref=e654]':
- cell "139" [ref=e655]:
- generic [ref=e656]: "139"
- 'cell "卜 卜锦元 ID: 7" [ref=e657]':
- generic [ref=e659]:
- generic [ref=e661]:
- generic [ref=e662]:
- generic [ref=e663]: 卜锦元
- generic [ref=e664]: "ID: 7"
- cell "文本" [ref=e665]:
- generic [ref=e668]: 文本
- cell "@周和智 1111" [ref=e669]:
- generic [ref=e671]: "@周和智 1111"
- cell "正常" [ref=e672]:
- generic [ref=e675]: 正常
- cell "8" [ref=e676]:
- generic [ref=e677]: "8"
- cell "2026-03-12 15:04:43" [ref=e678]:
- generic [ref=e679]: 2026-03-12 15:04:43
- cell "详情 撤回 删除" [ref=e680]:
- generic [ref=e681]:
- button "详情" [ref=e682] [cursor=pointer]:
- generic [ref=e683]: 详情
- button "撤回" [ref=e684] [cursor=pointer]:
- generic [ref=e685]: 撤回
- button "删除" [ref=e686] [cursor=pointer]:
- generic [ref=e687]: 删除
- 'row "138 ? - ID: 0 系统消息 卜锦元 邀请 周和智 加入了群聊 正常 8 2026-03-12 15:04:20 详情 撤回 删除" [ref=e688]':
- cell "138" [ref=e689]:
- generic [ref=e690]: "138"
- 'cell "? - ID: 0" [ref=e691]':
- generic [ref=e693]:
- generic [ref=e695]: "?"
- generic [ref=e696]:
- generic [ref=e697]: "-"
- generic [ref=e698]: "ID: 0"
- cell "系统消息" [ref=e699]:
- generic [ref=e702]: 系统消息
- cell "卜锦元 邀请 周和智 加入了群聊" [ref=e703]:
- generic [ref=e705]: 卜锦元 邀请 周和智 加入了群聊
- cell "正常" [ref=e706]:
- generic [ref=e709]: 正常
- cell "8" [ref=e710]:
- generic [ref=e711]: "8"
- cell "2026-03-12 15:04:20" [ref=e712]:
- generic [ref=e713]: 2026-03-12 15:04:20
- cell "详情 撤回 删除" [ref=e714]:
- generic [ref=e715]:
- button "详情" [ref=e716] [cursor=pointer]:
- generic [ref=e717]: 详情
- button "撤回" [ref=e718] [cursor=pointer]:
- generic [ref=e719]: 撤回
- button "删除" [ref=e720] [cursor=pointer]:
- generic [ref=e721]: 删除
- 'row "137 卜 卜锦元 ID: 7 文本 ewqeqwe 正常 10 2026-03-12 15:03:56 详情 撤回 删除" [ref=e722]':
- cell "137" [ref=e723]:
- generic [ref=e724]: "137"
- 'cell "卜 卜锦元 ID: 7" [ref=e725]':
- generic [ref=e727]:
- generic [ref=e729]:
- generic [ref=e730]:
- generic [ref=e731]: 卜锦元
- generic [ref=e732]: "ID: 7"
- cell "文本" [ref=e733]:
- generic [ref=e736]: 文本
- cell "ewqeqwe" [ref=e737]:
- generic [ref=e739]: ewqeqwe
- cell "正常" [ref=e740]:
- generic [ref=e743]: 正常
- cell "10" [ref=e744]:
- generic [ref=e745]: "10"
- cell "2026-03-12 15:03:56" [ref=e746]:
- generic [ref=e747]: 2026-03-12 15:03:56
- cell "详情 撤回 删除" [ref=e748]:
- generic [ref=e749]:
- button "详情" [ref=e750] [cursor=pointer]:
- generic [ref=e751]: 详情
- button "撤回" [ref=e752] [cursor=pointer]:
- generic [ref=e753]: 撤回
- button "删除" [ref=e754] [cursor=pointer]:
- generic [ref=e755]: 删除
- 'row "136 卜 卜锦元 ID: 7 文本 23213123 正常 10 2026-03-12 15:03:53 详情 撤回 删除" [ref=e756]':
- cell "136" [ref=e757]:
- generic [ref=e758]: "136"
- 'cell "卜 卜锦元 ID: 7" [ref=e759]':
- generic [ref=e761]:
- generic [ref=e763]:
- generic [ref=e764]:
- generic [ref=e765]: 卜锦元
- generic [ref=e766]: "ID: 7"
- cell "文本" [ref=e767]:
- generic [ref=e770]: 文本
- cell "23213123" [ref=e771]:
- generic [ref=e773]: "23213123"
- cell "正常" [ref=e774]:
- generic [ref=e777]: 正常
- cell "10" [ref=e778]:
- generic [ref=e779]: "10"
- cell "2026-03-12 15:03:53" [ref=e780]:
- generic [ref=e781]: 2026-03-12 15:03:53
- cell "详情 撤回 删除" [ref=e782]:
- generic [ref=e783]:
- button "详情" [ref=e784] [cursor=pointer]:
- generic [ref=e785]: 详情
- button "撤回" [ref=e786] [cursor=pointer]:
- generic [ref=e787]: 撤回
- button "删除" [ref=e788] [cursor=pointer]:
- generic [ref=e789]: 删除
- 'row "135 周 周和智 ID: 15 文本 打打看迦拉克隆离开 正常 10 2026-03-12 15:03:39 详情 撤回 删除" [ref=e790]':
- cell "135" [ref=e791]:
- generic [ref=e792]: "135"
- 'cell "周 周和智 ID: 15" [ref=e793]':
- generic [ref=e795]:
- generic [ref=e797]:
- generic [ref=e798]:
- generic [ref=e799]: 周和智
- generic [ref=e800]: "ID: 15"
- cell "文本" [ref=e801]:
- generic [ref=e804]: 文本
- cell "打打看迦拉克隆离开" [ref=e805]:
- generic [ref=e807]: 打打看迦拉克隆离开
- cell "正常" [ref=e808]:
- generic [ref=e811]: 正常
- cell "10" [ref=e812]:
- generic [ref=e813]: "10"
- cell "2026-03-12 15:03:39" [ref=e814]:
- generic [ref=e815]: 2026-03-12 15:03:39
- cell "详情 撤回 删除" [ref=e816]:
- generic [ref=e817]:
- button "详情" [ref=e818] [cursor=pointer]:
- generic [ref=e819]: 详情
- button "撤回" [ref=e820] [cursor=pointer]:
- generic [ref=e821]: 撤回
- button "删除" [ref=e822] [cursor=pointer]:
- generic [ref=e823]: 删除
- 'row "134 周 周和智 ID: 15 文本 啦啦啦啦 正常 10 2026-03-12 15:03:30 详情 撤回 删除" [ref=e824]':
- cell "134" [ref=e825]:
- generic [ref=e826]: "134"
- 'cell "周 周和智 ID: 15" [ref=e827]':
- generic [ref=e829]:
- generic [ref=e831]:
- generic [ref=e832]:
- generic [ref=e833]: 周和智
- generic [ref=e834]: "ID: 15"
- cell "文本" [ref=e835]:
- generic [ref=e838]: 文本
- cell "啦啦啦啦" [ref=e839]:
- generic [ref=e841]: 啦啦啦啦
- cell "正常" [ref=e842]:
- generic [ref=e845]: 正常
- cell "10" [ref=e846]:
- generic [ref=e847]: "10"
- cell "2026-03-12 15:03:30" [ref=e848]:
- generic [ref=e849]: 2026-03-12 15:03:30
- cell "详情 撤回 删除" [ref=e850]:
- generic [ref=e851]:
- button "详情" [ref=e852] [cursor=pointer]:
- generic [ref=e853]: 详情
- button "撤回" [ref=e854] [cursor=pointer]:
- generic [ref=e855]: 撤回
- button "删除" [ref=e856] [cursor=pointer]:
- generic [ref=e857]: 删除
- 'row "133 周 周和智 ID: 15 文本 哈喽 正常 10 2026-03-12 15:03:17 详情 撤回 删除" [ref=e858]':
- cell "133" [ref=e859]:
- generic [ref=e860]: "133"
- 'cell "周 周和智 ID: 15" [ref=e861]':
- generic [ref=e863]:
- generic [ref=e865]:
- generic [ref=e866]:
- generic [ref=e867]: 周和智
- generic [ref=e868]: "ID: 15"
- cell "文本" [ref=e869]:
- generic [ref=e872]: 文本
- cell "哈喽" [ref=e873]:
- generic [ref=e875]: 哈喽
- cell "正常" [ref=e876]:
- generic [ref=e879]: 正常
- cell "10" [ref=e880]:
- generic [ref=e881]: "10"
- cell "2026-03-12 15:03:17" [ref=e882]:
- generic [ref=e883]: 2026-03-12 15:03:17
- cell "详情 撤回 删除" [ref=e884]:
- generic [ref=e885]:
- button "详情" [ref=e886] [cursor=pointer]:
- generic [ref=e887]: 详情
- button "撤回" [ref=e888] [cursor=pointer]:
- generic [ref=e889]: 撤回
- button "删除" [ref=e890] [cursor=pointer]:
- generic [ref=e891]: 删除
- 'row "132 卜 卜锦元 ID: 7 文本 niahha a 正常 10 2026-03-12 15:03:08 详情 撤回 删除" [ref=e892]':
- cell "132" [ref=e893]:
- generic [ref=e894]: "132"
- 'cell "卜 卜锦元 ID: 7" [ref=e895]':
- generic [ref=e897]:
- generic [ref=e899]:
- generic [ref=e900]:
- generic [ref=e901]: 卜锦元
- generic [ref=e902]: "ID: 7"
- cell "文本" [ref=e903]:
- generic [ref=e906]: 文本
- cell "niahha a" [ref=e907]:
- generic [ref=e909]: niahha a
- cell "正常" [ref=e910]:
- generic [ref=e913]: 正常
- cell "10" [ref=e914]:
- generic [ref=e915]: "10"
- cell "2026-03-12 15:03:08" [ref=e916]:
- generic [ref=e917]: 2026-03-12 15:03:08
- cell "详情 撤回 删除" [ref=e918]:
- generic [ref=e919]:
- button "详情" [ref=e920] [cursor=pointer]:
- generic [ref=e921]: 详情
- button "撤回" [ref=e922] [cursor=pointer]:
- generic [ref=e923]: 撤回
- button "删除" [ref=e924] [cursor=pointer]:
- generic [ref=e925]: 删除
- 'row "131 新 新昵称 ID: 4 文本 哈哈哈,测试 正常 8 2026-03-04 18:37:53 详情 撤回 删除" [ref=e926]':
- cell "131" [ref=e927]:
- generic [ref=e928]: "131"
- 'cell "新 新昵称 ID: 4" [ref=e929]':
- generic [ref=e931]:
- generic [ref=e933]:
- generic [ref=e934]:
- generic [ref=e935]: 新昵称
- generic [ref=e936]: "ID: 4"
- cell "文本" [ref=e937]:
- generic [ref=e940]: 文本
- cell "哈哈哈,测试" [ref=e941]:
- generic [ref=e943]: 哈哈哈,测试
- cell "正常" [ref=e944]:
- generic [ref=e947]: 正常
- cell "8" [ref=e948]:
- generic [ref=e949]: "8"
- cell "2026-03-04 18:37:53" [ref=e950]:
- generic [ref=e951]: 2026-03-04 18:37:53
- cell "详情 撤回 删除" [ref=e952]:
- generic [ref=e953]:
- button "详情" [ref=e954] [cursor=pointer]:
- generic [ref=e955]: 详情
- button "撤回" [ref=e956] [cursor=pointer]:
- generic [ref=e957]: 撤回
- button "删除" [ref=e958] [cursor=pointer]:
- generic [ref=e959]: 删除
- generic [ref=e962]:
- generic [ref=e963]: 共 146 条
- generic [ref=e966] [cursor=pointer]:
- generic:
- combobox [ref=e968]
- generic [ref=e969]: 20条/页
- img [ref=e972]
- button "上一页" [disabled] [ref=e974]:
- generic:
- img
- list [ref=e975]:
- listitem "第 1 页" [ref=e976]: "1"
- listitem "第 2 页" [ref=e977] [cursor=pointer]: "2"
- listitem "第 3 页" [ref=e978] [cursor=pointer]: "3"
- listitem "第 4 页" [ref=e979] [cursor=pointer]: "4"
- listitem "第 5 页" [ref=e980] [cursor=pointer]: "5"
- listitem "第 6 页" [ref=e981] [cursor=pointer]: "6"
- listitem "向后 5 页" [ref=e982] [cursor=pointer]:
- img
- listitem "第 8 页" [ref=e983] [cursor=pointer]: "8"
- button "下一页" [ref=e984] [cursor=pointer]:
- generic:
- img
- generic [ref=e985]:
- generic [ref=e986]: 前往
- spinbutton "页" [ref=e989]: "1"
- generic [ref=e990]:
- dialog "消息详情" [ref=e992]:
- generic [ref=e993]:
- generic [ref=e994]:
- heading "消息详情" [level=2] [ref=e995]
- button "关闭此对话框" [ref=e996] [cursor=pointer]:
- img [ref=e998]
- generic [ref=e1001]:
- generic [ref=e1002]:
- generic [ref=e1004]:
- generic [ref=e1005]:
- generic [ref=e1006]:
- generic [ref=e1007]: 新昵称
- generic [ref=e1009]: 正常
- generic [ref=e1010]:
- generic [ref=e1011]: "ID: 148"
- separator [ref=e1012]
- generic [ref=e1013]: "发送者ID: 4"
- separator [ref=e1014]
- generic [ref=e1015]: "会话ID: 9"
- generic [ref=e1016]:
- generic [ref=e1017]:
- generic [ref=e1018]: 消息类型
- generic [ref=e1021]: 图片
- generic [ref=e1022]:
- generic [ref=e1023]: 发送时间
- generic [ref=e1024]: 2026-04-20 10:57:27
- generic [ref=e1025]:
- generic [ref=e1026]: 消息内容
- img [ref=e1029] [cursor=pointer]
- generic [ref=e1032]:
- button "Extra 原始数据" [expanded] [active] [ref=e1033] [cursor=pointer]:
- generic [ref=e1034]: Extra 原始数据
- img [ref=e1036]
- region "Extra 原始数据" [ref=e1038]:
- generic [ref=e1040]: "{ \"images\": [ { \"url\": \"http://localhost:9000/echochat/uploads/2026/04/20/e1b275b2-d77c-44b4-87ac-b11ae61c3858.jpg\", \"size\": 989411, \"width\": 768, \"height\": 768, \"file_name\": \"test-image.jpg\", \"thumbnail_url\": \"http://localhost:9000/echochat/uploads/2026/04/20/e1b275b2-d77c-44b4-87ac-b11ae61c3858_thumb.jpg\" } ] }"

View File

@@ -0,0 +1 @@
EchoChat test file content - for upload testing

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 KiB

View File

@@ -83,19 +83,68 @@ EchoChat/
- PostgreSQL 17通过 Docker 自动启动) - PostgreSQL 17通过 Docker 自动启动)
- Redis 7通过 Docker 自动启动) - Redis 7通过 Docker 自动启动)
### 方式一:Docker Compose 一键启动(推荐) ### 方式一:一键脚本(推荐)
项目在 `scripts/` 目录遵循「**首次初始化 / 日常启停**」职责分离模式,参考 Rails / Django / Next.js 社区通用做法:
| 脚本 | 用途 | 使用频率 |
|---|---|---|
| `scripts/dev-setup.sh` | **首次环境初始化**:检查 Docker、拉起 Postgres/Redis/MinIO、重试式健康检查 | 仅首次 clone 或重建卷时 |
| `scripts/start.sh` | **日常启动**:秒级拉起全部服务(容器 + 应用层) | 每天多次 |
| `scripts/stop.sh` | **日常停止**:优雅终止应用层,默认保留容器 | 每天多次 |
| `scripts/status.sh` | **状态查看**:端口 / PID / 容器一览 | 排障随时 |
#### 首次使用(仅一次)
```bash
# 首次 clone 后执行一次,完成 Docker 中间件初始化 + 健康检查
./scripts/dev-setup.sh
```
#### 日常启停
```bash
# 启动全部服务
./scripts/start.sh
# 查看服务状态(端口/PID/容器)
./scripts/status.sh
# 停止应用层(保留 Docker 中间件)
./scripts/stop.sh
# 停止全部(含 Docker 中间件)
./scripts/stop.sh --all
# 只启停单项(可选 docker|backend|frontend|admin
./scripts/start.sh backend
./scripts/stop.sh frontend
```
后台进程的 PID 与日志默认写入 `.run/`(已加入 gitignore排障时可直接查看 `.run/logs/*.log`
启动后各服务地址:
| 服务 | 端口 | 说明 |
|---|---|---|
| 前台用户端 (H5) | 5173 | `http://localhost:5173` |
| 后台管理端 | 3100 | `http://localhost:3100` |
| Go 后端 API | 8085 | `http://localhost:8085``/health` 健康检查) |
| PostgreSQL | 5432 | Docker 容器 `echochat-postgres` |
| Redis | 6379 | Docker 容器 `echochat-redis` |
| MinIO API | 9000 | 对象存储S3 兼容 |
| MinIO Console | 9001 | `http://localhost:9001`echochat / echochat123456 |
### 方式二Docker Compose 全量启动
```bash ```bash
cd deploy cd deploy
docker compose -f docker-compose.dev.yml up -d docker compose -f docker-compose.dev.yml up -d
``` ```
启动后服务地址: > 注意:此方式下 Go 后端、前台、管理端需按下方「方式三」各自启动,或在 compose 中启用 `go-service` 服务。
- Go 后端 API`http://localhost:8085`
- PostgreSQL`localhost:5432`
- Redis`localhost:6379`
### 方式:分步手动启动(开发调试) ### 方式:分步手动启动(开发调试)
**1. 启动基础设施(数据库 + 缓存)** **1. 启动基础设施(数据库 + 缓存)**

View File

@@ -11,6 +11,7 @@
"@element-plus/icons-vue": "^2.3.2", "@element-plus/icons-vue": "^2.3.2",
"@vitejs/plugin-vue": "^6.0.4", "@vitejs/plugin-vue": "^6.0.4",
"axios": "^1.13.6", "axios": "^1.13.6",
"echarts": "^6.0.0",
"element-plus": "^2.13.3", "element-plus": "^2.13.3",
"pinia": "^3.0.4", "pinia": "^3.0.4",
"vite": "^7.3.1", "vite": "^7.3.1",
@@ -1243,6 +1244,16 @@
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/echarts": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/echarts/-/echarts-6.0.0.tgz",
"integrity": "sha512-Tte/grDQRiETQP4xz3iZWSvoHrkCQtwqd6hs+mifXcjrCuo2iKWbajFObuLJVBlDIJlOzgQPd1hsaKt/3+OMkQ==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "2.3.0",
"zrender": "6.0.0"
}
},
"node_modules/element-plus": { "node_modules/element-plus": {
"version": "2.13.3", "version": "2.13.3",
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.13.3.tgz", "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.13.3.tgz",
@@ -1830,6 +1841,12 @@
"url": "https://github.com/sponsors/SuperchupuDev" "url": "https://github.com/sponsors/SuperchupuDev"
} }
}, },
"node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==",
"license": "0BSD"
},
"node_modules/vite": { "node_modules/vite": {
"version": "7.3.1", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
@@ -1947,6 +1964,15 @@
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
"integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
"license": "MIT" "license": "MIT"
},
"node_modules/zrender": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/zrender/-/zrender-6.0.0.tgz",
"integrity": "sha512-41dFXEEXuJpNecuUQq6JlbybmnHaqqpGlbH1yxnA5V9MMP4SbohSVZsJIwz+zdjQXSSlR1Vc34EgH1zxyTDvhg==",
"license": "BSD-3-Clause",
"dependencies": {
"tslib": "2.3.0"
}
} }
} }
} }

View File

@@ -12,6 +12,7 @@
"@element-plus/icons-vue": "^2.3.2", "@element-plus/icons-vue": "^2.3.2",
"@vitejs/plugin-vue": "^6.0.4", "@vitejs/plugin-vue": "^6.0.4",
"axios": "^1.13.6", "axios": "^1.13.6",
"echarts": "^6.0.0",
"element-plus": "^2.13.3", "element-plus": "^2.13.3",
"pinia": "^3.0.4", "pinia": "^3.0.4",
"vite": "^7.3.1", "vite": "^7.3.1",

86
admin/src/api/message.js Normal file
View File

@@ -0,0 +1,86 @@
/**
* 消息管理 API 模块
*
* 对应后端路由:/api/v1/admin/messages
* 所有接口需要 JWT + admin 角色权限
*
* 接口列表:
* - GET /api/v1/admin/messages 消息列表(分页 + 多条件筛选)
* - GET /api/v1/admin/messages/:id 消息详情
* - DELETE /api/v1/admin/messages/:id 删除消息(软删除)
* - PUT /api/v1/admin/messages/:id/recall 撤回消息
* - GET /api/v1/admin/messages/stats 消息统计
*/
import request from '@/utils/request'
/**
* 获取消息列表
* @param {Object} params - 查询参数
* @param {number} [params.page] - 页码(默认 1
* @param {number} [params.page_size] - 每页数量(默认 20
* @param {string} [params.keyword] - 搜索关键词(模糊匹配消息内容)
* @param {number} [params.type] - 消息类型筛选1=文本/2=图片/3=语音/5=文件/10=系统)
* @param {number} [params.sender_id] - 发送者 ID
* @param {number} [params.conversation_id] - 会话 ID
* @param {number} [params.status] - 消息状态1=正常/2=已撤回/3=已删除)
* @param {string} [params.start_time] - 开始时间YYYY-MM-DD
* @param {string} [params.end_time] - 结束时间YYYY-MM-DD
* @returns {Promise<{data: {total: number, list: Array, page: number, page_size: number}}>}
*/
export function getMessageList(params) {
return request({
url: '/api/v1/admin/messages',
method: 'get',
params
})
}
/**
* 获取消息详情
* @param {number} id - 消息 ID
* @returns {Promise<{data: Object}>}
*/
export function getMessageDetail(id) {
return request({
url: `/api/v1/admin/messages/${id}`,
method: 'get'
})
}
/**
* 删除消息(软删除)
* @param {number} id - 消息 ID
* @returns {Promise}
*/
export function deleteMessage(id) {
return request({
url: `/api/v1/admin/messages/${id}`,
method: 'delete'
})
}
/**
* 撤回消息
* @param {number} id - 消息 ID
* @returns {Promise}
*/
export function recallMessage(id) {
return request({
url: `/api/v1/admin/messages/${id}/recall`,
method: 'put'
})
}
/**
* 获取消息统计数据
* @param {Object} params - 查询参数
* @param {number} [params.days] - 统计天数(默认 7最大 90
* @returns {Promise<{data: {total_count, today_count, type_distribution, daily_trend, active_users, active_groups}}>}
*/
export function getMessageStats(params) {
return request({
url: '/api/v1/admin/messages/stats',
method: 'get',
params
})
}

View File

@@ -62,6 +62,18 @@ const routes = [
name: 'GroupManage', name: 'GroupManage',
component: () => import('@/views/group/list.vue'), component: () => import('@/views/group/list.vue'),
meta: { title: '群组管理' } meta: { title: '群组管理' }
},
{
path: 'message/list',
name: 'MessageList',
component: () => import('@/views/message/list.vue'),
meta: { title: '消息列表' }
},
{
path: 'message/stats',
name: 'MessageStats',
component: () => import('@/views/message/stats.vue'),
meta: { title: '消息统计' }
} }
] ]
} }

View File

@@ -56,6 +56,15 @@
<el-menu-item index="/group/list">群组列表</el-menu-item> <el-menu-item index="/group/list">群组列表</el-menu-item>
</el-sub-menu> </el-sub-menu>
<el-sub-menu index="message-manage">
<template #title>
<el-icon><ChatRound /></el-icon>
<span>消息管理</span>
</template>
<el-menu-item index="/message/list">消息列表</el-menu-item>
<el-menu-item index="/message/stats">消息统计</el-menu-item>
</el-sub-menu>
<el-menu-item index="/monitor/online"> <el-menu-item index="/monitor/online">
<el-icon><Monitor /></el-icon> <el-icon><Monitor /></el-icon>
<template #title>在线监控</template> <template #title>在线监控</template>

View File

@@ -0,0 +1,756 @@
<!--
管理端消息列表页面
设计系统Data-Dense Dashboard 风格与群组/用户列表页保持一致
功能
- 多条件筛选关键词 / 消息类型 / 发送者 / 状态 / 时间范围
- 消息数据表格Element Plus Table
- 分页组件
- 操作按钮查看详情 / 撤回 / 删除
- 消息详情弹窗含富媒体预览
对应后端 API
- GET /api/v1/admin/messages
- GET /api/v1/admin/messages/:id
- DELETE /api/v1/admin/messages/:id
- PUT /api/v1/admin/messages/:id/recall
-->
<template>
<div class="message-list-page">
<div class="page-header">
<h2 class="page-title">消息管理</h2>
</div>
<!-- 筛选区 -->
<el-card class="filter-card" shadow="never">
<el-form :inline="true" class="filter-form" @submit.prevent="handleSearch">
<el-form-item label="关键词">
<el-input
v-model="filters.keyword"
placeholder="搜索消息内容"
clearable
style="width: 200px"
@clear="handleSearch"
>
<template #prefix>
<el-icon><Search /></el-icon>
</template>
</el-input>
</el-form-item>
<el-form-item label="类型">
<el-select v-model="filters.type" placeholder="全部" clearable style="width: 120px">
<el-option label="文本" :value="1" />
<el-option label="图片" :value="2" />
<el-option label="语音" :value="3" />
<el-option label="文件" :value="5" />
<el-option label="系统" :value="10" />
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="filters.status" placeholder="全部" clearable style="width: 120px">
<el-option label="正常" :value="1" />
<el-option label="已撤回" :value="2" />
<el-option label="已删除" :value="3" />
</el-select>
</el-form-item>
<el-form-item label="发送者ID">
<el-input
v-model="filters.sender_id"
placeholder="用户ID"
clearable
style="width: 120px"
type="number"
/>
</el-form-item>
<el-form-item label="时间范围">
<el-date-picker
v-model="dateRange"
type="daterange"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
style="width: 260px"
@change="onDateRangeChange"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">搜索</el-button>
<el-button @click="handleReset">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<!-- 数据表格 -->
<el-card class="table-card" shadow="never">
<el-table
v-loading="loading"
:data="messageList"
stripe
border
style="width: 100%"
row-class-name="table-row"
>
<el-table-column prop="id" label="ID" width="80" align="center" />
<el-table-column label="发送者" min-width="150">
<template #default="{ row }">
<div class="sender-cell">
<div
class="sender-avatar"
:style="{ backgroundColor: getAvatarColor(row.sender_nickname) }"
>
<img v-if="row.sender_avatar" :src="row.sender_avatar" class="sender-avatar-img" />
<span v-else>{{ (row.sender_nickname || '?')[0] }}</span>
</div>
<div class="sender-info">
<span class="sender-name">{{ row.sender_nickname || '-' }}</span>
<span class="sender-id">ID: {{ row.sender_id }}</span>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="类型" width="90" align="center">
<template #default="{ row }">
<el-tag :type="typeTagMap[row.type]?.type || 'info'" size="small" effect="light">
{{ row.type_label || typeTagMap[row.type]?.label || '未知' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="内容" min-width="240">
<template #default="{ row }">
<span class="content-preview">{{ getContentPreview(row) }}</span>
</template>
</el-table-column>
<el-table-column label="状态" width="100" align="center">
<template #default="{ row }">
<el-tag :type="statusTagMap[row.status]?.type || 'info'" size="small">
{{ row.status_label || statusTagMap[row.status]?.label || '未知' }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="conversation_id" label="会话ID" width="90" align="center" />
<el-table-column prop="created_at" label="发送时间" width="180" align="center" />
<el-table-column label="操作" width="200" align="center" fixed="right">
<template #default="{ row }">
<el-button type="primary" link size="small" @click="viewDetail(row)">
详情
</el-button>
<el-button
v-if="row.status === 1"
type="warning"
link
size="small"
@click="handleRecall(row)"
>
撤回
</el-button>
<el-button
v-if="row.status !== 3"
type="danger"
link
size="small"
@click="handleDelete(row)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination-wrapper">
<el-pagination
v-model:current-page="currentPage"
v-model:page-size="pageSize"
:page-sizes="[10, 20, 50]"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="fetchMessageList"
@current-change="fetchMessageList"
/>
</div>
</el-card>
<!-- 消息详情弹窗 -->
<el-dialog
v-model="detailVisible"
title="消息详情"
width="640px"
destroy-on-close
class="detail-dialog"
>
<div v-loading="detailLoading" class="detail-content">
<template v-if="currentMsg">
<!-- 消息头部 -->
<div class="detail-header">
<div
class="detail-avatar"
:style="{ backgroundColor: getAvatarColor(currentMsg.sender_nickname) }"
>
<img
v-if="currentMsg.sender_avatar"
:src="currentMsg.sender_avatar"
class="detail-avatar-img"
/>
<span v-else>{{ (currentMsg.sender_nickname || '?')[0] }}</span>
</div>
<div class="detail-header-info">
<div class="detail-header-name">
<span class="detail-sender-name">{{ currentMsg.sender_nickname }}</span>
<el-tag
:type="statusTagMap[currentMsg.status]?.type || 'info'"
size="small"
effect="light"
>
{{ currentMsg.status_label }}
</el-tag>
</div>
<div class="detail-header-meta">
<span class="meta-item">ID: {{ currentMsg.id }}</span>
<el-divider direction="vertical" />
<span class="meta-item">发送者ID: {{ currentMsg.sender_id }}</span>
<el-divider direction="vertical" />
<span class="meta-item">会话ID: {{ currentMsg.conversation_id }}</span>
</div>
</div>
</div>
<!-- 消息元数据 -->
<div class="detail-grid">
<div class="detail-grid-item">
<span class="grid-label">消息类型</span>
<span class="grid-value">
<el-tag
:type="typeTagMap[currentMsg.type]?.type || 'info'"
size="small"
effect="plain"
>
{{ currentMsg.type_label }}
</el-tag>
</span>
</div>
<div class="detail-grid-item">
<span class="grid-label">发送时间</span>
<span class="grid-value">{{ currentMsg.created_at }}</span>
</div>
</div>
<!-- 消息内容 -->
<div class="detail-section">
<div class="section-header">消息内容</div>
<div class="msg-content-box">
<template v-if="currentMsg.type === 1 || currentMsg.type === 10">
<p class="msg-text-content">{{ currentMsg.content }}</p>
</template>
<template v-else-if="currentMsg.type === 2 && parsedExtra">
<div class="msg-image-grid">
<img
v-for="(img, idx) in parsedExtra.images || []"
:key="idx"
:src="img.thumbnail_url || img.url"
class="msg-image-thumb"
@click="previewImage(img.url)"
/>
</div>
<p v-if="currentMsg.content" class="msg-text-content">{{ currentMsg.content }}</p>
</template>
<template v-else-if="currentMsg.type === 3 && parsedExtra">
<div class="msg-voice-info">
<el-icon :size="20"><Microphone /></el-icon>
<span>语音消息 {{ parsedExtra.duration || 0 }}"</span>
<a v-if="parsedExtra.url" :href="parsedExtra.url" target="_blank" class="voice-link">播放</a>
</div>
</template>
<template v-else-if="currentMsg.type === 5 && parsedExtra">
<div class="msg-file-info">
<el-icon :size="20"><Document /></el-icon>
<div class="file-meta">
<span class="file-name">{{ parsedExtra.file_name || '未知文件' }}</span>
<span class="file-size">{{ formatFileSize(parsedExtra.size || 0) }}</span>
</div>
<a v-if="parsedExtra.url" :href="parsedExtra.url" target="_blank" class="file-link">
下载
</a>
</div>
</template>
<template v-else>
<p class="msg-text-content">{{ currentMsg.content || '(无文本内容)' }}</p>
</template>
</div>
</div>
<!-- extra 原始数据(可折叠) -->
<div v-if="currentMsg.extra" class="detail-section">
<el-collapse>
<el-collapse-item title="Extra 原始数据">
<pre class="extra-raw">{{ formatJSON(currentMsg.extra) }}</pre>
</el-collapse-item>
</el-collapse>
</div>
</template>
</div>
</el-dialog>
</div>
</template>
<script setup>
/**
* 管理端消息列表逻辑
*
* 数据流API → 列表渲染 → 筛选 / 分页 → 详情弹窗 → 撤回 / 删除
*/
import { ref, reactive, computed, onMounted } from 'vue'
import { Search, Microphone, Document } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { getMessageList, getMessageDetail, deleteMessage, recallMessage } from '@/api/message'
const AVATAR_COLORS = ['#2563EB', '#7C3AED', '#059669', '#D97706', '#DC2626', '#0891B2', '#4F46E5', '#BE185D']
const typeTagMap = {
1: { label: '文本', type: '' },
2: { label: '图片', type: 'success' },
3: { label: '语音', type: 'warning' },
5: { label: '文件', type: 'primary' },
10: { label: '系统', type: 'info' }
}
const statusTagMap = {
1: { label: '正常', type: 'success' },
2: { label: '已撤回', type: 'warning' },
3: { label: '已删除', type: 'danger' }
}
const loading = ref(false)
const messageList = ref([])
const total = ref(0)
const currentPage = ref(1)
const pageSize = ref(20)
const dateRange = ref(null)
const filters = reactive({
keyword: '',
type: null,
status: null,
sender_id: null
})
const detailVisible = ref(false)
const detailLoading = ref(false)
const currentMsg = ref(null)
const parsedExtra = computed(() => {
if (!currentMsg.value?.extra) return null
try {
return JSON.parse(currentMsg.value.extra)
} catch {
return null
}
})
const getAvatarColor = (name) => {
if (!name) return '#94A3B8'
return AVATAR_COLORS[name.charCodeAt(0) % AVATAR_COLORS.length]
}
const getContentPreview = (row) => {
if (row.status === 2) return '[已撤回]'
if (row.status === 3) return '[已删除]'
if (row.type === 2) return '[图片]'
if (row.type === 3) return `[语音]`
if (row.type === 5) {
try {
const extra = JSON.parse(row.extra || '{}')
return `[文件] ${extra.file_name || ''}`
} catch {
return '[文件]'
}
}
return row.content || ''
}
const formatFileSize = (bytes) => {
if (bytes < 1024) return bytes + ' B'
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB'
return (bytes / (1024 * 1024)).toFixed(1) + ' MB'
}
const formatJSON = (str) => {
try {
return JSON.stringify(JSON.parse(str), null, 2)
} catch {
return str
}
}
const previewImage = (url) => {
window.open(url, '_blank')
}
const onDateRangeChange = (val) => {
if (!val) {
filters.start_time = undefined
filters.end_time = undefined
}
}
/** 获取消息列表 */
const fetchMessageList = async () => {
loading.value = true
try {
const params = {
page: currentPage.value,
page_size: pageSize.value
}
if (filters.keyword) params.keyword = filters.keyword
if (filters.type != null) params.type = filters.type
if (filters.status != null) params.status = filters.status
if (filters.sender_id) params.sender_id = Number(filters.sender_id)
if (dateRange.value && dateRange.value.length === 2) {
params.start_time = dateRange.value[0]
params.end_time = dateRange.value[1]
}
const res = await getMessageList(params)
messageList.value = res.data?.list || []
total.value = res.data?.total || 0
} catch (e) {
ElMessage.error(e?.message || '获取消息列表失败')
} finally {
loading.value = false
}
}
const handleSearch = () => {
currentPage.value = 1
fetchMessageList()
}
const handleReset = () => {
filters.keyword = ''
filters.type = null
filters.status = null
filters.sender_id = null
dateRange.value = null
currentPage.value = 1
fetchMessageList()
}
/** 查看消息详情 */
const viewDetail = async (row) => {
detailVisible.value = true
detailLoading.value = true
currentMsg.value = null
try {
const res = await getMessageDetail(row.id)
currentMsg.value = res.data
} catch (e) {
ElMessage.error(e?.message || '获取消息详情失败')
} finally {
detailLoading.value = false
}
}
/** 撤回消息 */
const handleRecall = (row) => {
ElMessageBox.confirm(
`确定要撤回消息 #${row.id} 吗?撤回后该消息对所有用户不可见。`,
'撤回消息',
{ confirmButtonText: '确定撤回', cancelButtonText: '取消', type: 'warning' }
).then(async () => {
try {
await recallMessage(row.id)
ElMessage.success('消息已撤回')
fetchMessageList()
} catch (e) {
ElMessage.error(e?.message || '撤回失败')
}
}).catch(() => {})
}
/** 删除消息 */
const handleDelete = (row) => {
ElMessageBox.confirm(
`确定要删除消息 #${row.id} 吗?`,
'删除消息',
{ confirmButtonText: '确定删除', cancelButtonText: '取消', type: 'warning' }
).then(async () => {
try {
await deleteMessage(row.id)
ElMessage.success('消息已删除')
fetchMessageList()
} catch (e) {
ElMessage.error(e?.message || '删除失败')
}
}).catch(() => {})
}
onMounted(() => {
fetchMessageList()
})
</script>
<style scoped>
.message-list-page { padding: 0; }
.page-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16px;
}
.page-title {
font-size: 20px;
font-weight: 600;
color: #1E293B;
margin: 0;
}
.filter-card { margin-bottom: 16px; }
.filter-form {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
}
.table-card { margin-bottom: 16px; }
/* 发送者单元格 */
.sender-cell {
display: flex;
align-items: center;
gap: 10px;
}
.sender-avatar {
width: 32px;
height: 32px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 13px;
font-weight: 600;
color: #FFFFFF;
flex-shrink: 0;
overflow: hidden;
}
.sender-avatar-img {
width: 100%;
height: 100%;
object-fit: cover;
}
.sender-info {
display: flex;
flex-direction: column;
gap: 2px;
min-width: 0;
}
.sender-name {
font-weight: 500;
color: #1E293B;
font-size: 13px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.sender-id {
font-size: 11px;
color: #94A3B8;
}
.content-preview {
font-size: 13px;
color: #475569;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.pagination-wrapper {
display: flex;
justify-content: flex-end;
padding-top: 16px;
}
/* ===== 消息详情弹窗 ===== */
.detail-content { min-height: 200px; }
.detail-header {
display: flex;
align-items: center;
gap: 16px;
padding: 20px;
background: linear-gradient(135deg, #F8FAFC 0%, #EFF6FF 100%);
border-radius: 12px;
margin-bottom: 20px;
}
.detail-avatar {
width: 48px;
height: 48px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
font-weight: 700;
color: #FFFFFF;
flex-shrink: 0;
overflow: hidden;
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.2);
}
.detail-avatar-img {
width: 100%;
height: 100%;
object-fit: cover;
}
.detail-header-info { flex: 1; min-width: 0; }
.detail-header-name {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 6px;
}
.detail-sender-name {
font-size: 16px;
font-weight: 700;
color: #0F172A;
}
.detail-header-meta {
display: flex;
align-items: center;
gap: 4px;
font-size: 13px;
color: #64748B;
}
.meta-item {
display: inline-flex;
align-items: center;
gap: 4px;
}
.detail-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
margin-bottom: 20px;
}
.detail-grid-item {
display: flex;
flex-direction: column;
gap: 4px;
padding: 12px 16px;
background: #F8FAFC;
border-radius: 8px;
border: 1px solid #E2E8F0;
}
.grid-label {
font-size: 12px;
color: #94A3B8;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.03em;
}
.grid-value {
font-size: 14px;
color: #1E293B;
font-weight: 500;
}
.detail-section { margin-bottom: 20px; }
.section-header {
font-size: 14px;
font-weight: 600;
color: #334155;
margin-bottom: 10px;
padding-bottom: 8px;
border-bottom: 1px solid #E2E8F0;
}
.msg-content-box {
padding: 16px;
background: #F8FAFC;
border-radius: 8px;
border: 1px solid #E2E8F0;
}
.msg-text-content {
margin: 0;
font-size: 14px;
color: #334155;
line-height: 1.6;
white-space: pre-wrap;
word-break: break-word;
}
.msg-image-grid {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 8px;
}
.msg-image-thumb {
width: 120px;
height: 120px;
object-fit: cover;
border-radius: 8px;
cursor: pointer;
border: 1px solid #E2E8F0;
transition: transform 0.2s;
}
.msg-image-thumb:hover { transform: scale(1.05); }
.msg-voice-info, .msg-file-info {
display: flex;
align-items: center;
gap: 12px;
padding: 8px 0;
}
.file-meta {
display: flex;
flex-direction: column;
gap: 2px;
flex: 1;
min-width: 0;
}
.file-name {
font-size: 14px;
font-weight: 500;
color: #1E293B;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.file-size {
font-size: 12px;
color: #94A3B8;
}
.voice-link, .file-link {
color: #2563EB;
font-size: 13px;
text-decoration: none;
}
.voice-link:hover, .file-link:hover { text-decoration: underline; }
.extra-raw {
font-size: 12px;
color: #64748B;
background: #F1F5F9;
padding: 12px;
border-radius: 6px;
overflow-x: auto;
max-height: 200px;
margin: 0;
}
</style>

View File

@@ -0,0 +1,387 @@
<!--
管理端消息统计仪表板
设计系统Data-Dense Dashboard 风格
图表库ECharts
主题色Primary #2563EB
功能
- 顶部统计卡片总消息数 + 今日消息数
- 消息趋势折线图7/30 天切换
- 消息类型分布饼图
- 活跃用户排行水平柱状图Top 10
- 活跃群组排行水平柱状图Top 10
对应后端 APIGET /api/v1/admin/messages/stats
-->
<template>
<div class="stats-page">
<div class="page-header">
<h2 class="page-title">消息统计</h2>
<div class="header-actions">
<el-radio-group v-model="days" size="default" @change="fetchStats">
<el-radio-button :value="7"> 7 </el-radio-button>
<el-radio-button :value="30"> 30 </el-radio-button>
</el-radio-group>
</div>
</div>
<!-- 统计卡片 -->
<div class="stat-cards">
<div class="stat-card">
<div class="stat-card-icon total-icon">
<el-icon :size="24"><ChatDotRound /></el-icon>
</div>
<div class="stat-card-info">
<span class="stat-label">消息总数</span>
<span class="stat-value">{{ formatNumber(stats.total_count) }}</span>
</div>
</div>
<div class="stat-card">
<div class="stat-card-icon today-icon">
<el-icon :size="24"><Sunrise /></el-icon>
</div>
<div class="stat-card-info">
<span class="stat-label">今日消息</span>
<span class="stat-value">{{ formatNumber(stats.today_count) }}</span>
</div>
</div>
</div>
<!-- 图表区域 -->
<div v-loading="loading" class="charts-grid">
<!-- 消息趋势折线图 -->
<el-card class="chart-card chart-card-wide" shadow="never">
<template #header>
<span class="chart-title">消息趋势</span>
</template>
<div ref="trendChartRef" class="chart-container"></div>
</el-card>
<!-- 消息类型分布饼图 -->
<el-card class="chart-card" shadow="never">
<template #header>
<span class="chart-title">类型分布</span>
</template>
<div ref="typeChartRef" class="chart-container"></div>
</el-card>
<!-- 活跃用户排行 -->
<el-card class="chart-card" shadow="never">
<template #header>
<span class="chart-title">活跃用户 Top 10</span>
</template>
<div ref="userChartRef" class="chart-container"></div>
</el-card>
<!-- 活跃群组排行 -->
<el-card class="chart-card" shadow="never">
<template #header>
<span class="chart-title">活跃群组 Top 10</span>
</template>
<div ref="groupChartRef" class="chart-container"></div>
</el-card>
</div>
</div>
</template>
<script setup>
/**
* 管理端消息统计逻辑
*
* 使用 ECharts 渲染四个图表,数据从 stats API 获取
*/
import { ref, onMounted, onBeforeUnmount, nextTick } from 'vue'
import { ChatDotRound, Sunrise } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
import * as echarts from 'echarts'
import { getMessageStats } from '@/api/message'
const PRIMARY = '#2563EB'
const CHART_COLORS = ['#2563EB', '#7C3AED', '#059669', '#D97706', '#DC2626', '#0891B2']
const days = ref(7)
const loading = ref(false)
const stats = ref({
total_count: 0,
today_count: 0,
type_distribution: [],
daily_trend: [],
active_users: [],
active_groups: []
})
const trendChartRef = ref(null)
const typeChartRef = ref(null)
const userChartRef = ref(null)
const groupChartRef = ref(null)
let trendChart = null
let typeChart = null
let userChart = null
let groupChart = null
const formatNumber = (n) => {
if (n == null) return '0'
return n.toLocaleString()
}
/** 获取统计数据 */
const fetchStats = async () => {
loading.value = true
try {
const res = await getMessageStats({ days: days.value })
stats.value = res.data || {}
await nextTick()
renderCharts()
} catch (e) {
ElMessage.error(e?.message || '获取统计数据失败')
} finally {
loading.value = false
}
}
/** 渲染所有图表 */
const renderCharts = () => {
renderTrendChart()
renderTypeChart()
renderUserChart()
renderGroupChart()
}
/** 消息趋势折线图 */
const renderTrendChart = () => {
if (!trendChartRef.value) return
if (!trendChart) trendChart = echarts.init(trendChartRef.value)
const trend = stats.value.daily_trend || []
trendChart.setOption({
tooltip: { trigger: 'axis' },
grid: { left: 50, right: 20, top: 20, bottom: 30 },
xAxis: {
type: 'category',
data: trend.map(d => d.date?.substring(5) || ''),
axisLabel: { color: '#64748B', fontSize: 11 },
axisLine: { lineStyle: { color: '#E2E8F0' } }
},
yAxis: {
type: 'value',
axisLabel: { color: '#94A3B8', fontSize: 11 },
splitLine: { lineStyle: { color: '#F1F5F9' } }
},
series: [{
type: 'line',
data: trend.map(d => d.count),
smooth: true,
symbol: 'circle',
symbolSize: 6,
lineStyle: { color: PRIMARY, width: 2 },
itemStyle: { color: PRIMARY },
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: 'rgba(37, 99, 235, 0.2)' },
{ offset: 1, color: 'rgba(37, 99, 235, 0.02)' }
])
}
}]
})
}
/** 消息类型分布饼图 */
const renderTypeChart = () => {
if (!typeChartRef.value) return
if (!typeChart) typeChart = echarts.init(typeChartRef.value)
const dist = stats.value.type_distribution || []
typeChart.setOption({
tooltip: { trigger: 'item', formatter: '{b}: {c} ({d}%)' },
legend: {
orient: 'vertical',
right: 10,
top: 'center',
textStyle: { color: '#64748B', fontSize: 12 }
},
color: CHART_COLORS,
series: [{
type: 'pie',
radius: ['40%', '65%'],
center: ['40%', '50%'],
avoidLabelOverlap: true,
label: { show: false },
emphasis: { label: { show: true, fontWeight: 'bold' } },
data: dist.map(d => ({ value: d.count, name: d.label || `类型${d.type}` }))
}]
})
}
/** 活跃用户水平柱状图 */
const renderUserChart = () => {
if (!userChartRef.value) return
if (!userChart) userChart = echarts.init(userChartRef.value)
const users = (stats.value.active_users || []).slice(0, 10).reverse()
userChart.setOption({
tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
grid: { left: 90, right: 30, top: 10, bottom: 20 },
xAxis: {
type: 'value',
axisLabel: { color: '#94A3B8', fontSize: 11 },
splitLine: { lineStyle: { color: '#F1F5F9' } }
},
yAxis: {
type: 'category',
data: users.map(u => u.nickname || `用户${u.user_id}`),
axisLabel: { color: '#64748B', fontSize: 11, width: 70, overflow: 'truncate' }
},
series: [{
type: 'bar',
data: users.map(u => u.count),
barWidth: 14,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
{ offset: 0, color: '#2563EB' },
{ offset: 1, color: '#60A5FA' }
]),
borderRadius: [0, 4, 4, 0]
}
}]
})
}
/** 活跃群组水平柱状图 */
const renderGroupChart = () => {
if (!groupChartRef.value) return
if (!groupChart) groupChart = echarts.init(groupChartRef.value)
const groups = (stats.value.active_groups || []).slice(0, 10).reverse()
groupChart.setOption({
tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } },
grid: { left: 90, right: 30, top: 10, bottom: 20 },
xAxis: {
type: 'value',
axisLabel: { color: '#94A3B8', fontSize: 11 },
splitLine: { lineStyle: { color: '#F1F5F9' } }
},
yAxis: {
type: 'category',
data: groups.map(g => g.name || `群组${g.group_id}`),
axisLabel: { color: '#64748B', fontSize: 11, width: 70, overflow: 'truncate' }
},
series: [{
type: 'bar',
data: groups.map(g => g.count),
barWidth: 14,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [
{ offset: 0, color: '#7C3AED' },
{ offset: 1, color: '#A78BFA' }
]),
borderRadius: [0, 4, 4, 0]
}
}]
})
}
/** 窗口 resize 时自动调整图表尺寸 */
const handleResize = () => {
trendChart?.resize()
typeChart?.resize()
userChart?.resize()
groupChart?.resize()
}
onMounted(() => {
fetchStats()
window.addEventListener('resize', handleResize)
})
onBeforeUnmount(() => {
window.removeEventListener('resize', handleResize)
trendChart?.dispose()
typeChart?.dispose()
userChart?.dispose()
groupChart?.dispose()
})
</script>
<style scoped>
.stats-page { padding: 0; }
.page-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
.page-title {
font-size: 20px;
font-weight: 600;
color: #1E293B;
margin: 0;
}
/* 统计卡片 */
.stat-cards {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
margin-bottom: 20px;
}
.stat-card {
display: flex;
align-items: center;
gap: 16px;
padding: 20px 24px;
background: #FFFFFF;
border-radius: 12px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
border: 1px solid #E2E8F0;
}
.stat-card-icon {
width: 48px;
height: 48px;
border-radius: 12px;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.total-icon {
background-color: rgba(37, 99, 235, 0.1);
color: #2563EB;
}
.today-icon {
background-color: rgba(5, 150, 105, 0.1);
color: #059669;
}
.stat-card-info {
display: flex;
flex-direction: column;
gap: 4px;
}
.stat-label {
font-size: 13px;
color: #94A3B8;
font-weight: 500;
}
.stat-value {
font-size: 28px;
font-weight: 700;
color: #0F172A;
line-height: 1.2;
}
/* 图表网格 */
.charts-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
}
.chart-card { border-radius: 12px; }
.chart-card-wide { grid-column: span 2; }
.chart-title {
font-size: 14px;
font-weight: 600;
color: #334155;
}
.chart-container {
width: 100%;
height: 300px;
}
</style>

View File

@@ -0,0 +1,137 @@
// Package controller 提供管理端消息管理的 HTTP 接口处理
package controller
import (
"strconv"
"github.com/echochat/backend/app/admin/service"
"github.com/echochat/backend/app/dto"
"github.com/echochat/backend/pkg/utils"
"github.com/gin-gonic/gin"
)
// MessageManageController 管理端消息管理控制器
type MessageManageController struct {
msgService *service.MessageManageService
}
// NewMessageManageController 创建消息管理控制器
func NewMessageManageController(msgService *service.MessageManageService) *MessageManageController {
return &MessageManageController{msgService: msgService}
}
// GetMessageList 获取消息列表(分页+多条件筛选)
// GET /api/v1/admin/messages
func (ctl *MessageManageController) GetMessageList(c *gin.Context) {
ctx := c.Request.Context()
var req dto.AdminMessageListRequest
if err := c.ShouldBindQuery(&req); err != nil {
utils.ResponseBadRequest(c, "参数格式错误")
return
}
result, err := ctl.msgService.GetMessageList(ctx, &req)
if err != nil {
ctl.handleError(c, err, "获取消息列表失败")
return
}
utils.ResponseOK(c, result)
}
// GetMessageDetail 获取消息详情
// GET /api/v1/admin/messages/:id
func (ctl *MessageManageController) GetMessageDetail(c *gin.Context) {
ctx := c.Request.Context()
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
if err != nil || id <= 0 {
utils.ResponseBadRequest(c, "无效的消息 ID")
return
}
result, err := ctl.msgService.GetMessageDetail(ctx, id)
if err != nil {
ctl.handleError(c, err, "获取消息详情失败")
return
}
utils.ResponseOK(c, result)
}
// DeleteMessage 删除消息(软删除)
// DELETE /api/v1/admin/messages/:id
func (ctl *MessageManageController) DeleteMessage(c *gin.Context) {
ctx := c.Request.Context()
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
if err != nil || id <= 0 {
utils.ResponseBadRequest(c, "无效的消息 ID")
return
}
if err := ctl.msgService.DeleteMessage(ctx, id); err != nil {
ctl.handleError(c, err, "删除消息失败")
return
}
utils.ResponseOK(c, nil)
}
// RecallMessage 管理员撤回消息
// PUT /api/v1/admin/messages/:id/recall
func (ctl *MessageManageController) RecallMessage(c *gin.Context) {
ctx := c.Request.Context()
id, err := strconv.ParseInt(c.Param("id"), 10, 64)
if err != nil || id <= 0 {
utils.ResponseBadRequest(c, "无效的消息 ID")
return
}
if err := ctl.msgService.RecallMessage(ctx, id); err != nil {
ctl.handleError(c, err, "撤回消息失败")
return
}
utils.ResponseOK(c, nil)
}
// GetMessageStats 获取消息统计数据
// GET /api/v1/admin/messages/stats
func (ctl *MessageManageController) GetMessageStats(c *gin.Context) {
ctx := c.Request.Context()
var req dto.AdminMessageStatsRequest
if err := c.ShouldBindQuery(&req); err != nil {
utils.ResponseBadRequest(c, "参数格式错误")
return
}
result, err := ctl.msgService.GetStats(ctx, &req)
if err != nil {
ctl.handleError(c, err, "获取消息统计失败")
return
}
utils.ResponseOK(c, result)
}
// handleError 统一业务错误映射
func (ctl *MessageManageController) handleError(c *gin.Context, err error, fallbackMsg ...string) {
switch err {
case service.ErrMessageNotFound:
utils.ResponseNotFound(c, err.Error())
case service.ErrMessageRecalled:
utils.ResponseBadRequest(c, err.Error())
case service.ErrMessageDeleted:
utils.ResponseBadRequest(c, err.Error())
default:
msg := "服务器内部错误"
if len(fallbackMsg) > 0 && fallbackMsg[0] != "" {
msg = fallbackMsg[0]
}
utils.ResponseError(c, msg)
}
}

View File

@@ -0,0 +1,242 @@
// Package dao 提供 admin 模块的数据库访问操作
package dao
import (
"context"
"fmt"
"time"
"github.com/echochat/backend/app/dto"
imModel "github.com/echochat/backend/app/im/model"
"github.com/echochat/backend/pkg/logs"
"go.uber.org/zap"
"gorm.io/gorm"
)
// MessageManageDAO 管理端消息数据访问对象
type MessageManageDAO struct {
db *gorm.DB
}
// NewMessageManageDAO 创建 MessageManageDAO 实例
func NewMessageManageDAO(db *gorm.DB) *MessageManageDAO {
return &MessageManageDAO{db: db}
}
// ListMessages 分页查询消息列表(支持多条件筛选)
func (d *MessageManageDAO) ListMessages(ctx context.Context, req *dto.AdminMessageListRequest) ([]imModel.Message, int64, error) {
funcName := "dao.message_manage_dao.ListMessages"
logs.Debug(ctx, funcName, "查询消息列表")
query := d.db.WithContext(ctx).Model(&imModel.Message{})
if req.Keyword != "" {
query = query.Where("content ILIKE ?", fmt.Sprintf("%%%s%%", req.Keyword))
}
if req.Type != nil {
query = query.Where("type = ?", *req.Type)
}
if req.SenderID != nil {
query = query.Where("sender_id = ?", *req.SenderID)
}
if req.ConversationID != nil {
query = query.Where("conversation_id = ?", *req.ConversationID)
}
if req.Status != nil {
query = query.Where("status = ?", *req.Status)
}
if req.StartTime != "" {
if t, err := time.Parse("2006-01-02", req.StartTime); err == nil {
query = query.Where("created_at >= ?", t)
}
}
if req.EndTime != "" {
if t, err := time.Parse("2006-01-02", req.EndTime); err == nil {
query = query.Where("created_at < ?", t.AddDate(0, 0, 1))
}
}
var total int64
if err := query.Count(&total).Error; err != nil {
logs.Error(ctx, funcName, "统计消息总数失败", zap.Error(err))
return nil, 0, err
}
page := req.Page
if page <= 0 {
page = 1
}
pageSize := req.PageSize
if pageSize <= 0 {
pageSize = 20
}
if pageSize > 100 {
pageSize = 100
}
var messages []imModel.Message
err := query.Order("id DESC").
Offset((page - 1) * pageSize).
Limit(pageSize).
Find(&messages).Error
if err != nil {
logs.Error(ctx, funcName, "查询消息列表失败", zap.Error(err))
return nil, 0, err
}
return messages, total, nil
}
// GetMessageByID 根据 ID 查询单条消息
func (d *MessageManageDAO) GetMessageByID(ctx context.Context, id int64) (*imModel.Message, error) {
var msg imModel.Message
err := d.db.WithContext(ctx).First(&msg, id).Error
if err != nil {
return nil, err
}
return &msg, nil
}
// UpdateMessageStatus 更新消息状态
func (d *MessageManageDAO) UpdateMessageStatus(ctx context.Context, id int64, status int) error {
return d.db.WithContext(ctx).
Model(&imModel.Message{}).
Where("id = ?", id).
Update("status", status).Error
}
// GetTotalCount 获取消息总数
func (d *MessageManageDAO) GetTotalCount(ctx context.Context) (int64, error) {
var count int64
err := d.db.WithContext(ctx).Model(&imModel.Message{}).Count(&count).Error
return count, err
}
// GetTodayCount 获取今日消息数
func (d *MessageManageDAO) GetTodayCount(ctx context.Context) (int64, error) {
var count int64
today := time.Now().Truncate(24 * time.Hour)
err := d.db.WithContext(ctx).Model(&imModel.Message{}).
Where("created_at >= ?", today).Count(&count).Error
return count, err
}
// GetTypeDistribution 获取消息类型分布
func (d *MessageManageDAO) GetTypeDistribution(ctx context.Context) ([]dto.TypeDistItem, error) {
type row struct {
Type int `gorm:"column:type"`
Count int64 `gorm:"column:count"`
}
var rows []row
err := d.db.WithContext(ctx).
Model(&imModel.Message{}).
Select("type, count(*) as count").
Group("type").
Order("count DESC").
Find(&rows).Error
if err != nil {
return nil, err
}
result := make([]dto.TypeDistItem, 0, len(rows))
for _, r := range rows {
result = append(result, dto.TypeDistItem{
Type: r.Type,
Count: r.Count,
})
}
return result, nil
}
// GetDailyTrend 获取每日消息趋势
func (d *MessageManageDAO) GetDailyTrend(ctx context.Context, days int) ([]dto.DailyTrendItem, error) {
startDate := time.Now().AddDate(0, 0, -days).Truncate(24 * time.Hour)
type row struct {
Date string `gorm:"column:date"`
Count int64 `gorm:"column:count"`
}
var rows []row
err := d.db.WithContext(ctx).
Model(&imModel.Message{}).
Select("TO_CHAR(created_at, 'YYYY-MM-DD') as date, count(*) as count").
Where("created_at >= ?", startDate).
Group("date").
Order("date ASC").
Find(&rows).Error
if err != nil {
return nil, err
}
result := make([]dto.DailyTrendItem, 0, len(rows))
for _, r := range rows {
result = append(result, dto.DailyTrendItem{Date: r.Date, Count: r.Count})
}
return result, nil
}
// GetActiveUsers 获取活跃用户排行Top 10
func (d *MessageManageDAO) GetActiveUsers(ctx context.Context, days int) ([]dto.ActiveUserItem, error) {
startDate := time.Now().AddDate(0, 0, -days).Truncate(24 * time.Hour)
type row struct {
UserID int64 `gorm:"column:sender_id"`
Nickname string `gorm:"column:nickname"`
Count int64 `gorm:"column:count"`
}
var rows []row
err := d.db.WithContext(ctx).
Raw(`SELECT m.sender_id, u.nickname, count(*) as count
FROM im_messages m
JOIN auth_users u ON u.id = m.sender_id
WHERE m.created_at >= ? AND m.sender_id > 0
GROUP BY m.sender_id, u.nickname
ORDER BY count DESC
LIMIT 10`, startDate).
Scan(&rows).Error
if err != nil {
return nil, err
}
result := make([]dto.ActiveUserItem, 0, len(rows))
for _, r := range rows {
result = append(result, dto.ActiveUserItem{
UserID: r.UserID,
Nickname: r.Nickname,
Count: r.Count,
})
}
return result, nil
}
// GetActiveGroups 获取活跃群组排行Top 10
func (d *MessageManageDAO) GetActiveGroups(ctx context.Context, days int) ([]dto.ActiveGroupItem, error) {
startDate := time.Now().AddDate(0, 0, -days).Truncate(24 * time.Hour)
type row struct {
GroupID int64 `gorm:"column:id"`
Name string `gorm:"column:name"`
Count int64 `gorm:"column:count"`
}
var rows []row
err := d.db.WithContext(ctx).
Raw(`SELECT g.id, g.name, count(*) as count
FROM im_messages m
JOIN im_conversations c ON c.id = m.conversation_id
JOIN im_groups g ON g.conversation_id = c.id
WHERE m.created_at >= ? AND c.type = 2
GROUP BY g.id, g.name
ORDER BY count DESC
LIMIT 10`, startDate).
Scan(&rows).Error
if err != nil {
return nil, err
}
result := make([]dto.ActiveGroupItem, 0, len(rows))
for _, r := range rows {
result = append(result, dto.ActiveGroupItem{
GroupID: r.GroupID,
Name: r.Name,
Count: r.Count,
})
}
return result, nil
}

View File

@@ -16,6 +16,7 @@ func RegisterRoutes(
onlineCtrl *controller.OnlineController, onlineCtrl *controller.OnlineController,
contactManageCtrl *controller.ContactManageController, contactManageCtrl *controller.ContactManageController,
groupManageCtrl *controller.GroupManageController, groupManageCtrl *controller.GroupManageController,
msgManageCtrl *controller.MessageManageController,
jwtAuth gin.HandlerFunc, jwtAuth gin.HandlerFunc,
) { ) {
// 管理端路由组JWT 认证 + admin/super_admin 角色检查 // 管理端路由组JWT 认证 + admin/super_admin 角色检查
@@ -44,5 +45,12 @@ func RegisterRoutes(
adminGroup.GET("/groups", groupManageCtrl.GetGroupList) adminGroup.GET("/groups", groupManageCtrl.GetGroupList)
adminGroup.GET("/groups/:id", groupManageCtrl.GetGroupDetail) adminGroup.GET("/groups/:id", groupManageCtrl.GetGroupDetail)
adminGroup.DELETE("/groups/:id", groupManageCtrl.DissolveGroup) adminGroup.DELETE("/groups/:id", groupManageCtrl.DissolveGroup)
// 消息管理
adminGroup.GET("/messages/stats", msgManageCtrl.GetMessageStats)
adminGroup.GET("/messages", msgManageCtrl.GetMessageList)
adminGroup.GET("/messages/:id", msgManageCtrl.GetMessageDetail)
adminGroup.DELETE("/messages/:id", msgManageCtrl.DeleteMessage)
adminGroup.PUT("/messages/:id/recall", msgManageCtrl.RecallMessage)
} }
} }

View File

@@ -0,0 +1,270 @@
// Package service 提供 admin 模块的核心业务逻辑
package service
import (
"context"
"errors"
adminDAO "github.com/echochat/backend/app/admin/dao"
authDAO "github.com/echochat/backend/app/auth/dao"
imDAO "github.com/echochat/backend/app/im/dao"
"github.com/echochat/backend/app/constants"
"github.com/echochat/backend/app/dto"
"github.com/echochat/backend/pkg/logs"
"github.com/echochat/backend/pkg/ws"
"go.uber.org/zap"
)
var (
ErrMessageNotFound = errors.New("消息不存在")
ErrMessageRecalled = errors.New("消息已被撤回")
ErrMessageDeleted = errors.New("消息已被删除")
)
// MessageManageService 管理端消息管理服务
type MessageManageService struct {
msgDAO *adminDAO.MessageManageDAO
userDAO *authDAO.UserDAO
convDAO *imDAO.ConversationDAO
pubSub *ws.PubSub
}
// NewMessageManageService 创建 MessageManageService 实例
func NewMessageManageService(msgDAO *adminDAO.MessageManageDAO, userDAO *authDAO.UserDAO, convDAO *imDAO.ConversationDAO, pubSub *ws.PubSub) *MessageManageService {
return &MessageManageService{
msgDAO: msgDAO,
userDAO: userDAO,
convDAO: convDAO,
pubSub: pubSub,
}
}
// GetMessageList 获取消息列表(分页+筛选)
func (s *MessageManageService) GetMessageList(ctx context.Context, req *dto.AdminMessageListRequest) (*dto.AdminMessageListResponse, error) {
funcName := "service.message_manage_service.GetMessageList"
logs.Debug(ctx, funcName, "获取消息列表")
if req.Page <= 0 {
req.Page = 1
}
if req.PageSize <= 0 {
req.PageSize = 20
}
messages, total, err := s.msgDAO.ListMessages(ctx, req)
if err != nil {
return nil, err
}
senderIDs := make([]int64, 0, len(messages))
senderSet := make(map[int64]bool)
for _, m := range messages {
if m.SenderID > 0 && !senderSet[m.SenderID] {
senderIDs = append(senderIDs, m.SenderID)
senderSet[m.SenderID] = true
}
}
userMap := make(map[int64]struct {
Nickname string
Avatar string
})
if len(senderIDs) > 0 {
users, uErr := s.userDAO.FindByIDs(ctx, senderIDs)
if uErr != nil {
logs.Error(ctx, funcName, "批量查询用户信息失败", zap.Error(uErr))
} else {
for _, u := range users {
userMap[u.ID] = struct {
Nickname string
Avatar string
}{Nickname: u.Nickname, Avatar: u.Avatar}
}
}
}
list := make([]dto.AdminMessageDTO, 0, len(messages))
for _, m := range messages {
item := dto.AdminMessageDTO{
ID: m.ID,
ConversationID: m.ConversationID,
SenderID: m.SenderID,
Type: m.Type,
TypeLabel: constants.MessageTypeMap[m.Type],
Content: m.Content,
Extra: m.Extra,
Status: m.Status,
StatusLabel: constants.MessageStatusMap[m.Status],
CreatedAt: m.CreatedAt.Format("2006-01-02 15:04:05"),
}
if info, ok := userMap[m.SenderID]; ok {
item.SenderNickname = info.Nickname
item.SenderAvatar = info.Avatar
}
list = append(list, item)
}
return &dto.AdminMessageListResponse{
Total: total,
List: list,
Page: req.Page,
PageSize: req.PageSize,
}, nil
}
// GetMessageDetail 获取消息详情
func (s *MessageManageService) GetMessageDetail(ctx context.Context, id int64) (*dto.AdminMessageDTO, error) {
funcName := "service.message_manage_service.GetMessageDetail"
logs.Debug(ctx, funcName, "获取消息详情", zap.Int64("id", id))
msg, err := s.msgDAO.GetMessageByID(ctx, id)
if err != nil {
return nil, ErrMessageNotFound
}
item := &dto.AdminMessageDTO{
ID: msg.ID,
ConversationID: msg.ConversationID,
SenderID: msg.SenderID,
Type: msg.Type,
TypeLabel: constants.MessageTypeMap[msg.Type],
Content: msg.Content,
Extra: msg.Extra,
Status: msg.Status,
StatusLabel: constants.MessageStatusMap[msg.Status],
CreatedAt: msg.CreatedAt.Format("2006-01-02 15:04:05"),
}
if msg.SenderID > 0 {
users, uErr := s.userDAO.FindByIDs(ctx, []int64{msg.SenderID})
if uErr == nil && len(users) > 0 {
item.SenderNickname = users[0].Nickname
item.SenderAvatar = users[0].Avatar
}
}
return item, nil
}
// DeleteMessage 删除消息(软删除,状态改为已删除)
func (s *MessageManageService) DeleteMessage(ctx context.Context, id int64) error {
funcName := "service.message_manage_service.DeleteMessage"
logs.Info(ctx, funcName, "删除消息", zap.Int64("id", id))
msg, err := s.msgDAO.GetMessageByID(ctx, id)
if err != nil {
return ErrMessageNotFound
}
if msg.Status == constants.MessageStatusDeleted {
return ErrMessageDeleted
}
return s.msgDAO.UpdateMessageStatus(ctx, id, constants.MessageStatusDeleted)
}
// RecallMessage 管理员撤回消息(更新状态 + 推送 WS 通知给会话成员)
func (s *MessageManageService) RecallMessage(ctx context.Context, id int64) error {
funcName := "service.message_manage_service.RecallMessage"
logs.Info(ctx, funcName, "撤回消息", zap.Int64("id", id))
msg, err := s.msgDAO.GetMessageByID(ctx, id)
if err != nil {
return ErrMessageNotFound
}
if msg.Status == constants.MessageStatusRecalled {
return ErrMessageRecalled
}
if msg.Status == constants.MessageStatusDeleted {
return ErrMessageDeleted
}
if err := s.msgDAO.UpdateMessageStatus(ctx, id, constants.MessageStatusRecalled); err != nil {
return err
}
go s.pushRecallNotification(ctx, msg.ID, msg.ConversationID, msg.SenderID)
return nil
}
// pushRecallNotification 向会话成员推送撤回通知
func (s *MessageManageService) pushRecallNotification(ctx context.Context, messageID, conversationID, senderID int64) {
funcName := "service.message_manage_service.pushRecallNotification"
memberIDs, err := s.convDAO.GetConversationMemberIDs(ctx, conversationID)
if err != nil {
logs.Error(ctx, funcName, "获取会话成员失败", zap.Error(err))
return
}
pushData := map[string]interface{}{
"message_id": messageID,
"conversation_id": conversationID,
"operator_id": int64(0),
"sender_id": senderID,
"recall_text": "管理员撤回了一条消息",
}
for _, uid := range memberIDs {
pushMsg := ws.NewPushMessage("im.message.recalled", pushData)
if err := s.pubSub.PublishToUser(ctx, uid, pushMsg); err != nil {
logs.Error(ctx, funcName, "推送撤回通知失败", zap.Int64("user_id", uid), zap.Error(err))
}
}
}
// GetStats 获取消息统计数据
func (s *MessageManageService) GetStats(ctx context.Context, req *dto.AdminMessageStatsRequest) (*dto.AdminMessageStatsResponse, error) {
funcName := "service.message_manage_service.GetStats"
logs.Debug(ctx, funcName, "获取消息统计")
days := req.Days
if days <= 0 {
days = 7
}
if days > 90 {
days = 90
}
totalCount, err := s.msgDAO.GetTotalCount(ctx)
if err != nil {
return nil, err
}
todayCount, err := s.msgDAO.GetTodayCount(ctx)
if err != nil {
return nil, err
}
typeDist, err := s.msgDAO.GetTypeDistribution(ctx)
if err != nil {
return nil, err
}
for i := range typeDist {
typeDist[i].Label = constants.MessageTypeMap[typeDist[i].Type]
}
dailyTrend, err := s.msgDAO.GetDailyTrend(ctx, days)
if err != nil {
return nil, err
}
activeUsers, err := s.msgDAO.GetActiveUsers(ctx, days)
if err != nil {
return nil, err
}
activeGroups, err := s.msgDAO.GetActiveGroups(ctx, days)
if err != nil {
return nil, err
}
return &dto.AdminMessageStatsResponse{
TotalCount: totalCount,
TodayCount: todayCount,
TypeDistribution: typeDist,
DailyTrend: dailyTrend,
ActiveUsers: activeUsers,
ActiveGroups: activeGroups,
}, nil
}

View File

@@ -115,6 +115,20 @@ func (d *UserDAO) UpdateLastLogin(ctx context.Context, userID int64, ip string)
return err return err
} }
// FindByIDs 批量按 ID 查询用户
func (d *UserDAO) FindByIDs(ctx context.Context, ids []int64) ([]model.User, error) {
funcName := "dao.user_dao.FindByIDs"
logs.Debug(ctx, funcName, "批量查询用户", zap.Int("count", len(ids)))
var users []model.User
err := d.db.WithContext(ctx).Where("id IN ?", ids).Find(&users).Error
if err != nil {
logs.Error(ctx, funcName, "批量查询用户失败", zap.Error(err))
return nil, err
}
return users, nil
}
// FindByAccount 按用户名或邮箱查找用户(登录时使用) // FindByAccount 按用户名或邮箱查找用户(登录时使用)
func (d *UserDAO) FindByAccount(ctx context.Context, account string) (*model.User, error) { func (d *UserDAO) FindByAccount(ctx context.Context, account string) (*model.User, error) {
funcName := "dao.user_dao.FindByAccount" funcName := "dao.user_dao.FindByAccount"

View File

@@ -15,10 +15,10 @@ var ConversationTypeMap = map[int]string{
// 消息类型 // 消息类型
const ( const (
MessageTypeText = 1 // 文本消息 MessageTypeText = 1 // 文本消息
MessageTypeImage = 2 // 图片消息(预留) MessageTypeImage = 2 // 图片消息
MessageTypeVoice = 3 // 语音消息(预留) MessageTypeVoice = 3 // 语音消息
MessageTypeVideo = 4 // 视频消息(预留) MessageTypeVideo = 4 // 视频消息(预留)
MessageTypeFile = 5 // 文件消息(预留) MessageTypeFile = 5 // 文件消息
MessageTypeSystem = 10 // 系统消息(群聊操作通知) MessageTypeSystem = 10 // 系统消息(群聊操作通知)
) )

View File

@@ -59,3 +59,84 @@ type AdminCreateUserRequest struct {
Nickname string `json:"nickname" binding:"max=50"` // 昵称(选填) Nickname string `json:"nickname" binding:"max=50"` // 昵称(选填)
RoleCode string `json:"role_code" binding:"omitempty"` // 初始角色(选填,默认 user RoleCode string `json:"role_code" binding:"omitempty"` // 初始角色(选填,默认 user
} }
// ====== 管理端消息管理 DTO ======
// AdminMessageListRequest 管理端消息列表查询请求
type AdminMessageListRequest struct {
Keyword string `form:"keyword"` // 搜索关键词(模糊匹配消息内容)
Type *int `form:"type"` // 消息类型筛选1/2/3/5/10
SenderID *int64 `form:"sender_id"` // 发送者 ID
ConversationID *int64 `form:"conversation_id"` // 会话 ID
Status *int `form:"status"` // 消息状态1=正常/2=已撤回/3=已删除)
StartTime string `form:"start_time"` // 开始时间YYYY-MM-DD
EndTime string `form:"end_time"` // 结束时间YYYY-MM-DD
Page int `form:"page"` // 页码默认1
PageSize int `form:"page_size"` // 每页条数默认20
}
// AdminMessageListResponse 管理端消息列表响应
type AdminMessageListResponse struct {
Total int64 `json:"total"` // 总条数
List []AdminMessageDTO `json:"list"` // 消息列表
Page int `json:"page"` // 当前页码
PageSize int `json:"page_size"` // 每页条数
}
// AdminMessageDTO 管理端消息条目
type AdminMessageDTO struct {
ID int64 `json:"id"` // 消息 ID
ConversationID int64 `json:"conversation_id"` // 会话 ID
SenderID int64 `json:"sender_id"` // 发送者 ID
SenderNickname string `json:"sender_nickname"` // 发送者昵称
SenderAvatar string `json:"sender_avatar"` // 发送者头像
Type int `json:"type"` // 消息类型
TypeLabel string `json:"type_label"` // 类型中文标签
Content string `json:"content"` // 消息内容
Extra *string `json:"extra,omitempty"` // 扩展数据 JSON
Status int `json:"status"` // 消息状态
StatusLabel string `json:"status_label"` // 状态中文标签
CreatedAt string `json:"created_at"` // 发送时间
}
// AdminMessageStatsRequest 管理端消息统计请求
type AdminMessageStatsRequest struct {
Days int `form:"days"` // 统计天数默认7最大90
}
// AdminMessageStatsResponse 管理端消息统计响应
type AdminMessageStatsResponse struct {
TotalCount int64 `json:"total_count"` // 消息总数
TodayCount int64 `json:"today_count"` // 今日消息数
TypeDistribution []TypeDistItem `json:"type_distribution"` // 类型分布
DailyTrend []DailyTrendItem `json:"daily_trend"` // 每日趋势
ActiveUsers []ActiveUserItem `json:"active_users"` // 活跃用户排行
ActiveGroups []ActiveGroupItem `json:"active_groups"` // 活跃群组排行
}
// TypeDistItem 消息类型分布条目
type TypeDistItem struct {
Type int `json:"type"` // 消息类型
Label string `json:"label"` // 类型中文标签
Count int64 `json:"count"` // 数量
}
// DailyTrendItem 每日消息趋势条目
type DailyTrendItem struct {
Date string `json:"date"` // 日期YYYY-MM-DD
Count int64 `json:"count"` // 数量
}
// ActiveUserItem 活跃用户排行条目
type ActiveUserItem struct {
UserID int64 `json:"user_id"` // 用户 ID
Nickname string `json:"nickname"` // 昵称
Count int64 `json:"count"` // 消息数
}
// ActiveGroupItem 活跃群组排行条目
type ActiveGroupItem struct {
GroupID int64 `json:"group_id"` // 群组 ID
Name string `json:"name"` // 群名称
Count int64 `json:"count"` // 消息数
}

View File

@@ -6,8 +6,9 @@ package dto
type SendMessageRequest struct { type SendMessageRequest struct {
ConversationID int64 `json:"conversation_id"` // 会话 ID与 TargetUserID 二选一) ConversationID int64 `json:"conversation_id"` // 会话 ID与 TargetUserID 二选一)
TargetUserID int64 `json:"target_user_id"` // 对方用户 ID首次发消息时使用自动创建会话 TargetUserID int64 `json:"target_user_id"` // 对方用户 ID首次发消息时使用自动创建会话
Type int `json:"type"` // 消息类型1=文本 Type int `json:"type"` // 消息类型1=文本, 2=图片, 3=语音, 5=文件
Content string `json:"content"` // 消息内容 Content string `json:"content"` // 消息内容(富媒体消息时为空字符串)
Extra string `json:"extra"` // 扩展数据 JSON 字符串(图片/语音/文件元信息)
ClientMsgID string `json:"client_msg_id"` // 客户端消息唯一 ID用于幂等去重 ClientMsgID string `json:"client_msg_id"` // 客户端消息唯一 ID用于幂等去重
AtUserIDs []int64 `json:"at_user_ids"` // @提醒用户 ID 列表(含 0 表示 @所有人) AtUserIDs []int64 `json:"at_user_ids"` // @提醒用户 ID 列表(含 0 表示 @所有人)
} }
@@ -19,6 +20,7 @@ type MessageDTO struct {
SenderID int64 `json:"sender_id"` // 发送者用户 ID SenderID int64 `json:"sender_id"` // 发送者用户 ID
Type int `json:"type"` // 消息类型 Type int `json:"type"` // 消息类型
Content string `json:"content"` // 消息内容 Content string `json:"content"` // 消息内容
Extra *string `json:"extra,omitempty"` // 扩展数据 JSON图片/语音/文件元信息)
Status int `json:"status"` // 消息状态1=正常2=已撤回 Status int `json:"status"` // 消息状态1=正常2=已撤回
ClientMsgID string `json:"client_msg_id"` // 客户端消息 ID ClientMsgID string `json:"client_msg_id"` // 客户端消息 ID
AtUserIDs []int64 `json:"at_user_ids"` // @提醒用户 ID 列表 AtUserIDs []int64 `json:"at_user_ids"` // @提醒用户 ID 列表

View File

@@ -2,13 +2,19 @@
package controller package controller
import ( import (
"strconv"
"github.com/echochat/backend/app/file/service" "github.com/echochat/backend/app/file/service"
"github.com/echochat/backend/pkg/middleware" "github.com/echochat/backend/pkg/middleware"
"github.com/echochat/backend/pkg/utils" "github.com/echochat/backend/pkg/utils"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
const maxUploadSize = 10 << 20 // 10 MB const (
maxUploadSize = 50 << 20 // 50 MB通用上传
maxImageUploadSize = 20 << 20 // 20 MB图片上传
maxVoiceUploadSize = 5 << 20 // 5 MB语音上传
)
// FileController 文件上传控制器 // FileController 文件上传控制器
type FileController struct { type FileController struct {
@@ -20,9 +26,9 @@ func NewFileController(fileService *service.FileService) *FileController {
return &FileController{fileService: fileService} return &FileController{fileService: fileService}
} }
// Upload 处理文件上传请求 // Upload 处理通用文件上传请求
// POST /api/v1/upload // POST /api/v1/upload
// 支持 multipart/form-data字段名为 "file" // 支持 multipart/form-data字段名为 "file",最大 50MB
func (ctl *FileController) Upload(c *gin.Context) { func (ctl *FileController) Upload(c *gin.Context) {
ctx := c.Request.Context() ctx := c.Request.Context()
_, ok := middleware.GetCurrentUserID(c) _, ok := middleware.GetCurrentUserID(c)
@@ -38,7 +44,7 @@ func (ctl *FileController) Upload(c *gin.Context) {
} }
if fileHeader.Size > maxUploadSize { if fileHeader.Size > maxUploadSize {
utils.ResponseBadRequest(c, "文件大小不能超过 10MB") utils.ResponseBadRequest(c, "文件大小不能超过 50MB")
return return
} }
@@ -51,14 +57,94 @@ func (ctl *FileController) Upload(c *gin.Context) {
utils.ResponseOK(c, result) utils.ResponseOK(c, result)
} }
// UploadImage 处理图片上传请求,自动生成缩略图
// POST /api/v1/upload/image
// 支持 multipart/form-data字段名为 "file",最大 20MB
// 返回原图 URL + 缩略图 URL + 宽高信息
func (ctl *FileController) UploadImage(c *gin.Context) {
ctx := c.Request.Context()
_, ok := middleware.GetCurrentUserID(c)
if !ok {
utils.ResponseUnauthorized(c, "无法获取当前用户信息")
return
}
fileHeader, err := c.FormFile("file")
if err != nil {
utils.ResponseBadRequest(c, "请选择要上传的图片")
return
}
if fileHeader.Size > maxImageUploadSize {
utils.ResponseBadRequest(c, "图片大小不能超过 20MB")
return
}
result, err := ctl.fileService.UploadImage(ctx, fileHeader)
if err != nil {
ctl.handleError(c, err, "图片上传失败")
return
}
utils.ResponseOK(c, result)
}
// UploadVoice 处理语音上传请求,校验格式和时长
// POST /api/v1/upload/voice
// 支持 multipart/form-data字段名为 "file",另需 "duration" 字段(秒)
// 最大 5MB时长不超过 60 秒
func (ctl *FileController) UploadVoice(c *gin.Context) {
ctx := c.Request.Context()
_, ok := middleware.GetCurrentUserID(c)
if !ok {
utils.ResponseUnauthorized(c, "无法获取当前用户信息")
return
}
fileHeader, err := c.FormFile("file")
if err != nil {
utils.ResponseBadRequest(c, "请选择要上传的语音文件")
return
}
if fileHeader.Size > maxVoiceUploadSize {
utils.ResponseBadRequest(c, "语音文件大小不能超过 5MB")
return
}
durationStr := c.PostForm("duration")
duration := 0
if durationStr != "" {
duration, err = strconv.Atoi(durationStr)
if err != nil || duration < 0 {
utils.ResponseBadRequest(c, "语音时长参数无效")
return
}
}
result, err := ctl.fileService.UploadVoice(ctx, fileHeader, duration)
if err != nil {
ctl.handleError(c, err, "语音上传失败")
return
}
utils.ResponseOK(c, result)
}
// handleError 统一业务错误映射 // handleError 统一业务错误映射
// 已知业务错误 → 返回 Service 层定义的具体提示
// 未知错误 → 返回 fallbackMsg未传则默认"服务器内部错误"
func (ctl *FileController) handleError(c *gin.Context, err error, fallbackMsg ...string) { func (ctl *FileController) handleError(c *gin.Context, err error, fallbackMsg ...string) {
switch err { switch err {
case service.ErrFileOpen: case service.ErrFileOpen:
utils.ResponseBadRequest(c, err.Error()) utils.ResponseBadRequest(c, err.Error())
case service.ErrUploadFailed: case service.ErrInvalidImage:
utils.ResponseBadRequest(c, err.Error())
case service.ErrInvalidVoice:
utils.ResponseBadRequest(c, err.Error())
case service.ErrVoiceTooLong:
utils.ResponseBadRequest(c, err.Error())
case service.ErrFileTooLarge:
utils.ResponseBadRequest(c, err.Error())
case service.ErrUploadFailed, service.ErrThumbnailGen:
utils.ResponseError(c, err.Error()) utils.ResponseError(c, err.Error())
default: default:
msg := "服务器内部错误" msg := "服务器内部错误"

View File

@@ -12,5 +12,7 @@ func RegisterRoutes(r *gin.Engine, ctrl *controller.FileController, jwtAuth gin.
authed.Use(jwtAuth) authed.Use(jwtAuth)
{ {
authed.POST("/upload", ctrl.Upload) authed.POST("/upload", ctrl.Upload)
authed.POST("/upload/image", ctrl.UploadImage)
authed.POST("/upload/voice", ctrl.UploadVoice)
} }
} }

View File

@@ -3,14 +3,20 @@
package service package service
import ( import (
"bytes"
"context" "context"
"errors" "errors"
"fmt" "fmt"
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"mime/multipart" "mime/multipart"
"path/filepath" "path/filepath"
"strings" "strings"
"time" "time"
"github.com/disintegration/imaging"
"github.com/echochat/backend/config" "github.com/echochat/backend/config"
"github.com/echochat/backend/pkg/logs" "github.com/echochat/backend/pkg/logs"
"github.com/google/uuid" "github.com/google/uuid"
@@ -21,6 +27,11 @@ import (
var ( var (
ErrFileOpen = errors.New("打开上传文件失败") ErrFileOpen = errors.New("打开上传文件失败")
ErrUploadFailed = errors.New("文件上传失败") ErrUploadFailed = errors.New("文件上传失败")
ErrFileTooLarge = errors.New("文件大小超出限制")
ErrInvalidImage = errors.New("无效的图片文件")
ErrInvalidVoice = errors.New("不支持的语音格式,仅支持 mp3/wav/aac/m4a")
ErrVoiceTooLong = errors.New("语音时长不能超过 60 秒")
ErrThumbnailGen = errors.New("缩略图生成失败")
) )
// FileService 文件上传服务 // FileService 文件上传服务
@@ -37,13 +48,41 @@ func NewFileService(client *minio.Client, cfg *config.MinioConfig) *FileService
} }
} }
// UploadResult 文件上传结果 // UploadResult 通用文件上传结果
type UploadResult struct { type UploadResult struct {
URL string `json:"url"` URL string `json:"url"`
FileName string `json:"file_name"` FileName string `json:"file_name"`
Size int64 `json:"size"` Size int64 `json:"size"`
} }
// ImageUploadResult 图片上传结果(含缩略图和尺寸)
type ImageUploadResult struct {
URL string `json:"url"`
ThumbnailURL string `json:"thumbnail_url"`
FileName string `json:"file_name"`
Size int64 `json:"size"`
Width int `json:"width"`
Height int `json:"height"`
MimeType string `json:"mime_type"`
}
// VoiceUploadResult 语音上传结果(含时长)
type VoiceUploadResult struct {
URL string `json:"url"`
FileName string `json:"file_name"`
Size int64 `json:"size"`
Duration int `json:"duration"`
MimeType string `json:"mime_type"`
}
// allowedVoiceExts 允许的语音文件扩展名
var allowedVoiceExts = map[string]bool{
".mp3": true,
".wav": true,
".aac": true,
".m4a": true,
}
// Upload 上传文件到 MinIO返回文件访问 URL // Upload 上传文件到 MinIO返回文件访问 URL
// 文件按日期目录组织uploads/2026/03/04/{uuid}.{ext} // 文件按日期目录组织uploads/2026/03/04/{uuid}.{ext}
func (s *FileService) Upload(ctx context.Context, fileHeader *multipart.FileHeader) (*UploadResult, error) { func (s *FileService) Upload(ctx context.Context, fileHeader *multipart.FileHeader) (*UploadResult, error) {
@@ -76,11 +115,7 @@ func (s *FileService) Upload(ctx context.Context, fileHeader *multipart.FileHead
return nil, ErrUploadFailed return nil, ErrUploadFailed
} }
scheme := "http" url := s.buildURL(objectName)
if s.minioCfg.UseSSL {
scheme = "https"
}
url := fmt.Sprintf("%s://%s/%s/%s", scheme, s.minioCfg.Endpoint, s.minioCfg.Bucket, objectName)
return &UploadResult{ return &UploadResult{
URL: url, URL: url,
@@ -88,3 +123,142 @@ func (s *FileService) Upload(ctx context.Context, fileHeader *multipart.FileHead
Size: fileHeader.Size, Size: fileHeader.Size,
}, nil }, nil
} }
// UploadImage 上传图片并生成缩略图
// 原图和缩略图均存储到 MinIO缩略图宽度 200px 等比缩放JPEG quality 80
func (s *FileService) UploadImage(ctx context.Context, fileHeader *multipart.FileHeader) (*ImageUploadResult, error) {
funcName := "service.file_service.UploadImage"
logs.Info(ctx, funcName, "上传图片",
zap.String("file_name", fileHeader.Filename),
zap.Int64("size", fileHeader.Size))
file, err := fileHeader.Open()
if err != nil {
logs.Error(ctx, funcName, "打开图片文件失败", zap.Error(err))
return nil, ErrFileOpen
}
defer file.Close()
img, _, err := image.Decode(file)
if err != nil {
logs.Error(ctx, funcName, "解码图片失败", zap.Error(err))
return nil, ErrInvalidImage
}
bounds := img.Bounds()
width := bounds.Dx()
height := bounds.Dy()
now := time.Now()
fileID := uuid.New().String()
dateDir := now.Format("2006/01/02")
// 上传原图(回到文件开头)
if _, err = file.Seek(0, 0); err != nil {
logs.Error(ctx, funcName, "重置文件指针失败", zap.Error(err))
return nil, ErrFileOpen
}
ext := strings.ToLower(filepath.Ext(fileHeader.Filename))
objectName := fmt.Sprintf("uploads/%s/%s%s", dateDir, fileID, ext)
contentType := fileHeader.Header.Get("Content-Type")
if contentType == "" {
contentType = "image/jpeg"
}
_, err = s.minioClient.PutObject(ctx, s.minioCfg.Bucket, objectName, file, fileHeader.Size, minio.PutObjectOptions{
ContentType: contentType,
})
if err != nil {
logs.Error(ctx, funcName, "上传原图到 MinIO 失败", zap.Error(err))
return nil, ErrUploadFailed
}
// 生成缩略图:宽度 200px等比缩放
thumb := imaging.Resize(img, 200, 0, imaging.Lanczos)
var thumbBuf bytes.Buffer
if err = imaging.Encode(&thumbBuf, thumb, imaging.JPEG, imaging.JPEGQuality(80)); err != nil {
logs.Error(ctx, funcName, "编码缩略图失败", zap.Error(err))
return nil, ErrThumbnailGen
}
thumbObjectName := fmt.Sprintf("uploads/%s/%s_thumb.jpg", dateDir, fileID)
_, err = s.minioClient.PutObject(ctx, s.minioCfg.Bucket, thumbObjectName, &thumbBuf, int64(thumbBuf.Len()), minio.PutObjectOptions{
ContentType: "image/jpeg",
})
if err != nil {
logs.Error(ctx, funcName, "上传缩略图到 MinIO 失败", zap.Error(err))
return nil, ErrThumbnailGen
}
return &ImageUploadResult{
URL: s.buildURL(objectName),
ThumbnailURL: s.buildURL(thumbObjectName),
FileName: fileHeader.Filename,
Size: fileHeader.Size,
Width: width,
Height: height,
MimeType: contentType,
}, nil
}
// UploadVoice 上传语音文件,校验格式和前端传入的时长
// duration 由前端录音回调提供(秒),后端仅做范围校验
func (s *FileService) UploadVoice(ctx context.Context, fileHeader *multipart.FileHeader, duration int) (*VoiceUploadResult, error) {
funcName := "service.file_service.UploadVoice"
logs.Info(ctx, funcName, "上传语音",
zap.String("file_name", fileHeader.Filename),
zap.Int64("size", fileHeader.Size),
zap.Int("duration", duration))
ext := strings.ToLower(filepath.Ext(fileHeader.Filename))
if !allowedVoiceExts[ext] {
return nil, ErrInvalidVoice
}
if duration > 60 {
return nil, ErrVoiceTooLong
}
file, err := fileHeader.Open()
if err != nil {
logs.Error(ctx, funcName, "打开语音文件失败", zap.Error(err))
return nil, ErrFileOpen
}
defer file.Close()
now := time.Now()
objectName := fmt.Sprintf("uploads/%s/%s%s", now.Format("2006/01/02"), uuid.New().String(), ext)
contentType := fileHeader.Header.Get("Content-Type")
if contentType == "" {
contentType = "audio/mpeg"
}
_, err = s.minioClient.PutObject(ctx, s.minioCfg.Bucket, objectName, file, fileHeader.Size, minio.PutObjectOptions{
ContentType: contentType,
})
if err != nil {
logs.Error(ctx, funcName, "上传语音到 MinIO 失败", zap.Error(err))
return nil, ErrUploadFailed
}
return &VoiceUploadResult{
URL: s.buildURL(objectName),
FileName: fileHeader.Filename,
Size: fileHeader.Size,
Duration: duration,
MimeType: contentType,
}, nil
}
// buildURL 根据 MinIO 配置构建文件访问 URL
func (s *FileService) buildURL(objectName string) string {
scheme := "http"
if s.minioCfg.UseSSL {
scheme = "https"
}
return fmt.Sprintf("%s://%s/%s/%s", scheme, s.minioCfg.Endpoint, s.minioCfg.Bucket, objectName)
}

View File

@@ -2,6 +2,7 @@ package service
import ( import (
"context" "context"
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"time" "time"
@@ -82,13 +83,19 @@ func (s *IMService) SendMessage(ctx context.Context, senderID int64, req *dto.Se
zap.Int64("conversation_id", req.ConversationID), zap.Int64("conversation_id", req.ConversationID),
zap.Int64("target_user_id", req.TargetUserID)) zap.Int64("target_user_id", req.TargetUserID))
if req.Content == "" {
return nil, ErrEmptyContent
}
if req.Type == 0 { if req.Type == 0 {
req.Type = constants.MessageTypeText req.Type = constants.MessageTypeText
} }
if req.Type != constants.MessageTypeText { switch req.Type {
case constants.MessageTypeText:
if req.Content == "" {
return nil, ErrEmptyContent
}
case constants.MessageTypeImage, constants.MessageTypeVoice, constants.MessageTypeFile:
if req.Extra == "" {
return nil, ErrEmptyContent
}
default:
return nil, ErrInvalidMsgType return nil, ErrInvalidMsgType
} }
@@ -171,12 +178,16 @@ func (s *IMService) writeAndPushPrivateMessage(ctx context.Context, senderID, co
Status: constants.MessageStatusNormal, Status: constants.MessageStatusNormal,
ClientMsgID: req.ClientMsgID, ClientMsgID: req.ClientMsgID,
} }
if req.Extra != "" {
msg.Extra = &req.Extra
}
if err := s.msgDAO.Create(ctx, msg); err != nil { if err := s.msgDAO.Create(ctx, msg); err != nil {
return nil, err return nil, err
} }
now := time.Now() now := time.Now()
if err := s.convDAO.UpdateLastMessage(ctx, convID, msg.ID, truncateContent(req.Content, 100), senderID, now); err != nil { preview := generateLastMsgPreview(req.Type, req.Content, msg.Extra)
if err := s.convDAO.UpdateLastMessage(ctx, convID, msg.ID, preview, senderID, now); err != nil {
logs.Error(ctx, funcName, "更新最后消息失败", zap.Error(err)) logs.Error(ctx, funcName, "更新最后消息失败", zap.Error(err))
} }
@@ -244,6 +255,9 @@ func (s *IMService) sendGroupMessage(ctx context.Context, senderID int64, req *d
Status: constants.MessageStatusNormal, Status: constants.MessageStatusNormal,
ClientMsgID: req.ClientMsgID, ClientMsgID: req.ClientMsgID,
} }
if req.Extra != "" {
msg.Extra = &req.Extra
}
if len(req.AtUserIDs) > 0 { if len(req.AtUserIDs) > 0 {
msg.AtUserIDs = req.AtUserIDs msg.AtUserIDs = req.AtUserIDs
} }
@@ -252,7 +266,8 @@ func (s *IMService) sendGroupMessage(ctx context.Context, senderID int64, req *d
} }
now := time.Now() now := time.Now()
if err := s.convDAO.UpdateLastMessage(ctx, convID, msg.ID, truncateContent(req.Content, 100), senderID, now); err != nil { preview := generateLastMsgPreview(req.Type, req.Content, msg.Extra)
if err := s.convDAO.UpdateLastMessage(ctx, convID, msg.ID, preview, senderID, now); err != nil {
logs.Error(ctx, funcName, "更新最后消息失败", zap.Error(err)) logs.Error(ctx, funcName, "更新最后消息失败", zap.Error(err))
} }
@@ -944,6 +959,7 @@ func (s *IMService) toMessageDTO(m *model.Message) *dto.MessageDTO {
SenderID: m.SenderID, SenderID: m.SenderID,
Type: m.Type, Type: m.Type,
Content: m.Content, Content: m.Content,
Extra: m.Extra,
Status: m.Status, Status: m.Status,
ClientMsgID: m.ClientMsgID, ClientMsgID: m.ClientMsgID,
CreatedAt: m.CreatedAt.Format("2006-01-02 15:04:05"), CreatedAt: m.CreatedAt.Format("2006-01-02 15:04:05"),
@@ -965,6 +981,9 @@ func (s *IMService) buildMessagePushData(ctx context.Context, msg *model.Message
"client_msg_id": msg.ClientMsgID, "client_msg_id": msg.ClientMsgID,
"created_at": msg.CreatedAt.Format("2006-01-02 15:04:05"), "created_at": msg.CreatedAt.Format("2006-01-02 15:04:05"),
} }
if msg.Extra != nil && *msg.Extra != "" {
pushData["extra"] = *msg.Extra
}
if senderUsers, sErr := s.userInfoGetter.GetUsersByIDs(ctx, []int64{senderID}); sErr == nil && len(senderUsers) > 0 { if senderUsers, sErr := s.userInfoGetter.GetUsersByIDs(ctx, []int64{senderID}); sErr == nil && len(senderUsers) > 0 {
pushData["sender_name"] = senderUsers[0].Nickname pushData["sender_name"] = senderUsers[0].Nickname
pushData["sender_avatar"] = senderUsers[0].Avatar pushData["sender_avatar"] = senderUsers[0].Avatar
@@ -978,6 +997,60 @@ type userBrief struct {
Avatar string Avatar string
} }
// generateLastMsgPreview 根据消息类型生成会话列表预览文案
func generateLastMsgPreview(msgType int, content string, extra *string) string {
switch msgType {
case constants.MessageTypeImage:
count := 1
if extra != nil && *extra != "" {
var parsed struct {
Images []json.RawMessage `json:"images"`
}
if json.Unmarshal([]byte(*extra), &parsed) == nil && len(parsed.Images) > 1 {
count = len(parsed.Images)
}
}
if count > 1 {
return fmt.Sprintf("[图片x%d]", count)
}
return "[图片]"
case constants.MessageTypeVoice:
duration := 0
if extra != nil && *extra != "" {
var parsed struct {
Voice struct {
Duration int `json:"duration"`
} `json:"voice"`
}
if json.Unmarshal([]byte(*extra), &parsed) == nil {
duration = parsed.Voice.Duration
}
}
if duration > 0 {
return fmt.Sprintf("[语音 %d\"]", duration)
}
return "[语音]"
case constants.MessageTypeFile:
fileName := ""
if extra != nil && *extra != "" {
var parsed struct {
File struct {
FileName string `json:"file_name"`
} `json:"file"`
}
if json.Unmarshal([]byte(*extra), &parsed) == nil {
fileName = parsed.File.FileName
}
}
if fileName != "" {
return fmt.Sprintf("[文件] %s", fileName)
}
return "[文件]"
default:
return truncateContent(content, 100)
}
}
// truncateContent 截断消息内容用于预览 // truncateContent 截断消息内容用于预览
func truncateContent(s string, maxRunes int) string { func truncateContent(s string, maxRunes int) string {
runes := []rune(s) runes := []rune(s)

View File

@@ -35,6 +35,7 @@ type App struct {
OnlineController *adminController.OnlineController // 管理端在线监控控制器 OnlineController *adminController.OnlineController // 管理端在线监控控制器
ContactManageController *adminController.ContactManageController // 管理端好友关系管理控制器 ContactManageController *adminController.ContactManageController // 管理端好友关系管理控制器
GroupManageController *adminController.GroupManageController // 管理端群组管理控制器 GroupManageController *adminController.GroupManageController // 管理端群组管理控制器
MessageManageController *adminController.MessageManageController // 管理端消息管理控制器
WSHandler *wsApp.Handler // WebSocket 连接处理器 WSHandler *wsApp.Handler // WebSocket 连接处理器
Hub *ws.Hub // WebSocket Hub 连接管理 Hub *ws.Hub // WebSocket Hub 连接管理
PubSub *ws.PubSub // Redis Pub/Sub 消息路由 PubSub *ws.PubSub // Redis Pub/Sub 消息路由
@@ -60,6 +61,7 @@ func NewApp(
onlineCtrl *adminController.OnlineController, onlineCtrl *adminController.OnlineController,
contactManageCtrl *adminController.ContactManageController, contactManageCtrl *adminController.ContactManageController,
groupManageCtrl *adminController.GroupManageController, groupManageCtrl *adminController.GroupManageController,
msgManageCtrl *adminController.MessageManageController,
wsHandler *wsApp.Handler, wsHandler *wsApp.Handler,
hub *ws.Hub, hub *ws.Hub,
pubsub *ws.PubSub, pubsub *ws.PubSub,
@@ -86,6 +88,7 @@ func NewApp(
OnlineController: onlineCtrl, OnlineController: onlineCtrl,
ContactManageController: contactManageCtrl, ContactManageController: contactManageCtrl,
GroupManageController: groupManageCtrl, GroupManageController: groupManageCtrl,
MessageManageController: msgManageCtrl,
WSHandler: wsHandler, WSHandler: wsHandler,
Hub: hub, Hub: hub,
PubSub: pubsub, PubSub: pubsub,

View File

@@ -93,6 +93,11 @@ func InitializeApp(cfg *config.Config) (*App, error) {
groupManageService := service2.NewGroupManageService(gormDB, groupDAO) groupManageService := service2.NewGroupManageService(gormDB, groupDAO)
groupManageController := controller2.NewGroupManageController(groupManageService) groupManageController := controller2.NewGroupManageController(groupManageService)
app := NewApp(cfg, gormDB, client, minioClient, authService, authController, adminAuthController, userManageController, onlineController, contactManageController, groupManageController, handler, hub, pubSub, onlineService, contactController, imController, imEventHandler, offlinePusher, fileController, groupController) // Admin 消息管理初始化
messageManageDAO := dao2.NewMessageManageDAO(gormDB)
messageManageService := service2.NewMessageManageService(messageManageDAO, userDAO, conversationDAO, pubSub)
messageManageController := controller2.NewMessageManageController(messageManageService)
app := NewApp(cfg, gormDB, client, minioClient, authService, authController, adminAuthController, userManageController, onlineController, contactManageController, groupManageController, messageManageController, handler, hub, pubSub, onlineService, contactController, imController, imEventHandler, offlinePusher, fileController, groupController)
return app, nil return app, nil
} }

View File

@@ -24,6 +24,7 @@ require (
github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cloudwego/base64x v0.1.6 // indirect github.com/cloudwego/base64x v0.1.6 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/disintegration/imaging v1.6.2 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/gabriel-vasile/mimetype v1.4.8 // indirect
@@ -66,6 +67,7 @@ require (
go.uber.org/multierr v1.10.0 // indirect go.uber.org/multierr v1.10.0 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/arch v0.20.0 // indirect golang.org/x/arch v0.20.0 // indirect
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 // indirect
golang.org/x/mod v0.26.0 // indirect golang.org/x/mod v0.26.0 // indirect
golang.org/x/net v0.42.0 // indirect golang.org/x/net v0.42.0 // indirect
golang.org/x/sync v0.16.0 // indirect golang.org/x/sync v0.16.0 // indirect

View File

@@ -15,6 +15,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@@ -149,6 +151,8 @@ golang.org/x/arch v0.20.0 h1:dx1zTU0MAE98U+TQ8BLl7XsJbgze2WnNKF/8tGp/Q6c=
golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk= golang.org/x/arch v0.20.0/go.mod h1:bdwinDaKcfZUGpH09BB7ZmOfhalA8lQdzl62l8gGWsk=
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM= golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY= golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
@@ -158,6 +162,7 @@ golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=

View File

@@ -12,7 +12,10 @@ import (
) )
// NewMinioClient 初始化 MinIO 客户端并确保存储桶存在 // NewMinioClient 初始化 MinIO 客户端并确保存储桶存在
// 启动时自动创建配置中指定的 bucket如不存在 // 启动时
// 1. 创建配置中指定的 bucket如不存在
// 2. 为 bucket 设置 public-read 策略,使前端可通过 URL 直接访问已上传的图片、语音、文件等资源
// (写入操作仍需 AccessKey/SecretKey 凭据,不影响安全性)
func NewMinioClient(cfg *config.MinioConfig) (*minio.Client, error) { func NewMinioClient(cfg *config.MinioConfig) (*minio.Client, error) {
client, err := minio.New(cfg.Endpoint, &minio.Options{ client, err := minio.New(cfg.Endpoint, &minio.Options{
Creds: credentials.NewStaticV4(cfg.AccessKey, cfg.SecretKey, ""), Creds: credentials.NewStaticV4(cfg.AccessKey, cfg.SecretKey, ""),
@@ -34,5 +37,27 @@ func NewMinioClient(cfg *config.MinioConfig) (*minio.Client, error) {
} }
} }
if err := ensureBucketPublicRead(ctx, client, cfg.Bucket); err != nil {
return nil, fmt.Errorf("设置存储桶 %s 公开读策略失败: %w", cfg.Bucket, err)
}
return client, nil return client, nil
} }
// ensureBucketPublicRead 设置 bucket 的匿名公开读策略
// 允许匿名用户通过 HTTP GET 访问 bucket 内的对象s3:GetObject
// 其他操作(上传、删除等)仍然需要 AccessKey/SecretKey 凭据
func ensureBucketPublicRead(ctx context.Context, client *minio.Client, bucket string) error {
policy := fmt.Sprintf(`{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"AWS": ["*"]},
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::%s/*"]
}
]
}`, bucket)
return client.SetBucketPolicy(ctx, bucket, policy)
}

View File

@@ -36,7 +36,7 @@ func Setup(engine *gin.Engine, app *provider.App) {
// --- 各模块路由注册 --- // --- 各模块路由注册 ---
auth.RegisterRoutes(engine, app.AuthController, app.AdminAuthController, jwtAuth) auth.RegisterRoutes(engine, app.AuthController, app.AdminAuthController, jwtAuth)
admin.RegisterRoutes(engine, app.UserManageController, app.OnlineController, app.ContactManageController, app.GroupManageController, jwtAuth) admin.RegisterRoutes(engine, app.UserManageController, app.OnlineController, app.ContactManageController, app.GroupManageController, app.MessageManageController, jwtAuth)
wsApp.RegisterRoutes(engine, app.WSHandler) wsApp.RegisterRoutes(engine, app.WSHandler)
contact.RegisterRoutes(engine, app.ContactController, jwtAuth) contact.RegisterRoutes(engine, app.ContactController, jwtAuth)
imApp.RegisterRoutes(engine, app.IMController, jwtAuth) imApp.RegisterRoutes(engine, app.IMController, jwtAuth)

View File

@@ -29,6 +29,7 @@
| [admin/online.md](admin/online.md) | 在线监控 | ✅ Phase 2a | 在线用户列表、在线用户计数 | | [admin/online.md](admin/online.md) | 在线监控 | ✅ Phase 2a | 在线用户列表、在线用户计数 |
| [admin/contact.md](admin/contact.md) | 好友关系管理 | ✅ Phase 2a | 好友关系列表(分页)、管理员解除好友关系 | | [admin/contact.md](admin/contact.md) | 好友关系管理 | ✅ Phase 2a | 好友关系列表(分页)、管理员解除好友关系 |
| [admin/group.md](admin/group.md) | 群聊管理 | ✅ Phase 2c | 群列表/详情、管理员解散群聊 | | [admin/group.md](admin/group.md) | 群聊管理 | ✅ Phase 2c | 群列表/详情、管理员解散群聊 |
| [admin/message.md](admin/message.md) | 消息管理 | ✅ Phase 2d | 消息列表/详情/撤回/删除、消息统计5 个 API |
| [admin/meeting.md](admin/meeting.md) | 会议管理 | 📋 后续 | 会议列表/详情、强制结束、会议统计 | | [admin/meeting.md](admin/meeting.md) | 会议管理 | 📋 后续 | 会议列表/详情、强制结束、会议统计 |
| [admin/system.md](admin/system.md) | 系统管理 | 📋 待定 | 仪表盘数据、操作日志、系统配置 | | [admin/system.md](admin/system.md) | 系统管理 | 📋 待定 | 仪表盘数据、操作日志、系统配置 |
@@ -206,6 +207,7 @@ docs/api/
│ ├── online.md # 在线监控 ✅ Phase 2a │ ├── online.md # 在线监控 ✅ Phase 2a
│ ├── contact.md # 好友关系管理 ✅ Phase 2a │ ├── contact.md # 好友关系管理 ✅ Phase 2a
│ ├── group.md # 群聊管理3 个 API ✅ Phase 2c │ ├── group.md # 群聊管理3 个 API ✅ Phase 2c
│ ├── message.md # 消息管理5 个 API ✅ Phase 2d
│ ├── meeting.md # 会议管理 📋 后续 │ ├── meeting.md # 会议管理 📋 后续
│ └── system.md # 系统管理 📋 待定 │ └── system.md # 系统管理 📋 待定
└── websocket.md # WebSocket 全量事件协议 ✅ Phase 2a/2b/2c └── websocket.md # WebSocket 全量事件协议 ✅ Phase 2a/2b/2c

162
docs/api/admin/message.md Normal file
View File

@@ -0,0 +1,162 @@
# 管理端消息管理 API
> **最后更新**2026-03-03
> **阶段**Phase 2d
---
## 接口列表
| 方法 | 路径 | 描述 | 认证 |
|------|------|------|------|
| GET | /api/v1/admin/messages | 消息列表(分页+多条件筛选) | JWT + admin |
| GET | /api/v1/admin/messages/:id | 消息详情 | JWT + admin |
| DELETE | /api/v1/admin/messages/:id | 删除消息(软删除) | JWT + admin |
| PUT | /api/v1/admin/messages/:id/recall | 撤回消息 | JWT + admin |
| GET | /api/v1/admin/messages/stats | 消息统计 | JWT + admin |
---
## GET /api/v1/admin/messages
获取消息列表(分页+多条件筛选)。
### 请求参数Query
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| page | int | 否 | 页码(默认 1 |
| page_size | int | 否 | 每页条数(默认 20最大 100 |
| keyword | string | 否 | 搜索关键词(模糊匹配消息内容) |
| type | int | 否 | 消息类型1=文本 / 2=图片 / 3=语音 / 5=文件 / 10=系统 |
| sender_id | int64 | 否 | 发送者 ID |
| conversation_id | int64 | 否 | 会话 ID |
| status | int | 否 | 消息状态1=正常 / 2=已撤回 / 3=已删除 |
| start_time | string | 否 | 开始日期YYYY-MM-DD |
| end_time | string | 否 | 结束日期YYYY-MM-DD |
### 响应
```json
{
"code": 0,
"message": "success",
"data": {
"total": 156,
"list": [
{
"id": 1,
"conversation_id": 5,
"sender_id": 10,
"sender_nickname": "张三",
"sender_avatar": "https://...",
"type": 1,
"type_label": "文本",
"content": "你好",
"extra": null,
"status": 1,
"status_label": "正常",
"created_at": "2026-03-03 14:30:00"
}
],
"page": 1,
"page_size": 20
}
}
```
---
## GET /api/v1/admin/messages/:id
获取消息详情。
### 响应
同列表中的单条消息对象。
---
## DELETE /api/v1/admin/messages/:id
删除消息(软删除,状态改为 3=已删除)。
### 响应
```json
{
"code": 0,
"message": "success",
"data": null
}
```
---
## PUT /api/v1/admin/messages/:id/recall
管理员撤回消息。撤回后会通过 WebSocket 推送 `im.message.recalled` 事件给该会话的所有在线成员。
### 响应
```json
{
"code": 0,
"message": "success",
"data": null
}
```
### WS 推送事件
```json
{
"event": "im.message.recalled",
"data": {
"message_id": 123,
"conversation_id": 5,
"operator_id": 0,
"sender_id": 10,
"recall_text": "管理员撤回了一条消息"
}
}
```
---
## GET /api/v1/admin/messages/stats
获取消息统计数据。
### 请求参数Query
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| days | int | 否 | 统计天数(默认 7最大 90 |
### 响应
```json
{
"code": 0,
"message": "success",
"data": {
"total_count": 5680,
"today_count": 120,
"type_distribution": [
{ "type": 1, "label": "文本", "count": 4500 },
{ "type": 2, "label": "图片", "count": 800 }
],
"daily_trend": [
{ "date": "2026-02-25", "count": 150 },
{ "date": "2026-02-26", "count": 200 }
],
"active_users": [
{ "user_id": 10, "nickname": "张三", "count": 500 }
],
"active_groups": [
{ "group_id": 1, "name": "技术交流群", "count": 300 }
]
}
}
```

View File

@@ -3,7 +3,7 @@
> 通用规范(认证方式、响应格式、错误码)见 [README.md](../README.md) > 通用规范(认证方式、响应格式、错误码)见 [README.md](../README.md)
> 消息的实时收发(发送/撤回/标记已读/正在输入)通过 WebSocket 完成,见 [websocket.md](../websocket.md) > 消息的实时收发(发送/撤回/标记已读/正在输入)通过 WebSocket 完成,见 [websocket.md](../websocket.md)
> 本文档中的接口用于会话管理和消息历史查询等非实时操作。 > 本文档中的接口用于会话管理和消息历史查询等非实时操作。
> **最后更新:** 2026-03-04Fix T19 已读详情群昵称 + Fix T20 免打扰 API 补全 > **最后更新:** 2026-03-03Phase 2d 文件上传 API 新增
--- ---
@@ -20,6 +20,9 @@
| GET | /api/v1/im/messages/search | 需认证 | 全局消息搜索 | | GET | /api/v1/im/messages/search | 需认证 | 全局消息搜索 |
| GET | /api/v1/im/unread | 需认证 | 获取全局未读消息总数 | | GET | /api/v1/im/unread | 需认证 | 获取全局未读消息总数 |
| GET | /api/v1/im/messages/:id/reads | 需认证 | 获取消息已读详情 | | GET | /api/v1/im/messages/:id/reads | 需认证 | 获取消息已读详情 |
| POST | /api/v1/upload/image | 需认证 | 图片上传(含缩略图生成)[Phase 2d] |
| POST | /api/v1/upload/voice | 需认证 | 语音上传(含时长校验)[Phase 2d] |
| POST | /api/v1/upload | 需认证 | 通用文件上传(最大 50MB[Phase 2d] |
--- ---

View File

@@ -0,0 +1,704 @@
# Phase 2d 设计文档:消息类型扩展
> **状态:** ✅ 已完成
> **分支:** `feature/phase2d-message-types`
> **前置依赖:** Phase 2c 全部完成(群聊与已读回执)
> **最后更新:** 2026-03-03
---
## 一、设计目标
基于 Phase 2b/2c 的单聊+群聊文本消息基础设施,扩展三种富媒体消息类型和管理端消息管理功能。
**核心交付物:**
- 图片消息type=2前端压缩+多图发送最多9张、后端生成 JPEG 缩略图、聊天内缩略图展示+大图预览
- 语音消息type=3微信风格按住录音/松手发送/上滑取消、最长60秒、时长波形条展示+播放
- 文件消息type=5任意文件上传最大50MB、类型图标+大小展示、点击下载+在线预览PDF/图片)
- 文件上传服务增强大小限制提升至50MB、图片专用上传缩略图生成、语音专用上传格式+时长校验)
- 管理端消息管理:消息列表(完整筛选搜索)+ 消息统计仪表板(趋势图+类型分布+活跃排行)+ 敏感消息删除/撤回
**不包含(留待后续阶段):**
- 视频消息type=4录制/压缩/缩略图复杂度高)
- 表情包 / 自定义贴纸
- 消息转发 / 合并转发
- 消息引用 / 回复
---
## 二、需求决策记录
### 2.1 消息类型决策
| 决策项 | 选择 | 理由 |
|--------|------|------|
| 消息类型范围 | 图片+语音+文件(无视频) | 视频录制/压缩/缩略图复杂度高,留后续阶段 |
| 多图策略 | 单条消息包含多图最多9张 | 微信风格extra JSON 存图片列表 |
| 图片缩略图 | 后端 Go 图片库生成 | 保证各端一致性,前端仅做发送前压缩 |
| 图片格式 | 统一转 JPEG | 兼容性最好,体积适中 |
| 图片压缩 | 前端发送前压缩(宽>1920px 等比缩放质量80% | 减少上传流量 |
| 缩略图尺寸 | 宽度不超过 200px等比缩放JPEG quality 80 | 列表加载快,质量可接受 |
### 2.2 语音消息决策
| 决策项 | 选择 | 理由 |
|--------|------|------|
| 交互方式 | 微信风格:按住录音/松手发送/上滑取消 | 用户认知成本低 |
| 录音时长 | 最长 60 秒 | 微信标准 |
| 录音格式 | MP3 | 跨端兼容性最好 |
| 录音技术 | uni-app `uni.getRecorderManager()` | uni-app 原生 API多端兼容 |
### 2.3 文件消息决策
| 决策项 | 选择 | 理由 |
|--------|------|------|
| 大小限制 | 50MB上调原 10MB | 支持 PPT/中等大小文件 |
| 文件能力 | 上传+类型图标+大小显示+下载+在线预览PDF/图片) | 完整用户体验 |
| 文件类型限制 | 不限制(后端仅做大小校验) | 通用文件传输场景 |
### 2.4 上传与发送流程决策
| 决策项 | 选择 | 理由 |
|--------|------|------|
| 上传流程 | 先上传后发送:前端 REST 上传 → 获取 URL → WS 发消息 | 简单可靠,解耦文件上传和消息发送 |
| 上传接口 | 按类型分离:通用/图片/语音三个接口 | 图片需要缩略图、语音需要时长校验,逻辑各异 |
### 2.5 UI/UX 决策
| 决策项 | 选择 | 理由 |
|--------|------|------|
| 会话列表预览 | 方括号标记:`[图片]``[语音 12"]``[文件] report.pdf` | 微信风格,用户习惯 |
| 图片展示 | 聊天内缩略图(网格)+ 点击大图预览Swiper | 标准 IM 体验 |
| 语音展示 | 时长+波形条+播放按钮 | 微信风格 |
| 文件展示 | 文件图标+文件名+大小+下载/预览按钮 | 清晰直观 |
| 表情包/贴纸 | 不做 | 专注核心媒体消息 |
### 2.6 管理端决策
| 决策项 | 选择 | 理由 |
|--------|------|------|
| 搜索筛选 | 完整:关键词+类型+发送者+会话/群+时间+状态 | 满足运营需求 |
| 统计维度 | 完整:趋势图+类型分布+活跃用户排行+群活跃度 | 数据运营可视化 |
| 图表库 | ECharts | admin 项目基于 Vue 3 + Element PlusECharts 集成良好 |
---
## 三、架构设计
### 3.1 模块目录结构
```
backend/go-service/
├── app/
│ ├── file/ # 文件上传模块(增强)
│ │ ├── controller/
│ │ │ └── file_controller.go # 新增 UploadImage / UploadVoice 接口
│ │ ├── service/
│ │ │ └── file_service.go # 新增 UploadWithThumbnail / UploadVoice 方法
│ │ ├── router.go # 新增 /upload/image 和 /upload/voice 路由
│ │ └── provider.go
│ ├── im/ # 即时通讯模块(适配)
│ │ ├── service/
│ │ │ └── im_service.go # SendMessage 适配 extra + 预览文案
│ │ └── handler/
│ │ └── event_handler.go # im.message.send 适配 extra 字段
│ ├── admin/ # 管理端(新增消息管理)
│ │ ├── controller/
│ │ │ └── message_manage_controller.go # [新增]
│ │ ├── service/
│ │ │ └── message_manage_service.go # [新增]
│ │ ├── dao/
│ │ │ └── message_manage_dao.go # [新增]
│ │ └── router.go # 注册消息管理路由
│ ├── dto/
│ │ ├── im_dto.go # 扩展 SendMessageRequest + MessageDTO 的 extra
│ │ └── admin_dto.go # 新增管理端消息 DTO
│ └── constants/
│ └── im.go # 消息类型常量注释更新2/3/5 不再标注"预留"
├── frontend/src/
│ ├── api/
│ │ └── file.js # [新增] 文件上传 API 封装
│ ├── components/
│ │ ├── msg/ # [新增] 消息类型组件
│ │ │ ├── MsgText.vue # 文本消息组件
│ │ │ ├── MsgImage.vue # 图片消息组件(网格+大图预览)
│ │ │ ├── MsgVoice.vue # 语音消息组件(波形条+播放)
│ │ │ └── MsgFile.vue # 文件消息组件(卡片+下载)
│ │ └── chat/ # [新增] 聊天辅助组件
│ │ ├── MorePanel.vue # "+"展开面板(图片/文件入口)
│ │ ├── VoiceRecorder.vue # 语音录制组件
│ │ └── ImagePreviewer.vue # 图片全屏预览
│ ├── pages/
│ │ ├── chat/conversation.vue # [修改] 引入消息组件+输入栏改造
│ │ └── group/conversation.vue # [修改] 同上
│ ├── store/
│ │ └── chat.js # [修改] 扩展发送方法
│ └── utils/
│ └── file.js # [新增] 文件工具(压缩/格式判断/大小格式化)
├── admin/src/
│ ├── api/
│ │ └── message.js # [新增] 管理端消息 API
│ ├── views/
│ │ └── message/ # [新增] 消息管理模块
│ │ ├── list.vue # 消息列表(筛选+分页+操作)
│ │ └── stats.vue # 消息统计仪表板
│ └── router/
│ └── index.js # 注册消息管理路由
```
### 3.2 跨模块依赖关系
```
file.FileService ← im.IMService (通过接口注入,暂不直接依赖)
im.IMService → convDAO/msgDAO (存储消息 + extra)
im.EventHandler → im.IMService (WS 事件调用)
admin.MessageManageService → im.MessageDAO (查询消息)
→ auth.UserDAO (查询发送者)
```
消息发送流程中,**文件上传与消息发送是解耦的**
1. 前端通过 REST API 上传文件到 MinIO获取 URL
2. 前端通过 WS 发送消息payload 中携带 `extra` 字段(含文件 URL
3. 后端 IM Service 直接存储,不再访问 file 模块
---
## 四、消息 extra 字段 JSON 结构设计
`im_messages.extra` 字段类型为 JSONB已存在按消息类型存储不同元数据。
### 4.1 图片消息type=2
```json
{
"images": [
{
"url": "http://localhost:9000/echochat/uploads/2026/03/05/abc.jpg",
"thumbnail_url": "http://localhost:9000/echochat/uploads/2026/03/05/abc_thumb.jpg",
"width": 1920,
"height": 1080,
"size": 245760,
"file_name": "photo.jpg"
},
{
"url": "http://localhost:9000/echochat/uploads/2026/03/05/def.jpg",
"thumbnail_url": "http://localhost:9000/echochat/uploads/2026/03/05/def_thumb.jpg",
"width": 1280,
"height": 720,
"size": 180000,
"file_name": "photo2.jpg"
}
]
}
```
### 4.2 语音消息type=3
```json
{
"voice": {
"url": "http://localhost:9000/echochat/uploads/2026/03/05/voice_xxx.mp3",
"duration": 12,
"size": 48000,
"file_name": "voice_20260305_120000.mp3"
}
}
```
### 4.3 文件消息type=5
```json
{
"file": {
"url": "http://localhost:9000/echochat/uploads/2026/03/05/doc_xxx.pdf",
"file_name": "年度报告.pdf",
"size": 1048576,
"mime_type": "application/pdf",
"ext": ".pdf"
}
}
```
---
## 五、API 设计
### 5.1 文件上传 REST API扩展
| 方法 | 路径 | 权限 | 说明 |
|------|------|------|------|
| POST | /api/v1/upload | 需认证 | 通用文件上传最大50MB |
| POST | /api/v1/upload/image | 需认证 | 图片上传(压缩+生成缩略图,返回双 URL |
| POST | /api/v1/upload/voice | 需认证 | 语音上传(校验格式+时长<=60s |
#### POST /api/v1/upload/image
**请求**multipart/form-data字段名 `file`
**成功响应**
```json
{
"code": 0,
"message": "success",
"data": {
"url": "http://localhost:9000/echochat/uploads/2026/03/05/xxx.jpg",
"thumbnail_url": "http://localhost:9000/echochat/uploads/2026/03/05/xxx_thumb.jpg",
"file_name": "photo.jpg",
"size": 245760,
"width": 1920,
"height": 1080,
"mime_type": "image/jpeg"
}
}
```
#### POST /api/v1/upload/voice
**请求**multipart/form-data字段名 `file`
**成功响应**
```json
{
"code": 0,
"message": "success",
"data": {
"url": "http://localhost:9000/echochat/uploads/2026/03/05/voice_xxx.mp3",
"file_name": "voice_20260305.mp3",
"size": 48000,
"duration": 12,
"mime_type": "audio/mpeg"
}
}
```
### 5.2 管理端消息管理 REST API新增
| 方法 | 路径 | 权限 | 说明 |
|------|------|------|------|
| GET | /api/v1/admin/messages | admin | 消息列表(分页+多条件筛选) |
| GET | /api/v1/admin/messages/:id | admin | 消息详情(含发送者信息) |
| DELETE | /api/v1/admin/messages/:id | admin | 删除消息 |
| PUT | /api/v1/admin/messages/:id/recall | admin | 管理员撤回消息 |
| GET | /api/v1/admin/messages/stats | admin | 消息统计数据 |
#### GET /api/v1/admin/messages
**查询参数**
| 参数 | 类型 | 说明 |
|------|------|------|
| keyword | string | 搜索关键词(模糊匹配 content |
| type | int | 消息类型筛选1/2/3/5/10 |
| sender_id | int64 | 发送者 ID |
| conversation_id | int64 | 会话 ID |
| status | int | 消息状态1=正常/2=已撤回/3=已删除) |
| start_time | string | 开始时间YYYY-MM-DD |
| end_time | string | 结束时间YYYY-MM-DD |
| page | int | 页码默认1 |
| page_size | int | 每页条数默认20 |
**成功响应**
```json
{
"code": 0,
"message": "success",
"data": {
"list": [
{
"id": 1,
"conversation_id": 5,
"sender_id": 4,
"sender_nickname": "张三",
"sender_avatar": "",
"type": 2,
"type_label": "图片",
"content": "",
"extra": { "images": [...] },
"status": 1,
"status_label": "正常",
"created_at": "2026-03-05 10:30:00"
}
],
"total": 1000,
"page": 1,
"page_size": 20
}
}
```
#### GET /api/v1/admin/messages/stats
**查询参数**
| 参数 | 类型 | 说明 |
|------|------|------|
| days | int | 统计天数默认7最大90 |
**成功响应**
```json
{
"code": 0,
"message": "success",
"data": {
"total_count": 12580,
"today_count": 350,
"type_distribution": [
{ "type": 1, "label": "文本", "count": 10000 },
{ "type": 2, "label": "图片", "count": 1500 },
{ "type": 3, "label": "语音", "count": 500 },
{ "type": 5, "label": "文件", "count": 300 },
{ "type": 10, "label": "系统消息", "count": 280 }
],
"daily_trend": [
{ "date": "2026-03-01", "count": 280 },
{ "date": "2026-03-02", "count": 320 }
],
"active_users": [
{ "user_id": 4, "nickname": "张三", "count": 120 }
],
"active_groups": [
{ "group_id": 1, "name": "技术讨论群", "count": 500 }
]
}
}
```
### 5.3 WebSocket 事件变更
**`im.message.send` 请求扩展**
```json
{
"event": "im.message.send",
"data": {
"conversation_id": 8,
"type": 2,
"content": "",
"client_msg_id": "xxx",
"extra": "{\"images\":[{\"url\":\"...\",\"thumbnail_url\":\"...\",\"width\":1920,\"height\":1080,\"size\":245760,\"file_name\":\"photo.jpg\"}]}"
}
}
```
**`im.message.new` 推送扩展**
推送数据增加 `extra` 字段JSON string前端解析后根据 `type` 渲染对应组件。
**`im.message.send.ack` 响应扩展**
ACK 的 `data`MessageDTO增加 `extra` 字段。
---
## 六、核心业务流程
### 6.1 图片消息发送流程
1. 用户点击"+"面板中的"图片",调用 `uni.chooseImage` 选择图片最多9张
2. 前端对每张图片进行压缩(宽>1920px 等比缩放质量80%
3. 逐张调用 `POST /api/v1/upload/image` 上传
4. 后端接收图片 → 生成 JPEG 缩略图宽200pxquality 80→ 原图+缩略图存 MinIO
5. 返回 `{ url, thumbnail_url, width, height, size, file_name, mime_type }`
6. 所有图片上传完成后,前端组装 `extra.images` 数组
7. 通过 WS 发送 `im.message.send``type=2``content=""``extra` 为 JSON 字符串
8. 后端存储消息,`UpdateLastMessage` 预览文案为 `[图片]``[图片x3]`
9. 推送 `im.message.new` 给接收方,携带 `extra`
### 6.2 语音消息发送流程
1. 用户长按麦克风按钮,调用 `uni.getRecorderManager().start({ format: 'mp3', duration: 60000 })`
2. 录音过程中显示录音动画(时长 + 波形),上滑显示"取消发送"
3. 松手停止录音 → 录音回调返回临时文件路径
4. 时长 < 1秒提示"录音时间太短"并丢弃
5. 调用 `POST /api/v1/upload/voice` 上传语音文件
6. 后端校验格式和时长<=60s)→ MinIO 返回 `{ url, duration, size, file_name }`
7. 前端组装 `extra.voice` 对象
8. 通过 WS 发送`type=3``content=""``extra` JSON 字符串
9. 后端存储预览文案 `[语音 12"]`
### 6.3 文件消息发送流程
1. 用户点击"+"面板中的"文件"调用 `uni.chooseFile` `uni.chooseMessageFile`
2. 校验文件大小<=50MB
3. 调用 `POST /api/v1/upload` 通用上传接口
4. 返回 `{ url, file_name, size }`
5. 前端补充 `mime_type` `ext`组装 `extra.file` 对象
6. 通过 WS 发送`type=5``content=""``extra` JSON 字符串
7. 后端存储预览文案 `[文件] report.pdf`
### 6.4 管理员撤回消息流程
1. 管理员在消息列表选中消息 点击"撤回"
2. 调用 `PUT /api/v1/admin/messages/:id/recall`
3. 后端将消息 status 改为 2已撤回
4. 推送 `im.message.recalled` 给相关在线用户
5. 会话最后消息预览更新为"管理员撤回了一条消息"
---
## 七、会话列表预览文案规则
`IMService` `UpdateLastMessage` 时根据消息类型生成预览文案
| type | content 字段用途 | last_msg_content 预览 |
|------|-----------------|----------------------|
| 1文本 | 消息正文 | 消息正文截断 |
| 2图片 | 空字符串 | `[图片]` / `[图片x3]`多图标数量 |
| 3语音 | 空字符串 | `[语音 12"]`duration extra 解析 |
| 5文件 | 空字符串 | `[文件] report.pdf`file_name extra 解析 |
| 10系统 | 系统消息正文 | 系统消息正文 |
---
## 八、前端页面规划
### 8.1 新增组件(前台用户端)
| 组件 | 路径 | 说明 |
|------|------|------|
| MsgText.vue | components/msg/ | 文本消息组件 conversation 提取 |
| MsgImage.vue | components/msg/ | 图片消息1张=大图2-4张=2列网格5-9张=3列网格点击放大 |
| MsgVoice.vue | components/msg/ | 语音消息播放按钮+波形条+时长宽度按时长缩放 |
| MsgFile.vue | components/msg/ | 文件消息文件图标+文件名+大小+下载/预览按钮 |
| MorePanel.vue | components/chat/ | 输入栏"+"展开面板图片文件两个入口 |
| VoiceRecorder.vue | components/chat/ | 语音录制长按录音+上滑取消+时长显示+波形动画 |
| ImagePreviewer.vue | components/chat/ | 图片全屏预览Swiper 左右滑+双指缩放 |
### 8.2 修改页面(前台用户端)
| 页面 | 修改内容 |
|------|----------|
| pages/chat/conversation.vue | 消息列表按 type 渲染不同组件输入栏增加"+"和麦克风按钮 |
| pages/group/conversation.vue | 同上 |
| store/chat.js | 扩展 sendMessage 支持 extra新增 sendImageMessage/sendVoiceMessage/sendFileMessage |
### 8.3 新增页面(管理端)
| 页面 | 路径 | 说明 |
|------|------|------|
| 消息列表 | views/message/list.vue | 多条件筛选+分页表格+撤回/删除操作 |
| 消息统计 | views/message/stats.vue | ECharts 图表趋势折线图+类型饼图+活跃排行柱状图 |
---
## 九、DTO 扩展规划
### 9.1 发送消息请求扩展
```go
// SendMessageRequest 发送消息请求WS 事件 im.message.send 的 data 字段)
type SendMessageRequest struct {
ConversationID int64 `json:"conversation_id"`
TargetUserID int64 `json:"target_user_id"`
Type int `json:"type"`
Content string `json:"content"`
ClientMsgID string `json:"client_msg_id"`
AtUserIDs []int64 `json:"at_user_ids"`
Extra string `json:"extra"` // [Phase 2d 新增] 扩展数据 JSON 字符串
}
```
### 9.2 消息 DTO 扩展
```go
// MessageDTO 消息传输对象(返回给前端)
type MessageDTO struct {
ID int64 `json:"id"`
ConversationID int64 `json:"conversation_id"`
SenderID int64 `json:"sender_id"`
Type int `json:"type"`
Content string `json:"content"`
Extra *string `json:"extra,omitempty"` // [Phase 2d 新增] 扩展数据 JSON
Status int `json:"status"`
ClientMsgID string `json:"client_msg_id"`
AtUserIDs []int64 `json:"at_user_ids"`
CreatedAt string `json:"created_at"`
}
```
### 9.3 文件上传结果 DTO 扩展
```go
// ImageUploadResult 图片上传结果
type ImageUploadResult struct {
URL string `json:"url"`
ThumbnailURL string `json:"thumbnail_url"`
FileName string `json:"file_name"`
Size int64 `json:"size"`
Width int `json:"width"`
Height int `json:"height"`
MimeType string `json:"mime_type"`
}
// VoiceUploadResult 语音上传结果
type VoiceUploadResult struct {
URL string `json:"url"`
FileName string `json:"file_name"`
Size int64 `json:"size"`
Duration int `json:"duration"`
MimeType string `json:"mime_type"`
}
```
### 9.4 管理端消息 DTO
```go
// AdminMessageListRequest 管理端消息列表查询
type AdminMessageListRequest struct {
Keyword string `form:"keyword"`
Type *int `form:"type"`
SenderID *int64 `form:"sender_id"`
ConversationID *int64 `form:"conversation_id"`
Status *int `form:"status"`
StartTime string `form:"start_time"`
EndTime string `form:"end_time"`
Page int `form:"page"`
PageSize int `form:"page_size"`
}
// AdminMessageDTO 管理端消息条目
type AdminMessageDTO struct {
ID int64 `json:"id"`
ConversationID int64 `json:"conversation_id"`
SenderID int64 `json:"sender_id"`
SenderNickname string `json:"sender_nickname"`
SenderAvatar string `json:"sender_avatar"`
Type int `json:"type"`
TypeLabel string `json:"type_label"`
Content string `json:"content"`
Extra *string `json:"extra,omitempty"`
Status int `json:"status"`
StatusLabel string `json:"status_label"`
CreatedAt string `json:"created_at"`
}
// AdminMessageStatsRequest 管理端消息统计请求
type AdminMessageStatsRequest struct {
Days int `form:"days"` // 统计天数默认7最大90
}
// AdminMessageStatsResponse 管理端消息统计响应
type AdminMessageStatsResponse struct {
TotalCount int64 `json:"total_count"`
TodayCount int64 `json:"today_count"`
TypeDistribution []TypeDistItem `json:"type_distribution"`
DailyTrend []DailyTrendItem `json:"daily_trend"`
ActiveUsers []ActiveUserItem `json:"active_users"`
ActiveGroups []ActiveGroupItem `json:"active_groups"`
}
type TypeDistItem struct {
Type int `json:"type"`
Label string `json:"label"`
Count int64 `json:"count"`
}
type DailyTrendItem struct {
Date string `json:"date"`
Count int64 `json:"count"`
}
type ActiveUserItem struct {
UserID int64 `json:"user_id"`
Nickname string `json:"nickname"`
Count int64 `json:"count"`
}
type ActiveGroupItem struct {
GroupID int64 `json:"group_id"`
Name string `json:"name"`
Count int64 `json:"count"`
}
```
---
## 十、技术要点
### 10.1 Go 缩略图生成
- 依赖`github.com/disintegration/imaging`
- 流程`imaging.Open(file)` `imaging.Resize(img, 200, 0, imaging.Lanczos)` `imaging.Encode(buf, thumb, imaging.JPEG, imaging.JPEGQuality(80))`
- 缩略图文件名原始 UUID + `_thumb` 后缀 `abc123_thumb.jpg`
- 原图同时进行 JPEG 转码如果不是 JPEG 格式
### 10.2 前端图片压缩
- H5 平台使用 Canvas 压缩创建 Canvas drawImage toBlob('image/jpeg', 0.8)
- 小程序/App 平台使用 `uni.compressImage({ src, quality: 80 })`
- 压缩策略宽度>1920px 等比缩放至 1920px质量 80%
### 10.3 语音录制
- uni-app RecorderManager API
- `start({ format: 'mp3', duration: 60000, sampleRate: 44100, numberOfChannels: 1 })`
- 监听 `onStop` 获取录音文件临时路径
- 时长计算:回调中的 `duration` 字段(毫秒),前端转秒显示
### 10.4 语音播放
- uni-app InnerAudioContext API
- `uni.createInnerAudioContext()``src = voiceUrl``play()`
- 全局单例:同一时间只允许一个语音播放
- 播放状态:空闲 → 加载中 → 播放中 → 播放完成
### 10.5 文件下载与预览
- 下载:`uni.downloadFile({ url })``uni.saveFile()` 或直接 `window.open(url)` (H5)
- 预览PDF 和图片通过 `uni.openDocument` 或浏览器新标签打开
- 文件类型图标映射根据扩展名匹配图标PDF/Word/Excel/PPT/ZIP/图片/音频/通用)
### 10.6 管理端 ECharts 集成
- `npm install echarts` 安装
- 使用 Vue 3 Composition API + `onMounted` 初始化
- 响应式:`window.resize``chart.resize()`
- 主题色与系统保持一致Primary #2563EB
---
## 十一、补充设计细节
### 11.1 消息内容安全
- 文件上传不做内容安全审查(留后续阶段)
- 管理端提供人工审查和撤回能力
- 上传文件类型不限制,但大小限制 50MB
### 11.2 多图布局规则
| 图片数量 | 布局 | 单图最大宽度 |
|----------|------|-------------|
| 1 张 | 自适应宽度(最大 500rpx | 500rpx |
| 2 张 | 2列1行 | 240rpx |
| 3 张 | 3列1行 | 160rpx |
| 4 张 | 2列2行 | 240rpx |
| 5-6 张 | 3列2行 | 160rpx |
| 7-9 张 | 3列3行 | 160rpx |
### 11.3 文件类型图标映射
| 扩展名 | 图标 | 颜色 |
|--------|------|------|
| .pdf | PDF 图标 | #E53E3E |
| .doc/.docx | Word 图标 | #2B6CB0 |
| .xls/.xlsx | Excel 图标 | #276749 |
| .ppt/.pptx | PPT 图标 | #C05621 |
| .zip/.rar/.7z | 压缩包图标 | #6B46C1 |
| .jpg/.png/.gif | 图片图标 | #38A169 |
| .mp3/.wav/.aac | 音频图标 | #D69E2E |
| 其他 | 通用文件图标 | #718096 |
### 11.4 语音波形条设计
- 宽度:按时长线性缩放,最小 120rpx1秒最大 500rpx60秒
- 高度:固定 60rpx
- 波形:使用 CSS 模拟随机高度的竖条5-6 个竖条)
- 播放时:从左到右逐条变色动画

View File

@@ -0,0 +1,435 @@
# Phase 2d 实施计划:消息类型扩展
> **状态:** ✅ 已完成
> **设计文档:** [Phase 2d 设计文档](./2026-03-04-phase2d-design.md)
> **分支:** `feature/phase2d-message-types`
> **最后更新:** 2026-03-03
---
## 实施概览
共 14 个 Task按依赖关系分为 4 个阶段:
| 阶段 | Task | 说明 |
|------|------|------|
| 后端基础层 | Task 1-4 | 上传增强 → DTO/常量 → IM 适配 → 管理端后端 |
| 前端消息组件 | Task 5-9 | 组件体系 → 图片 → 语音 → 文件 → 输入栏 |
| 管理端前端 | Task 10-12 | 列表页 → 统计页 → 路由/Store/API |
| 收尾 | Task 13-14 | 群聊适配+测试 → 代码审查+文档 |
---
## Task 1文件上传服务增强 ✅
**目标**:升级现有文件上传服务,支持 50MB 上传、图片缩略图生成、语音校验。
### 修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| backend/go-service/go.mod | 修改 | 添加 `github.com/disintegration/imaging` 依赖 |
| backend/go-service/app/file/service/file_service.go | 修改 | 新增 `UploadWithThumbnail``UploadVoice` 方法;`UploadResult` 扩展字段 |
| backend/go-service/app/file/controller/file_controller.go | 修改 | 新增 `UploadImage``UploadVoice` 处理器;`maxUploadSize` 提升至 50MB |
| backend/go-service/app/file/router.go | 修改 | 新增 `/upload/image``/upload/voice` 路由 |
### 详细步骤
1. `go get github.com/disintegration/imaging` 安装图片处理库
2. 扩展 `UploadResult` 添加 `ThumbnailURL``Width``Height``Duration``MimeType` 可选字段
3. 新增 `ImageUploadResult``VoiceUploadResult` 结构体
4. 实现 `UploadWithThumbnail`
- 接收图片文件 → 解码获取宽高 → `imaging.Resize(img, 200, 0)` 生成缩略图
- 缩略图转 JPEG(quality=80) → 上传原图+缩略图到 MinIO → 返回双 URL + 尺寸
5. 实现 `UploadVoice`
- 接收语音文件 → 校验扩展名(.mp3/.wav/.aac/.m4a→ 获取时长(从 header 或前端传参)
- 上传到 MinIO → 返回 URL + duration + size
6. Controller 新增 `UploadImage``UploadVoice` 处理器(含大小校验)
7. `maxUploadSize``10 << 20` 改为 `50 << 20`
8. 路由注册新接口
### 验收标准
- [x] `POST /api/v1/upload` 支持 50MB 文件
- [x] `POST /api/v1/upload/image` 返回 url + thumbnail_url + width + height
- [x] `POST /api/v1/upload/voice` 返回 url + duration
- [x] 缩略图宽度 200pxJPEG 格式
---
## Task 2消息 extra 结构定义 + DTO 扩展 + 常量启用 ✅
**目标**:定义 extra JSON 结构的 Go 类型、扩展消息 DTO、更新常量注释。
### 修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| backend/go-service/app/dto/im_dto.go | 修改 | SendMessageRequest + MessageDTO 增加 Extra 字段 |
| backend/go-service/app/dto/admin_dto.go | 修改 | 新增管理端消息相关 DTO |
| backend/go-service/app/constants/im.go | 修改 | 消息类型常量注释去掉"预留"标注 |
### 详细步骤
1. `SendMessageRequest` 增加 `Extra string` 字段
2. `MessageDTO` 增加 `Extra *string` 字段omitempty
3. `constants/im.go` 消息类型注释更新:去掉"预留"二字
4.`admin_dto.go` 中新增管理端消息 DTO 结构体
### 验收标准
- [x] SendMessageRequest 和 MessageDTO 支持 extra 字段
- [x] 管理端消息 DTO 定义完成
- [x] 常量注释准确反映当前实现状态
---
## Task 3IM Service 适配富媒体消息 ✅
**目标**:后端 IM 服务支持存储和推送富媒体消息。
### 修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| backend/go-service/app/im/service/im_service.go | 修改 | SendMessage 存储 extra预览文案生成 |
| backend/go-service/app/im/handler/event_handler.go | 修改 | im.message.send 解析 extra 字段 |
| backend/go-service/app/im/dao/message_dao.go | 修改 | MessageDTO 转换包含 extra |
### 详细步骤
1. `EventHandler``im.message.send` 解析 `req.Extra` 并传给 Service
2. `SendMessage` 中创建 Message 时设置 `Extra` 字段
3. 新增 `generateLastMsgPreview(msgType int, content string, extra *string) string` 方法
4. `UpdateLastMessage` 调用预览文案生成方法
5. `buildMessagePushData` 返回的 MessageDTO 包含 extra
6. 历史消息查询 `toMessageDTO` 中包含 extra 字段
### 验收标准
- [x] type=2/3/5 消息能正常存储到数据库extra 字段不为空
- [x] 推送 im.message.new 包含 extra 数据
- [x] 会话列表预览文案正确([图片]/[语音 12"]/[文件] xxx.pdf
- [x] 历史消息接口返回 extra 字段
---
## Task 4管理端消息 DAO + Service + Controller ✅
**目标**:实现管理端完整的消息管理后端 API。
### 新增文件
| 文件 | 操作 | 说明 |
|------|------|------|
| backend/go-service/app/admin/dao/message_manage_dao.go | 新增 | 消息分页查询、统计聚合 |
| backend/go-service/app/admin/service/message_manage_service.go | 新增 | 消息管理业务逻辑 |
| backend/go-service/app/admin/controller/message_manage_controller.go | 新增 | REST API 处理器 |
| backend/go-service/app/admin/router.go | 修改 | 注册消息管理路由 |
| backend/go-service/app/provider/provider.go | 修改 | Wire 注入新依赖 |
### 详细步骤
1. `message_manage_dao.go`
- `GetMessageList`:分页+多条件筛选keyword/type/sender/conversation/status/time
- `GetMessageByID`:单条详情
- `UpdateMessageStatus`:更新状态(撤回/删除)
- `GetMessageStats`:统计聚合(总量/今日/类型分布/每日趋势/活跃用户/活跃群组)
2. `message_manage_service.go`
- `GetMessageList` / `GetMessageDetail` / `DeleteMessage` / `RecallMessage` / `GetStats`
- 撤回时推送 WS 事件给相关在线用户
3. `message_manage_controller.go`:五个接口处理器
4. Router 注册路由
5. Wire provider 注册
### 验收标准
- [x] `GET /api/v1/admin/messages` 支持完整筛选
- [x] `GET /api/v1/admin/messages/:id` 返回详细信息
- [x] `DELETE /api/v1/admin/messages/:id` 软删除
- [x] `PUT /api/v1/admin/messages/:id/recall` 撤回+推送
- [x] `GET /api/v1/admin/messages/stats` 返回统计数据
---
## Task 5消息组件体系 + conversation 页改造 ✅
**目标**:建立消息类型组件体系,改造聊天页面按消息类型渲染不同组件。
### 新增/修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| frontend/src/components/msg/MsgText.vue | 新增 | 文本消息组件(从 conversation 抽取) |
| frontend/src/components/msg/MsgImage.vue | 新增 | 图片消息组件(网格+预览,初始骨架) |
| frontend/src/components/msg/MsgVoice.vue | 新增 | 语音消息组件(波形+播放,初始骨架) |
| frontend/src/components/msg/MsgFile.vue | 新增 | 文件消息组件(卡片+下载,初始骨架) |
| frontend/src/pages/chat/conversation.vue | 修改 | 引入组件体系,按 type 分支渲染 |
| frontend/src/pages/group/conversation.vue | 修改 | 同上 |
### 详细步骤
1. 从现有 conversation.vue 中提取文本消息渲染逻辑到 `MsgText.vue`
2. 创建 `MsgImage.vue`/`MsgVoice.vue`/`MsgFile.vue` 骨架组件(接收 msg prop显示占位
3. conversation.vue 消息列表区域改为根据 `msg.type` 使用 `<component :is="">` 动态组件
4. 确保文本消息渲染效果与改造前一致
### 验收标准
- [x] 文本消息渲染效果不变
- [x] 4 个消息组件均已创建并可接收 msg prop
- [x] conversation 页面按 type 分支渲染
---
## Task 6图片消息完整流程 ✅
**目标**:实现图片消息从选取到展示的完整流程。
### 新增/修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| frontend/src/api/file.js | 新增 | 文件上传 API 封装 |
| frontend/src/utils/file.js | 新增 | 文件工具函数 |
| frontend/src/components/msg/MsgImage.vue | 修改 | 完整图片网格+大图预览 |
| frontend/src/components/chat/ImagePreviewer.vue | 新增 | 全屏图片预览 |
| frontend/src/store/chat.js | 修改 | 新增 sendImageMessage |
### 详细步骤
1. `api/file.js`:封装 `uploadImage(file)``uploadFile(file)` API 调用
2. `utils/file.js`:图片压缩工具、文件大小格式化
3. `MsgImage.vue`:完整实现多图网格布局 + 点击调起 ImagePreviewer
4. `ImagePreviewer.vue`:全屏 Swiper 预览 + 左右滑 + 关闭
5. `chat.js``sendImageMessage(conversationId, imageFiles)` → 压缩 → 逐张上传 → 组装 extra → WS 发送
### 验收标准
- [x] 图片选取+压缩+上传+发送全流程通畅
- [x] 聊天界面正确展示图片缩略图(网格布局)
- [x] 点击图片可全屏大图预览
- [x] 多图2-9张布局正确
---
## Task 7语音消息完整流程 ✅
**目标**:实现语音消息录制、发送、展示、播放完整流程。
### 新增/修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| frontend/src/components/chat/VoiceRecorder.vue | 新增 | 语音录制组件 |
| frontend/src/components/msg/MsgVoice.vue | 修改 | 完整语音播放组件 |
| frontend/src/store/chat.js | 修改 | 新增 sendVoiceMessage |
### 详细步骤
1. `VoiceRecorder.vue`:长按录音 UI + 上滑取消 + 时长显示 + 波形动画
2. `MsgVoice.vue`:播放按钮 + 波形条 + 时长显示 + 播放进度动画
3. 全局单例播放器:同时只有一个语音在播放
4. `chat.js``sendVoiceMessage(conversationId, voiceTempPath, duration)` → 上传 → 发送
### 验收标准
- [x] 长按录音 + 松手发送 + 上滑取消
- [x] 录音时长 < 1s 提示太短
- [x] 录音时长 > 60s 自动停止
- [x] 聊天界面显示语音条 + 时长
- [x] 点击播放/暂停
- [x] 同一时间只有一个语音播放
---
## Task 8文件消息完整流程 ✅
**目标**:实现文件消息选取、上传、发送、展示、下载/预览完整流程。
### 新增/修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| frontend/src/components/msg/MsgFile.vue | 修改 | 完整文件卡片组件 |
| frontend/src/store/chat.js | 修改 | 新增 sendFileMessage |
| frontend/src/utils/file.js | 修改 | 文件类型图标映射 + 大小格式化 |
### 详细步骤
1. `MsgFile.vue`:文件图标 + 文件名 + 大小 + 下载/预览按钮
2. 文件类型图标映射PDF/Word/Excel/PPT/压缩包/图片/音频/通用)
3. 下载功能H5 用 `window.open`APP 用 `uni.downloadFile`
4. 预览功能PDF/图片支持在线预览
5. `chat.js``sendFileMessage(conversationId, file)` → 校验大小 → 上传 → 发送
### 验收标准
- [x] 文件选择 + 大小校验50MB+ 上传 + 发送
- [x] 聊天界面显示文件卡片(图标+名称+大小)
- [x] 点击下载文件
- [x] PDF/图片可在线预览
---
## Task 9输入栏改造 ✅
**目标**:改造聊天输入栏,新增"+"面板和麦克风按钮。
### 新增/修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| frontend/src/components/chat/MorePanel.vue | 新增 | "+"展开面板 |
| frontend/src/pages/chat/conversation.vue | 修改 | 输入栏集成"+"和麦克风 |
| frontend/src/pages/group/conversation.vue | 修改 | 同上 |
### 详细步骤
1. `MorePanel.vue`:网格布局面板,包含"图片"和"文件"两个入口
2. 输入栏右侧添加"+"按钮,点击展开/收起 MorePanel
3. 输入栏左侧添加麦克风按钮,点击切换为语音录制模式
4. 语音模式下隐藏文本输入框,显示 VoiceRecorder
5. 统一发送流程:文本/图片/语音/文件各走对应的 store 方法
### 验收标准
- [x] "+"按钮展开面板,包含图片和文件入口
- [x] 麦克风按钮切换语音录制模式
- [x] 各类型消息发送流程统一
- [x] 单聊和群聊输入栏行为一致
---
## Task 10管理端消息列表页 ✅
**目标**:实现管理端消息管理列表页面。
### 新增文件
| 文件 | 操作 | 说明 |
|------|------|------|
| admin/src/views/message/list.vue | 新增 | 消息列表页 |
| admin/src/api/message.js | 新增 | 消息管理 API |
### 详细步骤
1. 顶部筛选区:关键词搜索 + 类型下拉 + 发送者 + 时间范围 + 状态
2. 表格列ID / 发送者 / 类型 / 内容预览 / 状态 / 时间 / 操作
3. 操作列:查看详情 / 撤回 / 删除
4. 分页组件
5. 消息详情弹窗:展示完整内容 + extra 渲染(图片缩略图 / 语音播放 / 文件链接)
### 验收标准
- [x] 完整筛选功能
- [x] 分页正确
- [x] 撤回和删除操作正常
- [x] 消息详情弹窗内容完整
---
## Task 11管理端消息统计页 ✅
**目标**:实现管理端消息统计仪表板。
### 新增文件
| 文件 | 操作 | 说明 |
|------|------|------|
| admin/src/views/message/stats.vue | 新增 | 消息统计仪表板 |
### 详细步骤
1. 顶部统计卡片:总消息数 + 今日消息数
2. 消息趋势折线图(近 7/30 天切换)
3. 消息类型分布饼图
4. 活跃用户排行水平柱状图Top 10
5. 活跃群组排行水平柱状图Top 10
6. 图表主题色与系统一致Primary #2563EB
### 验收标准
- [x] 4 个统计图表正确渲染
- [x] 7/30 天切换正常
- [x] 数据与 stats API 返回一致
- [x] 响应式布局
---
## Task 12管理端路由 + Store + API ✅
**目标**:管理端消息管理模块基础设施。
### 修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| admin/src/router/index.js | 修改 | 注册消息管理路由 |
| admin/src/api/message.js | 修改 | 完善 API 封装(如未在 Task 10 完成) |
### 详细步骤
1. 路由配置:`/message/list` + `/message/stats`
2. 侧边栏菜单:新增"消息管理"分组
3. API 封装:确保所有管理端消息 API 已封装
### 验收标准
- [x] 侧边栏正确显示消息管理菜单
- [x] 路由跳转正常
- [x] API 封装完整
---
## Task 13群聊适配 + 统一测试 ✅
**目标**:确保群聊页面与单聊页面的富媒体消息功能一致,统一测试。
### 修改文件
| 文件 | 操作 | 说明 |
|------|------|------|
| frontend/src/pages/group/conversation.vue | 修改 | 确认组件集成完整 |
### 详细步骤
1. 群聊 conversation.vue 确认所有消息组件和输入栏改造与单聊一致
2. 测试单聊图片/语音/文件消息发送接收
3. 测试群聊图片/语音/文件消息发送接收
4. 测试会话列表预览文案
5. 测试管理端消息列表和统计
6. 修复发现的问题
### 验收标准
- [x] 单聊+群聊富媒体消息全流程正常
- [x] 会话列表预览文案正确
- [x] 管理端功能正常
---
## Task 14代码审查 + Playwright 测试 + 文档更新 ✅
**目标**:最终质量保障和文档同步。
### 详细步骤
1. 使用 `code-reviewer` 子代理进行代码审查
2. 使用 Playwright MCP 进行浏览器自动化测试
3. 修复审查和测试中发现的问题
4. 更新项目文档:
- `docs/progress/CURRENT_STATUS.md`
- `docs/plans/2026-03-04-phase2d-design.md`(状态更新)
- `docs/plans/2026-03-04-phase2d-implementation.plan.md`(状态更新)
- `docs/api/frontend/im.md`(新增上传 API
- `docs/api/admin/message.md`(新增管理端消息 API 文档)
- `docs/architecture/system-architecture.md`(更新模块描述)
- `.cursor/rules/project-context.mdc`(更新进度)
5. Git commit + push
### 验收标准
- [x] 代码审查通过
- [x] Playwright 测试通过
- [x] 所有文档同步更新

View File

@@ -1,10 +1,49 @@
# EchoChat 项目开发进度 # EchoChat 项目开发进度
> **最后更新**2026-03-04Phase 2c 浏览器测试 + UI/UX 优化 + Tab 切换刷新修复完成 > **最后更新**2026-04-20Phase 2d 富媒体消息缺陷修复Playwright 全流程验证通过
> **当前阶段**Phase 2c 全部完成(含 Playwright 浏览器测试 + 21 项用户反馈修复 > **当前阶段**Phase 2d 全部完成 + Bug 修复 4 项(图片上传端口/MinIO 策略/MsgImage 布局/文件名保留
> **当前分支**`feature/phase2c-group-read-receipt` > **当前分支**`feature/phase2d-message-types`
> **实施计划**`docs/plans/2026-03-04-phase2c-implementation.plan.md` > **实施计划**`docs/plans/2026-03-04-phase2d-implementation.plan.md`
> **设计文档**`docs/plans/2026-03-04-phase2c-design.md` > **设计文档**`docs/plans/2026-03-04-phase2d-design.md`
> **本次修复报告**`test-report-phase2d-bugfix.md`
---
## 🔧 2026-04-20 Bug 修复清单
| # | 根因 | 修复 | 文件 |
|---|---|---|---|
| B1 | 文件上传 BASE_URL 硬编码为 `:8080`(与实际 `:8085` 不符)导致 `ERR_CONNECTION_REFUSED` | 改为复用 `@/utils/request` 中的统一 BASE_URL | `frontend/src/api/file.js` |
| B2 | MinIO bucket 默认 private图片 URL 匿名访问返回 403 | 启动时自动设置 bucket public-read 策略(仅 `s3:GetObject` | `backend/go-service/pkg/storage/minio.go` |
| B3 | MsgImage flex 布局塌陷,`<uni-image>` 宽度为 0 | `.grid-single/2col/3col` 增加显式宽高和 `display:block` | `frontend/src/components/msg/MsgImage.vue` |
| B4 | H5 下 `URL.createObjectURL(file)` 丢失文件名,显示为 `file-1776xxx` | 前端发送消息时优先使用用户选择的 `file.name` | `frontend/src/pages/{chat,group}/conversation.vue` |
**验证结果**Playwright MCP 全流程通过(图片/文件上传、缩略图渲染、大图预览、管理端消息详情)。详见 `test-report-phase2d-bugfix.md`
---
## 🛠️ 2026-04-20 工程化脚本改造(开发者体验)
引入社区通用的 **setup / start 职责分离** 模式(参考 Rails `bin/setup` + `bin/dev`、Django 模板、Next.js 企业模板):
| 脚本 | 定位 | 使用频率 |
|---|---|---|
| `scripts/dev-setup.sh` | **首次环境初始化**Docker 检查 + 容器拉起 + 重试式健康检查pg/redis/minio| 首次 clone / 重建卷 |
| `scripts/start.sh` | **日常启动**Docker 中间件 + Go 后端 + 前台 + 管理端全量拉起,端口占用自动跳过 | 每天多次 |
| `scripts/stop.sh` | **日常停止**:优雅终止应用层(先 TERM 后 KILL 兜底),默认保留容器,支持 `--all` 全关 | 每天多次 |
| `scripts/status.sh` | **状态查看**:三应用端口 + 三容器状态一览 | 排障随时 |
核心特性:
- **端口占用自动跳过**`lsof` 检测,已占用则 WARN 跳过,不重复启动
- **PID + 日志分离**PID 写入 `.run/*.pid`stdout 写入 `.run/logs/*.log`(已加入 `.gitignore`
- **MinIO 健康等待**`dev-setup.sh` 新增 `/minio/health/live` 重试检查,补齐原脚本遗漏
- **单项启停**`./scripts/start.sh backend|frontend|admin|docker`
涉及文件:
- 新增 `scripts/start.sh``scripts/stop.sh``scripts/status.sh`
- 改造 `scripts/dev-setup.sh`(新增 MinIO 检查 + 头部使用时机注释)
- 更新 `README.md`(置顶一键脚本章节,阐述首次/日常使用顺序)
- 更新 `.gitignore`(忽略 `.run/`
--- ---
@@ -197,8 +236,20 @@ EchoChat/
│ │ ├── join-requests.vue # 入群审批 │ │ ├── join-requests.vue # 入群审批
│ │ └── search.vue # 搜索群聊 │ │ └── search.vue # 搜索群聊
│ ├── pages/contact/ # [Phase 2a] 6 个页面 │ ├── pages/contact/ # [Phase 2a] 6 个页面
│ ├── components/msg/ # [Phase 2d] 消息类型组件
│ │ ├── MsgText.vue # 文本消息
│ │ ├── MsgImage.vue # 图片消息(网格+预览)
│ │ ├── MsgVoice.vue # 语音消息(播放+波形)
│ │ └── MsgFile.vue # 文件消息(卡片+下载)
│ ├── components/chat/ # [Phase 2d] 聊天辅助组件
│ │ ├── MorePanel.vue # "+"展开面板
│ │ └── VoiceRecorder.vue # 语音录制
│ └── components/CustomTabBar.vue含 badge │ └── components/CustomTabBar.vue含 badge
├── admin/ # 管理端Vue 3 + Element Plus ├── admin/ # 管理端Vue 3 + Element Plus
│ └── src/views/
│ ├── message/ # [Phase 2d] 消息管理
│ │ ├── list.vue # 消息列表(多条件筛选+操作)
│ │ └── stats.vue # 消息统计ECharts 仪表板)
├── deploy/ ├── deploy/
├── design-system/ ├── design-system/
└── docs/ └── docs/
@@ -387,8 +438,96 @@ kill $(lsof -ti :8085) 2>/dev/null; sleep 2; cd backend/go-service && go run cmd
- `im_conversation_members` — 扩展字段role, nickname, is_muted, is_do_not_disturb, joined_at, at_me_count - `im_conversation_members` — 扩展字段role, nickname, is_muted, is_do_not_disturb, joined_at, at_me_count
- `im_messages` — 扩展字段at_user_ids BIGINT[] - `im_messages` — 扩展字段at_user_ids BIGINT[]
---
## 九、Phase 2d — 消息类型扩展
> **状态:** ✅ 已完成
> **设计文档:** `docs/plans/2026-03-04-phase2d-design.md`
> **实施计划:** `docs/plans/2026-03-04-phase2d-implementation.plan.md`
> **分支:** `feature/phase2d-message-types`
### 功能范围
| 模块 | 内容 |
|------|------|
| 文件上传增强 | 50MB 上传上限、图片缩略图200px JPEG、语音校验mp3/wav/aac/m4a, 最长 60s |
| 富媒体消息 | 图片(多图网格 + 大图预览)、语音(录制+播放+波形)、文件(卡片+下载+预览) |
| IM Service | extra JSON 存储、会话列表预览文案([图片x3]/[语音 12"]/[文件] xxx.pdf |
| 前端组件 | MsgText/MsgImage/MsgVoice/MsgFile + MorePanel + VoiceRecorder |
| 管理端 | 消息列表(多条件筛选+撤回+删除+详情)+ 消息统计仪表板ECharts 四图表) |
### Task 完成状态
| Task | 描述 | 状态 |
|------|------|------|
| Task 1 | 文件上传服务增强50MB + 缩略图 + 语音校验) | ✅ 完成 |
| Task 2 | 消息 extra 结构定义 + DTO 扩展 + 常量启用 | ✅ 完成 |
| Task 3 | IM Service 适配富媒体消息 | ✅ 完成 |
| Task 4 | 管理端消息 DAO + Service + Controller | ✅ 完成 |
| Task 5 | 消息组件体系 + conversation 页改造 | ✅ 完成 |
| Task 6 | 图片消息完整流程 | ✅ 完成 |
| Task 7 | 语音消息完整流程 | ✅ 完成 |
| Task 8 | 文件消息完整流程 | ✅ 完成 |
| Task 9 | 输入栏改造 | ✅ 完成 |
| Task 10 | 管理端消息列表页 | ✅ 完成 |
| Task 11 | 管理端消息统计页 | ✅ 完成 |
| Task 12 | 管理端路由 + Store + API | ✅ 完成 |
| Task 13 | 群聊适配 + 编译验证 | ✅ 完成 |
| Task 14 | 代码审查 + 文档更新 | ✅ 完成 |
| 代码审查修复 | C1: im_groups 表名修复 + C2: 管理端撤回 WS 推送补全 | ✅ 完成 |
### 后端新增/修改
#### 文件上传 API
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /api/v1/upload/image | 图片上传(含缩略图生成) |
| POST | /api/v1/upload/voice | 语音上传(含时长校验) |
#### 管理端消息 API
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | /api/v1/admin/messages | 消息列表(分页+多条件筛选) |
| GET | /api/v1/admin/messages/:id | 消息详情 |
| DELETE | /api/v1/admin/messages/:id | 删除消息(软删除) |
| PUT | /api/v1/admin/messages/:id/recall | 撤回消息(+WS 推送) |
| GET | /api/v1/admin/messages/stats | 消息统计 |
### 前端新增组件
| 组件 | 路径 | 功能 |
|------|------|------|
| MsgText.vue | components/msg/ | 文本消息渲染 |
| MsgImage.vue | components/msg/ | 图片网格 + 大图预览 |
| MsgVoice.vue | components/msg/ | 语音播放 + 波形 + 时长 |
| MsgFile.vue | components/msg/ | 文件卡片 + 下载 + 预览 |
| MorePanel.vue | components/chat/ | "+"展开面板 |
| VoiceRecorder.vue | components/chat/ | 长按录音 |
### 管理端新增页面
| 页面 | 路径 | 功能 |
|------|------|------|
| 消息列表 | views/message/list.vue | 多条件筛选 + 操作 + 详情弹窗 |
| 消息统计 | views/message/stats.vue | 趋势折线图 + 类型饼图 + 活跃排行 |
### Playwright 端到端测试2026-04-17
| 测试项 | 结果 | 说明 |
|------|------|------|
| 前台单聊输入栏改造 | ✅ 通过 | 语音切换 + MorePanel 展开正常 |
| 前台群聊输入栏改造 | ✅ 通过 | 与单聊一致的改造结构 |
| 管理端消息列表展示 | ✅ 通过 | 表格、分页、操作按钮正常 |
| 管理端筛选功能 | ✅ 通过 | 关键词/类型/发送者ID/重置全部正常 |
| 管理端撤回/删除操作 | ✅ 通过 | 确认弹窗 + 状态变更 + 按钮联动正常 |
| 管理端消息详情弹窗 | ✅ 通过 | 发送者信息 + 元数据 + 内容展示正常 |
| 管理端消息统计图表 | ✅ 通过 | ECharts 线图/饼图/条形图渲染正常 |
> 详细报告:`test-report-phase2d.md`
### 留待后续阶段 ### 留待后续阶段
- 消息类型扩展(图片/语音/文件)
- 管理端消息管理功能
- 群头像上传 UI 完善 - 群头像上传 UI 完善
- 消息转发功能
- 视频消息支持

View File

@@ -1,55 +1,85 @@
/** /**
* 文件上传模块 API * 文件上传 API 封装
* 提供通用上传、图片上传(含缩略图)、语音上传接口
* *
* 对应后端路由POST /api/v1/upload * BASE_URL 复用 @/utils/request 中的统一配置,保证与业务接口一致
* 使用 uni.uploadFile 上传文件到 MinIO * 开发环境http://{hostname}:8085生产环境相对路径由 Nginx 反代)
*/ */
import { useUserStore } from '@/store/user'
import { BASE_URL } from '@/utils/request' import { BASE_URL } from '@/utils/request'
import { getToken } from '@/utils/storage'
/** /**
* 上传文件 * 通用文件上传(最大 50MB
* @param {string} filePath - 本地文件路径(如从 uni.chooseImage 获取) * @param {string} filePath 本地文件临时路径
* @returns {Promise<Object>} 返回 { url: '...' } * @param {string} [fileName] 文件名
* @returns {Promise<{ url, file_name, size }>}
*/ */
const uploadFile = (filePath) => { export function uploadFile(filePath, fileName) {
return _doUpload('/api/v1/upload', filePath, fileName)
}
/**
* 图片上传(自动生成缩略图,最大 20MB
* @param {string} filePath 本地图片临时路径
* @param {string} [fileName] 文件名
* @returns {Promise<{ url, thumbnail_url, file_name, size, width, height, mime_type }>}
*/
export function uploadImage(filePath, fileName) {
return _doUpload('/api/v1/upload/image', filePath, fileName)
}
/**
* 语音上传(最大 5MB
* @param {string} filePath 本地语音文件临时路径
* @param {number} duration 语音时长(秒)
* @param {string} [fileName] 文件名
* @returns {Promise<{ url, file_name, size, duration, mime_type }>}
*/
export function uploadVoice(filePath, duration, fileName) {
return _doUpload('/api/v1/upload/voice', filePath, fileName, { duration: String(duration) })
}
/**
* 内部上传方法
*/
function _doUpload(apiPath, filePath, fileName, extraFormData = {}) {
const userStore = useUserStore()
const token = userStore.token
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const token = getToken()
uni.uploadFile({ uni.uploadFile({
url: `${BASE_URL}/api/v1/upload`, url: `${BASE_URL}${apiPath}`,
filePath, filePath,
name: 'file', name: 'file',
formData: {
...extraFormData,
...(fileName ? { file_name: fileName } : {})
},
header: { header: {
Authorization: token ? `Bearer ${token}` : '' Authorization: token ? `Bearer ${token}` : ''
}, },
success: (res) => { success: (res) => {
if (res.statusCode === 200) {
try { try {
const data = JSON.parse(res.data) const result = typeof res.data === 'string' ? JSON.parse(res.data) : res.data
if (data.code === 0) { if (result.code === 0) {
resolve(data) resolve(result.data)
} else { } else {
uni.showToast({ title: data.message || '上传失败', icon: 'none' }) reject(new Error(result.message || '上传失败'))
reject(data)
} }
} catch { } catch (e) {
uni.showToast({ title: '响应解析失败', icon: 'none' }) reject(new Error('解析上传结果失败'))
reject({ code: -1, message: '响应解析失败' })
}
} else {
uni.showToast({ title: '上传失败', icon: 'none' })
reject({ code: res.statusCode, message: '上传失败' })
} }
}, },
fail: (err) => { fail: (err) => {
uni.showToast({ title: '网络异常', icon: 'none' }) reject(new Error(err.errMsg || '网络错误'))
reject({ code: -1, message: err.errMsg || '网络异常' })
} }
}) })
}) })
} }
export default { export default {
uploadFile uploadFile,
uploadImage,
uploadVoice
} }

Some files were not shown because too many files have changed in this diff Show More