Pārlūkot izejas kodu

fix(frontend): 修复智能模式输入框回车不发送

cc 2 dienas atpakaļ
vecāks
revīzija
cf5e5f492a

+ 10 - 8
ai-electron/frontend/src/ai/components/ChatComposer.vue

@@ -12,7 +12,6 @@
         @focus="focused = true"
         @blur="focused = false"
         @keydown="onKeydown"
-        @press-enter="onEnter"
       />
 
       <!-- 附件 chips:选择即上传,上传中显进度、失败可移除 -->
@@ -294,14 +293,17 @@
     });
   }
 
-  /** 中文输入法组合中的 Enter 不应触发发送 */
-  let composing = false;
+  /**
+   * Enter 发送 / Shift+Enter 换行。
+   *
+   * 输入法状态必须取当前这次 keydown 事件本身:antd 先派发 pressEnter 再派发 keydown,
+   * 若改在 pressEnter 里读上一次按键留下的状态,中文输入法「回车确认候选词」之后的那次
+   * 回车会沿用旧的组合中标记,被当成候选词确认而只换行、不发送。
+   */
   function onKeydown(e: KeyboardEvent) {
-    composing = (e as any).isComposing === true || e.keyCode === 229;
-  }
-
-  function onEnter(e: KeyboardEvent) {
-    if (composing) return;
+    if (e.key !== 'Enter') return;
+    // 中文输入法组合中的回车是确认候选词,不能当发送
+    if (e.isComposing || e.keyCode === 229) return;
     // Shift+Enter 由 textarea 默认换行
     if (e.shiftKey) return;
     e.preventDefault();