htc 1 тиждень тому
батько
коміт
d1c8f0de4d
2 змінених файлів з 23 додано та 10 видалено
  1. 20 8
      src/views/modules/agent/dialog.vue
  2. 3 2
      src/views/modules/agent/program.vue

+ 20 - 8
src/views/modules/agent/dialog.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="page">
-        <div class="back adfac" v-if="dialogList.length">
+        <div class="back adfac" v-if="dialogList.length||idx">
             <img src="@/assets/images/agent/arrow_left.png">
             <span @click="handleBack">返回</span>
         </div>
@@ -34,7 +34,7 @@
                 </template>
             </div>
         </div>
-        <div class="dialog" v-else>
+        <div class="dialog" ref="scrollableDiv" v-else>
             <div class="list">
                 <div class="l_item" v-for="(item,index) in dialogList" :key="index">
                     <div class="li_pre my adfac" v-if="item.type===1">
@@ -44,7 +44,6 @@
                     <div class="li_pre ai" v-else-if="item.type===2">
                         <div class="adfac">
                             <img class="img" src="@/assets/images/agent/dialog_logo3.png">
-                            <!-- <div class="text" v-if="item.answer">{{ item.answer }}</div> -->
                             <div class="text" v-if="item.answer" v-html="sanitizeHtml(item.answer)"></div>
                             <div class="text" v-else>
                                 <img src="@/assets/images/agent/dialog_loading.gif">
@@ -115,11 +114,11 @@
                         <img src="@/assets/images/agent/intenet2.png" v-else>
                         <span>联网搜索</span>
                     </div>
-                    <div class="abl_pre adfac" :class="{'active':isScwd}" @click="isScwd=!isScwd">
+                    <!-- <div class="abl_pre adfac" :class="{'active':isScwd}" @click="isScwd=!isScwd">
                         <img src="@/assets/images/agent/upload.png" v-if="!isScwd">
                         <img src="@/assets/images/agent/upload2.png" v-else>
                         <span>上传文档</span>
-                    </div>
+                    </div> -->
                 </div>
                 <div class="ab_r">
                     <img src="@/assets/images/agent/input_hou.png" v-if="question" @click="handleQuestion" style="cursor: pointer;">
@@ -133,7 +132,7 @@
 <script setup name="">
     import Cookies from "js-cookie";
     import DOMPurify from 'dompurify';
-    import { ref, getCurrentInstance } from 'vue'
+    import { ref, getCurrentInstance, watch } from 'vue'
     import useClipboard from 'vue-clipboard3';
     import { sendChatMessageStream } from '@/api/agent'
     const { toClipboard } = useClipboard();
@@ -150,6 +149,7 @@
     const isDz = ref(false)
     const isPl = ref(false)
     const dialogList = ref([])
+    const scrollableDiv = ref(null);
 
     const currentTaskId = ref('');
 
@@ -177,6 +177,7 @@
 
     const handleQuestion = () => {
         if(question.value.trim()=='') return proxy.$message.warning('请输入问题');
+        let qc = JSON.parse(JSON.stringify(question.value.trim()));
         let obj1 = {
             question: question.value.trim(),
             type: 1
@@ -187,8 +188,8 @@
             type: 2
         }
         dialogList.value = [...dialogList.value,obj2]
-        startStream(question.value.trim());
         question.value = '';
+        startStream(qc);
     }
 
     const startStream = async (query) => {
@@ -197,7 +198,7 @@
                 if(res.code!==0) return proxy.$message.error(res.msg);
                 dialogList.value = [...dialogList.value].map((item, idx) => {
                     if (idx === dialogList.value.length - 1) {
-                        return { ...item, answer: res.data };
+                        return { ...item, answer: res?.data?.replace(/(\r\n|\n|\r)+/g, '<br>') };
                     }
                     return item;
                 });
@@ -233,6 +234,16 @@
     const handlePl = () => {
         isPl.value = !isPl.value;
     }
+
+    watch(() => dialogList.value, (newVal) => {
+        if(newVal.length>0) {
+            if(scrollableDiv.value){
+                setTimeout(() => {
+                    scrollableDiv.value.scrollTop = 99999;
+                }, 50);
+            } 
+        }
+    })
 </script>
 <style>
 .icon_pop{
@@ -351,6 +362,7 @@
             width: 100%;
             height: calc(100vh - 228px);
             padding: 24px 0;
+            flex: 1;
             position: relative;
             overflow-y: auto;
             .list{

+ 3 - 2
src/views/modules/agent/program.vue

@@ -29,7 +29,7 @@
                                         <div>
                                             <span>{{ item.enterpriseName }}</span>
                                         </div>
-                                        <el-popover placement="right" width="177" trigger="click">
+                                        <el-popover placement="right" width="177" trigger="hover">
                                             <div class="tl_czs">
                                                 <div class="tlc_pre" @click="handleProgramDetail(item)" v-hasPermi="['core:program:info']">项目详情</div>
                                                 <div class="tlc_pre" @click="handleProgramDelete(item)" v-hasPermi="['core:program:delete']">删除项目</div>
@@ -291,8 +291,9 @@
                                 <div class="fs_text" :class="{'active':coachs!=='请选择'}">{{ coachs }}</div>
                                 <i class="el-icon-arrow-down" style="color: #C0C4CC;"></i>
                             </div>
-                            <div class="f_s adfac" v-else>
+                            <div class="f_s adfacjb" v-else>
                                 <p>{{ cocahNames }}</p>
+                                <i class="el-icon-arrow-down" style="color: #C0C4CC;"></i>
                             </div>
                         </div>
                     </el-popover>