| | |
| | | <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 relative overflow-hidden"> |
| | | <div class="flex items-center flex-column"> |
| | | <waterTop /> |
| | | <waterCenter |
| | | @advanceExampleClick="advanceExampleClick" |
| | | :isShowAdvanceExample="state.isShowAdvanceExample" |
| | | ref="waterCenterRef" |
| | | /> |
| | | <waterBottom /> |
| | | <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> |
| | | <div |
| | | class="retract_icon" |
| | | :style="`right: ${state.rightBox}px;`" |
| | | @click="advanceExampleClick(!state.isShowAdvanceExample)" |
| | | > |
| | | <i |
| | | class="text-[#fff] transition-all" |
| | | :class="state.isShowAdvanceExample ? 'ywicon icon-zuoyoujiantou1' : 'ywicon icon-zuoyoujiantou'" |
| | | ></i> |
| | | </div> |
| | | <div class="h100" :style="`width: ${state.rightBoxWidth}px;transition:width 0.8s;`"> |
| | | <CustomDrawer :isShowAdvanceExample="state.isShowAdvanceExample" @closeExampleClick="closeExampleClick" /> |
| | | </div> |
| | | |
| | | <CustomDrawer v-model:isShow="state.isShowAdvanceExample" ref="customDrawerRef" @updateChatInput="updateChatInput" /> |
| | | </div> |
| | | </div> |
| | | <!-- <p class="declare"> |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { reactive, ref } from 'vue'; |
| | | 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, |
| | | rightBoxWidth: 0, |
| | | rightBox: 0, |
| | | }); |
| | | // 引导步骤 |
| | | |
| | | const driverObj = driver({ |
| | | showProgress: true, |
| | | allowClose: true, |
| | | disableActiveInteraction: true, |
| | | nextBtnText: '下一步', |
| | | prevBtnText: '上一步', |
| | | doneBtnText: '完成', |
| | | steps: [ |
| | | { |
| | | element: '.set-next-group-type', |
| | | popover: { |
| | | title: '1.请选择主场景', |
| | | description: '默认为业务场景', |
| | | popoverClass: 'driverjs-theme', |
| | | }, |
| | | }, |
| | | { element: '.pc-scenes', popover: { title: '2.请选择次场景', description: '默认为官网工单' } }, |
| | | { 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; |
| | | state.rightBoxWidth = status ? 354 : 0; |
| | | state.rightBox = status ? 354 : 0; |
| | | if (status) { |
| | | customDrawerRef.value.getTableData(); |
| | | } |
| | | }; |
| | | //关闭高级示例 |
| | | const closeExampleClick = (status: boolean) => { |
| | | state.isShowAdvanceExample = status; |
| | | state.rightBoxWidth = status ? 354 : 0; |
| | | state.rightBox = status ? 354 : 0; |
| | | //获取模版列表 |
| | | |
| | | const selectTagClick = (tag) => { |
| | | nextTick(() => { |
| | | waterCenterRef.value.tagListClick(tag); |
| | | }); |
| | | }; |
| | | let isFinishPromise = null; |
| | | const showGuide = (isHome) => { |
| | | if (!!Local.get(accessSessionKey) && Local.get('isNewUser') && isHome) { |
| | | Local.set('isNewUser', false); |
| | | 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 { |
| | |
| | | width: 100%; |
| | | padding: 18px; |
| | | } |
| | | .retract_icon { |
| | | width: 20px; |
| | | height: 48px; |
| | | background: rgba(0, 0, 0, 0.2); |
| | | position: absolute; |
| | | top: 50%; |
| | | right: 0; |
| | | // -webkit-transform: translate(100%, -50%); |
| | | // -ms-transform: translate(100%, -50%); |
| | | // transform: translate(100%, -50%); |
| | | z-index: 9; |
| | | cursor: pointer; |
| | | display: -webkit-box; |
| | | display: -ms-flexbox; |
| | | display: flex; |
| | | -webkit-box-align: center; |
| | | -ms-flex-align: center; |
| | | align-items: center; |
| | | -webkit-box-pack: center; |
| | | -ms-flex-pack: center; |
| | | justify-content: center; |
| | | padding: 0 3px; |
| | | border-radius: 5px 5px 0px; |
| | | } |
| | | |
| | | .layout-logo-medium-img { |
| | | width: 28px; |
| | | margin-right: 7px; |
| | |
| | | .homeBox { |
| | | font-size: 14px; |
| | | line-height: 18px; |
| | | overflow-y: auto; |
| | | } |
| | | .declare { |
| | | position: absolute; |
| | |
| | | } |
| | | } |
| | | } |
| | | :not(body):has(> .driver-active-element) { |
| | | overflow: unset !important; |
| | | } |
| | | </style> |
| | | <style> |
| | | .driver-popover.driverjs-theme { |
| | | inset: 191.422px auto auto 357.828px !important; |
| | | } |
| | | </style> |