网站首页菜单两种布局vue+elementui顶部和左侧栏导航

news2025/6/8 1:02:49
  1. 顶部菜单实现

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue.js + Element UI 路由导航</title>
  <!-- 引入Element UI样式 -->
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    body {
      font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', Arial, sans-serif;
      background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%);
      min-height: 100vh;
      padding: 20px;
    }
    .container {
      max-width: 1200px;
      margin: 0 auto;
      background-color: white;
      border-radius: 10px;
      box-shadow: 0 0 30px rgba(0, 0, 0, 0.1);
      overflow: hidden;
    }
    header {
      background: linear-gradient(90deg, #1e5799 0%, #207cca 51%, #2989d8 100%);
      color: white;
      padding: 20px;
      text-align: center;
    }
    header h1 {
      font-size: 2.2rem;
      margin-bottom: 10px;
    }
    header p {
      font-size: 1.1rem;
      opacity: 0.9;
    }
    .content {
      padding: 30px;
    }
    .dashboard {
      display: grid;
      grid-template-columns: 1fr 3fr;
      gap: 30px;
      margin-top: 20px;
    }
    .card {
      background: white;
      border-radius: 8px;
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
      padding: 25px;
      margin-bottom: 25px;
    }
    .card h2 {
      color: #2c3e50;
      margin-bottom: 15px;
      padding-bottom: 10px;
      border-bottom: 1px solid #eee;
    }
    .features {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
      gap: 20px;
      margin-top: 20px;
    }
    .feature-card {
      background: #f8f9fa;
      border-radius: 8px;
      padding: 20px;
      transition: all 0.3s ease;
      border-left: 4px solid #409EFF;
    }
    .feature-card:hover {
      transform: translateY(-5px);
      box-shadow: 0 6px 15px rgba(0, 0, 0, 0.08);
    }
    .feature-card h3 {
      color: #1e5799;
      margin-bottom: 10px;
    }
    .page-content {
      min-height: 400px;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      background: #f8fafc;
      border-radius: 8px;
      padding: 40px;
      text-align: center;
    }
    .page-content h2 {
      font-size: 2.5rem;
      color: #2c3e50;
      margin-bottom: 20px;
    }
    .page-content p {
      font-size: 1.2rem;
      color: #5a6a7f;
      max-width: 700px;
      line-height: 1.8;
    }
    .el-menu-demo {
      box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
    }
    footer {
      text-align: center;
      padding: 25px;
      color: #7f8c8d;
      border-top: 1px solid #eee;
      margin-top: 30px;
    }
    .router-link-active {
      text-decoration: none;
    }
    a {
      text-decoration: none;
      color: inherit;
    }
    .el-menu-item [class^=el-icon-] {
      vertical-align: middle;
      margin-right: 5px;
      width: 24px;
      text-align: center;
      font-size: 18px;
    }
    .el-submenu [class^=el-icon-] {
      vertical-align: middle;
      margin-right: 5px;
      width: 24px;
      text-align: center;
      font-size: 18px;
    }
    .el-menu-item.is-active {
      background-color: #1e5799 !important;
    }
  </style>
</head>
<body>
  <div id="app">
    <div class="container">
    
      
      <div class="content">
        <!-- 导航菜单 -->
        <el-menu
          :default-active="activeIndex"
          class="el-menu-demo"
          mode="horizontal"
          @select="handleSelect"
          background-color="#545c64"
          text-color="#fff"
          active-text-color="#ffd04b">
          <el-menu-item index="/dashboard">
            <i class="el-icon-s-home"></i>
            <span>控制面板</span>
          </el-menu-item>
          <el-submenu index="workspace">
            <template slot="title">
              <i class="el-icon-s-platform"></i>
              <span>工作空间</span>
            </template>
            <el-menu-item index="/projects">项目管理</el-menu-item>
            <el-menu-item index="/tasks">任务管理</el-menu-item>
            <el-menu-item index="/calendar">日历视图</el-menu-item>
            <el-submenu index="reports">
              <template slot="title">报表统计</template>
              <el-menu-item index="/reports/weekly">周报</el-menu-item>
              <el-menu-item index="/reports/monthly">月报</el-menu-item>
              <el-menu-item index="/reports/custom">自定义报表</el-menu-item>
            </el-submenu>
          </el-submenu>
          <el-menu-item index="/messages">
            <i class="el-icon-message"></i>
            <span>消息中心</span>
          </el-menu-item>
          <el-menu-item index="/settings">
            <i class="el-icon-setting"></i>
            <span>系统设置</span>
          </el-menu-item>
          <el-menu-item index="https://element.eleme.io" target="_blank">
            <i class="el-icon-link"></i>
            <span>Element UI 文档</span>
          </el-menu-item>
        </el-menu>
        
        <!-- 路由出口 -->
        <router-view></router-view>
       
      </div>
      
      <footer>
        <p>© 2023 Vue.js + Element UI 导航系统 | 修复路由配置示例</p>
      </footer>
    </div>
  </div>

  <!-- 引入Vue.js -->
  <script src="https://unpkg.com/vue@2/dist/vue.js"></script>
  <!-- 引入Vue Router -->
  <script src="https://unpkg.com/vue-router@3/dist/vue-router.js"></script>
  <!-- 引入Element UI -->
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  
  <script>
    // 定义路由组件
    const Dashboard = { 
      template: `
        <div class="page-content">
          <h2>控制面板</h2>
          <p>欢迎使用系统控制面板。在这里您可以查看系统概览、管理项目、跟踪任务和访问各种工具。</p>
          <p>使用左侧菜单导航到不同功能模块,或使用顶部菜单访问主要功能区域。</p>
          <el-button type="primary" size="medium" style="margin-top: 20px;">开始使用</el-button>
        </div>
      `
    };
    
    const Projects = { 
      template: `
        <div class="page-content">
          <h2>项目管理</h2>
          <p>在这里您可以创建新项目、管理现有项目、分配任务给团队成员并跟踪项目进度。</p>
          <p>使用卡片视图、列表视图或甘特图查看项目状态。</p>
        </div>
      `
    };
    
    const Tasks = { 
      template: `
        <div class="page-content">
          <h2>任务管理</h2>
          <p>查看和分配任务,设置优先级和截止日期,跟踪任务完成情况。</p>
          <p>使用看板视图直观地管理任务状态:待处理、进行中、已完成。</p>
        </div>
      `
    };
	
	 const Calendar = { 
      template: `
        <div class="page-content">
          <h2>日历管理</h2>
          <p>查看日历,设置优先级和截止日期。</p>
        </div>
      `
    };
    
    const Messages = { 
      template: `
        <div class="page-content">
          <h2>消息中心</h2>
          <p>查看系统通知、团队消息和项目更新。与团队成员保持沟通。</p>
          <p>您可以在这里发送和接收消息,设置消息提醒和通知偏好。</p>
        </div>
      `
    };
    
    const Settings = { 
      template: `
        <div class="page-content">
          <h2>系统设置</h2>
          <p>配置系统参数、用户权限、界面主题和其他个性化选项。</p>
          <p>管理团队成员、设置角色权限和配置系统集成。</p>
        </div>
      `
    };
    
    const Reports = { 
      template: `
        <div class="page-content">
          <h2>报表统计</h2>
          <p>生成和查看各种报表,包括项目进度、团队绩效和资源使用情况。</p>
          <p>自定义报表模板,设置自动生成和发送报表的时间表。</p>
        </div>
      `
    };
    
    // 定义路由
    const routes = [
      { path: '/', redirect: '/dashboard' },
      { path: '/dashboard', component: Dashboard },
      { path: '/projects', component: Projects },
      { path: '/calendar', component: Calendar },
	  { path: '/tasks', component: Tasks },
      { path: '/messages', component: Messages },
      { path: '/settings', component: Settings },
      { path: '/reports', component: Reports },
      { path: '/reports/weekly', component: Reports },
      { path: '/reports/monthly', component: Reports },
      { path: '/reports/custom', component: Reports }
    ];
    
    // 创建路由实例
    const router = new VueRouter({
      routes
    });
    
    // 创建Vue实例
    new Vue({
      el: '#app',
      router,
      data() {
        return {
          activeIndex: '/dashboard'
        }
      },
      mounted() {
        // 设置当前激活菜单项
        this.activeIndex = this.$route.path;
      },
      watch: {
        // 当路由变化时更新激活菜单项
        '$route'(to) {
          this.activeIndex = to.path;
        }
      },
      methods: {
        handleSelect(key) {
          // 处理菜单选择
          if (key.startsWith('http')) {
            // 外部链接,在新标签页打开
            window.open(key, '_blank');
          } else {
            // 内部路由导航
            this.$router.push(key);
          }
        }
      }
    });
  </script>
</body>
</html>

2 左侧边栏菜单布局

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue.js + Element UI 侧边栏导航</title>
  <!-- 引入Element UI样式 -->
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    body {
      font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', Arial, sans-serif;
      background: linear-gradient(135deg, #f5f7fa 0%, #e4edf5 100%);
      min-height: 100vh;
      padding: 20px;
    }
    .container {
      max-width: 1400px;
      margin: 0 auto;
      background-color: white;
      border-radius: 10px;
      box-shadow: 0 0 30px rgba(0, 0, 0, 0.1);
      overflow: hidden;
      display: flex;
      flex-direction: column;
      min-height: 90vh;
    }
    header {
      background: linear-gradient(90deg, #1e5799 0%, #207cca 51%, #2989d8 100%);
      color: white;
      padding: 20px;
      text-align: center;
    }
    header h1 {
      font-size: 2.2rem;
      margin-bottom: 10px;
    }
    header p {
      font-size: 1.1rem;
      opacity: 0.9;
    }
    
    .main-content {
      display: flex;
      flex: 1;
    }
    
    /* 侧边栏样式 */
    .sidebar {
      width: 250px;
      background: #fff;
      border-right: 1px solid #e6e6e6;
      box-shadow: 2px 0 10px rgba(0, 0, 0, 0.05);
      transition: all 0.3s ease;
      overflow: hidden;
    }
    
    .sidebar .el-menu {
      border-right: none;
      height: 100%;
    }
    
    .sidebar .el-submenu .el-menu-item {
      min-width: auto;
      padding-left: 50px !important;
    }
    
    .sidebar .el-menu-item,
    .sidebar .el-submenu__title {
      height: 50px;
      line-height: 50px;
    }
    
    .sidebar .el-menu-item [class^=el-icon-] {
      margin-right: 10px;
      font-size: 18px;
    }
    
    .sidebar .el-submenu [class^=el-icon-] {
      margin-right: 10px;
      font-size: 18px;
    }
    
    .sidebar .el-menu-item.is-active {
      background-color: #ecf5ff !important;
      color: #1e5799 !important;
      font-weight: bold;
      border-left: 4px solid #1e5799;
    }
    
    .sidebar .el-menu-item:hover,
    .sidebar .el-submenu__title:hover {
      background-color: #f5f7fa !important;
    }
    
    .sidebar .el-submenu__title i {
      color: #1e5799;
    }
    
    /* 内容区域样式 */
    .content {
      flex: 1;
      padding: 30px;
      background: #f8fafc;
      overflow-y: auto;
    }
    
    .dashboard {
      display: grid;
      grid-template-columns: 1fr 3fr;
      gap: 30px;
      margin-top: 20px;
    }
    
    .card {
      background: white;
      border-radius: 8px;
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
      padding: 25px;
      margin-bottom: 25px;
    }
    
    .card h2 {
      color: #2c3e50;
      margin-bottom: 15px;
      padding-bottom: 10px;
      border-bottom: 1px solid #eee;
    }
    
    .features {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
      gap: 20px;
      margin-top: 20px;
    }
    
    .feature-card {
      background: #f8f9fa;
      border-radius: 8px;
      padding: 20px;
      transition: all 0.3s ease;
      border-left: 4px solid #409EFF;
    }
    
    .feature-card:hover {
      transform: translateY(-5px);
      box-shadow: 0 6px 15px rgba(0, 0, 0, 0.08);
    }
    
    .feature-card h3 {
      color: #1e5799;
      margin-bottom: 10px;
    }
    
    .page-content {
      min-height: 400px;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      background: white;
      border-radius: 8px;
      padding: 40px;
      text-align: center;
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
    }
    
    .page-content h2 {
      font-size: 2.5rem;
      color: #2c3e50;
      margin-bottom: 20px;
    }
    
    .page-content p {
      font-size: 1.2rem;
      color: #5a6a7f;
      max-width: 700px;
      line-height: 1.8;
    }
    
    footer {
      text-align: center;
      padding: 25px;
      color: #7f8c8d;
      border-top: 1px solid #eee;
      margin-top: auto;
    }
    
    .router-link-active {
      text-decoration: none;
    }
    
    a {
      text-decoration: none;
      color: inherit;
    }
    
    .logo {
      padding: 20px;
      text-align: center;
      border-bottom: 1px solid #eee;
    }
    
    .logo h2 {
      color: #1e5799;
      font-size: 1.5rem;
    }
    
    .logo p {
      color: #7f8c8d;
      font-size: 0.9rem;
    }
    
    .user-info {
      padding: 20px;
      display: flex;
      align-items: center;
      border-bottom: 1px solid #eee;
    }
    
    .user-info .avatar {
      width: 50px;
      height: 50px;
      border-radius: 50%;
      background: #1e5799;
      color: white;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 1.5rem;
      margin-right: 15px;
    }
    
    .user-info .details {
      flex: 1;
    }
    
    .user-info .name {
      font-weight: bold;
      color: #2c3e50;
    }
    
    .user-info .role {
      color: #7f8c8d;
      font-size: 0.9rem;
    }
    
    .mobile-toggle {
      display: none;
      position: absolute;
      top: 20px;
      left: 20px;
      z-index: 1000;
      background: #1e5799;
      color: white;
      border: none;
      border-radius: 4px;
      padding: 8px 12px;
      cursor: pointer;
    }
    
    @media (max-width: 992px) {
      .sidebar {
        position: fixed;
        left: -250px;
        top: 0;
        bottom: 0;
        z-index: 100;
        transition: all 0.3s ease;
      }
      
      .sidebar.active {
        left: 0;
        box-shadow: 2px 0 15px rgba(0, 0, 0, 0.2);
      }
      
      .mobile-toggle {
        display: block;
      }
      
      .content {
        padding: 20px;
      }
      
      .page-content {
        padding: 20px;
      }
      
      .page-content h2 {
        font-size: 1.8rem;
      }
    }
    
    .stat-cards {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
      gap: 20px;
      margin-bottom: 30px;
    }
    
    .stat-card {
      background: white;
      border-radius: 8px;
      padding: 20px;
      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
      text-align: center;
      border-top: 4px solid #1e5799;
    }
    
    .stat-card .value {
      font-size: 2rem;
      font-weight: bold;
      color: #1e5799;
      margin: 10px 0;
    }
    
    .stat-card .label {
      color: #7f8c8d;
      font-size: 0.9rem;
    }
  </style>
</head>
<body>
  <div id="app">
    <div class="container">
      <header>
        <h1>Vue.js + Element UI 导航系统</h1>
        <p>侧边栏导航布局 - 专业管理系统</p>
      </header>
      
      <button class="mobile-toggle" @click="toggleSidebar">
        <i class="el-icon-menu"></i>
      </button>
      
      <div class="main-content">
        <!-- 侧边栏导航 -->
        <div class="sidebar" :class="{ active: sidebarActive }">
          <div class="logo">
            <h2>管理系统</h2>
            <p>Vue.js + Element UI</p>
          </div>
          
          <div class="user-info">
            <div class="avatar">
              <i class="el-icon-user"></i>
            </div>
            <div class="details">
              <div class="name">管理员</div>
              <div class="role">系统管理员</div>
            </div>
          </div>
          
          <el-menu
            :default-active="activeIndex"
            class="el-menu-vertical-demo"
            @select="handleSelect"
            background-color="#fff"
            text-color="#2c3e50"
            active-text-color="#1e5799">
            <el-menu-item index="/dashboard">
              <i class="el-icon-s-home"></i>
              <span>控制面板</span>
            </el-menu-item>
            <el-submenu index="workspace">
              <template slot="title">
                <i class="el-icon-s-platform"></i>
                <span>工作空间</span>
              </template>
              <el-menu-item index="/projects">项目管理</el-menu-item>
              <el-menu-item index="/tasks">任务管理</el-menu-item>
              <el-menu-item index="/calendar">日历视图</el-menu-item>
              <el-submenu index="reports">
                <template slot="title">报表统计</template>
                <el-menu-item index="/reports/weekly">周报</el-menu-item>
                <el-menu-item index="/reports/monthly">月报</el-menu-item>
                <el-menu-item index="/reports/custom">自定义报表</el-menu-item>
              </el-submenu>
            </el-submenu>
            <el-menu-item index="/messages">
              <i class="el-icon-message"></i>
              <span>消息中心</span>
            </el-menu-item>
            <el-menu-item index="/settings">
              <i class="el-icon-setting"></i>
              <span>系统设置</span>
            </el-menu-item>
            <el-menu-item index="https://element.eleme.io" target="_blank">
              <i class="el-icon-link"></i>
              <span>Element UI 文档</span>
            </el-menu-item>
          </el-menu>
        </div>
        
        <!-- 内容区域 -->
        <div class="content">
          <!-- 路由出口 -->
          <router-view></router-view>
        </div>
      </div>
      
      <footer>
        <p>© 2023 Vue.js + Element UI 导航系统 | 侧边栏布局示例</p>
      </footer>
    </div>
  </div>

  <!-- 引入Vue.js -->
  <script src="https://unpkg.com/vue@2/dist/vue.js"></script>
  <!-- 引入Vue Router -->
  <script src="https://unpkg.com/vue-router@3/dist/vue-router.js"></script>
  <!-- 引入Element UI -->
  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
  
  <script>
    // 定义路由组件
    const Dashboard = { 
      template: `
        <div>
          <div class="stat-cards">
            <div class="stat-card">
              <i class="el-icon-s-order" style="font-size: 2rem; color: #1e5799;"></i>
              <div class="value">24</div>
              <div class="label">进行中的项目</div>
            </div>
            <div class="stat-card">
              <i class="el-icon-s-claim" style="font-size: 2rem; color: #1e5799;"></i>
              <div class="value">128</div>
              <div class="label">待处理任务</div>
            </div>
            <div class="stat-card">
              <i class="el-icon-s-comment" style="font-size: 2rem; color: #1e5799;"></i>
              <div class="value">12</div>
              <div class="label">未读消息</div>
            </div>
            <div class="stat-card">
              <i class="el-icon-user-solid" style="font-size: 2rem; color: #1e5799;"></i>
              <div class="value">8</div>
              <div class="label">在线成员</div>
            </div>
          </div>
          
          <div class="page-content">
            <h2>控制面板</h2>
            <p>欢迎使用系统控制面板。在这里您可以查看系统概览、管理项目、跟踪任务和访问各种工具。</p>
            <p>使用左侧菜单导航到不同功能模块,或使用顶部菜单访问主要功能区域。</p>
            <el-button type="primary" size="medium" style="margin-top: 20px;">开始使用</el-button>
          </div>
        </div>
      `
    };
    
    const Projects = { 
      template: `
        <div class="page-content">
          <h2>项目管理</h2>
          <p>在这里您可以创建新项目、管理现有项目、分配任务给团队成员并跟踪项目进度。</p>
          <p>使用卡片视图、列表视图或甘特图查看项目状态。</p>
          <el-button type="primary" style="margin-top: 20px;">创建新项目</el-button>
        </div>
      `
    };
    
    const Tasks = { 
      template: `
        <div class="page-content">
          <h2>任务管理</h2>
          <p>查看和分配任务,设置优先级和截止日期,跟踪任务完成情况。</p>
          <p>使用看板视图直观地管理任务状态:待处理、进行中、已完成。</p>
          <el-button type="primary" style="margin-top: 20px;">创建新任务</el-button>
        </div>
      `
    };
    
    const Calendar = { 
      template: `
        <div class="page-content">
          <h2>日历管理</h2>
          <p>查看日历,设置优先级和截止日期。</p>
          <el-calendar style="margin-top: 20px; width: 100%;">
            <template
              slot="dateCell"
              slot-scope="{date, data}">
              <p :class="data.isSelected ? 'is-selected' : ''">
                {{ data.day.split('-').slice(2).join('-') }}
              </p>
            </template>
          </el-calendar>
        </div>
      `
    };
    
    const Messages = { 
      template: `
        <div class="page-content">
          <h2>消息中心</h2>
          <p>查看系统通知、团队消息和项目更新。与团队成员保持沟通。</p>
          <p>您可以在这里发送和接收消息,设置消息提醒和通知偏好。</p>
          <el-button type="primary" style="margin-top: 20px;">查看消息</el-button>
        </div>
      `
    };
    
    const Settings = { 
      template: `
        <div class="page-content">
          <h2>系统设置</h2>
          <p>配置系统参数、用户权限、界面主题和其他个性化选项。</p>
          <p>管理团队成员、设置角色权限和配置系统集成。</p>
          <el-button type="primary" style="margin-top: 20px;">系统配置</el-button>
        </div>
      `
    };
    
    const Reports = { 
      template: `
        <div class="page-content">
          <h2>报表统计</h2>
          <p>生成和查看各种报表,包括项目进度、团队绩效和资源使用情况。</p>
          <p>自定义报表模板,设置自动生成和发送报表的时间表。</p>
          <el-button type="primary" style="margin-top: 20px;">生成报表</el-button>
        </div>
      `
    };
    
    // 定义路由
    const routes = [
      { path: '/', redirect: '/dashboard' },
      { path: '/dashboard', component: Dashboard },
      { path: '/projects', component: Projects },
      { path: '/calendar', component: Calendar },
      { path: '/tasks', component: Tasks },
      { path: '/messages', component: Messages },
      { path: '/settings', component: Settings },
      { path: '/reports', component: Reports },
      { path: '/reports/weekly', component: Reports },
      { path: '/reports/monthly', component: Reports },
      { path: '/reports/custom', component: Reports }
    ];
    
    // 创建路由实例
    const router = new VueRouter({
      routes
    });
    
    // 创建Vue实例
    new Vue({
      el: '#app',
      router,
      data() {
        return {
          activeIndex: '/dashboard',
          sidebarActive: false
        }
      },
      mounted() {
        // 设置当前激活菜单项
        this.activeIndex = this.$route.path;
        
        // 监听窗口大小变化
        window.addEventListener('resize', this.handleResize);
        this.handleResize();
      },
      beforeDestroy() {
        window.removeEventListener('resize', this.handleResize);
      },
      watch: {
        // 当路由变化时更新激活菜单项
        '$route'(to) {
          this.activeIndex = to.path;
          // 在移动设备上导航时关闭侧边栏
          if (window.innerWidth < 992) {
            this.sidebarActive = false;
          }
        }
      },
      methods: {
        handleSelect(key) {
          // 处理菜单选择
          if (key.startsWith('http')) {
            // 外部链接,在新标签页打开
            window.open(key, '_blank');
          } else {
            // 内部路由导航
            this.$router.push(key);
          }
        },
        toggleSidebar() {
          this.sidebarActive = !this.sidebarActive;
        },
        handleResize() {
          // 在大屏幕上自动显示侧边栏
          if (window.innerWidth >= 992) {
            this.sidebarActive = true;
          } else {
            this.sidebarActive = false;
          }
        }
      }
    });
  </script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2401809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

@Builder的用法

Builder 是 Lombok 提供的一个注解&#xff0c;用于简化 Java 中构建对象的方式&#xff08;Builder 模式&#xff09;。它可以让你以更加简洁、链式的方式来创建对象&#xff0c;尤其适用于构造参数较多或部分可选的类。

vue实现点击按钮input保持聚焦状态

主要功能&#xff1a; 点击"停顿"按钮切换对话框显示状态输入框聚焦时保持状态点击对话框外的区域自动关闭 以下是代码版本&#xff1a; <template><div class"input-container"><el-inputv-model"input"style"width: 2…

[蓝桥杯]取球博弈

取球博弈 题目描述 两个人玩取球的游戏。 一共有 NN 个球&#xff0c;每人轮流取球&#xff0c;每次可取集合 n1,n2,n3n1​,n2​,n3​中的任何一个数目。 如果无法继续取球&#xff0c;则游戏结束。 此时&#xff0c;持有奇数个球的一方获胜。 如果两人都是奇数&#xff…

[Java 基础]数组

什么是数组&#xff1f;想象一下&#xff0c;你需要存储 5 个学生的考试成绩。你可以声明 5 个不同的 int 变量&#xff0c;但这会显得很笨拙。数组提供了一种更简洁、更有组织的方式来存储和管理这些数据。 数组可以看作是相同类型元素的集合&#xff0c;这些元素在内存中是连…

‘pnpm‘ 不是内部或外部命令,也不是可运行的程序

npm install -g pnpm changed 1 package in 4s 1 package is looking for funding run npm fund for details C:\Users\gang>pnpm pnpm 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 原来是安装的全局路径被我改了 npm list -g --depth 0 把上述…

Android Test2 获取系统android id

Android Test2 获取系统 android id 这篇文章针对一个常用的功能做一个测试。 在项目中&#xff0c;时常会遇到的一个需求就是&#xff1a;一台设备的唯一标识值。然后&#xff0c;在网络请求中将这个识别值传送到后端服务器&#xff0c;用作后端数据查询的条件。Android 设备…

webpack打包学习

vue开发 现在项目里安装vue&#xff1a; npm install vue vue的文件后缀是.vue webpack不认识vue的话就接着安插件 npm install vue-loader -D 这是.vue文件&#xff1a; <template> <div><h2 class"title">{{title}}</h2><p cla…

基于Java(Jsp+servelet+Javabean)+MySQL实现图书管理系统

图书管理系统 一、需求分析 1.1 功能描述 1.1.1“读者”功能 1&#xff09;图书的查询&#xff1a;图书的查询可以通过搜索图书 id、书名、作者名、出版社来实现,显示结果中需要包括书籍信息以及是否被借阅的情况&#xff1b; 2&#xff09;图书的借阅&#xff1a;借阅图书…

服务器CPU被WMI Provider Host系统进程占用过高,导致系统偶尔卡顿的排查处理方案

问题现状 最近一个项目遇到一个非常奇葩的问题&#xff1a;正式服务器被一个WMI Provider Host的系统进程占用大量的CPU资源&#xff0c;导致我们的系统偶尔卡顿 任务管理器-详细信息中CPU时间&#xff0c;这个进程也是占用最多的 接口时不时慢很多 但单独访问我们的接口又正…

JavaSwing之--JMenuBar

Java Swing之–JMenuBar(菜单栏) JMenuBar是 Java Swing 库中的一个组件&#xff0c;用于创建菜单栏&#xff0c;通常位于窗口的顶部。它是菜单系统的容器&#xff0c;用于组织和显示应用程序的菜单结构 菜单栏由菜单构成&#xff0c;菜单由菜单项或子菜单构成&#xff0c;也…

【物联网-S7Comm协议】

物联网-S7Comm协议 ■ 调试工具■ S7协议-简介■ S7协议和modbusTCP协议区别■ OSI 层 S7 协议■ S7协议数据结构 &#xff08;TPKTCOTPS7Comm&#xff09;■ TPKT&#xff08;第五层&#xff1a;会话层&#xff09; 总共占4个字节■ COTP&#xff08;第六层&#xff1a;表示层…

数据分析后台设计指南:实战案例解析与5大设计要点总结

引言 数据于企业而言异常重要&#xff0c;企业通过数据可以优化战略决策&#xff0c;因此企业对数据的采集正趋向智能化、数字化&#xff0c;数据分析后台就是企业智能化、数字化记录、分析数据的渠道。本文分享一个数据分析后台原型实战案例&#xff0c;通过页面拆解总结原型…

网络测试实战:金融数据传输的生死时速

阅读原文 7.4 网络测试实战--数据传输&#xff1a;当毫秒决定百万盈亏 你的交易指令为何总是慢人一步&#xff1f; 在2020年"原油宝"事件中&#xff0c;中行原油宝产品因为数据传输延迟导致客户未能及时平仓&#xff0c;最终亏损超过90亿元。这个血淋淋的案例揭示了…

数据库系统概论(十四)详细讲解SQL中空值的处理

数据库系统概论&#xff08;十四&#xff09;详细讲解SQL中空值的处理 前言一、什么是空值&#xff1f;二、空值是怎么产生的&#xff1f;1. 插入数据时主动留空2. 更新数据时设置为空3. 外连接查询时自然出现 三、如何判断空值&#xff1f;例子&#xff1a;查“漏填数据的学生…

【信创-k8s】海光/兆芯+银河麒麟V10离线部署k8s1.31.8+kubesphere4.1.3

❝ KubeSphere V4已经开源半年多&#xff0c;而且v4.1.3也已经出来了&#xff0c;修复了众多bug。介于V4优秀的LuBan架构&#xff0c;核心组件非常少&#xff0c;资源占用也显著降低&#xff0c;同时带来众多功能和便利性。我们决定与时俱进&#xff0c;使用1.30版本的Kubernet…

一台电脑联网如何共享另一台电脑?网线方式

前言 公司内网一个人只能申请一个账号和一个主机设备&#xff1b;会检测MAC地址&#xff1b;如果有两台设备&#xff0c;另一台就没有网&#xff1b;因为是联想老电脑&#xff0c;共享热点用不了&#xff0c;但是有一根网线&#xff0c;现在解决网线方式共享网络&#xff1b; …

MacroDroid安卓版:自动化操作,让生活更智能

在智能手机的日常使用中&#xff0c;我们常常会遇到一些重复性的任务&#xff0c;如定时开启或关闭Wi-Fi、自动回复消息、根据位置调整音量等。这些任务虽然简单&#xff0c;但频繁操作会让人感到繁琐。MacroDroid安卓版正是为了解决这些问题而设计的&#xff0c;它是一款功能强…

力提示(force prompting)的新方法

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【Redis实战:缓存与消息队列的应用】

在现代互联网开发中&#xff0c;Redis 作为一款高性能的内存数据库&#xff0c;广泛应用于缓存和消息队列等场景。本文将深入探讨 Redis 在这两个领域的应用&#xff0c;并通过代码示例比较两个流行的框架&#xff08;Redis 和 RabbitMQ&#xff09;的特点与适用场景&#xff0…

实验设计与分析(第6版,Montgomery著,傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第10章拟合回归模型10.9节思考题10.12 R语言解题。主要涉及线性回归、回归的显著性、残差分析。 10-12 vial <- seq(1, 12, 1) Viscosity <- c(26,24,175,160,163,55,62,100,26,30…