From b422b3c55c9b5692a3e42e942195e5b6635cae99 Mon Sep 17 00:00:00 2001 From: 2977094657 <2977094657@qq.com> Date: Thu, 1 Jan 2026 23:24:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(chat):=20=E5=89=8D=E7=AB=AF=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=AE=9E=E6=97=B6=E5=BC=80=E5=85=B3=E5=B9=B6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=88=B7=E6=96=B0=E4=BC=9A=E8=AF=9D/=E6=B6=88?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 聊天页新增实时开关,自动探测 realtime 可用性 - 监听 /api/chat/realtime/stream,变更时触发增量同步并刷新会话/消息 - useApi 增加 realtime 接口,sessions/messages 支持 source 参数 --- frontend/composables/useApi.js | 33 +++ frontend/pages/chat/[[username]].vue | 376 ++++++++++++++++++++++++++- 2 files changed, 400 insertions(+), 9 deletions(-) diff --git a/frontend/composables/useApi.js b/frontend/composables/useApi.js index 97e739f..9c4aa57 100644 --- a/frontend/composables/useApi.js +++ b/frontend/composables/useApi.js @@ -69,6 +69,7 @@ export const useApi = () => { if (params && params.limit != null) query.set('limit', String(params.limit)) if (params && params.include_hidden != null) query.set('include_hidden', String(!!params.include_hidden)) if (params && params.include_official != null) query.set('include_official', String(!!params.include_official)) + if (params && params.source) query.set('source', params.source) const url = '/chat/sessions' + (query.toString() ? `?${query.toString()}` : '') return await request(url) } @@ -81,10 +82,39 @@ export const useApi = () => { if (params && params.offset != null) query.set('offset', String(params.offset)) if (params && params.order) query.set('order', params.order) if (params && params.render_types) query.set('render_types', params.render_types) + if (params && params.source) query.set('source', params.source) const url = '/chat/messages' + (query.toString() ? `?${query.toString()}` : '') return await request(url) } + const getChatRealtimeStatus = async (params = {}) => { + const query = new URLSearchParams() + if (params && params.account) query.set('account', params.account) + const url = '/chat/realtime/status' + (query.toString() ? `?${query.toString()}` : '') + return await request(url) + } + + const syncChatRealtimeMessages = async (params = {}) => { + const query = new URLSearchParams() + if (params && params.account) query.set('account', params.account) + if (params && params.username) query.set('username', params.username) + if (params && params.max_scan != null) query.set('max_scan', String(params.max_scan)) + const url = '/chat/realtime/sync' + (query.toString() ? `?${query.toString()}` : '') + return await request(url, { method: 'POST' }) + } + + const syncChatRealtimeAll = async (params = {}) => { + const query = new URLSearchParams() + if (params && params.account) query.set('account', params.account) + if (params && params.max_scan != null) query.set('max_scan', String(params.max_scan)) + if (params && params.priority_username) query.set('priority_username', params.priority_username) + if (params && params.priority_max_scan != null) query.set('priority_max_scan', String(params.priority_max_scan)) + if (params && params.include_hidden != null) query.set('include_hidden', String(!!params.include_hidden)) + if (params && params.include_official != null) query.set('include_official', String(!!params.include_official)) + const url = '/chat/realtime/sync_all' + (query.toString() ? `?${query.toString()}` : '') + return await request(url, { method: 'POST' }) + } + const searchChatMessages = async (params = {}) => { const query = new URLSearchParams() if (params && params.account) query.set('account', params.account) @@ -250,6 +280,9 @@ export const useApi = () => { listChatAccounts, listChatSessions, listChatMessages, + getChatRealtimeStatus, + syncChatRealtimeMessages, + syncChatRealtimeAll, searchChatMessages, getChatSearchIndexStatus, buildChatSearchIndex, diff --git a/frontend/pages/chat/[[username]].vue b/frontend/pages/chat/[[username]].vue index 595f2eb..69effc8 100644 --- a/frontend/pages/chat/[[username]].vue +++ b/frontend/pages/chat/[[username]].vue @@ -150,6 +150,18 @@ 刷新 +