| | |
| | | |
| | | /* 一级菜单项 */ |
| | | .sidebar-menu > li { |
| | | padding: 0; |
| | | margin-bottom: 5px; |
| | | position: relative; |
| | | border-radius: 8px; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | /* 菜单头部 */ |
| | | .menu-header { |
| | | padding: 12px 15px; |
| | | cursor: pointer; |
| | | color: #555; |
| | | font-size: 14px; |
| | | border-radius: 8px; |
| | | margin-bottom: 5px; |
| | | transition: all 0.3s ease; |
| | | position: relative; |
| | | overflow: hidden; |
| | | font-weight: 600; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | } |
| | | |
| | | /* 菜单文字 */ |
| | | .menu-text { |
| | | flex: 1; |
| | | user-select: none; |
| | | } |
| | | |
| | | /* 菜单头部内容容器 */ |
| | | .menu-header > * { |
| | | user-select: none; |
| | | } |
| | | |
| | | .menu-header:hover { |
| | | background: linear-gradient(135deg, #e8f4ff, #d4e9ff); |
| | | box-shadow: 0 2px 8px rgba(0, 102, 204, 0.1); |
| | | } |
| | | |
| | | .sidebar-menu > li:hover::before { |
| | | transform: scaleY(1); |
| | | } |
| | | |
| | | .sidebar-menu > li.active .menu-header { |
| | | background: linear-gradient(135deg, #0066cc, #0052a3); |
| | | color: #fff; |
| | | box-shadow: 0 4px 12px rgba(0, 102, 204, 0.3); |
| | | } |
| | | |
| | | .sidebar-menu > li::before { |
| | |
| | | |
| | | /* 展开/折叠图标 */ |
| | | .menu-toggle { |
| | | float: right; |
| | | cursor: pointer; |
| | | font-size: 12px; |
| | | transition: transform 0.3s ease; |
| | | padding: 4px 8px; |
| | | border-radius: 4px; |
| | | user-select: none; |
| | | } |
| | | |
| | | .menu-toggle:hover { |
| | | background: rgba(0, 102, 204, 0.1); |
| | | } |
| | | |
| | | .menu-toggle.expanded { |
| | |
| | | </head> |
| | | <body> |
| | | <h3>RCS接口文档</h3> |
| | | <ul class="sidebar-menu"> |
| | | <ul class="sidebar-menu" id="sidebar-menu-container"> |
| | | <!-- 概览类 --> |
| | | <li onclick="toggleSubmenu(this)"> |
| | | 概览 |
| | | <span class="menu-toggle expanded">▶</span> |
| | | <li> |
| | | <div class="menu-header"> |
| | | <span class="menu-text">概览</span> |
| | | <span class="menu-toggle expanded" onclick="toggleMenu(this)">▶</span> |
| | | </div> |
| | | <ul class="submenu expanded"> |
| | | <li><a href="javascript:void(0);" onclick="scrollToSection('api-overview'); event.stopPropagation(); return false;">接口概览</a></li> |
| | | <li><a href="javascript:void(0);" onclick="scrollToSection('error-codes'); event.stopPropagation(); return false;">错误码说明</a></li> |
| | | <li><a href="#api-overview" class="submenu-link" data-section="api-overview" onclick="navigateToSection(this); return false;">接口概览</a></li> |
| | | <li><a href="#error-codes" class="submenu-link" data-section="error-codes" onclick="navigateToSection(this); return false;">错误码说明</a></li> |
| | | </ul> |
| | | </li> |
| | | |
| | | <!-- 任务管理类 --> |
| | | <li onclick="toggleSubmenu(this)"> |
| | | 任务管理 |
| | | <span class="menu-toggle">▶</span> |
| | | <ul class="submenu expanded"> |
| | | <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-create'); event.stopPropagation(); return false;">生成任务单*</a></li> |
| | | <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-cancel'); event.stopPropagation(); return false;">取消任务*</a></li> |
| | | <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-notice'); event.stopPropagation(); return false;">任务执行通知*</a></li> |
| | | <li><a href="javascript:void(0);" onclick="scrollToSection('api-task-priority'); event.stopPropagation(); return false;">申请入库任务*</a></li> |
| | | <li> |
| | | <div class="menu-header"> |
| | | <span class="menu-text">任务管理</span> |
| | | <span class="menu-toggle" onclick="toggleMenu(this)">▶</span> |
| | | </div> |
| | | <ul class="submenu expanded" id="menu-task-management"> |
| | | <!-- 动态生成 --> |
| | | </ul> |
| | | </li> |
| | | |
| | | <!-- 设备管理类 --> |
| | | <!-- <li onclick="toggleSubmenu(this)"> |
| | | 设备管理 |
| | | <span class="menu-toggle">▶</span> |
| | | <ul class="submenu expanded"> |
| | | <li><a href="javascript:void(0);" onclick="scrollToSection('api-loc-status'); event.stopPropagation(); return false;">库位状态修改</a></li> |
| | | </ul> |
| | | </li> --> |
| | | </ul> |
| | | |
| | | <script> |
| | | // 添加防抖变量 |
| | | let lastToggleTime = 0; |
| | | const toggleDebounceTime = 200; // 200毫秒防抖 |
| | | |
| | | // 切换二级菜单展开/折叠 |
| | | function toggleSubmenu(element) { |
| | | const submenu = element.querySelector('.submenu'); |
| | | const menuToggle = element.querySelector('.menu-toggle'); |
| | | function toggleMenu(element) { |
| | | // 防止快速连续点击 |
| | | const currentTime = new Date().getTime(); |
| | | if (currentTime - lastToggleTime < toggleDebounceTime) { |
| | | return; |
| | | } |
| | | lastToggleTime = currentTime; |
| | | |
| | | // 只处理直接点击菜单图标的情况 |
| | | const menuItem = element.closest('li'); |
| | | if (menuItem) { |
| | | const submenu = menuItem.querySelector('.submenu'); |
| | | const menuToggle = menuItem.querySelector('.menu-toggle'); |
| | | |
| | | if (submenu) { |
| | | submenu.classList.toggle('expanded'); |
| | |
| | | |
| | | if (menuToggle) { |
| | | menuToggle.classList.toggle('expanded'); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | sectionId: sectionId |
| | | }, '*'); |
| | | } |
| | | |
| | | // 导航到指定章节 |
| | | function navigateToSection(element) { |
| | | const sectionId = element.getAttribute('data-section'); |
| | | if (sectionId) { |
| | | scrollToSection(sectionId); |
| | | } |
| | | } |
| | | |
| | | // 加载API配置文件并生成菜单 |
| | | function loadApiMenu() { |
| | | try { |
| | | // 直接定义API配置数据,避免CORS错误 |
| | | const apiConfigs = [ |
| | | { |
| | | "apiId": "api-task-create", |
| | | "name": "生成任务单", |
| | | "description": "创建搬运任务", |
| | | "isCommon": true, |
| | | "method": "POST", |
| | | "url": "/api/open/bus/submit", |
| | | "menu": { |
| | | "category": "任务管理", |
| | | "order": 1 |
| | | } |
| | | }, |
| | | { |
| | | "apiId": "api-task-cancel", |
| | | "name": "取消任务", |
| | | "description": "取消搬运任务", |
| | | "isCommon": false, |
| | | "method": "POST", |
| | | "url": "/api/open/bus/cancel", |
| | | "menu": { |
| | | "category": "任务管理", |
| | | "order": 2 |
| | | } |
| | | }, |
| | | { |
| | | "apiId": "api-task-allocate", |
| | | "name": "申请入库接口", |
| | | "description": "申请任务入库", |
| | | "isCommon": true, |
| | | "method": "POST", |
| | | "url": "/api/open/task/allocate", |
| | | "menu": { |
| | | "category": "任务管理", |
| | | "order": 3 |
| | | } |
| | | }, |
| | | { |
| | | "apiId": "api-task-notice", |
| | | "name": "任务状态通知", |
| | | "description": "通知任务状态变更", |
| | | "isCommon": false, |
| | | "method": "POST", |
| | | "url": "/api/open/bus/notice", |
| | | "menu": { |
| | | "category": "任务管理", |
| | | "order": 4 |
| | | } |
| | | }, |
| | | { |
| | | "apiId": "api-task-priority", |
| | | "name": "任务优先级调整", |
| | | "description": "调整任务优先级", |
| | | "isCommon": false, |
| | | "method": "POST", |
| | | "url": "/api/open/bus/priority", |
| | | "menu": { |
| | | "category": "任务管理", |
| | | "order": 5 |
| | | } |
| | | } |
| | | ]; |
| | | |
| | | // 生成任务管理菜单 |
| | | const taskManagementMenu = document.getElementById('menu-task-management'); |
| | | if (taskManagementMenu) { |
| | | taskManagementMenu.innerHTML = ''; |
| | | apiConfigs.forEach(config => { |
| | | const li = document.createElement('li'); |
| | | const a = document.createElement('a'); |
| | | a.href = '#' + config.apiId; |
| | | a.className = 'submenu-link'; |
| | | a.setAttribute('data-section', config.apiId); |
| | | a.setAttribute('onclick', 'navigateToSection(this); return false;'); |
| | | a.textContent = config.name + (config.isCommon ? '*' : ''); |
| | | li.appendChild(a); |
| | | taskManagementMenu.appendChild(li); |
| | | }); |
| | | } |
| | | |
| | | } catch (error) { |
| | | console.error('Failed to load API configs:', error); |
| | | } |
| | | } |
| | | |
| | | // 页面加载完成后加载菜单 |
| | | window.addEventListener('DOMContentLoaded', function() { |
| | | loadApiMenu(); |
| | | }); |
| | | </script> |
| | | </body> |
| | | </html> |