flat: 暂存
This commit is contained in:
@@ -114,69 +114,93 @@ const useChatGroupDBStore = defineStore("messageGroup", () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
toggleTyping(true);
|
||||
|
||||
const params = {
|
||||
data: text,
|
||||
sessionId: chatSessionID.value,
|
||||
};
|
||||
if (fileUrls && fileUrls.length) {
|
||||
params['fileUrl'] = fileUrls.map((item) => item.url)
|
||||
}
|
||||
const newMsg = {
|
||||
text: '', // 存放完整的流式数据
|
||||
self: false,
|
||||
displayText: '' // 用于前端逐步显示
|
||||
};
|
||||
const index = messages.value.length;
|
||||
messages.value.push(newMsg); // 先占位
|
||||
|
||||
let fullText = ''; // 存储完整的响应内容
|
||||
if (fileUrls && fileUrls.length) {
|
||||
params['fileUrl'] = fileUrls.map((item) => item.url);
|
||||
}
|
||||
|
||||
const newMsg = {
|
||||
text: [], // 存储原始结构化内容
|
||||
self: false,
|
||||
displayText: '' // 用于流式渲染展示
|
||||
};
|
||||
|
||||
const index = messages.value.length;
|
||||
messages.value.push(newMsg);
|
||||
|
||||
const rawParts = Array.isArray(text) ? text : [text]; // 统一处理
|
||||
|
||||
// 用于追加每个部分的流式数据
|
||||
let partIndex = 0;
|
||||
|
||||
function handleUnload() {
|
||||
newMsg.text = fullText
|
||||
newMsg.parentGroupId = chatSessionID.value
|
||||
newMsg.parentGroupId = chatSessionID.value;
|
||||
baseDB.db.add(massageName.value, newMsg);
|
||||
}
|
||||
// 添加事件监听
|
||||
window.addEventListener("unload", handleUnload);
|
||||
|
||||
// 实时数据渲染
|
||||
function onDataReceived(data) {
|
||||
// const parsedData = safeParseJSON(data);
|
||||
fullText += data; // 累积完整内容
|
||||
newMsg.displayText += data; // 逐步更新 UI
|
||||
messages.value[index] = {
|
||||
...newMsg
|
||||
}; // 触发视图更新
|
||||
progress && progress()
|
||||
function renderPart(part) {
|
||||
if (typeof part === 'string') {
|
||||
newMsg.displayText += part;
|
||||
} else if (typeof part === 'object' && part.type === 'highlight') {
|
||||
newMsg.displayText += `<span class="highlight">${part.content}</span>`;
|
||||
} else {
|
||||
newMsg.displayText += String(part); // 兜底
|
||||
}
|
||||
}
|
||||
|
||||
function onDataReceived(data) {
|
||||
let parsed;
|
||||
try {
|
||||
parsed = JSON.parse(data);
|
||||
} catch {
|
||||
parsed = data;
|
||||
}
|
||||
|
||||
// 支持追加多个部分
|
||||
if (Array.isArray(parsed)) {
|
||||
parsed.forEach((part) => {
|
||||
newMsg.text.push(part); // 存结构
|
||||
renderPart(part); // 渲染显示
|
||||
});
|
||||
} else {
|
||||
newMsg.text.push(parsed);
|
||||
renderPart(parsed);
|
||||
}
|
||||
|
||||
messages.value[index] = {
|
||||
...newMsg
|
||||
};
|
||||
progress && progress();
|
||||
}
|
||||
|
||||
// 异常处理
|
||||
function onError(error) {
|
||||
console.error('请求异常:', error);
|
||||
msg('服务响应异常')
|
||||
msg('服务响应异常');
|
||||
reject(error);
|
||||
}
|
||||
|
||||
// 完成处理
|
||||
function onComplete() {
|
||||
newMsg.text = fullText; // 保存完整响应
|
||||
messages.value[index] = {
|
||||
...newMsg
|
||||
};
|
||||
toggleTyping(false);
|
||||
window.removeEventListener("unload", handleUnload);
|
||||
handleUnload()
|
||||
resolve && resolve();
|
||||
handleUnload();
|
||||
resolve();
|
||||
}
|
||||
|
||||
$api.streamRequest('/chat', params, onDataReceived,
|
||||
onError, onComplete)
|
||||
$api.streamRequest('/chat', params, onDataReceived, onError, onComplete);
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
reject(err);
|
||||
}
|
||||
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 状态控制
|
||||
|
Reference in New Issue
Block a user