flat: 暂存

This commit is contained in:
史典卓
2025-03-29 20:46:23 +08:00
parent ca85430450
commit 2992cb200e
4 changed files with 81 additions and 193 deletions

View File

@@ -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);
}
})
});
}
// 状态控制