|
@@ -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{
|