UNPKG

knk

Version:

react components based on react

124 lines (123 loc) 4.21 kB
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;