Browse Source

fix(chat): 修复 ChatList 消息显示为骨架屏的问题

ChatList 内部会把任何 truthy 的 status 强制重写为 "pending",
导致所有历史消息都显示为骨架屏。移除 chatAdapter 中的 status 字段,
由 ChatPanel.vue 的 #content slot 自行控制流式/错误态渲染。
master
wanghanlin 6 days ago
parent
commit
953a3c96ab
  1. 14
      frontend/src/utils/chatAdapter.ts

14
frontend/src/utils/chatAdapter.ts

@ -1,8 +1,9 @@
/**
* ChatMessage @tdesign-vue-next/chat ChatItemMeta
*
* ChatList ChatMessage role / name / datetime / avatar / content / status
* 使 #content slot content ChatPanel.vue slot
* ChatList ChatMessage role / name / datetime / avatar / content
* ChatList truthy status "pending" status
* ChatPanel.vue #content slot /
*/
import type { TdChatItemMeta, AIMessageContent, UserMessageContent } from '@tdesign-vue-next/chat'
@ -20,13 +21,6 @@ export interface ChatMessage {
feedback?: string | null
}
/** 判断消息状态 */
function getStatus(msg: ChatMessage): 'pending' | 'streaming' | 'complete' | 'stop' | 'error' {
if (msg.error) return 'error'
if (msg.streaming) return 'streaming'
return 'complete'
}
/** 转换单条消息 */
export function toChatItemMeta(msg: ChatMessage): TdChatItemMeta {
const isUser = msg.role === 'user'
@ -38,7 +32,7 @@ export function toChatItemMeta(msg: ChatMessage): TdChatItemMeta {
content: isUser
? ([{ type: 'text', data: msg.content || '' }] as UserMessageContent[])
: ([{ type: 'markdown', data: msg.content || '' }] as AIMessageContent[]),
status: getStatus(msg),
// 故意不传 status:ChatList 会把 truthy status 强制改为 pending,显示骨架屏
}
}

Loading…
Cancel
Save