From e68fe35cf5e47ec2c931da675e47a08ee1e9cdef Mon Sep 17 00:00:00 2001 From: SeasonsChange <1204992313@qq.com> Date: Sat, 23 Aug 2025 14:26:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=81=8A=E5=A4=A9=E9=A1=B5=E9=9D=A2):=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=8A=82=E7=82=B9=E9=80=89=E4=B8=AD=E6=97=B6?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E7=8A=B6=E6=80=81=E6=81=A2=E5=A4=8D=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 改进问题节点状态恢复逻辑,支持从JSON格式或问题文本格式恢复问题状态。当选中用户回答节点时,尝试从其父节点恢复问题状态。无法恢复时清除当前问题状态。 --- .../src/components/Chat/AIChatPage.vue | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/prompto-lab-ui/src/components/Chat/AIChatPage.vue b/prompto-lab-ui/src/components/Chat/AIChatPage.vue index 63308f2..a0fefac 100644 --- a/prompto-lab-ui/src/components/Chat/AIChatPage.vue +++ b/prompto-lab-ui/src/components/Chat/AIChatPage.vue @@ -891,10 +891,45 @@ const handleNodeSelected = (nodeId: string) => { activatePath(nodeId) currentNodeId.value = nodeId - // 如果选中的是问题节点,恢复问题状态 - if (targetNode.type === 'assistant' && targetNode.content.includes('问题')) { - // 尝试解析并恢复问题状态 - // 这里需要根据实际的问题格式来实现 + // 根据节点类型设置currentQuestion + if (targetNode.type === 'assistant') { + // 尝试恢复问题状态 + try { + // 方法1: 尝试解析content中的JSON格式问题数据 + const questionData = JSON.parse(targetNode.content) + if (questionData.type && ['input', 'single', 'multi', 'form'].includes(questionData.type)) { + currentQuestion.value = questionData + console.log('恢复问题状态:', questionData) + return + } + } catch (e) { + // 如果不是JSON格式,检查是否是问题文本格式 + console.log('非JSON格式,检查是否为问题文本') + } + + // 方法2: 如果是问题文本但不是JSON格式,清除问题状态 + // 这种情况下显示为普通对话 + currentQuestion.value = null + } else if (targetNode.type === 'user') { + // 如果点击的是用户节点,查找对应的问题节点 + if (targetNode.parentId) { + const questionNode = conversationTree.value.get(targetNode.parentId) + if (questionNode && questionNode.type === 'assistant') { + try { + // 尝试解析父节点(问题节点)的问题数据 + const questionData = JSON.parse(questionNode.content) + if (questionData.type && ['input', 'single', 'multi', 'form'].includes(questionData.type)) { + currentQuestion.value = questionData + console.log('从用户回答节点恢复问题状态:', questionData) + return + } + } catch (e) { + console.log('用户节点对应的问题节点不是JSON格式') + } + } + } + // 如果无法找到对应的问题,清除问题状态 + currentQuestion.value = null } } }