(function () {
'use strict';
const LEAF_RESOURCES = {
'fit-orders-multiplatform': 'fit.multiplatform_orders',
'fit-orders-walmart': 'fit.walmart_orders',
'fit-order-import': 'fit.order_import',
'fit-api': 'fit.api',
'fit-platform-mapping': 'fit.platform_mapping',
'fit-schedule': 'fit.schedule',
'fit-dingtalk-sheet': 'fit.dingtalk_sheet',
'fit-delivery-bindings': 'fit.delivery_bindings',
'fit-order-import-map': 'fit.order_import_mapping'
};
const GROUPS = [
{
id: 'fit-order-details',
label: '接单明细',
children: ['fit-orders-multiplatform', 'fit-orders-walmart']
},
{
id: 'fit-base-config',
label: '基础配置',
children: [
'fit-platform-mapping', 'fit-schedule', 'fit-dingtalk-sheet',
'fit-delivery-bindings', 'fit-order-import-map'
]
}
];
function leaf(id) {
return document.querySelector('#navFitSub [data-s="' + id + '"]');
}
function ensureGroup(definition) {
const root = document.getElementById('navFitSub');
if (!root) return null;
let title = document.getElementById(definition.id + '-title');
let panel = document.getElementById(definition.id);
if (!title) {
title = document.createElement('div');
title.id = definition.id + '-title';
title.className = 'navsubgroup';
title.innerHTML = '' + definition.label + '▸';
title.onclick = function () {
const opening = !panel.classList.contains('open');
panel.classList.toggle('open', opening);
title.classList.toggle('open', opening);
panel.style.display = opening ? 'block' : 'none';
};
}
if (!panel) {
panel = document.createElement('div');
panel.id = definition.id;
panel.className = 'navsub';
}
definition.children.forEach(function (id) {
const item = leaf(id);
if (!item) return;
item.classList.remove('navchild');
item.classList.add('nav', 'navgrandchild');
item.dataset.resource = LEAF_RESOURCES[id];
panel.appendChild(item);
});
return { title: title, panel: panel };
}
function rebuildFitNavigation() {
const root = document.getElementById('navFitSub');
if (!root) return false;
const orderGroup = ensureGroup(GROUPS[0]);
const baseGroup = ensureGroup(GROUPS[1]);
const orderImport = leaf('fit-order-import');
const api = leaf('fit-api');
[orderImport, api].forEach(function (item) {
if (!item) return;
item.classList.remove('navgrandchild');
item.classList.add('nav', 'navchild');
item.dataset.resource = LEAF_RESOURCES[item.dataset.s];
});
[
orderGroup && orderGroup.title,
orderGroup && orderGroup.panel,
orderImport,
api,
baseGroup && baseGroup.title,
baseGroup && baseGroup.panel
].filter(Boolean).forEach(function (item) { root.appendChild(item); });
return true;
}
function visible(element) {
return !!element && element.style.display !== 'none';
}
function applyFitNavigationPermissions() {
if (!rebuildFitNavigation()) return;
Object.keys(LEAF_RESOURCES).forEach(function (id) {
const item = leaf(id);
if (!item) return;
const permitted = typeof window.hasResource === 'function'
&& window.hasResource(LEAF_RESOURCES[id]);
item.style.display = permitted ? '' : 'none';
});
GROUPS.forEach(function (definition) {
const title = document.getElementById(definition.id + '-title');
const panel = document.getElementById(definition.id);
const permitted = definition.children.some(function (id) { return visible(leaf(id)); });
if (title) title.style.display = permitted ? '' : 'none';
if (panel) {
if (!permitted) {
panel.classList.remove('open');
panel.style.display = 'none';
if (title) title.classList.remove('open');
} else {
panel.style.display = panel.classList.contains('open') ? 'block' : 'none';
}
}
});
const root = document.getElementById('navFitSub');
const top = document.getElementById('navFit');
const hasVisiblePage = Object.keys(LEAF_RESOURCES).some(function (id) {
return visible(leaf(id));
});
if (top) top.style.display = hasVisiblePage ? '' : 'none';
if (root) {
if (!hasVisiblePage) {
root.classList.remove('open');
root.style.display = 'none';
if (top) top.classList.remove('open');
} else {
root.style.display = root.classList.contains('open') ? 'block' : 'none';
}
}
}
const previousApply = window.applyNavPermissions;
window.applyNavPermissions = function () {
if (previousApply) previousApply();
applyFitNavigationPermissions();
};
window.rebuildFitNavigation = rebuildFitNavigation;
window.applyFitNavigationPermissions = applyFitNavigationPermissions;
function init() {
if (!rebuildFitNavigation()) {
setTimeout(init, 200);
return;
}
applyFitNavigationPermissions();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();