From fd15b2a99a4ebd476a54671c560b3a89f69b621e Mon Sep 17 00:00:00 2001 From: zhangxiao <898441624@qq.com> Date: 星期二, 27 八月 2024 10:26:42 +0800 Subject: [PATCH] feat: 修改bug --- src/views/sessionManager/index.vue | 208 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 176 insertions(+), 32 deletions(-) diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue index 96bc8bb..a46713c 100644 --- a/src/views/sessionManager/index.vue +++ b/src/views/sessionManager/index.vue @@ -87,30 +87,114 @@ <template #avatar> <img class="icon-user-jpg" - src="../../assets/images/icon-chart.png" + src="../../assets/images/icon-picture.png" alt="鏈湴鍥剧墖" /> </template> <template #content> - <!-- <a-card :class="{ chatItemAnswer: theme === 'light' }">--> - <!-- <div--> - <!-- :class="{ light: theme === 'light' }"--> - <!-- v-html="sessionDetail.content.replace(/\n/g, '<br/>')"--> - <!-- >--> - <!-- </div>--> - <!-- </a-card>--> - <a-textarea - readonly - auto-size - v-model="sessionDetail.content" - :class="{ chatItemAnswer: theme === 'light' }" - :style="{ + <a-card v-if="isExistTip(sessionDetail.content)"> + <div + :class="{ chatItemAnswer: theme === 'light' }" + :style="{ + backgroundColor: + theme === 'light' ? '#ffffff' : '#000000', + }" + style="border: none;" + v-for="(breakContent, breakIndex) in breakLine(sessionDetail.content)" + > + <div + :class="{ chatItemAnswer: theme === 'light' }" + :style="{ + backgroundColor: + theme === 'light' ? '#ffffff' : '#000000', + }" + style="border: none;" + v-if="isExistTip(breakContent)"> + <div + :class="{ chatItemAnswer: theme === 'light' }" + :style="{ + backgroundColor: + theme === 'light' ? '#ffffff' : '#000000', + }" + style="border: none;" + v-for="(item, tipIndex) in tipMatch(breakContent)" + > + <span v-if="tipIndex == 0"> + {{ breakContent.substring(0, item.index) }} + <a-tooltip + background-color="#3491FA" + :content=" + getTipContent(messagenList.reference, index) + " + > + <img + style="width: 20px; height: 20px" + :src="tipImage" + /> + </a-tooltip> + </span> + <span v-else-if ="tipIndex == item.len - 1"> + {{ + breakContent.substring( + item.preIndex + item.item.length, + item.index + ) + }} + <a-tooltip + background-color="#3491FA" + :content=" + getTipContent(messagenList.reference, index) + " + > + <img + style="width: 20px; height: 20px" + :src="tipImage" + /> + </a-tooltip> + {{ + breakContent.substring(item.index+5) + }} + </span> + <span v-else> + {{ + breakContent.substring( + item.preIndex + item.item.length, + item.index + ) + }} + <a-tooltip + background-color="#3491FA" + :content=" + getTipContent(messagenList.reference, index) + " + > + <img + style="width: 20px; height: 20px" + :src="tipImage" + /> + </a-tooltip> + </span> + </div> + </div> + <div v-else> + {{ breakContent }} + </div> + </div> + </a-card> + <a-card v-else> + <a-textarea + readonly + auto-size + v-model="sessionDetail.content" + :class="{ chatItemAnswer: theme === 'light' }" + :style="{ backgroundColor: theme === 'light' ? '#ffffff' : '#000000', }" - style="border: none" - > - </a-textarea> + style="border: none" + > + </a-textarea> + </a-card> </template> <!-- <div>{{ sessionDetail.role === 'assistant' }}</div> --> <template #actions> @@ -159,7 +243,7 @@ <template #avatar> <img class="icon-user-jpg" - src="../../assets/images/icon-chart.png" + src="../../assets/images/icon-picture.png" alt="鏈湴鍥剧墖" /> </template> @@ -340,6 +424,12 @@ </div> </a-col> </a-row> + <a-modal title=" " v-model:visible="fileVisible" :footer="false" fullscreen> + <!-- <docx previewSrc="http://192.168.20.116:1080/v1/document/get/405c3efa4d8c11ef97560242ac120006"></docx>--> + <docx v-if="documenttype == 'docx'" :previewSrc="previewSrc"></docx> + <excel v-if="documenttype == 'excel'" :previewSrc="previewSrc"></excel> + <txtPdf v-if="documenttype == 'txtPdf'" :previewSrc="previewSrc"></txtPdf> + </a-modal> <a-modal v-model:visible="visible" title="淇敼鍚嶇О" @@ -368,7 +458,7 @@ </div> </template> <script setup lang="ts"> - import { useAppStore, useUserStore } from '@/store'; + import { useAppStore, userModelState, useUserStore } from '@/store'; import { computed, nextTick, @@ -407,6 +497,12 @@ import pdfImg3 from '@/assets/session/execl.png'; import pdfImg4 from '@/assets/session/icon-txt.png'; import pdfImg5 from '@/assets/session/txt.png'; + import tipImage from '@/assets/session/tip.png'; + + import docx from '@/views/dmx/knowledgeLib/components/docx.vue'; + import excel from '@/views/dmx/knowledgeLib/components/excel.vue'; + import txtPdf from '@/views/dmx/knowledgeLib/components/txtPdf.vue'; + import { is } from "immutable"; // const url = ref('../../assets/session/PDF.png'); @@ -450,7 +546,13 @@ const fileInput = ref(null); const chatDataMeg = reactive({}); const visible = ref(false); + const fileVisible = ref(false); let toStop = false; + let documenttype = ref('docx'); + let previewSrc = ref(''); + + const modelStore = userModelState(); + const httpUrl = modelStore.hrefUrl; const rules = { name: [ @@ -476,8 +578,35 @@ } }; let dataItem = []; - const getTxt = (data, role, message, index) => { + const isExistTip = (message: string): boolean => { if (/##[0-9]\$\$/.test(message)) { + return true; + } else { + return false; + } + }; + + const breakLine = (message: string): string[] => { + //鎸塡n鍒嗗壊瀛楃涓� + let arr = message.split('\n'); + return arr + } + + const tipMatch = (msg: string): any[] => { + //match session.content涓殑##[0-9]$$鐨勭储寮� + let indexs: any[] = []; + let preTip = 0; + let matches=msg.match(/##([0-9]+)\$\$/g) + matches?.map((item) => { + let i = msg.indexOf(item); + indexs.push({ index: i, item: item, preIndex: preTip, len: matches.length }); + preTip = i; + }); + return indexs; + }; + + const getTxt = (data, role, message, index) => { + if (isExistTip(message)) { if (role == 'assistant' && index) { let i = index / 2 - 1 > 0 ? index / 2 - 1 : 0; dataItem = data[i].doc_aggs; @@ -489,13 +618,23 @@ return dataItem; }; - const clickHref = (item) => { - // return Message.warning('鏆傛棤娉曟煡鐪�'); - // window.open(`/api/v1/document/get/${item.doc_id}`, '_blank'); - downloadFile({ - url: `/api/v1/document/get/${item.doc_id}`, - filename: item.doc_name, + const getTipContent = (data, index): string => { + let maxSimilarityContent = ''; + let i = index / 2 - 1 > 0 ? index / 2 - 1 : 0; + let maxSimilarity = 0; + data[i].chunks.forEach((chunk) => { + if (chunk.similarity > maxSimilarity) { + maxSimilarity = chunk.similarity; + maxSimilarityContent = chunk.content_with_weight; + } }); + return maxSimilarityContent; + }; + + const clickHref = async (item) => { + documenttype.value = item.doc_name.split('.').pop(); + previewSrc.value = httpUrl + `/api/v1/document/get/${item.doc_id}`; + fileVisible.value = true; }; const downloadFile = ({ @@ -559,7 +698,7 @@ const selectFileCallback = (data) => { console.log(data, 'selectFileCallback'); - uploaditemList.value = data; + uploaditemList.value = [...uploaditemList.value, ...data]; }; let onFileSelectedLoading = ref(false); @@ -644,6 +783,7 @@ // 鍙戦�� const sentClick = () => { sendMessage('click'); + uploaditemList.value = []; }; // 閲嶆柊鐢熸垚 const reGenerate = () => { @@ -669,7 +809,6 @@ //鏂板缓浼氳瘽 // 濡傛灉鏈変細璇漣d console.log(inputMsg.value, '鏂板缓浼氳瘽鍚嶇О'); - const res = await addSessionApi({ dialog_id: '', conversation_desc: inputMsg.value, @@ -678,9 +817,15 @@ if (res.code == 200) { // console.log(res.data.conversation_id); activeSessionId.value = res.data?.conversation_id; - startChat(inputMsg.value); - inputMsg.value = ''; - // queryNewSessionDetail(res.data?.conversation_id); + const { code, data } = await getSessionDetailsApi( + res.data?.conversation_id + ); + if (code === 200) { + console.log(data, '鏂板缓浼氳瘽璇︽儏'); + Object.assign(chatObj, data); + startChat(inputMsg.value); + inputMsg.value = ''; + } } else { Message.error('鍒涘缓浼氳瘽澶辫触锛岃閲嶈瘯'); } @@ -793,7 +938,6 @@ sessionDetailList.value = sessionDetailList.value .splice(0, sessionDetailList.value.length - 2) .concat(lastArr); - console.log(sessionDetailList.value, 'sessionDetailList2'); console.log(chatObj, 'chatObj瀵硅薄'); chatObj.message = chatObj.message.concat(lastArr); -- Gitblit v1.8.0