diff --git a/packages/command-services/lib/navigation.service.ts b/packages/command-services/lib/navigation.service.ts index de7c565fc88385407b7961338633d4fb1035fb01..4d88e3b2ea704017d2bf52fd97c97f87ac4dc455 100644 --- a/packages/command-services/lib/navigation.service.ts +++ b/packages/command-services/lib/navigation.service.ts @@ -1,6 +1,6 @@ import { RuntimeFrameworkService } from './rtf.service'; import { QuerystringService } from './querystring.service'; -import { ViewModel, Injector, ViewModelState, CommandContext, Command } from '@farris/devkit-vue'; +import { ViewModel, Injector, ViewModelState, CommandContext, Command, HttpClient } from '@farris/devkit-vue'; import { AppType, BuildFrameworkTabIdOptions } from './types'; import lodash from 'lodash'; import { NavigationEventService } from './navigation-event.service'; @@ -127,34 +127,37 @@ export class NavigationService { if (destructuring === true) { queryStringParams = this.buildParam(params); } - // const paramsMap = this.buildParamMap(params); queryStringParams.set('dim1', dim1 ? dim1 : 'public'); queryStringParams.set('dim2', dim2 ? dim2 : 'public'); - queryStringParams.set('metadataId', metadataId); + queryStringParams.set('isRtc', '1'); queryStringParams.set('isRootMetadata', 'true'); - const options: any = { - tabId, - funcId, - appType: AppType.Menu, - queryStringParams: queryStringParams, - entityParams: queryStringParams, - appId: undefined, - appEntrance: undefined, - isReload: false, - tabName: tabName || null - }; - // 启用数据刷新参数为true或者没有定义,则按刷新处理 - // 没有传递该参数或该参数为空,则认为按照之前的逻辑处理,默认刷新 - // null false "false" "true" undefined - enableRefresh = this.convertToBoolean(enableRefresh, true); - if (enableRefresh) { - const currentTabId = this.querystrings.tabId || this.querystrings.funcId || this.querystrings.appId; - const frameworkTabId = this.buildFrameworkTabId({ funcId, tabId }); - this.navigationHistoryService.add(currentTabId, frameworkTabId); - } - this.runtimeFrameworkService.openMenu(options); + this.resolveBizMetadataId(metadataId, dim1, dim2).then((response) => { + const bizMetadataId = response.metadataId || metadataId; + queryStringParams.set('metadataId', bizMetadataId); + const options: any = { + tabId, + funcId, + appType: AppType.Menu, + queryStringParams: queryStringParams, + entityParams: queryStringParams, + appId: undefined, + appEntrance: undefined, + isReload: false, + tabName: tabName || null + }; + // 启用数据刷新参数为true或者没有定义,则按刷新处理 + // 没有传递该参数或该参数为空,则认为按照之前的逻辑处理,默认刷新 + // null false "false" "true" undefined + enableRefresh = this.convertToBoolean(enableRefresh, true); + if (enableRefresh) { + const currentTabId = this.querystrings.tabId || this.querystrings.funcId || this.querystrings.appId; + const frameworkTabId = this.buildFrameworkTabId({ funcId, tabId }); + this.navigationHistoryService.add(currentTabId, frameworkTabId); + } + this.runtimeFrameworkService.openMenu(options); + }); } /** * 打开应用 @@ -251,6 +254,18 @@ export class NavigationService { public addEventListener(eventType: string, handler: (options: any) => any): string | null { return this.navigationEventService.addEventListener(eventType, handler); } + private resolveBizMetadataId(baseMetadataId: string, dim1: string, dim2: string) { + if (!dim1) { + dim1 = 'public'; + } + if (!dim2) { + dim2 = 'public'; + } + const httpClient: HttpClient = this.injector.get(HttpClient); + return httpClient.get(`/api/runtime/bcc/v1.0/template/suCode/${baseMetadataId}`, { responseType: 'text' }).then((suCode: string) => { + return httpClient.post(`/api/${suCode}/v1.0/template/check/beforeNavigate`, { dim1, dim2, metadataId: baseMetadataId, isDynamic: true, isRootMetadata: true }, {}); + }); + } private buildFrameworkTabId(options: BuildFrameworkTabIdOptions): string { const { appId = '', appEntrance = '', funcId = '', tabId } = options; if (appId && appEntrance) { diff --git a/packages/renderer/src/app.vue b/packages/renderer/src/app.vue index 31d07562b240f5380023c078ab8fe33269f633b0..bdc384fae8b4fd9237963d124f15ea6f2b1d01b2 100644 --- a/packages/renderer/src/app.vue +++ b/packages/renderer/src/app.vue @@ -1,40 +1,52 @@