knk
Version:
react components based on react
124 lines (123 loc) • 4.21 kB
JavaScript
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
/**
* 通用表格
*/
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import { Table, message, Spin } from 'antd';
import { fetch } from '../../../common/api';
import { getPageData, isObjEmpty, filterEmptyData } from '../../../common/tool';
var CommonTable = function CommonTable(props) {
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
loading = _useState2[0],
setLoading = _useState2[1];
var _useState3 = useState({}),
_useState4 = _slicedToArray(_useState3, 2),
tableData = _useState4[0],
setTableData = _useState4[1];
useEffect(function () {
handleGetData({
page: 1,
pageSize: 10
});
}, []);
var handleGetData = function handleGetData(data) {
var apiPath = props.apiPath,
apiData = props.apiData,
apiMethod = props.apiMethod;
setLoading(true);
var sendData = filterEmptyData(_objectSpread(_objectSpread({}, apiData), data));
fetch(apiPath, sendData, apiMethod).then(function (res) {
// 判断如果卸载,则不再设置数据
if (!res.data || !res.data.content) res.data.content = [];
res.data.content.map(function (item, inx) {
item.key = inx;
});
setLoading(false);
setTableData(res.data);
}).catch(function (err) {
setLoading(false);
message.error("\u83B7\u53D6\u6570\u636E\u5931\u8D25:".concat(err.message));
});
};
var handleChangePage = function handleChangePage(page, filters, sorter) {
var sortType = props.sortType;
var orders = {};
if (!isObjEmpty(sorter)) {
sortType.map(function (item) {
if (item.text === sorter.columnKey) {
orders = {
sortType: item.value,
isDesc: sorter.order === 'descend' ? 1 : 0
};
}
});
}
handleGetData(_objectSpread({
page: page.current,
pageSize: page.pageSize
}, orders));
};
var tableTitle = props.tableTitle,
columns = props.columns,
isShowPagination = props.isShowPagination,
isShowBordered = props.isShowBordered,
rightLink = props.rightLink,
rightLinkTitle = props.rightLinkTitle,
pageSizeOptions = props.pageSizeOptions,
rowKeyFun = props.rowKeyFun,
scroll = props.scroll;
var pageData;
if (isShowPagination && pageSizeOptions) {
pageData = _objectSpread(_objectSpread({}, getPageData(tableData)), {}, {
pageSizeOptions: pageSizeOptions
});
} else pageData = _objectSpread({}, getPageData(tableData));
return /*#__PURE__*/React.createElement(Spin, {
spinning: loading
}, tableTitle ? /*#__PURE__*/React.createElement("h3", null, tableTitle, rightLink ? /*#__PURE__*/React.createElement("a", {
className: "right-link pull-right",
href: rightLink,
target: "_blank",
rel: "noopener noreferrer"
}, rightLinkTitle) : null) : null, /*#__PURE__*/React.createElement(Table, {
columns: columns,
bordered: isShowBordered,
pagination: isShowPagination ? pageData : false,
dataSource: tableData.content || [],
onChange: handleChangePage,
rowKey: rowKeyFun,
scroll: scroll
}));
};
CommonTable.propTypes = {
rightLink: PropTypes.string,
// table 右侧链接
rightLinkTitle: PropTypes.string,
// table 右侧链接文案
tableTitle: PropTypes.string,
// table名字
columns: PropTypes.array.isRequired,
// 表格的配置项
isShowBordered: PropTypes.bool,
// table是否带有边框,
isShowPagination: PropTypes.bool,
// table是否展示分页
apiPath: PropTypes.string.isRequired,
// api接口,由于直接诶读取data.data的数组数据,所以该API不能使用分页
apiData: PropTypes.object,
// api请求附加的数据
apiMethod: PropTypes.string,
// api请求method,
sortType: PropTypes.array,
// table排序类型 [{ text: 'sortName', value: 'sortValue'}],
pageSizeOptions: PropTypes.array,
rowKeyFun: PropTypes.func,
scroll: PropTypes.object
};
CommonTable.defaultProps = {
isShowBordered: true
};
export default CommonTable;