Pārlūkot izejas kodu

Merge branch 'master_feat_h5preview_20250305'

xdd 1 dienu atpakaļ
vecāks
revīzija
38be01dcf5
1 mainītis faili ar 56 papildinājumiem un 38 dzēšanām
  1. 56 38
      pages/index/index.vue

+ 56 - 38
pages/index/index.vue

@@ -34,7 +34,8 @@
                       :style="{color: item.style.btnTextColor,backgroundColor: item.style.buttonColor}"
                       class="option-button"
                       :class="{ 'selected': isOptionSelected(message.id, option) }"
-                      @click="selectOption(message.id, option)"
+                      @click="selectOption(message, option)"
+                      v-once
                   >
                     {{ option.text }}
                   </button>
@@ -79,7 +80,8 @@ export default {
       order_plan_id: '',
       creative_id: '',
       impress_id: '',
-      sign: ''
+      sign: '',
+      isProcessing: false // 防止按钮重复点击
     }
   },
   mounted() {
@@ -153,50 +155,66 @@ export default {
       return maxId + 1
     },
     // 聊天组件选择了选项
-    async selectOption(id, option) {
-      let h5ChatItem = this.json.filter(e => e.type === 'h5-chat')[0]
-      if (!h5ChatItem) {
-        console.error("未找到类型为 'h5-chat' 的元素");
-        return;
-      }
-      // 如果有答案就直接用户消息和客服消息
-      let nextMsg = h5ChatItem.agentMsg.shift();
-
-      h5ChatItem.messages.push({
-        id: this.getChatMsgIdMax(),
-        sender: 'user',
-        text: option.text,
-        options: []
-      })
-      await this.delay(1000);
+    async selectOption(message, option) {
+      try{
+        if(this.isProcessing){
+          return;
+        }
+        this.isProcessing = true;
+        let h5ChatItem = this.json.filter(e => e.type === 'h5-chat')[0]
+        // 防止重复点击
+        if(message.handle){
+          return;
+        } else {
+          message.handle = true;
+        }
+        if (!h5ChatItem) {
+          console.error("未找到类型为 'h5-chat' 的元素");
+          return;
+        }
+        // 如果有答案就直接用户消息和客服消息
+        let nextMsg = h5ChatItem.agentMsg.shift();
 
-      if (option.answer) {
         h5ChatItem.messages.push({
           id: this.getChatMsgIdMax(),
-          sender: 'agent',
-          text: option.answer,
+          sender: 'user',
+          text: option.text,
           options: []
         })
         await this.delay(1000);
-        h5ChatItem.messages.push(nextMsg);
-      } else {
-        await this.delay(1000);
-        h5ChatItem.messages.push(nextMsg);
-      }
 
-      while((nextMsg = h5ChatItem.agentMsg.shift()) && (!nextMsg.options || nextMsg.options.length === 0)) {
-        await this.delay(1000);
-        h5ChatItem.messages.push(nextMsg);
-      }
+        if (option.answer) {
+          h5ChatItem.messages.push({
+            id: this.getChatMsgIdMax(),
+            sender: 'agent',
+            text: option.answer,
+            options: []
+          })
+          await this.delay(1000);
+          h5ChatItem.messages.push(nextMsg);
+        } else {
+          await this.delay(1000);
+          h5ChatItem.messages.push(nextMsg);
+        }
 
-      if (h5ChatItem.agentMsg.length === 0) {
-        await this.delay(1000);
-        h5ChatItem.messages.push({
-          id: this.getChatMsgIdMax(),
-          sender: 'agent',
-          text: "好的,已经为您分配专业老师。<span style='color:red'>【点击下方按钮】</span>添加老师,获取免费上课链接。!",
-          options: []
-        });
+        while((nextMsg = h5ChatItem.agentMsg.shift()) && (!nextMsg.options || nextMsg.options.length === 0)) {
+          await this.delay(500+(Math.random()*1000)%500);
+          h5ChatItem.messages.push(nextMsg);
+        }
+
+        if (h5ChatItem.agentMsg.length === 0) {
+          await this.delay(1000);
+          h5ChatItem.messages.push({
+            id: this.getChatMsgIdMax(),
+            sender: 'agent',
+            text: "好的,已经为您分配专业老师。<span style='color:red'>【点击下方按钮】</span>添加老师,获取免费上课链接。!",
+            options: []
+          });
+        }
+      }catch (err) {
+        console.error(err);
+      }finally {
+        this.isProcessing = false;
       }
     },
     // 辅助函数:延迟