Vue+Antd 菜单 2021-06-04

<template>
  <div class="menu-box"
       v-if="moduleMenuList && moduleMenuList.length"
  >
    <Menu
      class="menu"
      mode="inline"
      v-model="selected"
      theme="light"
      :inline-collapsed="collapsed"
    >
      <template v-for="(item, index) in menuList">
        <MenuItem v-if="!item.subModule" :key="index" @click="() => handleClickMenu(item, index)" >
          <Icon type="desktop" />
          <span>{{item.title}}</span>
        </MenuItem>
        <MenuSubMenu v-if="item.subModule" :key="index"  >
          <span slot="title">
            <Icon type="desktop" />
            <span>{{item.title}}</span>
          </span>
          <template v-for="(item2, index2) in item.subModule" >
            <MenuItem :key="`${index}-${index2}`" >
              {{item2.title}}
            </MenuItem>
          </template>
        </MenuSubMenu>
      </template>
    </Menu>
    <Button
      class="menu-collapsed" type="primary" style="margin-bottom: 16px" @click="toggleCollapsed"
    >
      <Icon :type="collapsed ? 'menu-unfold' : 'menu-fold'" />
    </Button>
  </div>
</template>

<script lang="ts">
import Vue from 'vue';
import { mapState } from 'vuex';
import { Menu, Button, Icon } from 'ant-design-vue';

const MenuItem = Menu.Item;
const MenuSubMenu = Menu.SubMenu;

export default Vue.extend({
  name: 'menuPage',
  data() {
    return {
      collapsed: false,
      selected: [0],
    };
  },
  components: {
    Menu,
    MenuSubMenu,
    MenuItem,
    Button,
    Icon,
  },
  computed: {
    ...mapState([
      'menuList',
    ]),
    handChangeMenuList() {
      return this.$store.state.menuList;
    },
  },
  mounted() {
  },
  methods: {
    toggleCollapsed() {
      this.collapsed = !this.collapsed;
    },
    handleClickMenu(item, index) {
      if (this.$route.path !== item.path) {
        this.$router.push(item.path);
        this.selected = index;
      }
    },
  },
  watch: {
    handChangeMenuList: {
      handler(val) {
        if (val && val.length) {
          this.selected = [0];
        }
      },
    },
  },
});
</script>

<style lang="less" scoped>
.menu-box {
  height: 100%;
  display: flex;
  flex-direction: column;
  .menu {
    flex: 1 1 auto;
  }
  .menu-collapsed {
    width: 100%;
    flex: 0 0 40px;
  }
}
</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值