vue中后台管理系统导航栏和侧边栏关联起来的写法

<template>
  <div class="myDiv">
    <el-container style="position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden">
      <el-header class="d-flex align-items-center" style="background-color:#545c64">
        <h5 class="text-light mb-0 mr-auto">UNI-ADMIN</h5>
        <el-menu
          :default-active="navArray.navBarIndex"
          class="el-menu-demo"
          mode="horizontal"
          @select="handleSelect"
          background-color="#545c64"
          text-color="#fff"
          active-text-color="#ffd04b"
        >
          <el-menu-item
            :index="index|numTostring"
            v-for="(item,index) in navArray.navList"
            :key="index"
          >{{item.name}}</el-menu-item>
          <el-submenu index="6">
            <template slot="title">
              <el-avatar
                size="small"
                src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png"
              ></el-avatar>summer
            </template>
            <el-menu-item index="6-1">修改</el-menu-item>
            <el-menu-item index="6-2">退出</el-menu-item>
          </el-submenu>
        </el-menu>
      </el-header>
      <el-container style="height:100%">
        <el-aside width="200px">
          <el-menu
            :default-active="slideMenuActive"
            class="el-menu-vertical-demo"
            @select="asideeSelect"
            style="height:100%"
          >
            <el-menu-item
              :index="index|numTostring"
              v-for="(item,index) in slideMenus"
              :key="index"
            >
              <i :class="item.icon"></i>
              <span slot="title">{{item.name}}</span>
            </el-menu-item>
          </el-menu>
        </el-aside>
        <el-main style="position:relative">
          <el-breadcrumb separator-class="el-icon-arrow-right">
            <el-breadcrumb-item
              :to="{ path: item.path}"
              v-for="(item,index) in mianBao"
              :key="index"
            >{{item.title}}</el-breadcrumb-item>
          </el-breadcrumb>
          <router-view></router-view>
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>

<script>
import common from "../assets/js/common";
export default {
  mixins: [common],
  props: {},
  data() {
    return {
      navArray: {
        navBarIndex: "0",
        navList: [
          {
            name: "首页",
            subActive: "0",
            subMenu: [
              { icon: "el-icon-user", name: "后台首页", pathname: "index" },
              {
                icon: "el-icon-star-on",
                name: "相册管理",
                pathname: "index_imgAdmin"
              }
            ]
          },
          {
            name: "商品",
            subActive: "0",
            subMenu: [
              {
                icon: "el-icon-star-on",
                name: "商品列表2",
                pathname: "shop_goods_list"
              }
            ]
          },
          {
            name: "订单",
            subActive: "0",
            subMenu: [
              { icon: "el-icon-user", name: "后台首页3" },
              { icon: "el-icon-star-on", name: "商品列表3" }
            ]
          },
          {
            name: "会员",
            subActive: "0",
            subMenu: [
              { icon: "el-icon-user", name: "后台首页4" },
              { icon: "el-icon-star-on", name: "商品列表4" }
            ]
          },
          { name: "设置" }
        ]
      }
    };
    mianBao: [];
  },
  watch: {
    $route(to, from) {
      this.getRouterBran();
      localStorage.setItem(
        "navActive",
        JSON.stringify({
          top: this.navArray.navBarIndex,
          left: this.slideMenuActive
        })
      );
    }
  },
  computed: {
    slideMenus() {
      return this.navArray.navList[this.navArray.navBarIndex].subMenu || [];
    },

    slideMenuActive: {
      get() {
        return (
          this.navArray.navList[this.navArray.navBarIndex].subActive || "0"
        );
      },
      set(value) {
        this.navArray.navList[this.navArray.navBarIndex].subActive = value;
      }
    }
  },
  methods: {
    _initNavBar() {
      let r = localStorage.getItem("navActive");
      if (r) {
        r = JSON.parse(r);
        this.navArray.navBarIndex = r.top;
        this.slideMenuActive = r.left;
        console.log(r);
      }
    },
    handleSelect(key, keyPath) {
      if(key==="6-1"){
          return console.log(key)
      }
       if(key==="6-2"){
          return console.log(key)
      }
      this.navArray.navBarIndex = key;
      // 默认选中跳转到当前激活
      if (this.slideMenus.length > 0) {
        this.$router.push({
          name: this.slideMenus[this.slideMenuActive].pathname
        });
      }
    },
    asideeSelect(key, keyPath) {
      this.slideMenuActive = key;
      this.$router.push({ name: this.slideMenus[key].pathname });
    },
    // 获取面包屑导航
    getRouterBran() {
      let arr1 = this.$route.matched.filter(item => item.name);
      let arr2 = [];
      arr1.forEach((item, index) => {
        if (item.name === "index" || item.name === "layout") {
          return;
        } else {
          arr2.push({
            path: item.path,
            name: item.name,
            title: item.meta.title
          });
        }
      });
      if (arr2.length > 0) {
        arr2.unshift({
          path: "/index",
          name: "index",
          title: "后台首页"
        });
      }
      this.mianBao = arr2;
      console.log(this.mianBao);
    }
  },
  created() {
    this.getRouterBran();
    this._initNavBar();
  },
  mounted() {}
};
</script>
<style scoped>
.myDiv {
}
.el-header,
.el-footer {
  background-color: #b3c0d1;
  color: #333;
}

.el-aside {
  background-color: #d3dce6;
  color: #333;
}

.el-main {
  background-color: #e9eef3;
  color: #333;
}
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_43067405

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值