diff --git a/front-end/src/stores/home-store.ts b/front-end/src/stores/home-store.ts index 3e61841..e2562cd 100644 --- a/front-end/src/stores/home-store.ts +++ b/front-end/src/stores/home-store.ts @@ -1,10 +1,10 @@ import { defineStore } from 'pinia' import { ref } from 'vue' -import type { UserDto } from '@/apis/__generated/model/dto' import { api } from '@/utils/api-instance' +import type {User} from "@/apis/__generated/model/static"; export const useHomeStore = defineStore('home', () => { - const userInfo = ref() + const userInfo = ref() const getUserInfo = async () => { userInfo.value = await api.userController.userInfo() return userInfo.value diff --git a/front-end/src/views/chat/chat-view.vue b/front-end/src/views/chat/chat-view.vue index 61524fe..c953f48 100644 --- a/front-end/src/views/chat/chat-view.vue +++ b/front-end/src/views/chat/chat-view.vue @@ -8,7 +8,7 @@ import { storeToRefs } from 'pinia' import { ElIcon, ElMessage, type UploadProps, type UploadUserFile } from 'element-plus' import { api } from '@/utils/api-instance' import { SSE } from 'sse.js' -import { type AiMessage, useChatStore } from './store/chat-store' +import { type AiMessage2, useChatStore } from './store/chat-store' import type { AiMessageParams, AiMessageWrapper } from '@/apis/__generated/model/static' type ChatResponse = { @@ -36,12 +36,17 @@ const loading = ref(true) onMounted(async () => { // 查询自己的聊天会话 - api.aiSessionController.findByUser().then((res) => { + api.aiSessionController.findByUser().then(async (res) => { // 讲会话添加到列表中 - sessionList.value = res.map((row) => { - return { ...row, checked: false } - }) - // 默认选中的聊天会话是第一个 + sessionList.value = await Promise.all( + res.map(async (row) => { + return { + ...row, + checked: false, + messages: await api.aiMessageController.getSessionMessages({ sessionId: row.id }) + } + }) + ) // 默认选中的聊天会话是第一个 if (sessionList.value.length > 0) { activeSession.value = sessionList.value[0] } else { @@ -52,12 +57,12 @@ onMounted(async () => { }) // ChatGPT的回复 -const responseMessage = ref({ +const responseMessage = ref({ id: new Date().getTime().toString(), type: 'ASSISTANT', - medias: [], + medias: '[]', textContent: '', - sessionId: '' + aiSessionId: '' }) const handleSendMessage = async (message: { text: string; image: string }) => { @@ -66,25 +71,25 @@ const handleSendMessage = async (message: { text: string; image: string }) => { return } // 图片/语音 - const medias: AiMessage['medias'] = [] + const medias: { type: string; data: string }[] = [] if (message.image) { medias.push({ type: 'image', data: message.image }) } // 用户的提问 const chatMessage = { id: new Date().getTime().toString(), - sessionId: activeSession.value.id, - medias, + aiSessionId: activeSession.value.id, + medias: JSON.stringify(medias), textContent: message.text, type: 'USER' - } satisfies AiMessage + } satisfies AiMessage2 responseMessage.value = { id: new Date().getTime().toString(), - medias: [], + medias: '[]', type: 'ASSISTANT', textContent: '', - sessionId: activeSession.value.id + aiSessionId: activeSession.value.id } const body: AiMessageWrapper = { message: chatMessage, params: options.value } const form = new FormData() diff --git a/front-end/src/views/chat/components/message-row.vue b/front-end/src/views/chat/components/message-row.vue index 5957bdd..eb137f6 100644 --- a/front-end/src/views/chat/components/message-row.vue +++ b/front-end/src/views/chat/components/message-row.vue @@ -2,17 +2,17 @@ import TextLoading from './text-loading.vue' import logo from '@/assets/logo.jpg' import MarkdownMessage from './markdown-message.vue' -import type { AiMessage } from '../store/chat-store' +import type { AiMessage2 } from '../store/chat-store' import { computed } from 'vue' // message:接受消息对象,展示消息内容和头像,并且根据角色调整消息位置。 // avatar:用户头像,如果角色是 Assistant则使用 logo。 const props = defineProps<{ - message: AiMessage + message: AiMessage2 avatar?: string }>() const images = computed(() => { - const medias = props.message.medias || [] + const medias = JSON.parse(props.message.medias || '[]') as { type: string; data: string }[] return medias.filter((media) => media.type === 'image').map((media) => media.data) }) diff --git a/front-end/src/views/chat/components/session-item.vue b/front-end/src/views/chat/components/session-item.vue index 92a6e3f..48332e0 100644 --- a/front-end/src/views/chat/components/session-item.vue +++ b/front-end/src/views/chat/components/session-item.vue @@ -1,12 +1,12 @@