| | <script setup lang="ts"> |
| | |
| | import router from "@/router.ts"; |
| | import { useSettingsStore } from "@/stores/config.ts"; |
| | import { onMounted, ref, nextTick, watch, defineProps } from "vue"; |
| | |
| | const props = defineProps({ |
| | isPlaying: { |
| | type: Boolean, |
| | default: true |
| | }, |
| | chatContent: { |
| | type: [Object], |
| | default: [] |
| | } |
| | }); |
| | |
| | const contentListRef = ref(null); |
| | |
| | const scrollToBottom = () => { |
| | nextTick(() => { |
| | if (contentListRef.value) { |
| | |
| | contentListRef.value.scrollTop = contentListRef.value.scrollHeight + 24; |
| | } |
| | }); |
| | }; |
| | |
| | |
| | watch(() => props.chatContent, (newVal, oldVal) => { |
| | |
| | scrollToBottom(); |
| | }, { deep: true }); |
| | </script> |
| | |
| | <template> |
| | <div ref="contentListRef" class="talk-wrapper"> |
| | <div v-for="node, index in chatContent" :class="[node.type == 'answer' ? 'cont-left' : 'cont-right']" :key="index"> |
| | <div :class="[node.type == 'answer' ? 'text-left' : 'text-right']"> |
| | {{ node.content }} |
| | </div> |
| | </div> |
| | |
| | |
| | |
| | |
| | {{ 'AI' }} |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | {{ 'U' }} |
| | |
| | |
| | |
| | |
| | </div> |
| | </template> |
| | |
| | <style lang="scss" scoped> |
| | .talk-wrapper { |
| | width: auto; |
| | height: calc(100vh - 100px); |
| | overflow-y: scroll; |
| | padding: 20px 240px 0 240px; |
| | display: flex; |
| | flex-direction: column; |
| | align-items: flex-start; |
| | justify-content: flex-start; |
| | |
| | .cont-left { |
| | width: 100%; |
| | |
| | margin: 24px 0; |
| | display: flex; |
| | justify-content: flex-start; |
| | align-items: flex-start; |
| | .text-left { |
| | color: #222; |
| | font-size: 16px; |
| | font-weight: 400; |
| | text-align: left; |
| | line-height: 2; |
| | margin-left: 12px; |
| | margin-top: 6px; |
| | } |
| | } |
| | |
| | .cont-right { |
| | width: 100%; |
| | margin: 24px 0; |
| | display: flex; |
| | justify-content: flex-end; |
| | align-items: flex-start; |
| | |
| | .text-right { |
| | color: #444; |
| | font-size: 16px; |
| | font-weight: 400; |
| | text-align: end; |
| | line-height: 2; |
| | margin-right: 12px; |
| | background: #ccc; |
| | border-radius: 8px; |
| | border-top-right-radius: 0; |
| | padding: 8px; |
| | } |
| | } |
| | } |
| | </style> |
| | |