UNPKG

@mdsfe/mds-ui

Version:

A set of enterprise-class Vue UI components.

1,856 lines (1,710 loc) 65.1 kB
(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) {