当前位置:   article > 正文

vue3.0+element Plus实现页面布局,侧边栏菜单路由跳转_element-plus点击侧边栏跳转路由

element-plus点击侧边栏跳转路由

一. 先在router.js文件中配置路由,将侧边栏中需要跳转的页面都添加到children中

  1. const router = createRouter({
  2. history: createWebHistory(import.meta.env.BASE_URL),
  3. routes: [
  4. {
  5. path: "/project",
  6. name: "projectGroup",
  7. meta: {
  8. requiresAuth: true,
  9. title: "项目列表",
  10. navBreadcrumb: [
  11. { label: "项目列表", name: "projectSample", link: true },
  12. ],
  13. },
  14. component: () => import("../views/project/Index.vue"),
  15. children: [
  16. {
  17. path: "sample/:id",
  18. name: "projectGroup:sample",
  19. meta: {
  20. requiresAuth: true,
  21. title: "项目列表",
  22. navBreadcrumb: [
  23. { label: "项目列表", name: "projectSample", link: true },
  24. ],
  25. },
  26. component: () => import("../views/project/Sample.vue"),
  27. },
  28. {
  29. path: "alg/:id",
  30. name: "projectGroup:alg",
  31. meta: {
  32. requiresAuth: true,
  33. title: "项目列表",
  34. navBreadcrumb: [
  35. { label: "项目列表", name: "projectSample", link: true },
  36. ],
  37. },
  38. component: () => import("../views/project/Alg.vue"),
  39. },
  40. ],
  41. },
  42. ],
  43. });

二. 在view目录下新建一个文件,里面包含侧边栏要跳转的页面

三.  页面样式布局

1. 我选择使用自定义组件BaseLayout.vue文件来设置header和aside样式显示

  1. <template>
  2. <el-config-provider namespace="ep" :locale="zhCn">
  3. //BaseHeader是我自己的定义的组件,为当前页面的头部
  4. <div class="top-header">
  5. <BaseHeader />
  6. <div>
  7. <user-avatar />
  8. </div>
  9. </div>
  10. <div class="app-main" v-if="userInfo !== null">
  11. //BaseSide 自定义组件,为当前页面的侧边栏
  12. <div class="base-side-main" v-if="props.hasBaseSide"><BaseSide /></div>
  13. <div
  14. :class="['content-main', mainClass]"
  15. :style="{ left: props.hasBaseSide ? '64px' : '0' }"
  16. >
  17. <slot></slot>
  18. </div>
  19. </div>
  20. </el-config-provider>
  21. </template>

也可以使用element plus中的Container 布局容器 

 2. BaseHeader.vue文件里面为页面头部样式,头部样式相对简单

  1. <template>
  2. <div class="top-nav-bar">
  3. <div class="app-title">
  4. <router-link :to="{ name: 'home' }"> 病理图像AI自训练中台 </router-link
  5. ><el-tag
  6. effect="dark"
  7. type="danger"
  8. style="margin-left: 10px"
  9. v-if="envMode === 'test'"
  10. >
  11. 测试版
  12. </el-tag>
  13. </div>
  14. <el-menu
  15. class="el-menu-bar"
  16. mode="horizontal"
  17. :ellipsis="false"
  18. :defaultActive="menuActive"
  19. >
  20. <el-menu-item index="3" @click="goPage('/dashboard')"
  21. >控制台</el-menu-item
  22. >
  23. <el-menu-item index="1" @click="goPage('/alg')">我的算法</el-menu-item>
  24. <el-menu-item index="2" @click="goPage('/market')">应用市场</el-menu-item>
  25. <el-menu-item index="4" @click="goPage('/project')"
  26. >项目列表</el-menu-item
  27. >
  28. </el-menu>
  29. </div>
  30. </template>

3. BaseSide.vue文件里面是侧边栏样式,这里是重点!!!这里进行页面路由跳转设置

  1. <template>
  2. <el-menu
  3. class="el-menu-vertical-demo"
  4. @open="handleOpen"
  5. @close="handleClose"
  6. >
  7. <div v-for="i in listProject?.ListProjectByTenant" :key="i.id">
  8. //因为我的侧边栏数据是需要动态获取的,所以这里的index不能相同,否则几个侧边栏会同时展开时
  9. <el-sub-menu :index="i">
  10. <template #title>{{ i.name }}</template>
  11. <el-menu-item index="alg">
  12. //这里使用<router-link>,通过属性to来进行跳转,里面的name就是刚才在router.js文件中设置的,params这里包含的是路由跳转时传递的参数
  13. <router-link
  14. :to="{
  15. name: 'projectGroup:alg',
  16. params: { id: i.id, name: i.name },
  17. }"
  18. >算法</router-link
  19. >
  20. </el-menu-item>
  21. <el-menu-item index="sample"
  22. ><router-link
  23. :to="{
  24. name: 'projectGroup:sample',
  25. params: { id: i.id, name: i.name },
  26. }"
  27. >样本</router-link
  28. ></el-menu-item
  29. >
  30. </el-sub-menu>
  31. </div>
  32. </el-menu>
  33. </template>

四. index.vue文件中引入刚才的组件

  1. <template>
  2. //因为我的数据是动态获取,所以要先判断一下是否有数据,有数据再显示侧边栏
  3. <BaseLayout :hasBaseSide="isProjectLoaded && projectListData.length">
  4. <PaddingLayout>
  5. <el-card class="table-card" shadow="never">
  6. <router-view></router-view>
  7. </el-card>
  8. </PaddingLayout>
  9. </AlgProjectLayout>
  10. </template>

样式如下:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/542603
推荐阅读
相关标签
  

闽ICP备14008679号