Api文档页面 html模板


<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>API 文档中心</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
    <style>
        :root {
            --primary-color: #4361ee;
            --primary-light: #e6f0ff;
            --secondary-color: #3a0ca3;
            --text-color: #2b2d42;
            --light-text: #8d99ae;
            --border-color: #edf2f4;
            --bg-color: #f8f9fa;
            --code-bg: #f1f3f5;
            --sidebar-bg: #ffffff;
            --hover-bg: #f1f5fe;
            --active-bg: #e6f0ff;
            --shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
            --success-color: #2e7d32;
            --error-color: #d32f2f;
            --warning-color: #ed6c02;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
        }

        body {
            color: var(--text-color);
            line-height: 1.6;
            display: flex;
            min-height: 100vh;
            background-color: var(--bg-color);
        }

        /* 侧边导航 */
        .sidebar {
            width: 280px;
            background-color: var(--sidebar-bg);
            height: 100vh;
            overflow-y: auto;
            position: sticky;
            top: 0;
            transition: all 0.3s ease;
            box-shadow: var(--shadow);
            display: flex;
            flex-direction: column;
        }

        .sidebar-header {
            padding: 18px 20px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            border-bottom: 1px solid var(--border-color);
            background-color: var(--sidebar-bg);
            position: sticky;
            top: 0;
            z-index: 10;
        }

        .sidebar-header h2 {
            color: var(--primary-color);
            font-size: 1.3rem;
            font-weight: 600;
            display: flex;
            align-items: center;
            gap: 8px;
        }

        .sidebar-header h2::before {
            content: "📚";
            font-size: 1.1em;
        }

        .toggle-btn {
            background: none;
            border: none;
            font-size: 1.2rem;
            cursor: pointer;
            color: var(--light-text);
            display: none;
            padding: 5px;
            border-radius: 4px;
            transition: all 0.2s;
        }

        .toggle-btn:hover {
            background-color: var(--hover-bg);
            color: var(--primary-color);
        }

        .search-box {
            padding: 16px 20px;
            border-bottom: 1px solid var(--border-color);
            position: sticky;
            top: 60px;
            background-color: var(--sidebar-bg);
            z-index: 9;
        }

        .search-box input {
            width: 100%;
            padding: 8px 12px;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            font-size: 0.9rem;
            transition: all 0.2s;
            background-color: var(--bg-color);
        }

        .search-box input:focus {
            outline: none;
            border-color: var(--primary-color);
            box-shadow: 0 0 0 2px var(--primary-light);
        }

        .nav-menu {
            list-style: none;
            padding: 8px 0;
            flex-grow: 1;
            overflow-y: auto;
        }

        .nav-item {
            margin: 4px 12px;
            border-radius: 6px;
            overflow: hidden;
            transition: all 0.2s;
        }

        .nav-item:hover {
            background-color: var(--hover-bg);
        }

        .nav-item-header {
            padding: 10px 14px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            cursor: pointer;
            font-weight: 500;
            font-size: 0.95rem;
            color: var(--text-color);
            transition: all 0.2s;
        }

        .nav-item-header:hover {
            color: var(--primary-color);
        }

        .nav-item-header.active {
            color: var(--primary-color);
            font-weight: 600;
        }

        .nav-item-header .arrow {
            transition: transform 0.3s ease;
            color: var(--light-text);
            font-size: 0.9em;
        }

        .nav-item-header.active .arrow {
            transform: rotate(90deg);
            color: var(--primary-color);
        }

        .submenu {
            list-style: none;
            max-height: 0;
            overflow: hidden;
            transition: max-height 0.3s ease;
            padding-left: 8px;
        }

        .submenu.show {
            max-height: 1000px;
        }

        .submenu-item {
            padding: 8px 14px 8px 28px;
            cursor: pointer;
            font-size: 0.9rem;
            color: var(--light-text);
            position: relative;
            transition: all 0.2s;
            border-radius: 4px;
            margin: 2px 8px;
        }

        .submenu-item:hover {
            color: var(--primary-color);
            background-color: var(--hover-bg);
        }

        .submenu-item.active {
            color: var(--primary-color);
            background-color: var(--active-bg);
            font-weight: 500;
        }

        .submenu-item.active::before {
            content: "";
            position: absolute;
            left: 14px;
            top: 50%;
            transform: translateY(-50%);
            width: 4px;
            height: 16px;
            background-color: var(--primary-color);
            border-radius: 2px;
        }

        /* 主内容区 */
        .main-content {
            flex: 1;
            padding: 30px;
            background-color: var(--bg-color);
            overflow-y: auto;
        }

        .api-section {
            border-radius: 8px;
            margin-bottom: 30px;
            padding: 25px;
            transition: all 0.3s ease;
        }

        .api-section-bg {
            background-color: white;
            box-shadow: var(--shadow);
        }

        /* .api-section:hover {
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
        } */

        .api-header {
            margin-bottom: 20px;
            padding-bottom: 15px;
            border-bottom: 1px solid var(--border-color);
        }

        .api-title {
            font-size: 1.8rem;
            color: var(--text-color);
            margin-bottom: 10px;
            font-weight: 600;
        }

        .api-method {
            display: inline-block;
            padding: 5px 10px;
            border-radius: 4px;
            font-weight: bold;
            font-size: 0.8rem;
            text-transform: uppercase;
            margin-right: 10px;
            letter-spacing: 0.5px;
        }

        .method-get {
            background-color: #e6f7ff;
            color: #1890ff;
            border: 1px solid #91d5ff;
        }

        .method-post {
            background-color: #f6ffed;
            color: #52c41a;
            border: 1px solid #b7eb8f;
        }

        .method-put {
            background-color: #fffbe6;
            color: #faad14;
            border: 1px solid #ffe58f;
        }

        .method-delete {
            background-color: #fff1f0;
            color: #f5222d;
            border: 1px solid #ffa39e;
        }

        .api-url {
            font-family: 'Roboto Mono', monospace;
            background-color: var(--code-bg);
            padding: 8px 12px;
            border-radius: 4px;
            display: inline-block;
            margin-top: 10px;
            word-break: break-all;
            font-size: 0.9rem;
        }

        .api-description {
            margin: 20px 0;
            color: var(--text-color);
            line-height: 1.7;
        }

        .api-params {
            width: 100%;
            border-collapse: collapse;
            margin: 20px 0;
            font-size: 0.95rem;
            box-shadow: 0 0 0 1px var(--border-color);
            border-radius: 6px;
            overflow: hidden;
        }

        .api-params th,
        .api-params td {
            padding: 12px 15px;
            text-align: left;
            border-bottom: 1px solid var(--border-color);
        }

        .api-params th {
            background-color: var(--bg-color);
            font-weight: 600;
        }

        .api-params tr:last-child td {
            border-bottom: none;
        }

        .api-params tr:hover {
            background-color: var(--hover-bg);
        }

        .response-title {
            margin: 20px 0 10px;
            font-weight: 600;
            font-size: 1.1rem;
            color: var(--text-color);
        }

        .response-examples {
            margin: 25px 0;
        }

        .response-example {
            margin-bottom: 20px;
        }

        .response-example h4 {
            font-size: 1rem;
            margin-bottom: 8px;
            color: var(--text-color);
            display: flex;
            align-items: center;
        }

        .response-example h4 .status-code {
            display: inline-block;
            padding: 2px 8px;
            border-radius: 4px;
            font-size: 0.8rem;
            margin-left: 10px;
            background-color: var(--bg-color);
        }

        .status-success {
            color: var(--success-color);
            border: 1px solid rgba(46, 125, 50, 0.3);
        }

        .status-error {
            color: var(--error-color);
            border: 1px solid rgba(211, 47, 47, 0.3);
        }

        .status-warning {
            color: var(--warning-color);
            border: 1px solid rgba(237, 108, 2, 0.3);
        }

        .code-block {
            position: relative;
            background-color: var(--code-bg);
            padding: 15px;
            border-radius: 6px;
            font-family: 'Roboto Mono', monospace;
            overflow-x: auto;
            margin: 10px 0 20px;
            font-size: 0.9rem;
            line-height: 1.5;
            border: 1px solid var(--border-color);
            white-space: pre;
        }

        .code-block::before {
            content: "JSON";
            position: absolute;
            top: 0;
            right: 0;
            background: var(--primary-color);
            color: white;
            padding: 2px 8px;
            font-size: 0.7em;
            border-bottom-left-radius: 4px;
        }

        /* 响应式设计 */
        @media (max-width: 768px) {
            body {
                flex-direction: column;
            }

            .sidebar {
                width: 100%;
                height: auto;
                max-height: 60px;
                position: relative;
                overflow: hidden;
                transition: max-height 0.3s ease;
            }

            .sidebar.expanded {
                max-height: 100vh;
            }

            .toggle-btn {
                display: block;
            }

            .main-content {
                padding: 20px;
            }

            .api-section {
                padding: 20px;
            }

            .api-title {
                font-size: 1.5rem;
            }
        }

        /* 原有样式保持不变,只添加新样式 */
        .code-tabs {
            display: flex;
            border-bottom: 1px solid var(--border-color);
            margin-bottom: 15px;
            margin-top: 15px;
        }

        .code-tab {
            padding: 8px 16px;
            cursor: pointer;
            font-size: 0.9rem;
            border: 1px solid transparent;
            border-bottom: none;
            border-radius: 4px 4px 0 0;
            margin-right: 5px;
            background-color: var(--bg-color);
            color: var(--light-text);
        }

        .code-tab.active {
            background-color: white;
            border-color: var(--border-color);
            color: var(--primary-color);
            font-weight: 500;
            border-bottom: 1px solid white;
            margin-bottom: -1px;
        }

        .code-content {
            display: none;
        }

        .code-content.active {
            display: block;
        }

        .code-block.wxapp {
            position: relative;
        }

        .code-block.wxapp::before {
            content: "微信小程序";
            background: #07C160;
        }

        .code-block.uniapp {
            position: relative;
        }

        .code-block.uniapp::before {
            content: "UNI-APP";
            background: #1ba035;
        }

        .code-block.javascript::before {
            content: "JavaScript";
            background: #f7df1e;
            color: #000;
        }

        .code-block.curl::before {
            content: "cURL";
            background: #555;
        }

        /*  */
        /* 表单容器样式 */
        .form-section {
            background-color: white;
            border-radius: 8px;
            box-shadow: var(--shadow);
            margin-bottom: 30px;
            padding: 25px;
            transition: all 0.3s ease;
        }

        .form-section:hover {
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
        }

        /* 表单头部样式 */
        .form-header {
            margin-bottom: 20px;
            padding-bottom: 15px;
            border-bottom: 1px solid var(--border-color);
        }

        .form-title {
            font-size: 1.8rem;
            color: var(--text-color);
            margin-bottom: 10px;
            font-weight: 600;
        }

        .form-description {
            margin: 20px 0;
            color: var(--text-color);
            line-height: 1.7;
        }

        /* 步骤指示器样式 */
        .form-steps {
            display: flex;
            margin-bottom: 30px;
            padding-bottom: 15px;
            border-bottom: 1px solid var(--border-color);
        }

        .step {
            flex: 1;
            position: relative;
            text-align: center;
            padding: 0 10px;
        }

        .step-number {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            width: 30px;
            height: 30px;
            border-radius: 50%;
            background-color: var(--bg-color);
            color: var(--light-text);
            font-weight: 500;
            margin-bottom: 8px;
            position: relative;
            z-index: 2;
        }

        .step.active .step-number {
            background-color: var(--primary-color);
            color: white;
        }

        .step.completed .step-number {
            background-color: var(--success-color);
            color: white;
        }

        .step-title {
            font-size: 0.9rem;
            color: var(--light-text);
        }

        .step.active .step-title {
            color: var(--primary-color);
            font-weight: 500;
        }

        .step.completed .step-title {
            color: var(--text-color);
        }

        .step::after {
            content: "";
            position: absolute;
            top: 15px;
            left: 50%;
            right: -50%;
            height: 2px;
            background-color: var(--border-color);
            z-index: 1;
        }

        .step:last-child::after {
            display: none;
        }

        .step.completed::after {
            background-color: var(--success-color);
        }

        /* 表单布局样式 */
        .form-row {
            display: flex;
            flex-wrap: wrap;
            margin: 0 -10px;
        }

        .form-col {
            flex: 1;
            padding: 0 10px;
            min-width: 250px;
        }

        /* 表单组样式 */
        .form-group {
            margin-bottom: 20px;
        }

        .form-label {
            display: block;
            margin-bottom: 8px;
            font-weight: 500;
            color: var(--text-color);
        }

        .form-label.required::after {
            content: " *";
            color: var(--error-color);
        }

        .form-control {
            width: 100%;
            padding: 10px 12px;
            border: 1px solid var(--border-color);
            border-radius: 6px;
            font-size: 0.95rem;
            transition: all 0.2s;
            background-color: white;
        }

        .form-control:focus {
            outline: none;
            border-color: var(--primary-color);
            box-shadow: 0 0 0 2px var(--primary-light);
        }

        .form-select {
            appearance: none;
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%238d99ae' viewBox='0 0 16 16'%3E%3Cpath d='M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z'/%3E%3C/svg%3E");
            background-repeat: no-repeat;
            background-position: right 12px center;
            background-size: 16px;
        }

        /* 卡片式表单组样式 */
        .form-card {
            border: 1px solid var(--border-color);
            border-radius: 6px;
            padding: 15px;
            margin-bottom: 20px;
            background-color: white;
        }

        .form-card-header {
            margin-bottom: 15px;
            padding-bottom: 10px;
            border-bottom: 1px solid var(--border-color);
            font-weight: 500;
            color: var(--text-color);
        }

        /* 文件上传样式 */
        .file-upload {
            border: 1px dashed var(--border-color);
            border-radius: 6px;
            padding: 20px;
            text-align: center;
            cursor: pointer;
            transition: all 0.2s;
            background-color: var(--bg-color);
        }

        .file-upload:hover {
            border-color: var(--primary-color);
            background-color: var(--primary-light);
        }

        .file-upload input {
            display: none;
        }

        .file-upload-icon {
            font-size: 2rem;
            color: var(--light-text);
            margin-bottom: 10px;
        }

        .file-upload-text {
            color: var(--light-text);
            margin-bottom: 5px;
        }

        .file-upload-hint {
            font-size: 0.85rem;
            color: var(--light-text);
        }

        /* 表单复选框/单选框样式 */
        .form-check {
            display: flex;
            align-items: center;
            margin-bottom: 10px;
        }

        .form-check-input {
            margin-right: 10px;
            width: 16px;
            height: 16px;
        }

        .form-check-label {
            font-size: 0.95rem;
            color: var(--text-color);
        }

        /* 表单验证样式 */
        .is-invalid {
            border-color: var(--error-color);
        }

        .is-invalid:focus {
            box-shadow: 0 0 0 2px rgba(211, 47, 47, 0.2);
        }

        .invalid-feedback {
            color: var(--error-color);
            font-size: 0.85rem;
            margin-top: 6px;
        }

        /* 表单底部按钮样式 */
        .form-footer {
            margin-top: 30px;
            padding-top: 20px;
            border-top: 1px solid var(--border-color);
            display: flex;
            justify-content: flex-end;
        }

        .btn {
            padding: 10px 20px;
            border-radius: 6px;
            font-weight: 500;
            cursor: pointer;
            transition: all 0.2s;
            border: none;
            font-size: 0.95rem;
        }

        .btn-primary {
            background-color: var(--primary-color);
            color: white;
        }

        .btn-primary:hover {
            background-color: var(--secondary-color);
        }

        .btn-outline {
            background-color: transparent;
            border: 1px solid var(--border-color);
            color: var(--text-color);
            margin-right: 10px;
        }

        .btn-outline:hover {
            background-color: var(--hover-bg);
        }

        /* 数据概览卡片 */
        .stats-container {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
            gap: 20px;
            margin-bottom: 30px;
        }

        .stat-card {
            background-color: white;
            border-radius: 8px;
            box-shadow: var(--shadow);
            padding: 20px;
            transition: all 0.3s ease;
        }

        .stat-card:hover {
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
        }

        .stat-title {
            font-size: 0.95rem;
            color: var(--light-text);
            margin-bottom: 10px;
            display: flex;
            align-items: center;
        }

        .stat-value {
            font-size: 1.8rem;
            font-weight: 600;
            color: var(--text-color);
            margin-bottom: 5px;
        }

        .stat-change {
            font-size: 0.85rem;
            display: flex;
            align-items: center;
        }

        .stat-change.up {
            color: var(--success-color);
        }

        .stat-change.down {
            color: var(--error-color);
        }

        .stat-icon {
            width: 40px;
            height: 40px;
            border-radius: 8px;
            display: flex;
            align-items: center;
            justify-content: center;
            margin-right: 15px;
            font-size: 1.2rem;
        }

        /* 图表区域 */
        .chart-container {
            background-color: white;
            border-radius: 8px;
            box-shadow: var(--shadow);
            padding: 25px;
            margin-bottom: 30px;
            transition: all 0.3s ease;
        }

        .chart-container:hover {
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
        }

        .chart-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 20px;
        }

        .chart-title {
            font-size: 1.2rem;
            font-weight: 600;
            color: var(--text-color);
        }

        .chart-actions {
            display: flex;
            gap: 10px;
        }

        .chart-btn {
            padding: 6px 12px;
            border-radius: 4px;
            font-size: 0.85rem;
            background-color: var(--bg-color);
            border: none;
            cursor: pointer;
            transition: all 0.2s;
        }

        .chart-btn.active {
            background-color: var(--primary-color);
            color: white;
        }

        .chart-wrapper {
            height: 300px;
            width: 100%;
        }

        /* 最近活动 */
        .activity-container {
            background-color: white;
            border-radius: 8px;
            box-shadow: var(--shadow);
            padding: 25px;
            transition: all 0.3s ease;
        }

        .activity-container:hover {
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
        }

        .activity-header {
            margin-bottom: 20px;
        }

        .activity-title {
            font-size: 1.2rem;
            font-weight: 600;
            color: var(--text-color);
        }

        .activity-list {
            list-style: none;
        }

        .activity-item {
            display: flex;
            padding: 15px 0;
            border-bottom: 1px solid var(--border-color);
        }

        .activity-item:last-child {
            border-bottom: none;
        }

        .activity-icon {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            background-color: var(--primary-light);
            display: flex;
            align-items: center;
            justify-content: center;
            margin-right: 15px;
            color: var(--primary-color);
            font-size: 1.1rem;
        }

        .activity-content {
            flex: 1;
        }

        .activity-message {
            margin-bottom: 5px;
        }

        .activity-time {
            font-size: 0.85rem;
            color: var(--light-text);
        }

        /* 响应式设计 */
        @media (max-width: 992px) {
            .stats-container {
                grid-template-columns: repeat(2, 1fr);
            }
        }

        @media (max-width: 768px) {
            body {
                flex-direction: column;
            }

            .sidebar {
                width: 100%;
                height: auto;
                max-height: 60px;
                position: relative;
                overflow: hidden;
                transition: max-height 0.3s ease;
            }

            .sidebar.expanded {
                max-height: 100vh;
            }

            .toggle-btn {
                display: block;
            }

            .main-content {
                padding: 20px;
            }

            .stats-container {
                grid-template-columns: 1fr;
            }

            .chart-wrapper {
                height: 250px;
            }
        }
        /*  */
        .nav-link {
            padding: 10px 14px;
            display: flex;
            align-items: center;
            cursor: pointer;
            font-weight: 500;
            font-size: 0.95rem;
            color: var(--text-color);
            transition: all 0.2s;
            text-decoration: none;
        }
        .nav-link:hover {
            color: var(--primary-color);
        }
    </style>
</head>

<body>
    <!-- 侧边导航 -->
    <aside class="sidebar">
        <div class="sidebar-header">
            <h2>API 文档中心</h2>
            <button class="toggle-btn">☰</button>
        </div>
        <div class="search-box">
            <input type="text" placeholder="搜索API...">
        </div>
        <ul class="nav-menu">

            <li class="nav-item">
                <div class="nav-item-header">
                    <span> 表单 </span>
                    <span class="arrow">›</span>
                </div>
                <ul class="submenu">
                    <li class="submenu-item active" data-section="dashboard"> 仪表盘 </li>
                </ul>
                <ul class="submenu">
                    <li class="submenu-item " data-section="form"> 获取用户列表</li>
                </ul>
            </li>


            <li class="nav-item">
                <div class="nav-item-header">
                    <span>用户管理</span>
                    <span class="arrow">›</span>
                </div>
                <ul class="submenu">
                    <li class="submenu-item " data-section="user-list"> 获取用户列表</li>
                    <li class="submenu-item" data-section="user-create"> 创建用户</li>
                    <li class="submenu-item" data-section="user-detail"> 获取用户详情</li>
                    <li class="submenu-item" data-section="user-update"> 更新用户</li>
                    <li class="submenu-item" data-section="user-delete"> 删除用户</li>
                </ul>
            </li>
            <li class="nav-item">
                <div class="nav-item-header">
                    <span>产品管理</span>
                    <span class="arrow">›</span>
                </div>
                <ul class="submenu">
                    <li class="submenu-item" data-section="product-list">获取产品列表</li>
                    <li class="submenu-item" data-section="product-create">创建产品</li>
                    <li class="submenu-item" data-section="product-detail">获取产品详情</li>
                </ul>
            </li>
            <li class="nav-item">
                <div class="nav-item-header">
                    <span>订单管理</span>
                    <span class="arrow">›</span>
                </div>
                <ul class="submenu">
                    <li class="submenu-item" data-section="order-list">获取订单列表</li>
                    <li class="submenu-item" data-section="order-create">创建订单</li>
                    <li class="submenu-item" data-section="order-cancel">取消订单</li>
                </ul>
            </li>

            <li class="nav-item">
                <a href="#" class="nav-link active">
                    <span class="nav-icon"></span>
                    <span> 退出 </span>
                </a>
            </li>

        </ul>


           

    </aside>

    <!-- 主内容区 -->
    <main class="main-content">

        <!-- 仪表盘 -->
        <section class="api-section" id="dashboard">


            <!-- 数据概览卡片 -->
            <div class="stats-container">
                <div class="stat-card">
                    <div style="display: flex; align-items: center;">
                        <div class="stat-icon" style="background-color: #e6f7ff; color: #1890ff;">👥</div>
                        <div>
                            <div class="stat-title">总用户数</div>
                            <div class="stat-value">1,248</div>
                            <div class="stat-change up">
                                <span>↑ 12.5%</span>
                                <span style="margin-left: 5px;">较上月</span>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="stat-card">
                    <div style="display: flex; align-items: center;">
                        <div class="stat-icon" style="background-color: #f6ffed; color: #52c41a;">📊</div>
                        <div>
                            <div class="stat-title">API调用量</div>
                            <div class="stat-value">24,856</div>
                            <div class="stat-change up">
                                <span>↑ 8.3%</span>
                                <span style="margin-left: 5px;">较上周</span>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="stat-card">
                    <div style="display: flex; align-items: center;">
                        <div class="stat-icon" style="background-color: #fffbe6; color: #faad14;">💰</div>
                        <div>
                            <div class="stat-title">总收入</div>
                            <div class="stat-value">¥12,845</div>
                            <div class="stat-change down">
                                <span>↓ 2.1%</span>
                                <span style="margin-left: 5px;">较上月</span>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="stat-card">
                    <div style="display: flex; align-items: center;">
                        <div class="stat-icon" style="background-color: #fff1f0; color: #f5222d;">⏱️</div>
                        <div>
                            <div class="stat-title">平均响应时间</div>
                            <div class="stat-value">128ms</div>
                            <div class="stat-change up">
                                <span>↓ 15%</span>
                                <span style="margin-left: 5px;">较上周</span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- 访问趋势图表 -->
            <div class="chart-container">
                <div class="chart-header">
                    <h3 class="chart-title">API访问趋势</h3>
                    <div class="chart-actions">
                        <button class="chart-btn active" data-period="day">日</button>
                        <button class="chart-btn" data-period="week">周</button>
                        <button class="chart-btn" data-period="month">月</button>
                        <button class="chart-btn" data-period="year">年</button>
                    </div>
                </div>
                <div id="trendChart" class="chart-wrapper"></div>
            </div>

            <!-- 最近活动 -->
            <div class="activity-container">
                <div class="activity-header">
                    <h3 class="activity-title">最近活动</h3>
                </div>
                <ul class="activity-list">
                    <li class="activity-item">
                        <div class="activity-icon">📝</div>
                        <div class="activity-content">
                            <div class="activity-message">管理员更新了用户API调用限额</div>
                            <div class="activity-time">10分钟前</div>
                        </div>
                    </li>
                    <li class="activity-item">
                        <div class="activity-icon">👤</div>
                        <div class="activity-content">
                            <div class="activity-message">新用户注册: user123</div>
                            <div class="activity-time">25分钟前</div>
                        </div>
                    </li>
                    <li class="activity-item">
                        <div class="activity-icon">🔒</div>
                        <div class="activity-content">
                            <div class="activity-message">系统自动重置了过期的API密钥</div>
                            <div class="activity-time">1小时前</div>
                        </div>
                    </li>
                    <li class="activity-item">
                        <div class="activity-icon">📊</div>
                        <div class="activity-content">
                            <div class="activity-message">API调用量达到每日峰值: 3,456次</div>
                            <div class="activity-time">3小时前</div>
                        </div>
                    </li>
                    <li class="activity-item">
                        <div class="activity-icon">⚠️</div>
                        <div class="activity-content">
                            <div class="activity-message">检测到异常API调用,已自动拦截</div>
                            <div class="activity-time">5小时前</div>
                        </div>
                    </li>
                </ul>
            </div>


        </section>

        <!-- 用户列表API -->
        <section class="api-section api-section-bg" id="user-list">
            <div class="api-header">
                <h1 class="api-title">获取用户列表</h1>
                <span class="api-method method-get">GET</span>
                <div class="api-url">/api/v1/users</div>
            </div>
            <div class="api-description">
                <p>获取系统中的所有用户列表,支持分页和筛选。返回的用户数据包含基本信息但不包含敏感信息如密码。</p>
            </div>

            <h3>请求参数</h3>
            <table class="api-params">
                <thead>
                    <tr>
                        <th>参数</th>
                        <th>类型</th>
                        <th>是否必填</th>
                        <th>描述</th>
                        <th>示例</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>page</td>
                        <td>integer</td>
                        <td>否</td>
                        <td>页码,默认为1</td>
                        <td>1</td>
                    </tr>
                    <tr>
                        <td>pageSize</td>
                        <td>integer</td>
                        <td>否</td>
                        <td>每页数量,默认为10,最大100</td>
                        <td>20</td>
                    </tr>
                    <tr>
                        <td>status</td>
                        <td>string</td>
                        <td>否</td>
                        <td>用户状态筛选,可选值:active, inactive</td>
                        <td>active</td>
                    </tr>
                    <tr>
                        <td>search</td>
                        <td>string</td>
                        <td>否</td>
                        <td>搜索关键词,匹配用户名或邮箱</td>
                        <td>john</td>
                    </tr>
                </tbody>
            </table>

            <div class="response-examples">
                <div class="response-example">
                    <h4>成功响应 <span class="status-code status-success">200 OK</span></h4>
                    <div class="code-block">
{
    "code": 200,
    "message": "success",
    "data": {
        "list": [
            {
                "id": 1,
                "username": "admin",
                "email": "admin@example.com",
                "status": "active",
                "createdAt": "2023-01-01T00:00:00Z"
            },
            {
                "id": 2,
                "username": "user1",
                "email": "user1@example.com",
                "status": "active",
                "createdAt": "2023-01-02T00:00:00Z"
            }
        ],
        "total": 42,
        "page": 1,
        "pageSize": 10
    }
}
                    </div>
                </div>

                <div class="response-example">
                    <h4>错误响应 <span class="status-code status-error">400 Bad Request</span></h4>
                    <div class="code-block">
{
    "code": 400,
    "message": "Invalid parameters",
    "errors": [
        {
            "field": "pageSize",
            "message": "Must be less than or equal to 100"
        }
    ]
}
                    </div>
                </div>
            </div>
            <!-- 新增代码示例部分 -->
            <h3>代码示例</h3>
            <div class="code-tabs">
                <div class="code-tab active" data-tab="wxapp">微信小程序</div>
                <div class="code-tab " data-tab="uniapp"> UNI-APP </div>
                <div class="code-tab" data-tab="ajax">Ajax</div>
            </div>

            <div class="code-content active" data-tab="wxapp">
                <div class="code-block wxapp">
wx.request({
    url: 'https://yourdomain.com/api/v1/users',
    method: 'POST',
    data: {
        username: 'new_user',
        email: 'user@example.com',
        password: 'password123',
        role: 'user'
    },
    header: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + wx.getStorageSync('token')
    },
    success(res) {
        if (res.statusCode === 201) {
            wx.showToast({ title: '创建成功', icon: 'success' });
        }
    }
});
                </div>
            </div>

            <div class="code-content " data-tab="uniapp">
                <div class="code-block uniapp">
wx.request({
    url: 'https://yourdomain.com/api/v1/users',
    method: 'POST',
    data: {
        username: 'new_user',
        email: 'user@example.com',
        password: 'password123',
        role: 'user'
    },
    header: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + wx.getStorageSync('token')
    },
    success(res) {
        if (res.statusCode === 201) {
            wx.showToast({ title: '创建成功', icon: 'success' });
        }
    }
});
                </div>
            </div>

            <div class="code-content" data-tab="ajax">
                <div class="code-block javascript">
$.ajax({
        type: "POST",//方法类型
        dataType: "json",//预期服务器返回的数据类型
        url: "/admin/update_setting" ,// 请求URL
        data: $('#form1').serialize(),
        success: function (res) {
            console.log(res)
        }
    });
                </div>
            </div>


        </section>

        <!-- 创建用户API -->
        <section class="api-section api-section-bg" id="user-create" style="display: none;">
            <div class="api-header">
                <h1 class="api-title">创建用户</h1>
                <span class="api-method method-post">POST</span>
                <div class="api-url">/api/v1/users</div>
            </div>
            <div class="api-description">
                <p>创建一个新用户。需要管理员权限。</p>
            </div>

            <h3>请求参数</h3>
            <table class="api-params">
                <thead>
                    <tr>
                        <th>参数</th>
                        <th>类型</th>
                        <th>是否必填</th>
                        <th>描述</th>
                        <th>示例</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>username</td>
                        <td>string</td>
                        <td>是</td>
                        <td>用户名,4-20个字符,只能包含字母、数字和下划线</td>
                        <td>new_user</td>
                    </tr>
                    <tr>
                        <td>email</td>
                        <td>string</td>
                        <td>是</td>
                        <td>用户邮箱,必须是有效的邮箱格式</td>
                        <td>user@example.com</td>
                    </tr>
                    <tr>
                        <td>password</td>
                        <td>string</td>
                        <td>是</td>
                        <td>密码,6-20个字符,必须包含字母和数字</td>
                        <td>password123</td>
                    </tr>
                    <tr>
                        <td>role</td>
                        <td>string</td>
                        <td>否</td>
                        <td>用户角色,默认为'user',可选:admin, user</td>
                        <td>user</td>
                    </tr>
                </tbody>
            </table>

            <h3 class="response-title">请求示例</h3>
            <div class="code-block">{
                "username": "new_user",
                "email": "user@example.com",
                "password": "password123",
                "role": "user"
                }</div>

            <div class="response-examples">
                <div class="response-example">
                    <h4>成功响应 <span class="status-code status-success">201 Created</span></h4>
                    <div class="code-block">{
                        "code": 201,
                        "message": "User created successfully",
                        "data": {
                        "id": 3,
                        "username": "new_user",
                        "email": "user@example.com",
                        "status": "active",
                        "role": "user",
                        "createdAt": "2023-06-01T00:00:00Z"
                        }
                        }</div>
                </div>

                <div class="response-example">
                    <h4>错误响应 <span class="status-code status-error">409 Conflict</span></h4>
                    <div class="code-block">{
                        "code": 409,
                        "message": "User already exists",
                        "errors": [
                        {
                        "field": "email",
                        "message": "Email already registered"
                        }
                        ]
                        }</div>
                </div>
            </div>
        </section>

        <!-- 用户详情API -->
        <section class="api-section api-section-bg" id="user-detail" style="display: none;">
            <div class="api-header">
                <h1 class="api-title">获取用户详情</h1>
                <span class="api-method method-get">GET</span>
                <div class="api-url">/api/v1/users/{id}</div>
            </div>
            <div class="api-description">
                <p>根据用户ID获取用户详细信息。</p>
            </div>

            <h3>路径参数</h3>
            <table class="api-params">
                <thead>
                    <tr>
                        <th>参数</th>
                        <th>类型</th>
                        <th>是否必填</th>
                        <th>描述</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>id</td>
                        <td>integer</td>
                        <td>是</td>
                        <td>用户ID</td>
                    </tr>
                </tbody>
            </table>

            <div class="response-examples">
                <div class="response-example">
                    <h4>成功响应 <span class="status-code status-success">200 OK</span></h4>
                    <div class="code-block">{
                        "code": 200,
                        "message": "success",
                        "data": {
                        "id": 1,
                        "username": "admin",
                        "email": "admin@example.com",
                        "profile": {
                        "firstName": "John",
                        "lastName": "Doe",
                        "avatar": "https://example.com/avatars/1.jpg"
                        },
                        "status": "active",
                        "createdAt": "2023-01-01T00:00:00Z",
                        "updatedAt": "2023-06-15T08:30:45Z"
                        }
                        }</div>
                </div>

                <div class="response-example">
                    <h4>错误响应 <span class="status-code status-error">404 Not Found</span></h4>
                    <div class="code-block">{
                        "code": 404,
                        "message": "User not found"
                        }</div>
                </div>
            </div>
        </section>

        <!-- 更新用户API -->
        <section class="api-section api-section-bg" id="user-update" style="display: none;">
            <div class="api-header">
                <h1 class="api-title">更新用户</h1>
                <span class="api-method method-put">PUT</span>
                <div class="api-url">/api/v1/users/{id}</div>
            </div>
            <div class="api-description">
                <p>更新用户信息。需要管理员权限或本人操作。</p>
            </div>

            <h3>路径参数</h3>
            <table class="api-params">
                <thead>
                    <tr>
                        <th>参数</th>
                        <th>类型</th>
                        <th>是否必填</th>
                        <th>描述</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>id</td>
                        <td>integer</td>
                        <td>是</td>
                        <td>用户ID</td>
                    </tr>
                </tbody>
            </table>

            <h3>请求参数</h3>
            <table class="api-params">
                <thead>
                    <tr>
                        <th>参数</th>
                        <th>类型</th>
                        <th>是否必填</th>
                        <th>描述</th>
                        <th>示例</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>username</td>
                        <td>string</td>
                        <td>否</td>
                        <td>新用户名</td>
                        <td>new_username</td>
                    </tr>
                    <tr>
                        <td>email</td>
                        <td>string</td>
                        <td>否</td>
                        <td>新邮箱</td>
                        <td>new@example.com</td>
                    </tr>
                    <tr>
                        <td>status</td>
                        <td>string</td>
                        <td>否</td>
                        <td>用户状态,active/inactive</td>
                        <td>active</td>
                    </tr>
                </tbody>
            </table>

            <h3 class="response-title">请求示例</h3>
            <div class="code-block">{
                "username": "new_username",
                "email": "new@example.com"
                }</div>

            <div class="response-examples">
                <div class="response-example">
                    <h4>成功响应 <span class="status-code status-success">200 OK</span></h4>
                    <div class="code-block">{
                        "code": 200,
                        "message": "User updated successfully",
                        "data": {
                        "id": 1,
                        "username": "new_username",
                        "email": "new@example.com",
                        "status": "active",
                        "updatedAt": "2023-06-20T10:30:00Z"
                        }
                        }</div>
                </div>

                <div class="response-example">
                    <h4>错误响应 <span class="status-code status-error">403 Forbidden</span></h4>
                    <div class="code-block">{
                        "code": 403,
                        "message": "Permission denied"
                        }</div>
                </div>
            </div>
        </section>

        <!-- 删除用户API -->
        <section class="api-section api-section-bg" id="user-delete" style="display: none;">
            <div class="api-header">
                <h1 class="api-title">删除用户</h1>
                <span class="api-method method-delete">DELETE</span>
                <div class="api-url">/api/v1/users/{id}</div>
            </div>
            <div class="api-description">
                <p>删除指定用户。需要管理员权限。</p>
            </div>

            <h3>路径参数</h3>
            <table class="api-params">
                <thead>
                    <tr>
                        <th>参数</th>
                        <th>类型</th>
                        <th>是否必填</th>
                        <th>描述</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>id</td>
                        <td>integer</td>
                        <td>是</td>
                        <td>用户ID</td>
                    </tr>
                </tbody>
            </table>

            <div class="response-examples">
                <div class="response-example">
                    <h4>成功响应 <span class="status-code status-success">204 No Content</span></h4>
                    <div class="code-block">{
                        "code": 204,
                        "message": "User deleted successfully"
                        }</div>
                </div>

                <div class="response-example">
                    <h4>错误响应 <span class="status-code status-error">404 Not Found</span></h4>
                    <div class="code-block">{
                        "code": 404,
                        "message": "User not found"
                        }</div>
                </div>
            </div>
        </section>


        <!-- 表单 -->
        <section class="api-section api-section-bg" id="form" style="display: none;">

            <div class="form-header">
                <h1 class="form-title">用户注册</h1>
                <p class="form-description">填写以下信息创建新用户账户。所有标有星号(*)的字段为必填项。</p>
            </div>

            <!-- 步骤指示器 -->
            <div class="form-steps">
                <div class="step active">
                    <div class="step-number">1</div>
                    <div class="step-title">基本信息</div>
                </div>
                <div class="step">
                    <div class="step-number">2</div>
                    <div class="step-title">联系信息</div>
                </div>
                <div class="step">
                    <div class="step-number">3</div>
                    <div class="step-title">账户设置</div>
                </div>
            </div>

            <form id="registerForm">
                <div class="form-row">
                    <div class="form-col">
                        <div class="form-group">
                            <label for="username" class="form-label required">用户名</label>
                            <input type="text" class="form-control" id="username" name="username"
                                placeholder="4-20个字符,只能包含字母、数字和下划线">
                            <div class="invalid-feedback">请输入有效的用户名</div>
                        </div>
                    </div>
                    <div class="form-col">
                        <div class="form-group">
                            <label for="email" class="form-label required">电子邮箱</label>
                            <input type="email" class="form-control" id="email" name="email"
                                placeholder="example@domain.com">
                            <div class="invalid-feedback">请输入有效的邮箱地址</div>
                        </div>
                    </div>
                </div>

                <div class="form-row">
                    <div class="form-col">
                        <div class="form-group">
                            <label for="password" class="form-label required">密码</label>
                            <input type="password" class="form-control" id="password" name="password"
                                placeholder="至少8个字符,包含字母和数字">
                            <div class="invalid-feedback">密码必须包含字母和数字,且长度至少8位</div>
                        </div>
                    </div>
                    <div class="form-col">
                        <div class="form-group">
                            <label for="confirmPassword" class="form-label required">确认密码</label>
                            <input type="password" class="form-control" id="confirmPassword" name="confirmPassword"
                                placeholder="再次输入密码">
                            <div class="invalid-feedback">两次输入的密码不一致</div>
                        </div>
                    </div>
                </div>

                <div class="form-card">
                    <div class="form-card-header">个人资料</div>
                    <div class="form-row">
                        <div class="form-col">
                            <div class="form-group">
                                <label for="firstName" class="form-label">名字</label>
                                <input type="text" class="form-control" id="firstName" name="firstName">
                            </div>
                        </div>
                        <div class="form-col">
                            <div class="form-group">
                                <label for="lastName" class="form-label">姓氏</label>
                                <input type="text" class="form-control" id="lastName" name="lastName">
                            </div>
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="gender" class="form-label">性别</label>
                        <select class="form-control form-select" id="gender" name="gender">
                            <option value="">请选择性别</option>
                            <option value="male">男</option>
                            <option value="female">女</option>
                            <option value="other">其他</option>
                            <option value="prefer-not-to-say">不愿透露</option>
                        </select>
                    </div>

                    <div class="form-group">
                        <label for="birthdate" class="form-label">出生日期</label>
                        <input type="date" class="form-control" id="birthdate" name="birthdate">
                    </div>
                </div>

                <div class="form-card">
                    <div class="form-card-header">头像上传</div>
                    <div class="form-group">
                        <label class="form-label">个人头像</label>
                        <div class="file-upload">
                            <input type="file" id="avatar" name="avatar" accept="image/*">
                            <div class="file-upload-icon">📁</div>
                            <div class="file-upload-text">点击或拖拽文件到此处上传</div>
                            <div class="file-upload-hint">支持 JPG, PNG 格式,大小不超过 5MB</div>
                        </div>
                    </div>
                </div>

                <div class="form-group">
                    <label class="form-label required">用户类型</label>
                    <div class="form-check">
                        <input class="form-check-input" type="radio" name="userType" id="userTypePersonal"
                            value="personal" checked>
                        <label class="form-check-label" for="userTypePersonal">个人用户</label>
                    </div>
                    <div class="form-check">
                        <input class="form-check-input" type="radio" name="userType" id="userTypeBusiness"
                            value="business">
                        <label class="form-check-label" for="userTypeBusiness">企业用户</label>
                    </div>
                </div>

                <div class="form-group">
                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" id="agreeTerms" name="agreeTerms" required>
                        <label class="form-check-label" for="agreeTerms">我已阅读并同意<a href="#">服务条款</a>和<a
                                href="#">隐私政策</a></label>
                        <div class="invalid-feedback">必须同意服务条款才能继续</div>
                    </div>
                </div>

                <div class="form-group">
                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" id="subscribeNewsletter"
                            name="subscribeNewsletter" checked>
                        <label class="form-check-label" for="subscribeNewsletter">订阅我们的新闻和促销信息</label>
                    </div>
                </div>

                <div class="form-footer">
                    <button type="button" class="btn btn-outline">取消</button>
                    <button type="submit" class="btn btn-primary">提交注册</button>
                </div>
            </form>


        </section>
    </main>




    <script>
        document.addEventListener('DOMContentLoaded', function () {
            // 仪表盘
            // 1. 初始化ECharts图表
            const chartDom = document.getElementById('trendChart');
            const myChart = echarts.init(chartDom);

            // 2. 图表选项卡切换功能
            const chartBtns = document.querySelectorAll('.chart-btn');
            chartBtns.forEach(btn => {
                btn.addEventListener('click', function () {
                    // 移除所有按钮的active类
                    chartBtns.forEach(b => b.classList.remove('active'));
                    // 为当前点击按钮添加active类
                    this.classList.add('active');

                    // 根据选择的时间段更新图表
                    const period = this.getAttribute('data-period');
                    updateChart(period);
                });
            });

            // 3. 窗口大小变化时重新调整图表大小
            window.addEventListener('resize', function () {
                myChart.resize();
            });

            // 4. 默认显示日数据
            updateChart('day');

            // 5. 更新图表函数
            function updateChart(period) {
                let option;

                // 根据选择的时间段获取不同的图表配置
                switch (period) {
                    case 'day':
                        option = getDayOption();
                        break;
                    case 'week':
                        option = getWeekOption();
                        break;
                    case 'month':
                        option = getMonthOption();
                        break;
                    case 'year':
                        option = getYearOption();
                        break;
                    default:
                        option = getDayOption();
                }

                // 使用新配置更新图表
                myChart.setOption(option, true);
            }

            // 6. 获取日数据配置
            function getDayOption() {
                const hours = [];
                const data = [];

                // 生成24小时数据
                for (let i = 0; i < 24; i++) {
                    hours.push(i + ':00');
                    // 模拟数据 - 白天访问量高,夜间低
                    const value = Math.round(500 + Math.sin(i / 24 * Math.PI * 2) * 300 + Math.random() * 200);
                    data.push(value);
                }

                return {
                    tooltip: {
                        trigger: 'axis',
                        formatter: '{b}<br/>调用量: {c} 次'
                    },
                    grid: {
                        left: '3%',
                        right: '4%',
                        bottom: '3%',
                        containLabel: true
                    },
                    xAxis: {
                        type: 'category',
                        boundaryGap: false,
                        data: hours,
                        axisLabel: {
                            interval: 3 // 每3小时显示一个标签
                        }
                    },
                    yAxis: {
                        type: 'value',
                        name: '调用量(次)'
                    },
                    series: [{
                        name: 'API调用量',
                        type: 'line',
                        smooth: true,
                        data: data,
                        areaStyle: {
                            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                                { offset: 0, color: 'rgba(67, 97, 238, 0.3)' },
                                { offset: 1, color: 'rgba(67, 97, 238, 0.1)' }
                            ])
                        },
                        itemStyle: {
                            color: '#4361ee'
                        },
                        lineStyle: {
                            width: 3
                        },
                        symbolSize: 6
                    }]
                };
            }

            // 7. 获取周数据配置
            function getWeekOption() {
                const days = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'];
                const data = [];

                // 生成一周数据
                days.forEach((day, i) => {
                    // 模拟数据 - 工作日访问量高,周末低
                    const value = Math.round(800 + (i < 5 ? 400 : -200) + Math.random() * 300);
                    data.push(value);
                });

                return {
                    tooltip: {
                        trigger: 'axis',
                        formatter: '{b}<br/>调用量: {c} 次'
                    },
                    grid: {
                        left: '3%',
                        right: '4%',
                        bottom: '3%',
                        containLabel: true
                    },
                    xAxis: {
                        type: 'category',
                        data: days
                    },
                    yAxis: {
                        type: 'value',
                        name: '调用量(次)'
                    },
                    series: [{
                        name: 'API调用量',
                        type: 'bar',
                        data: data,
                        itemStyle: {
                            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                                { offset: 0, color: '#4361ee' },
                                { offset: 1, color: '#3a0ca3' }
                            ])
                        },
                        barWidth: '60%'
                    }]
                };
            }

            // 8. 获取月数据配置
            function getMonthOption() {
                const days = [];
                const data = [];

                // 生成30天数据
                for (let i = 1; i <= 30; i++) {
                    days.push(i + '日');
                    // 模拟数据 - 每周波动
                    const weeklyFactor = (i % 7 < 5) ? 1 : 0.7;
                    const value = Math.round(600 * weeklyFactor + Math.sin(i / 30 * Math.PI) * 300 + Math.random() * 200);
                    data.push(value);
                }

                return {
                    tooltip: {
                        trigger: 'axis',
                        formatter: '{b}<br/>调用量: {c} 次'
                    },
                    grid: {
                        left: '3%',
                        right: '4%',
                        bottom: '3%',
                        containLabel: true
                    },
                    xAxis: {
                        type: 'category',
                        boundaryGap: false,
                        data: days,
                        axisLabel: {
                            interval: 4 // 每4天显示一个标签
                        }
                    },
                    yAxis: {
                        type: 'value',
                        name: '调用量(次)'
                    },
                    series: [{
                        name: 'API调用量',
                        type: 'line',
                        smooth: true,
                        data: data,
                        areaStyle: {
                            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                                { offset: 0, color: 'rgba(67, 97, 238, 0.3)' },
                                { offset: 1, color: 'rgba(67, 97, 238, 0.1)' }
                            ])
                        },
                        itemStyle: {
                            color: '#4361ee'
                        },
                        lineStyle: {
                            width: 3
                        },
                        symbolSize: 6
                    }]
                };
            }

            // 9. 获取年数据配置
            function getYearOption() {
                const months = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'];
                const data = [];

                // 生成12个月数据
                months.forEach((month, i) => {
                    // 模拟数据 - 季节性波动
                    const seasonalFactor = 0.8 + Math.sin((i - 3) / 12 * Math.PI * 2) * 0.3;
                    const value = Math.round(2000 * seasonalFactor + Math.random() * 500);
                    data.push(value);
                });

                return {
                    tooltip: {
                        trigger: 'axis',
                        formatter: '{b}<br/>调用量: {c} 次'
                    },
                    grid: {
                        left: '3%',
                        right: '4%',
                        bottom: '3%',
                        containLabel: true
                    },
                    xAxis: {
                        type: 'category',
                        data: months
                    },
                    yAxis: {
                        type: 'value',
                        name: '调用量(次)'
                    },
                    series: [{
                        name: 'API调用量',
                        type: 'line',
                        smooth: true,
                        data: data,
                        symbol: 'circle',
                        symbolSize: 8,
                        itemStyle: {
                            color: '#4361ee'
                        },
                        lineStyle: {
                            width: 3
                        },
                        areaStyle: {
                            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                                { offset: 0, color: 'rgba(67, 97, 238, 0.3)' },
                                { offset: 1, color: 'rgba(67, 97, 238, 0.1)' }
                            ])
                        }
                    }]
                };
            }

            // 仪表盘

            // 导航菜单折叠功能
            const navItemHeaders = document.querySelectorAll('.nav-item-header');
            navItemHeaders.forEach(header => {
                header.addEventListener('click', function () {
                    const parentItem = this.parentElement;
                    const isActive = this.classList.contains('active');

                    // 如果点击的是已激活的header,且子菜单是展开的,则关闭
                    if (isActive && this.nextElementSibling.classList.contains('show')) {
                        this.classList.remove('active');
                        this.nextElementSibling.classList.remove('show');
                    } else {
                        // 否则激活当前项
                        this.classList.add('active');
                        this.nextElementSibling.classList.add('show');
                    }
                });
            });

            // 新增代码选项卡切换功能
            const codeTabs = document.querySelectorAll('.code-tab');
            codeTabs.forEach(tab => {
                tab.addEventListener('click', function () {
                    const tabId = this.getAttribute('data-tab');
                    const parent = this.closest('.code-tabs').parentElement;

                    // 移除所有active类
                    parent.querySelectorAll('.code-tab').forEach(t => t.classList.remove('active'));
                    parent.querySelectorAll('.code-content').forEach(c => c.classList.remove('active'));

                    // 添加当前active类
                    this.classList.add('active');
                    parent.querySelector(`.code-content[data-tab="${tabId}"]`).classList.add('active');
                });
            });

            // 子菜单项点击切换内容
            const submenuItems = document.querySelectorAll('.submenu-item');
            submenuItems.forEach(item => {
                item.addEventListener('click', function () {
                    // 移除所有active类
                    submenuItems.forEach(i => i.classList.remove('active'));
                    // 添加当前active类
                    this.classList.add('active');

                    // 隐藏所有API部分
                    document.querySelectorAll('.api-section').forEach(section => {
                        section.style.display = 'none';
                    });

                    // 显示选中的API部分
                    const sectionId = this.getAttribute('data-section');
                    document.getElementById(sectionId).style.display = 'block';

                    // 确保父菜单展开
                    this.closest('.submenu').classList.add('show');
                    this.closest('.nav-item').querySelector('.nav-item-header').classList.add('active');

                    // 滚动到顶部
                    window.scrollTo(0, 0);
                });
            });

            // 移动端菜单切换按钮
            const toggleBtn = document.querySelector('.toggle-btn');
            const sidebar = document.querySelector('.sidebar');
            toggleBtn.addEventListener('click', function () {
                sidebar.classList.toggle('expanded');
                this.textContent = sidebar.classList.contains('expanded') ? '✕' : '☰';
            });

            // 搜索功能 - 添加防抖优化
            let searchTimeout;
            const searchInput = document.querySelector('.search-box input');
            searchInput.addEventListener('input', function () {
                clearTimeout(searchTimeout);
                searchTimeout = setTimeout(() => {
                    const searchTerm = this.value.toLowerCase().trim();
                    const submenuItems = document.querySelectorAll('.submenu-item');

                    if (searchTerm === '') {
                        // 清空搜索时恢复所有项
                        submenuItems.forEach(item => {
                            item.style.display = 'block';
                            item.closest('.submenu').classList.remove('force-show');
                            item.closest('.nav-item').querySelector('.nav-item-header').classList.remove('force-active');
                        });
                        return;
                    }

                    submenuItems.forEach(item => {
                        const text = item.textContent.toLowerCase();
                        if (text.includes(searchTerm)) {
                            item.style.display = 'block';
                            // 强制显示父菜单
                            item.closest('.submenu').classList.add('show', 'force-show');
                            item.closest('.nav-item').querySelector('.nav-item-header').classList.add('active', 'force-active');
                        } else {
                            item.style.display = 'none';
                        }
                    });
                }, 300);
            });

            // 初始化显示第一个API部分
            document.querySelector('.submenu-item.active').click();
        });
    </script>
</body>

</html>
  1. 内容区域样式优化

    • 改进了API卡片的外观,添加了悬停效果

    • 优化了代码块的显示样式

    • 增强了表格的可读性

    • 添加了响应式设计,确保在移动设备上也能良好显示

  2. 交互改进

    • 点击菜单项后会自动滚动到页面顶部

    • 改进了移动端菜单的切换按钮图标

    • 增强了搜索功能的用户体验

  3. 内容增强

    • 为API文档添加了更多详细信息和示例

    • 增加了错误码表格

    • 添加了请求示例部分

现在这个版本既保留了优化后的美观左侧菜单,又完整显示了所有API文档内容,并且两者风格统一,整体视觉效果更加专业和现代化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值