From 7802e53588d23f687bededab902fe06256a9b4e4 Mon Sep 17 00:00:00 2001 From: xueyinfei <1207092115@qq.com> Date: Thu, 1 Jan 2026 21:36:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=99=BA=E8=83=BD=E5=8A=A9=E6=89=8B?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/aichat/aichat.vue | 150 +++++++++--------- 1 file changed, 74 insertions(+), 76 deletions(-) diff --git a/vue-fastapi-frontend/src/views/aichat/aichat.vue b/vue-fastapi-frontend/src/views/aichat/aichat.vue index b651fe9..d7cde30 100644 --- a/vue-fastapi-frontend/src/views/aichat/aichat.vue +++ b/vue-fastapi-frontend/src/views/aichat/aichat.vue @@ -66,19 +66,6 @@ 回复中... - - - - - - - - - - - 停止回答 -
@@ -175,6 +162,7 @@
+ +
+ +
+
!(inputValue.value.trim()) ) - const emit = defineEmits(['scroll']) function setScrollBottom() { @@ -585,7 +578,7 @@ async function sendChatHandle(event) { if (inputValue.value.trim() && (chatList.value.length === 0|| (chatList.value[chatList.value.length - 1].isStop || chatList.value[chatList.value.length - 1].isEnd))) { - chatList.value.push({ + lastQuestion.value = { "chatId": uuidv4(), "type": "question", "content": inputValue.value.trim(), @@ -593,10 +586,8 @@ async function sendChatHandle(event) { "sessionId": Cookies.get("chatSessionId"), "sessionName": chatList.value.length > 0 ? chatList.value[0].content.substring(0, 20) : inputValue.value.trim().substring(0, 20), "file": currentFiles.value - }) - let question = JSON.parse(JSON.stringify(chatList.value[chatList.value.length - 1])) - question.file = JSON.stringify(question.file) - await addChat(question) + } + asking.value = true nextTick(() => { // 将滚动条滚动到最下面 scrollDiv.value.setScrollTop(getMaxHeight()) @@ -608,10 +599,9 @@ async function sendChatHandle(event) { "session_id": Cookies.get("chatSessionId"), "doc": currentFiles.value } - if (chatList.value.length > 1){ - // 判断为1 因为上方已将问题加入 chatList了 , >1 则视为已存在提问交互 + if (chatList.value.length > 0){ //取最新的checkpointer值 - data.checkpointer = chatList.value[chatList.value.length - 2].content.checkpointer + data.checkpointer = chatList.value[chatList.value.length - 1].content.checkpointer } currentQuestion.value = data inputValue.value = '' @@ -630,64 +620,71 @@ function sendChatMessage(data){ // chatList.value.push({"chatId":uuidv4(),"type":"answer","content":[{"type":"text","content":"服务异常,错误码:"+res.status}],"isEnd":true,"isStop":false,"sessionId":chatList.value[0].sessionId,"sessionName":chatList.value[0].sessionName,"operate":'',"thumbDownReason":''}) currentError.value = "服务异常,错误码:"+res.status +",请联系管理员!" }else { - currentError.value = '' - currentChatData.value = {} - currentFiles.value = [] - chatList.value.push({"chatId":uuidv4(),"type":"answer","content":[],"isEnd":false,"isStop":false,"sessionId":chatList.value[0].sessionId,"sessionName":chatList.value[0].sessionName, "operate":'',"thumbDownReason":''}) - const reader = res.body.getReader() - const write = getWrite(reader) - reader.read().then(write).then(()=> { - let answer = JSON.parse(JSON.stringify(chatList.value[chatList.value.length - 1])) - answer.content = JSON.stringify(answer.content) - answer.interrupt = answer.interrupt ? JSON.stringify(answer.interrupt): null - answer.checkpointer = JSON.stringify(answer.checkpointer) - addChat(answer) - }).then(()=>{ - let answer = JSON.parse(JSON.stringify(chatList.value[chatList.value.length - 1])) - if(answer.interrupt){ - let robot = answer.interrupt.robot - let block = answer.interrupt.block - let action = answer.interrupt.action - let autoRequest = false - if (autoProcess.value.autoArray.length > 0 && autoProcess.value.autoArray.indexOf(robot) !== -1){ - //自动审批信号有效,需判断 block内容的必填项,有无默认值,有的话,可以自动发送,没有需填写 - autoRequest = true - if (block && block.length>0){ - for (let i = 0; i < block.length; i++) { - if (block[i].required){ - if (block[i].ct_type === 'dateRangePicker' || block[i].ct_type === 'checkboxGroup' || block[i].ct_type === 'multiselect'){ - //default_value 是数组 - if (!block[i].default_value || block[i].default_value === []){ - autoRequest = false + chatList.value.push(lastQuestion.value) + let question = JSON.parse(JSON.stringify(lastQuestion.value)) + question.file = JSON.stringify(question.file) + addChat(question).then(()=>{ + currentError.value = '' + currentChatData.value = {} + currentFiles.value = [] + chatList.value.push({"chatId":uuidv4(),"type":"answer","content":[],"isEnd":false,"isStop":false,"sessionId":chatList.value[0].sessionId,"sessionName":chatList.value[0].sessionName, "operate":'',"thumbDownReason":''}) + const reader = res.body.getReader() + const write = getWrite(reader) + reader.read().then(write).then(()=> { + asking.value = false + let answer = JSON.parse(JSON.stringify(chatList.value[chatList.value.length - 1])) + answer.content = JSON.stringify(answer.content) + answer.interrupt = answer.interrupt ? JSON.stringify(answer.interrupt): null + answer.checkpointer = JSON.stringify(answer.checkpointer) + addChat(answer) + }).then(()=>{ + let answer = JSON.parse(JSON.stringify(chatList.value[chatList.value.length - 1])) + if(answer.interrupt){ + let robot = answer.interrupt.robot + let block = answer.interrupt.block + let action = answer.interrupt.action + let autoRequest = false + if (autoProcess.value.autoArray.length > 0 && autoProcess.value.autoArray.indexOf(robot) !== -1){ + //自动审批信号有效,需判断 block内容的必填项,有无默认值,有的话,可以自动发送,没有需填写 + autoRequest = true + if (block && block.length>0){ + for (let i = 0; i < block.length; i++) { + if (block[i].required){ + if (block[i].ct_type === 'dateRangePicker' || block[i].ct_type === 'checkboxGroup' || block[i].ct_type === 'multiselect'){ + //default_value 是数组 + if (!block[i].default_value || block[i].default_value === []){ + autoRequest = false + } } - } - if (block[i].ct_type === 'datePicker' || block[i].ct_type === 'input' || block[i].ct_type === 'radioGroup' ||block[i].ct_type === 'select'){ - //default_value 是文字 - if (!block[i].default_value || block[i].default_value.trim() === ''){ - autoRequest = false + if (block[i].ct_type === 'datePicker' || block[i].ct_type === 'input' || block[i].ct_type === 'radioGroup' ||block[i].ct_type === 'select'){ + //default_value 是文字 + if (!block[i].default_value || block[i].default_value.trim() === ''){ + autoRequest = false + } } } } } - } - if (autoRequest){ - let reqData = { - "user_id": cache.local.get("username"), - "session_id": Cookies.get("chatSessionId"), - "checkpointer": answer.checkpointer, - "action":"", - "resume": true, - "block": block - } - for (let i = 0; i < action.length; i++) { - if (action[i].style === 'primary'){ - reqData.action = action[i].action + if (autoRequest){ + let reqData = { + "user_id": cache.local.get("username"), + "session_id": Cookies.get("chatSessionId"), + "checkpointer": answer.checkpointer, + "action":"", + "resume": true, + "block": block + } + for (let i = 0; i < action.length; i++) { + if (action[i].style === 'primary'){ + reqData.action = action[i].action + } } + asking.value = true + sendChatMessage(reqData) } - sendChatMessage(reqData) } } - } + }) }) } }).catch((e) => { @@ -695,8 +692,6 @@ function sendChatMessage(data){ }) } - - watch( chatList, () => { @@ -789,18 +784,21 @@ const getWrite = (reader) => { return write_stream; }; -const stopChat = (index) => { +const stopChat = () => { if (currentJobId.value !== ''){ cancelJob({job_id:currentJobId.value}) } - chatList.value[index].isStop = true + if (chatList.value.length > 0 || chatList.value[chatList.value.length - 1].type === 'answer'){ + chatList.value[chatList.value.length - 1].isStop = true + } if (controller.value !== null){ controller.value.abort() } - let answer = JSON.parse(JSON.stringify(chatList.value[index])) + let answer = JSON.parse(JSON.stringify(chatList.value[chatList.value.length - 1])) answer.content = JSON.stringify(answer.content) addChat(answer) currentJobId.value = '' + asking.value = false } // const startChat = (index) => { From 52a3db54f98c10cfd80a0627b8d6628409eef608 Mon Sep 17 00:00:00 2001 From: xueyinfei <1207092115@qq.com> Date: Thu, 1 Jan 2026 21:45:58 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vue-fastapi-frontend/src/views/tool/swagger/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vue-fastapi-frontend/src/views/tool/swagger/index.vue b/vue-fastapi-frontend/src/views/tool/swagger/index.vue index ff4526a..a0c8754 100644 --- a/vue-fastapi-frontend/src/views/tool/swagger/index.vue +++ b/vue-fastapi-frontend/src/views/tool/swagger/index.vue @@ -5,5 +5,5 @@ From 7e77b3b4d0cacdd40a5eeb956cdd10793966e5b2 Mon Sep 17 00:00:00 2001 From: xueyinfei <1207092115@qq.com> Date: Thu, 1 Jan 2026 22:01:44 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E5=8E=BB=E6=8A=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/meta/metasercurity/MetaSecurityCol.vue | 4 ++-- .../src/views/meta/metasercurity/MetaSecurityRow.vue | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue b/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue index f505f71..54c9fb6 100644 --- a/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue +++ b/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityCol.vue @@ -24,11 +24,11 @@ @node-click="handleNodeClick" >
diff --git a/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue b/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue index d0890bd..f04fca8 100644 --- a/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue +++ b/vue-fastapi-frontend/src/views/meta/metasercurity/MetaSecurityRow.vue @@ -24,11 +24,11 @@ @node-click="handleNodeClick" >