Browse Source

问答loading位置

CzRger 2 months ago
parent
commit
0c4a61deb1

+ 19 - 5
src/views/smart-ask-answer/assistant-2/chat.vue

@@ -61,12 +61,14 @@ import {useRouter} from "vue-router";
 import {isValue, YMDHms} from "@/utils/czr-util";
 import {fetchSuggestedQuestions, updateFeedback} from "@/views/smart-ask-answer/assistant-2/dify/share";
 import {staticConQueryQuestionslist} from "@/views/smart-ask-answer/assistant-2/cms/api";
+import {ElMessage} from "element-plus";
 
 const emit = defineEmits(['getText', 'getSuggest', 'loadingSuggest'])
 const router = useRouter()
 const state: any = reactive({
   text: '',
   loading: false,
+  waiting: false,
   params: {
     response_mode: "streaming",
     conversation_id: "",
@@ -95,7 +97,14 @@ const scrollToEnd = () => {
 }
 const onSend = (text = '') => {
   if ((isValue(state.text.trim()) || text) && !state.loading) {
-    state.loading = true
+    if (state.waiting) {
+      ElMessage({
+        message: '问题回复中,请稍后提问!',
+        grouping: true,
+        type: 'info',
+      })
+      return
+    }
     if (text) {
       state.params.query = text
     } else {
@@ -118,13 +127,15 @@ const onSend = (text = '') => {
       type: 'answer',
       content: '',
       messageId: '',
-      suggest: []
+      suggest: [],
+      loading: true
     })
     state.chats.push(answer)
     scrollToEnd()
     const floatingDiv = ref_auto.value
     floatingDiv.style.visibility = 'hidden';
     floatingDiv.style.display = 'flex';
+    state.waiting = true
     ssePost(`/installed-apps/${window.czrConfig.dify.appId}/chat-messages`, {
       body: state.params,
     }, {
@@ -141,7 +152,8 @@ const onSend = (text = '') => {
         }
         answer.messageId = messageEnd.message_id
         state.params.parent_message_id = messageEnd.message_id
-        state.loading = false
+        state.waiting = false
+        answer.loading = false
         if (state.chatConfig?.suggested_questions_after_answer?.enabled && state.isSuggest) {
           const warningStr1 = state.chatConfig?.sensitive_word_avoidance?.config?.outputs_config?.preset_response
           if (warningStr1 && answer.content.includes(warningStr1)) {
@@ -158,7 +170,10 @@ const onSend = (text = '') => {
         }
       },
       onMessageReplace: (messageReplace) => {},
-      onError() {},
+      onError(msg, code) {
+        console.error(msg, code)
+        state.waiting = false
+      },
       onWorkflowStarted: ({ workflow_run_id, task_id }) => {},
       onWorkflowFinished: ({ data: workflowFinishedData }) => {},
       onIterationStart: ({ data: iterationStartedData }) => {},
@@ -168,7 +183,6 @@ const onSend = (text = '') => {
       onTTSChunk: (messageId: string, audio: string) => {},
       onTTSEnd: (messageId: string, audio: string) => {},
     })
-    // getRelation(state.params.query)
   }
 }
 const getRelation = (text) => {

+ 7 - 0
src/views/smart-ask-answer/assistant-2/component/answer/index.vue

@@ -12,6 +12,9 @@
           </template>
         </div>
       </template>
+      <template v-else-if="item.loading">
+        <div class="answer-loading" v-loading="item.loading"/>
+      </template>
       <template v-else>
         <template v-for="part in contentCpt">
           <template v-if="part.type === 'think'">
@@ -174,6 +177,10 @@ const onCopy = (text) => {
     font-weight: 400;
     font-size: 16px;
     color: #111111;
+    .answer-loading {
+      width: 50px;
+      height: 100%;
+    }
     .answer-content-text {
       margin-top: 16px;
     }

+ 19 - 4
src/views/smart-ask-answer/assistant/chat.vue

@@ -61,12 +61,14 @@ import {useRouter} from "vue-router";
 import {isValue, YMDHms} from "@/utils/czr-util";
 import {fetchSuggestedQuestions, updateFeedback} from "@/views/smart-ask-answer/assistant/dify/share";
 import {staticConQueryQuestionslist} from "@/views/smart-ask-answer/assistant/cms/api";
+import {ElMessage} from "element-plus";
 
 const emit = defineEmits(['getText', 'getSuggest', 'loadingSuggest'])
 const router = useRouter()
 const state: any = reactive({
   text: '',
   loading: false,
+  waiting: false,
   params: {
     response_mode: "streaming",
     conversation_id: "",
@@ -95,7 +97,14 @@ const scrollToEnd = () => {
 }
 const onSend = (text = '') => {
   if ((isValue(state.text.trim()) || text) && !state.loading) {
-    state.loading = true
+    if (state.waiting) {
+      ElMessage({
+        message: '问题回复中,请稍后提问!',
+        grouping: true,
+        type: 'info',
+      })
+      return
+    }
     if (text) {
       state.params.query = text
     } else {
@@ -118,13 +127,15 @@ const onSend = (text = '') => {
       type: 'answer',
       content: '',
       messageId: '',
-      suggest: []
+      suggest: [],
+      loading: true
     })
     state.chats.push(answer)
     scrollToEnd()
     const floatingDiv = ref_auto.value
     floatingDiv.style.visibility = 'hidden';
     floatingDiv.style.display = 'flex';
+    state.waiting = true
     ssePost(`/installed-apps/${window.czrConfig.dify.appId}/chat-messages`, {
       body: state.params,
     }, {
@@ -141,7 +152,8 @@ const onSend = (text = '') => {
         }
         answer.messageId = messageEnd.message_id
         state.params.parent_message_id = messageEnd.message_id
-        state.loading = false
+        state.waiting = false
+        answer.loading = false
         if (state.chatConfig?.suggested_questions_after_answer?.enabled && state.isSuggest) {
           const warningStr1 = state.chatConfig?.sensitive_word_avoidance?.config?.outputs_config?.preset_response
           if (warningStr1 && answer.content.includes(warningStr1)) {
@@ -158,7 +170,10 @@ const onSend = (text = '') => {
         }
       },
       onMessageReplace: (messageReplace) => {},
-      onError() {},
+      onError(msg, code) {
+        console.error(msg, code)
+        state.waiting = false
+      },
       onWorkflowStarted: ({ workflow_run_id, task_id }) => {},
       onWorkflowFinished: ({ data: workflowFinishedData }) => {},
       onIterationStart: ({ data: iterationStartedData }) => {},

+ 7 - 0
src/views/smart-ask-answer/assistant/component/answer/index.vue

@@ -12,6 +12,9 @@
           </template>
         </div>
       </template>
+      <template v-else-if="item.loading">
+        <div class="answer-loading" v-loading="item.loading"/>
+      </template>
       <template v-else>
         <template v-for="part in contentCpt">
           <template v-if="part.type === 'think'">
@@ -174,6 +177,10 @@ const onCopy = (text) => {
     font-weight: 400;
     font-size: 16px;
     color: #111111;
+    .answer-loading {
+      width: 50px;
+      height: 100%;
+    }
     .answer-content-text {
       margin-top: 16px;
     }