From 6dfed36c05d664989859c16617282ca4d3ec7a13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Thu, 6 Aug 2026 17:57:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(groups):=20=E5=BE=AE=E4=BF=A1=E7=BE=A4?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E5=88=97=E5=8A=A0=E3=80=8C=E5=AF=BC=E5=87=BA?= =?UTF-8?q?HTML=E8=81=8A=E5=A4=A9=E8=AE=B0=E5=BD=95=E3=80=8D=EF=BC=88?= =?UTF-8?q?=E8=A1=A5=20Plan3=20=E6=BC=8F=E7=9A=84=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude --- yunkes/src/views/GroupList.vue | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/yunkes/src/views/GroupList.vue b/yunkes/src/views/GroupList.vue index fbd4c00..05c9a7f 100644 --- a/yunkes/src/views/GroupList.vue +++ b/yunkes/src/views/GroupList.vue @@ -3,6 +3,7 @@ import { computed, onMounted, reactive, ref, watch } from 'vue' import { useRoute, useRouter } from 'vue-router' import { ElMessage } from 'element-plus' import { getGroups } from '@/api' +import { downloadBlob } from '@/api/client' import type { Channel, Group } from '@/api/types' import { useChannelStore } from '@/stores/channel' import { channelLabel, formatTime } from '@/utils/format' @@ -151,6 +152,28 @@ function viewChatFromDrawer(): void { viewChat(row) } +/** + * 微信群「导出HTML聊天记录」→ 后端 /api/export/chat-html(room_id)。 + * 云客群列表导出按钮直接导出,无时间选择 modal(仅微信客户有「请选择时间」)。 + * WA 群 tab 无此操作(云客 WA 群列表无导出)。 + */ +async function exportGroupHtml(row: Group): Promise { + if (!row.owner_account_id || !row.room_id) { + ElMessage.warning('该群缺少归属账号/群标识,无法导出') + return + } + try { + await downloadBlob('/export/chat-html', { + channel: row.channel, + owner_account_id: row.owner_account_id, + room_id: row.room_id, + }) + ElMessage.success('导出已开始') + } catch (e) { + ElMessage.error(`导出失败,请稍后重试:${(e as Error).message}`) + } +} + /** 清除 owner_account_id query(保留其余 query)。 */ function clearOwnerFilter(): void { const { owner_account_id: _drop, ...rest } = route.query @@ -267,11 +290,10 @@ onMounted(() => { - +