| | |
| | | <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; |
| | | " |
| | |
| | | </a-scrollbar> |
| | | </a-card> |
| | | </a-col> |
| | | <a-col :span="15"> |
| | | <a-col :span="18"> |
| | | <a-card class="center"> |
| | | <div |
| | | v-if="sessionDetailList.length === 0" |
| | |
| | | " |
| | | > |
| | | <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="chart-user-text" |
| | | >{{ 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="chat-item-answer"> |
| | | <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)" |
| | | > |
| | | </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"> |
| | |
| | | </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 { useAppStore, useUserStore } from '@/store'; |
| | | import { computed, nextTick, onMounted, 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 dialogChange = (val) => { |
| | | dialogId.value = val; |
| | | querySessionList(); |
| | | }; |
| | | const sentClick = (event) => { |
| | |
| | | if (done) { |
| | | console.info('done'); |
| | | displayedText.value = ''; |
| | | querySessionList(); |
| | | querySessionDetail(sectionList.value); |
| | | break; |
| | | } |
| | | } |
| | |
| | | inputMsg.value = ''; |
| | | } else { |
| | | Message.warning('消息不能为空'); |
| | | chatDis.value = false; |
| | | loading.value = false; |
| | | } |
| | | }; |
| | | 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('查询失败'); |
| | |
| | | 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; |
| | | } |
| | | .chat-item-answer { |
| | | box-sizing: border-box; |
| | | background: #f1f1f1; |
| | | border-radius: 14px; |
| | | .light { |
| | | box-sizing: border-box; |
| | | background: #f1f1f1; |
| | | border-radius: 14px; |
| | | } |
| | | } |
| | | |
| | | .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; |
| | | .chart-user-text { |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |