| | |
| | | srcset="" |
| | | /> |
| | | |
| | | <div class="flex" :class="{ 'w-full': item.role === RoleEnum.assistant }"> |
| | | <div class="inline-flex flex-col" :class="{ 'w-full': item.role === RoleEnum.assistant }"> |
| | | <div class="relative w-full" v-if="item.content?.values"> |
| | | <div |
| | | class="text-sm rounded-[6px] p-4 leading-relaxed" |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <Loding v-else :process="process" /> |
| | | <Loding v-else class="w-12" :process="process" /> |
| | | </div> |
| | | </div> |
| | | <div v-if="showAskMore" class="ml-4 mt-5 text-sm"> |
| | | <div class="text-gray-600 mb-5">你可以继续问我:</div> |
| | | <div class="space-y-2 inline-flex flex-col"> |
| | | <div |
| | | v-for="item in computedMessageList.at(-1).content.askMoreList" |
| | | :key="item.history_id" |
| | | class="bg-white p-3 hover:bg-[#c5e0ff] hover:text-[#1c86ff] cursor-pointer rounded-lg" |
| | | @click="askMoreClick(item)" |
| | | > |
| | | {{ item.question }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | import router from '/@/router'; |
| | | import { activeChatRoom, activeLLMId, activeRoomId, activeSampleId, activeSectionAId, roomConfig } from '/@/stores/chatRoom'; |
| | | import { v4 as uuidv4 } from 'uuid'; |
| | | import _ from 'lodash'; |
| | | |
| | | const chatWidth = '75%'; |
| | | |
| | |
| | | return messageList.value.filter((v) => v.role !== RoleEnum.system); |
| | | }); |
| | | |
| | | const showAskMore = computed(() => { |
| | | if (!computedMessageList.value || computedMessageList.value.length === 0) return false; |
| | | const last = computedMessageList.value.at(-1); |
| | | const isShow = last?.role === RoleEnum.assistant && last?.content?.values && last.content?.askMoreList?.length > 0; |
| | | return isShow; |
| | | }); |
| | | |
| | | const parseContent = (res) => { |
| | | let content: ChatContent = { |
| | | type: AnswerType.Text, |
| | | values: '发生错误!', |
| | | }; |
| | | |
| | | switch (res.answer_type) { |
| | | case AnswerType.RecordSet: |
| | | content = { |
| | |
| | | }; |
| | | break; |
| | | } |
| | | content.askMoreList = _.orderBy(res.context_history, [(item) => Number(item.radio)], ['desc']); |
| | | return content; |
| | | }; |
| | | //#region ====================== 查询进度 ====================== |
| | |
| | | }; |
| | | |
| | | const sendChatMessage = async (content: ChatContent = messageContent.value) => { |
| | | if (!messageContent.value?.values) return; |
| | | if (!content?.values) return; |
| | | if (messageList.value.length === 0) { |
| | | if (activeSampleId.value) { |
| | | currentSampleId = activeSampleId.value; |
| | |
| | | } |
| | | }; |
| | | |
| | | const askMoreClick = (item) => { |
| | | if (!item.question) return; |
| | | sendChatMessage({ type: AnswerType.Text, values: item.question }); |
| | | }; |
| | | |
| | | onMounted(async () => { |
| | | const res = await QueryHistoryDetail({ |
| | | history_group_id: currentRouteId, |