@cw-devops/bk-magic-vue
Version:
基于蓝鲸 Magicbox 和 Vue 的前端组件库
772 lines (723 loc) • 24.8 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = global || self, factory(global.library = {}));
}(this, function (exports) { 'use strict';
var script = {
name: 'bk-navigation-menu-item',
inject: {
rootMenu: 'rootMenu',
parentMenu: {
default: null
},
rootNavigation: {
default: null
}
},
provide: function provide() {
return {
parentMenu: this
};
},
props: {
id: {
type: [String, Number],
required: true
},
disabled: Boolean,
icon: {
type: [String, Object, Array],
validator: function validator(v) {
return v.length;
}
},
hasChild: Boolean,
group: Boolean,
title: Boolean
},
data: function data() {
return {
collapse: false,
menuActive: false,
mouseover: false
};
},
computed: {
isActive: function isActive() {
return this.id === this.rootMenu.activeId;
},
activeBgColor: function activeBgColor() {
if (this.isActive) {
return this.rootMenu.defItemActiveBgColor;
} else if (!this.parentMenu) {
if (this.mouseover) {
return this.rootMenu.defItemHoverBgColor;
} else if (this.parentMenu && this.parentMenu.collapse || this.collapse) {
return this.defSubMenuOpenBgColor;
}
} else if (this.parentMenu && this.mouseover) {
return this.rootMenu.defItemHoverBgColor;
}
return '';
},
activeColor: function activeColor() {
if (this.isActive) {
return this.rootMenu.defItemActiveColor;
} else if (this.mouseover) {
return this.rootMenu.defItemHoverColor;
}
return this.rootMenu.defItemDefaultColor;
},
activeIconColor: function activeIconColor() {
if (this.isActive) {
return this.rootMenu.defItemActiveIconColor;
} else if (this.mouseover) {
return this.rootMenu.defItemHoverIconColor;
}
return this.rootMenu.defItemDefaultIconColor;
},
activeChildIconColor: function activeChildIconColor() {
if (this.isActive) {
return this.rootMenu.defItemChildIconActiveColor;
} else if (this.mouseover) {
return this.rootMenu.defItemChildIconHoverColor;
}
return this.rootMenu.defItemChildIconDefaultColor;
},
collapseBgColor: function collapseBgColor() {
return this.parentMenu && this.parentMenu.collapse || this.collapse ? this.rootMenu.defSubMenuOpenBgColor : this.rootMenu.defItemDefaultBgColor;
},
menuActiveBgColor: function menuActiveBgColor() {
if (this.rootMenu.navigationType && !this.parentMenu && this.menuActive) {
return this.rootMenu.defItemActiveBgColor;
} else if (this.rootMenu.navigationType && this.collapse) {
return this.rootMenu.defSubMenuOpenBgColor;
} else if (this.rootMenu.navigationType && this.mouseover) {
return this.rootMenu.defItemHoverBgColor;
}
return this.rootMenu.defItemDefaultBgColor;
},
menuActiveColor: function menuActiveColor() {
if (!this.parentMenu && this.menuActive) {
return this.rootMenu.defItemActiveColor;
} else if (this.mouseover && !this.collapse) {
return this.rootMenu.defItemHoverColor;
}
return this.rootMenu.defItemDefaultColor;
},
menuActiveIconColor: function menuActiveIconColor() {
if (!this.parentMenu && this.menuActive) {
return this.rootMenu.defItemActiveIconColor;
} else if (this.mouseover && !this.collapse) {
return this.rootMenu.defItemHoverIconColor;
}
return this.rootMenu.defItemDefaultIconColor;
}
},
watch: {
'rootMenu.activeId': {
handler: 'handlerActiveChange'
}
},
created: function created() {
if (this.isActive && this.parentMenu) {
if (this.rootMenu.uniqueOpened) {
this.parentMenu.collapse = this.rootNavigation ? this.rootNavigation.defaultOpen : true;
this.parentMenu.menuActive = this.rootNavigation ? !this.rootNavigation.defaultOpen : false;
} else {
this.parentMenu.collapse = !!this.rootNavigation;
this.parentMenu.menuActive = false;
}
this.rootMenu.handleSetItem(this);
this.rootMenu.handleSetSubMenu(this.parentMenu);
}
},
methods: {
handleMouseHover: function handleMouseHover(mouseover) {
this.mouseover = mouseover;
},
handlerActiveChange: function handlerActiveChange(newVal, oldVal) {
if (this.parentMenu && this.rootMenu) {
if (this.id === oldVal && this.rootMenu.uniqueOpened) {
if (this.rootMenu.parentId) {
if (this.rootMenu.toggleActive) {
this.parentMenu.collapse = this.rootMenu.parentId === this.parentMenu.id || !this.rootMenu.uniqueOpened;
} else {
this.parentMenu.collapse = !this.rootNavigation && this.rootMenu.uniqueOpened && this.rootMenu.parentId === this.parentMenu.id;
}
}
this.parentMenu.menuActive = false;
} else if (this.id === newVal) {
if (this.rootMenu.uniqueOpened) {
this.parentMenu.collapse = this.rootNavigation ? this.rootMenu.toggleActive : true;
this.parentMenu.menuActive = this.rootNavigation && !this.rootMenu.toggleActive;
} else {
this.parentMenu.collapse = true;
this.parentMenu.menuActive = false;
}
this.rootMenu.handleSetItem(this);
this.rootMenu.handleSetSubMenu(this.parentMenu);
}
}
},
handleClick: function handleClick(e) {
if (this.disabled || this.title) {
e.preventDefault();
return;
} else if (e.metaKey || e.ctrlKey) {
return;
}
e.preventDefault();
this.rootMenu.$emit('item-click', this);
this.$emit('click', this.id);
},
handleSbmenuClick: function handleSbmenuClick() {
if (!this.disabled) {
if (this.collapse) {
this.handleClose();
} else {
this.handleOpen();
}
this.rootMenu.$emit('sub-menu-click', this);
this.$emit('sub-menu-click', this.id);
}
},
handleClose: function handleClose() {
this.collapse = false;
this.$emit('close', this.id);
},
handleOpen: function handleOpen() {
this.collapse = true;
this.$emit('open', this.id);
},
beforeEnter: function beforeEnter(el) {
el.classList.add('collapse-transition');
el.style.background = this.collapseBgColor;
el.style.marginTop = '-4px';
el.style.height = '0';
},
enter: function enter(el, done) {
el.dataset.oldOverflow = el.style.overflow;
if (el.scrollHeight !== 0) {
el.style.height = el.scrollHeight + 'px';
} else {
el.style.height = '';
}
el.style.overflow = 'hidden';
},
afterEnter: function afterEnter(el) {
el.classList.remove('collapse-transition');
el.style.height = '';
el.style.overflow = el.dataset.oldOverflow;
},
beforeLeave: function beforeLeave(el) {
el.dataset.oldOverflow = el.style.overflow;
el.style.height = el.scrollHeight + 'px';
el.style.overflow = 'hidden';
},
leave: function leave(el, done) {
if (el.scrollHeight !== 0) {
el.classList.add('collapse-transition');
el.style.height = 0;
}
},
afterLeave: function afterLeave(el) {
el.classList.remove('collapse-transition');
el.style.height = '';
el.style.overflow = el.dataset.oldOverflow;
}
}
};
function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier
, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {
if (typeof shadowMode !== 'boolean') {
createInjectorSSR = createInjector;
createInjector = shadowMode;
shadowMode = false;
}
var options = typeof script === 'function' ? script.options : script;
if (template && template.render) {
options.render = template.render;
options.staticRenderFns = template.staticRenderFns;
options._compiled = true;
if (isFunctionalTemplate) {
options.functional = true;
}
}
if (scopeId) {
options._scopeId = scopeId;
}
var hook;
if (moduleIdentifier) {
hook = function hook(context) {
context = context ||
this.$vnode && this.$vnode.ssrContext ||
this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
context = __VUE_SSR_CONTEXT__;
}
if (style) {
style.call(this, createInjectorSSR(context));
}
if (context && context._registeredComponents) {
context._registeredComponents.add(moduleIdentifier);
}
};
options._ssrRegister = hook;
} else if (style) {
hook = shadowMode ? function () {
style.call(this, createInjectorShadow(this.$root.$options.shadowRoot));
} : function (context) {
style.call(this, createInjector(context));
};
}
if (hook) {
if (options.functional) {
var originalRender = options.render;
options.render = function renderWithStyleInjection(h, context) {
hook.call(context);
return originalRender(h, context);
};
} else {
var existing = options.beforeCreate;
options.beforeCreate = existing ? [].concat(existing, hook) : [hook];
}
}
return script;
}
var normalizeComponent_1 = normalizeComponent;
/* script */
var __vue_script__ = script;
/* template */
var __vue_render__ = function __vue_render__() {
var _vm = this;
var _h = _vm.$createElement;
var _c = _vm._self._c || _h;
return _vm.hasChild ? _c('div', {
staticClass: "navigation-sbmenu",
class: {
'is-disabled': _vm.disabled
},
attrs: {
"disabled": _vm.disabled,
"group": _vm.group
}
}, [_c('div', {
staticClass: "navigation-sbmenu-title",
style: {
background: _vm.menuActiveBgColor
},
on: {
"mouseover": function mouseover($event) {
if ($event.target !== $event.currentTarget) {
return null;
}
_vm.handleMouseHover(!_vm.disabled);
},
"mouseleave": function mouseleave($event) {
if ($event.target !== $event.currentTarget) {
return null;
}
_vm.handleMouseHover(false);
},
"click": function click($event) {
$event.stopPropagation();
$event.preventDefault();
return _vm.handleSbmenuClick($event);
}
}
}, [_vm.icon ? _c('span', {
staticClass: "bk-icon navigation-sbmenu-title-icon",
class: _vm.icon,
style: {
color: _vm.menuActiveIconColor
}
}) : _vm._e(), _c('span', {
staticClass: "navigation-sbmenu-title-content",
style: {
color: _vm.menuActiveColor
}
}, [_vm._t("default")], 2), _c('span', {
staticClass: "navigation-sbmenu-title-arrow",
style: {
transform: _vm.collapse ? 'rotate(90deg)' : 'rotate(0deg)',
color: _vm.menuActiveColor
}
}, [_c('svg', {
staticClass: "bk-icon",
staticStyle: {
"width": "1em",
"height": "1em",
"vertical-align": "middle",
"fill": "currentColor",
"overflow": "hidden"
},
attrs: {
"viewBox": "0 0 16 16",
"version": "1.1",
"xmlns": "http://www.w3.org/2000/svg"
}
}, [_c('path', {
attrs: {
"d": "M6.19 13.44l-1.13-1.13 4.13-4.12-4.13-4.13 1.13-1.12 5.25 5.25-5.25 5.25z"
}
})])])]), _c('transition', {
attrs: {
"css": false
},
on: {
"before-enter": _vm.beforeEnter,
"enter": _vm.enter,
"after-enter": _vm.afterEnter,
"before-leave": _vm.beforeLeave,
"leave": _vm.leave,
"after-leave": _vm.afterLeave
}
}, [_c('div', {
directives: [{
name: "show",
rawName: "v-show",
value: _vm.collapse,
expression: "collapse"
}],
staticClass: "navigation-sbmenu-content"
}, [_vm._t("child")], 2)])], 1) : _c('a', {
staticClass: "navigation-menu-item",
class: {
'is-disabled': _vm.disabled,
'group-theme': _vm.rootMenu.navigationType !== 'left-right'
},
style: {
background: _vm.activeBgColor,
color: _vm.activeColor
},
attrs: {
"group": _vm.group,
"disabled": _vm.disabled
},
on: {
"click": function click($event) {
$event.stopPropagation();
_vm.handleClick($event);
},
"mouseover": function mouseover($event) {
if ($event.target !== $event.currentTarget) {
return null;
}
!_vm.title && _vm.handleMouseHover(!_vm.disabled);
},
"mouseleave": function mouseleave($event) {
if ($event.target !== $event.currentTarget) {
return null;
}
_vm.handleMouseHover(false);
}
}
}, [_vm.icon ? _c('span', {
staticClass: "bk-icon navigation-menu-item-icon",
class: _vm.icon,
style: {
color: _vm.activeIconColor
}
}) : _vm.parentMenu && _vm.parentMenu.hasChild ? _c('span', {
staticClass: "navigation-menu-item-default"
}, [_c('i', {
staticClass: "navigation-menu-item-default-icon",
style: {
backgroundColor: _vm.activeChildIconColor
}
})]) : _vm._e(), _c('span', {
staticClass: "navigation-menu-item-name",
style: {
color: _vm.activeColor
}
}, [_vm._t("default")], 2)]);
};
var __vue_staticRenderFns__ = [];
/* style */
var __vue_inject_styles__ = undefined;
/* scoped */
var __vue_scope_id__ = undefined;
/* module identifier */
var __vue_module_identifier__ = undefined;
/* functional template */
var __vue_is_functional_template__ = false;
/* style inject */
/* style inject SSR */
/* style inject shadow dom */
var __vue_component__ = /*#__PURE__*/normalizeComponent_1({
render: __vue_render__,
staticRenderFns: __vue_staticRenderFns__
}, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, undefined, undefined, undefined);
var _defined = function (it) {
if (it == undefined) throw TypeError("Can't call method on " + it);
return it;
};
var _toObject = function (it) {
return Object(_defined(it));
};
var hasOwnProperty = {}.hasOwnProperty;
var _has = function (it, key) {
return hasOwnProperty.call(it, key);
};
var toString = {}.toString;
var _cof = function (it) {
return toString.call(it).slice(8, -1);
};
var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
return _cof(it) == 'String' ? it.split('') : Object(it);
};
var _toIobject = function (it) {
return _iobject(_defined(it));
};
var ceil = Math.ceil;
var floor = Math.floor;
var _toInteger = function (it) {
return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};
var min = Math.min;
var _toLength = function (it) {
return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0;
};
var max = Math.max;
var min$1 = Math.min;
var _toAbsoluteIndex = function (index, length) {
index = _toInteger(index);
return index < 0 ? max(index + length, 0) : min$1(index, length);
};
var _arrayIncludes = function (IS_INCLUDES) {
return function ($this, el, fromIndex) {
var O = _toIobject($this);
var length = _toLength(O.length);
var index = _toAbsoluteIndex(fromIndex, length);
var value;
if (IS_INCLUDES && el != el) while (length > index) {
value = O[index++];
if (value != value) return true;
} else for (;length > index; index++) if (IS_INCLUDES || index in O) {
if (O[index] === el) return IS_INCLUDES || index || 0;
} return !IS_INCLUDES && -1;
};
};
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
var _core = createCommonjsModule(function (module) {
var core = module.exports = { version: '2.6.12' };
if (typeof __e == 'number') __e = core;
});
var _core_1 = _core.version;
var _global = createCommonjsModule(function (module) {
var global = module.exports = typeof window != 'undefined' && window.Math == Math
? window : typeof self != 'undefined' && self.Math == Math ? self
: Function('return this')();
if (typeof __g == 'number') __g = global;
});
var _shared = createCommonjsModule(function (module) {
var SHARED = '__core-js_shared__';
var store = _global[SHARED] || (_global[SHARED] = {});
(module.exports = function (key, value) {
return store[key] || (store[key] = value !== undefined ? value : {});
})('versions', []).push({
version: _core.version,
mode: 'pure' ,
copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
});
});
var id = 0;
var px = Math.random();
var _uid = function (key) {
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};
var shared = _shared('keys');
var _sharedKey = function (key) {
return shared[key] || (shared[key] = _uid(key));
};
var arrayIndexOf = _arrayIncludes(false);
var IE_PROTO = _sharedKey('IE_PROTO');
var _objectKeysInternal = function (object, names) {
var O = _toIobject(object);
var i = 0;
var result = [];
var key;
for (key in O) if (key != IE_PROTO) _has(O, key) && result.push(key);
while (names.length > i) if (_has(O, key = names[i++])) {
~arrayIndexOf(result, key) || result.push(key);
}
return result;
};
var _enumBugKeys = (
'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');
var _objectKeys = Object.keys || function keys(O) {
return _objectKeysInternal(O, _enumBugKeys);
};
var _aFunction = function (it) {
if (typeof it != 'function') throw TypeError(it + ' is not a function!');
return it;
};
var _ctx = function (fn, that, length) {
_aFunction(fn);
if (that === undefined) return fn;
switch (length) {
case 1: return function (a) {
return fn.call(that, a);
};
case 2: return function (a, b) {
return fn.call(that, a, b);
};
case 3: return function (a, b, c) {
return fn.call(that, a, b, c);
};
}
return function () {
return fn.apply(that, arguments);
};
};
var _isObject = function (it) {
return typeof it === 'object' ? it !== null : typeof it === 'function';
};
var _anObject = function (it) {
if (!_isObject(it)) throw TypeError(it + ' is not an object!');
return it;
};
var _fails = function (exec) {
try {
return !!exec();
} catch (e) {
return true;
}
};
var _descriptors = !_fails(function () {
return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});
var document = _global.document;
var is = _isObject(document) && _isObject(document.createElement);
var _domCreate = function (it) {
return is ? document.createElement(it) : {};
};
var _ie8DomDefine = !_descriptors && !_fails(function () {
return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;
});
var _toPrimitive = function (it, S) {
if (!_isObject(it)) return it;
var fn, val;
if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;
if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
throw TypeError("Can't convert object to primitive value");
};
var dP = Object.defineProperty;
var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
_anObject(O);
P = _toPrimitive(P, true);
_anObject(Attributes);
if (_ie8DomDefine) try {
return dP(O, P, Attributes);
} catch (e) { }
if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
if ('value' in Attributes) O[P] = Attributes.value;
return O;
};
var _objectDp = {
f: f
};
var _propertyDesc = function (bitmap, value) {
return {
enumerable: !(bitmap & 1),
configurable: !(bitmap & 2),
writable: !(bitmap & 4),
value: value
};
};
var _hide = _descriptors ? function (object, key, value) {
return _objectDp.f(object, key, _propertyDesc(1, value));
} : function (object, key, value) {
object[key] = value;
return object;
};
var PROTOTYPE = 'prototype';
var $export = function (type, name, source) {
var IS_FORCED = type & $export.F;
var IS_GLOBAL = type & $export.G;
var IS_STATIC = type & $export.S;
var IS_PROTO = type & $export.P;
var IS_BIND = type & $export.B;
var IS_WRAP = type & $export.W;
var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
var expProto = exports[PROTOTYPE];
var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] : (_global[name] || {})[PROTOTYPE];
var key, own, out;
if (IS_GLOBAL) source = name;
for (key in source) {
own = !IS_FORCED && target && target[key] !== undefined;
if (own && _has(exports, key)) continue;
out = own ? target[key] : source[key];
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
: IS_BIND && own ? _ctx(out, _global)
: IS_WRAP && target[key] == out ? (function (C) {
var F = function (a, b, c) {
if (this instanceof C) {
switch (arguments.length) {
case 0: return new C();
case 1: return new C(a);
case 2: return new C(a, b);
} return new C(a, b, c);
} return C.apply(this, arguments);
};
F[PROTOTYPE] = C[PROTOTYPE];
return F;
})(out) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;
if (IS_PROTO) {
(exports.virtual || (exports.virtual = {}))[key] = out;
if (type & $export.R && expProto && !expProto[key]) _hide(expProto, key, out);
}
}
};
$export.F = 1;
$export.G = 2;
$export.S = 4;
$export.P = 8;
$export.B = 16;
$export.W = 32;
$export.U = 64;
$export.R = 128;
var _export = $export;
var _objectSap = function (KEY, exec) {
var fn = (_core.Object || {})[KEY] || Object[KEY];
var exp = {};
exp[KEY] = exec(fn);
_export(_export.S + _export.F * _fails(function () { fn(1); }), 'Object', exp);
};
_objectSap('keys', function () {
return function keys(it) {
return _objectKeys(_toObject(it));
};
});
var keys = _core.Object.keys;
var keys$1 = keys;
function setInstaller (component, afterInstall) {
component.install = function (Vue) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var props = component.props || {};
keys$1(options).forEach(function (key) {
if (props.hasOwnProperty(key)) {
if (typeof props[key] === 'function' || props[key] instanceof Array) {
props[key] = {
type: props[key],
default: options[key]
};
} else {
props[key].default = options[key];
}
}
});
component.name = options.namespace ? component.name.replace('bk', options.namespace) : component.name;
Vue.component(component.name, component);
typeof afterInstall === 'function' && afterInstall(Vue, options);
};
}
setInstaller(__vue_component__);
exports.default = __vue_component__;
Object.defineProperty(exports, '__esModule', { value: true });
}));