From 1075860848d14e3d6d1506b91d9c9039433bf4cc Mon Sep 17 00:00:00 2001 From: wujingjing <gersonwu@qq.com> Date: 星期一, 03 三月 2025 17:40:13 +0800 Subject: [PATCH] 合并附件和业务表格 --- src/components/chat/Chat.vue | 115 ++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 77 insertions(+), 38 deletions(-) diff --git a/src/components/chat/Chat.vue b/src/components/chat/Chat.vue index 08b5198..08badfb 100644 --- a/src/components/chat/Chat.vue +++ b/src/components/chat/Chat.vue @@ -76,7 +76,7 @@ } from '/@/stores/chatRoom'; import emitter from '/@/utils/mitt'; import { useCompRef } from '/@/utils/types'; -import { toMyFixed } from '/@/utils/util'; +import { toFormData, toMyFixed } from '/@/utils/util'; import { useLoadData } from './hooks/useLoadData'; import { useSyncMsg } from './hooks/useSyncMsg'; import { getCurrentPosition } from '/@/utils/brower'; @@ -85,7 +85,15 @@ const scrollToBottom = () => { containerRef.value?.scrollToBottom(); }; -const { loadReplyData, parseContent, parseExtraContent, convertProcessItem, convertProcessToStep, formatShowTimeYear } = useLoadData(); +const { + loadReplyData, + parseContent, + parseExtraContent, + convertProcessItem, + convertProcessToStep, + formatShowTimeYear, + getStepGroupList, +} = useLoadData(); const voicePageIsShow = ref(false); let isTalking = ref(false); const chatWidth = computed(() => containerRef.value?.chatWidth); @@ -114,6 +122,8 @@ isTalking.value = !isTalking.value; }); }; + +let streamOutputIsStart = false; let position: Position = null; const questionAi = async (text) => { let judgeParams = null; @@ -131,22 +141,26 @@ raw_mode: roomConfig.value?.[currentRouteId]?.isAnswerByLLM ?? false, ...judgeParams, } as any; - - if (!position) { - const loadingInstance = ElLoadingService({ - text: '鑾峰彇浣嶇疆涓�...', - target: '.layout-parent', - fullscreen:false, - }); - position = await getCurrentPosition().finally(() => { - loadingInstance.close(); - }); + const tableList = attachList.value.filter((item) => item.type === 'table').map((item) => item.model); + if (tableList?.length > 0) { + params.tables = JSON.stringify(tableList); } - if (position) { - const { latitude, longitude } = position; - params.cur_pos = [longitude, latitude].join(','); - } + // if (!position) { + // const loadingInstance = ElLoadingService({ + // text: '鑾峰彇浣嶇疆涓�...', + // target: '.layout-parent', + // fullscreen:false, + // }); + // position = await getCurrentPosition().finally(() => { + // loadingInstance.close(); + // }); + // } + + // if (position) { + // const { latitude, longitude } = position; + // params.cur_pos = [longitude, latitude].join(','); + // } if (activeGroupType.value) { params.group_type = activeGroupType.value; @@ -156,7 +170,12 @@ params.sample_id = currentSampleId; currentSampleId = ''; } - + const formDataParams = toFormData(params); + 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; @@ -176,10 +195,9 @@ return isEmpty; }; questionStreamByPost( - params, + formDataParams, (chunkRes) => { Logger.info('chunk response锛歕n\n' + JSON.stringify(chunkRes)); - if (chunkRes.mode === 'result') { lastIsResult = true; const res = chunkRes.value; @@ -307,29 +325,44 @@ }); lastIsResult = false; } - const lastGroup = computedMessageList.value.at(-1).stepGroup[0]; + const lastGroup = getLastGroup(); const stepList = lastGroup?.value ?? []; const currentTimeStamp = new Date().getTime(); - const ms = toMyFixed(currentTimeStamp - lastTimestamp, 2) + ' ms'; if (chunkRes.mode === 'finish') { + const ms = toMyFixed(currentTimeStamp - lastTimestamp, 2) + ' ms'; stepList.at(-1).ms = ms; isTalking.value = false; + streamOutputIsStart = false; return; } - if (stepList?.length >= 1) { + if (stepList?.length >= 1 && !streamOutputIsStart) { + const ms = toMyFixed(currentTimeStamp - lastTimestamp, 2) + ' ms'; + stepList.at(-1).ms = ms; + } + + if (!streamOutputIsStart) { + lastTimestamp = currentTimeStamp; + } + if (!streamOutputIsStart) { + const stepItem = convertProcessItem(chunkRes); + stepList.push(stepItem); } else { - const stepGroup = computedMessageList.value.at(-1).stepGroup; - if (stepGroup.length > 1) { - const lastStepList = stepGroup.at(-2).value; - lastStepList.at(-1).ms = ms; + const lastItem = stepList.at(-1); + if (lastItem) { + lastItem.title += chunkRes.value ?? ''; } } - lastTimestamp = currentTimeStamp; - const stepItem = convertProcessItem(chunkRes); - stepList.push(stepItem); + if (chunkRes.mode === 'begin_stream') { + streamOutputIsStart = true; + lastTimestamp = currentTimeStamp; + } + if (chunkRes.mode === 'end_stream') { + streamOutputIsStart = false; + } + // 寮哄埗瑙﹀彂鏇存柊 scrollToBottom(); @@ -354,12 +387,14 @@ const content = parseContent(questionRes, true); return content; }; - -const clearMessageContent = () => - (messageContent.value = { +const playBarRef = useCompRef(PlayBar); +const attachList = computed(() => playBarRef.value?.attachList ?? []); +const clearMessageContent = () => { + messageContent.value = { type: AnswerType.Text, values: '', - }); + }; +}; let currentSampleId = ''; @@ -408,6 +443,13 @@ messageList.value.push(assistantItem); scrollToBottom(); return [userItem, assistantItem]; +}; + +/** + * 娓呴櫎闄勪欢 + */ +const clearAttach = () => { + playBarRef.value?.clearAttach(); }; const sendChatMessage = async (content: ChatContent = messageContent.value) => { @@ -519,10 +561,8 @@ historyId: msgValue.history_id, role: RoleEnum.assistant, content: parseContent(msgValue), - stepGroup: (msgValue?.reports ?? []).map((item) => ({ - value: convertProcessToStep(item?.exec_process), - isShow: false, - })), + stepGroup: getStepGroupList(msgValue?.reports ?? []), + isStopMsg: false, conclusion: msgValue.conclusion ?? [], @@ -571,7 +611,6 @@ messageContent.value.values = content; }; //#endregion -const playBarRef = useCompRef(PlayBar); //鐢ㄦ埛闂璁剧疆涓哄父鐢ㄨ const setCommonPhraseClick = (item) => { playBarRef.value.addPhrase(item); -- Gitblit v1.9.3