Commit Graph

5109 Commits (52fdf0bcab20d19504ac2893bead7075a0c9744f)

Author SHA1 Message Date
YunaiV 52fdf0bcab feat(im): 消息右键菜单优化 + 修复图片场景滚不到底
- MessageItem:「回复」→「引用」并加图标;撤回 / 删除互斥(自己消息 2 分钟内显示撤回,超出 / 对方消息显示删除),均加分割线 + 红色样式对齐微信;MENU_KEYS 抽 const 防 typo;引用块从气泡上方移到下方,selfSend 时竖线镜像到右侧
- MessagePanel:scrollToBottom 改 async + waitMediaSettled 等图片 / 视频元数据加载;用 expectedScrollTop drift 替代 distanceFromBottom,修复「图片加载完底部上移、误判用户已滚走」导致到不了底
- ReplyPreview:删等价的 filePayload / voicePayload alias,直接复用 parsedPayload
- uiStore:ContextMenuItem 加 icon? 字段,支持菜单项前置图标
2026-05-01 23:04:56 +08:00
YunaiV 43666dc56c feat(im): 优化【消息引用】的功能,增加文件、图片的展示调整 2026-05-01 19:05:57 +08:00
YunaiV ef901b5381 feat(im): 优化【消息引用】的功能,来自第二波 code review,解决安全性问题 2026-05-01 18:20:04 +08:00
YunaiV cfeee7bbb7 feat(im): 优化【消息引用】的功能,来自第一波 code review 2026-05-01 18:09:02 +08:00
YunaiV 1dfab43b8a feat(im): 增加【消息引用】的功能 2026-05-01 18:03:05 +08:00
YunaiV 744229a02e feat(im): 优化语音输入的交互。 2026-05-01 09:59:27 +08:00
YunaiV 63c711f9e2 feat(im): 增加视频消息 2026-05-01 09:47:01 +08:00
YunaiV 82022b86de feat(im): 实现 im 的首页统计 2026-05-01 09:25:39 +08:00
YunaiV f5656c8a2f feat(im): 同步输入框状态以支持粘贴功能 2026-05-01 08:50:51 +08:00
YunaiV 31dc1b1198 feat(im): 用户的输入,改成 userselectv2,增强体验。 2026-05-01 08:49:14 +08:00
YunaiV 3cc7ac7f8b Merge branch 'master' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into im
# Conflicts:
#	pnpm-lock.yaml
#	src/router/modules/remaining.ts
#	src/utils/dict.ts
2026-05-01 08:22:54 +08:00
YunaiV 7ed6fa5579 feat(im): 增加群管理的完善 2026-05-01 08:19:13 +08:00
YunaiV 8564788b11 feat(im): 对齐微信的图标展示 2026-05-01 08:17:24 +08:00
YunaiV 92b1466597 feat(im): 增加群管理的 code review 2026-05-01 07:52:31 +08:00
YunaiV 238862b572 feat(im): 增加发送草稿,切换对话的时候,不丢失。对齐微信 2026-05-01 07:52:18 +08:00
YunaiV be654bce50 feat(im): 增加私聊消息的管理 2026-05-01 07:46:19 +08:00
YunaiV d64a695673 feat(im): 增加群聊消息的管理 2026-05-01 07:08:05 +08:00
YunaiV dfbae06afa feat(im): 优化输入框的样式 2026-05-01 06:59:14 +08:00
YunaiV 384a0c134a feat(im): 完成敏感词的管理 2026-04-30 22:25:25 +08:00
YunaiV 9f1fc9ef78 reviewed 2026-04-30 21:38:17 +08:00
YunaiV fd1ba30bdb feat(im): 优化好友列表的管理 2026-04-30 21:09:03 +08:00
YunaiV 01fff53aaf feat(im): 增加 im 的管理界面 2026-04-30 19:04:31 +08:00
YunaiV 4b4c4fab11 feat(im): 优化群聊的功能界面 2026-04-30 16:59:56 +08:00
YunaiV 368b385267 feat(im): 增加群邀请的功能 2026-04-30 15:47:32 +08:00
YunaiV 0ab8b292f2 feat(im): 增加 pinyin 功能 2026-04-30 15:22:35 +08:00
YunaiV d19bdd42d5 feat(im): 优化添加好友界面 2026-04-30 14:53:41 +08:00
YunaiV 0c7d1f0df6 feat(im): 新增通讯录界面 2026-04-30 14:07:03 +08:00
YunaiV a762dfff84 feat(im): 优化整体包结构,将 friend、group 通用组件抽过去。 2026-04-30 10:11:20 +08:00
YunaiV 4b64153044 feat(im): 完善 friend、group 相关的本地存储(疯狂优化) 2026-04-29 22:03:54 +08:00
YunaiV e90f9e5237 feat(im): 增加 friend、group 相关的本地存储 2026-04-29 15:50:49 +08:00
YunaiV de39bc7fc1 feat(im): 优化代码,移除 message 里的 name 存储,避免更新困难。(为 friend、group 独立存储做准备) 2026-04-28 23:32:40 +08:00
YunaiV f0fc144e8a feat(im): 调整代码结构,优化 side 样式 2026-04-28 20:14:24 +08:00
YunaiV 431a0bfb93 feat(im): 调整代码结构,优化 side 样式 2026-04-28 20:13:01 +08:00
YunaiV ba34e4adc0 feat(im): 优化整体 message 包结构 2026-04-28 09:30:12 +08:00
YunaiV 29a03ef03d feat(im): 优化整体 message 包结构 2026-04-28 09:29:40 +08:00
YunaiV 122b1ba748 feat(im): 优化 message 的导入 2026-04-28 08:48:38 +08:00
YunaiV 56b0630847 feat(im): 优化 icon 的导入 2026-04-28 08:15:29 +08:00
YunaiV 6ead932813 feat(im): 优化 icon 的导入 2026-04-28 08:15:10 +08:00
YunaiV 9fc10b304c feat(im): 增加 ChatPanel.vue 组件 2026-04-28 01:15:04 +08:00
YunaiV 4c8898b6f5 🐛 fix(im): 上传 URL 取错字段,粘贴图片 / 文件 / 语音消息加载失败
axios 配置里 request.upload 直接返回完整 axios response(不是 res.data,
跟 get/post/put 不一致),原代码 (await updateFile(form)) as unknown as string
把整个 {data, status, headers, ...} 对象当成 URL 塞进消息 JSON,接收端
<el-image src> 拿到的是序列化串自然加载失败。

uploadAndSendImage / uploadAndSendFile / onVoiceSend 三处统一改成 .data 取值:
  ((await updateFile(form)) as { data?: string })?.data
跟 mall PictureSelectUpload / bpm SignDialog 等其它业务代码取 URL 的方式一致。
2026-04-28 01:14:24 +08:00
YunaiV 9c5b11e551 feat(im): 支持历史消息的加载 2026-04-28 01:08:45 +08:00
YunaiV e9be6ef8b3 feat(im): 增加群消息的回执开关,通过向下箭头 2026-04-27 23:56:50 +08:00
YunaiV 29695b649a feat(im): 增加群消息的回执开关,通过向下箭头 2026-04-27 23:54:41 +08:00
YunaiV 8847cdb79f feat(im): 新增 MessageReadStatus.vue 2026-04-27 22:36:47 +08:00
YunaiV bfa267120a ♻️ refactor(im): MessageItem 头像顶右 + MentionPicker/MessageInput 命名清理
【MessageItem.vue】
- 头像合一:双 v-if 头像(左/右)收成单一 <UserAvatar>,DOM 顺序固定为
  [头像, 气泡],selfSend 靠外层 flex-row-reverse 翻视觉 → 头像顶右、气泡在
  头像左侧。早先双 v-if + row-reverse 让自己消息时气泡顶右、头像反而被
  挤在 bubble 左边,跟微信观感不对齐
- 5 处脚本 TODO 注释补齐:groupMembersForReadStatus / handleContextMenu /
  handleRecall / handleDelete,解释 WHY 而不是 WHAT
- formatTipTime 局部变量按"不缩写"展开:d → messageDate / n → value /
  hm → hourMinute / (a,b) → (left,right) / weeks → weekNames
- senderAvatar / groupMembersForReadStatus 回调参数 m → member、g → group

【MessageInput.vue】
- groupMembers producer 局部变量 g → group、(m) => → (member) =>

【MentionPicker.vue】
- memberItems 过滤回调 (m) => → (member) =>
2026-04-27 21:48:34 +08:00
YunaiV 8fd21da555 🐛 fix(im): TIP_TEXT 系统提示不再显示空白
群解散 / 退群 / 踢人 等系统提示后端发的是裸字符串,之前按 TextMessage JSON
解析 → 主聊天窗显示空行、会话列表摘要变空。

- message.ts:新增 resolveTipText helper,兼容裸字符串 + {"content":"..."}
- MessageItem / conversationStore.resolveLastContent 把 TIP_TEXT 从 TEXT
  分支拆出来,统一走 resolveTipText(TEXT 仍按 JSON 解析,没有裸字符串可能)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 19:59:56 +08:00
YunaiV 9e8d04249c 🐛 fix(im): TIP_TEXT 系统提示不再显示空白
群解散 / 退群 / 踢人 等系统提示后端发的是裸字符串,之前按 TextMessage JSON
解析 → 主聊天窗显示空行、会话列表摘要变空。

- message.ts:新增 resolveTipText helper,兼容裸字符串 + {"content":"..."}
- MessageItem / conversationStore.resolveLastContent 把 TIP_TEXT 从 TEXT
  分支拆出来,统一走 resolveTipText(TEXT 仍按 JSON 解析,没有裸字符串可能)
2026-04-27 19:56:54 +08:00
YunaiV cb5d30e327 feat(im): 新增 MessageItem.vue 2026-04-27 19:11:31 +08:00
YunaiV ccc9aca21c feat(im): MessageInput 工具栏挪到底部 + 4 图标统一 Iconify + 聊天历史挪到右上角
对齐微信 PC:输入区在上、操作图标在下;会话级操作(如聊天历史)统一放 header 右上角

【MessageInput.vue】
- 模板顺序对调:editor 在上 / 工具栏在下(justify-between:左 4 图标 gap-1 / 右"发 送"按钮)
- editor min-height 80 → 100、padding 8/12 → 10/14,输入区视觉权重接近微信
- 4 个图标统一走 Iconify ant-design outlined 同源,避免 ep / antd 混用视觉割裂:
  - 表情:Sunny → ant-design:smile-outlined(Element Plus 没有 smile,必须走 Iconify)
  - 图片:Picture → ant-design:picture-outlined
  - 文件夹:Paperclip → ant-design:folder-outlined(附件 → 文件夹更贴近微信观感)
  - 语音:Microphone → ant-design:audio-outlined
  - 整条 @element-plus/icons-vue import 删除,全部改 <span class="message-input__tool inline-flex …">
    + <Icon icon="…" :size="18" /> 的统一外壳;scoped CSS 的 :deep(svg) 继续命中,padding / hover
    样式不动;DOM 实测 4 图标全部 30×30、top:761、间距 34px 完全对齐
- EmojiPicker class:bottom-9 left-3 → bottom-full left-3 mb-2,picker 从工具栏顶部向上弹出
  (旧值在新布局下会浮在工具栏内部,盖住图标)
- 删 defineEmits<{ openHistory }>():聊天历史挪到 ChatPanel header 后已没有调用方

【ChatPanel.vue】
- header 右上角新增"聊天历史"图标(Tickets),点击直接 historyVisible = true 弹"历史消息"抽屉
  (对齐微信 PC:右上角集中放会话级操作;并列在原"聊天信息 / 群聊信息"图标左侧)
- <MessageInput :key="…" @open-history="…"> 上的 listener 摘掉,emit 链路完整解耦
2026-04-27 15:46:13 +08:00
YunaiV fc82ed3d7e ♻️ refactor(input): 优化粘贴文件处理逻辑,简化代码结构 2026-04-27 14:30:38 +08:00