From 05f5530232a4330167a302a896b74dfca5a2bfab Mon Sep 17 00:00:00 2001 From: gchust Date: Sat, 28 Jun 2025 20:46:50 +0800 Subject: [PATCH] fix: some i18n error --- .../client/src/flow/actions/refreshOnCompleteAction.tsx | 3 +-- .../src/flow/models/actions/BulkDeleteActionModel.tsx | 2 +- .../client/src/flow/models/actions/BulkEditActionModel.tsx | 2 +- .../client/src/flow/models/actions/DeleteActionModel.tsx | 2 +- .../client/src/flow/models/actions/FilterActionModel.tsx | 4 ++-- .../client/src/flow/models/actions/RefreshActionModel.tsx | 2 +- packages/core/client/src/flow/models/base/GridModel.tsx | 2 +- .../models/data-blocks/calendar/CalendarBlockModel.tsx | 4 ++-- .../src/flow/models/data-blocks/form/FormActionModel.tsx | 2 +- .../models/data-blocks/table/TableActionsColumnModel.tsx | 2 +- .../flow/models/data-blocks/tabulator/TabulatorModel.tsx | 2 +- .../filter-blocks/form/FilterFormSubmitActionModel.tsx | 2 +- .../settings/wrappers/contextual/DefaultSettingsIcon.tsx | 4 +++- .../wrappers/contextual/StepRequiredSettingsDialog.tsx | 2 +- .../settings/wrappers/contextual/StepSettingsDialog.tsx | 7 +++---- .../settings/wrappers/contextual/StepSettingsDrawer.tsx | 7 +++---- .../flow-engine/src/components/subModel/LazyDropdown.tsx | 2 +- packages/core/flow-engine/src/flowEngine.ts | 3 ++- packages/core/flow-engine/src/models/flowModel.tsx | 6 +++++- 19 files changed, 32 insertions(+), 28 deletions(-) diff --git a/packages/core/client/src/flow/actions/refreshOnCompleteAction.tsx b/packages/core/client/src/flow/actions/refreshOnCompleteAction.tsx index 2787345ba8..7f59df2744 100644 --- a/packages/core/client/src/flow/actions/refreshOnCompleteAction.tsx +++ b/packages/core/client/src/flow/actions/refreshOnCompleteAction.tsx @@ -27,8 +27,7 @@ export const refreshOnCompleteAction = { async handler(ctx, params) { if (params.enable) { await ctx.extra.currentResource.refresh(); - const t = ctx.globals.flowEngine.translate; - ctx.globals.message.success(t('Data refreshed successfully')); + ctx.globals.message.success(ctx.model.translate('Data refreshed successfully')); } }, }; diff --git a/packages/core/client/src/flow/models/actions/BulkDeleteActionModel.tsx b/packages/core/client/src/flow/models/actions/BulkDeleteActionModel.tsx index ab128120e6..30fbc491c1 100644 --- a/packages/core/client/src/flow/models/actions/BulkDeleteActionModel.tsx +++ b/packages/core/client/src/flow/models/actions/BulkDeleteActionModel.tsx @@ -35,7 +35,7 @@ BulkDeleteActionModel.registerFlow({ }, delete: { async handler(ctx, params) { - const t = ctx.globals.flowEngine.translate; + const t = ctx.model.translate; if (!ctx.shared?.currentBlockModel?.resource) { ctx.globals.message.error(t('No resource selected for deletion')); return; diff --git a/packages/core/client/src/flow/models/actions/BulkEditActionModel.tsx b/packages/core/client/src/flow/models/actions/BulkEditActionModel.tsx index 2310ec0a1f..924edf49f4 100644 --- a/packages/core/client/src/flow/models/actions/BulkEditActionModel.tsx +++ b/packages/core/client/src/flow/models/actions/BulkEditActionModel.tsx @@ -52,7 +52,7 @@ BulkEditActionModel.registerFlow({ }; }, async handler(ctx, params) { - const t = ctx.globals.flowEngine.translate; + const t = ctx.model.translate; if (!ctx.shared?.currentBlockModel?.resource) { ctx.globals.message.error(t('No resource selected for bulk edit')); return; diff --git a/packages/core/client/src/flow/models/actions/DeleteActionModel.tsx b/packages/core/client/src/flow/models/actions/DeleteActionModel.tsx index 52884fc745..79b3bb5315 100644 --- a/packages/core/client/src/flow/models/actions/DeleteActionModel.tsx +++ b/packages/core/client/src/flow/models/actions/DeleteActionModel.tsx @@ -35,7 +35,7 @@ DeleteActionModel.registerFlow({ }, delete: { async handler(ctx, params) { - const t = ctx.globals.flowEngine.translate; + const t = ctx.model.translate; if (!ctx.shared?.currentBlockModel?.resource) { ctx.globals.message.error(t('No resource selected for deletion')); return; diff --git a/packages/core/client/src/flow/models/actions/FilterActionModel.tsx b/packages/core/client/src/flow/models/actions/FilterActionModel.tsx index 9f981d2af3..0e82db2ee9 100644 --- a/packages/core/client/src/flow/models/actions/FilterActionModel.tsx +++ b/packages/core/client/src/flow/models/actions/FilterActionModel.tsx @@ -20,7 +20,7 @@ const FilterContent: FC<{ value: any }> = (props) => { const currentBlockModel = modelInstance.ctx.shared.currentBlockModel as DataBlockModel; const fields = currentBlockModel.collection.getFields(); const ignoreFieldsNames = modelInstance.props.ignoreFieldsNames || []; - const t = modelInstance.flowEngine.translate; + const t = modelInstance.translate; return ( <> @@ -44,7 +44,7 @@ export class FilterActionModel extends GlobalActionModel { defaultProps: any = { type: 'default', - children: tval('Filter'), + title: tval('Filter'), icon: 'FilterOutlined', filterValue: { $and: [] }, ignoreFieldsNames: [], diff --git a/packages/core/client/src/flow/models/actions/RefreshActionModel.tsx b/packages/core/client/src/flow/models/actions/RefreshActionModel.tsx index 20d5c62866..6ae3998a97 100644 --- a/packages/core/client/src/flow/models/actions/RefreshActionModel.tsx +++ b/packages/core/client/src/flow/models/actions/RefreshActionModel.tsx @@ -31,7 +31,7 @@ RefreshActionModel.registerFlow({ steps: { refresh: { async handler(ctx, params) { - const t = ctx.globals.flowEngine.translate; + const t = ctx.model.translate; const currentResource = ctx.shared?.currentBlockModel?.resource; if (!currentResource) { ctx.globals.message.error(t('No resource selected for refresh')); diff --git a/packages/core/client/src/flow/models/base/GridModel.tsx b/packages/core/client/src/flow/models/base/GridModel.tsx index 509e38e027..b49e6e81bf 100644 --- a/packages/core/client/src/flow/models/base/GridModel.tsx +++ b/packages/core/client/src/flow/models/base/GridModel.tsx @@ -69,7 +69,7 @@ export class GridModel extends FlowModel { } render() { - const t = this.flowEngine.translate.bind(this.flowEngine); + const t = this.translate; console.log('GridModel render', JSON.stringify(this.props.rows, null, 2), this.props.sizes); return (
diff --git a/packages/core/client/src/flow/models/data-blocks/calendar/CalendarBlockModel.tsx b/packages/core/client/src/flow/models/data-blocks/calendar/CalendarBlockModel.tsx index 3ed80e51d5..98f21ca3b7 100644 --- a/packages/core/client/src/flow/models/data-blocks/calendar/CalendarBlockModel.tsx +++ b/packages/core/client/src/flow/models/data-blocks/calendar/CalendarBlockModel.tsx @@ -65,7 +65,7 @@ CalendarBlockModel.registerFlow({ step1: { handler(ctx, params) { console.log('ctx.extra.event', ctx.extra.event); - const t = ctx.model.flowEngine.translate; + const t = ctx.model.translate; Modal.info({ title: t('Event selected'), content: ( @@ -96,7 +96,7 @@ CalendarBlockModel.registerFlow({ step1: { handler(ctx, params) { console.log('ctx.extra.event', ctx.extra.event); - const t = ctx.model.flowEngine.translate; + const t = ctx.model.translate; Modal.info({ title: t('Double click'), content: ( diff --git a/packages/core/client/src/flow/models/data-blocks/form/FormActionModel.tsx b/packages/core/client/src/flow/models/data-blocks/form/FormActionModel.tsx index a1d3f18301..0cb51df89a 100644 --- a/packages/core/client/src/flow/models/data-blocks/form/FormActionModel.tsx +++ b/packages/core/client/src/flow/models/data-blocks/form/FormActionModel.tsx @@ -17,7 +17,7 @@ export class FormActionModel extends ActionModel {} export class FormSubmitActionModel extends FormActionModel { defaultProps: ButtonProps = { - children: tval('Submit'), + title: tval('Submit'), type: 'primary', htmlType: 'submit', }; diff --git a/packages/core/client/src/flow/models/data-blocks/table/TableActionsColumnModel.tsx b/packages/core/client/src/flow/models/data-blocks/table/TableActionsColumnModel.tsx index d74785752d..31a1553f3c 100644 --- a/packages/core/client/src/flow/models/data-blocks/table/TableActionsColumnModel.tsx +++ b/packages/core/client/src/flow/models/data-blocks/table/TableActionsColumnModel.tsx @@ -64,7 +64,7 @@ export class TableActionsColumnModel extends FlowModel { }, ]} > - {this.props.title || tval('Actions')} + {this.props.title || this.flowEngine.translate('Actions')} ), render: this.render(), diff --git a/packages/core/client/src/flow/models/data-blocks/tabulator/TabulatorModel.tsx b/packages/core/client/src/flow/models/data-blocks/tabulator/TabulatorModel.tsx index bdcf93ee46..224eee78a1 100644 --- a/packages/core/client/src/flow/models/data-blocks/tabulator/TabulatorModel.tsx +++ b/packages/core/client/src/flow/models/data-blocks/tabulator/TabulatorModel.tsx @@ -261,7 +261,7 @@ export class TabulatorModel extends DataBlockModel { ))} - +
diff --git a/packages/core/client/src/flow/models/filter-blocks/form/FilterFormSubmitActionModel.tsx b/packages/core/client/src/flow/models/filter-blocks/form/FilterFormSubmitActionModel.tsx index 38a5feaca4..9bb35c94d1 100644 --- a/packages/core/client/src/flow/models/filter-blocks/form/FilterFormSubmitActionModel.tsx +++ b/packages/core/client/src/flow/models/filter-blocks/form/FilterFormSubmitActionModel.tsx @@ -16,7 +16,7 @@ import { FilterFormActionModel } from './FilterFormActionModel'; export class FilterFormSubmitActionModel extends FilterFormActionModel { defaultProps: ButtonProps = { - children: tval('Filter'), + title: tval('Filter'), type: 'primary', }; } diff --git a/packages/core/flow-engine/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx b/packages/core/flow-engine/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx index 84a62a5420..bb08660cb6 100644 --- a/packages/core/flow-engine/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +++ b/packages/core/flow-engine/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx @@ -233,10 +233,12 @@ export const DefaultSettingsIcon: React.FC = ({ // 如果step使用了action,检查action是否有uiSchema let hasActionUiSchema = false; + let stepTitle = actionStep.title; if (actionStep.use) { try { const action = targetModel.flowEngine?.getAction?.(actionStep.use); hasActionUiSchema = action && action.uiSchema != null; + stepTitle = stepTitle || action.title; } catch (error) { console.warn(t('Failed to get action {{action}}', { action: actionStep.use }), ':', error); } @@ -255,7 +257,7 @@ export const DefaultSettingsIcon: React.FC = ({ stepKey, step: actionStep, uiSchema: mergedUiSchema, - title: t(actionStep.title) || stepKey, + title: t(stepTitle) || stepKey, modelKey, // 添加模型标识 }; }) diff --git a/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepRequiredSettingsDialog.tsx b/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepRequiredSettingsDialog.tsx index 4a2d518e5b..c30e9d0da3 100644 --- a/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepRequiredSettingsDialog.tsx +++ b/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepRequiredSettingsDialog.tsx @@ -306,7 +306,7 @@ const openRequiredParamsStepFormDialog = async ({ // 创建FormDialog const formDialog = FormDialog( { - title: dialogTitle, + title: dialogTitle || t('Step Parameter Configuration'), width: dialogWidth, footer: null, // 移除默认的底部按钮,使用自定义的导航按钮 destroyOnClose: true, diff --git a/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx b/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx index 4fef33263f..8509ecba9c 100644 --- a/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +++ b/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx @@ -53,9 +53,7 @@ const openStepSettingsDialog = async ({ throw new Error(t('Step with key {{stepKey}} not found', { stepKey })); } - const title = - dialogTitle || - (step ? `${step.title || stepKey} - ${t('Configuration')}` : `${t('Step Configuration')} - ${stepKey}`); + let title = step.title; // 创建参数解析上下文 const paramsContext = { @@ -76,6 +74,7 @@ const openStepSettingsDialog = async ({ actionUiSchema = action.uiSchema; } actionDefaultParams = action.defaultParams || {}; + title = title || action.title; } // 解析动态 uiSchema @@ -132,7 +131,7 @@ const openStepSettingsDialog = async ({ // 创建FormDialog const formDialog = FormDialog( { - title, + title: dialogTitle || `${t(title)} - ${t('Configuration')}`, width: dialogWidth, okText: t('OK'), cancelText: t('Cancel'), diff --git a/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepSettingsDrawer.tsx b/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepSettingsDrawer.tsx index 1cc47a48f9..f0c7be7631 100644 --- a/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepSettingsDrawer.tsx +++ b/packages/core/flow-engine/src/components/settings/wrappers/contextual/StepSettingsDrawer.tsx @@ -54,9 +54,7 @@ const openStepSettingsDrawer = async ({ throw new Error(t('Step with key {{stepKey}} not found', { stepKey })); } - const title = - drawerTitle || - (step ? `${step.title || stepKey} - ${t('Configuration')}` : `${t('Step Configuration')} - ${stepKey}`); + let title = step.title; // 创建参数解析上下文 const paramsContext = { @@ -76,6 +74,7 @@ const openStepSettingsDrawer = async ({ actionUiSchema = action.uiSchema; } actionDefaultParams = action.defaultParams || {}; + title = title || action.title; } // 解析动态 uiSchema @@ -240,7 +239,7 @@ const openStepSettingsDrawer = async ({ // 打开抽屉 const drawerRef = drawer.open({ - title, + title: drawerTitle || `${t(title)} - ${t('Configuration')}`, width: drawerWidth, content: , onClose: () => { diff --git a/packages/core/flow-engine/src/components/subModel/LazyDropdown.tsx b/packages/core/flow-engine/src/components/subModel/LazyDropdown.tsx index 707d9bca24..49fb6e0510 100644 --- a/packages/core/flow-engine/src/components/subModel/LazyDropdown.tsx +++ b/packages/core/flow-engine/src/components/subModel/LazyDropdown.tsx @@ -84,7 +84,7 @@ const LazyDropdown: React.FC & { menu: LazyDropdownM const dropdownMaxHeight = useNiceDropdownMaxHeight([menuVisible]); const [isSearching, setIsSearching] = useState(false); const searchTimeoutRef = useRef(null); - const t = model.flowEngine.translate.bind(model.flowEngine); + const t = model.translate; // 清理定时器,避免内存泄露 useEffect(() => { diff --git a/packages/core/flow-engine/src/flowEngine.ts b/packages/core/flow-engine/src/flowEngine.ts index 303b6e0759..f8195bbd14 100644 --- a/packages/core/flow-engine/src/flowEngine.ts +++ b/packages/core/flow-engine/src/flowEngine.ts @@ -14,6 +14,7 @@ import { ActionDefinition, ActionOptions, CreateModelOptions, + FlowContext, FlowDefinition, IFlowModelRepository, ModelConstructor, @@ -37,7 +38,7 @@ export class FlowEngine { private modelInstances: Map = new Map(); /** @public Stores flow settings including components and scopes for formily settings. */ public flowSettings: FlowSettings = new FlowSettings(); - context: Record = {}; + context: FlowContext['globals'] = {} as FlowContext['globals']; private modelRepository: IFlowModelRepository | null = null; private _applyFlowCache = new Map(); diff --git a/packages/core/flow-engine/src/models/flowModel.tsx b/packages/core/flow-engine/src/models/flowModel.tsx index c508825aee..be3cef9db8 100644 --- a/packages/core/flow-engine/src/models/flowModel.tsx +++ b/packages/core/flow-engine/src/models/flowModel.tsx @@ -397,7 +397,7 @@ export class FlowModel = { exit: () => { throw new FlowExitException(flowKey, this.uid); @@ -902,6 +902,10 @@ export class FlowModel) { this._sharedContext = { ...this._sharedContext, ...ctx }; }