m2-ui
Version:
The package is provided web components and utilities based on vue and element-ui.
94 lines (85 loc) • 2.42 kB
JavaScript
;
exports.__esModule = true;
var _utils = require('m2-ui/lib/utils');
var _utils2 = _interopRequireDefault(_utils);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = {
props: {
showMenu: {
type: Boolean,
default: false
},
config: {
type: Object,
default: function _default() {
return {
menus: {
active: '0',
map: {},
data: []
}
};
}
}
},
mounted: function mounted() {
this.handleMenuConfig();
},
data: function data() {
return {
menuList: [],
collapseClass: '',
activeIndex: ''
};
},
watch: {
config: {
handler: function handler(val) {
this.handleMenuConfig();
},
deep: true
}
},
methods: {
handleMenuConfig: function handleMenuConfig() {
var _config$menus = this.config.menus,
active = _config$menus.active,
map = _config$menus.map,
data = _config$menus.data;
this.activeIndex = active;
this.menuList = this.getMenuList(map, data);
},
getMenuList: function getMenuList(map, data) {
var _this = this;
return data.map(function (item) {
var menuItem = _utils2.default.getMapItem(item, map, 'key', 'text', 'url', 'level', 'pid');
var children = item[map.children] || item.children;
if (menuItem.pid === (map.root || '0')) {
menuItem.icon = item.icon ? 'iconfont el-icon-' + item.icon : 'iconfont el-icon-menu';
menuItem.title = item.alias || menuItem.text;
}
if (menuItem.level) {
menuItem.className = 'm2-menu-item-' + menuItem.level;
}
if (item.click) {
menuItem.click = item.click;
} else {
menuItem.click = function () {};
}
if (!!children && children.length > 0) {
menuItem.hasChildren = !!children && children.length > 0;
if (menuItem.hasChildren) {
menuItem.slotName = 'title';
menuItem.children = _this.getMenuList(map, children);
}
} else {
menuItem.slotName = 'default';
}
return menuItem;
});
},
handleToggleMenu: function handleToggleMenu(collapse) {
this.collapseClass = collapse ? 'nav-collapse' : '';
}
}
};