diff --git a/src/control/app-menu/app-menu.controller.ts b/src/control/app-menu/app-menu.controller.ts index acedb786b64dff4b0ac4542a90c124db97e5ce15..650e1449d0f6a17846544ce1e9dee51f70387ef0 100644 --- a/src/control/app-menu/app-menu.controller.ts +++ b/src/control/app-menu/app-menu.controller.ts @@ -33,6 +33,17 @@ export class AppMenuController this.state.menuItemsState = {}; } + /** + * 视图层级 + * + * @readonly + * @type {(number | undefined)} + * @memberof AppMenuController + */ + get routeDepth(): number | undefined { + return this.view.modal.routeDepth; + } + protected async doCreated(): Promise { await super.doCreated(); @@ -70,10 +81,18 @@ export class AppMenuController throw new RuntimeModelError(menuItem, '没有配置应用功能'); } + const tempContext = this.context.clone(); + + if (this.routeDepth) { + Object.assign(tempContext, { + toRouteDepth: this.routeDepth + 1, + }); + } + await ibiz.commands.execute( AppFuncCommand.TAG, menuItem.appFuncId, - this.context, + tempContext, this.params, ); } diff --git a/src/control/exp-bar/tree-exp-bar/tree-exp-bar.controller.ts b/src/control/exp-bar/tree-exp-bar/tree-exp-bar.controller.ts index 7eb5c40230da2d48fa0dce5d83e92ec71e9959cc..66e7af4e8667d8c5490a3f375d7cba0ad81aa391 100644 --- a/src/control/exp-bar/tree-exp-bar/tree-exp-bar.controller.ts +++ b/src/control/exp-bar/tree-exp-bar/tree-exp-bar.controller.ts @@ -59,7 +59,7 @@ export class TreeExpBarController item.deData ? item.deData : item, ]); this.navPos?.openView({ - key: item.srfkey as string, + key: item.srfkey || item.id, context, params, viewModel, diff --git a/src/panel-component/nav-pos-index/nav-pos-index.controller.ts b/src/panel-component/nav-pos-index/nav-pos-index.controller.ts index ee6051361ab1a303e4f8815c193dc83e44112a14..4d31207e2688b831ec475ac56c21f74ddc004f1a 100644 --- a/src/panel-component/nav-pos-index/nav-pos-index.controller.ts +++ b/src/panel-component/nav-pos-index/nav-pos-index.controller.ts @@ -269,8 +269,14 @@ export class NavPosIndexController extends PanelItemController { } else { // 没有上一个视图时,跳转到当前层级的空白页面 const route = this.router?.currentRoute!.value!; - const { appContext, view1 } = route.params; - const indexPath = `/${appContext}/${view1}/${ibiz.env.routePlaceholder}`; + const { appContext } = route.params; + let indexPath = `/${appContext}`; + // 处理首页多层嵌套跳转当前首页空白页 + for (let index = 1; index <= this.routeDepth!; index++) { + indexPath += `/${route.params[`view${index}`]}/${ + ibiz.env.routePlaceholder + }`; + } this.router!.push(indexPath); } } diff --git a/src/panel-component/nav-pos-index/nav-pos-index.tsx b/src/panel-component/nav-pos-index/nav-pos-index.tsx index 6e2ae15edbbcfdfea48dafc0ba32201170f613c2..1adc1af90e9b3ba5301118db4438dfb2fdf7aee4 100644 --- a/src/panel-component/nav-pos-index/nav-pos-index.tsx +++ b/src/panel-component/nav-pos-index/nav-pos-index.tsx @@ -49,25 +49,25 @@ export const NavPosIndex = defineComponent({ } } - return { ns, onViewCreated }; + return { ns, onViewCreated, c }; }, render() { - const { state, viewModals } = this.controller; + const { state, viewModals } = this.c; + const { currentKey, cacheKeys } = state; + return (
- {this.controller.routeDepth ? ( + {this.c.routeDepth ? ( {({ Component }: { Component: string }) => { return ( - Component && ( - - - - ) + + {Component && } + ); }} diff --git a/src/panel-component/nav-pos/nav-pos.tsx b/src/panel-component/nav-pos/nav-pos.tsx index 92538056ac1ab54d951a5d217482d9d8c69ef976..a3e765876ca1bae8cceae7a6a65725d31a8872a9 100644 --- a/src/panel-component/nav-pos/nav-pos.tsx +++ b/src/panel-component/nav-pos/nav-pos.tsx @@ -29,7 +29,7 @@ export const NavPos = defineComponent({ const route = useRoute(); c.setRouter(router); - + if (c.routeDepth) { watch( () => route.fullPath, @@ -54,39 +54,35 @@ export const NavPos = defineComponent({ onCreated={this.onViewCreated} > {({ Component }: { Component: string }) => { - return ( - Component && - (cache ? ( - - - - ) : ( - - )) + return cache ? ( + + {Component && } + + ) : ( + Component && ); }} - ) : ( - currentKey && - (cache ? ( - - {h(resolveComponent('IBizViewShell'), { + ) : cache ? ( + + {currentKey && + h(resolveComponent('IBizViewShell'), { context: navViewMsgs[currentKey].context, params: navViewMsgs[currentKey].params, key: navViewMsgs[currentKey].key, modelData: navViewMsgs[currentKey].viewModel, onCreated: this.onViewCreated, })} - - ) : ( - h(resolveComponent('IBizViewShell'), { - context: navViewMsgs[currentKey].context, - params: navViewMsgs[currentKey].params, - key: navViewMsgs[currentKey].key, - modelData: navViewMsgs[currentKey].viewModel, - onCreated: this.onViewCreated, - }) - )) + + ) : ( + currentKey && + h(resolveComponent('IBizViewShell'), { + context: navViewMsgs[currentKey].context, + params: navViewMsgs[currentKey].params, + key: navViewMsgs[currentKey].key, + modelData: navViewMsgs[currentKey].viewModel, + onCreated: this.onViewCreated, + }) )}
);