@mdsfe/mds-ui
Version:
A set of enterprise-class Vue UI components.
1,856 lines (1,710 loc) • 65.1 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("vue"), require("./icon"), require("./_mixin/locale"), require("./checkbox"), require("./_util/merge"));
else if(typeof define === 'function' && define.amd)
define(["vue", "./icon", "./_mixin/locale", "./checkbox", "./_util/merge"], factory);
else {
var a = typeof exports === 'object' ? factory(require("vue"), require("./icon"), require("./_mixin/locale"), require("./checkbox"), require("./_util/merge")) : factory(root["Vue"], root["./icon"], root["./_mixin/locale"], root["./checkbox"], root["./_util/merge"]);
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(window, function(__WEBPACK_EXTERNAL_MODULE__2__, __WEBPACK_EXTERNAL_MODULE__7__, __WEBPACK_EXTERNAL_MODULE__9__, __WEBPACK_EXTERNAL_MODULE__28__, __WEBPACK_EXTERNAL_MODULE__48__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/dist/";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 104);
/******/ })
/************************************************************************/
/******/ ({
/***/ 0:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return normalizeComponent; });
/* globals __VUE_SSR_CONTEXT__ */
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
// This module is a runtime utility for cleaner component module output and will
// be included in the final webpack user bundle.
function normalizeComponent (
scriptExports,
render,
staticRenderFns,
functionalTemplate,
injectStyles,
scopeId,
moduleIdentifier, /* server only */
shadowMode /* vue-cli only */
) {
// Vue.extend constructor export interop
var options = typeof scriptExports === 'function'
? scriptExports.options
: scriptExports
// render functions
if (render) {
options.render = render
options.staticRenderFns = staticRenderFns
options._compiled = true
}
// functional template
if (functionalTemplate) {
options.functional = true
}
// scopedId
if (scopeId) {
options._scopeId = 'data-v-' + scopeId
}
var hook
if (moduleIdentifier) { // server build
hook = function (context) {
// 2.3 injection
context =
context || // cached call
(this.$vnode && this.$vnode.ssrContext) || // stateful
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
// 2.2 with runInNewContext: true
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
context = __VUE_SSR_CONTEXT__
}
// inject component styles
if (injectStyles) {
injectStyles.call(this, context)
}
// register component module identifier for async chunk inferrence
if (context && context._registeredComponents) {
context._registeredComponents.add(moduleIdentifier)
}
}
// used by ssr in case component is cached and beforeCreate
// never gets called
options._ssrRegister = hook
} else if (injectStyles) {
hook = shadowMode
? function () {
injectStyles.call(
this,
(options.functional ? this.parent : this).$root.$options.shadowRoot
)
}
: injectStyles
}
if (hook) {
if (options.functional) {
// for template-only hot-reload because in that case the render fn doesn't
// go through the normalizer
options._injectStyles = hook
// register for functional component in vue file
var originalRender = options.render
options.render = function renderWithStyleInjection (h, context) {
hook.call(context)
return originalRender(h, context)
}
} else {
// inject component registration as beforeCreate hook
var existing = options.beforeCreate
options.beforeCreate = existing
? [].concat(existing, hook)
: [hook]
}
}
return {
exports: scriptExports,
options: options
}
}
/***/ }),
/***/ 10:
/***/ (function(module, exports) {
module.exports = require("babel-runtime/helpers/typeof");
/***/ }),
/***/ 104:
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);
// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./components/cascaderpanel/panel.vue?vue&type=template&id=1352ea60&
var render = function () {
var _vm = this
var _h = _vm.$createElement
var _c = _vm._self._c || _h
return _c(
"div",
{
ref: "panel",
class: ["mds-cascader-panel", _vm.size, _vm.border && "is-bordered"],
style: {
"max-height": _vm.maxHeight,
},
},
_vm._l(_vm.expandedPanels, function (panel, index) {
return _c(
"div",
{ key: index, staticClass: "mds-cascader-panel-level" },
[
panel && panel.length
? [
_c(
"mds-scroll-bar",
_vm._l(panel, function (node) {
return _c("mds-cascader-option", {
key: node.key,
attrs: {
expandTrigger: _vm.expandTrigger,
checkStrictly: _vm.checkStrictly,
node: node,
},
on: {
"choose-node": _vm.chooseNode,
"change-multi-node": _vm.changeMultiNode,
"change-single-strict-node": _vm.changeSingleStrictNode,
},
})
}),
1
),
]
: [
_c("div", { staticClass: "mds-cascader-panel-empty-wrapper" }, [
_c("div", { staticClass: "mds-cascader-panel-empty-text" }, [
_vm._v(
"\n " +
_vm._s(
_vm.loading ? "加载中..." : _vm.dispatchCascaderText
) +
"\n "
),
]),
]),
],
],
2
)
}),
0
)
}
var staticRenderFns = []
render._withStripped = true
// CONCATENATED MODULE: ./components/cascaderpanel/panel.vue?vue&type=template&id=1352ea60&
// EXTERNAL MODULE: external "babel-runtime/helpers/extends"
var extends_ = __webpack_require__(26);
var extends_default = /*#__PURE__*/__webpack_require__.n(extends_);
// EXTERNAL MODULE: ./components/scroll-bar/index.js + 5 modules
var scroll_bar = __webpack_require__(27);
// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./components/cascaderpanel/option.vue?vue&type=template&id=48d0e24e&
var optionvue_type_template_id_48d0e24e_render = function () {
var _vm = this
var _h = _vm.$createElement
var _c = _vm._self._c || _h
return _c(
"li",
{
class: _vm.classes,
on: {
mouseenter: function ($event) {
$event.stopPropagation()
return _vm.handleHover($event)
},
click: function ($event) {
$event.stopPropagation()
return _vm.handleClick($event)
},
},
},
[
_vm.multiple && _vm.rendering
? _c("mds-checkbox", {
key: _vm.node.key,
staticClass: "mds-cascader-option-checkbox",
attrs: {
disabled: _vm.node.disabled,
checked: _vm.node.check,
indeterminate: _vm.node.indeterminate,
},
on: { change: _vm.handleMultiChange },
})
: _vm._e(),
_vm.isSingleStrict
? _c("mds-radio", {
attrs: { disabled: _vm.node.disabled, value: true },
on: { change: _vm.handleSingleStrictChange },
model: {
value: _vm.node.selected,
callback: function ($$v) {
_vm.$set(_vm.node, "selected", $$v)
},
expression: "node.selected",
},
})
: _vm._e(),
_c(
"div",
{ ref: "optionNode", class: "mds-cascader-option-label" },
[
_c("span", [_vm._v(_vm._s(_vm.node.label))]),
!_vm.node.isLeaf && !_vm.node.loading
? _c("mds-icon", { attrs: { type: "line-caret-right" } })
: _vm._e(),
_vm.node.loading
? _c("mds-icon", { attrs: { type: "line-sync", spin: "" } })
: _vm._e(),
],
1
),
],
1
)
}
var optionvue_type_template_id_48d0e24e_staticRenderFns = []
optionvue_type_template_id_48d0e24e_render._withStripped = true
// CONCATENATED MODULE: ./components/cascaderpanel/option.vue?vue&type=template&id=48d0e24e&
// EXTERNAL MODULE: external "babel-runtime/helpers/defineProperty"
var defineProperty_ = __webpack_require__(3);
var defineProperty_default = /*#__PURE__*/__webpack_require__.n(defineProperty_);
// EXTERNAL MODULE: external "./icon"
var external_icon_ = __webpack_require__(7);
var external_icon_default = /*#__PURE__*/__webpack_require__.n(external_icon_);
// EXTERNAL MODULE: external "./checkbox"
var external_checkbox_ = __webpack_require__(28);
var external_checkbox_default = /*#__PURE__*/__webpack_require__.n(external_checkbox_);
// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./components/cascaderpanel/option.vue?vue&type=script&lang=js&
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
/* harmony default export */ var optionvue_type_script_lang_js_ = ({
name: 'MdsCascaderOption',
components: {
MdsScrollBar: scroll_bar["a" /* default */],
MdsIcon: external_icon_default.a,
MdsCheckbox: external_checkbox_default.a
},
props: {
node: Object,
expandTrigger: String,
checkStrictly: Boolean
},
data: function data() {
return {
rendering: true
};
},
computed: {
hoverFlag: function hoverFlag() {
return this.expandTrigger === 'hover';
},
classes: function classes() {
var _ref;
var size = this.size,
active = this.active,
multiActive = this.multiActive;
return _ref = {}, defineProperty_default()(_ref, 'mds-cascader-option', true), defineProperty_default()(_ref, 'mds-cascader-option-' + size, true), defineProperty_default()(_ref, 'mds-cascader-option-active', active), defineProperty_default()(_ref, 'mds-cascader-option-multi-active', multiActive), defineProperty_default()(_ref, 'mds-cascader-option-disabled', this.node.disabled), _ref;
},
tree: function tree() {
return this.node.tree.$vue;
},
panel: function panel() {
return this.tree.$refs.panel;
},
size: function size() {
return this.tree.size;
},
multiple: function multiple() {
return this.tree.multiple;
},
active: function active() {
return !this.multiple && (this.node.selected || this.node.isExpanded);
},
multiActive: function multiActive() {
return this.multiple && (this.node.checked || this.node.isExpanded);
},
isSingleStrict: function isSingleStrict() {
return !this.multiple && this.checkStrictly;
},
isMultiStrict: function isMultiStrict() {
return this.multiple && this.checkStrictly;
}
},
methods: {
handleHover: function handleHover() {
if (!this.hoverFlag) {
return;
}
if (this.node.isLeaf) {
return;
}
this.handleClick();
},
// 点击选项文字区时的动作
handleClick: function handleClick() {
if (this.node.disabled) {
return;
}
this.$emit('choose-node', this.node);
},
// 选择多选框时的动作
handleMultiChange: function handleMultiChange() {
var _this = this;
if (this.node.disabled) {
return;
}
if (this.multiple && this.node.indeterminate) {
this.handleIndeterminate();
} else {
this.node.check = !this.node.check;
}
// 解决多选时全选不更新视图的问题
this.rendering = false;
this.$nextTick(function () {
_this.rendering = true;
});
this.$emit('change-multi-node', this.node);
},
// 处理多选时点击indeterminate态时的动作
handleIndeterminate: function handleIndeterminate() {
var activeChildNodes = this.node.childNodes.filter(function (node) {
return !node.disabled;
});
if (activeChildNodes.every(function (node) {
return node.checked;
})) {
this.node.check = false;
} else {
this.node.check = true;
}
},
// 选择单选框时的动作
handleSingleStrictChange: function handleSingleStrictChange(checkflag) {
var _this2 = this;
this.node.tree.nodesMap.forEach(function (node) {
if (node.key !== _this2.node.key) {
node.selected = false;
}
});
this.$emit('change-single-strict-node', this.node);
}
}
});
// CONCATENATED MODULE: ./components/cascaderpanel/option.vue?vue&type=script&lang=js&
/* harmony default export */ var cascaderpanel_optionvue_type_script_lang_js_ = (optionvue_type_script_lang_js_);
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
var componentNormalizer = __webpack_require__(0);
// CONCATENATED MODULE: ./components/cascaderpanel/option.vue
/* normalize component */
var component = Object(componentNormalizer["a" /* default */])(
cascaderpanel_optionvue_type_script_lang_js_,
optionvue_type_template_id_48d0e24e_render,
optionvue_type_template_id_48d0e24e_staticRenderFns,
false,
null,
null,
null
)
/* hot reload */
if (false) { var api; }
component.options.__file = "components/cascaderpanel/option.vue"
/* harmony default export */ var cascaderpanel_option = (component.exports);
// EXTERNAL MODULE: external "babel-runtime/core-js/get-iterator"
var get_iterator_ = __webpack_require__(25);
var get_iterator_default = /*#__PURE__*/__webpack_require__.n(get_iterator_);
// EXTERNAL MODULE: external "babel-runtime/core-js/map"
var map_ = __webpack_require__(31);
var map_default = /*#__PURE__*/__webpack_require__.n(map_);
// EXTERNAL MODULE: external "babel-runtime/helpers/typeof"
var typeof_ = __webpack_require__(10);
var typeof_default = /*#__PURE__*/__webpack_require__.n(typeof_);
// EXTERNAL MODULE: external "babel-runtime/helpers/classCallCheck"
var classCallCheck_ = __webpack_require__(34);
var classCallCheck_default = /*#__PURE__*/__webpack_require__.n(classCallCheck_);
// EXTERNAL MODULE: external "babel-runtime/helpers/createClass"
var createClass_ = __webpack_require__(35);
var createClass_default = /*#__PURE__*/__webpack_require__.n(createClass_);
// CONCATENATED MODULE: ./components/cascaderpanel/modal/cas-node.js
var defaultId = 0;
var cas_node_Node = function () {
function Node(options) {
classCallCheck_default()(this, Node);
this.id = defaultId++;
this.checked = false;
this.indeterminate = false;
this.data = null;
this.expanded = false;
this.parent = null;
this.isLeaf = false;
// 是否显示,用于搜索
this.visible = true;
for (var name in options) {
if (options.hasOwnProperty(name)) {
this[name] = options[name];
}
}
this.level = 0;
// 是否被选中
this.selected = false;
// 是否已经加载完毕,用于懒加载
this.loaded = false;
// 是否是加载中状态,用于懒加载
this.loading = false;
this.childNodes = [];
this.parent ? this.level = this.parent.level + 1 : this.level = 0;
this.update();
}
createClass_default()(Node, [{
key: 'update',
value: function update() {
var _this = this;
if (!this.data) {
this.handleIsLeaf();
return;
}
var data = this.data;
var prop = this.tree.prop;
// 生成_nodeId
// 非根节点添加到nodesMap中
this.fillNodesMap();
// 生成childNodes
var children = void 0;
// 根节点的情况把整个data作为children
if (Array.isArray(data) && this.level === 0) {
children = data;
this.id = 'root';
} else if (data.hasOwnProperty(prop.children)) {
children = data[prop.children];
} else {
if (!this.tree.load) this.isLeaf = true;
}
if (Array.isArray(children) && children.length > 0) {
children.forEach(function (data) {
_this.appendChild(data);
});
} else {
if (!this.tree.load) this.isLeaf = true;
}
this.handleIsLeaf();
}
}, {
key: 'handleIsLeaf',
value: function handleIsLeaf() {
// 懒加载且未加载的情况
if (this.tree.load && !this.loaded) {
this.isLeaf = this.getTrueData('isLeaf');
}
// 非懒加载或懒加载但已加载的情况
if (!this.tree.load || this.tree.load && this.loaded) {
var childNodes = this.childNodes;
this.isLeaf = !childNodes || childNodes.length === 0;
}
}
}, {
key: 'fillNodesMap',
value: function fillNodesMap() {
var key = this.key;
if (!key && this.level !== 0) {
throw new Error('必须指定节点的key');
}
if (key) {
// 处理初始选中的节点
this.handleSelectedKey(key);
if (this.tree.nodesMap.get(key)) {
throw new Error('节点的key不能重复');
}
this.tree.nodesMap.set(key, this);
}
}
}, {
key: 'handleSelectedKey',
value: function handleSelectedKey(key) {
this.selected = false;
if (this.tree.selectedKey === key) {
this.selected = true;
}
}
}, {
key: 'appendChild',
value: function appendChild(data, index) {
var child = new Node({
parent: this,
data: data,
tree: this.tree
});
if (index) {
this.childNodes.splice(index, 0, child);
} else {
this.childNodes.push(child);
}
}
}, {
key: 'getTrueData',
value: function getTrueData(prop) {
var props = this.tree.prop[prop];
var data = this.data;
if (!data) return;
if (data.hasOwnProperty(props)) {
return data[props];
} else if (data.hasOwnProperty(prop)) {
return data[prop];
} else {
return null;
}
}
}, {
key: 'loadNode',
value: function loadNode() {
var _this2 = this;
var node = this;
if (node.loaded || node.loading || node.childNodes.length > 0) {
return;
}
node.loading = true;
node.tree.load(node.data, function (data) {
if (!Array.isArray(data)) throw new Error('传入子元素必须是数组');
data.forEach(function (data) {
node.appendChild(data);
});
node.loading = false;
node.loaded = true;
node.check = false;
node.expanded = true;
_this2.handleIsLeaf();
});
}
}, {
key: 'getPath',
value: function getPath(nodeFlag) {
var arr = [];
var n = 0;
var node = this;
while (node.level > n) {
arr.push(nodeFlag ? node : node.data);
node = node.parent;
}
return arr;
}
}, {
key: 'handleCheckChange',
value: function handleCheckChange() {
var checked = this.checked;
this.childNodes.forEach(function (node) {
if (!node.disabled) {
node.check = checked;
}
});
if (this.parent) {
this.parent.handleChildCheckChange();
}
}
}, {
key: 'handleChildCheckChange',
value: function handleChildCheckChange() {
if (Array.isArray(this.data) || this.level === 0) {
return;
}
if (this.childNodes.length === this.checkedChildNodes.length && this.childNodes.length !== 0) {
this.checked = true;
this.indeterminate = false;
} else if (this.checkedChildNodes.length > 0) {
this.checked = false;
this.indeterminate = true;
} else {
this.checked = false;
this.indeterminate = false;
for (var i = 0; i < this.childNodes.length; i++) {
if (this.childNodes[i].indeterminate) {
this.indeterminate = true;
break;
}
}
}
this.parent.handleChildCheckChange();
}
}, {
key: 'after',
value: function after(node) {
var oldIndex = node.index;
node.parent.childNodes.splice(oldIndex, 1);
node.parent.handleChildCheckChange();
if (node.parent.childNodes.length === 0) {
node.parent.isLeaf = true;
}
node.parent = this.parent;
node.level = this.level;
this.parent.childNodes.splice(this.index + 1, 0, node);
this.handleChildCheckChange();
}
}, {
key: 'first',
value: function first(node) {
var oldIndex = node.index;
node.parent.childNodes.splice(oldIndex, 1);
node.parent.handleChildCheckChange();
if (node.parent.childNodes.length === 0) {
node.parent.isLeaf = true;
}
this.isLeaf = false;
node.parent = this;
node.level = this.level + 1;
this.childNodes.splice(0, 0, node);
this.handleChildCheckChange();
}
}, {
key: 'append',
value: function append(node) {
var oldIndex = node.index;
node.parent.childNodes.splice(oldIndex, 1);
node.parent.handleChildCheckChange();
if (node.parent.childNodes.length === 0) {
node.parent.isLeaf = true;
}
this.isLeaf = false;
node.parent = this;
node.level = this.level + 1;
this.childNodes.push(node);
this.handleChildCheckChange();
}
}, {
key: 'moveNode',
value: function moveNode(node, index) {
var oldIndex = node.index;
node.parent.childNodes.splice(oldIndex, 1);
node.parent.handleChildCheckChange();
if (node.parent.childNodes.length === 0) {
node.parent.isLeaf = true;
}
this.isLeaf = false;
node.parent = this;
node.level = this.level + 1;
if (index !== null) {
this.childNodes.splice(index, 0, node);
} else {
this.childNodes.push(node);
}
this.handleChildCheckChange();
}
}, {
key: 'remove',
value: function remove() {
var node = this;
var index = node.index;
node.parent.childNodes.splice(index, 1);
node.parent.handleChildCheckChange();
node.tree.nodesMap.delete(node.id);
node = null;
}
}, {
key: 'label',
get: function get() {
return this.getTrueData('label');
}
}, {
key: 'key',
get: function get() {
return this.getTrueData('key');
}
}, {
key: 'disabled',
get: function get() {
return this.getTrueData('disabled');
}
}, {
key: 'check',
get: function get() {
return this.checked;
},
set: function set(val) {
this.checked = val;
this.handleCheckChange();
}
}, {
key: 'siblingsNodes',
get: function get() {
var arr = [];
var currentNode = this;
this.parent.childNodes.forEach(function (node) {
if (node.id !== currentNode.id) {
arr.push(node);
}
});
return arr;
}
}, {
key: 'checkedChildNodes',
get: function get() {
var arr = [];
this.childNodes.forEach(function (node) {
if (node.checked) arr.push(node);
});
return arr;
}
}, {
key: 'indeterminateChildNodes',
get: function get() {
var arr = [];
this.childNodes.forEach(function (node) {
if (node.checked || node.indeterminate) arr.push(node);
});
return arr;
}
}, {
key: 'isExpanded',
get: function get() {
return this.expanded;
},
set: function set(value) {
this.expanded = value;
}
}, {
key: 'index',
get: function get() {
return this.parent.childNodes.indexOf(this);
}
}]);
return Node;
}();
// CONCATENATED MODULE: ./components/cascaderpanel/modal/cas-tree.js
var cas_tree_Tree = function () {
function Tree(options) {
var _this = this;
classCallCheck_default()(this, Tree);
for (var name in options) {
if (options.hasOwnProperty(name)) {
this[name] = options[name];
}
}
if (!this.prop || typeof_default()(this.prop) !== 'object') {
this.prop = {
label: 'label',
key: 'key',
isLeaf: 'isLeaf',
disabled: 'disabled',
children: 'children'
};
}
this.nodesMap = new map_default.a();
this.root = new cas_node_Node({
data: this.data,
tree: this
});
// 根据load函数渲染根节点
if (this.load) {
this.load(this.root, function (arr) {
if (!Array.isArray(arr)) {
throw new Error('传入子元素必须是数组');
}
arr.forEach(function (item) {
_this.root.appendChild(item);
});
});
}
}
createClass_default()(Tree, [{
key: 'setData',
value: function setData(newVal) {
var dataChange = newVal !== this.root.data;
if (dataChange) {
this.nodesMap = new map_default.a();
this.root = new cas_node_Node({
data: newVal,
tree: this
});
}
}
}, {
key: 'handleSelectedChange',
value: function handleSelectedChange(key) {
var selectedNode = this.nodesMap.get(key);
if (!selectedNode.selected) {
this.nodesMap.forEach(function (node, nodeKey) {
node.selected = false;
if (nodeKey === key) {
node.selected = true;
}
});
this.$tree.$emit('node-selected-change', selectedNode.data, selectedNode, selectedNode.getPath(), selectedNode.getPath(true));
}
}
}, {
key: 'handleDefaultCheckedKeys',
value: function handleDefaultCheckedKeys() {
var _this2 = this;
// 处理defaultCheckedKeys
if (this.defaultCheckedKeys) {
this.defaultCheckedKeys.forEach(function (item) {
_this2.nodesMap.get(item).check = true;
});
}
}
}, {
key: 'search',
value: function search(value) {
var _this3 = this;
var recursionChildren = function recursionChildren(node) {
var childNodes = node.root ? node.root.childNodes : node.childNodes;
childNodes.forEach(function (item) {
item.visible = _this3.searchNodeMethod.call(item, value, item.data, item);
recursionChildren(item);
});
// 子节点有匹配项的情况父节点需要显示
if (!node.visible && childNodes.length) {
var hiddenAllChildren = void 0;
hiddenAllChildren = !childNodes.some(function (child) {
return child.visible;
});
if (!node.root) {
node.visible = !hiddenAllChildren;
} else {
node.root.visible = false;
}
}
// 节点显示的情况下展开所有子节点
if (node.visible && !node.isLeaf && !_this3.load) {
node.changeExpanded(true);
}
};
recursionChildren(this);
}
}, {
key: 'getCheckedNodes',
value: function getCheckedNodes(leafOnly) {
var result = [];
if (leafOnly) {
this.nodesMap.forEach(function (item) {
if (item.checked && !item.data.children) {
result.push(item.data);
}
});
} else {
this.nodesMap.forEach(function (item) {
if (item.checked) {
result.push(item.data);
}
});
}
return result;
}
}, {
key: 'getCheckedKeys',
value: function getCheckedKeys(leafOnly) {
var result = [];
if (leafOnly) {
this.nodesMap.forEach(function (item) {
if (item.checked && !item.data.children) {
result.push(item.key);
}
});
} else {
this.nodesMap.forEach(function (item) {
if (item.checked) {
result.push(item.key);
}
});
}
return result;
}
}, {
key: 'setCheckedKeys',
value: function setCheckedKeys(checkArr) {
var _this4 = this;
if (!Array.isArray(checkArr)) {
throw new Error('需要输入一个key数组');
}
checkArr.forEach(function (item) {
_this4.nodesMap.get(item).check = true;
});
}
}, {
key: 'setChecked',
value: function setChecked(key, checkState) {
var node = this.nodesMap.get(key);
if (!node) {
throw new Error('请输入正确的key');
}
node.check = checkState;
}
}, {
key: 'getHalfCheckedNodes',
value: function getHalfCheckedNodes() {
var result = [];
this.nodesMap.forEach(function (item) {
if (item.indeterminate) {
result.push(item.data);
}
});
return result;
}
}, {
key: 'getHalfCheckedKeys',
value: function getHalfCheckedKeys() {
var result = [];
this.nodesMap.forEach(function (item) {
if (item.indeterminate) {
result.push(item.data.key);
}
});
return result;
}
}, {
key: 'getCurrentKey',
value: function getCurrentKey() {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = get_iterator_default()(this.nodesMap.values()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var item = _step.value;
if (item.selected) {
return item.data.key;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return null;
}
}, {
key: 'getCurrentNode',
value: function getCurrentNode() {
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = get_iterator_default()(this.nodesMap.values()), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var item = _step2.value;
if (item.selected) {
return item.data;
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return null;
}
}, {
key: 'setCurrentKey',
value: function setCurrentKey(key) {
if (key) {
this.handleSelectedChange(key);
} else {
this.nodesMap.forEach(function (node) {
node.selected = false;
});
}
}
}, {
key: 'getNode',
value: function getNode(key) {
var node = this.nodesMap.get(key);
if (node) {
return node;
}
return null;
}
}, {
key: 'getCheckNode',
value: function getCheckNode(nodeFlag) {
var arr = [];
this.nodesMap.forEach(function (item) {
if (item.checked) {
nodeFlag ? arr.push(item) : arr.push(item.data);
}
});
return arr;
}
}, {
key: 'getCheckNodeKey',
value: function getCheckNodeKey() {
var arr = [];
this.getCheckNode(true).forEach(function (node) {
arr.push(node.key);
});
return arr;
}
}, {
key: 'getIndeterminateNode',
value: function getIndeterminateNode(nodeFlag) {
var arr = [];
this.nodesMap.forEach(function (item) {
if (item.indeterminate) {
nodeFlag ? arr.push(item) : arr.push(item.data);
}
});
return arr;
}
}, {
key: 'getIndeterminateNodeKey',
value: function getIndeterminateNodeKey() {
var arr = [];
this.getIndeterminateNode(true).forEach(function (node) {
arr.push(node.key);
});
return arr;
}
}, {
key: 'setCheckNode',
value: function setCheckNode(keys) {
var bor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var nodesMap = this.nodesMap;
if (Array.isArray(keys)) {
keys.forEach(function (item) {
var node = nodesMap.get(item);
if (node) node.check = bor;
});
} else {
var node = nodesMap.get(keys);
if (node) nodesMap.get(keys).check = bor;
}
}
}, {
key: 'getCheckNodeTree',
value: function getCheckNodeTree() {
var _this5 = this;
var root = this.root;
if (Array.isArray(root.data)) {
var newTree = [];
root.indeterminateChildNodes.forEach(function (item) {
newTree.push(copyNode(item, _this5));
});
return newTree;
} else {
return copyNode(root, this);
}
}
}, {
key: 'clearCheckNode',
value: function clearCheckNode() {
this.nodesMap.forEach(function (item) {
item.checked = false;
item.indeterminate = false;
});
}
}, {
key: 'clearSelectedNode',
value: function clearSelectedNode() {
this.nodesMap.forEach(function (item) {
item.selected = false;
});
}
}, {
key: 'clearExpandNode',
value: function clearExpandNode() {
this.nodesMap.forEach(function (item) {
item.isExpanded = false;
});
}
}, {
key: 'appendNodes',
value: function appendNodes(key, nodes) {
var parent = this.nodesMap.get(key);
if (!parent) {
return;
}
if (Array.isArray(nodes)) {
if ((typeof nodes === 'undefined' ? 'undefined' : typeof_default()(nodes)) === 'object') {
nodes.forEach(function (item) {
parent.appendChild(item);
});
}
} else if ((typeof nodes === 'undefined' ? 'undefined' : typeof_default()(nodes)) === 'object') {
parent.appendChild(nodes);
}
}
}, {
key: 'deleteNodeByKey',
value: function deleteNodeByKey(keys) {
var _this6 = this;
if (Array.isArray(keys)) {
keys.forEach(function (item) {
var node = _this6.nodesMap.get(item);
if (node) node.remove();
});
} else {
var node = this.nodesMap.get(keys);
node.remove();
}
}
}]);
return Tree;
}();
var copyData = function copyData(data, tree) {
var newData = {};
for (var key in data) {
if (data.hasOwnProperty(key) && key !== tree.prop.children) {
newData[key] = data[key];
}
}
return newData;
};
var copyNode = function copyNode(node, tree) {
var newData = copyData(node.data, tree);
if (node.isLeaf) {
return newData;
}
newData[tree.prop.children] = [];
node.indeterminateChildNodes.forEach(function (item) {
newData[tree.prop.children].push(copyNode(item, tree));
});
return newData;
};
// EXTERNAL MODULE: external "./_util/merge"
var merge_ = __webpack_require__(48);
var merge_default = /*#__PURE__*/__webpack_require__.n(merge_);
// EXTERNAL MODULE: ./components/_util/util.js
var util = __webpack_require__(16);
// EXTERNAL MODULE: external "./_mixin/locale"
var locale_ = __webpack_require__(9);
var locale_default = /*#__PURE__*/__webpack_require__.n(locale_);
// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./components/cascaderpanel/panel.vue?vue&type=script&lang=js&
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
var DefaultProps = {
key: 'key',
label: 'label',
children: 'children',
leaf: 'leaf',
disabled: 'disabled'
};
/* harmony default export */ var panelvue_type_script_lang_js_ = ({
name: 'MdsCascaderPanel',
componentName: 'MdsCascaderPanel',
components: {
MdsCascaderOption: cascaderpanel_option,
MdsScrollBar: scroll_bar["a" /* default */]
},
mixins: [locale_default.a],
data: function data() {
return {
tree: null,
root: null,
loading: true,
expandedPanels: []
};
},
props: {
value: {},
options: {
type: [Array, Object]
},
expandTrigger: String,
emitPath: {
type: Boolean,
default: true
},
loadData: Function,
prop: {
default: function _default() {
return {
label: 'label',
key: 'key',
isLeaf: 'isLeaf',
disabled: 'disabled',
children: 'children'
};
}
},
size: {
type: String,
default: 'medium'
},
border: {
type: Boolean,
default: true
},
showAllLevels: {
type: Boolean,
default: true
},
multiple: Boolean,
filterable: Boolean,
separator: String,
maxHeight: {
type: String,
default: 'fit-content'
},
checkStrictly: Boolean
},
computed: {
isLazy: function isLazy() {
return Object(util["h" /* isFunction */])(this.loadData);
},
config: function config() {
return merge_default()(extends_default()({}, DefaultProps), this.prop || {});
},
label: function label() {
return this.prop && this.prop.label ? this.prop.label : 'label';
},
key: function key() {
return this.prop && this.prop.key ? this.prop.key : 'key';
},
isSingleStrict: function isSingleStrict() {
return !this.multiple && this.checkStrictly;
},
isMultiStrict: function isMultiStrict() {
return this.multiple && this.checkStrictly;
},
isCascader: function isCascader() {
var parent = this.$parent;
while (parent) {
if (parent.$options.name !== 'MdsCascader') {
parent = parent.$parent;
} else {
this.parent = parent;
return true;
}
}
return false;
},
dispatchCascaderText: function dispatchCascaderText() {
return this.t('mds.cascader.noData');
}
},
watch: {
options: {
handler: function handler() {
this.initTree();
},
deep: true
}
},
methods: {
/**
* 初始化面板数据
*/
initTree: function initTree() {
if (this.isLazy && this.options) {
throw new Error('不支持同时传入 loadData 和 options 属性');
}
this.tree = new cas_tree_Tree({
$vue: this,
prop: this.config,
data: this.options,
load: this.loadData,
isLazy: this.isLazy
});
this.root = this.tree.root;
this.expandedPanels = [this.root.childNodes];
if (this.filterable) {
this.initfilterOptions();
}
},
/**
* 面板选中某项后的动作
*/
chooseNode: function chooseNode(node) {
if (!this.handleUnChange(node)) {
return;
}
var path = node.getPath(true).reverse();
var data = node.data;
// 单选不关联
if (this.isSingleStrict) {
node.tree.clearExpandNode();
if (!node.isLeaf) {
this.emitExpandChange(path, data);
}
this.expandNode(node);
return;
}
// 清空选中项和展开项,重新计算
node.tree.clearSelectedNode();
node.tree.clearExpandNode();
if (!this.multiple) {
if (node.isLeaf) {
node.selected = true;
this.emitChange(path, data);
} else {
this.emitExpandChange(path, data);
}
this.expandNode(node);
} else {
this.emitExpandChange(path, data);
this.expandNode(node);
}
},
// 处理未改变的情况
handleUnChange: function handleUnChange(node) {
// 非多选
if (!this.multiple) {
if (node.isLeaf) {
// 叶子节点已经选中不触发change事件
if (node.selected) {
return false;
}
} else {
// 非叶子节点已经展开,且为倒数第二级则不触发展开事件
if (node.isExpanded && node.childNodes.length && node.childNodes[0].isLeaf) {
return false;
}
}
return true;
}
// 多选
if (this.multiple) {
// 非叶子节点已经展开,且为倒数第二级则不触发展开事件
if (node.isExpanded && node.childNodes.length && node.childNodes[0].isLeaf) {
return false;
}
return true;
}
},
/**
* 多选选中某项后的动作
*/
changeMultiNode: function changeMultiNode(node) {
var _this2 = this;
var multiTags = [];
node.tree.nodesMap.forEach(function (item) {
if (item.checked && item.isLeaf) {
multiTags.push(item);
}
});
var multiPath = [];
var multiData = [];
multiTags.forEach(function (node) {
var path = void 0;
if (_this2.emitPath) {
path = node.getPath().reverse().map(function (item) {
return item[_this2.key];
});
} else {
path = node.key;
}
multiPath.push(path);
multiData.push(node.data);
});
if (this.isCascader) {
this.$emit('set-multi-tags', multiTags, multiPath, multiData);
} else {
this.$emit('change', multiPath, multiData);
}
},
/**
* 单选框改变后的动作
*/
changeSingleStrictNode: function changeSingleStrictNode(node) {
var path = node.getPath(true).reverse();
var data = node.data;
this.emitChange(path, data);
},
/**
* 弹射change事件
*/
emitChange: function emitChange(path, data) {
if (this.isCascader) {
this.$emit('change', path, data);
} else {
var emitPath = this.emitPath ? path.map(function (item) {
return item.key;
}) : path.map(function (item) {
return item.key;
})[path.length - 1];
this.$emit('change', emitPath, data);
}
},
/**
* 控制展开下级面板
*/
expandNode: function expandNode(node) {
if (this.isLazy) {
this.lazyLoad(node);
} else {
this.panelLoad(node);
}
},
/**
* 非懒加载展开面板
*/
panelLoad: function panelLoad(node) {
var path = node.getPath(true).reverse();
var panels = [];
var levelList = [node.tree.root.childNodes];
var i = 0;
while (levelList.length > 0) {
var tempList = levelList.shift();
panels.push(tempList);
tempList.find(function (item) {
if (path[i] && item.key === path[i].key && !item.isLeaf) {
item.isExpanded = true;
levelList.push(item.childNodes);
return true;
}
});
i++;
}
this.expandedPanels = panels;
this.emitResetPanelMaxWidth();
},
emitResetPanelMaxWidth: function emitResetPanelMaxWidth() {
this.$emit('reset-panel-max-width');
},
/**
* 懒加载数据
*/
lazyLoad: function lazyLoad(node) {
var _this3 = this;
// 标记是否需要异步懒加载
var needLoad = false;
var path = node.getPath(true).reverse();
var panels = [];
var levelList = [node.tree.root.childNodes];
var i = 0;
while (levelList.length > 0) {
var tempList = levelList.shift();
panels.push(tempList);
tempList.find(function (item) {
if (path[i] && item.key === path[i].key && !item.isLeaf) {
item.isExpanded = true;
if (!item.loaded) {
needLoad = true;
// 当前点击节点走懒加载
item.loading = true;
_this3.loading = true;
var _this = _this3;
_this3.loadData(node, function (data) {
if (!Array.isArray(data)) {
throw new Error('传入子元素必须是数组');
}
data.forEach(function (data) {
node.appendChild(data);
});
node.loading = false;
node.loaded = true;
node.check = false;
node.handleIsLeaf();
panels.push(node.childNodes);
_this.expandedPanels = panels;
_this.loading = false;
_this3.emitResetPanelMaxWidth();
});
} else {
levelList.push(item.childNodes);
return true;
}
}
});
i++;
}
this.expandedPanels = panels;
if (!needLoad) {
this.emitResetPanelMaxWidth();
}
},
/**
* 弹射expandchange事件
*/
emitExpandChange: function emitExpandChange(path, data) {
if (this.isCascader) {
this.$emit('expand-change', path, data);
} else {
this.$emit('expand-change', path.map(function (item) {
return item.key;
}), data);
}
},
/**
* 初始化展开数据
*/
setDefaultExpand: function setDefaultExpand(val) {
var _this4 = this;
if (!val || !val.length) return;
var targetKey = Array.isArray(val) ? val[val.length - 1] : val;
var node = this.tree.nodesMap.get(targetKey);
if (!node) {
this.$emit('clearInput');
return;
}
var path = this.getDefaultPath(node);
var tempPath = path.map(function (item) {
if (item.key === targetKey) {
_this4.expandNode(item);
item.selected = true;
}
return item;
});
if (this.isCascader) {
this.$emit('change', tempPath, node, true);
}
},
/**
* 初始化多选展开数据
*/
setMultiDefaultExpand: function setMultiDefaultExpand(val) {
var tempTags = Array.isArray(val) ? val : [val];
var tempMaps = {};
tempTags.forEach(function (item) {
tempMaps[item] = true;
});
var multiTags = [];
var nodeMap = this.tree.nodesMap;
nodeMap.forEach(function (node) {
if (tempMaps[node.key] && node.isLeaf) {
node.check = true;
multiTags.push(node);
}
});
this.$emit('set-multi-tags', multiTags);
},
/**
* 获取初始路径
*/
getDefaultPath: function getDefaultPath(node) {
var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (!node.data) return path;
path.unshift(node);
if (node.parent && node.level > 1) {