diff --git a/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/__tests__/layoutRegistration.strict.test.ts b/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/__tests__/layoutRegistration.strict.test.ts index d8548a48e67..2bb9736c1d6 100644 --- a/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/__tests__/layoutRegistration.strict.test.ts +++ b/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/__tests__/layoutRegistration.strict.test.ts @@ -89,12 +89,26 @@ describe('Multi Portal runtime registration failures', () => { expect(layoutManager.registerLayout).not.toHaveBeenCalled(); }); - it('registers only no-code portals and skips every other portal type', () => { + it('treats empty portal types as no-code portals', () => { + const layoutManager = createLayoutManager(); + const emptyTypePortals = [ + { ...portal, uid: 'missing-type-portal', portalName: 'missingType', portalType: undefined }, + { ...portal, uid: 'null-type-portal', portalName: 'nullType', portalType: null }, + { ...portal, uid: 'empty-type-portal', portalName: 'emptyType', portalType: '' }, + ]; + + expect(registerMultiPortalRecords(layoutManager, emptyTypePortals)).toEqual([ + 'missing-type-portal', + 'null-type-portal', + 'empty-type-portal', + ]); + expect(layoutManager.registerLayout).toHaveBeenCalledTimes(3); + }); + + it('skips ai and unknown non-empty portal types', () => { const layoutManager = createLayoutManager(); const skippedPortals = [ { ...portal, uid: 'ai-portal', portalName: 'ai', portalType: 'ai' }, - { ...portal, uid: 'missing-type-portal', portalName: 'missingType', portalType: undefined }, - { ...portal, uid: 'empty-type-portal', portalName: 'emptyType', portalType: '' }, { ...portal, uid: 'unknown-type-portal', portalName: 'unknownType', portalType: 'custom' }, ]; diff --git a/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/layoutRegistration.ts b/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/layoutRegistration.ts index d1d5acb63f9..99fa10d0d29 100644 --- a/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/layoutRegistration.ts +++ b/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/layoutRegistration.ts @@ -16,7 +16,7 @@ export { getMultiPortalRouteScopeCacheKey }; export type MultiPortalRuntimeRecord = { uid: string; title?: string; - portalType?: string; + portalType?: string | null; portalName: string; routePath: string; authCheck: boolean; @@ -74,7 +74,7 @@ const layoutModeMobileRegisterOptions = { } satisfies Pick; function isRuntimePortal(record: MultiPortalRuntimeRecord) { - return record.portalType === 'no-code'; + return (record.portalType || 'no-code') === 'no-code'; } export function toMultiPortalLayoutRegisterOptions(record: MultiPortalRuntimeRecord): LayoutRegisterOptions | null {