提交 522a0f44 作者: 毛细亚

更新代码

上级 ae981e76
<svg t="1756195887325" class="icon" viewBox="0 0 1034 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7768" width="200" height="200"><path d="M1011.982 842.518 606.673 140.565c-49.575-85.822-130.595-85.822-180.157 0L21.205 842.518c-49.562 85.91-9.015 155.99 90.04 155.99l810.693 0C1020.997 998.507 1061.502 928.423 1011.982 842.518zM460.924 339.737c14.565-15.747 33.082-23.622 55.665-23.622 22.595 0 41.095 7.792 55.675 23.307 14.485 15.55 21.725 34.997 21.725 58.382 0 20.12-30.235 168.07-40.32 275.704l-72.825 0c-8.845-107.635-41.652-255.584-41.652-275.704C439.194 374.774 446.446 355.407 460.924 339.737zM571.244 851.538c-15.32 14.92-33.55 22.355-54.65 22.355-21.095 0-39.33-7.435-54.647-22.355-15.275-14.885-22.867-32.915-22.867-54.09 0-21.065 7.592-39.29 22.867-54.565 15.317-15.28 33.552-22.92 54.647-22.92 21.1 0 39.33 7.64 54.65 22.92 15.265 15.275 22.875 33.5 22.875 54.565C594.119 818.623 586.509 836.653 571.244 851.538z" p-id="7769"></path></svg>
\ No newline at end of file
<template> <template>
<div class="AiLibrary"> <div class="AiLibrary">
<div class="aiLibraryHeader"> <div class="aiLibraryContent" v-if="knowledge_search_list.length > 2">
<div class="aiLibraryHeader_content columnFlex"> <div class="aiLibraryHeader">
<div class="rowFlex rowCenter spaceBetween"> <div class="aiLibraryHeader_content columnFlex">
<p class="aiLibraryHeader_content_tag_title">当前知识库: <div class="rowFlex rowCenter spaceBetween">
<el-popover placement="top" style="width: auto;" title="当前知识库:" trigger="click" <p class="aiLibraryHeader_content_tag_title">当前知识库:
content="这是一段内容"> <el-popover placement="top" style="width: auto;" title="当前知识库:" trigger="click"
<div class="aiLibraryHeader_content_tag columnFlex"> content="这是一段内容">
<p v-for="(name, index) in knowledge_search_list" style="margin-bottom:10px;" <div class="aiLibraryHeader_content_tag columnFlex">
:key="index"> <p v-for="(name, index) in knowledge_search_list" style="margin-bottom:10px;"
<el-tag size="mini">{{ name :key="index">
}}</el-tag> <el-tag size="mini">{{ name
</p> }}</el-tag>
</div> </p>
<el-button type="text" size="medium" slot="reference">{{ knowledge_search_list.length </div>
}}</el-button> <el-button type="text" size="medium" slot="reference">{{ knowledge_search_list.length
</el-popover> }}</el-button>
</p> </el-popover>
<el-button type="text" @click="clearContextComfion" class="clearContext">清除上下文</el-button> </p>
<el-button type="text" @click="clearContextComfion" class="clearContext">清除上下文</el-button>
</div>
</div> </div>
</div> </div>
</div> <div class="AiChatList">
<div class="AiChatList"> <!-- v-loadingChat="loading" -->
<!-- v-loadingChat="loading" --> <div ref="ai-box" v-debounce="paperScroll" class="msg-box columnFlex flex1">
<div ref="ai-box" v-debounce="paperScroll" class="msg-box columnFlex flex1"> <div>
<div> <div class="rowFlex rowCenter linkStyle">
<div class="rowFlex rowCenter linkStyle"> <div class="rowFlex columnCenter">
<div class="rowFlex columnCenter"> <div class="line"></div>
<div class="line"></div> <svg-icon icon-class="start" style="margin-left:5px;" />
<svg-icon icon-class="start" style="margin-left:5px;" /> </div>
</div> <el-link type="primary" class="moreLink" @click="Aihistory">加载更多问答记录</el-link>
<el-link type="primary" class="moreLink" @click="Aihistory">加载更多问答记录</el-link> <div class="rowFlex columnCenter">
<div class="rowFlex columnCenter"> <svg-icon icon-class="start" />
<svg-icon icon-class="start" /> <div class="line"></div>
<div class="line"></div> </div>
</div> </div>
</div> <div v-for="(i, index) in recordMessage" :key="i._id" class="item">
<div v-for="(i, index) in recordMessage" :key="i._id" class="item"> <div class="msgBoxItem">
<div class="msgBoxItem"> <div v-if="i._id && i.message" class="msg rowFlex columnCenter"
<div v-if="i._id && i.message" class="msg rowFlex columnCenter" :style="i.send_type == 1 ? 'flex-direction:row-reverse' : ''">
:style="i.send_type == 1 ? 'flex-direction:row-reverse' : ''"> <div class="columnFlex userHead">
<div class="columnFlex userHead"> <div class="user-head columnFlex">
<div class="user-head columnFlex"> <el-image class="image" fit="fill"
<el-image class="image" fit="fill" :src="i.send_type == 2 ? i.from.robot.avatar : i.from.cser.avatar"></el-image>
:src="i.send_type == 2 ? i.from.robot.avatar : i.from.cser.avatar"></el-image> </div>
</div> </div>
</div>
<div class="user-msg columnFlex" <div class="user-msg columnFlex"
:style="i.send_type == 1 ? 'margin-right:10px;' : 'margin-left:10px;'"> :style="i.send_type == 1 ? 'margin-right:10px;' : 'margin-left:10px;'">
<p class="time" :style="i.send_type == 1 ? 'text-align: right;' : ' '"> <p class="time" :style="i.send_type == 1 ? 'text-align: right;' : ' '">
{{ i.create_time }} {{ i.create_time }}
<el-popover v-if="i._id && i.quote_list.length > 0" placement="top" width="300" <el-popover v-if="i._id && i.quote_list.length > 0" placement="top"
trigger="click"> width="300" trigger="click">
<div class="comeIngText" style="max-height:500px;overflow:auto"> <div class="comeIngText" style="max-height:500px;overflow:auto">
<div v-for="(item, index) in i.quote_list" :key="index" <div v-for="(item, index) in i.quote_list" :key="index"
style="margin-bottom:15px;"> style="margin-bottom:15px;">
<span style="color:#000;font-weight:bold">来源{{ index + 1 }}:</span> <span style="color:#000;font-weight:bold">来源{{ index + 1
<p>问题:{{ item.question }}</p> }}:</span>
<p>答案:{{ item.answer }}</p> <p>问题:{{ item.question }}</p>
<p>答案:{{ item.answer }}</p>
</div>
</div> </div>
<el-button slot="reference" type="text">回答来源</el-button>
</el-popover>
</p>
<!-- 文字 -->
<div class="rowFlex resizeBtn chatItemBox"
:class="i.send_type == 1 ? 'rowEnd' : 'rowStart'">
<!-- 客服发的消息 -->
<div v-if="i.message.msgtype == 'text' && i.message.text && i.message.text.content && !i.loading"
class="chatItem" :style="i.send_type == 1 ? 'float: right;' : ''"
:class="[i.send_type == 1 ? 'right' : 'left chatItemleft chatItemWidth']"
v-html="i.message.text && i.message.text.content ? i.message.text.content.trim() : '不识别的消息类型'">
</div> </div>
<el-button slot="reference" type="text">回答来源</el-button> <!-- 图片 -->
</el-popover> <div v-else-if="i.message.msgtype == 'image' && i.message.image && i.message.image.picurl && !i.loading"
</p> class="chatItem" :style="i.send_type == 1 ? 'float: right;' : ''"
<!-- 文字 --> :class="[i.send_type == 1 ? 'right' : 'left chatItemleft chatItemWidth']">
<div class="rowFlex resizeBtn chatItemBox" <el-image class="aiImage" fit="contain" :src="i.message.image.picurl"
:class="i.send_type == 1 ? 'rowEnd' : 'rowStart'"> @click="watchImage(i)"></el-image>
<!-- 客服发的消息 --> </div>
<div v-if="i.message.msgtype == 'text' && i.message.text && i.message.text.content && !i.loading" <!-- 加在 loading -->
class="chatItem" :style="i.send_type == 1 ? 'float: right;' : ''" <div v-else-if="i.loading" class="chatItem"
:class="[i.send_type == 1 ? 'right' : 'left chatItemleft chatItemWidth']" :style="i.send_type == 1 ? 'float: right;' : ''"
v-html="i.message.text && i.message.text.content ? i.message.text.content.trim() : '不识别的消息类型'"> :class="[i.send_type == 1 ? 'right' : 'left chatItemWidth']">
</div> <div class="rowFlex columnCenter chatItemLoading">
<!-- 图片 --> <svg-icon icon-class="answer" class="loadingRotage" />
<div v-else-if="i.message.msgtype == 'image' && i.message.image && i.message.image.picurl && !i.loading" <i class="loadingRotage"></i>
class="chatItem" :style="i.send_type == 1 ? 'float: right;' : ''" <p style="margin-left:5px;">答案整理中....</p>
:class="[i.send_type == 1 ? 'right' : 'left chatItemleft chatItemWidth']"> </div>
<el-image class="aiImage" fit="contain" :src="i.message.image.picurl" </div>
@click="watchImage(i)"></el-image> <!-- 复制客户的消息 -->
</div> <div class=" rowFlex likeBtn " v-if="i.send_type == 2">
<!-- 加在 loading --> <span v-if="!i.loading"
<div v-else-if="i.loading" class="chatItem" style="color:#87909c;font-size:12px;margin-right:5px;">{{
:style="i.send_type == 1 ? 'float: right;' : ''" i.response_time }} ms</span>
:class="[i.send_type == 1 ? 'right' : 'left chatItemWidth']"> <svg-icon v-if="i.like_status == 0" class="copy likeIcon"
<div class="rowFlex columnCenter chatItemLoading"> icon-class="like" @click.stop="likeAnswer(i, 1, index)" />
<svg-icon icon-class="answer" class="loadingRotage" /> <svg-icon v-else-if="i.like_status == 1" class="copy likeIcon"
<i class="loadingRotage"></i> icon-class="likeActive" />
<p style="margin-left:5px;">答案整理中....</p> <svg-icon v-if="i.like_status == 0" class="copy likeIcon"
icon-class="hate" @click.stop="likeAnswer(i, 2, index)" />
<svg-icon v-else-if="i.like_status == 2" class="copy likeIcon"
icon-class="hateActive" />
<i class="el-icon-refresh-right copy likeIcon"
v-if="i._id && !i.is_msg && !i.loading"
:class="i.is_retry ? 'loadingRotageReply' : ''"
@click.stop="retryAnswer(i, index)"></i>
<svg-icon v-if="i.message.msgtype == 'text' && !i.loading && !i.is_msg"
class="copy copyIcon" :data-clipboard-text="i.message.text.content"
icon-class="fuzhi" @click="copyText(i, index)" />
</div> </div>
</div>
<!-- 复制客户的消息 -->
<div class=" rowFlex likeBtn " v-if="i.send_type == 2">
<span v-if="!i.loading"
style="color:#87909c;font-size:12px;margin-right:5px;">{{
i.response_time }} ms</span>
<svg-icon v-if="i.like_status == 0" class="copy likeIcon" icon-class="like"
@click.stop="likeAnswer(i, 1, index)" />
<svg-icon v-else-if="i.like_status == 1" class="copy likeIcon"
icon-class="likeActive" />
<svg-icon v-if="i.like_status == 0" class="copy likeIcon" icon-class="hate"
@click.stop="likeAnswer(i, 2, index)" />
<svg-icon v-else-if="i.like_status == 2" class="copy likeIcon"
icon-class="hateActive" />
<i class="el-icon-refresh-right copy likeIcon"
v-if="i._id && !i.is_msg && !i.loading"
:class="i.is_retry ? 'loadingRotageReply' : ''"
@click.stop="retryAnswer(i, index)"></i>
<svg-icon v-if="i.message.msgtype == 'text' && !i.loading && !i.is_msg"
class="copy copyIcon" :data-clipboard-text="i.message.text.content"
icon-class="fuzhi" @click="copyText(i, index)" />
</div> </div>
</div> </div>
</div> </div>
...@@ -118,27 +121,32 @@ ...@@ -118,27 +121,32 @@
</div> </div>
</div> </div>
</div> </div>
<el-input v-model="aiText" class="aiText" placeholder="请输入你的问题" @keydown.enter.native="submitEntry">
<svg-icon slot="suffix" icon-class="fasong" class="addIcon"
:class="aiText.length == 0 ? 'addIconOpcity' : ''" @click="submitEntry" />
</el-input>
<el-dialog :visible.sync="dialogRemarkVisible" append-to-body title="查看大图" custom-class="remake-dialog">
<div class="remake-box">
<el-image :src="watchImageUrl" style="max-width:600px;" fit="contain">
</el-image>
</div>
</el-dialog>
</div> </div>
<el-input v-model="aiText" class="aiText" placeholder="请输入你的问题" @keydown.enter.native="submitEntry"> <NoSummaryContent v-else />
<svg-icon slot="suffix" icon-class="fasong" class="addIcon"
:class="aiText.length == 0 ? 'addIconOpcity' : ''" @click="submitEntry" />
</el-input>
<el-dialog :visible.sync="dialogRemarkVisible" append-to-body title="查看大图" custom-class="remake-dialog">
<div class="remake-box">
<el-image :src="watchImageUrl" style="max-width:600px;" fit="contain">
</el-image>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex'
import Clipboard from 'clipboard' import Clipboard from 'clipboard'
import debounce from '@/directive/debounce/index' import debounce from '@/directive/debounce/index'
import NoSummaryContent from './noSummary.vue'
import { corp_beta_question_config, corp_beta_question_session_clearTag, corp_beta_question_log_chat, corp_beta_question_log_index, answerComment, welcomemsg, retry } from '@/api/aiChat' import { corp_beta_question_config, corp_beta_question_session_clearTag, corp_beta_question_log_chat, corp_beta_question_log_index, answerComment, welcomemsg, retry } from '@/api/aiChat'
export default { export default {
name: 'AiLibrary', name: 'AiLibrary',
components: {
NoSummaryContent
},
directives: { directives: {
debounce, debounce,
}, },
...@@ -466,6 +474,11 @@ export default { ...@@ -466,6 +474,11 @@ export default {
padding: 10px; padding: 10px;
margin-top: -20px; margin-top: -20px;
.aiLibraryContent {
width: 100%;
height: 100%;
}
.AiChatList { .AiChatList {
width: 100%; width: 100%;
height: calc(100% - 80px); height: calc(100% - 80px);
......
<template>
<div class="noSummaryContent">
<div class="noContent">
<div class="noContent-icon">
<svg-icon icon-class="warning" />
</div>
<div class="noContent-text">
<span>当前客服号知识库配置异常 请联系管理员处理</span>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'NoSummaryContent'
}
</script>
<style lang="scss" scoped>
.noSummaryContent {
width: 100%;
height: 100%;
.noContent {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
.noContent-icon {
color: #FF7D00;
font-size: 40px;
}
.noContent-text {
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 14px;
color: #4E5969;
text-align: center;
font-style: normal;
text-transform: none;
}
}
}
</style>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论