From c93d4b3af5739f786cfdf20b16b28ec60403f709 Mon Sep 17 00:00:00 2001
From: suerprisePlus <15810472099@163.com>
Date: 星期二, 25 六月 2024 19:53:54 +0800
Subject: [PATCH] 前端对接 seb实体库,rag基本服务

---
 src/components/Chat/chatList.vue |  148 ++++++++++++++++++++++++++++---------------------
 1 files changed, 85 insertions(+), 63 deletions(-)

diff --git a/src/components/Chat/chatList.vue b/src/components/Chat/chatList.vue
index 22c0501..cd22876 100644
--- a/src/components/Chat/chatList.vue
+++ b/src/components/Chat/chatList.vue
@@ -2,12 +2,9 @@
   <div class="body">
     <div :style="pageConfig.width | setWidth">
       <div class="web__main" ref="main">
-        <div
-          class="web__main-item"
-          v-for="(item, index) in list"
-          :key="loding(index)"
-          :class="{ 'web__main-item--mine': item.mine }"
-        >
+        <div class="web__main-item" v-for="(item, index) in list" :key="loding(index)"
+          :class="{ 'web__main-item--mine': item.mine }">
+ 
           <div class="web__main_content">
             <div>
               <img :src="item.img" />
@@ -18,7 +15,7 @@
                   <div style="display: flex">
                     {{ item.name }}
 
-                    <div style="margin-left: 10px" v-show="item.file">
+                    <!-- <div style="margin-left: 10px" v-show="item.file">
                       <el-select
                         @change="(val) => setFileChange(val)"
                         v-model="item.file"
@@ -32,7 +29,7 @@
                         >
                         </el-option>
                       </el-select>
-                    </div>
+                    </div> -->
                   </div>
 
                   <div>
@@ -40,53 +37,39 @@
                   </div>
                 </cite>
               </div>
-              <div v-show="item.markDown == true" class="web__main-text">
-                <VueMarkdown
-                  class="web_Main_markDown"
-                  :source="item.text.text"
-                ></VueMarkdown>
+              <div class="web__main-text">
+                <div v-for="(res, key) in item.list" :key="key">
+                  <div v-if="res.type === 'text'">
+                    {{ res.val }}
+                  </div>
+                  <div v-else-if="res.type == 'loader'">
+                    <span v-html="handleDetail(res.val)" ref="content"></span>
+                  </div>
+                  <div style="margin-bottom:10px" v-else-if="res.type == 'rag'">
+                    <div v-show="res.acction">
+                      {{ res.acction }}
+                    </div>
+                    <div> {{ res.question }} </div>
+                    <div style="display: flex;">
+                      鏉ユ簮: {{ res.source }}
+                      <div @click.stop="setRagMoreList(res.msg)" class="setRagMore" v-show="res.more">
+                        ...鏇村
+                      </div>
+                    </div>
+                  </div>
+                </div>
+
               </div>
-              <div v-show="item.markDown == false" class="web__main-text">
-                <div class="web__main-arrow"></div>
-                <span
-                  v-html="handleDetail(item.text.text)"
-                  ref="content"
-                ></span>
-                <ul class="web__main-list" v-if="item.text.list">
-                  <li
-                    @click="handleItemMsg(citem)"
-                    v-for="(citem, cindex) in item.text.list"
-                    :key="cindex"
-                  >
-                    {{ citem.text }}
-                  </li>
-                </ul>
-              </div>
+
             </div>
           </div>
         </div>
       </div>
     </div>
-    <el-dialog
-      :visible.sync="show"
-      width="40%"
-      append-to-body
-      :before-close="handleClose"
-      class="web__dialog"
-    >
+    <el-dialog :visible.sync="show" width="40%" append-to-body :before-close="handleClose" class="web__dialog">
       <img :src="imgSrc" v-if="imgSrc" style="width: 100%; object-fit: cover" />
-      <video
-        :src="videoSrc"
-        v-if="videoSrc"
-        style="width: 100%; object-fit: cover"
-        controls="controls"
-      ></video>
-      <audio
-        :src="audioSrc"
-        v-if="audioSrc"
-        style="width: 100%; object-fit: cover"
-        controls="controls"
-      ></audio>
+      <video :src="videoSrc" v-if="videoSrc" style="width: 100%; object-fit: cover" controls="controls"></video>
+      <audio :src="audioSrc" v-if="audioSrc" style="width: 100%; object-fit: cover" controls="controls"></audio>
     </el-dialog>
   </div>
 </template>
@@ -108,9 +91,9 @@
     setWidth(value) {
       let width = value;
       if (`${value}`.match(/^\d+$/)) {
-        width = value-30 + "px";
+        width = value - 30 + "px";
       }
-      if(width=="100vh"){
+      if (width == "100vh") {
         return "99vh"
       }
       return width;
@@ -134,7 +117,8 @@
       show: false,
       imgSrc: "",
       videoSrc: "",
-      audioSrc: ""
+      audioSrc: "",
+      isDisabled: true,
     };
   },
   watch: {
@@ -148,6 +132,18 @@
     }
   },
   methods: {
+    setRagMoreList(res) {
+      if (this.isDisabled) {
+        this.isDisabled = false;
+        setTimeout(() => {
+          bus.$emit("setRagMoreListAll", res);
+        }, 500);
+        setTimeout(() => {
+          this.isDisabled = false;
+        }, 3000)
+      }
+
+    },
     setFileChange(res) {
       if (res == "testUrl") return;
       axios.get(res).then((response) => {
@@ -264,6 +260,7 @@
   cursor: pointer;
   display: block;
 }
+
 .web__msg--img[data-class="iconBox"] {
   max-width: 24px;
   min-width: unset;
@@ -292,8 +289,8 @@
   font-size: 20px;
   background: #555555;
   padding: 10px !important;
-  border-radius:10px !important;
-  margin-top:10px ;
+  border-radius: 10px !important;
+  margin-top: 10px;
 
 }
 
@@ -329,11 +326,13 @@
   padding-left: 0px;
   font-style: normal;
 }
+
 .citeTitle {
   width: 100%;
   display: flex;
   justify-content: space-between;
 }
+
 .web__main-text {
   /* max-width: 40%; */
   width: 100%;
@@ -349,15 +348,18 @@
   font-size: 16px;
   word-break: break-all;
 }
+
 .web__main_content {
-  width:  calc(100% - 50px);
+  width: calc(100% - 50px);
   padding: 10px 0px;
   display: flex;
 }
+
 .web__main_Date {
   flex: 1;
   padding: 0px 15px;
 }
+
 .web__main_Date cite {
   line-height: 24px;
   font-size: 14px;
@@ -369,6 +371,7 @@
   display: flex;
   justify-content: space-between;
 }
+
 .web__main-arrow {
   top: 6px;
   left: -8px;
@@ -459,8 +462,19 @@
   font-size: 16px;
   color: #f2f2f2;
 }
+
 .web__main-text img {
   max-width: 200px;
+}
+
+.setRagMore {
+  margin-left: 10px;
+
+}
+
+.setRagMore:hover {
+  color: #409EFF;
+
 }
 </style>
 <style>
@@ -469,6 +483,7 @@
   /* background: rgb(31, 31, 31); */
   padding: 20px;
 }
+
 .loadBox .loaderContantBox {
   color: white;
   font-size: 40px;
@@ -520,44 +535,51 @@
 
 @keyframes round {
   0% {
-    transform: rotate(0deg); /* 寮�濮嬫棆杞� div 鍏冪礌 */
+    transform: rotate(0deg);
+    /* 寮�濮嬫棆杞� div 鍏冪礌 */
   }
 
   100% {
-    transform: rotate(360deg); /* 缁撴潫鏃嬭浆 div 鍏冪礌 */
+    transform: rotate(360deg);
+    /* 缁撴潫鏃嬭浆 div 鍏冪礌 */
   }
 }
 </style>
 
 
-<style >
- .web_Main_markDown h1 {
+<style>
+.web_Main_markDown h1 {
   line-height: 30px !important;
   font-size: 20px !important;
 }
-.web_Main_markDown h2  {
+
+.web_Main_markDown h2 {
   line-height: 25px !important;
   font-size: 18px !important;
   margin-left: 10px;
 }
+
 .web_Main_markDown h3 {
   line-height: 25px !important;
   font-size: 18px !important;
   margin-left: 10px;
 }
+
 .web_Main_markDown li {
   line-height: 20px !important;
   font-size: 16px !important;
   margin-left: 20px;
 }
+
 .web_Main_markDown p {
   line-height: 20px !important;
   font-size: 16px !important;
   margin-left: 20px;
 }
-.web_Main_markDown   {
-   background: #555555;
-   padding: 10px;
-   border-radius: 10px;
+
+.web_Main_markDown {
+  background: #555555;
+  padding: 10px;
+  border-radius: 10px;
 }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3