要将 vlParent
的部分逻辑移动到“逾期”标签的内容中,同时保持其他部分不受影响,可以通过修改代码结构来实现。下面是相应的改写建议:
else if ('0BJECTS' == init.type) {
let self = new Fieldset(init.useLang ? lang(init.title) : init.title);
let me = this;
// 这里可以去掉对 vlParent 的直接引用,将其移入逾期标签内容。
if (window.isOuterOperator != null && window.isOuterOperator != undefined && window.isOuterOperator == true) {
if (init.code === 'loan') {
if (canl("data clearance:customerinfo:overdue info")) {
config.layout.addMember(self);
} else {
config.layout.addMember(self);
}
}
}
// 创建 outerBox 和 tabsContainer
if (!document.getElementById('outerBox')) {
const outerBox = document.createElement('div');
outerBox.id = 'outerBox';
Object.assign(outerBox.style, {
border: '2px solid #000',
padding: '19px',
borderRadius: '5px',
width: '300px'
});
const tabsContainer = document.createElement('div');
Object.assign(tabsContainer.style, {
display: 'flex',
marginBottom: '19px'
});
const contentContainer = document.createElement('div');
Object.assign(contentContainer.style, {
border: '1px solid #000',
padding: '19px'
});
const switchTab = (tab, content) => {
tabsContainer.querySelectorAll('.tab').forEach(t => t.classList.remove('active-tab'));
tab.classList.add('active-tab');
contentContainer.innerHTML = ''; // 清空内容容器
// 处理切换时的具体内容显示
if (typeof content === "function") {
content(); // 如果是函数则调用
} else {
contentContainer.textContent = content;
}
};
const tabs = [
{ name: '逾期', content: () => {
let vlParentOverdue = new VLayout().setVerticalAlign('top');
for (var i = 0, N = init.child.length; i < N; i++) {
var initObject = init.child[i];
var vlOverdue = this.initlayout(initObject.child, initObject.path, editable);
vlOverdue.setCSSProperty("paddingBottom", "5px");
if (N > 0 && i >= 1) {
vlOverdue.setCSSProperty("borderTop", "2px solid #E3E3E3");
vlOverdue.setCSSProperty("paddingTop", "10px");
}
if (initObject.type === 'OBJECTS_OUT_COLLECTION') {
me.customerOutCollection.layout.addMember(vlOverdue);
me.customerOutCollection.count++;
} else {
vlParentOverdue.addMember(vlOverdue);
}
}
// 将 overdue layout 添加到内容容器中
contentContainer.appendChild(vlParentOverdue.getDom());
}},
{ name: '未逾期', content: () => {/* 未逾期的处理逻辑 */} }
];
tabs.forEach(({ name, content }) => {
const tab = document.createElement('div');
tab.textContent = name;
tab.classList.add('tab');
tab.addEventListener('click', () => switchTab(tab, content));
tabsContainer.appendChild(tab);
});
switchTab(tabs[0].content); // 默认选中第一个标签页
outerBox.appendChild(tabsContainer);
outerBox.appendChild(contentContainer);
self.setBody(outerBox);
const style = document.createElement('style');
style.innerHTML = `
.tab {
padding: 10px;
cursor: pointer;
border: 1px solid #000;
margin-right: 5px;
color: #000;
background-color: #fff;
}
.active-tab {
background-color: #000;
color: #fff;
}`;
document.head.appendChild(style);
}
}
修改说明:
vlParent
移至“逾期”标签:将之前创建vlParent
的逻辑放入了“逾期”标签的content
函数内,这样在切换到该标签时就会执行这个逻辑。- 动态生成和清空:在
switchTab
函数中,确保根据当前激活的标签更新内容区域。 - 使用 DOM 操作添加组件:把每个布局成员通过获取它们对应的 DOM 元素 (
getDom()
) 添加到内容容器。
这样,你可以实现“逾期”和“未逾期”两个页面分别管理各自展示的数据,且外部循环和结构不会受到影响。
内容由零声教学AI助手提供,问题来源于学员提问