From 289164969728eda7aac51fcede2a80df50a6156b Mon Sep 17 00:00:00 2001 From: Zeke Zhang <958414905@qq.com> Date: Sat, 14 Feb 2026 15:43:12 +0800 Subject: [PATCH] fix(ui-templates): share approval templates (#8648) --- .../models/SubModelTemplateImporterModel.tsx | 6 ++++- .../SubModelTemplateImporterModel.test.ts | 23 ++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/packages/plugins/@nocobase/plugin-ui-templates/src/client/models/SubModelTemplateImporterModel.tsx b/packages/plugins/@nocobase/plugin-ui-templates/src/client/models/SubModelTemplateImporterModel.tsx index 29037e66a88..a4ab4655326 100644 --- a/packages/plugins/@nocobase/plugin-ui-templates/src/client/models/SubModelTemplateImporterModel.tsx +++ b/packages/plugins/@nocobase/plugin-ui-templates/src/client/models/SubModelTemplateImporterModel.tsx @@ -132,11 +132,15 @@ function isModelInsideReferenceBlock(model: FlowModel | undefined): boolean { return model.parent?.use === 'ReferenceBlockModel'; } -function resolveExpectedRootUse(blockModel: FlowModel | undefined): string | string[] { +export function resolveExpectedRootUse(blockModel: FlowModel | undefined): string | string[] { // Create/Edit:允许互通 if (blockModel?.use === 'CreateFormModel' || blockModel?.use === 'EditFormModel') { return ['CreateFormModel', 'EditFormModel']; } + // 审批发起/处理表单:允许互通(最小改动方案) + if (blockModel?.use === 'ApplyFormModel' || blockModel?.use === 'ProcessFormModel') { + return ['ApplyFormModel', 'ProcessFormModel']; + } return blockModel?.use || ''; } diff --git a/packages/plugins/@nocobase/plugin-ui-templates/src/client/models/__tests__/SubModelTemplateImporterModel.test.ts b/packages/plugins/@nocobase/plugin-ui-templates/src/client/models/__tests__/SubModelTemplateImporterModel.test.ts index f2acb16982d..853c1d3d0b8 100644 --- a/packages/plugins/@nocobase/plugin-ui-templates/src/client/models/__tests__/SubModelTemplateImporterModel.test.ts +++ b/packages/plugins/@nocobase/plugin-ui-templates/src/client/models/__tests__/SubModelTemplateImporterModel.test.ts @@ -9,7 +9,28 @@ import { FlowEngine, FlowModel } from '@nocobase/flow-engine'; import { describe, it, expect, vi } from 'vitest'; -import { SubModelTemplateImporterModel } from '../SubModelTemplateImporterModel'; +import { SubModelTemplateImporterModel, resolveExpectedRootUse } from '../SubModelTemplateImporterModel'; + +describe('resolveExpectedRootUse', () => { + it('allows ApplyFormModel and ProcessFormModel to share templates', () => { + expect(resolveExpectedRootUse({ use: 'ApplyFormModel' } as FlowModel)).toEqual([ + 'ApplyFormModel', + 'ProcessFormModel', + ]); + expect(resolveExpectedRootUse({ use: 'ProcessFormModel' } as FlowModel)).toEqual([ + 'ApplyFormModel', + 'ProcessFormModel', + ]); + }); + + it('keeps CreateFormModel and EditFormModel sharing behavior', () => { + expect(resolveExpectedRootUse({ use: 'CreateFormModel' } as FlowModel)).toEqual([ + 'CreateFormModel', + 'EditFormModel', + ]); + expect(resolveExpectedRootUse({ use: 'EditFormModel' } as FlowModel)).toEqual(['CreateFormModel', 'EditFormModel']); + }); +}); describe('SubModelTemplateImporterModel', () => { it('stores derived targetUid into stepParams in beforeParamsSave', async () => {