Commit Graph

5101 Commits (f5656c8a2f5ac31ef3d0eba75c17b109c36c01f2)

Author SHA1 Message Date
YunaiV 115e0482db feat(im): 优化 ConversationItem.vue 增加相关评审 2026-04-27 08:22:14 +08:00
YunaiV a1a9053aaa feat(im): 优化 MessagePage.vue 页面,对齐微信交互 2026-04-27 00:51:31 +08:00
YunaiV 1a0c11f685 feat(im): 优化 MessagePage.vue 页面,对齐微信交互 2026-04-27 00:51:15 +08:00
YunaiV e1b52be8ea feat(im): 新增 MessagePage.vue 页面 + 部分 review 2026-04-27 00:01:43 +08:00
YunaiV 8790d6b128 feat(im): 优化 ToolBar.vue 组件
- tabs / goTab / goProfile 从 path 切到路由 name:path 后期容易随前缀调整变动,name 更稳定
- isActive 由 path 前缀比对简化为 route.name 全等比对(IM 三 Tab 无嵌套子路由,足够)
- 群聊图标 svg-icon:peoples → ant-design:team:三人组合跟 ep:user(单人)视觉区分更明显
- 给 goTab / goProfile 补 JSDoc;清理 5 个 TODO @AI
2026-04-26 23:45:27 +08:00
YunaiV 3a77001b42 🐛 fix(im): 修复主壳初始化期间消息漏拉 / 缓冲回放失效
三处时序竞态修复:
- loading=true 提前到 connect 前,避免 WS 早于 pullOnce 推进 maxId 漏拉断线积压
- loading=false 提到 flushBuffer 前,让回放走正常 insertMessage 而非被 push 回 buffer
- 加 bootstrapped 守卫,避免 isConnected watcher 在 friend/group 加载完前抢跑

附带:主壳文件名 Index.vue → index.vue 对齐其他模块小写惯例;清理 5 个 TODO @AI。
2026-04-26 23:32:55 +08:00
YunaiV 8a7991261f 🐛 fix(im): 主动断开 WS 后不再自动重连,同步复位 isConnected
disconnect() 之前调用 socket.close() 是异步触发 onclose,回调里会
无条件走 reconnect,导致离开 IM 主壳后 3 秒又会在后台重新打开 WebSocket。
修复:
- close 前先解绑 onclose / onerror handler,主动关闭路径不再走自动重连
- onclose 已被解绑后没人帮我们设 isConnected=false,disconnect 内手动复位,
  避免 socket=null 但 isConnected=true 的状态不一致
2026-04-26 23:08:23 +08:00
YunaiV 1e02a40ec4 feat(im): 添加 IM 聊天模块的全屏容器组件,并添加相关 review 注释 2026-04-26 22:02:02 +08:00
YunaiV 9570f25cdc feat(im): 优化 ToolBar.vue 组件 2026-04-26 21:51:09 +08:00
YunaiV d37af6d959 feat(im): 优化 PagedScroller.vue 组件 2026-04-26 21:46:13 +08:00
YunaiV 802a10cf85 feat(im): 优化 ResizableAside.vue 组件 2026-04-26 21:35:27 +08:00
YunaiV a973406b2a feat(im): 优化 ContextMenu.vue 组件 2026-04-26 20:19:19 +08:00
YunaiV 43771b0f47 feat(im): 优化 EmojiPicker.vue 组件 2026-04-26 19:49:44 +08:00
YunaiV 20c6631e7a feat(im): 新增 UserInfoCard.vue 2026-04-26 19:08:02 +08:00
YunaiV 9a4e79e4ef 🐛 fix(im): conversation.messages 入 IDB 前用 toRaw 解 Proxy,否则 structuredClone 抛 DataCloneError 静默丢消息 2026-04-26 17:57:50 +08:00
YunaiV f1d44c8267 feat(im): 优化 UserAvatar.vue 通用用户头像组件 2026-04-26 17:52:32 +08:00
YunaiV 969d8237ce feat(im): 增加 UserAvatar.vue 通用用户头像组件 2026-04-26 17:32:47 +08:00
YunaiV f929ebc184 feat(im): 增加 conversationStore.ts 未来的优化 todo; 2026-04-26 16:13:58 +08:00
YunaiV 2c1ff59286 feat(im): 初始化 useMessageSender.ts 2026-04-26 15:56:24 +08:00
YunaiV e573462cb7 feat(im): 增加 useMessagePuller 用于首次消息的拉取 2026-04-26 10:38:14 +08:00
YunaiV 8c1f17f5a6 🐛 fix(im): 私聊已读消费端卡 maxReadId + 上报 messageId 与后端对齐
handlePrivateReceipt 收到对方 RECEIPT 时丢弃了后端编码在 DTO id 字段
的 maxReadId,applyReadReceipt 把会话里所有 selfSend 未撤回消息一刀切
标 READ;回执在路上时刚发的消息会被误标已读。
- applyReadReceipt 的 markPrivateRead 改为 privateReadMaxId,按
  id <= maxReadId 卡边界,超过 maxReadId 的自发消息保留原状态;
- handlePrivateReceipt 透传 websocketMessage.id 作为 privateReadMaxId;
- apiReadPrivateMessages 增加 messageId 形参,与后端新接口对齐;
- websocketStore 私聊自动已读用刚到的消息 id;useMessageSender.readActive
  把私聊 / 群聊的 maxMessageId 计算合并到调用前。
2026-04-26 09:46:09 +08:00
YunaiV a35698fc07 🐛 fix(im): 群聊离线拉取看不到撤回提示,pull 路径接入 recallMessage
pullByType 之前对 RECALL 信号一律 skip、只靠原消息 status=RECALL 走 OR 兜底渲染。
当 pull 的 minId 卡在原消息处、回拉只返回信号时,本地缓存里的老消息没人翻成
RECALL,会一直停在原态——配合后端群聊 mapper 过滤掉 status=RECALL 的原消息,群聊
离线撤回完全不可见。

改成 pull / WS 走同一套 dispatch:
- pullByType 信号转 conversationStore.recallMessage(),跟 WS 路径一致
- recallMessage 把 parseRecallMessageId 收敛进内部,第 3 个参数从
  messageId: number 改成 recallSignalContent: string,4 个调用点都缩成一行
- MessageItem.isRecall 只判 type=RECALL,去掉 status=RECALL OR 分支
  (conversationStore 里跳未读 / 跳已读那两处对 status 的判断是业务逻辑保留)
2026-04-26 00:28:43 +08:00
YunaiV 66514fc597 ♻️ refactor(im): conversationStore 存储改为 IndexedDB 按会话分桶 + 命名统一
- 持久化迁到 localforage(IndexedDB),meta 索引与单会话 messages 分 key 存,消除写放大
- saveConversations 支持 不传 / 单个 / 数组 三种粒度;签名改为 sync void(fire-and-forget)
- 修复 sortConversations 仅刷 meta 不刷 messages 导致离线消息重启丢失的 bug
- 方法重命名:saveToStorage→saveConversations、updateMessageState→ackMessage、applyRecall→recallMessage、refreshConversations→sortConversations、removeLocalMessage→removeMessage、_removeMessagesStorage→removeConversationMessages
- 删除 dead field Conversation.lastReadCount;TIP_TIME clientMessageId 改用 uuid
2026-04-25 22:52:00 +08:00
YunaiV 2785e2bea6 feat(im): 重构优化 store 方案 2026-04-25 16:45:31 +08:00
YunaiV e30e30ea51 🐛 fix(im): 撤回信号错用 TIP_TEXT,应为 RECALL 2026-04-25 11:42:34 +08:00
YunaiV 505b3b5953 feat(im): 重构部分老代码。 2026-04-24 22:55:58 +08:00
YunaiV a28694074e 🔧 chore(deps): 添加 localforage 依赖:https://localforage.docschina.org/ 2026-04-24 22:12:54 +08:00
YunaiV d6f96a56a2 feat(im): 优化 ConversationItem.vue 逻辑 2026-04-24 21:54:20 +08:00
YunaiV 68d3ad10d4 feat(im): 优化 im 前端的工具类 2026-04-24 21:36:09 +08:00
YunaiV 5f16cd74e0 feat(im): 优化 im 前端的枚举类 2026-04-24 00:50:09 +08:00
YunaiV 6664afb851 ♻️ refactor(im): 重命名 IM 模块中的多个类和文件以简化结构 2026-04-23 20:38:27 +08:00
YunaiV 6d6515c06d ♻️ refactor(im): 用户查询接口迁移到 system/user
- /api/im/user:移除 getSelfInfo/getUserListByName,改用 /system/user/get-simple、/system/user/list-by-nickname
- AddFriendDialog:切换为 getSimpleUserListByNickname,去掉已废弃的 userName 展示
2026-04-23 01:36:45 +08:00
YunaiV 76be404c69 🎨 style(Message): 修复铃铛对齐问题,调整样式为 flex-center 2026-04-19 00:30:34 +08:00
YunaiV 9fb796194e feat(im): 前端的 IM 增加 Layout 整体布局 2026-04-19 00:30:07 +08:00
YunaiV 064b657294 (〃'▽'〃)_v2026_03_发布:新增 MES 制造执行系统,IoT 接入 Modbus 协议 2026-04-18 13:29:43 +08:00
YunaiV bc9c67ad3b (〃'▽'〃)_v2026_03_发布:新增 MES 制造执行系统,IoT 接入 Modbus 协议 2026-04-18 13:25:10 +08:00
YunaiV bf81e6f617 Merge branch 'feat/mes' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 2026-04-18 13:23:29 +08:00
YunaiV a839dd6fa5 feat(mes): 更新 MES 状态常量和相关枚举
将 MES 设备维护记录状态枚举中的状态值更新为常量引用,增强代码可读性和一致性。同时,新增 MES 单据状态常量,简化状态管理。
2026-04-17 22:10:14 +08:00
YunaiV 0a96738cfb feat(mes): 更新 MES 状态常量和相关枚举
将 MES 设备维护记录状态枚举中的状态值更新为常量引用,增强代码可读性和一致性。同时,新增 MES 单据状态常量,简化状态管理。
2026-04-16 19:27:01 +08:00
YunaiV 378965d82f 🎨 style(mes): 优化模板格式和属性排列 2026-04-15 19:22:14 +08:00
YunaiV 05f43f91ab feat(mes): 添加计量单位名称到生产任务响应对象 2026-04-15 14:29:24 +08:00
YunaiV c63a5f87a4 ♻️ refactor(mes): 重构 approveFeedback 方法,移除用户 ID 参数
简化 approveFeedback 方法,移除不必要的用户 ID 参数,改为使用表单保存的报工人和时间。此变更提高了代码的可读性和维护性,同时确保审批状态更新逻辑的清晰性。
2026-04-14 13:53:42 +08:00
YunaiV 76b2d5caf3 Merge branch 'feat/mes' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 2026-04-13 22:42:48 +08:00
YunaiV d63d4eee27 feat:增加 iot 模块 2026-04-13 22:42:37 +08:00
YunaiV cd300bded7 ♻️ refactor(mes): 修改字段名称以提高代码可读性 2026-04-13 19:57:35 +08:00
YunaiV befc4dc95e feat(docs):优化 permalink 2026-04-12 23:30:11 +08:00
YunaiV 3c5670141e feat:增加 iot 模块 2026-04-12 21:06:45 +08:00
YunaiV d6f8fb7b55 ♻️ refactor(mes): 修正质检缺陷记录删除权限 2026-04-12 20:38:01 +08:00
YunaiV ea50b843dc feat(mes):增加 mes 模块 2026-04-12 16:40:47 +08:00
YunaiV 75ed43b123 Merge branch 'feat/mes' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 2026-04-12 16:33:36 +08:00