maycur-business
Version:
maycur business react components of web
1,231 lines (1,016 loc) • 47 kB
JSX
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
require("maycur-antd/lib/icon/style/css");
var _icon = _interopRequireDefault(require("maycur-antd/lib/icon"));
require("maycur-antd/lib/button/style/css");
var _button = _interopRequireDefault(require("maycur-antd/lib/button"));
require("maycur-antd/lib/popover/style/css");
var _popover = _interopRequireDefault(require("maycur-antd/lib/popover"));
var _react = _interopRequireWildcard(require("react"));
var _table = require("maycur-antd/lib/table");
var _reactResizable = require("react-resizable");
var _lodash = _interopRequireDefault(require("lodash"));
var _classnames = _interopRequireDefault(require("classnames"));
var _FilterDropDown = require("./FilterDropDown");
var _FilterStateBar = _interopRequireDefault(require("./FilterStateBar"));
var _PopSelect = _interopRequireDefault(require("./PopSelect/PopSelect"));
var _RcTable = _interopRequireDefault(require("../lib/RcTable"));
var _MkSearch = _interopRequireDefault(require("../MkSearch"));
var _Empty = _interopRequireDefault(require("../Empty"));
var _utils = _interopRequireDefault(require("../utils/utils"));
require("maycur-antd/lib/table/style/css");
var _mkTranslate = _interopRequireDefault(require("../utils/mkTranslate"));
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 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 _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 _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 _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 _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); }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
var prefix = _utils["default"].prefixCls;
/* title 宽度变动 */
var ResizeableTitle = function ResizeableTitle(props) {
var onResize = props.onResize,
width = props.width,
restProps = _objectWithoutProperties(props, ["onResize", "width"]);
if (!width) {
return _react["default"].createElement("th", restProps);
}
return _react["default"].createElement(_reactResizable.Resizable, {
width: width,
height: 0,
onResize: onResize
}, _react["default"].createElement("th", restProps));
};
var MkTable = function MkTable(option) {
return function (WrapperComponent) {
var _temp;
var defaultOption = {
isFixHeader: false,
resizeAble: false,
disableLoad: false,
hidePagination: false,
firstDisplayColumns: [],
isCrossPageSelect: false,
searchKey: 'keyword'
};
option = Object.assign(defaultOption, option);
var defaultPageSizeOptions = [10, 20, 50, 100];
if (option.pageSize && defaultPageSizeOptions.indexOf(option.pageSize) < 0) {
defaultPageSizeOptions.push(option.pageSize);
defaultPageSizeOptions.sort(function (a, b) {
return a - b;
});
}
_lodash["default"].forEach(defaultPageSizeOptions, function (val, index) {
defaultPageSizeOptions[index] = val + '';
});
return _temp =
/*#__PURE__*/
function (_Component) {
_inherits(_temp, _Component);
function _temp(_props) {
var _this;
_classCallCheck(this, _temp);
_this = _possibleConstructorReturn(this, _getPrototypeOf(_temp).call(this, _props));
_this.localeProcess = function () {
_mkTranslate["default"].getNameSpace('MkTable').then(function (t) {
_this.setState({
t: t
});
});
};
_this.columnConvert = function (columns) {
var filters = _this.state.filters;
var cloneColumns = _lodash["default"].cloneDeep(columns);
var typeComponentMap = {
'dateRange': _FilterDropDown.DateFilter,
'search': _FilterDropDown.FuzzFilter,
'checkbox': _FilterDropDown.CheckFilter,
'department': _FilterDropDown.DepartmentPickerFilter,
'numberRange': _FilterDropDown.NumberRangeFilter,
'budgetment': _FilterDropDown.BudgetmentFilter,
//预算组织筛选框
'budgetSubject': _FilterDropDown.BudgetSubjectFilter //预算科目筛选框
};
/* 设置内置的column属性 */
_lodash["default"].forEach(cloneColumns, function (col) {
if (col.filterOption) {
col.filterDropdown = function (_ref) {
var setSelectedKeys = _ref.setSelectedKeys,
selectedKeys = _ref.selectedKeys,
confirm = _ref.confirm,
clearFilters = _ref.clearFilters;
var Cop = typeComponentMap[col.filterOption.type];
return _react["default"].createElement(Cop, _extends({}, col, {
setSelectedKeys: setSelectedKeys,
selectedKeys: selectedKeys,
confirm: confirm,
setFiltersMap: _this.setFiltersMap,
clearFilters: clearFilters,
columnModify: _this.columnModify,
columns: _this.state.columns
}));
};
col.filteredValue = filters[col.filterKey || col.key] || null;
}
});
return cloneColumns || [];
};
_this.handleResize = function (index) {
return function (e, _ref2) {
var size = _ref2.size;
_this.setState(function (_ref3) {
var columns = _ref3.columns;
var nextColumns = _toConsumableArray(columns);
nextColumns[index] = _objectSpread({}, nextColumns[index], {
width: size.width
});
return {
columns: nextColumns
};
});
};
};
_this.onChange = function (pagination, filters, sorter) {
var columns = _this.state.columns;
var currentFilters = _this.state.filters;
var isClearSelection = false;
if (!_lodash["default"].isEqual(currentFilters, filters)) isClearSelection = true;
_lodash["default"].forEach(filters, function (value, key) {
// if (value) {
var column = _lodash["default"].find(columns, {
key: key
});
_this.columnModify(column, {
key: 'filteredValue',
value: value
}); // }
});
_lodash["default"].forEach(currentFilters, function (value, key) {
// 如果当前筛选中不存在新的筛选,需要将这部分置为空
if (!filters[key]) {
var column = _lodash["default"].find(columns, {
key: key
});
_this.columnModify(column, {
key: 'filteredValue',
value: null
});
}
});
_lodash["default"].forEach(columns, function (column) {
if (sorter && sorter.field && column.key === sorter.field) {
_this.columnModify(column, {
key: 'sortOrder',
value: sorter.order
});
} else if (column.sortOrder) {
_this.columnModify(column, {
key: 'sortOrder',
value: false
});
}
});
_this.setState({
filters: filters,
sorter: {
field: sorter.field,
order: sorter.order
},
pagination: pagination
}, function () {
_this.dataFetch({
isClearSelection: isClearSelection
});
});
};
_this.columnModify = function (column, dataPair) {
if (column) {
var columns = _this.state.columns;
var idx = _lodash["default"].findIndex(columns, {
dataIndex: column.dataIndex
});
if (dataPair && idx > -1) {
var key = dataPair.key,
value = dataPair.value; // column[key] = value;
column = _objectSpread({}, column, _defineProperty({}, key, value));
columns[idx] = column;
_this.setState({
columns: columns
});
}
}
};
_this.filterChangeNotice = function () {
var filterChange = _this.props.filterChange;
var filters = _this.state.filters;
if (filterChange && typeof filterChange === 'function') {
filterChange(filters);
}
};
_this.clearAll = function () {
var theFilters = _this.$filterBar.convertFilter(_this.state.filters);
_this.$filterBar.clear(theFilters);
};
_this.clearSearch = function () {
_this.search = _defineProperty({}, option.searchKey, '');
};
_this.removeSingleFilter = function (filterKeys) {
var _this$state = _this.state,
filters = _this$state.filters,
pagination = _this$state.pagination,
sorter = _this$state.sorter;
var newFilter = _lodash["default"].cloneDeep(filters);
/* 不要直接对state中的属性做delete操作(会导致无法正常render组件),clone一个来处理*/
if (_lodash["default"].isArray(filterKeys)) {
_lodash["default"].forEach(filterKeys, function (key) {
newFilter[key] = null;
});
} else {
newFilter[filterKeys] = null;
}
_this.onChange(pagination, newFilter, sorter);
};
_this.fetchCustomFilterData = function (filter) {
var _this$state2 = _this.state,
pagination = _this$state2.pagination,
sorter = _this$state2.sorter;
_this.onChange(pagination, filter, sorter);
};
_this.setFiltersMap = function (key, filters) {
var filtersMap = _this.state.filtersMap;
_this.setState({
filtersMap: _objectSpread({}, filtersMap, _defineProperty({}, key, filters))
});
};
_this.generateTable = function (params) {
/* 当前不支持列冻结的功能 */
var _this$state3 = _this.state,
columns = _this$state3.columns,
loading = _this$state3.loading,
pagination = _this$state3.pagination,
dataSource = _this$state3.dataSource,
selectedRowKeys = _this$state3.selectedRowKeys,
selectAble = _this$state3.selectAble,
selectAbleLock = _this$state3.selectAbleLock,
loadProps = _this$state3.loadProps,
hideColumnCodeList = _this$state3.hideColumnCodeList,
tableMinWidth = _this$state3.tableMinWidth,
isReady = _this$state3.isReady;
var rowKey = params.rowKey,
scroll = params.scroll,
_params$rowSelection = params.rowSelection,
rowSelectionOption = _params$rowSelection === void 0 ? {} : _params$rowSelection,
data = params.data,
_params$tableId = params.tableId,
tableId = _params$tableId === void 0 ? 'tableId' : _params$tableId,
onRow = params.onRow;
var _option = option,
isCrossPageSelect = _option.isCrossPageSelect,
childrenColumnName = _option.childrenColumnName;
if (data && data.length > 0) {
dataSource = data;
}
var wrapOnRow = function wrapOnRow(record) {
return {
onClick: function onClick(e) {
if (rowSelectionOption.type && rowSelectionOption.type === 'radio') {
_this.setState({
selectedRows: [record],
selectedRowKeys: [record[rowKey]]
});
}
if (typeof onRow === 'function') {
var instanceOnRow = onRow(record);
if (instanceOnRow && _typeof(instanceOnRow.onClick)) {
instanceOnRow.onClick(e);
}
}
}
};
};
var onSelectionChange = rowSelectionOption.onSelectionChange;
_this.rowKey = rowKey;
var rowSelection = _objectSpread({}, rowSelectionOption, {
onChange: function onChange(selectedRowKeys, selectedRows) {
if (childrenColumnName) return;
/* 注意:onChange中的selectedRows,因为antd不支持跨页选取,所以selectedRows只包含当前页选中的数据 */
var currentSelectRows = [],
currentSelectedRowKeys = [];
if (isCrossPageSelect) {
/* 跨页选取 */
if (rowSelectionOption.type !== 'radio') {
var unSelectedRows = _lodash["default"].differenceWith(dataSource, selectedRows, _lodash["default"].isEqual);
var unSelectedRowKeys = _lodash["default"].map(unSelectedRows, function (row) {
return row[rowKey];
});
currentSelectRows = _lodash["default"].cloneDeep(_this.state.selectedRows);
if (selectedRows.length > 0) {
currentSelectRows = _this.modifySelectRows({
currentSelectRows: currentSelectRows,
type: 'update',
rows: selectedRows,
rowKeys: selectedRowKeys
});
}
if (unSelectedRows.length > 0) {
currentSelectRows = _this.modifySelectRows({
currentSelectRows: currentSelectRows,
type: 'delete',
rows: unSelectedRows,
rowKeys: unSelectedRowKeys
});
}
_lodash["default"].forEach(currentSelectRows, function (row) {
currentSelectedRowKeys.push(row[rowKey]);
});
} else {
currentSelectRows = selectedRows;
currentSelectedRowKeys = selectedRowKeys;
}
} else {
/* 非跨页选取 */
currentSelectRows = selectedRows;
currentSelectedRowKeys = selectedRowKeys;
}
_this.setState({
selectedRows: currentSelectRows,
selectedRowKeys: currentSelectedRowKeys
}, function () {
if (typeof onSelectionChange === 'function') {
onSelectionChange(currentSelectedRowKeys, currentSelectRows);
}
});
},
onSelect: function onSelect(record, selected, selectedRows, nativeEvent) {
_this.onSelect(record, selected);
},
onSelectAll: function onSelectAll(selected, selectedRows, changeRows) {
_this.onSelectAll(selected, selectedRows, changeRows);
},
selectedRowKeys: selectedRowKeys
});
var visibleColumns = _lodash["default"].filter(columns, function (col) {
return !hideColumnCodeList.includes(col.dataIndex);
});
var tableCls = (0, _classnames["default"])("".concat(prefix, "-mktable-container"), {
'table-empty': !dataSource || dataSource && dataSource.length === 0,
'enable-scroll-x': !(scroll && scroll.x),
'row-clickable': typeof onRow === 'function',
'fix-header': option.isFixHeader
});
var tableScroll = {};
tableScroll = _lodash["default"].assign({}, option.isFixHeader ? {
y: true,
x: tableMinWidth
} : {});
if (_this.tableId && _this.tableId !== tableId) {
_this.tableReset();
_this.tableId = tableId;
return null;
} else {
_this.tableId = tableId;
return _react["default"].createElement("div", {
className: tableCls,
ref: function ref(_ref4) {
_this.tableRef = _ref4;
}
}, _react["default"].createElement(_table.FlexTable, _extends({}, params, {
onRow: wrapOnRow,
key: tableId,
rowSelection: selectAble ? rowSelection : selectAbleLock ? {
selectedRowKeys: selectedRowKeys
} : null,
components: _this.components,
columns: visibleColumns,
scroll: tableScroll,
pagination: option.hidePagination ? false : pagination,
childrenColumnName: childrenColumnName,
dataSource: dataSource,
onChange: _this.onChange,
loading: _objectSpread({}, loadProps, {
spinning: loading
}),
locale: {
emptyText: function emptyText() {
return isReady && _react["default"].createElement(_Empty["default"], null);
}
},
OptionTable: _RcTable["default"]
})));
}
};
_this.generateFilter = function () {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _this$state4 = _this.state,
filters = _this$state4.filters,
columns = _this$state4.columns,
dataSource = _this$state4.dataSource,
pagination = _this$state4.pagination,
filtersMap = _this$state4.filtersMap;
return _react["default"].createElement(_FilterStateBar["default"], _extends({
filters: filters,
filtersMap: filtersMap,
columns: columns,
totalCount: pagination.total ? pagination.total : dataSource.length,
removeFilter: _this.removeSingleFilter,
onRefFilterBar: _this.onRefFilterBar,
fetchCustomFilterData: _this.fetchCustomFilterData
}, props));
};
_this.searchTable = function (value) {
_this.setState({
pagination: _objectSpread({}, _this.state.pagination, {
current: 1
})
}, function () {
_this.search = _defineProperty({}, option.searchKey, value);
_this.dataFetch();
});
};
_this.setRef = function (el) {
_this.searchEl = el;
};
_this.generateSearch = function () {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return _react["default"].createElement(_MkSearch["default"], {
type: "gray",
animate: props.animate,
wrappedWidth: props.wrappedWidth,
placeholder: props.placeholder,
style: props.style,
setRef: _this.setRef,
onSearch: _this.searchTable,
onChange: function onChange(e) {
return _this.searchWordChange(e.target.value);
}
});
};
_this.onRefFilterBar = function (ref) {
_this.$filterBar = ref;
};
_this.setColumns = function (originColumns) {
var columns = [],
hideColumnCodeList = [];
var tableMinWidth = 0;
originColumns = _lodash["default"].cloneDeep(originColumns);
if (originColumns) {
var initSorter = {},
initFilter = {};
_lodash["default"].forEach(originColumns, function (column) {
if (column.sortOrder) {
initSorter.field = column.dataIndex;
initSorter.order = column.sortOrder;
} // 修复 filteredValue值为布尔值时,默认筛选没有被选中的 bug
if (column.filteredValue || typeof column.filteredValue === 'boolean') {
initFilter[column.dataIndex] = column.filteredValue;
}
if (option.firstDisplayColumns.length > 0 && !option.firstDisplayColumns.includes(column.dataIndex)) {
hideColumnCodeList.push(column.dataIndex);
}
if (column.fixed && !column.width) {
column.fixed = false;
}
if (column.popover) {
column.className = 'td-ellipsis';
column.render = function (value, row) {
return _react["default"].createElement(_popover["default"], {
content: value,
trigger: "hover",
overlayClassName: 'mkbs-table-cell-popover',
placement: "topLeft"
}, value);
};
}
tableMinWidth += Number(column.width || column.minWidth || 100);
});
columns = _this.columnConvert(originColumns);
if (option.resizeAble) {
columns = columns.map(function (col, index) {
return _objectSpread({}, col, {
onHeaderCell: function onHeaderCell(column) {
return {
width: column.width,
onResize: _this.handleResize(index)
};
}
});
});
}
_this.setState({
columns: columns,
sorter: initSorter,
filters: initFilter,
hideColumnCodeList: hideColumnCodeList,
tableMinWidth: tableMinWidth
});
}
};
_this.setLoadStatus = function (status) {
var loading = option.disableLoad ? false : status;
_this.setState({
loading: loading
});
};
_this.dataFetch = function () {
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var isClearSelection = params.isClearSelection;
if (typeof _this.fetchDataSourceFn !== 'function') return;
var _this$state5 = _this.state,
filters = _this$state5.filters,
pagination = _this$state5.pagination,
sorter = _this$state5.sorter;
var dataSourceTableId = _this.tableId;
var fnExe = _this.fetchDataSourceFn(filters, {
pageSize: pagination.pageSize,
current: pagination.current ? pagination.current : 1
}, {
field: sorter.field,
order: sorter.order === 'descend' ? 'desc' : 'asc'
}, _this.search);
var dataSource;
if (fnExe && fnExe.then) {
_this.setLoadStatus(true);
fnExe.then(function (resp) {
_this.setLoadStatus(false);
if (resp.code === 'success' && dataSourceTableId === _this.tableId) {
dataSource = resp.data || [];
/* 如果触发需要清空所有选中的数据 */
if (isClearSelection) _this.setAllFlag(false);
_this.setState(function (_ref5) {
var pagination = _ref5.pagination,
selectedRowKeys = _ref5.selectedRowKeys;
var newSelectedRowKeys = [];
var newSelectedRows = [];
if (!isClearSelection) {
newSelectedRows = _lodash["default"].filter(dataSource, function (item) {
if (selectedRowKeys.includes(item[_this.rowKey])) {
newSelectedRowKeys.push(item[_this.rowKey]);
return true;
} else {
return false;
}
});
}
return {
dataSource: dataSource,
selectedRows: newSelectedRows,
selectedRowKeys: newSelectedRowKeys,
pagination: _objectSpread({}, pagination, {
showQuickJumper: pagination.pageSize < resp.total,
total: resp.total
}),
isReady: true
};
});
}
}, function () {
_this.setLoadStatus(false);
});
} else {
dataSource = fnExe;
if (dataSource && _lodash["default"].isArray(dataSource)) {
_this.setState({
dataSource: dataSource,
isReady: true
});
}
}
};
_this.setDataFetchFn = function (fn) {
if (typeof fn === 'function') {
_this.fetchDataSourceFn = fn;
}
};
_this.setSelectAble = function (val) {
_this.setState(function (_ref6) {
var selectAbleLock = _ref6.selectAbleLock,
selectedRowKeys = _ref6.selectedRowKeys,
selectAble = _ref6.selectAble;
return {
selectAble: val ? true : false,
selectedRowKeys: selectAble !== val ? [] : selectedRowKeys,
selectAbleLock: selectAble !== val ? true : selectAbleLock
};
});
/* selectedRowKeys在table组件中需要延后执行,antd的table组件当前在移除checkbox行选择的时候,是无法移除选中状态 */
setTimeout(function () {
_this.setState({
selectAbleLock: false
});
}, 100);
};
_this.setAllFlag = function (isAll) {
var dataSource = _this.state.dataSource;
var _assertThisInitialize = _assertThisInitialized(_this),
rowKey = _assertThisInitialize.rowKey;
var _newSelectedRowKeys = [];
var _newSelectedRows = [];
if (isAll) {
dataSource.forEach(function (item) {
_newSelectedRowKeys.push(item[rowKey]);
_newSelectedRows.push(item);
});
_this.setState({
selectedRowKeys: _newSelectedRowKeys,
selectedRows: _newSelectedRows,
allSelectedRows: _newSelectedRows
});
} else {
_this.setState({
selectedRowKeys: [],
selectedRows: [],
allSelectedRows: [],
canceledRowKeys: [],
canceledRows: []
});
}
_this.setState({
allFlag: isAll
});
};
_this.onSelect = function (record, selected) {
var _this$state6 = _this.state,
allSelectedRows = _this$state6.allSelectedRows,
selectedRowKeys = _this$state6.selectedRowKeys,
selectedRows = _this$state6.selectedRows,
allFlag = _this$state6.allFlag,
canceledRowKeys = _this$state6.canceledRowKeys,
canceledRows = _this$state6.canceledRows;
var _assertThisInitialize2 = _assertThisInitialized(_this),
rowKey = _assertThisInitialize2.rowKey;
if (selected) {
// 如果是全选状态下
if (allFlag) {
canceledRows = _this.removeFromCollection([record], canceledRows, rowKey, 'object');
canceledRowKeys = _this.removeFromCollection([record], canceledRowKeys, rowKey, 'string');
} else {
allSelectedRows.push(record);
}
} else {
if (allFlag) {
canceledRowKeys.push(record[rowKey]);
canceledRows.push(record);
} else {
allSelectedRows = _this.removeFromCollection([record], allSelectedRows, rowKey, 'object');
}
}
var _option2 = option,
childrenColumnName = _option2.childrenColumnName,
parentKey = _option2.parentKey;
if (childrenColumnName) {
var isParent = record[childrenColumnName] === undefined || !!record[childrenColumnName];
if (isParent) {
// 父级被选中/取消
var childRows = record[childrenColumnName] || [];
var childKeys = childRows.map(function (_ref7) {
var key = _ref7[rowKey];
return key;
});
if (selected) {
// 如果选中父级,先找出之前未选中的子集并添加
var addKeys = childKeys.filter(function (key) {
return !selectedRowKeys.includes(key);
});
var addRows = [];
if (addKeys.length) {
addRows = childRows.filter(function (_ref8) {
var key = _ref8[rowKey];
return addKeys.includes(key);
});
}
addKeys.push(record[rowKey]);
addRows.push(record);
_this.setState({
selectedRowKeys: [].concat(_toConsumableArray(selectedRowKeys), _toConsumableArray(addKeys)),
selectedRows: [].concat(_toConsumableArray(selectedRows), _toConsumableArray(addRows))
});
} else {
// 取消父级选中,则需要删除之前选中的所有子集
var removeKeys = [].concat(_toConsumableArray(childKeys), [record[rowKey]]);
_this.setState({
selectedRowKeys: selectedRowKeys.filter(function (key) {
return !removeKeys.includes(key);
}),
selectedRows: selectedRows.filter(function (_ref9) {
var key = _ref9[rowKey];
return !removeKeys.includes(key);
})
});
}
} else {
// 子集被选中/取消
var dataSource = _this.state.dataSource;
var _pKey = record[parentKey];
var parent = dataSource.find(function (_ref10) {
var key = _ref10[rowKey];
return key === _pKey;
});
var pKey = parent[rowKey];
if (parent) {
var _key = record[rowKey];
var _childKeys = (parent[childrenColumnName] || []).map(function (_ref11) {
var key = _ref11[rowKey];
return key;
});
if (selected) {
// 如果被选中,需要找到该父级下的所有子集是否被选中,全部选中则选中父级
var _addKeys = [_key];
var _addRows = [record];
if (_childKeys.every(function (key) {
return key === _key || selectedRowKeys.includes(key);
})) {
_addKeys.push(pKey);
_addRows.push(parent);
}
_this.setState({
selectedRowKeys: [].concat(_toConsumableArray(selectedRowKeys), _addKeys),
selectedRows: [].concat(_toConsumableArray(selectedRows), _addRows)
});
} else {
var _removeKeys = [pKey, _key];
_this.setState({
selectedRowKeys: selectedRowKeys.filter(function (key) {
return !_removeKeys.includes(key);
}),
selectedRows: selectedRows.filter(function (_ref12) {
var key = _ref12[rowKey];
return !_removeKeys.includes(key);
})
});
}
}
}
}
_this.setState({
allSelectedRows: allSelectedRows,
canceledRowKeys: canceledRowKeys,
canceledRows: canceledRows
});
};
_this.onSelectAll = function (selected, selectedRows, changeRows) {
var _assertThisInitialize3 = _assertThisInitialized(_this),
rowKey = _assertThisInitialize3.rowKey;
var _this$state7 = _this.state,
allSelectedRows = _this$state7.allSelectedRows,
allFlag = _this$state7.allFlag,
canceledRowKeys = _this$state7.canceledRowKeys,
canceledRows = _this$state7.canceledRows;
if (selected) {
// 如果是全选状态下
if (allFlag) {
canceledRows = _this.removeFromCollection(changeRows, canceledRows, rowKey, 'object');
canceledRowKeys = _this.removeFromCollection(changeRows, canceledRowKeys, rowKey, 'string');
} else {
allSelectedRows = allSelectedRows.concat(changeRows);
}
} else {
if (allFlag) {
canceledRows = canceledRows.concat(changeRows);
canceledRowKeys = canceledRows.concat(changeRows.map(function (_ref13) {
var key = _ref13[rowKey];
return key;
}));
} else {
allSelectedRows = _this.removeFromCollection(changeRows, allSelectedRows, _this.rowKey, 'object');
}
} // 处理树形结构
var _option3 = option,
childrenColumnName = _option3.childrenColumnName;
if (childrenColumnName) {
if (selected) {
var dataSource = _this.state.dataSource;
var childrenRows = dataSource.map(function (_ref14) {
var _ref14$childrenColumn = _ref14[childrenColumnName],
rows = _ref14$childrenColumn === void 0 ? [] : _ref14$childrenColumn;
return rows;
});
var allRows = dataSource.concat.apply(dataSource, _toConsumableArray(childrenRows));
_this.setState({
selectedRowKeys: allRows.map(function (_ref15) {
var key = _ref15[rowKey];
return key;
}),
selectedRows: allRows
});
} else {
_this.setState({
selectedRowKeys: [],
selectedRows: []
});
}
}
_this.setState({
allSelectedRows: allSelectedRows,
canceledRows: canceledRows,
canceledRowKeys: canceledRowKeys
});
};
_this.removeFromCollection = function (records, collection, rowKey, type) {
var keys = records.map(function (_ref16) {
var key = _ref16[rowKey];
return key;
});
var arr = collection || [];
if (type === 'object') {
return arr.filter(function (_ref17) {
var key = _ref17[rowKey];
return !keys.includes(key);
});
} else return arr.filter(function (key) {
return !keys.includes(key);
});
};
_this.resetSelectRows = function () {
_this.setState({
selectedRows: [],
selectedRowKeys: [],
allSelectedRows: []
});
};
_this.modifySelectRows = function (operate) {
var type = operate.type,
rows = operate.rows,
currentSelectRows = operate.currentSelectRows;
var result = null;
var _update = function _update() {
var rebuildSelectRows = _lodash["default"].unionWith(currentSelectRows, rows, _lodash["default"].isEqual);
result = rebuildSelectRows;
};
var _delete = function _delete() {
var rebuildSelectRows = _lodash["default"].differenceWith(currentSelectRows, rows, _lodash["default"].isEqual);
result = rebuildSelectRows;
};
switch (type) {
case 'update':
_update();
break;
case 'delete':
_delete();
break;
default:
break;
}
return result;
};
_this.customColumns = function () {
var _this$state8 = _this.state,
columns = _this$state8.columns,
hideColumnCodeList = _this$state8.hideColumnCodeList,
t = _this$state8.t;
var columnsTreeData = [],
defaultChecked = [];
_lodash["default"].forEach(columns, function (col) {
if (!col.meanLess) {
columnsTreeData.push({
code: col.dataIndex,
name: col.title
});
if (!hideColumnCodeList.includes(col.dataIndex)) {
defaultChecked.push({
code: col.dataIndex,
name: col.title
});
}
}
});
return _react["default"].createElement(_PopSelect["default"], {
options: columnsTreeData,
defaultValue: defaultChecked,
close: _this.setHideColumnCodeList
}, _react["default"].createElement(_button["default"], {
size: "default",
type: "default"
}, t('mkTable.btn')));
};
_this.setHideColumnCodeList = function (data) {
var columns = _this.state.columns;
var hideColumnCodeList = [];
_lodash["default"].forEach(columns, function (col) {
var findIndex = _lodash["default"].findIndex(data, {
code: col.dataIndex
});
if (findIndex === -1 && !col.meanLess) {
hideColumnCodeList.push(col.dataIndex);
}
});
_this.setState({
hideColumnCodeList: hideColumnCodeList
});
};
_this.tableReset = function () {
_this.setState(function () {
return _this.originState;
});
};
_this.state = {
columns: [],
filters: {},
dataSource: [],
loading: false,
loadProps: {
indicator: _react["default"].createElement(_icon["default"], {
type: "loading-3-quarters",
style: {
fontSize: 24
},
spin: true
})
},
pagination: {
pageSize: option && option.pageSize ? option.pageSize : 20,
defaultPageSize: option && option.pageSize ? option.pageSize : 20,
// showTotal: (total) => {
// return <span>总数{total}条</span>
// },
pageSizeOptions: defaultPageSizeOptions,
showSizeChanger: true,
total: 0,
size: 'small'
},
allSelectedRows: [],
//所有选中过的data列,支持跨页选取
selectedRows: [],
selectedRowKeys: [],
selectAble: false,
selectAbleLock: false,
sorter: {},
hideColumnCodeList: [],
allFlag: false,
canceledRows: [],
canceledRowKeys: [],
tableMinWidth: 0,
isReady: false,
filtersMap: {},
t: _mkTranslate["default"].noop()
};
_this.components = {
header: {
cell: ResizeableTitle
}
};
_this.fetchDataSourceFn = null;
_this.tableRef = null;
_this.wrappedComponent = null;
_this.tableId = undefined;
_this.search = _defineProperty({}, option.searchKey, '');
_this.originState = _lodash["default"].cloneDeep(_this.state);
_this.searchWordChange = _lodash["default"].debounce(_this.searchTable, 800);
_this.localeProcess();
return _this;
}
_createClass(_temp, [{
key: "setTableState",
/* 设置table的local state,抛给Wrapper组件使用 */
value: function setTableState() {}
/* 设置table可选与否 */
}, {
key: "render",
value: function render() {
var _this2 = this;
return _react["default"].createElement(WrapperComponent, _extends({
generateTable: this.generateTable,
generateFilter: this.generateFilter,
generateSearch: this.generateSearch,
dataFetch: this.dataFetch,
setColumns: this.setColumns,
setSelectAble: this.setSelectAble,
setDataFetchFn: this.setDataFetchFn,
resetSelectRows: this.resetSelectRows,
customColumns: this.customColumns,
setAllFlag: this.setAllFlag,
onChange: this.onChange,
clearAll: this.clearAll,
clearSearch: this.clearSearch,
searchEleRef: this.searchEl,
ref: function ref(_ref18) {
return _this2.wrappedComponent = _ref18;
}
}, this.state, this.props));
}
}]);
return _temp;
}(_react.Component), _temp;
};
};
var _default = MkTable;
exports["default"] = _default;