UNPKG

@fe6/water-pro

Version:

An enterprise-class UI design language and Vue-based implementation

297 lines (247 loc) 10.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _vue = require("vue"); var _shared = require("@fe6/shared"); var _useConfigInject2 = _interopRequireDefault(require("../../_util/hooks/useConfigInject")); var _vueTypes = _interopRequireDefault(require("../../_util/vue-types")); var _containerScroll = _interopRequireDefault(require("../../container-scroll")); var _checkbox = _interopRequireDefault(require("../../checkbox")); var _OneCheckbox = _interopRequireDefault(require("./OneCheckbox")); var _utils = require("./utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var _default2 = (0, _vue.defineComponent)({ inheritAttrs: false, props: { prefixCls: _vueTypes.default.string, preWidth: _vueTypes.default.number.def(160), preHeight: _vueTypes.default.number.def(270), showArrow: _vueTypes.default.bool, options: _vueTypes.default.array, fieldNames: _vueTypes.default.object.def((0, _shared.clone)(_utils.defaultFields)), // value: PropTypes.array, value: _vueTypes.default.object, level: _vueTypes.default.number, oneCode: _vueTypes.default.number, twoCode: _vueTypes.default.number // 用于二级匹配 半选 和 选中 }, emits: ['change', 'click', 'all-change'], setup: function setup(props, _ref) { var emit = _ref.emit; var _useConfigInject = (0, _useConfigInject2.default)('checkbox-cascader', props), prefixClsNew = _useConfigInject.prefixCls; var theFields = (0, _vue.computed)(function () { return _extends(_extends({}, _utils.defaultFields), props.fieldNames); }); var oneChange = function oneChange(status, item) { emit('change', status, item); }; var oneClick = function oneClick(itemIdx) { emit('click', itemIdx); }; var selectValue = (0, _vue.ref)([]); // value 全选中集合 var halfValue = (0, _vue.ref)([]); // value 半选集合 // 检查一级 var checkOne = function checkOne() { selectValue.value = []; halfValue.value = []; // 选中 | 半选 if (!!props.value && !(0, _shared.isEmpty)(props.value)) { props.options.forEach(function (oneItem) { var isHalf = 1; // 一级存在已选值当中,不是半选就是选中 if ((0, _shared.hasOwn)(props.value, String(oneItem[theFields.value.value]))) { if ((0, _shared.hasOwn)(oneItem, theFields.value.children)) { oneItem[theFields.value.children].forEach(function (twoItem) { // 二级存在已选值当中,不是半选就是选中 if ((0, _shared.hasOwn)(props.value[oneItem[theFields.value.value]], String(twoItem[theFields.value.value]))) { if (isHalf !== 2) { isHalf = twoItem[theFields.value.children].length > props.value[oneItem[theFields.value.value]][twoItem[theFields.value.value]].length ? 2 : 3; } } else { isHalf = 2; } }); if (isHalf === 2) { halfValue.value.push(String(oneItem[theFields.value.value])); } else { selectValue.value.push(String(oneItem[theFields.value.value])); } } } }); } }; // 检查二级 var checkTwo = function checkTwo() { selectValue.value = []; halfValue.value = []; // 选中 if (!!props.value && !(0, _shared.isEmpty)(props.value)) { // 点击展开二级的时候 if (props.oneCode > -1) { props.options.forEach(function (twoItem) { var _a, _b, _c, _d; if ((0, _shared.hasOwn)((_a = props.value) === null || _a === void 0 ? void 0 : _a[props.oneCode], twoItem[theFields.value.value])) { if (twoItem[theFields.value.children].length > ((_d = (_c = (_b = props.value) === null || _b === void 0 ? void 0 : _b[props.oneCode]) === null || _c === void 0 ? void 0 : _c[twoItem[theFields.value.value]]) === null || _d === void 0 ? void 0 : _d.length)) { halfValue.value.push(String(twoItem[theFields.value.value])); } else { selectValue.value.push(String(twoItem[theFields.value.value])); } } }); } } }; var checkThree = function checkThree() { if ((0, _shared.isEmpty)(props.value) || !props.value) { selectValue.value = []; halfValue.value = []; } else { halfValue.value = []; if (props.oneCode > -1 && props.twoCode > -1 && (0, _shared.hasOwn)(props.value, String(props.oneCode)) && (0, _shared.hasOwn)(props.value[props.oneCode], String(props.twoCode))) { selectValue.value = props.value[props.oneCode][props.twoCode].slice(); } else { selectValue.value = []; } } }; // 全选按钮是否选中或半选 var isAllChecked = (0, _vue.ref)(false); var isAllHalf = (0, _vue.ref)(false); var allOneDatas = (0, _vue.ref)([]); var allTwoDatas = (0, _vue.ref)([]); var allThreeDatas = (0, _vue.ref)([]); var checkAll = function checkAll() { isAllChecked.value = false; isAllHalf.value = false; if (!!props.value && !(0, _shared.isEmpty)(props.value)) { var oneKeys = (0, _shared.keys)(props.value); var twoKeyLength = 0; var threeKeyLength = 0; oneKeys.forEach(function (oneItem) { var twoKeys = (0, _shared.keys)(props.value[oneItem]); twoKeyLength += twoKeys.length; twoKeys.forEach(function (twoItem) { threeKeyLength += props.value[oneItem][twoItem].length; }); }); isAllChecked.value = oneKeys.length === allOneDatas.value.length && twoKeyLength === allTwoDatas.value.length && threeKeyLength === allThreeDatas.value.length; isAllHalf.value = !isAllChecked.value; } }; var getLevel1Datas = function getLevel1Datas() { allOneDatas.value = []; allTwoDatas.value = []; allThreeDatas.value = []; if (props.level === 1 && props.options.length > 0) { props.options.forEach(function (oneItem) { allOneDatas.value.push(oneItem[theFields.value.value]); if ((0, _shared.hasOwn)(oneItem, theFields.value.children) && oneItem[theFields.value.children].length > 0) { oneItem[theFields.value.children].forEach(function (twoItem) { allTwoDatas.value.push(twoItem[theFields.value.value]); if ((0, _shared.hasOwn)(twoItem, theFields.value.children) && twoItem[theFields.value.children].length > 0) { twoItem[theFields.value.children].forEach(function (threeItem) { allThreeDatas.value.push(threeItem[theFields.value.value]); }); } }); } }); } }; var allChange = function allChange(_ref2) { var target = _ref2.target; emit('all-change', target === null || target === void 0 ? void 0 : target.checked); }; var checkSelects = function checkSelects() { if (props.level === 1) { getLevel1Datas(); checkOne(); checkAll(); } else if (props.level === 2) { checkTwo(); } else { checkThree(); } }; (0, _vue.watch)(function () { return props.options; }, getLevel1Datas, { deep: true }); (0, _vue.watch)(function () { return props.value; }, checkSelects, { deep: true }); (0, _vue.watch)(function () { return props.oneCode; }, checkSelects); (0, _vue.watch)(function () { return props.twoCode; }, checkSelects); // FIX 有值显示不选中 (0, _vue.onMounted)(checkSelects); return { prefixClsNew: prefixClsNew, theFields: theFields, isAllChecked: isAllChecked, isAllHalf: isAllHalf, allChange: allChange, oneChange: oneChange, oneClick: oneClick, selectValue: selectValue, halfValue: halfValue }; }, render: function render() { var _this = this; var theAll = null; var theHeigth = this.preHeight; if (this.level === 1) { theAll = (0, _vue.createVNode)("div", { "class": "".concat(this.prefixClsNew, "-all") }, [(0, _vue.createVNode)(_checkbox.default, { "checked": this.isAllChecked, "indeterminate": this.isAllHalf, "onChange": this.allChange }, null), (0, _vue.createVNode)("span", { "style": "padding-left: 8px" }, [(0, _vue.createTextVNode)("\u5168\u9009")])]); theHeigth = this.preHeight - 30; } var theCheckboxs = []; if (this.options.length > 0) { theCheckboxs = this.options.map(function (items, itemIdx) { var _a; var isCheck = _this.selectValue.includes(String(items[_this.theFields.value])); var indeterminate = _this.halfValue.includes(String(items[_this.theFields.value])); return (0, _vue.createVNode)(_OneCheckbox.default, { "checked": isCheck, "indeterminate": indeterminate, "text": items[(_a = _this.theFields) === null || _a === void 0 ? void 0 : _a.label], "showArrow": _this.showArrow, "onChange": function onChange(status) { return _this.oneChange(status, items, itemIdx); }, "onClick": function onClick() { return _this.oneClick(itemIdx); } }, null); }); } return (0, _vue.createVNode)("div", { "class": "".concat(this.prefixClsNew, "-item"), "style": { width: "".concat(this.preWidth, "px") } }, [theAll, (0, _vue.createVNode)(_containerScroll.default, { "style": { height: "".concat(theHeigth, "px") } }, { default: function _default() { return [theCheckboxs]; } })]); } }); exports.default = _default2;