From 753105ac88328bcf1a7ed9af92286bec0679c975 Mon Sep 17 00:00:00 2001
From: liudong <liudong>
Date: 星期日, 18 八月 2024 00:45:31 +0800
Subject: [PATCH] 智能体和agent新建会话名称bug修改

---
 src/views/sessionManager/components/add.vue          |  130 ++++
 src/api/session.ts                                   |   11 
 package.json                                         |    1 
 src/views/sessionManager/components/agentSession.vue |  239 +++++--
 src/views/sessionManager/index.vue                   | 1349 ++++++++++++++++++++++++++--------------------
 5 files changed, 1,068 insertions(+), 662 deletions(-)

diff --git a/package.json b/package.json
index ded0088..a89f252 100644
--- a/package.json
+++ b/package.json
@@ -47,6 +47,7 @@
     "sass": "^1.77.8",
     "sortablejs": "^1.15.0",
     "vue": "^3.2.40",
+    "vue-clipboard3": "^2.0.0",
     "vue-echarts": "^6.2.3",
     "vue-i18n": "^9.2.2",
     "vue-router": "^4.0.14"
diff --git a/src/api/session.ts b/src/api/session.ts
index ac886be..21373ed 100644
--- a/src/api/session.ts
+++ b/src/api/session.ts
@@ -45,3 +45,14 @@
 export function getDialogListApi() {
   return axios.get<ISessionListResult>('/api/dialog/list');
 }
+
+
+export function uploadWithoutKb(params) {
+  const config = {
+    headers: {
+      'Content-Type': 'application/x-www-form-urlencoded',
+      // token: token,
+    },
+  };
+  return axios.post('/api/v1/document/upload_without_kb', params, config);
+}
\ No newline at end of file
diff --git a/src/views/sessionManager/components/add.vue b/src/views/sessionManager/components/add.vue
new file mode 100644
index 0000000..e5b82d0
--- /dev/null
+++ b/src/views/sessionManager/components/add.vue
@@ -0,0 +1,130 @@
+<template>
+  <span class="action"
+        @click="handleClick"
+        style="position: absolute;left: 10px;bottom: 10px;z-index: 99;font-size: 24px">
+                <icon-attachment />
+              </span>
+  <a-modal
+    v-model:visible="visible"
+    title="涓婁紶鏂囦欢"
+    @open="handleOpened"
+    @cancel="handleCancel"
+    :ok-loading="loading"
+    @before-ok="handleBeforeOk"
+    title-align="start"
+  >
+    <a-tabs :default-active-key="activeKey" @change="activeKeyChange">
+      <a-tab-pane key="1" title="鏂囦欢"> </a-tab-pane>
+      <a-tab-pane key="2" title="鏂囦欢澶�"> </a-tab-pane>
+    </a-tabs>
+    <div class="aUpload">
+      <!--          <a-upload :file-list="uploadList" draggable accept=".word, .pdf, .ppt, .excel, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .pptx, .ppt, .pdf, .mp4, .avi, .mp3,.wav, .wma, .wmv, .rm," :custom-request="customRequest" />-->
+      <a-upload
+        action="/"
+        :auto-upload="false"
+        ref="uploadRef"
+        :file-list="uploadList"
+        draggable
+        @change="onChange"
+        multiple
+      />
+    </div>
+  </a-modal>
+</template>
+
+<script lang="ts" setup>
+  import { onMounted, onBeforeMount, reactive, ref, computed } from 'vue';
+  import axios from 'axios';
+  import { kbdocumentupload } from '@/api/kbList';
+  import { Message } from '@arco-design/web-vue';
+  let CancelToken = axios.CancelToken;
+  let source = null;
+  const visible = ref(false);
+  const loading = ref(false);
+  const directory = ref(false);
+  const activeKey = ref('1');
+  const formRef = ref(null);
+  const uploadList = ref([]);
+  const form = reactive({
+    name: '', // 鐢ㄦ埛鍚�
+    nameJoin: '', // 鏄电О
+    post: '', // 宀椾綅
+    txt: '', // 澶囨敞
+  });
+  const props = defineProps(['kbobj']);
+  const emit = defineEmits(['changeFetchData']);
+  const uploadRef = ref();
+  const files = ref([]);
+  console.log(props.kbobj);
+  const acceptNameList = computed(() => {
+    return '.word, .pdf, .ppt, .excel, .txt, .zip, .rar, .7z, .doc, .docx, .xls, .xlsx, .pptx, .ppt, .pdf, .mp4, .avi, .mp3,.wav, .wma, .wmv, .rm,';
+  });
+  // 涓婁紶鏂囦欢
+  const submitForm = async (done) => {
+    if (files.value && files.value.length > 0) {
+      files.value.map((item) => {
+        const formData = new FormData();
+        formData.append('file', item.file);
+        formData.append('kb_id', props.kbobj.id);
+        kbdocumentupload(formData).then((res) => {
+          if (res.code == 0) {
+            emit('changeFetchData');
+            Message.success('涓婁紶鎴愬姛');
+            handleCancel();
+          }
+        });
+      });
+      done(false);
+    } else {
+      done(false);
+    }
+  };
+
+  const handleSubmit = ({ values, errors }) => {};
+
+  const onChange = (fileList) => {
+    files.value = fileList;
+  };
+
+  const handleClick = () => {
+    visible.value = true;
+  };
+  const handleBeforeOk = (done) => {
+    submitForm(done);
+  };
+  const handleCancel = () => {
+    visible.value = false;
+  };
+
+  const handleOpened = (el) => {
+    // console.log(props.kbobj);
+    uploadList.value = [];
+    files.value = [];
+    loading.value = false;
+  };
+  const activeKeyChange = (value) => {
+    activeKey.value = value;
+    directory.value = value == '2' ? true : false;
+  };
+  onBeforeMount(() => {});
+  onMounted(() => {});
+</script>
+
+<script lang="ts">
+  export default {
+    name: 'add',
+    methods: {},
+  };
+</script>
+
+<style scoped lang="less">
+  .aUpload {
+    width: 100%;
+    max-height: 500px;
+    overflow: hidden;
+    overflow-y: auto;
+    :deep(.arco-upload-progress) {
+      display: none;
+    }
+  }
+</style>
diff --git a/src/views/sessionManager/components/agentSession.vue b/src/views/sessionManager/components/agentSession.vue
index 090a513..53748c6 100644
--- a/src/views/sessionManager/components/agentSession.vue
+++ b/src/views/sessionManager/components/agentSession.vue
@@ -12,13 +12,13 @@
     id="agentHome"
     class="chat-list"
     style="
-              width: 90%;
+              width: 80%;
               overflow: auto;
               height: calc(100vh - 380px);
               margin: 0px auto 20px;
             "
   >
-    <div class="chat-item" v-for="sessionDetail in sessionDetailList">
+    <div class="chat-item" v-for="(sessionDetail,index) in sessionDetailList">
       <a-comment v-if="sessionDetail.role === 'user'">
         <template #avatar>
           <img
@@ -42,11 +42,28 @@
           />
         </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="border: none"
+          >
+          </a-textarea>
+        </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>
         </template>
       </a-comment>
       <a-comment v-else-if="sessionDetail.role === 'last'">
@@ -63,8 +80,18 @@
             auto-size
             v-model="displayedText"
             :class="{ chatItemAnswer: theme === 'light' }"
+            :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 != ''">
+            <icon-record-stop />
+            鍋滄鐢熸垚
+          </div>
         </template>
       </a-comment>
     </div>
@@ -84,6 +111,8 @@
         show-word-limit
         :disabled="chatDis"
         :class="{ textItemAnswer: theme === 'dark' }"
+        :style="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}"
+        style="border: none"
         :auto-size="{
                   minRows: 12,
                   maxRows: 5,
@@ -94,11 +123,12 @@
         <a-button
           :disabled="chatDis"
           @click="sentClick"
-          type="primary"
+          type="text"
           style="border-radius: 24px"
           :loading="loading"
-          size="large"
-        >鍙戦��</a-button
+        >
+          <icon-send size="32" style="color: #0960bd;"/>
+        </a-button
         >
       </div>
     </div>
@@ -113,6 +143,7 @@
 import { EventSourceParserStream } from 'eventsource-parser/stream';
 import { agentResetApi, agentSetApi, getAgentSessionDetailsApi } from "@/api/agentSession";
 import EventBus from '@/utils/EventBus';
+import useClipboard from "vue-clipboard3";
 const props = defineProps({
   modalObj: Object,
 });
@@ -139,7 +170,8 @@
 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;
@@ -247,12 +279,22 @@
 };
 
 
-
+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) {
@@ -261,8 +303,8 @@
         event.preventDefault(); // 闃绘榛樿琛屼负锛屽嵆涓嶆崲琛�
       }
 
-      chatDis.value = true;
-      loading.value = true;
+      // chatDis.value = true;
+      // loading.value = true;
       // if (!agentObj.id) {
       //   Message.warning('璇烽�夋嫨浼氳瘽');
       //   chatDis.value = false;
@@ -275,59 +317,7 @@
       // }
 
       if (inputMsg.value) {
-        sessionDetailList.value.push({
-          content: inputMsg.value,
-          role: 'user',
-        });
-        sessionDetailList.value.push({ role: 'last' });
-        refreshScroll();
-        const response = await fetch(
-          '/api/v1/canvas/completion',
-          {
-            method: 'POST',
-            headers: {
-              'Authorization': getAuthorization(),
-              'Content-Type': 'application/json',
-            },
-            body: JSON.stringify({
-              id: agentObj.id,
-              message: inputMsg.value,
-            }),
-          }
-        );
-
-        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;
+        startChat(inputMsg.value)
         inputMsg.value = '';
       } else {
         Message.warning('娑堟伅涓嶈兘涓虹┖');
@@ -337,6 +327,101 @@
     }
   }
 };
+
+
+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',
+    {
+      method: 'POST',
+      headers: {
+        'Authorization': getAuthorization(),
+        'Content-Type': 'application/json',
+      },
+      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);
+        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();
@@ -484,6 +569,8 @@
     .chat_bottom {
       display: flex;
       align-items: center;
+      width: 78%;
+      margin: 0 auto;
       .center-bottom {
         // position: absolute;
         // width: 90%;
@@ -505,7 +592,7 @@
         .btn-send {
           position: absolute !important;
           right: 10px;
-          bottom: 10px;
+          top: 80px;
           z-index: 10;
         }
         :deep(.arco-btn-size-large) {
@@ -557,4 +644,20 @@
     }
   }
 }
+
+.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>
diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index d2a6492..9ef1ed5 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -29,13 +29,13 @@
             id="home"
             class="chat-list"
             style="
-              width: 90%;
+              width: 80%;
               overflow: auto;
-              height: calc(100vh - 300px);
+              height: calc(100vh - 380px);
               margin: 0px auto 20px;
             "
           >
-            <div class="chat-item" v-for="sessionDetail in sessionDetailList">
+            <div class="chat-item" v-for="(sessionDetail,index) in sessionDetailList">
               <a-comment v-if="sessionDetail.role === 'user'">
                 <template #avatar>
                   <img
@@ -46,7 +46,7 @@
                 </template>
                 <template #content>
                   <div :class="{ chartUserText: theme === 'light' }"
-                    >{{ sessionDetail.content }}
+                  >{{ sessionDetail.content }}
                   </div>
                 </template>
               </a-comment>
@@ -59,13 +59,30 @@
                   />
                 </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-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="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}"
+                    style="border: none"
+                  >
+                  </a-textarea>
+                </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>
                 </template>
               </a-comment>
               <a-comment v-else-if="sessionDetail.role === 'last'">
@@ -82,8 +99,18 @@
                     auto-size
                     v-model="displayedText"
                     :class="{ chatItemAnswer: theme === 'light' }"
+                    :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 != ''">
+                     <icon-record-stop />
+                    鍋滄鐢熸垚
+                  </div>
                 </template>
               </a-comment>
             </div>
@@ -92,7 +119,8 @@
             >
             <div class="chartStart v-else" @click="stopChat">閲嶆柊鐢熸垚</div> -->
           </a-scrollbar>
-          <div class="chat_bottom">
+
+          <div class="chat_bottom" >
             <div class="center-bottom">
               <!-- <a-textarea
               v-model="inputMsg"
@@ -113,21 +141,34 @@
                 show-word-limit
                 :disabled="chatDis"
                 :class="{ textItemAnswer: theme === 'dark' }"
+                :style="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}"
+                style="border: none"
                 :auto-size="{
                   minRows: 12,
                   maxRows: 5,
                 }"
               />
+              <div style="margin-left: 20px">
+                <a-upload
+                  ref="uploadRef"
+                  :file-list="uploadList"
+                  multiple
+                  :custom-request="customRequest"
+                          style="font-size: 24px;">
+                  <template #upload-button>
+                    <icon-attachment style="color: #0960bd"/>
+                  </template>
+                </a-upload>
+              </div>
+
               <div class="btn-send">
-                <!-- <icon-send size="32" /> -->
                 <a-button
                   :disabled="chatDis"
                   @click="sentClick"
-                  type="primary"
+                  type="text"
                   style="border-radius: 24px"
                   :loading="loading"
-                  size="large"
-                  >鍙戦��
+                ><icon-send size="32" style="color: #0960bd"/>
                 </a-button>
               </div>
             </div>
@@ -160,631 +201,751 @@
   </div>
 </template>
 <script setup lang="ts">
-  import {
-    IconClose,
-    IconSearch,
-    IconTiktokColor,
-  } from '@arco-design/web-vue/es/icon';
-  import { useAppStore, useUserStore } from '@/store';
-  import {
-    computed,
-    nextTick,
-    onMounted,
-    watch,
-    reactive,
-    ref,
-    onBeforeMount,
-    onBeforeUnmount,
-  } from 'vue';
+import {
+  IconClose,
+  IconSearch,
+  IconTiktokColor
+} from "@arco-design/web-vue/es/icon";
+import { useAppStore, useUserStore } from "@/store";
+import {
+  computed,
+  nextTick,
+  onMounted,
+  watch,
+  reactive,
+  ref,
+  onBeforeMount,
+  onBeforeUnmount
+} from "vue";
 
-  import { Message } from '@arco-design/web-vue';
-  import { EventSourceParserStream } from 'eventsource-parser/stream';
-  import moment from 'moment';
-  import chatMenu from '@/views/sessionManager/components/chatMenu.vue';
-  import AddSession from '@/views/sessionManager/components/addSession.vue';
-  import agentSession from '@/views/sessionManager/components/agentSession.vue';
-  import historySession from '@/views/sessionManager/components/historySession.vue';
-  import smartAi from '@/views/sessionManager/components/smartAi.vue';
-  import EventBus from '@/utils/EventBus';
-  import {
-    addSessionApi,
-    chatApi,
-    getDialogListApi,
-    getSessionDetailsApi,
-    sessionListApi,
-  } from '@/api/session';
-  import { getAuthorization } from '@/utils/auth';
-  import { queryCanvasList } from '@/api/Agent';
-  import { getAgentSessionDetailsApi } from '@/api/agentSession';
+import { Message } from "@arco-design/web-vue";
+import { EventSourceParserStream } from "eventsource-parser/stream";
+import moment from "moment";
+import chatMenu from "@/views/sessionManager/components/chatMenu.vue";
+import AddSession from "@/views/sessionManager/components/addSession.vue";
+import agentSession from "@/views/sessionManager/components/agentSession.vue";
+import historySession from "@/views/sessionManager/components/historySession.vue";
+import smartAi from "@/views/sessionManager/components/smartAi.vue";
+import EventBus from "@/utils/EventBus";
+import {
+  addSessionApi,
+  chatApi,
+  getDialogListApi,
+  getSessionDetailsApi,
+  sessionListApi, uploadWithoutKb
+} from "@/api/session";
+import { getAuthorization } from "@/utils/auth";
+import { queryCanvasList } from "@/api/Agent";
+import { getAgentSessionDetailsApi } from "@/api/agentSession";
+import useClipboard from "vue-clipboard3";
+const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
+const sessionList = ref([]); //浼氳瘽鍒楄〃
+const modalObj = reactive({ add: false });
+const dialogId = ref("");
+const chatDis = ref(false);
+const loading = ref(false);
+const agentType = ref("1");
+const agentTitle = ref("鏈懡鍚嶄細璇�");
+let chatObj = reactive({});
+const isStopChat = ref(false)
+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 dialogs = ref([]);
+const dialogObj = reactive({});
+const agentObj = reactive({});
+const agentList = ref([]);
+const selectValue = ref("");
+const sectionList = ref({});
+const uploadList = ref([]);
+const uploadRef = ref();
+const files = ref([]);
 
-  const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
-  const sessionList = ref([]); //浼氳瘽鍒楄〃
-  const modalObj = reactive({ add: false });
-  const dialogId = ref('');
-  const chatDis = ref(false);
-  const loading = ref(false);
-  const agentType = ref('1');
-  const agentTitle = ref('鏈懡鍚嶄細璇�');
+const { toClipboard } = useClipboard();
+const copy = async (text) => {
+  await toClipboard(text);    //鍙傛暟涓鸿澶嶅埗鐨勬枃鏈�
+}
 
-  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 dialogs = ref([]);
-  const dialogObj = reactive({});
-  const agentObj = reactive({});
-  const agentList = ref([]);
-  const selectValue = ref('');
-  const sectionList = ref({});
-  const DialogList = async () => {
-    const { code, data } = await getDialogListApi();
-    if (code === 200) {
-      if (data) {
-        selectValue.value = data[0].id;
-        dialogs.value = data.map((item) => {
-          return {
-            ...item,
-            type: 1, //鏅鸿兘浣�
-          };
-        });
-        console.log(data, 'dialogs');
-        queryCanvas();
-      }
+const onChange = (fileList) => {
+  // files.value = fileList;
+};
+
+const submitOne = (e) => {
+  e.stopPropagation();
+  console.log(files.value);
+  uploadRef.value.submit(files.value.find((x) => x.status === 'init'));
+};
+// 涓婁紶鏂囦欢
+const customRequest = async(option) => {
+  const {onProgress, onError, onSuccess, fileItem, name} = option
+
+  const { code, data } = await getSessionDetailsApi(activeSessionId.value);
+  if (code === 200) {
+    console.log(data, "璇︽儏");
+    if (fileItem.file) {
+      const formData = new FormData();
+      formData.append('file', fileItem.file);
+      formData.append('conversation_id', data.dialog_id);
+      uploadWithoutKb(formData).then((res) => {
+        console.log(res);
+        uploadList.value = [];
+        if (res.code == 0) {
+          console.log(res);
+
+        }
+      });
     }
-  };
+  }
 
-  const queryCanvas = async (params = {}) => {
-    try {
-      const { data } = await queryCanvasList(params);
-      console.log(data, 'agent');
-      agentList.value = data.map((item) => {
+}
+
+
+
+const DialogList = async () => {
+  const { code, data } = await getDialogListApi();
+  if (code === 200) {
+    if (data) {
+      selectValue.value = data[0].id;
+      dialogs.value = data.map((item) => {
         return {
           ...item,
-          name: item.title,
-          type: 2, //agent
+          type: 1 //鏅鸿兘浣�
         };
       });
-      // 鍚堝苟鏁扮粍
-      dialogs.value = dialogs.value.concat(agentList.value);
-
-      // 鍒ゆ柇褰撳墠鏄櫤鑳戒綋鎴朼gent
-      // console.log(val, 'val');
-      // if (dialogs.value.length > 0) {
-      //   dialogChange(dialogs.value[0].id);
-      // }
-      //鏂板缓浼氳瘽
-      createSession(dialogs.value[0].id);
-    } catch (err) {
-      // you can report use errorHandler or other
-    } finally {
+      console.log(data, "dialogs");
+      queryCanvas();
     }
-  };
-  // 鏂板缓浼氳瘽
-  const createSession = async (id, name = '鏈懡鍚嶄細璇�') => {
-    // 濡傛灉鏈変細璇漣d
-    console.log(name, '鏂板缓浼氳瘽鍚嶇О');
+  }
+};
 
-    const res = await addSessionApi({
-      dialog_id: id,
-      conversation_desc: name,
+const queryCanvas = async (params = {}) => {
+  try {
+    const { data } = await queryCanvasList(params);
+    console.log(data, "agent");
+    agentList.value = data.map((item) => {
+      return {
+        ...item,
+        name: item.title,
+        type: 2 //agent
+      };
     });
-    // console.log(res, "res");
-    if (res.code == 200) {
-      // console.log(res.data.conversation_id);
-      activeSessionId.value = res.data?.conversation_id;
-      queryNewSessionDetail(res.data?.conversation_id);
-    } else {
-      Message.error('鍒涘缓浼氳瘽澶辫触锛岃閲嶈瘯');
-    }
-  };
+    // 鍚堝苟鏁扮粍
+    dialogs.value = dialogs.value.concat(agentList.value);
 
-  const handleShiftEnter = (event) => {
-    event.preventDefault();
-    inputMsg.value += '\n';
-  };
-  const dialogChange = (val) => {
     // 鍒ゆ柇褰撳墠鏄櫤鑳戒綋鎴朼gent
     // console.log(val, 'val');
-    dialogId.value = val;
-    dialogs.value.forEach((item) => {
-      if (item.id === val) {
-        Object.assign(dialogObj, item);
-      }
-    });
-    console.log(dialogObj.type, 'dialogObj');
-    if (dialogObj.type == 1) {
-      agentType.value = 1;
-      querySessionList();
-    } else {
-      agentType.value = 2;
-      queryAgentSessionList();
-    }
-
-    // querySessionList();
-  };
-  const sentClick = () => {
-    sendMessage('click');
-  };
-  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 (!activeSessionId.value) {
-          Message.warning('璇烽�夋嫨浼氳瘽');
-          chatDis.value = false;
-          loading.value = false;
-          return;
-        }
-
-        // if (displayedText.value) {
-        //   querySessionList();
-        // }
-
-        if (inputMsg.value) {
-          sessionDetailList.value.push({
-            content: inputMsg.value,
-            role: 'user',
-          });
-          sessionDetailList.value.push({ role: 'last' });
-          refreshScroll();
-          const response = await fetch(
-            '/api/tech/cloudminds/query?modeltype=localragflow',
-            {
-              method: 'POST',
-              headers: {
-                'Authorization': getAuthorization(),
-                'Content-Type': 'application/json',
-              },
-              body: JSON.stringify({
-                conversation_id: activeSessionId.value,
-                messages: inputMsg.value,
-              }),
-            }
-          );
-
-          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 = '';
-                queryNewSessionDetail(activeSessionId.value);
-                EventBus.emit('queryAppUsageList');
-                break;
-              }
-            }
-          }
-          // querySessionList();
-          chatDis.value = false;
-          loading.value = false;
-          inputMsg.value = '';
-        } else {
-          Message.warning('娑堟伅涓嶈兘涓虹┖');
-          chatDis.value = false;
-          loading.value = false;
-        }
-      }
-    }
-  };
-
-  const queryNewSessionDetail = async (id) => {
-    activeSessionId.value = id;
-    const { code, data } = await getSessionDetailsApi(id);
-    if (code === 200) {
-      console.log(data, '鏂板缓浼氳瘽璇︽儏');
-      sessionDetailList.value = data.message;
-      agentTitle.value = data.name;
-      refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
-    }
-  };
-
-  const changeAgentType = (val, session) => {
-    agentType.value = val;
-    console.log(val, 'val');
-  };
-
-  const querySessionDetail = async (session) => {
-    sectionList.value = session;
-    activeSessionId.value = session.id;
-    const { code, data } = await getSessionDetailsApi(session.id);
-    if (code === 200) {
-      sessionDetailList.value = data.message;
-      refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
-    }
-  };
-  const queryAgentSessionDetail = async (id) => {
-    const { code, data } = await getAgentSessionDetailsApi(id);
-    if (code == 0) {
-      Object.assign(agentObj, data);
-      // sessionDetailList.value = data.message;
-      // refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
-    }
-  };
-  const scrollbar = ref(null);
-  const refreshScroll = () => {
-    nextTick(() => {
-      const container = document.getElementById('home');
-      scrollbar.value.scrollTop(container.scrollHeight);
-    });
-  };
-  // 鏌ヨ浼氳瘽鍒楄〃
-  const querySessionList = async () => {
-    const { code, data } = await sessionListApi(selectValue.value);
-    if (code === 200) {
-      sessionList.value = data;
-      activeSessionId.value = data[0].id; //榛樿閫夋嫨绗竴涓�
-      querySessionDetail(data[0]);
-    } else {
-      Message.warning('鏌ヨ澶辫触');
-    }
-  };
-
-  // 鏌ヨ浼氳瘽鍒楄〃
-  const queryAgentSessionList = async () => {
-    // const { code, data } = await sessionListApi(selectValue.value);
-    // if (code === 200) {
-    //
-    // } else {
-    //   Message.warning('鏌ヨ澶辫触');
+    // if (dialogs.value.length > 0) {
+    //   dialogChange(dialogs.value[0].id);
     // }
-    queryAgentSessionDetail(selectValue.value);
-  };
-
-  //鏂板浼氳瘽涔嬪悗鍒锋柊浼氳瘽鍒楄〃
-  const addSession = () => {
-    querySessionList();
-  };
-  onBeforeMount(() => {
-    // DialogList();
     //鏂板缓浼氳瘽
-    createSession('');
-  });
-  onMounted(() => {
-    EventBus.on('newChat', () => {
-      agentType.value = 1;
-      createSession('');
-    });
-  });
-  onBeforeUnmount(() => {
-    EventBus.off('newChat');
-  });
+    createSession(dialogs.value[0].id);
+  } catch (err) {
+    // you can report use errorHandler or other
+  } finally {
+  }
+};
+// 鏂板缓浼氳瘽
+const createSession = async (id, name = "鏈懡鍚嶄細璇�") => {
+  // 濡傛灉鏈変細璇漣d
+  console.log(name, "鏂板缓浼氳瘽鍚嶇О");
 
-  const appStore = useAppStore();
-  const theme = computed(() => {
-    return appStore.theme;
+  const res = await addSessionApi({
+    dialog_id: id,
+    conversation_desc: name
   });
+  // console.log(res, "res");
+  if (res.code == 200) {
+    // console.log(res.data.conversation_id);
+    activeSessionId.value = res.data?.conversation_id;
+    queryNewSessionDetail(res.data?.conversation_id);
+  } else {
+    Message.error("鍒涘缓浼氳瘽澶辫触锛岃閲嶈瘯");
+  }
+};
 
-  //鏂囧瓧鍔ㄦ�佽緭鍑�
-  const startDisplayStr = () => {
-    if (timer) {
-      clearTimeout(timer!);
+const handleShiftEnter = (event) => {
+  event.preventDefault();
+  inputMsg.value += "\n";
+};
+const dialogChange = (val) => {
+  // 鍒ゆ柇褰撳墠鏄櫤鑳戒綋鎴朼gent
+  // console.log(val, 'val');
+  dialogId.value = val;
+  dialogs.value.forEach((item) => {
+    if (item.id === val) {
+      Object.assign(dialogObj, item);
     }
-    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;
+  });
+  console.log(dialogObj.type, "dialogObj");
+  if (dialogObj.type == 1) {
+    agentType.value = '1';
+    querySessionList();
+  } else {
+    agentType.value = '2';
+    queryAgentSessionList();
+  }
+
+  // querySessionList();
+};
+
+// 鍙戦��
+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(); // 闃绘榛樿琛屼负锛屽嵆涓嶆崲琛�
+      }
+
+
+      // if (!activeSessionId.value) {
+      //   Message.warning("璇烽�夋嫨浼氳瘽");
+      //   chatDis.value = false;
+      //   loading.value = false;
+      //   return;
+      // }
+
+      // if (displayedText.value) {
+      //   querySessionList();
+      // }
+
+      if (inputMsg.value) {
+
+        startChat(inputMsg.value)
+
+        inputMsg.value = "";
+      } else {
+        Message.warning("娑堟伅涓嶈兘涓虹┖");
+      }
     }
-  };
+  }
+};
+
+const startChat = async(valMsg)=>{
+  chatDis.value = true;
+  loading.value = true;
+  sessionDetailList.value.push({
+    content: valMsg,
+    role: "user"
+  });
+  sessionDetailList.value.push({ role: "last" });
+  refreshScroll();
+  const response = await fetch(
+    "/api/tech/cloudminds/query?modeltype=localragflow",
+    {
+      method: "POST",
+      headers: {
+        "Authorization": getAuthorization(),
+        "Content-Type": "application/json"
+      },
+      body: JSON.stringify({
+        conversation_id: activeSessionId.value,
+        messages: 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 = "";
+        // if(!isStopChat.value){
+        //   queryNewSessionDetail(activeSessionId.value);
+        // }
+        queryNewSessionDetail(activeSessionId.value);
+        EventBus.emit("queryAppUsageList");
+        break;
+      }
+    }
+  }
+  // querySessionList();
+  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 queryNewSessionDetail = async (id) => {
+  activeSessionId.value = id;
+  const { code, data } = await getSessionDetailsApi(id);
+  if (code === 200) {
+    console.log(data, "鏂板缓浼氳瘽璇︽儏");
+    Object.assign(chatObj, data);
+    sessionDetailList.value = data.message;
+    agentTitle.value = data.name;
+    refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
+    isStopChat.value = false;
+  }
+};
+
+const changeAgentType = (val, session) => {
+  agentType.value = val;
+  console.log(val, "val");
+};
+
+const querySessionDetail = async (session) => {
+  sectionList.value = session;
+  activeSessionId.value = session.id;
+  const { code, data } = await getSessionDetailsApi(session.id);
+  if (code === 200) {
+    sessionDetailList.value = data.message;
+    refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
+  }
+};
+const queryAgentSessionDetail = async (id) => {
+  const { code, data } = await getAgentSessionDetailsApi(id);
+  if (code == 0) {
+    Object.assign(agentObj, data);
+    // sessionDetailList.value = data.message;
+    // refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
+  }
+};
+const scrollbar = ref(null);
+const refreshScroll = () => {
+  nextTick(() => {
+    const container = document.getElementById("home");
+    scrollbar.value.scrollTop(container.scrollHeight);
+  });
+};
+// 鏌ヨ浼氳瘽鍒楄〃
+const querySessionList = async () => {
+  const { code, data } = await sessionListApi(selectValue.value);
+  if (code === 200) {
+    sessionList.value = data;
+    activeSessionId.value = data[0].id; //榛樿閫夋嫨绗竴涓�
+    querySessionDetail(data[0]);
+  } else {
+    Message.warning("鏌ヨ澶辫触");
+  }
+};
+
+// 鏌ヨ浼氳瘽鍒楄〃
+const queryAgentSessionList = async () => {
+  // const { code, data } = await sessionListApi(selectValue.value);
+  // if (code === 200) {
+  //
+  // } else {
+  //   Message.warning('鏌ヨ澶辫触');
+  // }
+  queryAgentSessionDetail(selectValue.value);
+};
+
+//鏂板浼氳瘽涔嬪悗鍒锋柊浼氳瘽鍒楄〃
+const addSession = () => {
+  querySessionList();
+};
+onBeforeMount(() => {
+  // DialogList();
+  //鏂板缓浼氳瘽
+  createSession("");
+});
+onMounted(() => {
+  EventBus.on("newChat", () => {
+    agentType.value = "1";
+    createSession("");
+  });
+});
+onBeforeUnmount(() => {
+  EventBus.off("newChat");
+});
+
+const appStore = useAppStore();
+const theme = computed(() => {
+  return appStore.theme;
+});
+
+//鏂囧瓧鍔ㄦ�佽緭鍑�
+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;
+  }
+};
 </script>
 <style scoped lang="scss">
-  .isLeftActive {
-    background-color: #ededf5;
+.isLeftActive {
+  background-color: #ededf5;
+}
+
+.left-list-item {
+  margin-bottom: 2px;
+}
+
+.left-list-item:hover {
+  background-color: #ededf5;
+}
+
+.dark {
+  color: gray !important;
+}
+
+.container {
+  .top-title {
+    line-height: 32px;
+    font-size: 16px;
+    color: #333;
   }
 
-  .left-list-item {
-    margin-bottom: 2px;
-  }
-
-  .left-list-item:hover {
-    background-color: #ededf5;
-  }
-
-  .dark {
-    color: gray !important;
-  }
-
-  .container {
-    .top-title {
-      line-height: 32px;
-      font-size: 16px;
-      color: #333;
+  .left-select {
+    :deep(.arco-select-view-single) {
+      border-radius: 5px;
     }
+  }
 
-    .left-select {
-      :deep(.arco-select-view-single) {
-        border-radius: 5px;
-      }
-    }
+  .center,
+  .right {
+    box-sizing: border-box;
+    height: calc(100vh - 200px);
+  }
 
-    .center,
-    .right {
-      box-sizing: border-box;
-      height: calc(100vh - 200px);
-    }
+  .left {
+    /* height: calc(100vh - 160px);
+  overflow-y: auto;
+  overflow-x: hidden;*/
+    border: 0px;
 
-    .left {
-      /* height: calc(100vh - 160px);
-    overflow-y: auto;
-    overflow-x: hidden;*/
-      border: 0px;
+    .left-list {
+      .item {
+        cursor: pointer;
 
-      .left-list {
-        .item {
-          cursor: pointer;
+        .text,
+        .time {
+          line-height: 30px;
+        }
 
-          .text,
-          .time {
-            line-height: 30px;
-          }
+        .text {
+          color: black;
+          padding-left: 10px;
+        }
 
-          .text {
-            color: black;
-            padding-left: 10px;
-          }
-
-          .time {
-            color: gray;
-            font-size: 12px;
-            padding-left: 10px;
-          }
+        .time {
+          color: gray;
+          font-size: 12px;
+          padding-left: 10px;
         }
       }
     }
+  }
 
-    .card-btn-1 {
-      margin: 8px 15px;
-      width: 100%;
-      border-radius: 5px;
-    }
+  .card-btn-1 {
+    margin: 8px 15px;
+    width: 100%;
+    border-radius: 5px;
+  }
 
-    .card-btn-2 {
-      margin: 10px 10px;
-    }
+  .card-btn-2 {
+    margin: 10px 10px;
+  }
 
-    .chatItemAnswer {
+  .chatItemAnswer {
+    box-sizing: border-box;
+    background: #f1f1f1;
+    border-radius: 14px;
+
+    .light {
       box-sizing: border-box;
       background: #f1f1f1;
       border-radius: 14px;
-
-      .light {
-        box-sizing: border-box;
-        background: #f1f1f1;
-        border-radius: 14px;
-      }
-    }
-
-    .textItemAnswer {
-      background-color: #373739;
-    }
-
-    .center {
-      position: relative;
-      padding-left: 50px;
-
-      .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;
-          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;
-
-        .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;
-            bottom: 10px;
-            z-index: 10;
-          }
-
-          :deep(.arco-btn-size-large) {
-            height: 28px;
-            width: 60px;
-          }
-        }
-
-        :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;
-      }
-    }
-
-    .right {
-      .right-top {
-        display: flex;
-        justify-content: space-between;
-
-        .right-title {
-          font-size: 25px;
-          color: black;
-        }
-
-        .right-btn {
-          position: relative;
-          left: 20px;
-          top: 0px;
-        }
-      }
-
-      .right-tag {
-        margin-top: 20px;
-        display: flex;
-        justify-content: space-between;
-        flex-wrap: wrap;
-
-        :deep(.arco-btn-primary) {
-          margin-bottom: 10px !important;
-
-          &:hover {
-            background-color: #e9f3ff;
-            color: rgb(22, 93, 255);
-          }
-        }
-      }
-
-      .right-list {
-        .right-item {
-          border-radius: 10px;
-          margin-top: 10px;
-          padding: 10px;
-          min-height: 120px;
-          background-color: #e9f3ff;
-
-          .item-title {
-            text-align: center;
-            line-height: 40px;
-            font-size: 20px;
-            font-family: 榛戜綋;
-            color: #333;
-          }
-        }
-      }
     }
   }
-  .header___lEPyH {
-    width: 100%;
-    height: 46px;
+
+  .textItemAnswer {
+    background-color: #373739;
+  }
+
+  .center {
     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);
+    padding-left: 50px;
+
+    .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;
-      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;
+      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: 110px;
+          z-index: 10;
+        }
+
+        :deep(.arco-btn-size-large) {
+          height: 28px;
+          width: 60px;
+        }
+      }
+
+      :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;
+    }
+  }
+
+  .right {
+    .right-top {
+      display: flex;
+      justify-content: space-between;
+
+      .right-title {
+        font-size: 25px;
+        color: black;
+      }
+
+      .right-btn {
+        position: relative;
+        left: 20px;
+        top: 0px;
+      }
+    }
+
+    .right-tag {
+      margin-top: 20px;
+      display: flex;
+      justify-content: space-between;
+      flex-wrap: wrap;
+
+      :deep(.arco-btn-primary) {
+        margin-bottom: 10px !important;
+
+        &:hover {
+          background-color: #e9f3ff;
+          color: rgb(22, 93, 255);
+        }
+      }
+    }
+
+    .right-list {
+      .right-item {
+        border-radius: 10px;
+        margin-top: 10px;
+        padding: 10px;
+        min-height: 120px;
+        background-color: #e9f3ff;
+
+        .item-title {
+          text-align: center;
+          line-height: 40px;
+          font-size: 20px;
+          font-family: 榛戜綋;
+          color: #333;
+        }
+      }
+    }
+  }
+}
+
+.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; /* 浣跨敤鐪佺暐鍙锋潵浠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);
+}
 </style>

--
Gitblit v1.8.0