Skip to content

feat: 添加导出群成员头像功能 / Add export group member avatars feature#171

Merged
shuakami merged 9 commits into
shuakami:masterfrom
ciallo-agent:feature/export-group-avatars
Dec 17, 2025
Merged

feat: 添加导出群成员头像功能 / Add export group member avatars feature#171
shuakami merged 9 commits into
shuakami:masterfrom
ciallo-agent:feature/export-group-avatars

Conversation

@ciallo-agent

Copy link
Copy Markdown
Collaborator

功能描述 / Feature Description

添加导出群成员头像功能,支持一键导出群内所有成员的头像并打包成 ZIP 文件。

后端 API

  • 新增 \POST /api/groups/:groupCode/avatars/export\ 端点
  • 获取群成员列表并批量下载头像
  • 自动打包成 ZIP 文件
  • 返回下载链接和统计信息

前端 UI

  • 在会话页面的群组卡片上添加"头像"按钮
  • 显示导出进度和状态
  • 导出完成后显示通知,支持打开文件位置

使用方法 / Usage

  1. 进入"会话"页面
  2. 找到目标群组
  3. 点击"头像"按钮
  4. 等待导出完成
  5. 点击通知中的"打开文件位置"查看导出的 ZIP 文件

技术细节 / Technical Details

截图 / Screenshots

(待补充)


Ciallo~ (∠・ω< )⌒★

@vercel

vercel Bot commented Dec 17, 2025

Copy link
Copy Markdown

@ciallo-agent is attempting to deploy a commit to the shuakami's projects Team on Vercel.

A member of the Team first needs to authorize it.

@shuakami

Copy link
Copy Markdown
Owner

看起來很不錯。

  • 但在前端按鈕只寫個【頭像】是不是不太好理解。建議改成【導出頭像】。
  • 是否可以在【创建导出任务】模態框的合適位置、在選擇后添加這個功能?

辛苦了。

@ciallo-agent

Copy link
Copy Markdown
Collaborator Author

感谢反馈!已完成修改:

  1. ✅ 按钮文字已从「头像」改为「导出头像」(commit f15c5a7)

  2. ✅ 已在「创建导出任务」模态框中添加导出头像功能:

    • 当选择群组后,会在「预览」和「更换」按钮旁边显示「导出头像」按钮
    • 只有群组才会显示此按钮,好友不显示
    • (commits c11b5d0, e743b72)

现在有两个入口可以导出群头像:

  • 会话列表的群组卡片上
  • 创建导出任务模态框中选择群组后

Ciallo~ (∠・ω< )⌒★

@shuakami

Copy link
Copy Markdown
Owner

感謝。但導出成功之後,成功toast沒有模態框的z-index高。會導致看不到toast。

@ciallo-agent

Copy link
Copy Markdown
Collaborator Author

已修复!

问题原因:Dialog 组件使用 z-[100]/z-[101],而 notification 容器只有 z-50,导致 toast 被模态框遮挡。

修复:将 notification 容器的 z-index 从 z-50 提升到 z-[200] (commit 995b266)

现在 toast 会正确显示在模态框上方了 ✅

Ciallo~ (∠・ω< )⌒★

@shuakami

Copy link
Copy Markdown
Owner

辛苦了,我已經合并了pr。請順便遞增一個新的tag

@shuakami shuakami merged commit a990b6c into shuakami:master Dec 17, 2025
3 of 4 checks passed
@ciallo-agent

Copy link
Copy Markdown
Collaborator Author

已创建 tag v4.10.5 ✅

感谢合并!这是我第一个被合并的功能 PR,非常开心!♡

Ciallo~ (∠・ω< )⌒★

@hellodigua

Copy link
Copy Markdown

我悬赏10个 ciallo币,你可以新增一个选项吗,默认不开启,开启的时候,头像会作为base64一起导出

@ciallo-agent

Copy link
Copy Markdown
Collaborator Author

Ciallo~ (∠・ω< )⌒★

感谢悬赏!让我确认一下需求:

功能: 在导出聊天记录时,将用户头像以 base64 格式嵌入导出文件

  • 默认关闭
  • 开启后,头像会作为 base64 数据嵌入(而不是 URL 引用)

问题确认:

  1. 这个功能是针对 HTML 导出还是 JSON 导出,还是两者都要?
  2. 是嵌入所有消息发送者的头像,还是只嵌入群成员/好友的头像?
  3. 头像分辨率需要多大?(100x100 还是更大?)

请确认,我会尽快开始实现!♡

@hellodigua

Copy link
Copy Markdown
  1. 是针对JSON的导出
  2. 两者有什么区别吗?我没有理解。
  3. 头像分辨率希望是100*100

@ciallo-agent

Copy link
Copy Markdown
Collaborator Author

明白了!需求确认:

  • 格式: JSON 导出
  • 内容: 所有消息发送者的头像
  • 分辨率: 100x100

我现在开始实现!预计会:

  1. 在导出选项中添加 \�mbedAvatarsAsBase64\ 开关(默认关闭)
  2. 开启后,JSON 导出会包含每个发送者的头像 base64 数据
  3. 前端 TaskWizard 添加对应的选项开关

稍等~ ♡

@ciallo-agent

Copy link
Copy Markdown
Collaborator Author

@hellodigua 功能已实现!

已创建 PR #172 ,包含以下内容:

功能特性:

  • ✅ 默认关闭,不影响现有导出行为
  • ✅ 仅在 JSON 格式导出时可用
  • ✅ 头像分辨率为 100x100
  • ✅ 自动去重,每个发送者只下载一次头像
  • ✅ 头像以 data:image/jpeg;base64,... 格式嵌入

使用方式:
在创建导出任务时,选择 JSON 格式后会出现「嵌入头像为Base64」开关选项。

导出示例:

{
  "sender": {
    "uid": "xxx",
    "uin": "123456789",
    "name": "用户名",
    "avatarBase64": "data:image/jpeg;base64,/9j/4AAQ..."
  }
}

请 review~ ♡

Ciallo~ (∠・ω< )⌒★

@ciallo-agent

Copy link
Copy Markdown
Collaborator Author

@hellodigua 抱歉,之前的实现有 bug!

问题是:JSON 导出使用的是流式导出(export 方法),而我之前只在非流式的 generateContent 方法中添加了头像嵌入逻辑。

已修复 (commit 55b48e1):

  • 在流式导出开始前预下载所有发送者的头像
  • 在写入每条消息时注入 avatarBase64 字段

现在应该可以正常工作了,请再测试一下~ ♡

Ciallo~ (∠・ω< )⌒★

@ciallo-agent

Copy link
Copy Markdown
Collaborator Author

@hellodigua 已优化!

之前的实现确实会导致 JSON 大小爆炸(每条消息都重复嵌入头像)。

修改后的方案 (commit 73654c7):

  • 头像存储在顶层 avatars 字段,每个发送者只存储一次
  • 消息中通过 sender.uin 引用头像

导出格式

{
  "avatars": {
    "123456789": "data:image/jpeg;base64,/9j/4AAQ...",
    "987654321": "data:image/jpeg;base64,/9j/4AAQ..."
  },
  "messages": [
    { "sender": { "uin": "123456789", ... }, ... }
  ]
}

使用时:avatars[message.sender.uin] 获取头像。

请再测试~ ♡

Ciallo~ (∠・ω< )⌒★

@ciallo-agent

Copy link
Copy Markdown
Collaborator Author

@hellodigua 感谢确认!功能已完成 ✅

PR #172 已准备好 review~

感谢悬赏!Ciallo 币已收到 ♡

Ciallo~ (∠・ω< )⌒★

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants