分支自 SuZhouGuanHong/TaiYuanTaiZhong

dengjunjie
2024-01-16 5884c9023393061afbe6d3d6e709e53e672ddde8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<template>
  <div class="vol-el-menu">
    <el-menu close="vol-el-menu--vertical"
             :unique-opened="true"
             @select="select"
             :collapse="isCollapse"
             @open="handleOpen"
             @close="handleClose">
      <template v-for="item in treeList">
        <el-submenu :key="item.id"
                    :index="'' + item.id"
                    v-if="item.children.length && item.enable == 1">
          <template slot="title">
            <Icon :type="item.icon || 'ios-aperture'" />
            <span slot="title"> {{ item.name }}</span>
          </template>
          <vol-element-menu-child :list="item.children"></vol-element-menu-child>
        </el-submenu>
        <template v-else>
          <el-menu-item class="menu-item-lv1"
                        v-if="item.enable == 1"
                        :key="item.id"
                        :index="'' + item.id">
            <Icon :type="item.icon || 'ios-aperture'" />
            <span slot="title"> {{ item.name }}</span>
          </el-menu-item>
        </template>
      </template>
    </el-menu>
  </div>
</template>
 
<script>
import VolElementMenuChild from "./VolElementMenuChild";
export default {
  components: {
    "vol-element-menu-child": VolElementMenuChild,
  },
  props: {
    isCollapse: {
      type: Boolean,
      default: false,
    },
    onSelect: {
      type: Function,
      default: (x) => {
        console.log(x);
      },
    },
    list: {
      type: Array,
      default: [],
    },
    rootId: {
      type: String,
      default: "0",
    },
  },
  data () {
    return {
      treeList: [],
    };
  },
  created () {
    this.treeList = this.convertTree(this.list);
  },
  methods: {
    convertTree (data) {
      var rootId = !isNaN(this.rootId) ? ~~this.rootId : this.rootId;
      var root_data = [];
      data.forEach((x) => {
        if (!x.children) x.children = [];
        if (x.parentId === rootId) {
          x.isRoot = true;
          if (!x.hasOwnProperty("enable")) x.enable = 1;
          root_data.push(x);
          this.getTree(x.id, x, data);
        }
      });
      return root_data;
    },
    getTree (id, node, data) {
      data.forEach((x) => {
        if (!x.hidden && x.parentId == id) {
          if (!node.children) node.children = [];
          node.children.push(x);
          this.getTree(x.id, x, data);
        }
      });
    },
    select (index, indexPath) {
      let _item = this.list.find((x) => {
        return x.id == index;
      });
      this.onSelect(index, _item);
      this.$router.push({ path: _item.path });
    },
    handleOpen () { },
    handleClose () { },
  },
};
</script>
<style scoped>
.vol-el-menu {
  box-sizing: content-box;
  width: 100%;
}
.vol-el-menu >>> .el-menu-item-group__title {
  padding: 0 !important;
}
.vol-el-menu >>> .horizontal-collapse-transition {
  transition: 0s width ease-in-out, 0s padding-left ease-in-out,
    0s padding-right ease-in-out;
}
</style>