<template>
|
<div class="pc-chat_room h-full">
|
<div class="flex h100 w100">
|
<div class="pc-chat_right">
|
<div class="w100 h100 overflow-hidden">
|
<div class="pc-chatRoom w100 h100">
|
<div class="homeBox w100 h-full">
|
<div class="flex items-center h-full">
|
<div class="flex items-center flex-column" style="overflow: unset !important">
|
<waterTop ref="topRef" />
|
<waterCenter @advanceExampleClick="advanceExampleClick" ref="waterCenterRef" @updateChatInput="updateChatInput" />
|
<waterBottom @tagListClick="selectTagClick" ref="bottomRef" />
|
</div>
|
|
<CustomDrawer v-model:isShow="state.isShowAdvanceExample" ref="customDrawerRef" @updateChatInput="updateChatInput" />
|
</div>
|
</div>
|
<!-- <p class="declare">
|
<span
|
>声明:本平台仅提供水务智能化服务,不提供任何形式的法律或法规建议,请用户自行判断使用风险,并自行承担因使用本平台而产生的法律责任。</span
|
>
|
</p> -->
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import { driver } from 'driver.js';
|
import 'driver.js/dist/driver.css';
|
import { nextTick, onMounted, onUnmounted, reactive, ref, watch } from 'vue';
|
import waterBottom from './component/waterRight/bottom.vue';
|
import waterCenter from './component/waterRight/center.vue';
|
import waterTop from './component/waterRight/top.vue';
|
import CustomDrawer from '/@/components/drawer/CustomDrawer.vue';
|
import { activeGroupType, userInfo } from '/@/stores/chatRoom';
|
import emitter from '/@/utils/mitt';
|
import { accessSessionKey } from '/@/utils/request';
|
import { Local } from '/@/utils/storage';
|
let state = reactive({
|
isShowAdvanceExample: false,
|
});
|
// 引导步骤
|
|
const driverObj = driver({
|
showProgress: true,
|
allowClose: true,
|
disableActiveInteraction: true,
|
nextBtnText: '下一步',
|
prevBtnText: '上一步',
|
doneBtnText: '完成',
|
steps: [
|
{ element: '.set-next-group-type', popover: { title: '1.请选择主场景', description: '默认为业务场景' } },
|
{ element: '.pc-scenes', popover: { title: '2.请选择次场景', description: '默认为官网工单', side: 'left' } },
|
{ element: '.pc-prompts', popover: { title: '3.请选择提问示例', description: '选其中一个案例' } },
|
{ element: '.playInput', popover: { title: '4.输入提问内容', description: '点击发送开始对话' } },
|
{ element: '.retract_icon', popover: { title: '5.更多提问示例', description: '展开后可查看更多案例' } },
|
],
|
onCloseClick: () => {
|
driverObj.destroy();
|
},
|
});
|
const topRef = ref(null);
|
const waterCenterRef = ref(null);
|
const bottomRef = ref(null);
|
const customDrawerRef = ref(null);
|
const updateChatInput = (val) => {
|
topRef.value.updateChatInput(val);
|
};
|
const advanceExampleClick = (status: boolean) => {
|
state.isShowAdvanceExample = status;
|
if (status) {
|
customDrawerRef.value.getTableData();
|
}
|
};
|
//获取模版列表
|
|
const selectTagClick = (tag) => {
|
nextTick(() => {
|
waterCenterRef.value.tagListClick(tag);
|
});
|
};
|
let isFinishPromise = null;
|
const showGuide = (isHome) => {
|
if (!!Local.get(accessSessionKey) && !userInfo.isNew && isHome) {
|
userInfo.set({
|
...userInfo.get(),
|
web_login: true,
|
});
|
isFinishPromise?.then(() => {
|
driverObj.drive();
|
});
|
}
|
};
|
onMounted(() => {
|
isFinishPromise = new Promise(async (resolve) => {
|
resolve(true);
|
});
|
emitter.on('isShowHomePage', showGuide);
|
});
|
|
onUnmounted(() => {
|
emitter.off('isShowHomePage', showGuide);
|
});
|
watch(
|
() => activeGroupType.value,
|
(val) => {
|
setTimeout(() => {
|
bottomRef.value.getMainSectionList();
|
}, 300);
|
},
|
{ immediate: true }
|
);
|
</script>
|
<style scoped lang="scss">
|
.pc-chat_room {
|
margin: 0;
|
padding: 0;
|
}
|
.pc-chat_aside {
|
width: 252px !important;
|
height: 100%;
|
box-sizing: border-box;
|
background-color: #1b1d1c;
|
overflow: visible;
|
-webkit-transition: width 0.1s ease-in;
|
-o-transition: width 0.1s ease-in;
|
transition: width 0.1s ease-in;
|
position: relative;
|
display: flex;
|
flex-direction: column;
|
}
|
.aside_top {
|
box-sizing: border-box;
|
position: relative;
|
width: 100%;
|
padding: 18px;
|
}
|
|
.layout-logo-medium-img {
|
width: 28px;
|
margin-right: 7px;
|
}
|
.aside_center {
|
flex: 1;
|
min-height: 0;
|
-webkit-transition: height 0.3s ease-in;
|
-o-transition: height 0.3s ease-in;
|
transition: height 0.3s ease-in;
|
}
|
.aside_bottom {
|
position: relative;
|
width: 100%;
|
padding-bottom: 20px;
|
-webkit-transition: height 0.3s ease-in;
|
-o-transition: height 0.3s ease-in;
|
transition: height 0.3s ease-in;
|
display: flex;
|
-webkit-box-orient: vertical;
|
-webkit-box-direction: normal;
|
-ms-flex-direction: column;
|
flex-direction: column;
|
}
|
.pc-chat_right {
|
padding: 0;
|
background: linear-gradient(180deg, #f5f4f6 0, #f2f2f6 25%, #e9edf7);
|
position: relative;
|
display: block;
|
flex: 1;
|
-ms-flex-preferred-size: auto;
|
flex-basis: auto;
|
overflow: auto;
|
-webkit-box-sizing: border-box;
|
box-sizing: border-box;
|
.pc-chatRoom {
|
box-sizing: border-box;
|
padding-right: 0px;
|
position: relative;
|
font-weight: 400;
|
background-color: #f2f4f8;
|
transition: padding-right 0.25s;
|
.homeBox {
|
font-size: 14px;
|
line-height: 18px;
|
}
|
.declare {
|
position: absolute;
|
bottom: 0;
|
z-index: 9;
|
width: 100%;
|
height: 34px;
|
font-size: 14px;
|
font-weight: 400;
|
color: #999;
|
text-align: center;
|
}
|
}
|
}
|
:not(body):has(> .driver-active-element) {
|
overflow: unset !important;
|
}
|
</style>
|