1
zhang
22 小时以前 6cd6a403fc6e447d38b9d58ef940abea76c4fda4
open-rcs/components/sidebar/sidebar-interface-word.html
@@ -46,16 +46,51 @@
        /* 一级菜单项 */
        .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 {
@@ -132,9 +167,16 @@
        /* 展开/折叠图标 */
        .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 {
@@ -163,44 +205,50 @@
</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');
@@ -208,6 +256,7 @@
        
        if (menuToggle) {
            menuToggle.classList.toggle('expanded');
            }
        }
    }
@@ -218,6 +267,108 @@
            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>