From 324db843282ae84085e52a7e8ad03d01a6fb52cc Mon Sep 17 00:00:00 2001
From: liudong <liudong>
Date: 星期四, 08 八月 2024 11:51:51 +0800
Subject: [PATCH] 配置上传图片bug页面修改

---
 src/views/session/sessionRecordsManager/index.vue |  636 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 344 insertions(+), 292 deletions(-)

diff --git a/src/views/session/sessionRecordsManager/index.vue b/src/views/session/sessionRecordsManager/index.vue
index fb879ba..d64b2df 100644
--- a/src/views/session/sessionRecordsManager/index.vue
+++ b/src/views/session/sessionRecordsManager/index.vue
@@ -5,13 +5,13 @@
     <a-row :gutter="[5, 5]" style="margin-top: 3px">
       <a-col :span="4">
         <a-card>
-              <a-select
-                v-model="selectValue"
-                :options="dialogs"
-                :field-names="fieldNames"
-                @change="dialogChange"
-              >
-              </a-select>
+          <a-select
+            v-model="selectValue"
+            :options="dialogs"
+            :field-names="fieldNames"
+            @change="dialogChange"
+          >
+          </a-select>
         </a-card>
         <a-card style="height: 50px">
           <template #cover>
@@ -24,9 +24,9 @@
               >
                 +鏂板缓浼氳瘽
               </a-button>
-              <a-button type="text" shape="circle" class="card-btn-2">
+              <!-- <a-button type="text" shape="circle" class="card-btn-2">
                 <icon-search />
-              </a-button>
+              </a-button> -->
             </div>
           </template>
         </a-card>
@@ -45,13 +45,13 @@
               @click="querySessionDetail(session)"
               :class="{ isLeftActive: activeSessionId === session.id }"
             >
-              <div class="text" :class="{ light: theme === 'dark' }">{{
-                  session.name
-                }}
+              <div class="text" :class="{ light: theme === 'dark' }"
+                >{{ session.name }}
               </div>
-              <div class="time">{{
+              <div class="time"
+                >{{
                   moment(new Date(session.create_time)).format(
-                    "YYYY-MM-DD HH:mm:ss"
+                    'YYYY-MM-DD HH:mm:ss'
                   )
                 }}
               </div>
@@ -61,7 +61,15 @@
       </a-col>
       <a-col :span="15">
         <a-card class="center">
-          <div v-if="sessionDetailList.length === 0">
+          <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拰瀛︿範浜虹被鐨勮瑷�锛屽叿澶囧杞璇濈殑鑳藉姏锛岀幇鍦ㄥ拰鎴戝紑濮嬩氦娴佸惂~
@@ -134,7 +142,12 @@
             id="home"
             v-else
             class="chat-list"
-            style="width: 90%; overflow: auto; height: 60vh; margin: 0px auto"
+            style="
+              width: 90%;
+              overflow: auto;
+              height: 65vh;
+              margin: 0px auto 20px;
+            "
           >
             <div class="chat-item" v-for="sessionDetail in sessionDetailList">
               <a-comment
@@ -142,10 +155,7 @@
                 avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp"
               >
                 <template #content>
-                  <div>{{
-                      sessionDetail.content
-                    }}
-                  </div>
+                  <div>{{ sessionDetail.content }} </div>
                 </template>
               </a-comment>
               <a-comment
@@ -157,9 +167,8 @@
                     class="chat-item-answer"
                     style="background-color: rgba(63, 64, 79, 1)"
                   >
-                    <div :class="{ light: theme === 'light' }">{{
-                        sessionDetail.content
-                      }}
+                    <div :class="{ light: theme === 'light' }"
+                      >{{ sessionDetail.content }}
                     </div>
                   </a-card>
                 </template>
@@ -174,16 +183,16 @@
                     auto-size
                     v-model="displayedText"
                     class="chat-item-answer"
-                    style="background-color:rgba(192,172,172,0.88)"
+                    style="background-color: rgba(192, 172, 172, 0.88)"
                   >
                   </a-textarea>
                 </template>
               </a-comment>
             </div>
           </a-scrollbar>
-
-          <div class="center-bottom">
-            <a-textarea
+          <div class="chat_bottom">
+            <div class="center-bottom">
+              <!-- <a-textarea
               v-model="inputMsg"
               @keydown.shift.enter="sendMessage"
               style="height: 180px"
@@ -192,7 +201,30 @@
               allow-clear
               show-word-limit
             >
-            </a-textarea>
+            </a-textarea> -->
+              <a-textarea
+                v-model="inputMsg"
+                @keydown.enter="sendMessage"
+                placeholder="杈撳叆鎮ㄦ兂浜嗚В鐨勫唴瀹癸紝Shift+Enter鎹㈣锛孍nter鍙戦��"
+                allow-clear
+                show-word-limit
+                :disabled="chatDis"
+                :auto-size="{
+                  minRows: 12,
+                  maxRows: 5,
+                }"
+              />
+            </div>
+            <div style="margin-left: 10px">
+              <!-- <icon-send size="32" /> -->
+              <a-button
+                :disabled="chatDis"
+                @click="sentClick"
+                type="primary"
+                size="large"
+                >鍙戦��</a-button
+              >
+            </div>
           </div>
         </a-card>
       </a-col>
@@ -216,23 +248,19 @@
           <div class="right-tag">
             <a-space>
               <a-button type="primary" shape="round" size="mini" class="btn"
-              >鍏ㄩ儴
-              </a-button
-              >
+                >鍏ㄩ儴
+              </a-button>
               <a-button type="outline" shape="round" size="mini" class="btn"
-              >鏂囨。鍒涗綔
-              </a-button
-              >
+                >鏂囨。鍒涗綔
+              </a-button>
               <a-button type="outline" shape="round" size="mini" class="btn"
-              >鐭ヨ瘑瀛︿範
-              </a-button
-              >
+                >鐭ヨ瘑瀛︿範
+              </a-button>
             </a-space>
             <a-space style="margin-top: 10px">
               <a-button type="outline" shape="round" size="mini" class="btn"
-              >鏁堢巼鎻愬崌
-              </a-button
-              >
+                >鏁堢巼鎻愬崌
+              </a-button>
             </a-space>
           </div>
           <div class="right-list">
@@ -270,288 +298,312 @@
   </div>
 </template>
 <script setup lang="ts">
-import { IconClose, IconSearch, IconTiktokColor } from "@arco-design/web-vue/es/icon";
-import { useAppStore } from "@/store";
-import { computed, nextTick, onMounted, reactive, ref } from "vue";
-import { Message } from "@arco-design/web-vue";
-import moment from "moment";
-import AddSession from "@/views/session/sessionManager/components/addSession.vue";
-import { chatApi, getDialogListApi, getSessionDetailsApi, sessionListApi } from "@/api/session";
+  import {
+    IconClose,
+    IconSearch,
+    IconTiktokColor,
+  } from '@arco-design/web-vue/es/icon';
+  import { useAppStore } from '@/store';
+  import { computed, nextTick, onMounted, reactive, ref } from 'vue';
+  import { Message } from '@arco-design/web-vue';
+  import moment from 'moment';
+  import AddSession from '@/views/session/sessionManager/components/addSession.vue';
+  import {
+    chatApi,
+    getDialogListApi,
+    getSessionDetailsApi,
+    sessionListApi,
+  } from '@/api/session';
 
-const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
-const sessionList = ref([]); //浼氳瘽鍒楄〃
-const modalObj = reactive({ add: false });
+  const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
+  const sessionList = ref([]); //浼氳瘽鍒楄〃
+  const modalObj = reactive({ add: false });
+  const chatDis = 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 selectValue = ref("");
-const DialogList = async () => {
-  const { code, data } = await getDialogListApi();
-  if (code === 200) {
-    if (data) {
-      selectValue.value = data[0].id;
-      dialogs.value = data;
-      querySessionList()
+  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 selectValue = ref('');
+  const DialogList = async () => {
+    const { code, data } = await getDialogListApi();
+    if (code === 200) {
+      if (data) {
+        selectValue.value = data[0].id;
+        dialogs.value = data;
+        querySessionList();
+      }
     }
-  }
-};
-const dialogChange = (value) => {
-  querySessionList()
-};
-const sendMessage = async (event) => {
-  event.preventDefault();
-  if (!activeSessionId.value) {
-    Message.warning("璇烽�夋嫨浼氳瘽");
-    return;
-  }
-  if (inputMsg.value) {
-    const { code, data } = await chatApi({
-      conversation_id: activeSessionId.value,
-      messages: inputMsg.value
-    });
-    const res = await getSessionDetailsApi(activeSessionId.value);
-    if (res.code === 200) {
-      sessionDetailList.value = res.data.message.map((item, index) => {
-        if (index === res.data.message.length - 1) {
-          item.role = "last";
-          displayedText.value = "";
-          currIndex.value = 0;
-          streamStr.value = item.content;
-          startDisplayStr();
-        }
-        return item;
+  };
+  const dialogChange = (value) => {
+    querySessionList();
+  };
+  const sentClick = (event) => {
+    sendMessage(event);
+  };
+  const sendMessage = async (event) => {
+    event.preventDefault();
+    chatDis.value = true;
+    if (!activeSessionId.value) {
+      Message.warning('璇烽�夋嫨浼氳瘽');
+      return;
+    }
+    if (inputMsg.value) {
+      const data = await chatApi({
+        conversation_id: activeSessionId.value,
+        messages: inputMsg.value,
       });
-      refreshScroll();
+      if (data) {
+        chatDis.value = false;
+
+        // inputMsg.value = '';
+        // querySessionDetail({ id: activeSessionId.value });
+      }
+      const res = await getSessionDetailsApi(activeSessionId.value);
+      if (res.code === 200) {
+        sessionDetailList.value = res.data.message.map((item, index) => {
+          if (index === res.data.message.length - 1) {
+            item.role = 'last';
+            displayedText.value = '';
+            currIndex.value = 0;
+            streamStr.value = item.content;
+            startDisplayStr();
+          }
+          return item;
+        });
+        refreshScroll();
+      }
+      inputMsg.value = '';
+    } else {
+      Message.warning('娑堟伅涓嶈兘涓虹┖');
     }
-    inputMsg.value = "";
-  } else {
-    Message.warning("娑堟伅涓嶈兘涓虹┖");
-  }
-};
-const querySessionDetail = async (session) => {
-  activeSessionId.value = session.id;
-  const { code, data } = await getSessionDetailsApi(session.id);
-  if (code === 200) {
-    sessionDetailList.value = data.message;
-    refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
-  }
-};
-const scrollbar = ref(null);
-const refreshScroll = () => {
-  nextTick(() => {
-    const container = document.getElementById("home");
-    scrollbar.value.scrollTop(container.scrollHeight);
+  };
+  const querySessionDetail = async (session) => {
+    activeSessionId.value = session.id;
+    const { code, data } = await getSessionDetailsApi(session.id);
+    if (code === 200) {
+      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;
+    } else {
+      Message.warning('鏌ヨ澶辫触');
+    }
+  };
+  //鏂板浼氳瘽涔嬪悗鍒锋柊浼氳瘽鍒楄〃
+  const addSession = () => {
+    querySessionList();
+  };
+  onMounted(() => {
+    DialogList();
   });
-};
-// 鏌ヨ浼氳瘽鍒楄〃
-const querySessionList = async () => {
-  const { code, data } = await sessionListApi(selectValue.value);
-  if (code === 200) {
-    sessionList.value = data;
-  } else {
-    Message.warning("鏌ヨ澶辫触");
-  }
-};
-//鏂板浼氳瘽涔嬪悗鍒锋柊浼氳瘽鍒楄〃
-const addSession = () => {
-  querySessionList();
-};
-onMounted(() => {
-  DialogList();
-});
-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);
-  } else {
-    clearTimeout(timer!);
-    timer = null;
-  }
-};
+  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);
+    } else {
+      clearTimeout(timer!);
+      timer = null;
+    }
+  };
 </script>
 <style scoped lang="scss">
-.isLeftActive {
-  background-color: lightgrey;
-}
+  .isLeftActive {
+    background-color: lightgrey;
+  }
 
-.light {
-  color: white !important;
-}
+  .light {
+    color: white !important;
+  }
 
-.dark {
-  color: gray !important;
-}
+  .dark {
+    color: gray !important;
+  }
 
-.container {
+  .container {
+    .top-title {
+      line-height: 60px;
+      font-size: 25px;
+      font-family: 榛戜綋;
+    }
 
-.top-title {
-  line-height: 60px;
-  font-size: 25px;
-  font-family: 榛戜綋;
-}
+    .center,
+    .right {
+      box-sizing: border-box;
+      height: calc(100vh - 100px);
+    }
 
-.center,
-.right {
-  box-sizing: border-box;
-  height: calc(100vh - 100px);
-}
-
-.left {
-  /* height: calc(100vh - 160px);
+    .left {
+      /* height: calc(100vh - 160px);
         overflow-y: auto;
         overflow-x: hidden;*/
-  border: 0px;
+      border: 0px;
 
-.left-list {
+      .left-list {
+        .item {
+          cursor: pointer;
 
-.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;
+          }
+        }
+      }
+    }
+    .card-btn-1 {
+      margin: 10px;
+      width: 75%;
+    }
 
-.time {
-  color: gray;
-  font-size: 12px;
-  padding-left: 10px;
-}
+    .card-btn-2 {
+      margin: 10px 10px;
+    }
 
-}
-}
-}
-.card-btn-1 {
-  margin: 10px;
-  width: 75%;
-}
+    .center {
+      position: relative;
 
-.card-btn-2 {
-  margin: 10px 10px;
-}
+      .center-title {
+        line-height: 60px;
+        font-size: 25px;
+        font-family: 榛戜綋;
+        color: deepskyblue;
+      }
 
-.center {
-  position: relative;
+      .center-content {
+        font-size: 14px;
+        color: gray;
+      }
 
-.center-title {
-  line-height: 60px;
-  font-size: 25px;
-  font-family: 榛戜綋;
-  color: deepskyblue;
-}
+      .center-question {
+        margin-top: 20px;
+        display: flex;
+        justify-content: space-between;
 
-.center-content {
-  font-size: 14px;
-  color: gray;
-}
+        .center-question-left {
+          margin-top: 5px;
+          margin-left: 20px;
+        }
 
-.center-question {
-  margin-top: 20px;
-  display: flex;
-  justify-content: space-between;
+        .center-question-right {
+          margin-right: 20px;
+        }
+      }
+      .center-list {
+        margin-top: 10px;
 
-.center-question-left {
-  margin-top: 5px;
-  margin-left: 20px;
-}
+        .item {
+          border-radius: 10px;
+          margin-top: 10px;
+          padding: 10px;
+          height: 120px;
+          background-color: lightcyan;
 
-.center-question-right {
-  margin-right: 20px;
-}
+          .item-title {
+            text-align: center;
+            line-height: 40px;
+            font-size: 20px;
+            font-family: 榛戜綋;
+            color: black;
+          }
+        }
+      }
+      .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;
+          :deep(.arco-textarea-wrapper) {
+            border-radius: 24px;
+          }
+        }
+      }
+    }
+    .right {
+      .right-top {
+        display: flex;
+        justify-content: space-between;
 
-}
-.center-list {
-  margin-top: 10px;
+        .right-title {
+          font-size: 25px;
+          font-family: 榛戜綋;
+          color: black;
+        }
 
-.item {
-  border-radius: 10px;
-  margin-top: 10px;
-  padding: 10px;
-  height: 120px;
-  background-color: lightcyan;
+        .right-btn {
+          position: relative;
+          left: 20px;
+          top: 0px;
+        }
+      }
+      .right-tag {
+        margin-top: 20px;
+      }
 
-.item-title {
-  text-align: center;
-  line-height: 40px;
-  font-size: 20px;
-  font-family: 榛戜綋;
-  color: black;
-}
+      .right-list {
+        .right-item {
+          border-radius: 10px;
+          margin-top: 10px;
+          padding: 10px;
+          height: 120px;
+          background-color: lightcyan;
 
-}
-}
-.center-bottom {
-  position: absolute;
-  width: 90%;
-  bottom: 20px;
-  left: 5%;
-}
-
-}
-.right {
-
-.right-top {
-  display: flex;
-  justify-content: space-between;
-
-.right-title {
-  font-size: 25px;
-  font-family: 榛戜綋;
-  color: black;
-}
-
-.right-btn {
-  position: relative;
-  left: 20px;
-  top: 0px;
-}
-
-}
-.right-tag {
-  margin-top: 20px;
-}
-
-.right-list {
-
-.right-item {
-  border-radius: 10px;
-  margin-top: 10px;
-  padding: 10px;
-  height: 120px;
-  background-color: lightcyan;
-
-.item-title {
-  text-align: center;
-  line-height: 40px;
-  font-size: 20px;
-  font-family: 榛戜綋;
-  color: black;
-}
-
-}
-}
-}
-}
+          .item-title {
+            text-align: center;
+            line-height: 40px;
+            font-size: 20px;
+            font-family: 榛戜綋;
+            color: black;
+          }
+        }
+      }
+    }
+  }
 </style>

--
Gitblit v1.8.0