feat(flow): 添加动态API路由支持通过流程code执行

refactor(engine): 优化节点执行耗时记录
fix(db): 修正结果模式获取逻辑忽略connection.mode
style(i18n): 统一节点描述和输出模式选项的国际化
test(flow): 新增测试流程定义文件
refactor(react): 简化开发环境日志降噪处理
This commit is contained in:
2025-09-20 00:12:40 +08:00
parent 62789fce42
commit d8116ff8dc
13 changed files with 162 additions and 63 deletions

View File

@ -5,7 +5,7 @@
import React from 'react';
import { FlowNodeRegistry } from '@flowgram.ai/free-layout-editor';
import { FlowNodeRegistry, I18n } from '@flowgram.ai/free-layout-editor';
import { useIsSidebar, useNodeRenderContext } from '../../hooks';
import { FormTitleDescription, FormWrapper } from './styles';
@ -21,7 +21,11 @@ export function FormContent(props: { children?: React.ReactNode }) {
return (
<FormWrapper>
<>
{isSidebar && <FormTitleDescription>{registry.info?.description}</FormTitleDescription>}
{isSidebar && (
<FormTitleDescription>
{I18n.t((registry.info?.description as any) || '')}
</FormTitleDescription>
)}
{(expanded || isSidebar) && props.children}
</>
</FormWrapper>

View File

@ -39,10 +39,18 @@ export function TitleInput(props: {
onBlur={() => updateTitleEdit(false)}
/>
) : (
// 对默认的 Start/End 标题进行按需本地化显示
<Text ellipsis={{ showTooltip: true }}>{
value === 'Start' || value === 'End' ? I18n.t(value as any) : (value as any)
}</Text>
// 对默认的 Start/End 标题进行按需本地化显示(大小写与首尾空白规整)
<Text ellipsis={{ showTooltip: true }}>
{(() => {
const raw = (value ?? '') as string;
const norm = raw.trim().toLowerCase();
if (norm === 'start' || norm === 'end') {
const key = norm === 'start' ? 'Start' : 'End';
return I18n.t(key as any);
}
return value as any;
})()}
</Text>
)}
<Feedback errors={fieldState?.errors} />
</div>

View File

@ -415,9 +415,20 @@ export function useEditorProps(
'SQL': 'SQL',
'Params': '参数',
'Output Key': '输出键',
},
'en-US': {},
},
// ==== DB Node: Output Mode and options ====
'Output Mode': '输出模式',
'Rows': '行数组',
'First Row': '首行对象',
'Affected Rows': '影响行数',
},
'en-US': {
// ==== DB Node: Output Mode and options ====
'Output Mode': 'Output Mode',
'Rows': 'Rows',
'First Row': 'First Row',
'Affected Rows': 'Affected Rows',
},
},
},
plugins: () => [
/**

View File

@ -186,9 +186,9 @@ export const FormRender = ({ form }: FormRenderProps<any>) => {
onChange={(v) => field.onChange(v as string)}
style={{ width: 200 }}
optionList={[
{ label: 'rows', value: 'rows' },
{ label: 'first', value: 'first' },
{ label: 'affected', value: 'affected' },
{ label: I18n.t('Rows'), value: 'rows' },
{ label: I18n.t('First Row'), value: 'first' },
{ label: I18n.t('Affected Rows'), value: 'affected' },
]}
/>
)}

View File

@ -24,7 +24,7 @@ export const EndNodeRegistry: FlowNodeRegistry = {
info: {
icon: iconEnd,
description:
I18n.t('The final node of the workflow, used to return the result information after the workflow is run.'),
I18n.t('流程结束节点,用于返回流程运行后的结果信息。'),
},
/**
* Render node via formMeta

View File

@ -25,7 +25,7 @@ export const StartNodeRegistry: FlowNodeRegistry = {
info: {
icon: iconStart,
description:
I18n.t('The starting node of the workflow, used to set the information needed to initiate the workflow.'),
I18n.t('流程开始节点,用于设置启动流程所需的信息。'),
},
/**
* Render node via formMeta