UNPKG

maycur-business

Version:

maycur business react components of web

432 lines (356 loc) 18.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; require("maycur-antd/lib/button/style/css"); var _button = _interopRequireDefault(require("maycur-antd/lib/button")); var _react = _interopRequireWildcard(require("react")); var _lodash = _interopRequireDefault(require("lodash")); var _moment = _interopRequireDefault(require("moment")); var _utils = _interopRequireDefault(require("../../utils/utils")); var _FilterSettingModal = _interopRequireDefault(require("../FilterSettingModal")); var _mkTranslate = _interopRequireDefault(require("../../utils/mkTranslate")); var _reactI18next = require("react-i18next"); var _i18next = _interopRequireDefault(require("i18next")); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } 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; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } var prefix = _utils["default"].prefixCls; var FilterStateBar = /*#__PURE__*/ function (_Component) { _inherits(FilterStateBar, _Component); function FilterStateBar(props) { var _this; _classCallCheck(this, FilterStateBar); _this = _possibleConstructorReturn(this, _getPrototypeOf(FilterStateBar).call(this, props)); _this.localeProcess = function (key, ns) { _mkTranslate["default"].getNameSpace(ns).then(function (t) { _this.setState(_defineProperty({}, key, t)); }); }; _this.onSettingBtnClick = function () { var _this$props = _this.props, columns = _this$props.columns, filterConfig = _this$props.filterConfig, ModalManager = _this$props.ModalManager; ModalManager.open({ component: _FilterSettingModal["default"], componentProps: { columns: columns, filterConfig: filterConfig, ModalManager: ModalManager } }).then(function () { _this.fetchCustomFilterData({ code: 'ALL' }); })["catch"](function () {}); }; _this.limitLen = function (str) { var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 12; var result = ''; if (_lodash["default"].isString(str)) { if (str.length > len) { result = str.substr(0, len) + '...'; } else { result = str; } } else { result = str; } return result; }; _this.clear = function (allFilters) { var removeFilter = _this.props.removeFilter; var filterKeys = []; _lodash["default"].forEach(allFilters, function (filter) { filterKeys.push(filter.key); }); if (typeof removeFilter === 'function') removeFilter(filterKeys); }; _this.fetchCustomFilterData = function (filter) { _this.setState({ activeFilter: filter.code }); var _this$props2 = _this.props, fetchCustomFilterData = _this$props2.fetchCustomFilterData, columns = _this$props2.columns; var customFilterItemList = filter.customFilterItemList; var _filter = {}; // 清除原来的筛选 _this.clear(columns); _lodash["default"].each(customFilterItemList, function (item) { var column = _lodash["default"].find(columns, { key: item.key }); var type = column.filterOption.type; if (type === 'checkbox') { _filter[item.key] = item.customFilterItemDto[column.filterKey || column.key]; } else if (type === 'dateRange') { _filter[item.key] = [(0, _moment["default"])(item.customFilterItemDto.startDate), (0, _moment["default"])(item.customFilterItemDto.endDate)]; } else if (type === 'department') { _filter[item.key] = item.customFilterItemDto.departments; } else if (type === 'numberRange') { _filter[item.key] = "".concat(item.customFilterItemDto.minAmount, "~").concat(item.customFilterItemDto.maxAmount); } }); fetchCustomFilterData && fetchCustomFilterData(_filter); }; _this.toggleExpand = function () { _this.setState(function (_ref) { var expanded = _ref.expanded; return { expanded: !expanded }; }); }; _this.renderCustomFilter = function (_ref2) { var totalCount = _ref2.totalCount, customFilters = _ref2.customFilters, componentCls = _ref2.componentCls; var _this$state = _this.state, activeFilter = _this$state.activeFilter, expanded = _this$state.expanded, t = _this$state.t; return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement("span", { className: "filter-label" }, t('filterStateBar.filterLabel')), _react["default"].createElement("div", { className: 'flex-1' }, _react["default"].createElement("div", { className: "".concat(componentCls, "-filter-wrapper ").concat(expanded ? 'expanded' : '') }, customFilters.map(function (filter) { return _react["default"].createElement("div", { className: "".concat(activeFilter === filter.code ? 'active' : '', " filter custom"), key: filter.code, onClick: function onClick() { return _this.fetchCustomFilterData(filter); } }, _react["default"].createElement("span", null, filter.filterName)); }), _react["default"].createElement("span", { className: 'fm fm-setting-o filter-set-btn', onClick: _this.onSettingBtnClick }, t('filterStateBar.setBtn')), _react["default"].createElement("div", { className: 'filter-data-state' }, _react["default"].createElement(_reactI18next.Trans, { i18n: _i18next["default"], i18nKey: "filterStateBar.totalCount", ns: "MkTable", values: { n: totalCount }, components: [_react["default"].createElement("span", null), _react["default"].createElement("span", { className: 'filter-data-state_num' })], children: "\u5171<span className={'filter-data-state_num'}>{{n}}</span>\u6761\u8BB0\u5F55" })))), customFilters.length > 1 && _react["default"].createElement("div", { className: "filter-arrow", onClick: _this.toggleExpand }, expanded ? _react["default"].createElement(_react["default"].Fragment, null, t('filterStateBar.up'), " ", _react["default"].createElement("span", { className: "fm fm-angle-up" })) : _react["default"].createElement(_react["default"].Fragment, null, t('filterStateBar.down'), " ", _react["default"].createElement("span", { className: "fm fm-angle-down" })))); }; _this.renderFilter = function (_ref3) { var totalCount = _ref3.totalCount, theFilters = _ref3.theFilters, componentCls = _ref3.componentCls; var t = _this.state.t; return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement("span", null, t('filterStateBar.title')), _react["default"].createElement("div", { className: 'flex-1' }, _react["default"].createElement("div", { className: "".concat(componentCls, "-filter-wrapper") }, theFilters.map(function (filter) { return _react["default"].createElement("div", { className: 'filter', key: filter.key }, _react["default"].createElement("span", { className: 'filter-label' }, filter.label, ":"), _react["default"].createElement("span", null, filter.name), _react["default"].createElement("span", { className: 'filter-close fm fm-cross', onClick: function onClick(e) { _this.remove(filter); } })); }), _react["default"].createElement("div", { className: 'filter-data-state' }, _react["default"].createElement(_reactI18next.Trans, { i18n: _i18next["default"], i18nKey: "filterStateBar.totalCount", ns: "MkTable", values: { n: totalCount }, components: [_react["default"].createElement("span", null), _react["default"].createElement("span", { className: 'filter-data-state_num' })], children: "\u5171<span className={'filter-data-state_num'}>{{n}}</span>\u6761\u8BB0\u5F55" })), theFilters.length > 0 ? _react["default"].createElement("div", { className: 'filter-clear' }, _react["default"].createElement(_button["default"], { type: "primary", size: "small", onClick: function onClick() { _this.clear(theFilters); } }, t('MkGlobal:reset'))) : null))); }; _this.state = { activeFilter: props.filterConfig.notSelectDefault ? '' : 'ALL', t: _mkTranslate["default"].noop() }; _this.remove = _this.remove.bind(_assertThisInitialized(_this)); _this.convertFilter = _this.convertFilter.bind(_assertThisInitialized(_this)); _this.localeProcess('t', 'MkTable'); return _this; } _createClass(FilterStateBar, [{ key: "remove", value: function remove(filter) { var removeFilter = this.props.removeFilter; if (typeof removeFilter === 'function') removeFilter(filter.key); } }, { key: "convertFilter", value: function convertFilter(filters) { var _this2 = this; var _this$props3 = this.props, columns = _this$props3.columns, filtersMap = _this$props3.filtersMap; var t = this.state.t; var newFilters = []; _lodash["default"].forEach(filters, function (val, key) { var filterColumn = key in filtersMap ? filtersMap[key] : _lodash["default"].find(columns, { dataIndex: key }); var filterLabel = filterColumn ? filterColumn.title : t('filterStateBar.empty'); var filterName = ''; if (val === undefined || val === null) return; var filterValue = _lodash["default"].isArray(val) ? val : [val]; if (filterColumn && !_lodash["default"].isEmpty(filterValue)) { var filterOption = filterColumn.filterOption; var filterPlainText = []; if (filterColumn.filters) { _lodash["default"].forEach(filterColumn.filters, function (item) { if (filterValue.includes(item.value)) { filterPlainText.push(item.text); } }); } if (filterOption) { switch (filterOption.type) { case 'dateRange': filterName = (0, _moment["default"])(filterValue[0]).format('YYYY/MM/DD') + ' ~ ' + (0, _moment["default"])(filterValue[1]).format('YYYY/MM/DD'); break; case 'checkbox': filterName = _this2.limitLen(filterPlainText.join(',')); break; case 'search': filterName = filterPlainText.length > 0 ? filterPlainText[0] : filterValue; break; case 'department': filterName = filterColumn.selectedList instanceof Array ? filterColumn.selectedList.join(',') : filterColumn.selectedList; break; case 'budgetment': filterName = filterColumn.selectedList instanceof Array ? filterColumn.selectedList.join(',') : filterColumn.selectedList; break; case 'budgetSubject': filterName = filterColumn.selectedList instanceof Array ? filterColumn.selectedList.join(',') : filterColumn.selectedList; break; default: filterName = filterValue; break; } } else if (filterColumn.filters && !filterColumn.filterMultiple) { var filterData = _lodash["default"].find(filterColumn.filters, { value: filterValue[0] }); filterName = filterData ? filterData.text : filterName; } } if (filterName) newFilters.push({ key: key, label: filterLabel, value: filterValue, name: filterName }); }); return newFilters; } }, { key: "componentDidMount", value: function componentDidMount() { this.props.onRefFilterBar(this); } }, { key: "UNSAFE_componentWillReceiveProps", value: function UNSAFE_componentWillReceiveProps(nextProps) { var customFilters = this.props.filterConfig.customFilters; var _nextProps$filterConf = nextProps.filterConfig, newFilters = _nextProps$filterConf.customFilters, notSelectDefault = _nextProps$filterConf.notSelectDefault; if (customFilters !== newFilters) { // notSelectDefault 不默认选中全部,有些页面有初始筛选 this.setState({ activeFilter: notSelectDefault ? '' : 'ALL' }); } } }, { key: "render", value: function render() { var _this$props4 = this.props, filters = _this$props4.filters, totalCount = _this$props4.totalCount, filterConfig = _this$props4.filterConfig; var _ref4 = filterConfig || {}, showCustomFilter = _ref4.showCustomFilter, _ref4$customFilters = _ref4.customFilters, customFilters = _ref4$customFilters === void 0 ? [] : _ref4$customFilters; var t = this.state.t; var _customFilters = [{ code: 'ALL', filterName: t('dateFilter.all'), customFilterItemList: [] }].concat(_toConsumableArray(customFilters)); var theFilters = this.convertFilter(filters); var componentCls = "".concat(prefix, "-mktable-filterbar"); var node = null; node = _react["default"].createElement("div", { className: componentCls }, showCustomFilter ? this.renderCustomFilter({ totalCount: totalCount, customFilters: _customFilters, componentCls: componentCls }) : this.renderFilter({ totalCount: totalCount, theFilters: theFilters, componentCls: componentCls })); return node; } }]); return FilterStateBar; }(_react.Component); FilterStateBar.defaultProps = { filterConfig: { customFilters: [] } }; var _default = FilterStateBar; exports["default"] = _default;