From 2e9fb42825b850390cd4fbb61248d2778b111904 Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期六, 17 八月 2024 18:54:14 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/web/flow_web

---
 src/views/sessionManager/index.vue |  386 ++++++++++++++++++++++++-------------------------------
 1 files changed, 169 insertions(+), 217 deletions(-)

diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index 8243092..d2a6492 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -1,147 +1,29 @@
 <template>
   <div class="container">
-    <AddSession
-      :modalObj="modalObj"
-      @addSession="addSession"
-      :dialogId="dialogId"
-    ></AddSession>
-    <a-card class="top-title">AI浼氳瘽璁板綍</a-card>
+    <!--    <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="6">
-        <a-card class="left-select">
-          <a-select
-            v-model="selectValue"
-            :options="dialogs"
-            :field-names="fieldNames"
-            @change="dialogChange"
-          >
-          </a-select>
-        </a-card>
-        <a-card style="height: 50px">
-          <template #cover>
-            <div style="display: flex; justify-content: space-between">
-              <a-button
-                type="primary"
-                shape="round"
-                class="card-btn-1"
-                @click="modalObj.add = true"
-              >
-                +鏂板缓浼氳瘽
-              </a-button>
-              <!-- <a-button type="text" shape="circle" class="card-btn-2">
-                <icon-search />
-              </a-button> -->
-            </div>
-          </template>
-        </a-card>
-        <a-card class="left">
-          <a-scrollbar
-            class="left-list"
-            style="
-              height: calc(100vh - 350px);
-              overflow-y: auto;
-              overflow-x: hidden;
-            "
-          >
-            <div
-              class="item left-list-item"
-              v-for="session in sessionList"
-              @click="querySessionDetail(session)"
-              :class="{ isLeftActive: activeSessionId === session.id }"
-            >
-              <div class="text" :class="{ time: theme === 'dark' }"
-                >{{ session.name }}
-              </div>
-              <div class="time"
-                >{{
-                  moment(new Date(session.create_time)).format(
-                    'YYYY-MM-DD HH:mm:ss'
-                  )
-                }}
-              </div>
-            </div>
-          </a-scrollbar>
-        </a-card>
+      <a-col :span="1">
+        <chatMenu
+          @createSession="createSession"
+          @querySessionDetail="querySessionDetail"
+          @changeAgentType="changeAgentType"
+        ></chatMenu>
       </a-col>
       <!--      鏅鸿兘浣撲細璇�-->
-      <a-col :span="18" v-show="agentType == '1'">
-        <a-card class="center">
-          <!-- <div
-            v-if="sessionDetailList.length === 0"
-            style="
-              width: 90%;
-              overflow: auto;
-              height: 65vh;
-              margin: 0px auto 20px;
-            "
-          >
-            <div class="center-title">鏅鸿兘闂瓟</div>
-            <div class="center-content">
-              鎴戝彲浠ョ悊瑙e拰瀛︿範浜虹被鐨勮瑷�锛屽叿澶囧杞璇濈殑鑳藉姏锛岀幇鍦ㄥ拰鎴戝紑濮嬩氦娴佸惂~
-            </div>
-            <div class="center-question">
-              <div class="center-question-left">璇曚竴璇曡繖鏍烽棶鎴�</div>
-              <div class="center-question-right">
-                <a-button type="primary">鎹竴鎹�</a-button>
+      <a-col :span="23" v-show="agentType == '1'">
+        <div class="center">
+          <div class="header___lEPyH">
+            <div class="chatHeader">
+              <div class="chatHeaderBox">
+                <span class="title">{{ agentTitle }}</span>
               </div>
             </div>
-            <a-row justify="space-around" class="center-list">
-              <a-col :span="7" class="item">
-                <div class="item-title">
-                  <IconTiktokColor></IconTiktokColor>
-                  鎶栭煶甯﹁揣鑴氭湰
-                </div>
-                <div class="item-content" :class="{ dark: theme === 'dark' }">
-                  缂栧啓寮曚汉娉ㄧ洰涓斿叿鏈夎鏈嶅姏鐨勩�侀�傜敤浜庝骇鍝佺殑...
-                </div>
-              </a-col>
-              <a-col :span="7" class="item">
-                <div class="item-title">
-                  <IconTiktokColor></IconTiktokColor>
-                  鎶栭煶甯﹁揣鑴氭湰
-                </div>
-                <div class="item-content" :class="{ dark: theme === 'dark' }">
-                  缂栧啓寮曚汉娉ㄧ洰涓斿叿鏈夎鏈嶅姏鐨勩�侀�傜敤浜庝骇鍝佺殑...
-                </div>
-              </a-col>
-              <a-col :span="7" class="item">
-                <div class="item-title">
-                  <IconTiktokColor></IconTiktokColor>
-                  鎶栭煶甯﹁揣鑴氭湰
-                </div>
-                <div class="item-content" :class="{ dark: theme === 'dark' }">
-                  缂栧啓寮曚汉娉ㄧ洰涓斿叿鏈夎鏈嶅姏鐨勩�侀�傜敤浜庝骇鍝佺殑...
-                </div>
-              </a-col>
-              <a-col :span="7" class="item">
-                <div class="item-title">
-                  <IconTiktokColor></IconTiktokColor>
-                  鎶栭煶甯﹁揣鑴氭湰
-                </div>
-                <div class="item-content" :class="{ dark: theme === 'dark' }">
-                  缂栧啓寮曚汉娉ㄧ洰涓斿叿鏈夎鏈嶅姏鐨勩�侀�傜敤浜庝骇鍝佺殑...
-                </div>
-              </a-col>
-              <a-col :span="7" class="item">
-                <div class="item-title">
-                  <IconTiktokColor></IconTiktokColor>
-                  鎶栭煶甯﹁揣鑴氭湰
-                </div>
-                <div class="item-content" :class="{ dark: theme === 'dark' }">
-                  缂栧啓寮曚汉娉ㄧ洰涓斿叿鏈夎鏈嶅姏鐨勩�侀�傜敤浜庝骇鍝佺殑...
-                </div>
-              </a-col>
-              <a-col :span="7" class="item">
-                <div class="item-title">
-                  <IconTiktokColor></IconTiktokColor>
-                  鎶栭煶甯﹁揣鑴氭湰
-                </div>
-                <div class="item-content" :class="{ dark: theme === 'dark' }">
-                  缂栧啓寮曚汉娉ㄧ洰涓斿叿鏈夎鏈嶅姏鐨勩�侀�傜敤浜庝骇鍝佺殑...
-                </div>
-              </a-col>
-            </a-row>
-          </div> -->
+          </div>
           <a-scrollbar
             ref="scrollbar"
             id="home"
@@ -149,7 +31,7 @@
             style="
               width: 90%;
               overflow: auto;
-              height: calc(100vh - 380px);
+              height: calc(100vh - 300px);
               margin: 0px auto 20px;
             "
           >
@@ -178,8 +60,10 @@
                 </template>
                 <template #content>
                   <a-card :class="{ chatItemAnswer: theme === 'light' }">
-                    <div :class="{ light: theme === 'light' }"
-                      >{{ sessionDetail.content }}
+                    <div
+                      :class="{ light: theme === 'light' }"
+                      v-html="sessionDetail.content.replace(/\n/g, '<br/>')"
+                    >
                     </div>
                   </a-card>
                 </template>
@@ -243,79 +127,35 @@
                   style="border-radius: 24px"
                   :loading="loading"
                   size="large"
-                  >鍙戦��</a-button
-                >
+                  >鍙戦��
+                </a-button>
               </div>
             </div>
           </div>
-        </a-card>
+        </div>
       </a-col>
-      <a-col :span="18" v-show="agentType == '2'">
-        <a-card class="center">
+      <a-col :span="23" v-show="agentType == '2'">
+        <div class="center">
           <agentSession :modalObj="agentObj"></agentSession>
-        </a-card>
+        </div>
       </a-col>
-
-      <!-- <a-col :span="5">
-        <a-card class="right">
-          <div class="right-top">
-            <div class="right-title">鏁版櫤搴�</div>
-            <div class="right-btn">
-              <a-button type="outline" shape="circle" style="border: none">
-                <icon-search />
-              </a-button>
-              <a-button
-                type="outline"
-                shape="circle"
-                style="border: none; margin-left: -10px"
-              >
-                <icon-close />
-              </a-button>
-            </div>
-          </div>
-          <div class="right-tag">
-            <a-button type="primary" size="mini" class="btn">鍏ㄩ儴 </a-button>
-            <a-button type="outline" size="mini" class="btn"
-              >鏂囨。鍒涗綔
-            </a-button>
-            <a-button type="outline" size="mini" class="btn"
-              >鐭ヨ瘑瀛︿範
-            </a-button>
-            <a-button type="outline" size="mini" class="btn"
-              >鏁堢巼鎻愬崌
-            </a-button>
-          </div>
-          <div class="right-list">
-            <div class="right-item">
-              <div class="item-title">
-                <IconTiktokColor></IconTiktokColor>
-                鎶栭煶甯﹁揣鑴氭湰
-              </div>
-              <div class="item-content" :class="{ dark: theme === 'dark' }">
-                缂栧啓寮曚汉娉ㄧ洰涓斿叿鏈夎鏈嶅姏鐨勩�侀�傜敤浜庝骇鍝佺殑...
-              </div>
-            </div>
-            <div class="right-item">
-              <div class="item-title">
-                <IconTiktokColor></IconTiktokColor>
-                鎶栭煶甯﹁揣鑴氭湰
-              </div>
-              <div class="item-content" :class="{ dark: theme === 'dark' }">
-                缂栧啓寮曚汉娉ㄧ洰涓斿叿鏈夎鏈嶅姏鐨勩�侀�傜敤浜庝骇鍝佺殑...
-              </div>
-            </div>
-            <div class="right-item">
-              <div class="item-title">
-                <IconTiktokColor></IconTiktokColor>
-                鎶栭煶甯﹁揣鑴氭湰
-              </div>
-              <div class="item-content" :class="{ dark: theme === 'dark' }">
-                缂栧啓寮曚汉娉ㄧ洰涓斿叿鏈夎鏈嶅姏鐨勩�侀�傜敤浜庝骇鍝佺殑...
-              </div>
-            </div>
-          </div>
-        </a-card>
-      </a-col> -->
+      <a-col :span="23" v-show="agentType == '3'">
+        <div class="center" style="padding: 0">
+          <historySession
+            @querySessionDetail="querySessionDetail"
+            @changeAgentType="changeAgentType"
+          ></historySession>
+        </div>
+      </a-col>
+      <a-col :span="23" v-show="agentType == '4'">
+        <div class="center" style="padding: 0">
+          <smartAi
+            @createSession="createSession"
+            @querySessionDetail="querySessionDetail"
+            @changeAgentType="changeAgentType"
+          ></smartAi>
+        </div>
+      </a-col>
     </a-row>
   </div>
 </template>
@@ -326,14 +166,28 @@
     IconTiktokColor,
   } from '@arco-design/web-vue/es/icon';
   import { useAppStore, useUserStore } from '@/store';
-  import { computed, nextTick, onMounted, watch, reactive, ref } from 'vue';
+  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,
@@ -350,6 +204,7 @@
   const chatDis = ref(false);
   const loading = ref(false);
   const agentType = ref('1');
+  const agentTitle = ref('鏈懡鍚嶄細璇�');
 
   const currIndex = ref(0);
   const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
@@ -377,7 +232,6 @@
         });
         console.log(data, 'dialogs');
         queryCanvas();
-        // querySessionList();
       }
     }
   };
@@ -398,12 +252,32 @@
 
       // 鍒ゆ柇褰撳墠鏄櫤鑳戒綋鎴朼gent
       // console.log(val, 'val');
-      if (dialogs.value.length > 0) {
-        dialogChange(dialogs.value[0].id);
-      }
+      // 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 {
+    }
+  };
+  // 鏂板缓浼氳瘽
+  const createSession = async (id, name = '鏈懡鍚嶄細璇�') => {
+    // 濡傛灉鏈変細璇漣d
+    console.log(name, '鏂板缓浼氳瘽鍚嶇О');
+
+    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('鍒涘缓浼氳瘽澶辫触锛岃閲嶈瘯');
     }
   };
 
@@ -501,12 +375,13 @@
               if (done) {
                 console.info('done');
                 displayedText.value = '';
-                querySessionDetail(sectionList.value);
+                queryNewSessionDetail(activeSessionId.value);
+                EventBus.emit('queryAppUsageList');
                 break;
               }
             }
           }
-          querySessionList();
+          // querySessionList();
           chatDis.value = false;
           loading.value = false;
           inputMsg.value = '';
@@ -518,6 +393,23 @@
       }
     }
   };
+
+  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;
@@ -569,8 +461,19 @@
   const addSession = () => {
     querySessionList();
   };
+  onBeforeMount(() => {
+    // DialogList();
+    //鏂板缓浼氳瘽
+    createSession('');
+  });
   onMounted(() => {
-    DialogList();
+    EventBus.on('newChat', () => {
+      agentType.value = 1;
+      createSession('');
+    });
+  });
+  onBeforeUnmount(() => {
+    EventBus.off('newChat');
   });
 
   const appStore = useAppStore();
@@ -600,9 +503,11 @@
   .isLeftActive {
     background-color: #ededf5;
   }
+
   .left-list-item {
     margin-bottom: 2px;
   }
+
   .left-list-item:hover {
     background-color: #ededf5;
   }
@@ -617,6 +522,7 @@
       font-size: 16px;
       color: #333;
     }
+
     .left-select {
       :deep(.arco-select-view-single) {
         border-radius: 5px;
@@ -631,8 +537,8 @@
 
     .left {
       /* height: calc(100vh - 160px);
-      overflow-y: auto;
-      overflow-x: hidden;*/
+    overflow-y: auto;
+    overflow-x: hidden;*/
       border: 0px;
 
       .left-list {
@@ -657,6 +563,7 @@
         }
       }
     }
+
     .card-btn-1 {
       margin: 8px 15px;
       width: 100%;
@@ -666,22 +573,26 @@
     .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 {
       position: relative;
+      padding-left: 50px;
 
       .center-title {
         line-height: 60px;
@@ -709,6 +620,7 @@
           margin-right: 20px;
         }
       }
+
       .center-list {
         margin-top: 10px;
 
@@ -718,9 +630,11 @@
           padding: 10px;
           min-height: 120px;
           background-color: #e9f3ff;
+
           .item-content {
             color: #666;
           }
+
           .item-title {
             text-align: center;
             line-height: 40px;
@@ -730,6 +644,7 @@
           }
         }
       }
+
       .chartStart {
         color: #4955f5;
         cursor: pointer;
@@ -737,9 +652,11 @@
         font-size: 12px;
         font-weight: 500;
       }
+
       .chat_bottom {
         display: flex;
         align-items: center;
+
         .center-bottom {
           // position: absolute;
           // width: 90%;
@@ -764,28 +681,34 @@
             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;
@@ -802,13 +725,16 @@
           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);
@@ -835,4 +761,30 @@
       }
     }
   }
+  .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;
+      }
+    }
+  }
 </style>

--
Gitblit v1.8.0