[element-plus] el-tabs和el-menu联动

html 复制代码
  <el-container>
    <el-aside width="200px">
      <el-menu :default-active="activeTab" @select="handleMenuSelect">
        <el-menu-item index="/dashboard">仪表盘</el-menu-item>
        <el-menu-item index="/system">系统管理</el-menu-item>
      </el-menu>
    </el-aside>
    
    <el-container>
      <el-header>
        <el-tabs v-model="activeTab" @tab-click="handleTabClick" closable @tab-remove="removeTab">
          <el-tab-pane 
            v-for="tab in openedTabs" 
            :key="tab.path"
            :label="tab.title" 
            :name="tab.path"
          />
        </el-tabs>
      </el-header>
      
      <el-main>
        <router-view />
      </el-main>
    </el-container>
  </el-container>
typescript 复制代码
const activeTab = ref(route.path)

// 已打开的 Tabs
const openedTabs = ref([
  { path: '/dashboard', title: '仪表盘' }
])

// 菜单标题映射(可从路由 meta 获取)
const getTitle = (path) => {
  const map = { '/dashboard': '仪表盘', '/system': '系统管理' }
  return map[path] || path
}

// 监听路由变化
watch(
() => route.path, 
(newPath) => {
  activeTab.value = newPath
  if (!openedTabs.value.find(t => t.path === newPath)) {
    openedTabs.value.push({ path: newPath, title: getTitle(newPath) })
  }
}, 
{ immediate: true }
)

// 菜单点击
const handleMenuSelect = (path) => {
  router.push(path)
}

// Tab 点击
const handleTabClick = (tab) => {
  router.push(tab.props.name)
}

// 关闭 Tab
const removeTab = (path) => {
  const index = openedTabs.value.findIndex(t => t.path === path)
  if (index === -1) return
  openedTabs.value.splice(index, 1)
  if (path === activeTab.value && openedTabs.value.length > 0) {
    router.push(openedTabs.value[openedTabs.value.length - 1].path)
  }
}
相关推荐
gqc5822 分钟前
Markdown 写完怎么验证?我现在的 4 步本地检查流程
前端
普通人634 分钟前
uniapp模版JS
开发语言·javascript·小程序·uni-app·1024程序员节
KumaoHub34 分钟前
棋牌游戏开发中聊天文本的长度限制与安全显示
javascript
计算机魔术师1 小时前
我重算了新云的账,发现亏的不是算力,是时间
前端
G018_star sky♬1 小时前
nodeJS他是如何用JavaScript封装C++的呢
开发语言·javascript·c++
wiseyao12191 小时前
uniapp scroll-view滚动到最后
前端·javascript·uni-app
陈随易1 小时前
从今天起,你只需要一个浏览器之Ego lite
前端·后端·程序员
怕浪猫1 小时前
Step 5 Preview 模型写 3D 象棋,两个小时上线
前端·javascript·面试
Highcharts.js2 小时前
Highcharts甘特图开发带导航功能的项目管理图示例
开发语言·前端·javascript·甘特图·highcharts·项目管理图
Hilaku2 小时前
前端不懂业务有多可怕?
前端·javascript·程序员