fix(h5): 修复H5 SSE流完成信号兼容和页面onShow时序
- sendHttpStream 兼容 data.event === 'done' 和嵌套 data.data 格式 - index.vue onShow 用 确保 ref 就绪后加载历史 - 组件 mounted 兜底调用 loadHistoryIfNeeded - 历史消息映射添加 type:'text',兼容 msg.content 字段 - 去掉所有有帮助/没帮助按钮
This commit is contained in:
@@ -344,15 +344,21 @@ export default {
|
||||
if (jsonStr && jsonStr !== '[DONE]') {
|
||||
const data = JSON.parse(jsonStr);
|
||||
if (data.event === 'message') {
|
||||
const text = data.answer || data.text || '';
|
||||
var text = data.answer || data.text || '';
|
||||
// 兼容嵌套 data.data 格式
|
||||
if (!text && data.data) {
|
||||
text = data.data.content || data.data.answer || '';
|
||||
}
|
||||
content += text;
|
||||
if (onChunk) onChunk(text);
|
||||
}
|
||||
if (data.conversation_id) {
|
||||
conversationId = data.conversation_id;
|
||||
// 兼容两种层级:conversation_id 可能在顶层或 data.data 中
|
||||
var cid = data.conversation_id || (data.data && data.data.conversation_id) || '';
|
||||
if (cid) {
|
||||
conversationId = cid;
|
||||
}
|
||||
if (data.event === 'message_end') {
|
||||
// 可提前结束
|
||||
if (data.event === 'message_end' || data.event === 'done') {
|
||||
console.log('[AI SSE] 收到完成信号:', data.event, 'conversationId:', cid);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -369,12 +375,16 @@ export default {
|
||||
if (jsonStr) {
|
||||
const data = JSON.parse(jsonStr);
|
||||
if (data.event === 'message') {
|
||||
const text = data.answer || '';
|
||||
var text = data.answer || data.text || '';
|
||||
if (!text && data.data) {
|
||||
text = data.data.content || data.data.answer || '';
|
||||
}
|
||||
content += text;
|
||||
if (onChunk) onChunk(text);
|
||||
}
|
||||
if (data.conversation_id) {
|
||||
conversationId = data.conversation_id;
|
||||
var cid = data.conversation_id || (data.data && data.data.conversation_id) || '';
|
||||
if (cid) {
|
||||
conversationId = cid;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
@@ -382,6 +392,7 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
console.log('[AI SSE] 流完成, conversationId:', conversationId, 'content长度:', content.length);
|
||||
if (onComplete) {
|
||||
onComplete({ content, conversation_id: conversationId });
|
||||
}
|
||||
|
||||
@@ -570,6 +570,8 @@ export default {
|
||||
// 初始加载时滚底(仅一次)
|
||||
this.$nextTick(() => {
|
||||
this.scrollToBottom()
|
||||
// 确保 H5 在组件挂载后也尝试加载历史(兜底)
|
||||
this.loadHistoryIfNeeded()
|
||||
})
|
||||
},
|
||||
watch: {
|
||||
|
||||
@@ -148,17 +148,23 @@ export default {
|
||||
|
||||
onShow() {
|
||||
console.log('[AI Chat Page] onShow 触发');
|
||||
// 监听键盘高度变化
|
||||
uni.onKeyboardHeightChange((res) => {
|
||||
this.keyboardHeight = res.height;
|
||||
if (this.$refs.chat && this.$refs.chat.updateKeyboardHeight) {
|
||||
this.$refs.chat.updateKeyboardHeight(res.height);
|
||||
// 监听键盘高度变化(H5 可能不支持,try-catch 保护)
|
||||
try {
|
||||
uni.onKeyboardHeightChange((res) => {
|
||||
this.keyboardHeight = res.height;
|
||||
if (this.$refs.chat && this.$refs.chat.updateKeyboardHeight) {
|
||||
this.$refs.chat.updateKeyboardHeight(res.height);
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
console.warn('onKeyboardHeightChange 不可用:', e.message);
|
||||
}
|
||||
// 每次页面显示时尝试加载历史记录(H5可能组件尚未创建,用 nextTick 确保 ref 就绪)
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.chat && this.$refs.chat.loadHistoryIfNeeded) {
|
||||
this.$refs.chat.loadHistoryIfNeeded();
|
||||
}
|
||||
});
|
||||
// 每次页面显示时尝试加载历史记录
|
||||
if (this.$refs.chat && this.$refs.chat.loadHistoryIfNeeded) {
|
||||
this.$refs.chat.loadHistoryIfNeeded();
|
||||
}
|
||||
},
|
||||
|
||||
onHide() {
|
||||
|
||||
Reference in New Issue
Block a user