+
{isLoop ? t(`workflow.runtime.${key}_cycle_vars`) : t(`workflow.${key}`)}
@@ -186,55 +201,80 @@ const Runtime: FC<{ item: ChatItem; index: number;}> = ({
value={typeof vo.content === 'object' && vo.content?.[key] ? JSON.stringify(vo.content[key], null, 2) : '{}'}
needCopy={false}
showLineNumbers={true}
+ background="#EBEBEB"
/>
))}
-
+
)
}]}
/>
)
})}
-
+
}
return
}
+ /** Copy value to clipboard and show success message */
+ const handleCopy = (value: string) => {
+ copy(value)
+ message.success(t('common.copySuccess'))
+ }
+
return (
-
-
- {item.status === 'completed' ? : item.status === 'failed' ? : }
- {t('application.workflow')}
-
,
- className: styles.collapseItem,
- children: (
- detail
- ? (
-
- } onClick={() => setDetail(null)} className="rb:px-0! rb:text-[12px]!">
- {t('common.return')}
-
- {renderDetailChild(detail.subContent)}
-
- )
- : <>
- {item.error &&
-
-
-
- }
- {renderChild(item.subContent)}
- >
+
+
+
+ {item.status === 'completed'
+ ?
+ : item.status === 'failed'
+ ?
+ :
+ }
+ {t('application.workflow')}
+
+ { setExpanded(v => !v); setDetail(null) }}
+ >
+
+
+
+ {expanded && (
+ detail
+ ? (
+
+ } onClick={() => setDetail(null)} className="rb:px-0! rb:text-[12px]!">
+ {t('common.return')}
+
+ {renderDetailChild(detail.subContent)}
+
)
- }]}
- />
+ :
+ {item.error &&
+
+ }
+ {renderChild(item.subContent)}
+
+ )}
)
}
diff --git a/web/src/views/Workflow/components/Chat/chat.module.css b/web/src/views/Workflow/components/Chat/chat.module.css
index 46360d47..1754aa71 100644
--- a/web/src/views/Workflow/components/Chat/chat.module.css
+++ b/web/src/views/Workflow/components/Chat/chat.module.css
@@ -21,7 +21,9 @@
line-height: 16px;
}
.collapse-item:global(.ant-collapse-item>.ant-collapse-header) {
- padding: 8px 12px;
+ padding: 8px 16px 8px 10px;
+ display: flex;
+ align-items: center;
}
.collapse-item:global(.ant-collapse-item>.ant-collapse-header .ant-collapse-expand-icon) {
height: 16px;
@@ -45,4 +47,7 @@
}
.collapse-item :global(.ant-collapse .ant-collapse-content>.ant-collapse-content-box) {
padding: 0 4px 4px 4px;
+}
+:global(.ant-collapse-borderless)>.collapse-item:global(.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box) {
+ padding: 0 12px 12px 12px;
}
\ No newline at end of file
diff --git a/web/src/views/Workflow/components/Editor/Jinja2Editor.tsx b/web/src/views/Workflow/components/Editor/Jinja2Editor.tsx
index 0ee795ba..9a21a3b2 100644
--- a/web/src/views/Workflow/components/Editor/Jinja2Editor.tsx
+++ b/web/src/views/Workflow/components/Editor/Jinja2Editor.tsx
@@ -1,8 +1,8 @@
/*
* @Author: ZhaoYing
* @Date: 2026-04-02 15:15:36
- * @Last Modified by: ZhaoYing
- * @Last Modified time: 2026-04-02 15:15:36
+ * @Last Modified by: ZhaoYing
+ * @Last Modified time: 2026-04-07 14:48:00
*/
import { type FC, useEffect, useMemo } from 'react';
import { LexicalComposer } from '@lexical/react/LexicalComposer';
@@ -12,7 +12,7 @@ import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';
import { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary';
import { type Suggestion } from './plugin/AutocompletePlugin';
-import CharacterCountPlugin from './plugin/CharacterCountPlugin';
+import Jinjia2CharacterCountPlugin from './plugin/Jinjia2CharacterCountPlugin';
import Jinja2InitialValuePlugin from './plugin/Jinja2InitialValuePlugin';
import Jinja2AutocompletePlugin from './plugin/Jinja2AutocompletePlugin';
import Jinja2HighlightPlugin from './plugin/Jinja2HighlightPlugin';
@@ -89,7 +89,7 @@ export interface Jinja2EditorProps {
const Jinja2Editor: FC
= ({
placeholder = '请输入内容...',
- value = '',
+ value,
onChange,
options = [],
variant = 'borderless',
@@ -174,8 +174,8 @@ const Jinja2Editor: FC = ({
- {}} onChange={onChange} waitForInit />
-
+ {}} />
+
diff --git a/web/src/views/Workflow/components/Editor/index.tsx b/web/src/views/Workflow/components/Editor/index.tsx
index 5f6844df..a631c9a3 100644
--- a/web/src/views/Workflow/components/Editor/index.tsx
+++ b/web/src/views/Workflow/components/Editor/index.tsx
@@ -2,7 +2,7 @@
* @Author: ZhaoYing
* @Date: 2025-12-23 16:22:51
* @Last Modified by: ZhaoYing
- * @Last Modified time: 2026-04-03 20:44:16
+ * @Last Modified time: 2026-04-07 16:29:36
*/
import { type FC, useState, useMemo } from 'react';
import { LexicalComposer } from '@lexical/react/LexicalComposer';
@@ -57,7 +57,6 @@ const Editor: FC