Skip to content

Commit 5338763

Browse files
committed
fix(chat-build): 避免预渲染阶段请求本地接口
- 移除聊天页 setup 阶段的服务端会话预取\n- 改为客户端挂载后再加载账号和会话数据\n- 修复 nuxt generate 在发布机构建时访问本地聊天接口导致的失败
1 parent e6caf18 commit 5338763

2 files changed

Lines changed: 2 additions & 75 deletions

File tree

frontend/composables/chat/useChatSessions.js

Lines changed: 1 addition & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const SESSION_LIST_WIDTH_DEFAULT = 295
77
const SESSION_LIST_WIDTH_MIN = 220
88
const SESSION_LIST_WIDTH_MAX = 520
99

10-
export const useChatSessions = async ({ chatAccounts, selectedAccount, realtimeEnabled, api }) => {
10+
export const useChatSessions = ({ chatAccounts, selectedAccount, realtimeEnabled, api }) => {
1111
const showSearchAccountSwitcher = false
1212

1313
const contacts = ref([])
@@ -134,79 +134,6 @@ export const useChatSessions = async ({ chatAccounts, selectedAccount, realtimeE
134134
loadSessionListWidth()
135135
})
136136

137-
const apiBase = useApiBase()
138-
139-
const { data: prefetchedAccounts } = await useAsyncData('chat-accounts', () => {
140-
if (process.server) {
141-
const port = process.env.WECHAT_TOOL_PORT || '10392'
142-
return $fetch('/api/chat/accounts', { baseURL: `http://127.0.0.1:${port}` })
143-
}
144-
return $fetch('/chat/accounts', { baseURL: apiBase })
145-
}, { watch: false, lazy: true })
146-
147-
if (prefetchedAccounts.value?.accounts?.length && !chatAccounts.loaded) {
148-
const response = prefetchedAccounts.value
149-
chatAccounts.accounts = response.accounts
150-
const preferred = chatAccounts.selectedAccount
151-
const fallback = response.default_account || response.accounts[0] || ''
152-
chatAccounts.selectedAccount = (preferred && response.accounts.includes(preferred)) ? preferred : fallback
153-
chatAccounts.loaded = true
154-
}
155-
156-
const ssrSelectedAccount = chatAccounts.selectedAccount || ''
157-
const { data: prefetchedSessions } = await useAsyncData(`chat-sessions-${ssrSelectedAccount}`, () => {
158-
if (!ssrSelectedAccount) return Promise.resolve(null)
159-
const params = new URLSearchParams({
160-
account: ssrSelectedAccount,
161-
limit: '400',
162-
include_hidden: 'false',
163-
include_official: 'false'
164-
})
165-
if (process.server) {
166-
const port = process.env.WECHAT_TOOL_PORT || '10392'
167-
return $fetch(`/api/chat/sessions?${params}`, { baseURL: `http://127.0.0.1:${port}` })
168-
}
169-
return $fetch(`/chat/sessions?${params}`, { baseURL: apiBase })
170-
}, { watch: false, lazy: true })
171-
172-
if (prefetchedSessions.value?.sessions?.length) {
173-
const ssrAvatars = new Map()
174-
contacts.value = prefetchedSessions.value.sessions.map((session) => {
175-
if (session.avatar) ssrAvatars.set(session.username || session.id, session.avatar)
176-
return {
177-
id: session.id,
178-
name: session.name || session.username || session.id,
179-
avatar: null,
180-
lastMessage: normalizeSessionPreview(session.lastMessage || ''),
181-
lastMessageTime: session.lastMessageTime || '',
182-
unreadCount: session.unreadCount || 0,
183-
isGroup: !!session.isGroup,
184-
isTop: !!session.isTop,
185-
username: session.username
186-
}
187-
})
188-
189-
if (process.client && ssrAvatars.size) {
190-
const applySsrAvatars = () => {
191-
const entries = Array.from(ssrAvatars.entries())
192-
const batchSize = 6
193-
let index = 0
194-
const next = () => {
195-
const batch = entries.slice(index, index + batchSize)
196-
if (!batch.length) return
197-
for (const [key, url] of batch) {
198-
const contact = contacts.value.find((item) => (item.username || item.id) === key)
199-
if (contact) contact.avatar = url
200-
}
201-
index += batchSize
202-
if (index < entries.length) setTimeout(next, 150)
203-
}
204-
next()
205-
}
206-
setTimeout(applySsrAvatars, 500)
207-
}
208-
}
209-
210137
const filteredContacts = computed(() => {
211138
const query = String(searchQuery.value || '').trim().toLowerCase()
212139
if (!query) return contacts.value

frontend/pages/chat/[[username]].vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ if (process.client) {
8484
8585
const searchContext = ref(createEmptySearchContext())
8686
87-
const sessionState = await useChatSessions({
87+
const sessionState = useChatSessions({
8888
chatAccounts,
8989
selectedAccount,
9090
realtimeEnabled,

0 commit comments

Comments
 (0)