소스 검색

Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3 into dev

# Conflicts:
#	src/views/ai/chat/index.vue
YunaiV 1 년 전
부모
커밋
ac18d871ca
2개의 변경된 파일23개의 추가작업 그리고 26개의 파일을 삭제
  1. 2 0
      src/views/ai/chat/Conversation.vue
  2. 21 26
      src/views/ai/chat/index.vue

+ 2 - 0
src/views/ai/chat/Conversation.vue

@@ -387,6 +387,8 @@ onMounted(async () => {
     // 首次默认选中第一个
     if (conversationList.value.length) {
       activeConversationId.value = conversationList.value[0].id
+      // 回调 onConversationClick
+      await emits('onConversationClick', conversationList.value[0])
     }
   }
 })

+ 21 - 26
src/views/ai/chat/index.vue

@@ -36,11 +36,10 @@
           <div class="message-container" >
             <MessageLoading v-if="listLoading" />
             <MessageNewChat v-if="!activeConversation" @on-new-chat="handlerNewChat" />
-            <ChatEmpty v-if="!listLoading && messageList.length === 0 && activeConversation" @on-prompt="doSend"/>
-            <Message v-if="!listLoading && messageList.length > 0"
+            <ChatEmpty v-if="!listLoading && list.length === 0 && activeConversation" @on-prompt="doSend"/>
+            <Message v-if="!listLoading && list.length > 0"
                      ref="messageRef"
-                     :conversation="activeConversation"
-                     :list="messageList"
+                     :list="list"
                      @on-delete-success="handlerMessageDelete"
                      @on-edit="handlerMessageEdit"
                      @on-refresh="handlerMessageRefresh"/>
@@ -103,12 +102,14 @@ import MessageLoading from './MessageLoading.vue'
 import MessageNewChat from './MessageNewChat.vue'
 import {ChatMessageApi, ChatMessageVO} from '@/api/ai/chat/message'
 import {ChatConversationApi, ChatConversationVO} from '@/api/ai/chat/conversation'
-import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
+import {getUserProfile, ProfileVO} from '@/api/system/user/profile'
+import {useClipboard} from '@vueuse/core'
 import ChatConversationUpdateForm from "@/views/ai/chat/components/ChatConversationUpdateForm.vue";
 import {Download, Top} from "@element-plus/icons-vue";
 
 const route = useRoute() // 路由
 const message = useMessage() // 消息弹窗
+const {copy} = useClipboard() // 初始化 copy 到粘贴板
 
 // ref 属性定义
 const activeConversationId = ref<string | null>(null) // 选中的对话编号
@@ -338,8 +339,14 @@ const doSendStream = async (userMessage: ChatMessageVO) => {
       userMessage.content,
       conversationInAbortController.value,
       enableContext.value,
-      async (message) => {
-        const data = JSON.parse(message.data) // TODO 芋艿:类型处理;
+      async (res) => {
+        console.log('res', res)
+        const { code, data, msg } = JSON.parse(res.data)
+        if (code !== 0) {
+          message.alert(`对话异常! ${msg}`)
+          return
+        }
+
         // 如果内容为空,就不处理。
         if (data.receive.content === '') {
           return
@@ -360,14 +367,13 @@ const doSendStream = async (userMessage: ChatMessageVO) => {
         await scrollToBottom()
       },
       (error) => {
-        console.log('onError')
+        message.alert(`对话异常! ${error}`)
         // 标记对话结束
         conversationInProgress.value = false
         // 结束 stream 对话
         conversationInAbortController.value.abort()
       },
       () => {
-        console.log('onClose')
         // 标记对话结束
         conversationInProgress.value = false
         // 结束 stream 对话
@@ -390,23 +396,6 @@ const stopStream = async () => {
 
 // ============== message 数据 =================
 
-/** 消息列表 */
-const messageList = computed(() => {
-  if (list.value.length > 0) {
-    return list.value
-  }
-  // 没有消息时,如果有 systemMessage 则展示它
-  // TODO add by 芋艿:这个消息下面,不能有复制、删除按钮
-  if (activeConversation.value?.systemMessage) {
-    return [{
-      id: 0,
-      type: 'system',
-      content: activeConversation.value.systemMessage
-    }]
-  }
-  return []
-})
-
 /**
  * 获取 - message 列表
  */
@@ -486,6 +475,8 @@ const handleConversationClick = async (conversation: ChatConversationVO) => {
   await getMessageList()
   // 滚动底部
   scrollToBottom(true)
+  // 清空输入框
+  prompt.value = ''
   return true
 }
 
@@ -536,6 +527,10 @@ const handlerNewChat = async () => {
  * 删除 message
  */
 const handlerMessageDelete = async () => {
+  if (conversationInProgress.value) {
+    message.alert('回答中,不能删除!')
+    return
+  }
   // 刷新 message
   await getMessageList()
 }