You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

586 lines
17 KiB

<template>
<div class="page-content">
<div class="header">
<div class="logo">
<img :src="logo" />
<span>货无忧AI智能问答</span>
</div>
<div class="icon-box">
<el-icon @click="close"><CloseBold /></el-icon>
</div>
</div>
<div class="content">
<div class="left">
<div class="content-box" ref="chatContainer">
<div class="content-time">{{ time }}</div>
<template v-for="(item, index) in Data.ChathistoryList" :key="index">
<div
:class="{
'chat-history': item.state === 'Ai',
'chat-history-user': item.state === 'user',
}"
>
<div class="icon">
<el-icon v-if="item.state === 'user'"><Avatar /></el-icon>
<img v-else :src="logotx" />
</div>
<div>
<div
:class="{
'content-header': item.state === 'Ai',
'content-header-user': item.state === 'user',
}"
>
<span>{{ item.name }}</span>
<!-- <span>{{ item.time }}</span> -->
</div>
<div class="content-list">
<p :ref="el => (chatContents[index] = el)">
{{ item.state === 'user' ? item.content : '' }}
</p>
<!-- 图片 -->
<el-image
v-if="item.url"
style="width: 100px; height: 100px"
:src="item.url"
:zoom-rate="1.2"
:max-scale="7"
:min-scale="0.2"
:preview-src-list="item.srcList"
:initial-index="4"
fit="cover"
/>
<!-- 下载地址 -->
<a v-if="item.link" :href="item.link" target="_blank" rel="noopener noreferrer">
<el-link :underline="false">点击这里下载</el-link></a
>
</div>
</div>
</div>
</template>
</div>
<!-- 输入框 -->
<div class="content-input">
<el-input
ref="input"
@keydown.enter="inputData(Data.input)"
v-model="Data.input"
placeholder="请输入问题描述"
type="textarea"
style="height: 100%; resize: none"
/>
<el-button type="primary" @click="inputData(Data.input)">发送</el-button>
</div>
</div>
<div class="right">
<el-tabs type="border-card">
<el-tab-pane label="热点问题">
<div class="el_problem">
<template v-for="(item, index) in Data.problem" :key="index">
<div class="box">
<span :class="{ span: true, [`id${index + 1}`]: index < 4 }">{{
index + 1
}}</span>
<span class="spancontent" @click="inputData(item.content)"
>{{ item.content }}...
</span>
</div>
</template>
</div>
</el-tab-pane>
<el-tab-pane label="新增问题"> 暂无新增问题 </el-tab-pane>
<el-tab-pane label="快捷服务"> 待添加 </el-tab-pane>
</el-tabs>
</div>
</div>
</div>
</template>
<script setup>
import { defineProps, defineEmits, ref, nextTick, onMounted, computed } from 'vue';
import { ElMessage } from 'element-plus';
import Qrxcx from '../../../public/img/Qrxcx.png'; //小程序二维码
import Qrewm from '../../../public/img/Qrewm.png'; //APP二维码
import logo from '../../../public/img/kflogo.png'; //logo
import logotx from '../../../public/img/logo3.png'; //logo
const emit = defineEmits(['request-data']);
const isFirstMessage = ref(true);
const chatContainer = ref(null);
const inputState = ref(false); //当前是否在回答
const props = defineProps({
templateData: Boolean,
});
const input = ref(null); //输入框实例
const Data = ref({
name: '', //用户名
ai: false,
// 热门问题
problem: [
{
content: '货无忧小程序地址',
},
{
content: '货无忧App下载地址',
},
{
content: '打印机驱动下载地址',
},
{
content: '扫描仪驱动下载地址',
},
{
content: '扫描仪出现问题如何解决',
},
{
content: '谷歌浏览器下载地址',
},
{
content: '东集pad安装初始密码是什么',
},
{
content: '东集pad-q7恢复出厂设置',
},
// {
// content: '货无忧的汇通物流公司编码是多少',
// },
{
content: '蓝牙打印机芝柯tx453设备连接密码是多少',
},
{
content: '向日葵下载地址',
},
],
ChathistoryList: [
// {
// // url:'图片地址',//图片预览地址
// // srcList:[],//图片列表
// // state: 'user', //用户标识
// // name: '用户', //用户昵称
// // content: value, //聊天消息
// // time: setCurrentTime(),//时间
// },
],
input: '', //输入框
});
const close = () => {
emit('request-data', Data.value);
};
// 在 setup 函数或组件方法中
const getLocalStorageItem = key => {
return localStorage.getItem(key);
};
const getuserinfo = () => {
// 使用
const LOCA_USER = JSON.parse(getLocalStorageItem('TWMS-userInfo'));
console.log(LOCA_USER, 'LOCA_USER');
if (LOCA_USER) {
Data.value.name = LOCA_USER.content.real_name;
}
};
getuserinfo();
const chatContents = ref([]);
const typeText = (element, text, delay = 50) => {
if (!element) return;
element.innerText = '';
let index = 0;
const type = () => {
if (index < text.length) {
element.innerText += text.charAt(index);
index++;
setTimeout(type, delay);
}
};
type();
};
// 页面滚动
const scrollToBottom = () => {
setTimeout(() => {
const container = chatContainer.value;
if (container) {
container.scrollTop = container.scrollHeight;
}
}, 0);
};
// 时间
const setCurrentTime = () => {
const now = new Date();
const year = now.getFullYear();
const month = (now.getMonth() + 1).toString().padStart(2, '0');
const day = now.getDate().toString().padStart(2, '0');
const hours = now.getHours().toString().padStart(2, '0');
const minutes = now.getMinutes().toString().padStart(2, '0');
const seconds = now.getSeconds().toString().padStart(2, '0');
return `${year}${month}${day}${hours}:${minutes}:${seconds}`;
};
const time = computed(() => {
return setCurrentTime();
});
// 用户输入逻辑
const inputData = value => {
Data.value.input = value;
console.log(value, 'value');
// 如果没有值或者正在进行中终止程序
if (!Data.value.input) {
ElMessage({
message: '请输入问题描述',
type: 'warning',
});
return;
}
let data = {
state: 'user', //用户标识
name: Data.value.name || '未登录', //用户昵称
content: value, //聊天消息
time: setCurrentTime(),
};
Data.value['ChathistoryList'].push(data);
Data.value.input = ''; // 清空输入框
input.value.focus();
inputState.value = false;
AiData(value); //调用AI机器人判断
};
//AiData 函数
const AiData = (value = '') => {
let aiResponse = '';
let data = {
url: '', //图片预览地址
srcList: [], //图片列表
state: 'Ai', //机器人标识
name: '货无忧智能AI', //昵称
content: aiResponse, //文本描述
link: '', //文件下载地址
time: setCurrentTime(), //日期
};
if (isFirstMessage.value) {
aiResponse = '你好,我是货无忧智能AI,有什么可以帮助您的吗?';
isFirstMessage.value = false;
} else {
const lowercaseValue = value.toLowerCase();
if (
lowercaseValue.includes('小程序') ||
lowercaseValue.includes('小程序地址') ||
lowercaseValue.includes('货无忧小程序地址')
) {
aiResponse = '货无忧小程序如下,扫描图片既可以访问';
data.url = Qrxcx;
data.srcList = [Qrxcx];
} else if (
lowercaseValue.includes('你好') ||
lowercaseValue.includes('你是谁') ||
lowercaseValue.includes('你叫什么名字')
) {
aiResponse =
'您好,我是货无忧智能AI,有什么可以帮助您的吗?可以尝试输入关键字,如:小程序、app、打印驱动、扫描仪驱动或者点击右侧问题进行提问。';
} else if (
lowercaseValue.includes('app') ||
lowercaseValue.includes('app下载') ||
lowercaseValue.includes('货无忧App下载地址')
) {
aiResponse = '货无忧app如下,打开浏览器扫描二维码,就可以下载';
data.url = Qrewm;
data.srcList = [Qrewm];
} else if (
lowercaseValue.includes('打印驱动') ||
lowercaseValue.includes('打印机驱动下载地址')
) {
aiResponse = '打印机启动下载地址如下:';
data.link = 'http://8.137.19.41:9000/logpm/other/CLodop_Setup_for_Win32NT.exe';
} else if (
lowercaseValue.includes('扫描仪驱动') ||
lowercaseValue.includes('扫描仪驱动下载地址')
) {
aiResponse = '扫描仪驱动如下:';
data.link = 'http://files.huo5u.com/plugins/WebCamera_V1.3.7.exe';
} else if (
lowercaseValue.includes('扫描仪') ||
lowercaseValue.includes('扫描仪出现问题如何解决')
) {
aiResponse =
'扫描仪出现问题需要复制如下地址,然后打开谷歌浏览器在浏览器地址中输入这个地址:chrome://flags/#block-insecure-private-network-requests ,把黄色部分选择Disabled然后重启浏览器,或者检查驱动是否启动,线束是否连接完整';
} else if (
lowercaseValue.includes('扫描仪报错') ||
lowercaseValue.includes('扫描仪报错如何解决')
) {
aiResponse =
'扫描仪出现问题需要复制如下地址,然后打开谷歌浏览器在浏览器地址中输入这个地址:chrome://flags/#block-insecure-private-network-requests ,把黄色部分选择Disabled然后重启浏览器';
} else if (lowercaseValue.includes('谷歌') || lowercaseValue.includes('谷歌浏览器下载地址')) {
aiResponse = '谷歌浏览器下载地址如下:';
data.link = 'https://www.google.cn/intl/zh-CN/chrome/?';
} else if (
lowercaseValue.includes('东集pda初始密码') ||
lowercaseValue.includes('东集pad安装初始密码')
) {
aiResponse = '东集PDA安装初始密码是:4007770876';
} else if (lowercaseValue.includes('东集pad-q7恢复出厂设置')) {
aiResponse =
'东集pad-q7恢复出厂设置教程地址:1、关机状态下,按下【电源键】、【两侧扫描键】; 2、出现开机画面,松开【电源键】,出现工厂模式界面,按键全部松开;3、进入工厂模式后通过方向键选择【wipe data/factory reset】, 按电源键确认进入子菜单,选择【yes】,按【电源键】确认,恢复出厂完成后选择第一个【reboot system now】 ,按【电源键】确认重启设备。视频教程如下:https://mp.weixin.qq.com/s/0CG-jYooh9LJ-9aLauVGfA';
}
// else if (
// lowercaseValue.includes('货无忧的汇通物流公司编码是多少')
// ) {
// aiResponse = '货无忧的汇通物流公司编码是:627683';
// }
else if (
lowercaseValue.includes('蓝牙打印机芝柯tx453设备连接密码是多少') ||
lowercaseValue.includes('tx453')
) {
aiResponse = '蓝牙打印机芝柯xt453设备连接密码是:0000';
} else if (lowercaseValue.includes('向日葵') || lowercaseValue.includes('向日葵下载地址')) {
aiResponse = '向日葵下载地址:https://sunlogin.oray.com/,使用教程点击下方立即下载';
data.link =
'http://files.huo5u.com/plugins/%E5%90%91%E6%97%A5%E8%91%B5%E8%BF%9C%E7%A8%8B%E8%BD%AF%E4%BB%B6%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B.docx';
} else {
aiResponse = '我不太理解您的问题,我正在努力学习中,请重新描述或输入其他问题,或联系管理员';
}
}
data.content = aiResponse;
Data.value['ChathistoryList'].push(data);
nextTick(() => {
const lastIndex = Data.value['ChathistoryList'].length - 1;
const element = chatContents.value[lastIndex];
typeText(element, aiResponse);
scrollToBottom();
});
};
AiData(); //初始化AI机器人
</script>
<style scoped lang="scss">
.el_problem {
display: flex;
flex-direction: column;
span {
margin: 4px;
}
.box {
font-size: 14px;
display: flex;
height: 50px;
align-items: center;
.span {
width: 20px;
height: 20px;
background-color: #9e9e9e;
display: block;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
color: #fff;
}
.spancontent {
cursor: pointer;
}
.id1 {
border: 1px solid #f45c45;
background-color: #f45c45;
}
.id2 {
border: 1px solid #ed9c43;
background-color: #ed9c43;
}
.id3 {
border: 1px solid #ffd35d;
background-color: #ffd35d;
}
}
}
.page-content {
width: 80%;
height: 80%;
border: 1px solid #9e9e9e;
z-index: 9999999;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #fff;
display: flex;
flex-direction: column;
.header {
color: #fff;
display: flex;
align-items: center;
justify-content: space-between;
background-color: #172e60;
line-height: 40px;
font-size: 16px;
padding: 0 24px;
.logo {
display: flex;
align-items: center;
span {
margin-left: 10px;
}
img {
width: 30px;
height: 30px;
}
}
.icon-box {
display: flex;
.el-icon {
color: #fff;
font-size: 24px;
&:hover {
cursor: pointer;
color: #ff0000;
}
}
}
}
.content {
flex: 1;
color: #002e55;
display: flex;
justify-content: space-between;
overflow-y: hidden;
.left {
width: 66%;
border-right: 1px solid #d3832a;
display: flex;
flex-direction: column;
.content-box {
height: 70%;
background-color: #f5f5f6;
padding: 10px;
overflow-y: scroll;
.chat-history,
.chat-history-user {
margin-bottom: 2%;
padding: 4px;
display: flex;
height: fit-content;
.icon {
min-width: 54px;
min-height: 54px;
max-width: 54px;
max-height: 54px;
border-radius: 50%;
border: 1px solid #d3832a;
margin-right: 20px;
display: flex;
align-items: center;
justify-content: center;
color: #d3832a;
font-size: 3em;
img {
width: 100%;
height: 100%;
}
.el-icon {
font-size: 22px;
}
}
.content-header {
font-size: 12px;
span {
margin-right: 20px;
}
}
.content-list {
flex: 1;
background-color: #fff;
border: 1px solid #9e9e9e;
padding: 0px 10px;
border-radius: 4px;
p {
font-size: 13px;
margin: 10px 0;
// text-indent: 24px;
}
}
}
.chat-history-user {
flex-direction: row-reverse;
.icon {
margin-right: 0;
margin-left: 20px;
}
.content-header-user {
font-size: 12px;
text-align: right;
display: flex;
flex-direction: row-reverse;
span {
margin-left: 20px;
}
}
}
}
:deep(.content-input) {
border-top: 1px solid #c2c2c2;
flex: 1;
position: relative;
.el-input {
width: 100%;
height: 100%;
font-size: 16px;
}
.el-textarea__inner {
height: 100%;
box-shadow: none;
resize: none;
}
.is-focus {
box-shadow: none;
}
.el-input__wrapper {
box-shadow: none;
}
.el-input__inner {
font-size: 12px;
}
.el-button {
position: absolute;
right: 10px;
bottom: 10px;
width: 120px;
height: 35px;
background-color: #172e60;
border: none;
}
}
}
.right {
height: 100%;
width: 34%;
.el-tabs {
height: 100%;
.el-tabs__header,
.el-tabs__content {
width: 100%;
overflow-y: scroll;
}
}
}
}
}
.content-time {
text-align: center;
color: #9a9a9a;
font-size: 12px;
}
</style>