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
|
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
|
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
|
9fb796194e
|
✨ feat(im): 前端的 IM 增加 Layout 整体布局
|
2026-04-19 00:30:07 +08:00 |