From f07405d8787e8bbd43453c81ec4f599dc34153b9 Mon Sep 17 00:00:00 2001 From: wujingjing <gersonwu@qq.com> Date: 星期三, 02 四月 2025 16:44:34 +0800 Subject: [PATCH] Merge branch 'master' into huishui_iframe --- src/components/chat/Chat.vue | 77 ++++++++++++++++++++++++++++++-------- 1 files changed, 60 insertions(+), 17 deletions(-) diff --git a/src/components/chat/Chat.vue b/src/components/chat/Chat.vue index 1878d17..771c7ab 100644 --- a/src/components/chat/Chat.vue +++ b/src/components/chat/Chat.vue @@ -48,7 +48,6 @@ <script setup lang="ts"> import type { CancelTokenSource } from 'axios'; import axios from 'axios'; -import { orderBy } from 'lodash-es'; import moment from 'moment'; import { computed, nextTick, onActivated, onMounted, ref } from 'vue'; import { loadAmisSource } from '../amis/load'; @@ -60,7 +59,7 @@ import CustomDrawer from '/@/components/drawer/CustomDrawer.vue'; import { Logger } from '/@/model/logger/Logger'; import { triggerRef } from 'vue'; -import { ElLoadingService, ElMessage } from 'element-plus'; +import { ElMessage } from 'element-plus'; import ChatContainer from './components/ChatContainer.vue'; import ShareLinkDlg from './components/shareLink/index.vue'; import router from '/@/router'; @@ -80,9 +79,11 @@ import { useLoadData } from './hooks/useLoadData'; import { useSyncMsg } from './hooks/useSyncMsg'; import { getCurrentPosition } from '/@/utils/brower'; +import { deepClone } from '/@/utils/other'; +import { ParentRegister } from '/@/stores/global'; const containerRef = useCompRef(ChatContainer); const chatListDom = computed(() => containerRef.value?.chatListDom); -const attachFileList = computed(() => playBarRef.value?.attachFileList ?? []); + const scrollToBottom = () => { containerRef.value?.scrollToBottom(); }; @@ -92,6 +93,7 @@ parseExtraContent, convertProcessItem, convertProcessToStep, + convertAttach, formatShowTimeYear, getStepGroupList, } = useLoadData(); @@ -124,6 +126,8 @@ }); }; +const enableCallback = ref(false); + let streamOutputIsStart = false; let position: Position = null; const questionAi = async (text) => { @@ -142,10 +146,15 @@ raw_mode: roomConfig.value?.[currentRouteId]?.isAnswerByLLM ?? false, ...judgeParams, } as any; - if(businessTableData.value?.length > 0) { - params.tables = JSON.stringify(businessTableData.value); + const tableList = attachList.value.filter((item) => item.type === 'table').map((item) => item.model); + if (tableList?.length > 0) { + params.tables = JSON.stringify(tableList); } - + + const metricList = attachList.value.filter((item) => item.type === 'metric').map((item) => item.model); + if (metricList?.length > 0) { + params.metrics = JSON.stringify(metricList); + } // if (!position) { // const loadingInstance = ElLoadingService({ // text: '鑾峰彇浣嶇疆涓�...', @@ -171,9 +180,11 @@ currentSampleId = ''; } const formDataParams = toFormData(params); - for (const item of attachFileList.value) { + const fileList = attachList.value.filter((item) => item.type === 'file').map((item) => item.model); + for (const item of fileList) { formDataParams.append('files', item.file); } + // clearAttach(); let lastTimestamp = new Date().getTime(); questionRes = {}; let lastIsResult = false; @@ -222,6 +233,26 @@ triggerRefresh(); return; // chunkRes.value = '鍑嗗鏁版嵁鍒嗘瀽'; + } + + if (chunkRes.mode === 'main_frame') { + const jsonObj = JSON.parse(chunkRes.value); + if (!enableCallback.value) { + return; + } + + ParentRegister.notify?.({ + type: 'main_frame', + value: jsonObj, + }); + return; + } + + if (chunkRes.mode === 'create_work_order') { + const lastMsg = computedMessageList.value.at(-1); + lastMsg.modeContent = chunkRes; + triggerRefresh(); + return; } if (chunkRes.mode === 'summary') { @@ -273,10 +304,12 @@ if (chunkRes.mode === 'conclusion') { const lastReport = computedMessageList.value.at(-1)?.content?.values?.at(-1); + if (lastReport) { lastReport.conclusion = chunkRes.value; - chunkRes.value = '鍒嗘瀽缁撴潫'; } + chunkRes.value = '鍒嗘瀽缁撴潫'; + } const getLastGroup = () => { const lastGroup = computedMessageList.value.at(-1).stepGroup[0]; @@ -348,7 +381,9 @@ stepList.push(stepItem); } else { const lastItem = stepList.at(-1); - lastItem.title += chunkRes.value ?? ''; + if (lastItem) { + lastItem.title += chunkRes.value ?? ''; + } } if (chunkRes.mode === 'begin_stream') { @@ -384,14 +419,13 @@ return content; }; const playBarRef = useCompRef(PlayBar); -const businessTableData = computed(() => playBarRef.value?.businessTableData ?? []); -const clearMessageContent = () => - (messageContent.value = { +const attachList = computed(() => playBarRef.value?.attachList ?? []); +const clearMessageContent = () => { + messageContent.value = { type: AnswerType.Text, values: '', - }); - playBarRef.value?.clearFileList(); - playBarRef.value?.clearBusinessTable(); + }; +}; let currentSampleId = ''; @@ -401,7 +435,7 @@ lastAxiosSource?.cancel(); isTalking.value = false; chatListLoading.value = false; - + streamOutputIsStart = false; computedMessageList.value.at(-1).isStopMsg = true; }; @@ -418,7 +452,7 @@ const addChatItem = (content: ChatContent) => { isTalking.value = true; - const userItem: ChatMessage = { role: RoleEnum.user, content, isChecked: false } as any; + const userItem: ChatMessage = { role: RoleEnum.user, content, isChecked: false, attachList: deepClone(attachList.value) } as any; const assistantItem: ChatMessage = { role: RoleEnum.assistant, content: { @@ -431,6 +465,7 @@ isShow: true, }, ], + isStopMsg: false, isChecked: false, } as any; @@ -440,6 +475,13 @@ messageList.value.push(assistantItem); scrollToBottom(); return [userItem, assistantItem]; +}; + +/** + * 娓呴櫎闄勪欢 + */ +const clearAttach = () => { + playBarRef.value?.clearAttach(); }; const sendChatMessage = async (content: ChatContent = messageContent.value) => { @@ -544,6 +586,7 @@ type: AnswerType.Text, values: msgValue.question, }, + attachList: convertAttach(msgValue), isChecked: false, }; -- Gitblit v1.9.3