From 2c743f39f06b72bc0c5504b4697168c4790fa9a9 Mon Sep 17 00:00:00 2001 From: ShineKOT <1917095344@qq.com> Date: Thu, 8 Jun 2023 14:36:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8D=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E5=8D=A0=E4=BD=8D=E7=BC=93=E5=AD=98=E4=B8=A2=E5=A4=B1=E5=8F=8A?= =?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=B5=8C=E5=A5=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/control/app-menu/app-menu.controller.ts | 21 ++++++++- .../tree-exp-bar/tree-exp-bar.controller.ts | 2 +- .../nav-pos-index/nav-pos-index.controller.ts | 10 +++- .../nav-pos-index/nav-pos-index.tsx | 22 ++++----- src/panel-component/nav-pos/nav-pos.tsx | 46 +++++++++---------- 5 files changed, 61 insertions(+), 40 deletions(-) diff --git a/src/control/app-menu/app-menu.controller.ts b/src/control/app-menu/app-menu.controller.ts index acedb786b..650e1449d 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 7eb5c4023..66e7af4e8 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 ee6051361..4d31207e2 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 6e2ae15ed..1adc1af90 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 92538056a..a3e765876 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, + }) )}
); -- Gitee