@@ -27,6 +27,22 @@ export const useChatMessages = ({
2727 const messageContainerRef = ref ( null )
2828 const activeMessagesFor = ref ( '' )
2929 const showJumpToBottom = ref ( false )
30+ let lastRenderMessagesFingerprint = ''
31+
32+ const isDesktopRenderer = ( ) => {
33+ if ( ! process . client || typeof window === 'undefined' ) return false
34+ return ! ! window . wechatDesktop ?. __brand
35+ }
36+
37+ const logMessagePhase = ( phase , details = { } ) => {
38+ if ( ! isDesktopRenderer ( ) ) return
39+ console . info ( `[chat-messages] ${ phase } ` , {
40+ account : String ( selectedAccount . value || '' ) . trim ( ) ,
41+ selectedUsername : String ( selectedContact . value ?. username || '' ) . trim ( ) ,
42+ activeMessagesFor : String ( activeMessagesFor . value || '' ) . trim ( ) ,
43+ ...details
44+ } )
45+ }
3046
3147 const previewImageUrl = ref ( null )
3248 const previewVideoUrl = ref ( null )
@@ -113,8 +129,16 @@ export const useChatMessages = ({
113129 const renderMessages = computed ( ( ) => {
114130 const list = messages . value || [ ]
115131 const reverseSides = ! ! reverseMessageSides . value
132+ const fingerprint = `${ String ( selectedContact . value ?. username || '' ) . trim ( ) } :${ list . length } :${ reverseSides ? '1' : '0' } `
133+ const shouldLogRender = isDesktopRenderer ( ) && fingerprint !== lastRenderMessagesFingerprint
134+ if ( shouldLogRender ) {
135+ logMessagePhase ( 'renderMessages:start' , {
136+ count : list . length ,
137+ reverseSides
138+ } )
139+ }
116140 let previousTs = 0
117- return list . map ( ( message ) => {
141+ const rendered = list . map ( ( message ) => {
118142 const ts = Number ( message . createTime || 0 )
119143 const show = ! previousTs || ( ts && Math . abs ( ts - previousTs ) >= 300 )
120144 if ( ts ) previousTs = ts
@@ -127,6 +151,14 @@ export const useChatMessages = ({
127151 timeDivider : formatTimeDivider ( ts )
128152 }
129153 } )
154+ if ( shouldLogRender ) {
155+ lastRenderMessagesFingerprint = fingerprint
156+ logMessagePhase ( 'renderMessages:end' , {
157+ count : rendered . length ,
158+ reverseSides
159+ } )
160+ }
161+ return rendered
130162 } )
131163
132164 const updateJumpToBottomState = ( ) => {
@@ -333,6 +365,10 @@ export const useChatMessages = ({
333365 const loadMessages = async ( { username, reset } ) => {
334366 if ( ! username || ! selectedAccount . value ) return
335367
368+ logMessagePhase ( 'loadMessages:enter' , {
369+ username,
370+ reset
371+ } )
336372 messagesError . value = ''
337373 isLoadingMessages . value = true
338374 activeMessagesFor . value = username
@@ -357,13 +393,47 @@ export const useChatMessages = ({
357393 if ( realtimeEnabled . value ) {
358394 params . source = 'realtime'
359395 }
396+ logMessagePhase ( 'loadMessages:request:start' , {
397+ username,
398+ reset,
399+ offset,
400+ existingCount : existing . length ,
401+ renderTypeFilter : messageTypeFilter . value ,
402+ realtime : ! ! realtimeEnabled . value
403+ } )
360404 const response = await api . listChatMessages ( params )
405+ logMessagePhase ( 'loadMessages:request:end' , {
406+ username,
407+ reset,
408+ rawCount : Array . isArray ( response ?. messages ) ? response . messages . length : 0 ,
409+ total : Number ( response ?. total || 0 ) ,
410+ hasMore : response ?. hasMore
411+ } )
361412
362413 const raw = response ?. messages || [ ]
414+ logMessagePhase ( 'loadMessages:normalize:start' , {
415+ username,
416+ rawCount : raw . length
417+ } )
363418 const mapped = dedupeMessagesById ( raw . map ( normalizeMessage ) )
419+ logMessagePhase ( 'loadMessages:normalize:end' , {
420+ username,
421+ mappedCount : mapped . length
422+ } )
364423
365- if ( activeMessagesFor . value !== username ) return
424+ if ( activeMessagesFor . value !== username ) {
425+ logMessagePhase ( 'loadMessages:abort-stale' , {
426+ username,
427+ activeMessagesFor : activeMessagesFor . value
428+ } )
429+ return
430+ }
366431
432+ logMessagePhase ( 'loadMessages:state-commit:start' , {
433+ username,
434+ reset,
435+ mappedCount : mapped . length
436+ } )
367437 if ( reset ) {
368438 allMessages . value = { ...allMessages . value , [ username ] : mapped }
369439 } else {
@@ -380,6 +450,10 @@ export const useChatMessages = ({
380450 [ username ] : [ ...older , ...existing ]
381451 }
382452 }
453+ logMessagePhase ( 'loadMessages:state-commit:end' , {
454+ username,
455+ storedCount : ( allMessages . value [ username ] || [ ] ) . length
456+ } )
383457
384458 messagesMeta . value = {
385459 ...messagesMeta . value ,
@@ -388,8 +462,20 @@ export const useChatMessages = ({
388462 hasMore : response ?. hasMore
389463 }
390464 }
465+ logMessagePhase ( 'loadMessages:meta-commit:end' , {
466+ username,
467+ total : Number ( response ?. total || 0 ) ,
468+ hasMore : response ?. hasMore
469+ } )
391470
471+ logMessagePhase ( 'loadMessages:nextTick:start' , {
472+ username
473+ } )
392474 await nextTick ( )
475+ logMessagePhase ( 'loadMessages:nextTick:end' , {
476+ username,
477+ renderedCount : ( allMessages . value [ username ] || [ ] ) . length
478+ } )
393479 const nextContainer = messageContainerRef . value
394480 if ( nextContainer ) {
395481 if ( reset ) {
@@ -400,10 +486,28 @@ export const useChatMessages = ({
400486 }
401487 }
402488 updateJumpToBottomState ( )
489+ logMessagePhase ( 'loadMessages:scroll:end' , {
490+ username,
491+ hasContainer : ! ! nextContainer ,
492+ scrollTop : nextContainer ? nextContainer . scrollTop : null ,
493+ scrollHeight : nextContainer ? nextContainer . scrollHeight : null
494+ } )
403495 } catch ( error ) {
496+ console . error ( '[chat-messages] loadMessages:error' , {
497+ account : String ( selectedAccount . value || '' ) . trim ( ) ,
498+ username : String ( username || '' ) . trim ( ) ,
499+ reset : ! ! reset ,
500+ error
501+ } )
404502 messagesError . value = error ?. message || '加载聊天记录失败'
405503 } finally {
406504 isLoadingMessages . value = false
505+ logMessagePhase ( 'loadMessages:exit' , {
506+ username,
507+ reset,
508+ loading : isLoadingMessages . value ,
509+ error : messagesError . value
510+ } )
407511 }
408512 }
409513
0 commit comments