|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <!--      内容--> | 
|---|
|  |  |  | <div class="header___lEPyH"> | 
|---|
|  |  |  | <div class="chatHeader"> | 
|---|
|  |  |  | <div class="chatHeaderBox"> | 
|---|
|  |  |  | <span class="title">{{agentTitle}}</span> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <a-scrollbar | 
|---|
|  |  |  | ref="scrollbar" | 
|---|
|  |  |  | id="agentHome" | 
|---|
|  |  |  | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import { defineProps, ref, watch, defineEmits, onMounted, reactive, computed, nextTick } from "vue"; | 
|---|
|  |  |  | import { defineProps, ref, watch, defineEmits, onMounted, reactive, computed, nextTick, onBeforeUnmount } from "vue"; | 
|---|
|  |  |  | import { Message } from '@arco-design/web-vue'; | 
|---|
|  |  |  | import { useAppStore } from "@/store"; | 
|---|
|  |  |  | import { getAuthorization } from "@/utils/auth"; | 
|---|
|  |  |  | 
|---|
|  |  |  | const dialogId = ref(''); | 
|---|
|  |  |  | const chatDis = ref(false); | 
|---|
|  |  |  | const loading = ref(false); | 
|---|
|  |  |  | const agentTitle = ref("未命名会话"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const currIndex = ref(0); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 初始化页面 | 
|---|
|  |  |  | const initPage = async () => { | 
|---|
|  |  |  | agentSet(); | 
|---|
|  |  |  | agentReset(); | 
|---|
|  |  |  | agentCompletion(); | 
|---|
|  |  |  | queryAgentSessionDetail(agentObj.id); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const createNewAgent = async (session) => { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (res.code == 0) { | 
|---|
|  |  |  | // sessionDetailList.value = res.data.dsl.messages; | 
|---|
|  |  |  | // Message.success('修改成功'); | 
|---|
|  |  |  | agentReset(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 调用reset方法 | 
|---|
|  |  |  | 
|---|
|  |  |  | const res = await agentResetApi({ | 
|---|
|  |  |  | id: agentObj.id, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | if (res.code === 200) { | 
|---|
|  |  |  | if (res.code == 0) { | 
|---|
|  |  |  | // Message.success('修改成功'); | 
|---|
|  |  |  | agentCompletion(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 调用completion方法 | 
|---|
|  |  |  | 
|---|
|  |  |  | .pipeThrough(new EventSourceParserStream()) | 
|---|
|  |  |  | .getReader(); | 
|---|
|  |  |  | currIndex.value = 0; | 
|---|
|  |  |  | // while (true) { | 
|---|
|  |  |  | //   const x = await reader?.read(); | 
|---|
|  |  |  | //   if (x) { | 
|---|
|  |  |  | //     const { done, value } = x; | 
|---|
|  |  |  | //     console.log(x, 999); | 
|---|
|  |  |  | //     try { | 
|---|
|  |  |  | //       const val = JSON.parse(value?.data || ''); | 
|---|
|  |  |  | //       const d = val?.data; | 
|---|
|  |  |  | //       if (typeof d !== 'boolean') { | 
|---|
|  |  |  | //         console.info('data:', d); | 
|---|
|  |  |  | //         streamStr.value = d.content; | 
|---|
|  |  |  | //         startDisplayStr(); | 
|---|
|  |  |  | //       } | 
|---|
|  |  |  | //     } catch (e) { | 
|---|
|  |  |  | //       console.warn(e); | 
|---|
|  |  |  | //     } | 
|---|
|  |  |  | //     if (done) { | 
|---|
|  |  |  | //       console.info('done'); | 
|---|
|  |  |  | //       displayedText.value = ''; | 
|---|
|  |  |  | //       queryAgentSessionDetail(agentObj.id); | 
|---|
|  |  |  | //       break; | 
|---|
|  |  |  | //     } | 
|---|
|  |  |  | //   } | 
|---|
|  |  |  | // } | 
|---|
|  |  |  | while (true) { | 
|---|
|  |  |  | const x = await reader?.read(); | 
|---|
|  |  |  | if (x) { | 
|---|
|  |  |  | const { done, value } = x; | 
|---|
|  |  |  | console.log(x, 999); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | const val = JSON.parse(value?.data || ''); | 
|---|
|  |  |  | const d = val?.data; | 
|---|
|  |  |  | if (typeof d !== 'boolean') { | 
|---|
|  |  |  | console.info('data:', d); | 
|---|
|  |  |  | streamStr.value = d.content; | 
|---|
|  |  |  | startDisplayStr(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | console.warn(e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (done) { | 
|---|
|  |  |  | console.info('done'); | 
|---|
|  |  |  | displayedText.value = ''; | 
|---|
|  |  |  | queryAgentSessionDetail(agentObj.id); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | chatDis.value = false; | 
|---|
|  |  |  | loading.value = false; | 
|---|
|  |  |  | inputMsg.value = ''; | 
|---|
|  |  |  | 
|---|
|  |  |  | if (code == 0) { | 
|---|
|  |  |  | console.log(data,'会话详情'); | 
|---|
|  |  |  | sessionDetailList.value = data.dsl.messages; | 
|---|
|  |  |  | agentTitle.value = data.name || '未命名会话'; | 
|---|
|  |  |  | refreshScroll(); //刷新滚动条位置 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | 
|---|
|  |  |  | EventBus.on('createAgent', (data) => { | 
|---|
|  |  |  | createNewAgent(data); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | onBeforeUnmount(() => { | 
|---|
|  |  |  | EventBus.off('createAgent'); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | watch( | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .header___lEPyH { | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | height: 46px; | 
|---|
|  |  |  | position: relative; | 
|---|
|  |  |  | backdrop-filter: blur(15px); | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | justify-content: center; | 
|---|
|  |  |  | -webkit-backdrop-filter: blur(15px); | 
|---|
|  |  |  | .chatHeaderBox { | 
|---|
|  |  |  | width: auto; | 
|---|
|  |  |  | border-radius: 8px; | 
|---|
|  |  |  | padding: 4px 20px; | 
|---|
|  |  |  | transition: all var(--animation-duration) var(--animation-transition); | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: flex-end; | 
|---|
|  |  |  | overflow: hidden;        /* 隐藏超出的内容 */ | 
|---|
|  |  |  | text-overflow: ellipsis; /* 使用省略号来代替被隐藏的文字 */ | 
|---|
|  |  |  | white-space: nowrap;     /* 不换行,使内容在一行内显示 */ | 
|---|
|  |  |  | max-width: 200px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|