From 88ed97bc9d5249f83f893f3991539a7956bcd92b Mon Sep 17 00:00:00 2001 From: Archer <545436317@qq.com> Date: Mon, 5 Jan 2026 12:05:13 +0800 Subject: [PATCH] fix: workflow batch repeat run (#6186) * stop design doc * remove invalid doc * perf: auto fit * fix: icon * perf: icon * perf: icon * perf: icon * perf: icon * perf: variable disabled input ui * fix: workflow batch run * fix: tsc --- document/content/docs/upgrading/4-14/4145.mdx | 12 +++--- document/data/doc-last-modified.json | 2 +- .../service/core/workflow/dispatch/index.ts | 25 +++++------ .../common/Textarea/PromptEditor/Editor.tsx | 22 ++++++++-- .../Textarea/PromptEditor/index.module.scss | 23 ++++++++++ .../common/Textarea/PromptEditor/index.tsx | 43 +++++++++++++------ .../PromptEditor/plugins/EditablePlugin.tsx | 12 ++++++ .../plugins/FocusPlugin/index.tsx | 22 +++++++--- .../core/app/formRender/LabelAndForm.tsx | 4 +- .../components/core/app/formRender/index.tsx | 16 +++---- .../components/core/app/formRender/type.d.ts | 2 +- .../ChatBox/components/VariableInputForm.tsx | 10 ++--- 12 files changed, 140 insertions(+), 53 deletions(-) create mode 100644 packages/web/components/common/Textarea/PromptEditor/plugins/EditablePlugin.tsx diff --git a/document/content/docs/upgrading/4-14/4145.mdx b/document/content/docs/upgrading/4-14/4145.mdx index 7f35eebb98..a50158082e 100644 --- a/document/content/docs/upgrading/4-14/4145.mdx +++ b/document/content/docs/upgrading/4-14/4145.mdx @@ -17,14 +17,16 @@ description: 'FastGPT V4.14.5 更新说明' 1. 优化获取 redis 所有 key 的逻辑,避免大量获取时导致阻塞。 2. MongoDB, Redis 和 MQ 的重连逻辑优化。 +3. 变量输入框禁用状态可复制。 ## 🐛 修复 -1. MCP 工具创建时,使用自定义鉴权头会报错。 -2. 获取对话日志列表时,如果用户头像为空,会抛错。 -3. chatAgent 未开启问题优化时,前端 UI 显示开启。 -4. 加载默认模型时,maxTokens 字段未赋值,导致模型最大响应值配置为空。 -5. S3 文件清理队列因网络稳定问题出现阻塞,导致删除任务不再执行。 +1. 重要 - 工作流并行合并后,可能导致重复运行问题。 +2. MCP 工具创建时,使用自定义鉴权头会报错。 +3. 获取对话日志列表时,如果用户头像为空,会抛错。 +4. chatAgent 未开启问题优化时,前端 UI 显示开启。 +5. 加载默认模型时,maxTokens 字段未赋值,导致模型最大响应值配置为空。 +6. S3 文件清理队列因网络稳定问题出现阻塞,导致删除任务不再执行。 ## 插件 diff --git a/document/data/doc-last-modified.json b/document/data/doc-last-modified.json index 1894012cf8..f96d2b849c 100644 --- a/document/data/doc-last-modified.json +++ b/document/data/doc-last-modified.json @@ -120,7 +120,7 @@ "document/content/docs/upgrading/4-14/4142.mdx": "2025-11-18T19:27:14+08:00", "document/content/docs/upgrading/4-14/4143.mdx": "2025-11-26T20:52:05+08:00", "document/content/docs/upgrading/4-14/4144.mdx": "2025-12-16T14:56:04+08:00", - "document/content/docs/upgrading/4-14/4145.mdx": "2025-12-30T11:31:47+08:00", + "document/content/docs/upgrading/4-14/4145.mdx": "2026-01-05T11:19:08+08:00", "document/content/docs/upgrading/4-8/40.mdx": "2025-08-02T19:38:37+08:00", "document/content/docs/upgrading/4-8/41.mdx": "2025-08-02T19:38:37+08:00", "document/content/docs/upgrading/4-8/42.mdx": "2025-08-02T19:38:37+08:00", diff --git a/packages/service/core/workflow/dispatch/index.ts b/packages/service/core/workflow/dispatch/index.ts index b6be94f1c5..0a99c48b25 100644 --- a/packages/service/core/workflow/dispatch/index.ts +++ b/packages/service/core/workflow/dispatch/index.ts @@ -387,7 +387,7 @@ export const runWorkflow = async (data: RunWorkflowProps): Promise { if (status === 'run') { + // All source edges status to waiting + runtimeEdges.forEach((item) => { + if (item.target === node.nodeId) { + item.status = 'waiting'; + } + }); + const blanceCheckResult = await this.checkTeamBlance(); if (blanceCheckResult) { return { @@ -890,13 +898,6 @@ export const runWorkflow = async (data: RunWorkflowProps): Promise { - if (item.target === node.nodeId) { - item.status = 'waiting'; - } - }); - addLog.debug(`[dispatchWorkFlow] nodeRunWithActive: ${node.name}`); return this.nodeRunWithActive(node); } diff --git a/packages/web/components/common/Textarea/PromptEditor/Editor.tsx b/packages/web/components/common/Textarea/PromptEditor/Editor.tsx index 40c8b4c5be..a0e3f8824e 100644 --- a/packages/web/components/common/Textarea/PromptEditor/Editor.tsx +++ b/packages/web/components/common/Textarea/PromptEditor/Editor.tsx @@ -43,6 +43,7 @@ import MarkdownPlugin from './plugins/MarkdownPlugin'; import MyIcon from '../../Icon'; import ListExitPlugin from './plugins/ListExitPlugin'; import KeyDownPlugin from './plugins/KeyDownPlugin'; +import EditablePlugin from './plugins/EditablePlugin'; const Placeholder = ({ children, padding }: { children: React.ReactNode; padding: string }) => ( void; ExtensionPopover?: ((e: { onChangeText: (text: string) => void; @@ -105,6 +107,7 @@ export default function Editor({ placeholderPadding = '12px 14px', bg = 'white', isInvalid, + isDisabled = false, onKeyDown, ExtensionPopover, boxStyle @@ -179,7 +182,13 @@ export default function Editor({ - + + {variableLabels.length > 0 && ( <> diff --git a/packages/web/components/common/Textarea/PromptEditor/index.module.scss b/packages/web/components/common/Textarea/PromptEditor/index.module.scss index 0d2eaf3a5d..7cc49b8bda 100644 --- a/packages/web/components/common/Textarea/PromptEditor/index.module.scss +++ b/packages/web/components/common/Textarea/PromptEditor/index.module.scss @@ -72,6 +72,29 @@ box-shadow: 0px 0px 0px 2.4px rgba(244, 69, 46, 0.15); } +.contentEditable_disabled { + position: relative; + height: 100%; + width: 100%; + border: 1px solid rgb(232, 235, 240); + border-radius: var(--chakra-radii-sm); + padding: 8px 12px; + + font-size: var(--chakra-fontSizes-sm); + overflow-y: auto; + + &::-webkit-scrollbar { + color: var(--chakra-colors-myGray-100); + } + &::-webkit-scrollbar-thumb { + background-color: var(--chakra-colors-myGray-200) !important; + cursor: pointer; + } + &::-webkit-scrollbar-thumb:hover { + background-color: var(--chakra-colors-myGray-250) !important; + } +} + .variable { color: var(--chakra-colors-primary-600); padding: 0 2px; diff --git a/packages/web/components/common/Textarea/PromptEditor/index.tsx b/packages/web/components/common/Textarea/PromptEditor/index.tsx index d60028f55a..5a87a7ecc0 100644 --- a/packages/web/components/common/Textarea/PromptEditor/index.tsx +++ b/packages/web/components/common/Textarea/PromptEditor/index.tsx @@ -68,6 +68,7 @@ const PromptEditor = ({ onChangeText={onChange} onBlur={onBlurInput} onKeyDown={onKeyDown} + isDisabled={isDisabled} /> {isDisabled && ( )} @@ -92,17 +94,34 @@ const PromptEditor = ({ w={'full'} > - + + + {isDisabled && ( + + )} +