|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <div class="container"> | 
|---|
|  |  |  | <AddSession :modalObj="modalObj" @addSession="addSession"></AddSession> | 
|---|
|  |  |  | <AddSession | 
|---|
|  |  |  | :modalObj="modalObj" | 
|---|
|  |  |  | @addSession="addSession" | 
|---|
|  |  |  | :dialogId="dialogId" | 
|---|
|  |  |  | ></AddSession> | 
|---|
|  |  |  | <a-card class="top-title">AI会话记录</a-card> | 
|---|
|  |  |  | <a-row :gutter="[5, 5]" style="margin-top: 3px"> | 
|---|
|  |  |  | <a-col :span="4"> | 
|---|
|  |  |  | <a-card> | 
|---|
|  |  |  | <a-col :span="6"> | 
|---|
|  |  |  | <a-card class="left-select"> | 
|---|
|  |  |  | <a-select | 
|---|
|  |  |  | v-model="selectValue" | 
|---|
|  |  |  | :options="dialogs" | 
|---|
|  |  |  | 
|---|
|  |  |  | <a-scrollbar | 
|---|
|  |  |  | class="left-list" | 
|---|
|  |  |  | style=" | 
|---|
|  |  |  | height: calc(100vh - 250px); | 
|---|
|  |  |  | height: calc(100vh - 350px); | 
|---|
|  |  |  | overflow-y: auto; | 
|---|
|  |  |  | overflow-x: hidden; | 
|---|
|  |  |  | " | 
|---|
|  |  |  | 
|---|
|  |  |  | @click="querySessionDetail(session)" | 
|---|
|  |  |  | :class="{ isLeftActive: activeSessionId === session.id }" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <div class="text" :class="{ light: theme === 'dark' }" | 
|---|
|  |  |  | <div class="text" :class="{ time: theme === 'dark' }" | 
|---|
|  |  |  | >{{ session.name }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="time" | 
|---|
|  |  |  | 
|---|
|  |  |  | </a-scrollbar> | 
|---|
|  |  |  | </a-card> | 
|---|
|  |  |  | </a-col> | 
|---|
|  |  |  | <a-col :span="15"> | 
|---|
|  |  |  | <a-col :span="18"> | 
|---|
|  |  |  | <a-card class="center"> | 
|---|
|  |  |  | <div | 
|---|
|  |  |  | <!-- <div | 
|---|
|  |  |  | v-if="sessionDetailList.length === 0" | 
|---|
|  |  |  | style=" | 
|---|
|  |  |  | width: 90%; | 
|---|
|  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </a-col> | 
|---|
|  |  |  | </a-row> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> --> | 
|---|
|  |  |  | <a-scrollbar | 
|---|
|  |  |  | ref="scrollbar" | 
|---|
|  |  |  | id="home" | 
|---|
|  |  |  | v-else | 
|---|
|  |  |  | class="chat-list" | 
|---|
|  |  |  | style=" | 
|---|
|  |  |  | width: 90%; | 
|---|
|  |  |  | overflow: auto; | 
|---|
|  |  |  | height: 65vh; | 
|---|
|  |  |  | height: calc(100vh - 380px); | 
|---|
|  |  |  | margin: 0px auto 20px; | 
|---|
|  |  |  | " | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <div class="chat-item" v-for="sessionDetail in sessionDetailList"> | 
|---|
|  |  |  | <a-comment | 
|---|
|  |  |  | v-if="sessionDetail.role === 'user'" | 
|---|
|  |  |  | avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <a-comment v-if="sessionDetail.role === 'user'"> | 
|---|
|  |  |  | <template #avatar> | 
|---|
|  |  |  | <img | 
|---|
|  |  |  | class="icon-user-jpg" | 
|---|
|  |  |  | src="../../assets/images/icon-user.jpg" | 
|---|
|  |  |  | alt="本地图片" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template #content> | 
|---|
|  |  |  | <div>{{ sessionDetail.content }} </div> | 
|---|
|  |  |  | <div :class="{ chartUserText: theme === 'light' }" | 
|---|
|  |  |  | >{{ sessionDetail.content }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </a-comment> | 
|---|
|  |  |  | <a-comment | 
|---|
|  |  |  | v-else-if="sessionDetail.role === 'assistant'" | 
|---|
|  |  |  | avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/9eeb1800d9b78349b24682c3518ac4a3.png~tplv-uwbnlip3yd-webp.webp" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <a-comment v-else-if="sessionDetail.role === 'assistant'"> | 
|---|
|  |  |  | <template #avatar> | 
|---|
|  |  |  | <img | 
|---|
|  |  |  | class="icon-user-jpg" | 
|---|
|  |  |  | src="../../assets/images/icon-chart.png" | 
|---|
|  |  |  | alt="本地图片" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template #content> | 
|---|
|  |  |  | <a-card | 
|---|
|  |  |  | class="chat-item-answer" | 
|---|
|  |  |  | style="background-color: rgba(63, 64, 79, 1)" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <a-card :class="{ chatItemAnswer: theme === 'light' }"> | 
|---|
|  |  |  | <div :class="{ light: theme === 'light' }" | 
|---|
|  |  |  | >{{ sessionDetail.content }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </a-card> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </a-comment> | 
|---|
|  |  |  | <a-comment | 
|---|
|  |  |  | v-else-if="sessionDetail.role === 'last'" | 
|---|
|  |  |  | avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/9eeb1800d9b78349b24682c3518ac4a3.png~tplv-uwbnlip3yd-webp.webp" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <a-comment v-else-if="sessionDetail.role === 'last'"> | 
|---|
|  |  |  | <template #avatar> | 
|---|
|  |  |  | <img | 
|---|
|  |  |  | class="icon-user-jpg" | 
|---|
|  |  |  | src="../../assets/images/icon-chart.png" | 
|---|
|  |  |  | alt="本地图片" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template #content> | 
|---|
|  |  |  | <a-textarea | 
|---|
|  |  |  | readonly | 
|---|
|  |  |  | auto-size | 
|---|
|  |  |  | v-model="displayedText" | 
|---|
|  |  |  | class="chat-item-answer" | 
|---|
|  |  |  | style="background-color: rgba(192, 172, 172, 0.88)" | 
|---|
|  |  |  | :class="{ chatItemAnswer: theme === 'light' }" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </a-textarea> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </a-comment> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <!-- <div class="chartStart" v-if="isStart" @click="startChat" | 
|---|
|  |  |  | >停止生成</div | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <div class="chartStart v-else" @click="stopChat">重新生成</div> --> | 
|---|
|  |  |  | </a-scrollbar> | 
|---|
|  |  |  | <div class="chat_bottom"> | 
|---|
|  |  |  | <div class="center-bottom"> | 
|---|
|  |  |  | 
|---|
|  |  |  | </a-textarea> --> | 
|---|
|  |  |  | <a-textarea | 
|---|
|  |  |  | v-model="inputMsg" | 
|---|
|  |  |  | @keydown.shift.enter="handleShiftEnter" | 
|---|
|  |  |  | @keydown.enter="sendMessage" | 
|---|
|  |  |  | placeholder="输入您想了解的内容,Shift+Enter换行,Enter发送" | 
|---|
|  |  |  | allow-clear | 
|---|
|  |  |  | show-word-limit | 
|---|
|  |  |  | :disabled="chatDis" | 
|---|
|  |  |  | :class="{ textItemAnswer: theme === 'dark' }" | 
|---|
|  |  |  | :auto-size="{ | 
|---|
|  |  |  | minRows: 12, | 
|---|
|  |  |  | maxRows: 5, | 
|---|
|  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </a-card> | 
|---|
|  |  |  | </a-col> | 
|---|
|  |  |  | <a-col :span="5"> | 
|---|
|  |  |  | <!-- <a-col :span="5"> | 
|---|
|  |  |  | <a-card class="right"> | 
|---|
|  |  |  | <div class="right-top"> | 
|---|
|  |  |  | <div class="right-title">数智库</div> | 
|---|
|  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="right-tag"> | 
|---|
|  |  |  | <a-button type="primary" shape="round" size="mini" class="btn" | 
|---|
|  |  |  | >全部 | 
|---|
|  |  |  | </a-button> | 
|---|
|  |  |  | <a-button type="outline" shape="round" size="mini" class="btn" | 
|---|
|  |  |  | <a-button type="primary" size="mini" class="btn">全部 </a-button> | 
|---|
|  |  |  | <a-button type="outline" size="mini" class="btn" | 
|---|
|  |  |  | >文档创作 | 
|---|
|  |  |  | </a-button> | 
|---|
|  |  |  | <a-button type="outline" shape="round" size="mini" class="btn" | 
|---|
|  |  |  | <a-button type="outline" size="mini" class="btn" | 
|---|
|  |  |  | >知识学习 | 
|---|
|  |  |  | </a-button> | 
|---|
|  |  |  | <a-button type="outline" shape="round" size="mini" class="btn" | 
|---|
|  |  |  | <a-button type="outline" size="mini" class="btn" | 
|---|
|  |  |  | >效率提升 | 
|---|
|  |  |  | </a-button> | 
|---|
|  |  |  | <!-- <a-space> | 
|---|
|  |  |  | <a-button type="primary" shape="round" size="mini" class="btn" | 
|---|
|  |  |  | >全部 | 
|---|
|  |  |  | </a-button> | 
|---|
|  |  |  | <a-button type="outline" shape="round" size="mini" class="btn" | 
|---|
|  |  |  | >文档创作 | 
|---|
|  |  |  | </a-button> | 
|---|
|  |  |  | <a-button type="outline" shape="round" size="mini" class="btn" | 
|---|
|  |  |  | >知识学习 | 
|---|
|  |  |  | </a-button> | 
|---|
|  |  |  | <a-button type="outline" shape="round" size="mini" class="btn" | 
|---|
|  |  |  | >效率提升 | 
|---|
|  |  |  | </a-button> | 
|---|
|  |  |  | </a-space> --> | 
|---|
|  |  |  | <!-- <a-space style="margin-top: 10px"> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </a-space> --> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div class="right-list"> | 
|---|
|  |  |  | <div class="right-item"> | 
|---|
|  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </a-card> | 
|---|
|  |  |  | </a-col> | 
|---|
|  |  |  | </a-col> --> | 
|---|
|  |  |  | </a-row> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | 
|---|
|  |  |  | IconSearch, | 
|---|
|  |  |  | IconTiktokColor, | 
|---|
|  |  |  | } from '@arco-design/web-vue/es/icon'; | 
|---|
|  |  |  | import { useAppStore } from '@/store'; | 
|---|
|  |  |  | import { computed, nextTick, onMounted, reactive, ref } from 'vue'; | 
|---|
|  |  |  | import { useAppStore, useUserStore } from '@/store'; | 
|---|
|  |  |  | import { computed, nextTick, onMounted, watch, reactive, ref } from 'vue'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import { Message } from '@arco-design/web-vue'; | 
|---|
|  |  |  | import { EventSourceParserStream } from 'eventsource-parser/stream'; | 
|---|
|  |  |  | import moment from 'moment'; | 
|---|
|  |  |  | 
|---|
|  |  |  | const sessionDetailList = ref([]); //根据会话id出来的会话详情 | 
|---|
|  |  |  | const sessionList = ref([]); //会话列表 | 
|---|
|  |  |  | const modalObj = reactive({ add: false }); | 
|---|
|  |  |  | const dialogId = ref(''); | 
|---|
|  |  |  | const chatDis = ref(false); | 
|---|
|  |  |  | const loading = ref(false); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | const fieldNames = { value: 'id', label: 'name' }; | 
|---|
|  |  |  | const dialogs = ref([]); | 
|---|
|  |  |  | const selectValue = ref(''); | 
|---|
|  |  |  | const sectionList = ref({}); | 
|---|
|  |  |  | const DialogList = async () => { | 
|---|
|  |  |  | const { code, data } = await getDialogListApi(); | 
|---|
|  |  |  | if (code === 200) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | const dialogChange = (value) => { | 
|---|
|  |  |  | const handleShiftEnter = (event) => { | 
|---|
|  |  |  | event.preventDefault(); | 
|---|
|  |  |  | inputMsg.value += '\n'; | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | const dialogChange = (val) => { | 
|---|
|  |  |  | dialogId.value = val; | 
|---|
|  |  |  | querySessionList(); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | const sentClick = (event) => { | 
|---|
|  |  |  | sendMessage(event); | 
|---|
|  |  |  | const sentClick = () => { | 
|---|
|  |  |  | sendMessage('click'); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | const sendMessage = async (event) => { | 
|---|
|  |  |  | event.preventDefault(); | 
|---|
|  |  |  | chatDis.value = true; | 
|---|
|  |  |  | loading.value = true; | 
|---|
|  |  |  | if (!activeSessionId.value) { | 
|---|
|  |  |  | Message.warning('请选择会话'); | 
|---|
|  |  |  | chatDis.value = false; | 
|---|
|  |  |  | loading.value = false; | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // if (displayedText.value) { | 
|---|
|  |  |  | //   querySessionList(); | 
|---|
|  |  |  | // } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (inputMsg.value) { | 
|---|
|  |  |  | sessionDetailList.value.push({ content: inputMsg.value, role: 'user' }); | 
|---|
|  |  |  | sessionDetailList.value.push({ role: 'last' }); | 
|---|
|  |  |  | refreshScroll(); | 
|---|
|  |  |  | const response = await fetch( | 
|---|
|  |  |  | '/api/tech/cloudminds/query?modeltype=localragflow', | 
|---|
|  |  |  | { | 
|---|
|  |  |  | method: 'POST', | 
|---|
|  |  |  | headers: { | 
|---|
|  |  |  | 'Authorization': getAuthorization(), | 
|---|
|  |  |  | 'Content-Type': 'application/json', | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | body: JSON.stringify({ | 
|---|
|  |  |  | conversation_id: activeSessionId.value, | 
|---|
|  |  |  | messages: inputMsg.value, | 
|---|
|  |  |  | }), | 
|---|
|  |  |  | if (event.keyCode == 13 || event === 'click') { | 
|---|
|  |  |  | if (!event.shiftKey) { | 
|---|
|  |  |  | //只有enter没有shift,或进行你的其他逻辑 | 
|---|
|  |  |  | if (event !== 'click') { | 
|---|
|  |  |  | event.preventDefault(); // 阻止默认行为,即不换行 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const reader = response?.body | 
|---|
|  |  |  | ?.pipeThrough(new TextDecoderStream()) | 
|---|
|  |  |  | .pipeThrough(new EventSourceParserStream()) | 
|---|
|  |  |  | .getReader(); | 
|---|
|  |  |  | currIndex.value = 0; | 
|---|
|  |  |  | while (true) { | 
|---|
|  |  |  | const x = await reader?.read(); | 
|---|
|  |  |  | if (x) { | 
|---|
|  |  |  | const { done, value } = x; | 
|---|
|  |  |  | console.log(x, 999); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | const val = JSON.parse(value?.data || ''); | 
|---|
|  |  |  | const d = val?.data; | 
|---|
|  |  |  | if (typeof d !== 'boolean') { | 
|---|
|  |  |  | console.info('data:', d); | 
|---|
|  |  |  | streamStr.value = d.content; | 
|---|
|  |  |  | startDisplayStr(); | 
|---|
|  |  |  | chatDis.value = true; | 
|---|
|  |  |  | loading.value = true; | 
|---|
|  |  |  | if (!activeSessionId.value) { | 
|---|
|  |  |  | Message.warning('请选择会话'); | 
|---|
|  |  |  | chatDis.value = false; | 
|---|
|  |  |  | loading.value = false; | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // if (displayedText.value) { | 
|---|
|  |  |  | //   querySessionList(); | 
|---|
|  |  |  | // } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (inputMsg.value) { | 
|---|
|  |  |  | sessionDetailList.value.push({ | 
|---|
|  |  |  | content: inputMsg.value, | 
|---|
|  |  |  | role: 'user', | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | sessionDetailList.value.push({ role: 'last' }); | 
|---|
|  |  |  | refreshScroll(); | 
|---|
|  |  |  | const response = await fetch( | 
|---|
|  |  |  | '/api/tech/cloudminds/query?modeltype=localragflow', | 
|---|
|  |  |  | { | 
|---|
|  |  |  | method: 'POST', | 
|---|
|  |  |  | headers: { | 
|---|
|  |  |  | 'Authorization': getAuthorization(), | 
|---|
|  |  |  | 'Content-Type': 'application/json', | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | body: JSON.stringify({ | 
|---|
|  |  |  | conversation_id: activeSessionId.value, | 
|---|
|  |  |  | messages: inputMsg.value, | 
|---|
|  |  |  | }), | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | console.warn(e); | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const reader = response?.body | 
|---|
|  |  |  | ?.pipeThrough(new TextDecoderStream()) | 
|---|
|  |  |  | .pipeThrough(new EventSourceParserStream()) | 
|---|
|  |  |  | .getReader(); | 
|---|
|  |  |  | currIndex.value = 0; | 
|---|
|  |  |  | while (true) { | 
|---|
|  |  |  | const x = await reader?.read(); | 
|---|
|  |  |  | if (x) { | 
|---|
|  |  |  | const { done, value } = x; | 
|---|
|  |  |  | console.log(x, 999); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | const val = JSON.parse(value?.data || ''); | 
|---|
|  |  |  | const d = val?.data; | 
|---|
|  |  |  | if (typeof d !== 'boolean') { | 
|---|
|  |  |  | console.info('data:', d); | 
|---|
|  |  |  | streamStr.value = d.content; | 
|---|
|  |  |  | startDisplayStr(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | console.warn(e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (done) { | 
|---|
|  |  |  | console.info('done'); | 
|---|
|  |  |  | displayedText.value = ''; | 
|---|
|  |  |  | querySessionDetail(sectionList.value); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (done) { | 
|---|
|  |  |  | console.info('done'); | 
|---|
|  |  |  | displayedText.value = ''; | 
|---|
|  |  |  | querySessionList(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | chatDis.value = false; | 
|---|
|  |  |  | loading.value = false; | 
|---|
|  |  |  | inputMsg.value = ''; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | Message.warning('消息不能为空'); | 
|---|
|  |  |  | chatDis.value = false; | 
|---|
|  |  |  | loading.value = false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | chatDis.value = false; | 
|---|
|  |  |  | loading.value = false; | 
|---|
|  |  |  | inputMsg.value = ''; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | Message.warning('消息不能为空'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | const querySessionDetail = async (session) => { | 
|---|
|  |  |  | sectionList.value = session; | 
|---|
|  |  |  | activeSessionId.value = session.id; | 
|---|
|  |  |  | const { code, data } = await getSessionDetailsApi(session.id); | 
|---|
|  |  |  | if (code === 200) { | 
|---|
|  |  |  | 
|---|
|  |  |  | const { code, data } = await sessionListApi(selectValue.value); | 
|---|
|  |  |  | if (code === 200) { | 
|---|
|  |  |  | sessionList.value = data; | 
|---|
|  |  |  | activeSessionId.value = data[0].id; | 
|---|
|  |  |  | activeSessionId.value = data[0].id; //默认选择第一个 | 
|---|
|  |  |  | querySessionDetail(data[0]); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | Message.warning('查询失败'); | 
|---|
|  |  |  | 
|---|
|  |  |  | onMounted(() => { | 
|---|
|  |  |  | DialogList(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const appStore = useAppStore(); | 
|---|
|  |  |  | const theme = computed(() => { | 
|---|
|  |  |  | return appStore.theme; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //文字动态输出 | 
|---|
|  |  |  | const startDisplayStr = () => { | 
|---|
|  |  |  | if (timer) { | 
|---|
|  |  |  | 
|---|
|  |  |  | background-color: #ededf5; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .light { | 
|---|
|  |  |  | color: white !important; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .dark { | 
|---|
|  |  |  | color: gray !important; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .container { | 
|---|
|  |  |  | .top-title { | 
|---|
|  |  |  | line-height: 60px; | 
|---|
|  |  |  | font-size: 25px; | 
|---|
|  |  |  | font-family: 黑体; | 
|---|
|  |  |  | line-height: 32px; | 
|---|
|  |  |  | font-size: 16px; | 
|---|
|  |  |  | color: #333; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .left-select { | 
|---|
|  |  |  | :deep(.arco-select-view-single) { | 
|---|
|  |  |  | border-radius: 5px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .center, | 
|---|
|  |  |  | .right { | 
|---|
|  |  |  | box-sizing: border-box; | 
|---|
|  |  |  | height: calc(100vh - 100px); | 
|---|
|  |  |  | height: calc(100vh - 200px); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .left { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .card-btn-1 { | 
|---|
|  |  |  | margin: 10px; | 
|---|
|  |  |  | width: 75%; | 
|---|
|  |  |  | margin: 8px 15px; | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | border-radius: 5px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .card-btn-2 { | 
|---|
|  |  |  | margin: 10px 10px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .chatItemAnswer { | 
|---|
|  |  |  | box-sizing: border-box; | 
|---|
|  |  |  | background: #f1f1f1; | 
|---|
|  |  |  | border-radius: 14px; | 
|---|
|  |  |  | .light { | 
|---|
|  |  |  | box-sizing: border-box; | 
|---|
|  |  |  | background: #f1f1f1; | 
|---|
|  |  |  | border-radius: 14px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .textItemAnswer { | 
|---|
|  |  |  | background-color: #373739; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .center { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .chartStart { | 
|---|
|  |  |  | color: #4955f5; | 
|---|
|  |  |  | cursor: pointer; | 
|---|
|  |  |  | font-family: PingFangSC-Medium; | 
|---|
|  |  |  | font-size: 12px; | 
|---|
|  |  |  | font-weight: 500; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .chat_bottom { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | align-items: center; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .chat-item { | 
|---|
|  |  |  | padding: 10px 0; | 
|---|
|  |  |  | .chartUserText { | 
|---|
|  |  |  | font-weight: 600; | 
|---|
|  |  |  | font-size: 14px; | 
|---|
|  |  |  | color: #333; | 
|---|
|  |  |  | margin-top: 4px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .icon-user-jpg { | 
|---|
|  |  |  | border: 1px solid #d9d9d9; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | .right { | 
|---|
|  |  |  | .right-top { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .right-title { | 
|---|
|  |  |  | font-size: 25px; | 
|---|
|  |  |  | font-family: 黑体; | 
|---|
|  |  |  | color: black; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | justify-content: space-between; | 
|---|
|  |  |  | flex-wrap: wrap; | 
|---|
|  |  |  | :deep(.arco-btn-size-mini.arco-btn-shape-round) { | 
|---|
|  |  |  | :deep(.arco-btn-primary) { | 
|---|
|  |  |  | margin-bottom: 10px !important; | 
|---|
|  |  |  | &:hover { | 
|---|
|  |  |  | background-color: #e9f3ff; | 
|---|
|  |  |  | color: rgb(22, 93, 255); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|