提交 5bed028b 编写于 作者: Cano1997's avatar Cano1997

feat: 分页导航支持drtab模式

上级 3103790e
...@@ -15,6 +15,7 @@ import { ...@@ -15,6 +15,7 @@ import {
ref, ref,
} from 'vue'; } from 'vue';
import './tab-exp-view.scss'; import './tab-exp-view.scss';
import { DRTabModel, TabExpPanelModel } from '@ibiz-template/model';
export const TabExpView = defineComponent({ export const TabExpView = defineComponent({
props: { props: {
...@@ -46,12 +47,13 @@ export const TabExpView = defineComponent({ ...@@ -46,12 +47,13 @@ export const TabExpView = defineComponent({
tabExpPagesHistory[activeTab.value] = fullPath; tabExpPagesHistory[activeTab.value] = fullPath;
// 找到对应分页模型并初始化分页视图模型 // 找到对应分页模型并初始化分页视图模型
const page = c.model.tabExpPanel.tabExpPages.find( const embedView = c.getEmbedViewByName(name);
item => item.name === name, if (!embedView) {
); return;
}
// 分页面板视图延迟初始化 // 分页面板视图延迟初始化
if (page?.embedView.initialized === false) { if (embedView.initialized === false) {
await page.embedView.init(); await embedView.init();
} }
if (c.context.isRouter) { if (c.context.isRouter) {
...@@ -65,7 +67,7 @@ export const TabExpView = defineComponent({ ...@@ -65,7 +67,7 @@ export const TabExpView = defineComponent({
const tempContext = Object.assign(c.context.clone(), { const tempContext = Object.assign(c.context.clone(), {
toRouteLevel: c.modal.level! + 1, toRouteLevel: c.modal.level! + 1,
}); });
ibiz.openView.root(page!.embedView.source, tempContext, c.params); ibiz.openView.root(embedView.source, tempContext, c.params);
} }
setTimeout(() => { setTimeout(() => {
deactivateAll.value = false; deactivateAll.value = false;
...@@ -80,13 +82,13 @@ export const TabExpView = defineComponent({ ...@@ -80,13 +82,13 @@ export const TabExpView = defineComponent({
// 处理默认展示分页,预置是第一个分页 // 处理默认展示分页,预置是第一个分页
c.nerve.self.evt.on('created', () => { c.nerve.self.evt.on('created', () => {
const route = useRoute(proxy); const route = useRoute(proxy);
const { tabExpPages } = c.model.tabExpPanel; const { pages } = c.model;
// 路由呈现下,处理默认打开的标签页 // 路由呈现下,处理默认打开的标签页
if (c.context.isRouter) { if (c.context.isRouter) {
const tabLevel = props.modal!.level! + 1; const tabLevel = props.modal!.level! + 1;
const tabViewName = route.params[`view${tabLevel}`]; const tabViewName = route.params[`view${tabLevel}`];
if (tabViewName) { if (tabViewName) {
const page = tabExpPages.find(item => { const page = pages.find(item => {
return getViewName(item.embedView.source) === tabViewName; return getViewName(item.embedView.source) === tabViewName;
}); });
if (page) { if (page) {
...@@ -96,8 +98,8 @@ export const TabExpView = defineComponent({ ...@@ -96,8 +98,8 @@ export const TabExpView = defineComponent({
} }
// 路由没有打开的分页时,默认打开第一个分页 // 路由没有打开的分页时,默认打开第一个分页
if (tabExpPages.length && !activeTab.value) { if (pages.length && !activeTab.value) {
const defaultTab = tabExpPages[0].name; const defaultTab = pages[0].name;
onTabClick(defaultTab); onTabClick(defaultTab);
} }
}); });
...@@ -108,6 +110,74 @@ export const TabExpView = defineComponent({ ...@@ -108,6 +110,74 @@ export const TabExpView = defineComponent({
const embedViewModal = { mode: ViewMode.EMBED }; const embedViewModal = { mode: ViewMode.EMBED };
const renderTabExpPage = () => {
if (c.model.tabExpPanel.controlType === 'TABEXPPANEL') {
const { tabExpPages = [] } = c.model.tabExpPanel as TabExpPanelModel;
return tabExpPages.map(page => {
const tabExpPage = c.tabExpPages[page.name];
if (!tabExpPage) {
return;
}
return (
<i-tab-pane
class={ns.e('tab-item')}
tab={c.model.codeName}
label={page.source.caption}
name={page.name}
>
{lazyList.value.includes(page.name) &&
h('ViewShell', {
attrs: {
context: c.context,
params: c.params,
modal: embedViewModal,
modelPath: page.embedView.source.modelPath,
},
on: {
neuronInit: c.nerve.onNeuronInit(page.name),
},
key: tabExpPage.key,
})}
</i-tab-pane>
);
});
}
};
const renderDrTab = () => {
if (c.model.tabExpPanel.controlType === 'DRTAB') {
const { pages = [] } = c.model.tabExpPanel as DRTabModel;
return pages.map(page => {
const tabExpPage = c.tabExpPages[page.name];
if (!tabExpPage) {
return;
}
return (
<i-tab-pane
class={ns.e('tab-item')}
tab={c.model.codeName}
label={page.source.caption}
name={page.name}
>
{lazyList.value.includes(page.name) &&
h('ViewShell', {
attrs: {
context: c.context,
params: c.params,
modal: embedViewModal,
modelPath: page.embedView.source.modelPath,
},
on: {
neuronInit: c.nerve.onNeuronInit(page.name),
},
key: tabExpPage.key,
})}
</i-tab-pane>
);
});
}
};
return { return {
c, c,
ns, ns,
...@@ -117,6 +187,8 @@ export const TabExpView = defineComponent({ ...@@ -117,6 +187,8 @@ export const TabExpView = defineComponent({
activeTab, activeTab,
keyHistory, keyHistory,
embedViewModal, embedViewModal,
renderDrTab,
renderTabExpPage,
}; };
}, },
render() { render() {
...@@ -133,34 +205,8 @@ export const TabExpView = defineComponent({ ...@@ -133,34 +205,8 @@ export const TabExpView = defineComponent({
model-value={this.activeTab} model-value={this.activeTab}
on-on-click={this.onTabClick} on-on-click={this.onTabClick}
> >
{this.c.model.tabExpPanel.tabExpPages.map(page => { {this.renderDrTab()}
const tabExpPage = this.c.tabExpPages[page.name]; {this.renderTabExpPage()}
if (!tabExpPage) {
return;
}
return (
<i-tab-pane
class={this.ns.e('tab-item')}
tab={this.c.model.codeName}
label={page.source.caption}
name={page.name}
>
{this.lazyList.includes(page.name) &&
h('ViewShell', {
attrs: {
context: this.c.context,
params: this.c.params,
modal: this.embedViewModal,
modelPath: page.embedView.source.modelPath,
},
on: {
neuronInit: this.c.nerve.onNeuronInit(page.name),
},
key: tabExpPage.key,
})}
</i-tab-pane>
);
})}
</i-tabs>, </i-tabs>,
isRouter && this.activeTab && ( isRouter && this.activeTab && (
<div class={this.ns.e('route-content')}> <div class={this.ns.e('route-content')}>
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册