| | |
| | | <template> |
| | | <div class="flex h-full"> |
| | | <div class="flex flex-col h-full flex-auto"> |
| | | <div class="flex flex-col h-full flex-auto relative"> |
| | | <div ref="chatListDom" class="relative h-full flex flex-col items-center overflow-y-auto" style="height: calc(100% - 50px)"> |
| | | <span |
| | | class="more-loading absolute text-blue-400 left-[50%] translate-x-[-50%] cursor-pointer w-10" |
| | |
| | | >(已停止)</span |
| | | > |
| | | <!-- parseContent 返回为 null --> |
| | | <p v-if="!item.content && !isTalking && !item.isStopMsg" class="text-red-500"> |
| | | 暂无数据 |
| | | </p> |
| | | <p v-if="!item.content && !isTalking && !item.isStopMsg" class="text-red-500">暂无数据</p> |
| | | <!-- #endregion --> |
| | | <!-- #endregion --> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="absolute right-28 bottom-40 " v-if="!isBottom"> |
| | | <div class="flex items-center justify-center size-[38px] cursor-pointer hover:text-[#0284ff] border rounded-full hover:bg-[#f6f7f9] shadow bg-white" @click="scrollToBottom"> |
| | | <i class="ywifont ywicon-xiangxiajiantou !text-[20px]" /> |
| | | </div> |
| | | </div> |
| | | |
| | | <div |
| | | class="sticky bottom-0 w-full px-6 pt-12 pb-6 bg-[rgb(247,248,250)] flex justify-center" |
| | |
| | | <div class="sticky bottom-0 w-full p-6 bg-[rgb(247,248,250)] flex justify-center" v-if="isShareCheck"></div> |
| | | </div> |
| | | <CustomDrawer v-model:isShow="drawerIsShow" @updateChatInput="updateChatInput" /> |
| | | <el-dialog title="分享链接" v-model="shareCodeIsShow" width="25%" modal-append-to-body lock-scroll :before-close="closeShareClick"> |
| | | <el-dialog title="分享链接" v-model="shareCodeIsShow" width="12%" modal-append-to-body lock-scroll :before-close="closeShareClick"> |
| | | <div class="w100 h100 flex justify-center items-center flex-col text-center"> |
| | | <div class="qrcode h100" ref="qrcodeRef"></div> |
| | | <div class="h100 w100 flex flex-col justify-center items-center"> |
| | | <span class="h100 text-[#8d8e99] text-[12px] mt-2">{{ shareCoderUrl }}</span> |
| | | <span class="text-[#1d86ff] text-[12px] cursor-pointer" @click="copyShareCodeClick">复制</span> |
| | | </div> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import axios, { CancelTokenSource } from 'axios'; |
| | | import type { CancelTokenSource } from 'axios'; |
| | | import axios from 'axios'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import { findLast, orderBy } from 'lodash-es'; |
| | | import moment from 'moment'; |
| | | import QRCode from 'qrcodejs2-fixes'; |
| | | import { computed, nextTick, onActivated, onMounted, ref } from 'vue'; |
| | | import useClipboard from 'vue-clipboard3'; |
| | | import { loadAmisSource } from '../amis/load'; |
| | | import FeedbackPanel from './components/FeedbackPanel.vue'; |
| | | import { useAssistantContentOpt } from './hooks/useAssistantContentOpt'; |
| | | import { convertProcessItem, useScrollLoad } from './hooks/useScrollLoad'; |
| | |
| | | import emitter from '/@/utils/mitt'; |
| | | import { ErrorCode } from '/@/utils/request'; |
| | | import { toMyFixed } from '/@/utils/util'; |
| | | import { loadAmisSource } from '../amis/load'; |
| | | const chatWidth = '75%'; |
| | | const voicePageIsShow = ref(false); |
| | | let isTalking = ref(false); |
| | |
| | | |
| | | const chatListLoading = ref(true); |
| | | |
| | | const { scrollToBottom, scrollToTop } = useScrollToBottom({ |
| | | const { scrollToBottom, scrollToTop, isBottom } = useScrollToBottom({ |
| | | chatListDom: chatListDom, |
| | | }); |
| | | |
| | |
| | | }, 300); |
| | | } |
| | | } |
| | | loadAmisSource() |
| | | loadAmisSource(); |
| | | }); |
| | | //#region ====================== 关联查询 ====================== |
| | | const relativeQueryClick = async (val) => { |
| | |
| | | colorLight: '#ffffff', |
| | | }); |
| | | }); |
| | | // toClipboard(url); |
| | | copyShareCodeClick(); |
| | | }; |
| | | //链接复制 |
| | | const copyShareCodeClick = () => { |