From 234c222e4fd9d24242440e0207bd5ccfa1bac471 Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期四, 29 八月 2024 21:08:30 +0800
Subject: [PATCH] fix: 审计

---
 src/views/sessionManager/components/agentSession.vue | 1265 +++++++++++++++++++++++++++++++-------------------------
 1 files changed, 698 insertions(+), 567 deletions(-)

diff --git a/src/views/sessionManager/components/agentSession.vue b/src/views/sessionManager/components/agentSession.vue
index 73eb7fb..2e65936 100644
--- a/src/views/sessionManager/components/agentSession.vue
+++ b/src/views/sessionManager/components/agentSession.vue
@@ -3,13 +3,18 @@
   <div class="header___lEPyH">
     <div class="chatHeader">
       <div class="chatHeaderBox">
-<!--        <span class="title">{{agentTitle}}</span>-->
-        <a-popover
-          position="bottom"
-          trigger="click"
-        >
-          <a-button border
-          >{{agentTitle}}
+        <!--        <span class="title">{{agentTitle}}</span>-->
+        <a-popover position="bottom" trigger="click">
+          <a-button border>
+            <span
+              style="
+                width: 100px;
+                overflow: hidden;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+              "
+              >{{ from.name }}</span
+            >
             <icon-down style="margin-left: 4px" />
           </a-button>
           <template #content>
@@ -35,13 +40,13 @@
     id="agentHome"
     class="chat-list"
     style="
-              width: 80%;
-              overflow: auto;
-              height: calc(100vh - 380px);
-              margin: 0px auto 20px;
-            "
+      width: 80%;
+      overflow: auto;
+      height: calc(100vh - 380px);
+      margin: 0px auto 20px;
+    "
   >
-    <div class="chat-item" v-for="(sessionDetail,index) in sessionDetailList">
+    <div class="chat-item" v-for="(sessionDetail, index) in sessionDetailList">
       <a-comment v-if="sessionDetail.role === 'user'">
         <template #avatar>
           <img
@@ -52,7 +57,7 @@
         </template>
         <template #content>
           <div :class="{ chartUserText: theme === 'light' }"
-          >{{ sessionDetail.content }}
+            >{{ sessionDetail.content }}
           </div>
         </template>
       </a-comment>
@@ -60,33 +65,56 @@
         <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' }"-->
-<!--            >{{ sessionDetail.content }}-->
-<!--            </div>-->
-<!--          </a-card>-->
+          <!--          <a-card :class="{ chatItemAnswer: theme === 'light' }">-->
+          <!--            <div :class="{ light: theme === 'light' }"-->
+          <!--            >{{ sessionDetail.content }}-->
+          <!--            </div>-->
+          <!--          </a-card>-->
           <a-textarea
             readonly
             auto-size
             v-model="sessionDetail.content"
             :class="{ chatItemAnswer: theme === 'light' }"
-            :style="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}"
+            :style="{
+              backgroundColor: theme === 'light' ? '#ffffff' : '#000000',
+            }"
             style="border: none"
           >
           </a-textarea>
+          <!-- <div class="prompt">
+            <ul>
+              <li class="prompt-item" @click="copyText('43234')">
+                <span>
+                  344343klsdjkjksdjkjksdjk灏卞紑濮嬪ぇ瀹剁湅鏁版嵁搴撶櫥璁板崱鍙楁墦鍑诲嚡鎾掔櫥璁板崱鍙楁墦鍑诲嚡鎾掔櫥璁板崱鍙楁墦鍑诲嚡鎾掔殑43</span
+                >
+                <span style="margin-left: 20px">
+                  <icon-right />
+                </span>
+              </li>
+            </ul>
+          </div> -->
         </template>
         <template #actions>
-                  <span class="action" v-if="index != 0" @click="copy(sessionDetail.content)">
-                     <icon-copy /> 澶嶅埗
-                  </span>
-          <span class="action"  v-if="index != 0 && index == sessionDetailList.length - 1" @click="reGenerate()">
-                     <icon-refresh /> 閲嶆柊鐢熸垚
-                  </span>
+          <span
+            class="action"
+            v-if="index != 0"
+            @click="copy(sessionDetail.content)"
+          >
+            <icon-copy /> 澶嶅埗
+          </span>
+          <span
+            class="action"
+            v-if="index != 0 && index == sessionDetailList.length - 1"
+            @click="reGenerate()"
+          >
+            <icon-refresh /> 閲嶆柊鐢熸垚
+          </span>
+          <!-- <span class="action"><icon-to-bottom />涓嬭浇 </span> -->
         </template>
       </a-comment>
       <a-comment v-else-if="sessionDetail.role === 'last'">
@@ -103,15 +131,23 @@
             auto-size
             v-model="displayedText"
             :class="{ chatItemAnswer: theme === 'light' }"
-            :style="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}"
+            :style="{
+              backgroundColor: theme === 'light' ? '#ffffff' : '#000000',
+            }"
             style="border: none"
           >
           </a-textarea>
         </template>
         <template #actions>
-          <div class="action"
-               @click="stopChat"
-               style="background: var(--color-bg-2);color: var(--color-primary-light-4);" v-if="displayedText != ''">
+          <div
+            class="action"
+            @click="stopChat"
+            style="
+              background: var(--color-bg-2);
+              color: var(--color-primary-light-4);
+            "
+            v-if="displayedText != ''"
+          >
             <icon-record-stop />
             鍋滄鐢熸垚
           </div>
@@ -134,15 +170,15 @@
         show-word-limit
         :disabled="chatDis"
         :class="{ textItemAnswer: theme === 'dark' }"
-        :style="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}"
+        :style="{ backgroundColor: theme === 'light' ? '#ffffff' : '#000000' }"
         style="border: none"
         :auto-size="{
-                  minRows: 12,
-                  maxRows: 5,
-                }"
+          minRows: 12,
+          maxRows: 5,
+        }"
       />
-      <div class="btn-send">
-        <!-- <icon-send size="32" /> -->
+      <div style="width: 100%; display: flex; justify-content: space-between">
+        <span></span>
         <a-button
           :disabled="chatDis"
           @click="sentClick"
@@ -150,20 +186,44 @@
           style="border-radius: 24px"
           :loading="loading"
         >
-          <icon-send size="32" style="color: #0960bd;"/>
-        </a-button
-        >
+          <icon-send size="32" style="color: #0960bd" />
+        </a-button>
       </div>
+      <!--      <div class="btn-send">-->
+      <!--        &lt;!&ndash; <icon-send size="32" /> &ndash;&gt;-->
+      <!--        <a-button-->
+      <!--          :disabled="chatDis"-->
+      <!--          @click="sentClick"-->
+      <!--          type="text"-->
+      <!--          style="border-radius: 24px"-->
+      <!--          :loading="loading"-->
+      <!--        >-->
+      <!--          <icon-send size="32" style="color: #0960bd;"/>-->
+      <!--        </a-button-->
+      <!--        >-->
+      <!--      </div>-->
     </div>
-    <a-modal v-model:visible="visible" title="淇敼鍚嶇О" @before-open="handleOpened" @cancel="handleCancel" :footer="false" title-align="start">
-      <a-form ref="formRef" :rules="rules" :model="agentObj" @submit="handleSubmit" >
+    <a-modal
+      v-model:visible="visible"
+      title="淇敼鍚嶇О"
+      @before-open="handleOpened"
+      @cancel="handleCancel"
+      :footer="false"
+      title-align="start"
+    >
+      <a-form ref="formRef" :rules="rules" :model="from" @submit="handleSubmit">
         <a-form-item field="name" label="鍚嶇О">
-          <a-input v-model="agentObj.name" placeholder="璇疯緭鍏ュ悕绉�"/>
+          <a-input v-model="from.name" placeholder="璇疯緭鍏ュ悕绉�" />
         </a-form-item>
         <a-form-item>
-          <div style="width: 100%;text-align: right">
+          <div style="width: 100%; text-align: right">
             <a-button @click="visible = false">鍙栨秷</a-button>
-            <a-button style="margin-left: 10px" type="primary" html-type="submit">纭畾</a-button>
+            <a-button
+              style="margin-left: 10px"
+              type="primary"
+              html-type="submit"
+              >纭畾</a-button
+            >
           </div>
         </a-form-item>
       </a-form>
@@ -172,248 +232,145 @@
 </template>
 
 <script setup lang="ts">
-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";
-import { EventSourceParserStream } from 'eventsource-parser/stream';
-import { agentResetApi, agentSetApi, getAgentSessionDetailsApi } from "@/api/agentSession";
-import EventBus from '@/utils/EventBus';
-import useClipboard from "vue-clipboard3";
-import { addSessionApi } from "@/api/session";
-const props = defineProps({
-  modalObj: Object,
-});
-
-// const emit = defineEmits(['addSession']);
-
-const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
-const sessionList = ref([]); //浼氳瘽鍒楄〃
-const modalObj = reactive({ });
-const dialogId = ref('');
-const chatDis = ref(false);
-const loading = ref(false);
-const agentTitle = ref("鏈懡鍚嶄細璇�");
-
-
-const currIndex = ref(0);
-const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
-let timer: number | null = null;
-const streamStr = ref('');
-const inputMsg = ref('');
-const activeSessionId = ref('');
-const fieldNames = { value: 'id', label: 'name' };
-const agentObj = reactive({});
-const agentList = ref([]);
-const selectValue = ref('');
-const sectionList = ref({});
-let chatObj = reactive({});
-const isStopChat = ref(false)
-const appStore = useAppStore();
-const theme = computed(() => {
-  return appStore.theme;
-});
-
-const visible = ref(false);
-
-
-
-const rules = {
-  name: [
-    {
-      required: true,
-      message:'鍚嶇О涓嶅厑璁镐负绌�',
-    },
-  ],
-}
-
-const handleSubmit = async({values, errors}) => {
-  if(errors) return;
-
-  const { code, data } = await addSessionApi(agentObj);
-  if (data) {
-    Message.success("淇敼鎴愬姛");
-    handleCancel()
-    queryAgentSessionDetail(agentObj.id);
-  }
-}
-
-const handleClick = () => {
-  visible.value = true;
-};
-const handleCancel = () => {
-  visible.value = false;
-}
-
-const handleOpened =(el) => {
-  // Object.assign(form,{
-  //   name: '',// 鐢ㄦ埛鍚�
-  // });
-  // formRef.value.resetFields();
-}
-
-
-// 鍒濆鍖栭〉闈�
-const initPage = async () => {
-  agentSet();
-};
-
-const createNewAgent = async (session) => {
-  Object.assign(agentObj, session);
-  initPage();
-
-
-}
-
-
-
-// 璋冪敤set鏂规硶
-const agentSet = async () => {
-  const res = await agentSetApi({
-    id: agentObj.id,
-    title: agentObj.title,
-    dsl: agentObj.dsl,
+  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';
+  import { EventSourceParserStream } from 'eventsource-parser/stream';
+  import {
+    agentResetApi,
+    agentSetApi,
+    getAgentSessionDetailsApi,
+  } from '@/api/agentSession';
+  import EventBus from '@/utils/EventBus';
+  import useClipboard from 'vue-clipboard3';
+  import { addSessionApi, getSessionDetailsApi } from '@/api/session';
+  const props = defineProps({
+    modalObj: Object,
   });
-  console.log(res,'agentSet');
-  if (res.code == 0) {
-    // sessionDetailList.value = res.data.dsl.messages;
-    // Message.success('淇敼鎴愬姛');
-    agentReset();
-  }
-}
-// 璋冪敤reset鏂规硶
-const agentReset = async () => {
-  const res = await agentResetApi({
-    id: agentObj.id,
+
+  // const emit = defineEmits(['addSession']);
+
+  const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
+  const sessionList = ref([]); //浼氳瘽鍒楄〃
+  const modalObj = reactive({});
+  const dialogId = ref('');
+  const chatDis = ref(false);
+  const loading = ref(false);
+  const agentTitle = ref('鏈懡鍚嶄細璇�');
+
+  const currIndex = ref(0);
+  const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
+  let timer: number | null = null;
+  const streamStr = ref('');
+  const inputMsg = ref('');
+  const activeSessionId = ref('');
+  const conversation_id = ref('');
+  const fieldNames = { value: 'id', label: 'name' };
+  const agentObj = reactive({});
+  const agentList = ref([]);
+  const selectValue = ref('');
+  const sectionList = ref({});
+  let chatObj = reactive({});
+  const isStopChat = ref(false);
+  const appStore = useAppStore();
+  const theme = computed(() => {
+    return appStore.theme;
   });
-  if (res.code == 0) {
-    // Message.success('淇敼鎴愬姛');
-    agentCompletion();
-  }
-}
-// 璋冪敤completion鏂规硶
-const agentCompletion = async () => {
-  const response = await fetch(
-    '/api/v1/canvas/completion',
-    {
-      method: 'POST',
-      headers: {
-        'Authorization': getAuthorization(),
-        'Content-Type': 'application/json',
+  let from = reactive({
+    name: '鏈懡鍚嶄細璇�',
+  });
+
+  const visible = ref(false);
+  let isHistory = ref(false); //鏄惁鏄巻鍙茶褰�
+  let dsl = reactive({});
+  const chatDataMeg = reactive({});
+
+  const rules = {
+    name: [
+      {
+        required: true,
+        message: '鍚嶇О涓嶅厑璁镐负绌�',
       },
-      body: JSON.stringify({
-        id: agentObj.id
-      }),
+    ],
+  };
+
+  const handleSubmit = async ({ values, errors }) => {
+    if (errors) return;
+    console.log(agentObj, 'agentObj');
+    let chatData = {
+      id: conversation_id.value,
+      conversation_id: conversation_id.value,
+      name: from.name,
+    };
+    const { code, data } = await addSessionApi(chatData);
+    if (data) {
+      Message.success('淇敼鎴愬姛');
+      handleCancel();
     }
-  );
+  };
 
-  const reader = response?.body
-    ?.pipeThrough(new TextDecoderStream())
-    .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;
-      }
+  const handleClick = () => {
+    visible.value = true;
+  };
+  const handleCancel = () => {
+    visible.value = false;
+  };
+
+  const handleOpened = (el) => {
+    // Object.assign(form,{
+    //   name: '',// 鐢ㄦ埛鍚�
+    // });
+    // formRef.value.resetFields();
+  };
+
+  // 鍒濆鍖栭〉闈�
+  const initPage = async () => {
+    agentSet();
+  };
+
+  const createNewAgent = async (session) => {
+    console.log(session, '鏂板缓agent浼氳瘽瀵硅薄');
+    Object.assign(agentObj, session);
+    isHistory.value = false;
+    initPage();
+  };
+  // 璋冪敤set鏂规硶
+  const agentSet = async () => {
+    const res = await agentSetApi({
+      id: agentObj.id,
+      title: agentObj.title,
+      dsl: agentObj.dsl,
+    });
+    // console.log(res,'agentSet');
+    if (res.code == 0) {
+      conversation_id.value = res.data.conversation_id;
+      agentReset();
     }
-  }
-  chatDis.value = false;
-  loading.value = false;
-  inputMsg.value = '';
-}
-// 璋冪敤get鏂规硶
-
-const queryAgentSessionDetail = async (id) => {
-  const { code, data } = await getAgentSessionDetailsApi(id);
-  if (code == 0) {
-    console.log(data,'浼氳瘽璇︽儏');
-    sessionDetailList.value = data.dsl.messages;
-    agentTitle.value = `鍜�${data.title}鐨勪細璇漙 || '鏈懡鍚嶄細璇�';
-    refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
-  }
-};
-
-
-const { toClipboard } = useClipboard();
-const copy = async (text) => {
-  await toClipboard(text);    //鍙傛暟涓鸿澶嶅埗鐨勬枃鏈�
-}
-
-
-const sentClick = () => {
-  sendMessage('click');
-};
-
-// 閲嶆柊鐢熸垚
-const reGenerate = () => {
-  let inputContent = sessionDetailList.value[sessionDetailList.value.length-2].content
-  startChat(inputContent)
-};
-
-const sendMessage = async (event) => {
-  if (event.keyCode == 13 || event === 'click') {
-    if (!event.shiftKey) {
-      //鍙湁enter娌℃湁shift锛屾垨杩涜浣犵殑鍏朵粬閫昏緫
-      if (event !== 'click') {
-        event.preventDefault(); // 闃绘榛樿琛屼负锛屽嵆涓嶆崲琛�
-      }
-
-      // chatDis.value = true;
-      // loading.value = true;
-      // if (!agentObj.id) {
-      //   Message.warning('璇烽�夋嫨浼氳瘽');
-      //   chatDis.value = false;
-      //   loading.value = false;
-      //   return;
-      // }
-
-      // if (displayedText.value) {
-      //   querySessionList();
-      // }
-
-      if (inputMsg.value) {
-        startChat(inputMsg.value)
-        inputMsg.value = '';
-      } else {
-        Message.warning('娑堟伅涓嶈兘涓虹┖');
-        chatDis.value = false;
-        loading.value = false;
-      }
+  };
+  // 璋冪敤reset鏂规硶
+  const agentReset = async () => {
+    const res = await agentResetApi({
+      id: agentObj.id,
+    });
+    if (res.code == 0) {
+      // Message.success('淇敼鎴愬姛');
+      agentCompletion();
     }
-  }
-};
-
-
-const startChat = async(valMsg)=>{
-
-  sessionDetailList.value.push({
-    content: valMsg,
-    role: 'user',
-  });
-  sessionDetailList.value.push({ role: 'last' });
-  refreshScroll();
-  const response = await fetch(
-    '/api/v1/canvas/completion',
-    {
+  };
+  // 璋冪敤completion鏂规硶
+  const agentCompletion = async () => {
+    const response = await fetch('/api/v1/canvas/completion', {
       method: 'POST',
       headers: {
         'Authorization': getAuthorization(),
@@ -421,317 +378,491 @@
       },
       body: JSON.stringify({
         id: agentObj.id,
-        message: valMsg,
       }),
+    });
+
+    const reader = response?.body
+      ?.pipeThrough(new TextDecoderStream())
+      .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;
+        }
+      }
+    }
+    chatDis.value = false;
+    loading.value = false;
+    inputMsg.value = '';
+  };
+  // 璋冪敤get鏂规硶
+  const queryAgentSessionDetail = async (id) => {
+    const { code, data } = await getAgentSessionDetailsApi(id);
+    if (code == 0) {
+      console.log(data, 'agent浼氳瘽璇︽儏');
+      Object.assign(chatObj, data);
+      sessionDetailList.value = data.dsl.messages;
+      agentTitle.value = `${data.title}` || '鏈懡鍚嶄細璇�';
+      from.name = `${data.title}` || '鏈懡鍚嶄細璇�';
+      refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
+    }
+  };
+
+  const copyText = (text) => {
+    inputMsg.value = text;
+  };
+
+  // 鍘嗗彶璁板綍璺宠浆鑾峰彇agent浼氳瘽璇︽儏
+  const querySessionDetail = async (session) => {
+    conversation_id.value = session.id;
+    from.name = session.name;
+    const { code, data } = await getSessionDetailsApi(session.id);
+    if (code == 200) {
+      sessionDetailList.value = data.message.messages;
+      const res = await getAgentSessionDetailsApi(session.dialog_id);
+      if (res.code == 0) {
+        console.log(res.data, 'agent浼氳瘽璇︽儏');
+        Object.assign(agentObj, res.data);
+        Object.assign(chatObj, res.data);
+        Object.assign(dsl, res.data.dsl);
+        refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
+      }
+    }
+  };
+
+  const { toClipboard } = useClipboard();
+  const copy = async (text) => {
+    await toClipboard(text); //鍙傛暟涓鸿澶嶅埗鐨勬枃鏈�
+  };
+
+  const sentClick = () => {
+    sendMessage('click');
+  };
+
+  // 閲嶆柊鐢熸垚
+  const reGenerate = () => {
+    let inputContent =
+      sessionDetailList.value[sessionDetailList.value.length - 2].content;
+    startChat(inputContent);
+  };
+
+  const sendMessage = async (event) => {
+    if (event.keyCode == 13 || event === 'click') {
+      if (!event.shiftKey) {
+        //鍙湁enter娌℃湁shift锛屾垨杩涜浣犵殑鍏朵粬閫昏緫
+        if (event !== 'click') {
+          event.preventDefault(); // 闃绘榛樿琛屼负锛屽嵆涓嶆崲琛�
+        }
+
+        // chatDis.value = true;
+        // loading.value = true;
+        // if (!agentObj.id) {
+        //   Message.warning('璇烽�夋嫨浼氳瘽');
+        //   chatDis.value = false;
+        //   loading.value = false;
+        //   return;
+        // }
+
+        // if (displayedText.value) {
+        //   querySessionList();
+        // }
+
+        if (inputMsg.value) {
+          startChat(inputMsg.value);
+          inputMsg.value = '';
+        } else {
+          Message.warning('娑堟伅涓嶈兘涓虹┖');
+          chatDis.value = false;
+          loading.value = false;
+        }
+      }
+    }
+  };
+
+  const startChat = async (valMsg) => {
+    sessionDetailList.value.push({
+      content: valMsg,
+      role: 'user',
+    });
+    sessionDetailList.value.push({ role: 'last' });
+    refreshScroll();
+    let chatStr = {
+      id: agentObj.id,
+      message: valMsg,
+    };
+    if (isHistory.value) {
+      chatStr.dsl = dsl;
+    }
+    const response = await fetch('/api/v1/canvas/completion', {
+      method: 'POST',
+      headers: {
+        'Authorization': getAuthorization(),
+        'Content-Type': 'application/json',
+      },
+      body: JSON.stringify(chatStr),
+    });
+
+    const reader = response?.body
+      ?.pipeThrough(new TextDecoderStream())
+      .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 = '';
+          if (isStopChat.value) {
+            isStopChat.value = false;
+            setChatDataMeg(chatDataMeg);
+          } else {
+            queryAgentSessionDetail(agentObj.id);
+            EventBus.emit('queryAppUsageList');
+          }
+          break;
+        }
+      }
+    }
+    chatDis.value = false;
+    loading.value = false;
+  };
+
+  const stopChat = async () => {
+    // const { code, data } = await stopChatApi(agentObj.id);
+    // if (code === 200) {
+    //   Message.success("宸插仠姝�");
+    // }
+    loading.value = false;
+    chatDis.value = false;
+    isStopChat.value = true;
+    console.log('stopChat');
+    console.log(displayedText.value, 'displayedText');
+    console.log(sessionDetailList.value, 'sessionDetailList');
+    let inputText =
+      sessionDetailList.value[sessionDetailList.value.length - 2].content;
+    // 鏁扮粍鍚堝苟
+    let lastArr = [
+      {
+        content: inputText,
+        role: 'user',
+      },
+      {
+        content: displayedText.value,
+        role: 'assistant',
+      },
+    ];
+    sessionDetailList.value = sessionDetailList.value
+      .splice(0, sessionDetailList.value.length - 2)
+      .concat(lastArr);
+    console.log(sessionDetailList.value, 'sessionDetailList2');
+    console.log(chatObj, 'chatObj瀵硅薄');
+    chatObj.dsl.messages = chatObj.dsl.messages.concat(lastArr);
+    Object.assign(chatDataMeg, {
+      id: chatObj.id,
+      conversation_id: chatObj.id,
+      message: sessionDetailList.value,
+    });
+  };
+
+  const setChatDataMeg = async (chatData) => {
+    const { code, data } = await addSessionApi(chatData);
+    if (data) {
+      //鍋滄瀹氭椂鍣�
+      clearTimeout(timer!);
+      timer = null;
+      // displayedText.value = "";
+      queryAgentSessionDetail(chatObj.id);
+    }
+  };
+
+  const handleShiftEnter = (event) => {
+    event.preventDefault();
+    inputMsg.value += '\n';
+  };
+
+  //鏂囧瓧鍔ㄦ�佽緭鍑�
+  const startDisplayStr = () => {
+    if (timer) {
+      clearTimeout(timer!);
+    }
+    const res = streamStr.value;
+    // 灏嗘暟缁勪腑鐨勫瓧绗︿覆鎷兼帴璧锋潵
+    if (currIndex.value < res.length) {
+      displayedText.value += res[currIndex.value];
+      currIndex.value++;
+      setTimeout(startDisplayStr, 100);
+      refreshScroll();
+    } else {
+      clearTimeout(timer!);
+      timer = null;
+    }
+  };
+
+  const scrollbar = ref(null);
+  const refreshScroll = () => {
+    nextTick(() => {
+      const container = document.getElementById('agentHome');
+      scrollbar.value.scrollTop(container.scrollHeight);
+    });
+  };
+
+  onMounted(() => {
+    EventBus.on('createAgent', (data) => {
+      createNewAgent(data);
+    });
+    EventBus.on('queryAgentSessionDetail', (data) => {
+      isHistory.value = true;
+      querySessionDetail(data);
+    });
+  });
+  onBeforeUnmount(() => {
+    EventBus.off('createAgent');
+    EventBus.off('queryAgentSessionDetail');
+  });
+
+  watch(
+    () => props.modalObj,
+    (newVal, oldVal) => {
+      // Object.assign(agentObj, newVal);
+      //璋冪敤agent鍒濆鍖栨柟娉�
+      if (JSON.stringify(newVal) != '{}') {
+        // initPage();
+      }
+    },
+    {
+      immediate: true,
+      deep: true,
     }
   );
-
-  const reader = response?.body
-    ?.pipeThrough(new TextDecoderStream())
-    .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);
-        EventBus.emit('queryAppUsageList');
-        break;
-      }
-    }
-  }
-  chatDis.value = false;
-  loading.value = false;
-}
-
-const stopChat=async()=>{
-  // const { code, data } = await stopChatApi(activeSessionId.value);
-  // if (code === 200) {
-  //   Message.success("宸插仠姝�");
-  //   queryNewSessionDetail(activeSessionId.value);
-  // }
-  isStopChat.value = true;
-  console.log('stopChat');
-  console.log(displayedText.value, 'displayedText');
-  console.log(sessionDetailList.value, 'sessionDetailList');
-  let inputText = sessionDetailList.value[sessionDetailList.value.length-2].content
-  // 鏁扮粍鍚堝苟
-  let lastArr = [{
-    content: inputText,
-    role: "user"
-  },{
-    content: displayedText.value,
-    role: "assistant"
-  }]
-  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);
-  // clearTimeout(timer!);
-  // timer = null;
-  // const { code, data } = await addSessionApi(chatObj);
-  // if (data) {
-  //   //鍋滄瀹氭椂鍣�
-  //   clearTimeout(timer!);
-  //   timer = null;
-  //   displayedText.value = "";
-  //   queryNewSessionDetail(activeSessionId.value);
-  // }
-
-
-}
-
-const handleShiftEnter = (event) => {
-  event.preventDefault();
-  inputMsg.value += '\n';
-};
-
-
-
-//鏂囧瓧鍔ㄦ�佽緭鍑�
-const startDisplayStr = () => {
-  if (timer) {
-    clearTimeout(timer!);
-  }
-  const res = streamStr.value;
-  // 灏嗘暟缁勪腑鐨勫瓧绗︿覆鎷兼帴璧锋潵
-  if (currIndex.value < res.length) {
-    displayedText.value += res[currIndex.value];
-    currIndex.value++;
-    setTimeout(startDisplayStr, 100);
-    refreshScroll();
-  } else {
-    clearTimeout(timer!);
-    timer = null;
-  }
-};
-
-const scrollbar = ref(null);
-const refreshScroll = () => {
-  nextTick(() => {
-    const container = document.getElementById('agentHome');
-    scrollbar.value.scrollTop(container.scrollHeight);
-  });
-};
-
-
-onMounted(() => {
-  EventBus.on('createAgent', (data) => {
-    createNewAgent(data);
-  });
-  EventBus.on('queryAgentSessionDetail', (data) => {
-    Object.assign(agentObj, data);
-    queryAgentSessionDetail(data.id);
-  });
-});
-onBeforeUnmount(() => {
-  EventBus.off('createAgent');
-  EventBus.off('queryAgentSessionDetail');
-});
-
-watch(
-  () => props.modalObj,
-  (newVal, oldVal) => {
-    // Object.assign(agentObj, newVal);
-    //璋冪敤agent鍒濆鍖栨柟娉�
-    if(JSON.stringify(newVal) != '{}'){
-      // initPage();
-    }
-  },{
-    immediate: true,
-    deep: true
-  }
-);
 </script>
 
 <style scoped lang="scss">
+  .dark {
+    color: gray !important;
+  }
 
-.dark {
-  color: gray !important;
-}
-
-.container {
-  .chatItemAnswer {
-    box-sizing: border-box;
-    background: #f1f1f1;
-    border-radius: 14px;
-    .light {
+  .container {
+    .chatItemAnswer {
       box-sizing: border-box;
       background: #f1f1f1;
-      border-radius: 14px;
-    }
-  }
-  .textItemAnswer {
-    background-color: #373739;
-  }
-
-  .center {
-    box-sizing: border-box;
-    height: calc(100vh - 200px);
-    position: relative;
-
-    .center-title {
-      line-height: 60px;
-      font-size: 25px;
-      font-family: 榛戜綋;
-      color: deepskyblue;
-    }
-
-    .center-content {
-      font-size: 14px;
-      color: gray;
-    }
-
-    .center-question {
-      margin-top: 20px;
-      display: flex;
-      justify-content: space-between;
-
-      .center-question-left {
-        margin-top: 5px;
-        margin-left: 20px;
-      }
-
-      .center-question-right {
-        margin-right: 20px;
-      }
-    }
-    .center-list {
-      margin-top: 10px;
-
-      .item {
+      border-radius: 10px;
+      padding: 5px;
+      .light {
+        box-sizing: border-box;
+        background: #f1f1f1;
         border-radius: 10px;
-        margin-top: 10px;
-        padding: 10px;
-        min-height: 120px;
-        background-color: #e9f3ff;
-        .item-content {
-          color: #666;
-        }
-        .item-title {
-          text-align: center;
-          line-height: 40px;
-          font-size: 20px;
-          font-family: 榛戜綋;
-          color: #333;
-        }
       }
     }
-    .chartStart {
-      color: #4955f5;
-      cursor: pointer;
-      font-family: PingFangSC-Medium;
-      font-size: 12px;
-      font-weight: 500;
+    .textItemAnswer {
+      background-color: #373739;
     }
-    .chat_bottom {
-      display: flex;
-      align-items: center;
-      width: 78%;
-      margin: 0 auto;
-      .center-bottom {
-        // position: absolute;
-        // width: 90%;
-        // bottom: 20px;
-        // left: 5%;
-        background: #fff;
-        border: 1px solid #00000014;
-        border-radius: 24px;
+
+    .center {
+      box-sizing: border-box;
+      height: calc(100vh - 200px);
+      position: relative;
+
+      .center-title {
+        line-height: 60px;
+        font-size: 25px;
+        font-family: 榛戜綋;
+        color: deepskyblue;
+      }
+
+      .center-content {
+        font-size: 14px;
+        color: gray;
+      }
+
+      .center-question {
+        margin-top: 20px;
         display: flex;
-        flex: 1 1;
-        flex-direction: column;
-        overflow: hidden;
-        position: relative;
-        // padding-top:10px;
-        :deep(.arco-textarea-wrapper) {
+        justify-content: space-between;
+
+        .center-question-left {
+          margin-top: 5px;
+          margin-left: 20px;
+        }
+
+        .center-question-right {
+          margin-right: 20px;
+        }
+      }
+      .center-list {
+        margin-top: 10px;
+
+        .item {
+          border-radius: 10px;
+          margin-top: 10px;
+          padding: 10px;
+          min-height: 120px;
+          background-color: #e9f3ff;
+          .item-content {
+            color: #666;
+          }
+          .item-title {
+            text-align: center;
+            line-height: 40px;
+            font-size: 20px;
+            font-family: 榛戜綋;
+            color: #333;
+          }
+        }
+      }
+      .chartStart {
+        color: #4955f5;
+        cursor: pointer;
+        font-family: PingFangSC-Medium;
+        font-size: 12px;
+        font-weight: 500;
+      }
+      .chat_bottom {
+        display: flex;
+        align-items: center;
+        width: 78%;
+        margin: 0 auto;
+        .center-bottom {
+          // position: absolute;
+          // width: 90%;
+          // bottom: 20px;
+          // left: 5%;
+          background: #fff;
+          border: 1px solid #00000014;
           border-radius: 24px;
-        }
+          display: flex;
+          flex: 1 1;
+          flex-direction: column;
+          overflow: hidden;
+          position: relative;
+          // padding-top:10px;
+          :deep(.arco-textarea-wrapper) {
+            border-radius: 24px;
+          }
 
-        .btn-send {
-          position: absolute !important;
-          right: 10px;
-          top: 80px;
-          z-index: 10;
+          .btn-send {
+            position: absolute !important;
+            right: 4px;
+            top: 80px;
+            z-index: 10;
+          }
+          :deep(.arco-btn-size-large) {
+            height: 28px;
+            width: 50px;
+          }
         }
-        :deep(.arco-btn-size-large) {
-          height: 28px;
-          width: 50px;
+        :deep(.arco-textarea-wrapper) {
+          padding-top: 5px;
         }
       }
-      :deep(.arco-textarea-wrapper) {
-        padding-top: 5px;
+    }
+    .chat-item {
+      padding: 10px 0;
+      .chartUserText {
+        font-weight: 600;
+        font-size: 14px;
+        color: #333;
+        margin-top: 4px;
+      }
+      .icon-user-jpg {
+        border: 1px solid #d9d9d9;
+      }
+      .prompt {
+        ul {
+          margin: 0;
+          padding: 0;
+          display: flex;
+        }
+        ul > li {
+          list-style-type: none;
+        }
+        .prompt-item {
+          display: flex;
+          justify-content: space-between;
+          background-color: #fff;
+          cursor: pointer;
+          border-radius: 8px;
+          padding: 10px;
+          border: #e5e5e5;
+          &:hover {
+            background-color: #eee;
+          }
+        }
       }
     }
   }
-  .chat-item {
-    padding: 10px 0;
-    .chartUserText {
-      font-weight: 600;
-      font-size: 14px;
-      color: #333;
-      margin-top: 4px;
-    }
-    .icon-user-jpg {
-      border: 1px solid #d9d9d9;
-    }
-  }
-}
-.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);
+  .header___lEPyH {
+    width: 100%;
+    height: 46px;
+    position: relative;
+    backdrop-filter: blur(15px);
     display: flex;
-    align-items: flex-end;
-    overflow: hidden;        /* 闅愯棌瓒呭嚭鐨勫唴瀹� */
-    text-overflow: ellipsis; /* 浣跨敤鐪佺暐鍙锋潵浠f浛琚殣钘忕殑鏂囧瓧 */
-    white-space: nowrap;     /* 涓嶆崲琛岋紝浣垮唴瀹瑰湪涓�琛屽唴鏄剧ず */
-    max-width: 200px;
-    .title{
-      color: var(--color-text-1);
-      font-size: 12px;
+    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; /* 浣跨敤鐪佺暐鍙锋潵浠f浛琚殣钘忕殑鏂囧瓧 */
+      white-space: nowrap; /* 涓嶆崲琛岋紝浣垮唴瀹瑰湪涓�琛屽唴鏄剧ず */
+      max-width: 200px;
+      .title {
+        color: var(--color-text-1);
+        font-size: 12px;
+      }
     }
   }
-}
 
-.action {
-  cursor: pointer;
-  display: inline-block;
-  padding: 0 10px;
-  color: var(--color-text-1);
-  line-height: 24px;
-  background: transparent;
-  border-radius: 2px;
-  cursor: pointer;
-  transition: all 0.1s ease;
-  font-size: 12px;
-}
-.action:hover {
-  background: var(--color-fill-3);
-}
+  .action {
+    cursor: pointer;
+    display: inline-block;
+    padding: 0 10px;
+    color: var(--color-text-1);
+    line-height: 24px;
+    background: transparent;
+    border-radius: 2px;
+    cursor: pointer;
+    transition: all 0.1s ease;
+    font-size: 12px;
+  }
+  .action:hover {
+    background: var(--color-fill-3);
+  }
 </style>

--
Gitblit v1.8.0