From 7b51d08ea527abc74a4cdaafc0d60eb8a7e5cc93 Mon Sep 17 00:00:00 2001 From: wangdan-fit2cloud <79562285+wangdan-fit2cloud@users.noreply.github.com> Date: Wed, 19 Mar 2025 15:31:27 +0800 Subject: [PATCH] feat: Add mobile mode to the conversation, support ctrl/shift/cmd/opt+enter for new line (#2615) --- ui/src/assets/window3.png | Bin 0 -> 9354 bytes .../component/chat-input-operate/index.vue | 12 +- ui/src/components/ai-chat/index.vue | 18 +- ui/src/locales/lang/en-US/ai-chat.ts | 2 +- .../lang/en-US/views/application-overview.ts | 3 +- ui/src/locales/lang/zh-CN/ai-chat.ts | 2 +- .../lang/zh-CN/views/application-overview.ts | 3 +- ui/src/locales/lang/zh-Hant/ai-chat.ts | 2 +- .../zh-Hant/views/application-overview.ts | 3 +- .../component/EmbedDialog.vue | 38 +- ui/src/views/chat/index.vue | 6 +- ui/src/views/chat/mobile/index.vue | 400 ++++++++++++++++++ ui/src/views/hit-test/index.vue | 23 +- 13 files changed, 486 insertions(+), 26 deletions(-) create mode 100644 ui/src/assets/window3.png create mode 100644 ui/src/views/chat/mobile/index.vue diff --git a/ui/src/assets/window3.png b/ui/src/assets/window3.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2a3a563f2a9ba72e7f115841bb17d864410959 GIT binary patch literal 9354 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 Eg24~~L;wH) literal 0 HcmV?d00001 diff --git a/ui/src/components/ai-chat/component/chat-input-operate/index.vue b/ui/src/components/ai-chat/component/chat-input-operate/index.vue index b78d9caf4..14e185a69 100644 --- a/ui/src/components/ai-chat/component/chat-input-operate/index.vue +++ b/ui/src/components/ai-chat/component/chat-input-operate/index.vue @@ -525,8 +525,8 @@ function autoSendMessage() { } function sendChatHandle(event?: any) { - if (!event?.ctrlKey) { - // 如果没有按下组合键ctrl,则会阻止默认事件 + if (!event?.ctrlKey && !event?.shiftKey && !event?.altKey && !event?.metaKey) { + // 如果没有按下组合键,则会阻止默认事件 event?.preventDefault() if (!isDisabledChat.value && !props.loading && !event?.isComposing) { if (inputValue.value.trim()) { @@ -534,14 +534,16 @@ function sendChatHandle(event?: any) { } } } else { - // 如果同时按下ctrl+回车键,则会换行 - insertNewlineAtCursor() + // 如果同时按下ctrl/shift/cmd/opt +enter,则会换行 + insertNewlineAtCursor(event) } } -const insertNewlineAtCursor = () => { +const insertNewlineAtCursor = (event?: any) => { const textarea = document.querySelector('.el-textarea__inner') as HTMLTextAreaElement const startPos = textarea.selectionStart const endPos = textarea.selectionEnd + // 阻止默认行为(避免额外的换行符) + event.preventDefault() // 在光标处插入换行符 inputValue.value = inputValue.value.slice(0, startPos) + '\n' + inputValue.value.slice(endPos) nextTick(() => { diff --git a/ui/src/components/ai-chat/index.vue b/ui/src/components/ai-chat/index.vue index 6174e18bb..24e8c71ec 100644 --- a/ui/src/components/ai-chat/index.vue +++ b/ui/src/components/ai-chat/index.vue @@ -1,7 +1,7 @@