From 2a00bcb6a758573366889af3275d6708ef9a637d Mon Sep 17 00:00:00 2001 From: SonyLeo <746591437@qq.com> Date: Tue, 20 Oct 2026 04:58:53 -0700 Subject: [PATCH 01/15] feat(chat): enhance ChatUI with anchor support and input management --- docs/demos/chat/input-controls.vue | 51 ++++ docs/demos/chat/message-anchor.vue | 51 ++++ docs/demos/chat/sender-options.vue | 8 +- docs/src/components/bubble.md | 5 +- docs/src/components/sender.md | 2 + docs/src/suites/chat-runtime.md | 4 +- docs/src/suites/chat.md | 229 +++++++++++++++--- packages/chat/src/Chat.vue | 10 +- packages/chat/src/ChatUI.vue | 180 ++++++++++---- .../chat/src/composables/useChatDraft.test.ts | 28 +++ .../src/composables/useChatRenderContext.ts | 27 +++ packages/chat/src/index.ts | 2 + packages/chat/src/types/base.ts | 9 + packages/chat/src/types/ui/options.ts | 8 + packages/chat/src/types/ui/slots.ts | 1 - .../chat/src/ui/composer/ChatInputRegion.vue | 11 +- packages/chat/src/ui/composer/ChatSender.vue | 18 +- packages/chat/src/ui/layout/ChatHeader.vue | 16 +- .../chat/src/ui/messages/ChatMessages.vue | 110 ++++++++- .../chat/src/ui/messages/ScrollToBottom.vue | 14 +- .../src/ui/messages/messageIdentity.test.ts | 57 +++++ .../chat/src/ui/messages/messageIdentity.ts | 39 +++ .../components/layouts/MultiLineLayout.vue | 5 +- .../components/layouts/SenderHeader.vue | 24 ++ .../components/layouts/SingleLineLayout.vue | 5 +- .../src/shared/composables/useAutoScroll.ts | 17 +- 26 files changed, 802 insertions(+), 129 deletions(-) create mode 100644 docs/demos/chat/input-controls.vue create mode 100644 docs/demos/chat/message-anchor.vue create mode 100644 packages/chat/src/composables/useChatDraft.test.ts create mode 100644 packages/chat/src/composables/useChatRenderContext.ts create mode 100644 packages/chat/src/ui/messages/messageIdentity.test.ts create mode 100644 packages/chat/src/ui/messages/messageIdentity.ts create mode 100644 packages/components/src/sender/components/layouts/SenderHeader.vue diff --git a/docs/demos/chat/input-controls.vue b/docs/demos/chat/input-controls.vue new file mode 100644 index 0000000000..104c6a9ac9 --- /dev/null +++ b/docs/demos/chat/input-controls.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/docs/demos/chat/message-anchor.vue b/docs/demos/chat/message-anchor.vue new file mode 100644 index 0000000000..e06d8beb63 --- /dev/null +++ b/docs/demos/chat/message-anchor.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/docs/demos/chat/sender-options.vue b/docs/demos/chat/sender-options.vue index a60e5efb5a..6e457eefb1 100644 --- a/docs/demos/chat/sender-options.vue +++ b/docs/demos/chat/sender-options.vue @@ -7,6 +7,12 @@ import { useChatCaseRuntime } from './shared/createChatRuntime' const showHelp = shallowRef(false) const currentTemplate = shallowRef([]) +const helpText = computed(() => { + if (currentTemplate.value.length > 1) + return '报告模板已填入,文本块可以编辑,下拉字段可以选择。内容超过 300 字时无法提交。' + if (currentTemplate.value.length) return '常用问题已填入,可以修改后发送。内容超过 300 字时无法提交。' + return '@ 用于插入对象名称,不会切换模型;点击“写报告”或“常用问题”填入内容。' +}) const mentions: MentionItem[] = [ { label: '产品组', value: 'product' }, { label: '研发组', value: 'engineering' }, @@ -86,7 +92,7 @@ function fillCommonQuestion() {