menu-item.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <template>
  2. <div id="menu-item">
  3. <template v-for="(item, index) in menus">
  4. <!-- 没有子菜单情况 -->
  5. <template v-if="!item.children">
  6. <el-menu-item :index="item.path" @click="selectMenu(item.path, item.module)" :key="index">
  7. <i v-if="item.icon" :class="item.icon"></i>
  8. <span v-if="item.name" slot="title">{{ item.name }}</span>
  9. </el-menu-item>
  10. </template>
  11. <template v-else>
  12. <el-submenu :index="item.name || item.path" :key="item.name">
  13. <template slot="title">
  14. <i v-if="item && item.icon" :class="item.icon"></i>
  15. <span v-if="item && item.name">{{ item.name }}</span>
  16. </template>
  17. <menu-item :menus="item.children"></menu-item>
  18. </el-submenu>
  19. </template>
  20. </template>
  21. </div>
  22. </template>
  23. <script>
  24. import { mapState, createNamespacedHelpers } from 'vuex';
  25. export default {
  26. name: 'menu-item',
  27. props: {
  28. menus: { type: Array, require: true },
  29. },
  30. components: {},
  31. data: function() {
  32. return {};
  33. },
  34. created() {},
  35. methods: {
  36. selectMenu(path, modules) {
  37. this.$router.push({ path: path });
  38. },
  39. },
  40. computed: {
  41. ...mapState(['user']),
  42. },
  43. };
  44. </script>
  45. <style lang="less" scoped>
  46. .el-submenu .el-menu-item {
  47. min-width: 16rem !important;
  48. padding-left: 3rem !important;
  49. background-color: #000c17 !important;
  50. &:hover {
  51. color: #fff !important;
  52. }
  53. }
  54. .el-submenu__title i {
  55. font-size: 1rem;
  56. color: rgba(255, 255, 255, 0.65);
  57. }
  58. .el-menu-item,
  59. .el-submenu .el-menu-item {
  60. &.is-active {
  61. background-color: #188fff !important;
  62. color: #fff !important;
  63. }
  64. }
  65. </style>