From dc3fb06f6d3253ddebf35fec2d805b1750086b01 Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期三, 14 八月 2024 17:31:51 +0800
Subject: [PATCH] fix: 上传组件新增删除功能,模型管理页面修改

---
 src/views/sessionManager/index.vue |  433 ++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 293 insertions(+), 140 deletions(-)

diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index d0d32a3..8243092 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -1,10 +1,14 @@
 <template>
   <div class="container">
-    <AddSession :modalObj="modalObj" @addSession="addSession"></AddSession>
+    <AddSession
+      :modalObj="modalObj"
+      @addSession="addSession"
+      :dialogId="dialogId"
+    ></AddSession>
     <a-card class="top-title">AI浼氳瘽璁板綍</a-card>
     <a-row :gutter="[5, 5]" style="margin-top: 3px">
-      <a-col :span="4">
-        <a-card>
+      <a-col :span="6">
+        <a-card class="left-select">
           <a-select
             v-model="selectValue"
             :options="dialogs"
@@ -34,7 +38,7 @@
           <a-scrollbar
             class="left-list"
             style="
-              height: calc(100vh - 250px);
+              height: calc(100vh - 350px);
               overflow-y: auto;
               overflow-x: hidden;
             "
@@ -45,7 +49,7 @@
               @click="querySessionDetail(session)"
               :class="{ isLeftActive: activeSessionId === session.id }"
             >
-              <div class="text" :class="{ light: theme === 'dark' }"
+              <div class="text" :class="{ time: theme === 'dark' }"
                 >{{ session.name }}
               </div>
               <div class="time"
@@ -59,9 +63,10 @@
           </a-scrollbar>
         </a-card>
       </a-col>
-      <a-col :span="15">
+      <!--      鏅鸿兘浣撲細璇�-->
+      <a-col :span="18" v-show="agentType == '1'">
         <a-card class="center">
-          <div
+          <!-- <div
             v-if="sessionDetailList.length === 0"
             style="
               width: 90%;
@@ -136,59 +141,72 @@
                 </div>
               </a-col>
             </a-row>
-          </div>
+          </div> -->
           <a-scrollbar
             ref="scrollbar"
             id="home"
-            v-else
             class="chat-list"
             style="
               width: 90%;
               overflow: auto;
-              height: 65vh;
+              height: calc(100vh - 380px);
               margin: 0px auto 20px;
             "
           >
             <div class="chat-item" v-for="sessionDetail in sessionDetailList">
-              <a-comment
-                v-if="sessionDetail.role === 'user'"
-                avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp"
-              >
+              <a-comment v-if="sessionDetail.role === 'user'">
+                <template #avatar>
+                  <img
+                    class="icon-user-jpg"
+                    src="../../assets/images/icon-user.jpg"
+                    alt="鏈湴鍥剧墖"
+                  />
+                </template>
                 <template #content>
-                  <div>{{ sessionDetail.content }} </div>
+                  <div :class="{ chartUserText: theme === 'light' }"
+                    >{{ sessionDetail.content }}
+                  </div>
                 </template>
               </a-comment>
-              <a-comment
-                v-else-if="sessionDetail.role === 'assistant'"
-                avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/9eeb1800d9b78349b24682c3518ac4a3.png~tplv-uwbnlip3yd-webp.webp"
-              >
+              <a-comment v-else-if="sessionDetail.role === 'assistant'">
+                <template #avatar>
+                  <img
+                    class="icon-user-jpg"
+                    src="../../assets/images/icon-chart.png"
+                    alt="鏈湴鍥剧墖"
+                  />
+                </template>
                 <template #content>
-                  <a-card
-                    class="chat-item-answer"
-                    style="background-color: rgba(63, 64, 79, 1)"
-                  >
+                  <a-card :class="{ chatItemAnswer: theme === 'light' }">
                     <div :class="{ light: theme === 'light' }"
                       >{{ sessionDetail.content }}
                     </div>
                   </a-card>
                 </template>
               </a-comment>
-              <a-comment
-                v-else-if="sessionDetail.role === 'last'"
-                avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/9eeb1800d9b78349b24682c3518ac4a3.png~tplv-uwbnlip3yd-webp.webp"
-              >
+              <a-comment v-else-if="sessionDetail.role === 'last'">
+                <template #avatar>
+                  <img
+                    class="icon-user-jpg"
+                    src="../../assets/images/icon-chart.png"
+                    alt="鏈湴鍥剧墖"
+                  />
+                </template>
                 <template #content>
                   <a-textarea
                     readonly
                     auto-size
                     v-model="displayedText"
-                    class="chat-item-answer"
-                    style="background-color: rgba(192, 172, 172, 0.88)"
+                    :class="{ chatItemAnswer: theme === 'light' }"
                   >
                   </a-textarea>
                 </template>
               </a-comment>
             </div>
+            <!-- <div class="chartStart" v-if="isStart" @click="startChat"
+              >鍋滄鐢熸垚</div
+            >
+            <div class="chartStart v-else" @click="stopChat">閲嶆柊鐢熸垚</div> -->
           </a-scrollbar>
           <div class="chat_bottom">
             <div class="center-bottom">
@@ -204,11 +222,13 @@
             </a-textarea> -->
               <a-textarea
                 v-model="inputMsg"
+                @keydown.shift.enter="handleShiftEnter"
                 @keydown.enter="sendMessage"
                 placeholder="杈撳叆鎮ㄦ兂浜嗚В鐨勫唴瀹癸紝Shift+Enter鎹㈣锛孍nter鍙戦��"
                 allow-clear
                 show-word-limit
                 :disabled="chatDis"
+                :class="{ textItemAnswer: theme === 'dark' }"
                 :auto-size="{
                   minRows: 12,
                   maxRows: 5,
@@ -230,7 +250,13 @@
           </div>
         </a-card>
       </a-col>
-      <a-col :span="5">
+      <a-col :span="18" v-show="agentType == '2'">
+        <a-card class="center">
+          <agentSession :modalObj="agentObj"></agentSession>
+        </a-card>
+      </a-col>
+
+      <!-- <a-col :span="5">
         <a-card class="right">
           <div class="right-top">
             <div class="right-title">鏁版櫤搴�</div>
@@ -248,35 +274,16 @@
             </div>
           </div>
           <div class="right-tag">
-            <a-button type="primary" shape="round" size="mini" class="btn"
-              >鍏ㄩ儴
-            </a-button>
-            <a-button type="outline" shape="round" size="mini" class="btn"
+            <a-button type="primary" size="mini" class="btn">鍏ㄩ儴 </a-button>
+            <a-button type="outline" size="mini" class="btn"
               >鏂囨。鍒涗綔
             </a-button>
-            <a-button type="outline" shape="round" size="mini" class="btn"
+            <a-button type="outline" size="mini" class="btn"
               >鐭ヨ瘑瀛︿範
             </a-button>
-            <a-button type="outline" shape="round" size="mini" class="btn"
+            <a-button type="outline" size="mini" class="btn"
               >鏁堢巼鎻愬崌
             </a-button>
-            <!-- <a-space>
-              <a-button type="primary" shape="round" size="mini" class="btn"
-                >鍏ㄩ儴
-              </a-button>
-              <a-button type="outline" shape="round" size="mini" class="btn"
-                >鏂囨。鍒涗綔
-              </a-button>
-              <a-button type="outline" shape="round" size="mini" class="btn"
-                >鐭ヨ瘑瀛︿範
-              </a-button>
-              <a-button type="outline" shape="round" size="mini" class="btn"
-                >鏁堢巼鎻愬崌
-              </a-button>
-            </a-space> -->
-            <!-- <a-space style="margin-top: 10px">
-             
-            </a-space> -->
           </div>
           <div class="right-list">
             <div class="right-item">
@@ -308,7 +315,7 @@
             </div>
           </div>
         </a-card>
-      </a-col>
+      </a-col> -->
     </a-row>
   </div>
 </template>
@@ -318,12 +325,14 @@
     IconSearch,
     IconTiktokColor,
   } from '@arco-design/web-vue/es/icon';
-  import { useAppStore } from '@/store';
-  import { computed, nextTick, onMounted, reactive, ref } from 'vue';
+  import { useAppStore, useUserStore } from '@/store';
+  import { computed, nextTick, onMounted, watch, reactive, ref } from 'vue';
+
   import { Message } from '@arco-design/web-vue';
   import { EventSourceParserStream } from 'eventsource-parser/stream';
   import moment from 'moment';
   import AddSession from '@/views/sessionManager/components/addSession.vue';
+  import agentSession from '@/views/sessionManager/components/agentSession.vue';
   import {
     chatApi,
     getDialogListApi,
@@ -331,12 +340,16 @@
     sessionListApi,
   } from '@/api/session';
   import { getAuthorization } from '@/utils/auth';
+  import { queryCanvasList } from '@/api/Agent';
+  import { getAgentSessionDetailsApi } from '@/api/agentSession';
 
   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 currIndex = ref(0);
   const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
@@ -346,99 +359,180 @@
   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;
-        querySessionList();
+        dialogs.value = data.map((item) => {
+          return {
+            ...item,
+            type: 1, //鏅鸿兘浣�
+          };
+        });
+        console.log(data, 'dialogs');
+        queryCanvas();
+        // querySessionList();
       }
     }
   };
-  const dialogChange = (value) => {
-    querySessionList();
+
+  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
+        };
+      });
+      // 鍚堝苟鏁扮粍
+      dialogs.value = dialogs.value.concat(agentList.value);
+
+      // 鍒ゆ柇褰撳墠鏄櫤鑳戒綋鎴朼gent
+      // console.log(val, 'val');
+      if (dialogs.value.length > 0) {
+        dialogChange(dialogs.value[0].id);
+      }
+    } catch (err) {
+      // you can report use errorHandler or other
+    } finally {
+    }
   };
-  const sentClick = (event) => {
-    sendMessage(event);
+
+  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) => {
-    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,
-          }),
+    if (event.keyCode == 13 || event === 'click') {
+      if (!event.shiftKey) {
+        //鍙湁enter娌℃湁shift锛屾垨杩涜浣犵殑鍏朵粬閫昏緫
+        if (event !== 'click') {
+          event.preventDefault(); // 闃绘榛樿琛屼负锛屽嵆涓嶆崲琛�
         }
-      );
 
-      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();
+        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,
+              }),
             }
-          } catch (e) {
-            console.warn(e);
+          );
+
+          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 = '';
+                querySessionDetail(sectionList.value);
+                break;
+              }
+            }
           }
-          if (done) {
-            console.info('done');
-            displayedText.value = '';
-            querySessionList();
-            break;
-          }
+          querySessionList();
+          chatDis.value = false;
+          loading.value = false;
+          inputMsg.value = '';
+        } else {
+          Message.warning('娑堟伅涓嶈兘涓虹┖');
+          chatDis.value = false;
+          loading.value = false;
         }
       }
-      chatDis.value = false;
-      loading.value = false;
-      inputMsg.value = '';
-    } else {
-      Message.warning('娑堟伅涓嶈兘涓虹┖');
     }
   };
   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);
@@ -453,12 +547,24 @@
     const { code, data } = await sessionListApi(selectValue.value);
     if (code === 200) {
       sessionList.value = data;
-      activeSessionId.value = data[0].id;
+      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();
@@ -466,10 +572,12 @@
   onMounted(() => {
     DialogList();
   });
+
   const appStore = useAppStore();
   const theme = computed(() => {
     return appStore.theme;
   });
+
   //鏂囧瓧鍔ㄦ�佽緭鍑�
   const startDisplayStr = () => {
     if (timer) {
@@ -499,31 +607,32 @@
     background-color: #ededf5;
   }
 
-  .light {
-    color: white !important;
-  }
-
   .dark {
     color: gray !important;
   }
 
   .container {
     .top-title {
-      line-height: 60px;
-      font-size: 25px;
-      font-family: 榛戜綋;
+      line-height: 32px;
+      font-size: 16px;
+      color: #333;
+    }
+    .left-select {
+      :deep(.arco-select-view-single) {
+        border-radius: 5px;
+      }
     }
 
     .center,
     .right {
       box-sizing: border-box;
-      height: calc(100vh - 100px);
+      height: calc(100vh - 200px);
     }
 
     .left {
       /* height: calc(100vh - 160px);
-        overflow-y: auto;
-        overflow-x: hidden;*/
+      overflow-y: auto;
+      overflow-x: hidden;*/
       border: 0px;
 
       .left-list {
@@ -549,12 +658,26 @@
       }
     }
     .card-btn-1 {
-      margin: 10px;
-      width: 75%;
+      margin: 8px 15px;
+      width: 100%;
+      border-radius: 5px;
     }
 
     .card-btn-2 {
       margin: 10px 10px;
+    }
+    .chatItemAnswer {
+      box-sizing: border-box;
+      background: #f1f1f1;
+      border-radius: 14px;
+      .light {
+        box-sizing: border-box;
+        background: #f1f1f1;
+        border-radius: 14px;
+      }
+    }
+    .textItemAnswer {
+      background-color: #373739;
     }
 
     .center {
@@ -607,6 +730,13 @@
           }
         }
       }
+      .chartStart {
+        color: #4955f5;
+        cursor: pointer;
+        font-family: PingFangSC-Medium;
+        font-size: 12px;
+        font-weight: 500;
+      }
       .chat_bottom {
         display: flex;
         align-items: center;
@@ -623,17 +753,37 @@
           flex-direction: column;
           overflow: hidden;
           position: relative;
+          // padding-top:10px;
           :deep(.arco-textarea-wrapper) {
             border-radius: 24px;
           }
 
           .btn-send {
             position: absolute !important;
-            right: 5px;
-            bottom: 5px;
+            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 {
@@ -643,7 +793,6 @@
 
         .right-title {
           font-size: 25px;
-          font-family: 榛戜綋;
           color: black;
         }
 
@@ -658,8 +807,12 @@
         display: flex;
         justify-content: space-between;
         flex-wrap: wrap;
-        :deep(.arco-btn-size-mini.arco-btn-shape-round) {
+        :deep(.arco-btn-primary) {
           margin-bottom: 10px !important;
+          &:hover {
+            background-color: #e9f3ff;
+            color: rgb(22, 93, 255);
+          }
         }
       }
 

--
Gitblit v1.8.0