chore: initialize qiming workspace repository
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
import { nextTick } from 'vue'
|
||||
import { MessageInfo } from '@/types/interfaces/conversationInfo'
|
||||
import { MessageTypeEnum } from '@/types/enums/agent'
|
||||
import { MessageStatusEnum } from '@/types/enums/common'
|
||||
import AgentDetailData from './AgentDetailData.uts'
|
||||
import AgentDetailUtils from './AgentDetailUtils.uts'
|
||||
|
||||
/**
|
||||
* 组件管理层:负责组件的引用管理和更新
|
||||
*/
|
||||
export default class ComponentManager {
|
||||
private data: AgentDetailData
|
||||
constructor(private data: AgentDetailData) {
|
||||
this.data = data
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置消息组件引用
|
||||
*/
|
||||
setMessageRef(el: any, messageId: string): void {
|
||||
if (el) {
|
||||
this.data.messageRefs.value[messageId] = el
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除消息组件引用
|
||||
*/
|
||||
removeMessageRef(messageId: string): void {
|
||||
if (this.data.messageRefs.value[messageId]) {
|
||||
delete this.data.messageRefs.value[messageId]
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新消息组件
|
||||
*/
|
||||
async updateMessageComponent(messageId: string, newData: any): Promise<void> {
|
||||
const messageRef = this.data.messageRefs.value[messageId]
|
||||
if (messageRef) {
|
||||
try {
|
||||
if (typeof messageRef.updateMessage === 'function') {
|
||||
await messageRef.updateMessage(newData)
|
||||
} else {
|
||||
// 备用方案:强制触发组件更新
|
||||
await nextTick()
|
||||
const message = this.data.messageList.value.find(msg => msg.id === messageId)
|
||||
if (message) {
|
||||
message.lastUpdateTime = Date.now()
|
||||
this.data.messageList.value = [...this.data.messageList.value]
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`更新消息组件 ${messageId} 失败:`, error)
|
||||
// 错误恢复:使用备用方案
|
||||
try {
|
||||
await nextTick()
|
||||
const message = this.data.messageList.value.find(msg => msg.id === messageId)
|
||||
if (message) {
|
||||
message.lastUpdateTime = Date.now()
|
||||
this.data.messageList.value = [...this.data.messageList.value]
|
||||
}
|
||||
} catch (backupError) {
|
||||
console.error('备用方案也失败了:', backupError)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据状态枚举确定状态
|
||||
*/
|
||||
determineState(status: MessageStatusEnum): number {
|
||||
switch (status) {
|
||||
case MessageStatusEnum.Loading:
|
||||
return 1
|
||||
case MessageStatusEnum.Incomplete:
|
||||
return 2
|
||||
case MessageStatusEnum.Complete:
|
||||
return 3
|
||||
case MessageStatusEnum.Error:
|
||||
return 4
|
||||
default:
|
||||
return 3
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将MessageInfo转换为MsgItem格式
|
||||
*/
|
||||
convertMessageInfoToMsgItem(messageInfo: MessageInfo): any {
|
||||
return {
|
||||
_id: messageInfo.id?.toString() || '',
|
||||
from_uid: messageInfo.messageType === MessageTypeEnum.ASSISTANT ? 'uni-ai' : 'user',
|
||||
// thinkContent: messageInfo.text || messageInfo.think || '',
|
||||
// body: messageInfo.text || messageInfo.think || '',
|
||||
thinkContent: messageInfo.think || '',
|
||||
body: messageInfo.text || '',
|
||||
create_time: new Date(messageInfo.time || Date.now()).getTime(),
|
||||
state: this.determineState(messageInfo.status),
|
||||
chat_id: 'chat-' + this.data.conversationId.value,
|
||||
// markdownElList: [],
|
||||
// markdownElList: messageInfo.markdownElList || [],
|
||||
rendered: false,
|
||||
// 传递processingList用于自定义组件渲染(历史消息的工具调用等)
|
||||
processingList: messageInfo.processingList || []
|
||||
} as any
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user