From 856c6f6d7856283765e0bc3dfc360d3ed86079ba Mon Sep 17 00:00:00 2001 From: zhaoying Date: Tue, 7 Apr 2026 18:09:32 +0800 Subject: [PATCH] fix(web): share app chat support statement --- web/src/components/Chat/ChatToolbar.tsx | 1 + web/src/views/ApplicationConfig/Agent.tsx | 24 +++++++++++++++-- .../ApplicationConfig/TestChat/index.tsx | 26 +++++++++++++++++-- web/src/views/Conversation/index.tsx | 4 +-- .../views/Workflow/components/Chat/Chat.tsx | 14 ++++++---- 5 files changed, 58 insertions(+), 11 deletions(-) diff --git a/web/src/components/Chat/ChatToolbar.tsx b/web/src/components/Chat/ChatToolbar.tsx index c5db0c4c..744e2cd6 100644 --- a/web/src/components/Chat/ChatToolbar.tsx +++ b/web/src/components/Chat/ChatToolbar.tsx @@ -82,6 +82,7 @@ const ChatToolbar = forwardRef(({ setVariables: (variables) => { console.log('variables', variables) form.setFieldValue('variables', variables) + onVariablesChange?.(variables) }, })) diff --git a/web/src/views/ApplicationConfig/Agent.tsx b/web/src/views/ApplicationConfig/Agent.tsx index 0dbe9f3f..94845571 100644 --- a/web/src/views/ApplicationConfig/Agent.tsx +++ b/web/src/views/ApplicationConfig/Agent.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-02-03 16:29:21 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-03-31 16:50:10 + * @Last Modified time: 2026-04-07 18:04:49 */ import { useEffect, useRef, useState, forwardRef, useImperativeHandle, useMemo } from 'react'; import { useTranslation } from 'react-i18next' @@ -354,6 +354,25 @@ const Agent = forwardRef { form.setFieldValue('features', value) + const { statement = '' } = value?.opening_statement || {} + onFeaturesLoad?.(value) + + const usedVars = [...new Set([...(statement?.matchAll(/\{\{(\w+)\}\}/g) ?? [])].map(m => m[1]))] + const variables = values?.variables + const validNames = new Set(variables.map(v => v.name)) + const invalid = usedVars.filter(v => !validNames.has(v)) + if (invalid.length > 0) { + const newVars = invalid.map((name, i) => ({ + index: variables.length + i, + name, + display_name: name, + type: 'text', + required: true, + max_length: 48, + })) + + form.setFieldValue('variables', [...variables, ...newVars]) + } } const modelLogo = useMemo(() => { return defaultModel?.name && getListLogoUrl(defaultModel.provider, defaultModel.logo as string) @@ -385,7 +404,8 @@ const Agent = forwardRef) => { return { @@ -86,6 +87,7 @@ const TestChat: FC = ({ const [message, setMessage] = useState(undefined) const [fileList, setFileList] = useState([]) const [features, setFeatures] = useState({} as FeaturesConfigForm) + const [variables, setVariables] = useState([]) const audioPollingRef = useRef>>(new Map()) const [audioStatusMap, setAudioStatusMap] = useState>({}) @@ -107,7 +109,7 @@ const TestChat: FC = ({ setFeatures(config?.features || {} as FeaturesConfigForm) - if (config?.features?.opening_statement?.statement && config?.features?.opening_statement?.statement.trim() !== '') { + if (config?.features?.opening_statement.enabled && config?.features?.opening_statement?.statement && config?.features?.opening_statement?.statement.trim() !== '') { setChatList(prev => [...prev, { role: 'assistant', created_at: Date.now(), @@ -144,6 +146,7 @@ const TestChat: FC = ({ } toolbarRef.current?.setVariables([...initVariables]) + setVariables([...initVariables]) } const addUserMessage = (message: string, files: any[]) => { @@ -560,6 +563,24 @@ const TestChat: FC = ({ }) } + useEffect(() => { + const opening_statement = features?.opening_statement + + if (opening_statement?.enabled && opening_statement?.statement && opening_statement?.statement.trim() !== '') { + const assistantMsg: ChatItem = { + role: 'assistant', + content: replaceVariables(opening_statement.statement, variables as any), + meta_data: { + suggested_questions: opening_statement?.suggested_questions + } + } + setChatList(prev => { + prev[0] = assistantMsg + return [...prev] + }) + } + }, [chatList.length, features?.opening_statement, variables]) + return (
= ({ ref={toolbarRef} features={features} onFilesChange={setFileList} + onVariablesChange={setVariables} /> diff --git a/web/src/views/Conversation/index.tsx b/web/src/views/Conversation/index.tsx index 6069f478..9507982a 100644 --- a/web/src/views/Conversation/index.tsx +++ b/web/src/views/Conversation/index.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-02-03 16:58:03 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-03-31 16:24:47 + * @Last Modified time: 2026-04-07 18:08:52 */ /** * Conversation Page @@ -178,7 +178,7 @@ const Conversation: FC = () => { })) }) } else { - if (features?.opening_statement?.statement) { + if (features?.opening_statement.enabled && features?.opening_statement?.statement) { setChatList([{ role: 'assistant', content: features.opening_statement.statement, diff --git a/web/src/views/Workflow/components/Chat/Chat.tsx b/web/src/views/Workflow/components/Chat/Chat.tsx index 8df11584..e1a0ad95 100644 --- a/web/src/views/Workflow/components/Chat/Chat.tsx +++ b/web/src/views/Workflow/components/Chat/Chat.tsx @@ -2,7 +2,7 @@ * @Author: ZhaoYing * @Date: 2026-02-06 21:10:56 * @Last Modified by: ZhaoYing - * @Last Modified time: 2026-04-07 17:06:02 + * @Last Modified time: 2026-04-07 18:07:38 */ /** * Workflow Chat Component @@ -68,8 +68,8 @@ const Chat = forwardRef { setOpen(true) - if (features?.opening_statement?.statement && features?.opening_statement?.statement.trim() !== '') { - setChatList(prev => [...prev, { + if (features?.opening_statement?.enabled && features?.opening_statement?.statement && features?.opening_statement?.statement.trim() !== '') { + setChatList([{ role: 'assistant', created_at: Date.now(), content: features?.opening_statement?.statement, @@ -431,8 +431,12 @@ const Chat = forwardRef [assistantMsg, ...prev.slice(1)]) + setChatList(prev => { + if (prev[0]?.role === 'assistant') { + prev[0] = assistantMsg + } + return [...prev] + }) } }, [chatList.length, features?.opening_statement, variables])