mirror of
https://github.com/LifeArchiveProject/WeChatDataAnalysis.git
synced 2026-06-18 15:54:08 +08:00
fix(chat-build): 避免预渲染阶段请求本地接口
- 移除聊天页 setup 阶段的服务端会话预取\n- 改为客户端挂载后再加载账号和会话数据\n- 修复 nuxt generate 在发布机构建时访问本地聊天接口导致的失败
This commit is contained in:
@@ -7,7 +7,7 @@ const SESSION_LIST_WIDTH_DEFAULT = 295
|
||||
const SESSION_LIST_WIDTH_MIN = 220
|
||||
const SESSION_LIST_WIDTH_MAX = 520
|
||||
|
||||
export const useChatSessions = async ({ chatAccounts, selectedAccount, realtimeEnabled, api }) => {
|
||||
export const useChatSessions = ({ chatAccounts, selectedAccount, realtimeEnabled, api }) => {
|
||||
const showSearchAccountSwitcher = false
|
||||
|
||||
const contacts = ref([])
|
||||
@@ -134,79 +134,6 @@ export const useChatSessions = async ({ chatAccounts, selectedAccount, realtimeE
|
||||
loadSessionListWidth()
|
||||
})
|
||||
|
||||
const apiBase = useApiBase()
|
||||
|
||||
const { data: prefetchedAccounts } = await useAsyncData('chat-accounts', () => {
|
||||
if (process.server) {
|
||||
const port = process.env.WECHAT_TOOL_PORT || '10392'
|
||||
return $fetch('/api/chat/accounts', { baseURL: `http://127.0.0.1:${port}` })
|
||||
}
|
||||
return $fetch('/chat/accounts', { baseURL: apiBase })
|
||||
}, { watch: false, lazy: true })
|
||||
|
||||
if (prefetchedAccounts.value?.accounts?.length && !chatAccounts.loaded) {
|
||||
const response = prefetchedAccounts.value
|
||||
chatAccounts.accounts = response.accounts
|
||||
const preferred = chatAccounts.selectedAccount
|
||||
const fallback = response.default_account || response.accounts[0] || ''
|
||||
chatAccounts.selectedAccount = (preferred && response.accounts.includes(preferred)) ? preferred : fallback
|
||||
chatAccounts.loaded = true
|
||||
}
|
||||
|
||||
const ssrSelectedAccount = chatAccounts.selectedAccount || ''
|
||||
const { data: prefetchedSessions } = await useAsyncData(`chat-sessions-${ssrSelectedAccount}`, () => {
|
||||
if (!ssrSelectedAccount) return Promise.resolve(null)
|
||||
const params = new URLSearchParams({
|
||||
account: ssrSelectedAccount,
|
||||
limit: '400',
|
||||
include_hidden: 'false',
|
||||
include_official: 'false'
|
||||
})
|
||||
if (process.server) {
|
||||
const port = process.env.WECHAT_TOOL_PORT || '10392'
|
||||
return $fetch(`/api/chat/sessions?${params}`, { baseURL: `http://127.0.0.1:${port}` })
|
||||
}
|
||||
return $fetch(`/chat/sessions?${params}`, { baseURL: apiBase })
|
||||
}, { watch: false, lazy: true })
|
||||
|
||||
if (prefetchedSessions.value?.sessions?.length) {
|
||||
const ssrAvatars = new Map()
|
||||
contacts.value = prefetchedSessions.value.sessions.map((session) => {
|
||||
if (session.avatar) ssrAvatars.set(session.username || session.id, session.avatar)
|
||||
return {
|
||||
id: session.id,
|
||||
name: session.name || session.username || session.id,
|
||||
avatar: null,
|
||||
lastMessage: normalizeSessionPreview(session.lastMessage || ''),
|
||||
lastMessageTime: session.lastMessageTime || '',
|
||||
unreadCount: session.unreadCount || 0,
|
||||
isGroup: !!session.isGroup,
|
||||
isTop: !!session.isTop,
|
||||
username: session.username
|
||||
}
|
||||
})
|
||||
|
||||
if (process.client && ssrAvatars.size) {
|
||||
const applySsrAvatars = () => {
|
||||
const entries = Array.from(ssrAvatars.entries())
|
||||
const batchSize = 6
|
||||
let index = 0
|
||||
const next = () => {
|
||||
const batch = entries.slice(index, index + batchSize)
|
||||
if (!batch.length) return
|
||||
for (const [key, url] of batch) {
|
||||
const contact = contacts.value.find((item) => (item.username || item.id) === key)
|
||||
if (contact) contact.avatar = url
|
||||
}
|
||||
index += batchSize
|
||||
if (index < entries.length) setTimeout(next, 150)
|
||||
}
|
||||
next()
|
||||
}
|
||||
setTimeout(applySsrAvatars, 500)
|
||||
}
|
||||
}
|
||||
|
||||
const filteredContacts = computed(() => {
|
||||
const query = String(searchQuery.value || '').trim().toLowerCase()
|
||||
if (!query) return contacts.value
|
||||
|
||||
@@ -84,7 +84,7 @@ if (process.client) {
|
||||
|
||||
const searchContext = ref(createEmptySearchContext())
|
||||
|
||||
const sessionState = await useChatSessions({
|
||||
const sessionState = useChatSessions({
|
||||
chatAccounts,
|
||||
selectedAccount,
|
||||
realtimeEnabled,
|
||||
|
||||
Reference in New Issue
Block a user