(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(); } })();