UNPKG

@fe6/water-pro

Version:

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

447 lines (378 loc) 16.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _vue = require("vue"); var _iconsVue = require("@ant-design/icons-vue/lib/icons"); var _shared = require("@fe6/shared"); var _popover = _interopRequireDefault(require("../../../../popover")); var _checkbox = _interopRequireDefault(require("../../../../checkbox")); var _divider = _interopRequireDefault(require("../../../../divider")); var _button = _interopRequireDefault(require("../../../../button")); var _containerScroll = _interopRequireDefault(require("../../../../container-scroll/container-scroll")); var _tooltip = _interopRequireDefault(require("../../../../tooltip")); var _useConfigInject2 = _interopRequireDefault(require("../../../../_util/hooks/useConfigInject")); var _dom = require("../../../../_util/dom"); var _useSortable2 = require("../../../../_util/hooks/use-sortable"); var _useTableContext = require("../../hooks/use-table-context"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } 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); } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var _default2 = (0, _vue.defineComponent)({ name: 'ColumnSetting', components: _defineProperty({ SettingOutlined: _iconsVue.SettingOutlined, DragOutlined: _iconsVue.DragOutlined, ContainerScroll: _containerScroll.default, Divider: _divider.default, LeftOutlined: _iconsVue.LeftOutlined, RightOutlined: _iconsVue.RightOutlined }, _button.default.name, _button.default), props: { prefixCls: String }, setup: function setup(props) { var _useConfigInject = (0, _useConfigInject2.default)('table-pro-basic-column-setting', props), prefixClsNew = _useConfigInject.prefixCls; var table = (0, _useTableContext.useTableContext)(); var defaultRowSelection = table.getRowSelection(); var inited = false; var cachePlainOptions = (0, _vue.ref)([]); var plainOptions = (0, _vue.ref)([]); var plainSortOptions = (0, _vue.ref)([]); var columnListRef = (0, _vue.ref)(null); var state = (0, _vue.reactive)({ indeterminate: false, checkAll: true, checkedList: [], defaultCheckList: [] }); var checkIndex = (0, _vue.ref)(false); var checkSelect = (0, _vue.ref)(false); var getValues = (0, _vue.computed)(function () { return (0, _vue.unref)(table === null || table === void 0 ? void 0 : table.getBindValues) || {}; }); (0, _vue.watchEffect)(function () { var columns = table.getColumns(); if (columns.length) { init(); } }); (0, _vue.watchEffect)(function () { var values = (0, _vue.unref)(getValues); checkIndex.value = !!values.showIndexColumn; checkSelect.value = !!values.rowSelection; }); function getColumns() { var ret = []; table.getColumns({ ignoreIndex: true, ignoreAction: true }).forEach(function (item) { ret.push(_extends({ label: item.title || item.customTitle, value: item.dataIndex || item.title }, item)); }); return ret; } function init() { var columns = getColumns(); var checkList = table.getColumns().map(function (item) { if (item.defaultHidden) { return ''; } return item.dataIndex || item.title; }).filter(Boolean); if (!plainOptions.value.length) { plainOptions.value = columns; plainSortOptions.value = columns; cachePlainOptions.value = columns; state.defaultCheckList = checkList; } else { // const fixedColumns = columns.filter((item) => // Reflect.has(item, 'fixed') // ) as BasicColumn[]; (0, _vue.unref)(plainOptions).forEach(function (item) { var findItem = columns.find(function (col) { return col.dataIndex === item.dataIndex; }); if (findItem) { item.fixed = findItem.fixed; } }); } state.checkedList = checkList; } // checkAll change function onCheckAllChange(e) { state.indeterminate = false; var checkList = plainOptions.value.map(function (item) { return item.value; }); if (e.target.checked) { state.checkedList = checkList; table.setColumns(checkList); } else { state.checkedList = []; table.setColumns([]); } } // Trigger when check/uncheck a column function onChange(checkedList) { var len = plainOptions.value.length; state.indeterminate = !!checkedList.length && checkedList.length < len; state.checkAll = checkedList.length === len; var sortList = (0, _vue.unref)(plainSortOptions).map(function (item) { return item.value; }); checkedList.sort(function (prev, next) { return sortList.indexOf(prev) - sortList.indexOf(next); }); table.setColumns(checkedList); } // reset columns function reset() { state.checkedList = _toConsumableArray(state.defaultCheckList); state.checkAll = true; state.indeterminate = false; plainOptions.value = (0, _vue.unref)(cachePlainOptions); plainSortOptions.value = (0, _vue.unref)(cachePlainOptions); table.setColumns(table.getCacheColumns()); } // Open the pop-up window for drag and drop initialization function handleVisibleChange() { if (inited) { return; } (0, _vue.nextTick)(function () { var columnListEl = (0, _vue.unref)(columnListRef); if (!columnListEl) { return; } var el = columnListEl.$el; if (!el) { return; } // Drag and drop sort var _useSortable = (0, _useSortable2.useSortable)(el, { handle: ".".concat(prefixClsNew.value, "-coulmn-drag-icon"), onEnd: function onEnd(evt) { var oldIndex = evt.oldIndex, newIndex = evt.newIndex; if ((0, _shared.isUndefined)(oldIndex) && (0, _shared.isNull)(oldIndex) || (0, _shared.isUndefined)(newIndex) && (0, _shared.isNull)(newIndex) || oldIndex === newIndex) { return; } // Sort column // Sort column var columns = getColumns(); var oldIndexNumber = oldIndex; var newIndexNumber = newIndex; if (oldIndexNumber > newIndexNumber) { columns.splice(newIndexNumber, 0, columns[oldIndexNumber]); columns.splice(oldIndexNumber + 1, 1); } else { columns.splice(newIndexNumber + 1, 0, columns[oldIndexNumber]); columns.splice(oldIndexNumber, 1); } plainSortOptions.value = columns; plainOptions.value = columns; table.setColumns(columns); } }), initSortable = _useSortable.initSortable; initSortable(); inited = true; }); } // Control whether the serial number column is displayed function handleIndexCheckChange(e) { table.setProps({ showIndexColumn: e.target.checked }); } // Control whether the check box is displayed function handleSelectCheckChange(e) { table.setProps({ rowSelection: e.target.checked ? defaultRowSelection : undefined }); } function handleColumnFixed(item, fixed) { var _a; if (!state.checkedList.includes(item.dataIndex)) { return; } var columns = getColumns(); var isFixed = item.fixed === fixed ? false : fixed; var index = columns.findIndex(function (col) { return col.dataIndex === item.dataIndex; }); if (index !== -1) { columns[index].fixed = isFixed; } item.fixed = isFixed; if (isFixed && !item.width) { item.width = 100; } (_a = table.setCacheColumnsByField) === null || _a === void 0 ? void 0 : _a.call(table, item.dataIndex, { fixed: isFixed }); table.setColumns(columns); } return _extends(_extends({}, (0, _vue.toRefs)(state)), { onCheckAllChange: onCheckAllChange, onChange: onChange, plainOptions: plainOptions, reset: reset, prefixClsNew: prefixClsNew, columnListRef: columnListRef, handleVisibleChange: handleVisibleChange, checkIndex: checkIndex, checkSelect: checkSelect, handleIndexCheckChange: handleIndexCheckChange, handleSelectCheckChange: handleSelectCheckChange, defaultRowSelection: defaultRowSelection, handleColumnFixed: handleColumnFixed, getPopupContainer: _dom.getPopupContainer }); }, render: function render() { var _this = this; var popoverTitleNode = (0, _vue.createVNode)("div", { "class": "".concat(this.prefixClsNew, "__popover-title") }, [(0, _vue.createVNode)(_checkbox.default, { "checked": this.checkAll, "indeterminate": this.indeterminate, "onChange": this.onCheckAllChange }, { default: function _default() { return [(0, _vue.createTextVNode)("\u5217\u5C55\u793A")]; } }), (0, _vue.createVNode)(_checkbox.default, { "checked": this.checkIndex, "onChange": this.handleIndexCheckChange }, { default: function _default() { return [(0, _vue.createTextVNode)("\u5E8F\u53F7\u5217")]; } }), (0, _vue.createVNode)(_checkbox.default, { "checked": this.checkSelect, "disabled": !this.defaultRowSelection, "onChange": this.handleSelectCheckChange }, { default: function _default() { return [(0, _vue.createTextVNode)("\u52FE\u9009\u5217")]; } }), (0, _vue.createVNode)((0, _vue.resolveComponent)("a-button"), { "size": "small", "type": "link", "onClick": this.reset }, { default: function _default() { return [' ', (0, _vue.createTextVNode)("\u91CD\u7F6E"), ' ']; } })]); var popoverCheckNodes = []; var popoverCheckToolTipLeftSlot = { title: function title() { return '固定到左侧'; } }; var popoverCheckToolTipRightSlot = { title: function title() { return '固定到右侧'; } }; this.plainOptions.forEach(function (item) { var pItemNode = (0, _vue.createVNode)("div", { "class": "".concat(_this.prefixClsNew, "__check-item") }, [(0, _vue.createVNode)(_iconsVue.DragOutlined, { "class": "".concat(_this.prefixClsNew, "-coulmn-drag-icon") }, null), (0, _vue.createVNode)(_checkbox.default, { "value": item.value, "disabled": item.label === 'Action' }, { default: function _default() { return [item.label]; } }), (0, _vue.createVNode)(_tooltip.default, { "placement": "bottomLeft", "mouse-leave-delay": 0.4 }, _objectSpread({ default: function _default() { return [(0, _vue.createVNode)(_iconsVue.LeftOutlined, { "icon": "line-md:arrow-align-left", "class": ["".concat(_this.prefixClsNew, "__fixed-left"), { active: item.fixed === 'left', disabled: !_this.checkedList.includes(item.value) }], "onClick": function onClick() { return _this.handleColumnFixed(item, 'left'); } }, null)]; } }, popoverCheckToolTipLeftSlot)), (0, _vue.createVNode)(_divider.default, { "type": "vertical" }, null), (0, _vue.createVNode)(_tooltip.default, { "placement": "bottomLeft", "mouse-leave-delay": 0.4 }, _objectSpread({ default: function _default() { return [(0, _vue.createVNode)(_iconsVue.RightOutlined, { "class": ["".concat(_this.prefixClsNew, "__fixed-right"), { active: item.fixed === 'right', disabled: !_this.checkedList.includes(item.value) }], "onClick": function onClick() { return _this.handleColumnFixed(item, 'right'); } }, null)]; } }, popoverCheckToolTipRightSlot))]); popoverCheckNodes.push(pItemNode); }); var popoverContentNode = (0, _vue.createVNode)(_containerScroll.default, null, { default: function _default() { return [(0, _vue.createVNode)(_checkbox.default.Group, { "ref": "columnListRef", "value": _this.checkedList, "onChange": _this.onChange }, { default: function _default() { return [popoverCheckNodes]; } })]; } }); var popoverSlot = { title: function title() { return popoverTitleNode; }, content: function content() { return popoverContentNode; }, default: function _default() { return (0, _vue.createVNode)(_iconsVue.SettingOutlined, null, null); } }; var toolTipDefaultNode = (0, _vue.createVNode)(_popover.default, { "placement": "bottomLeft", "trigger": "click", "overlay-class-name": "".concat(this.prefixClsNew, "__cloumn-list"), "onVisibleChange": this.handleVisibleChange }, popoverSlot); var toolTipSlot = { title: function title() { return (0, _vue.createVNode)("span", null, [(0, _vue.createTextVNode)("\u5217\u8BBE\u7F6E")]); }, default: function _default() { return toolTipDefaultNode; } }; return (0, _vue.createVNode)(_tooltip.default, { "placement": "top" }, toolTipSlot); } }); exports.default = _default2;