Эх сурвалжийг харах

feat: 调整智能体答案的操作按钮实现方式

支持操作按钮动态配置
zhupei@smartai.com 1 жил өмнө
parent
commit
dfd4e378ed

+ 4 - 1
src/modules/conversation-chat/DialogItem.vue

@@ -6,6 +6,7 @@
       v-if="item_type === 'a'"
       :answer="answerInfo"
       :width="width"
+      :answer_action_list="answer_action_list"
       @stop="handleStopChat"
       @retry="handleRetryChat"
       @select="handleSelectChat"
@@ -25,7 +26,9 @@ const props = defineProps({
   /**
    * 对话区域的宽度
    */
-  width: Number
+  width: Number,
+
+  answer_action_list: Array
 });
 
 const emit = defineEmits(['stop', 'retry', 'select']);

+ 4 - 1
src/modules/conversation-chat/DialogList.vue

@@ -9,6 +9,7 @@
         :index="index"
         :width="width"
         :key="item.client_custom_unique_id"
+        :answer_action_list="answer_action_list"
         @select="handleSelectChat(item)"
       />
 
@@ -51,7 +52,9 @@ const props = defineProps({
    * 推荐项
    * 当一轮对话结束时,智能体可能会返回推荐项目信息
    */
-  suggestion: Array
+  suggestion: Array,
+
+  answer_action_list: Array
 });
 
 const scroll2Bottom = useScrollBottom('scroll_container');

+ 36 - 1
src/modules/conversation-item/DialogActions.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="dialog-actions-container">
     <div class="dialog-action-part dialog-action-left">
-      <a-tooltip :content="$t('conversation.copy')" position="right">
+      <a-tooltip :content="$t('conversation.copy')" position="right" v-if="isEnableBtn('copy')">
         <div class="action-btn-item" @click="handleCopy">
           <icon-copy size="18" />
         </div>
@@ -30,8 +30,43 @@
 </template>
 
 <script setup>
+import { ref, computed } from 'vue';
+
+const props = defineProps({
+  /**
+   * 可用的操作按钮
+   */
+  action_list: Array
+});
+
 const emit = defineEmits(['copy', 'retry', 'share']);
 
+/**
+ * 检查一个按钮是否可用
+ * @param btn_name
+ */
+function isEnableBtn(btn_name) {
+  if (!btn_name) {
+    return false;
+  }
+
+  if (!props.action_list) {
+    return false;
+  }
+
+  if (!Array.isArray(props.action_list)) {
+    // 非数组
+    return false;
+  }
+
+  // 按钮不存在,不可用
+  if (props.action_list.indexOf(btn_name) >= 0) {
+    return true;
+  }
+
+  return false;
+}
+
 /**
  * 复制内容
  */

+ 4 - 1
src/modules/conversation-item/DialogAnswer.vue

@@ -13,6 +13,7 @@
             <DialogActions
               v-if="answer_status === 2"
               class="answer-actions-btns"
+              :action_list="answer_action_list"
               @copy="handleAnswerCopy"
               @share="handleAnswerShare"
               @retry="handleAnswerRetry"
@@ -78,7 +79,9 @@ const props = defineProps({
   /**
    * 对话区域的宽度
    */
-  width: Number
+  width: Number,
+
+  answer_action_list: Array
 });
 
 const emit = defineEmits(['stop', 'retry', 'select']);

+ 15 - 0
src/views/conversation/ConversationChatContainer.vue

@@ -30,6 +30,7 @@
             :agent_id="agent_id"
             :list="chat_display_list"
             :suggestion="chat_suggestion"
+            :answer_action_list="answer_action_list"
             @share="handleChatShare"
             @submit="handleSuggestSubmit"
           >
@@ -313,6 +314,20 @@ const file_accept = computed(() => {
   return '*';
 });
 
+/**
+ * 答案可用的操作按钮
+ */
+const answer_action_list = computed(() => {
+  const menu_id = current_menu_id.value;
+
+  // 报表合并无操作按钮
+  if (menu_id === 1) {
+    return [];
+  }
+
+  return ['copy'];
+});
+
 /**
  * 内容分享操作
  * @param chat_id