|
@@ -265,13 +265,19 @@ ${resp.request.data.replace('\n', '')}
|
|
|
break
|
|
|
}
|
|
|
},
|
|
|
- onComplete: (e) => {
|
|
|
+ onComplete: async (e) => {
|
|
|
if (e !== undefined) {
|
|
|
rtn.content += `
|
|
|
|
|
|
`
|
|
|
}
|
|
|
rtn.render_content += '\n'
|
|
|
+
|
|
|
+ await assist.session.message.save({
|
|
|
+ sessionId: activeConversationId.value!,
|
|
|
+ messages: messages.value,
|
|
|
+ })
|
|
|
+
|
|
|
chatInstance.value = undefined
|
|
|
},
|
|
|
})
|
|
@@ -311,6 +317,24 @@ onMounted(doLoadConversations)
|
|
|
// 当前活跃会话
|
|
|
const activeConversationId = ref<number | undefined>(undefined)
|
|
|
|
|
|
+watch(activeConversationId,async (newVal)=> {
|
|
|
+ if (newVal === undefined) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ await doLoadingMessage(newVal)
|
|
|
+})
|
|
|
+
|
|
|
+const {loading: loadingMessage, doLoading: doLoadingMessage} = useLoading(async (id: number)=> {
|
|
|
+ const data: { messages: Message[]; total: number } = await assist.session.message.list({ sessionId: id }).catch(() => {
|
|
|
+ return {
|
|
|
+ list: [],
|
|
|
+ total: 0
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ messages.value = data.messages ?? []
|
|
|
+})
|
|
|
+
|
|
|
// 选择会话
|
|
|
const selectConversation = (id: number) => {
|
|
|
activeConversationId.value = id
|
|
@@ -393,7 +417,7 @@ const getUserInfos = ref<{
|
|
|
}>(Local.get('userInfo') || {})
|
|
|
|
|
|
const canSendMessage = computed(()=> {
|
|
|
- return !inputMessage.value.trim() && loadingModels.value && loadConversations.value
|
|
|
+ return !inputMessage.value.trim() || loadingModels.value || loadConversations.value || loadingMessage.value || activeConversationId.value === undefined
|
|
|
})
|
|
|
|
|
|
const router = useRouter()
|
|
@@ -473,7 +497,7 @@ const redirectToModelManager = () => router.push('manage/model')
|
|
|
<!-- 右侧聊天区域 -->
|
|
|
<el-main class="chat-main">
|
|
|
<!-- 消息展示区域 -->
|
|
|
- <div class="messages-container" ref="messagesContainer">
|
|
|
+ <div class="messages-container" ref="messagesContainer" v-loading="loadingMessage">
|
|
|
<div v-if="messages.length !== 0">
|
|
|
<div v-for="message in messages" :key="message.id" :class="['message-wrapper', message.role]">
|
|
|
<!-- AI消息 -->
|
|
@@ -600,7 +624,7 @@ const redirectToModelManager = () => router.push('manage/model')
|
|
|
resize="none"
|
|
|
@keydown.enter.ctrl="sendMessage"
|
|
|
@keydown.enter.meta="sendMessage"
|
|
|
- :disabled="isConversationActive"
|
|
|
+ :disabled="isConversationActive || activeConversationId === undefined"
|
|
|
/>
|
|
|
</div>
|
|
|
|