import React, { PureComponent, Fragment, Component } from 'react';
import { Table, Alert, Input, Select } from 'antd';
import { sldEmptyHandle1,sldComLanguage } from '@/utils/utils';
import styles from './index.less';
import global from '@/global.less';
import { Scrollbars } from 'react-custom-scrollbars';
import { Resizable } from 'react-resizable';
import SldRowMoreColumnLR from '@/components/SldRowMoreColumnLR';
const InputGroup = Input.Group;
const Option = Select.Option;
function initTotalList(columns) {
const totalList = [];
columns.forEach(column => {
if (column.needTotal) {
totalList.push({ ...column, total: 0 });
}
});
return totalList;
}
const ResizeableTitle = (props) => {
const { onResize, width, ...restProps } = props;
if (!width) {
return
| ;
}
return (
|
);
};
class StandardTable extends Component {
constructor(props) {
super(props);
const { columns } = props;
const needTotalList = initTotalList(columns);
this.state = {
selectedRowKeys: [],
needTotalList,
rowId: '',// 选中行的id
preScrollBarToTop: 0,// Scrollbars滚动条是否返回顶部的标识,默认为0,不返回,逐渐加1——上一次
scrollBarToTop: 0,// Scrollbars滚动条是否返回顶部的标识,默认为0,不返回,逐渐加1——当前
};
}
static getDerivedStateFromProps(nextProps,prevState) {
if(nextProps.scrollBarToTop != undefined && nextProps.scrollBarToTop > 0 && (nextProps.scrollBarToTop - prevState.preScrollBarToTop > 0)){
return {scrollBarToTop: nextProps.scrollBarToTop, preScrollBarToTop: nextProps.scrollBarToTop - 1 };
}
// clean state
if (nextProps.selectedRows != undefined && nextProps.selectedRows.length === 0) {
const needTotalList = initTotalList(nextProps.columns);
return {
selectedRowKeys: [],
needTotalList,
};
} else {
if (nextProps.flag_show_sele_data != undefined && nextProps.flag_show_sele_data) {
return {
selectedRowKeys: nextProps.selectedRowKeys,
};
}
}
return null;
}
componentDidUpdate(prevProps, prevState, snapshot) {
const {scrollBarToTop,preScrollBarToTop} = this.state;
if(scrollBarToTop > 0 && scrollBarToTop - preScrollBarToTop > 0){
if(this.refs!=undefined&&this.refs.scrollRef!=undefined&&this.refs.scrollRef.getScrollTop()>0){
this.refs.scrollRef.scrollToTop();
this.setState({preScrollBarToTop:scrollBarToTop})
}
}
}
handleRowSelectChange = (selectedRowKeys, selectedRows) => {
let { needTotalList } = this.state;
needTotalList = needTotalList.map(item => ({
...item,
total: selectedRows.reduce((sum, val) => sum + parseFloat(val[item.dataIndex], 10), 0),
}));
const { onSelectRow } = this.props;
if (onSelectRow) {
onSelectRow(selectedRows, selectedRowKeys);
}
this.setState({ selectedRowKeys, needTotalList });
};
handleTableChange = (pagination, filters, sorter) => {
const { onChange } = this.props;
if (onChange) {
onChange(pagination, filters, sorter);
}
};
cleanSelectedKeys = () => {
this.handleRowSelectChange([], []);
};
//表格单行点击事件
sldHandleRow = (record, index, rowKey) => {
this.props.onSldHandleSeleRow(record);
let cur_id = '';
if (rowKey == 'id') {
cur_id = record.id;
} else if (rowKey == 'upTime') {
cur_id = record.upTime;
} else if (rowKey == 'specId') {
cur_id = record.specId;
} else if (rowKey == 'brandId') {
cur_id = record.brandId;
} else if (rowKey == 'goodsId') {
cur_id = record.goodsId;
} else if (rowKey == 'categoryId') {
cur_id = record.categoryId;
} else if (rowKey == 'decoId') {
cur_id = record.decoId;
} else if (rowKey == 'seckillId') {
cur_id = record.seckillId;
} else if (rowKey == 'labelId') {
cur_id = record.labelId;
} else if (rowKey == 'integralGoodsId') {
cur_id = record.integralGoodsId;
} else if (rowKey == 'couponId') {
cur_id = record.couponId;
} else if (rowKey == 'attributeId') {
cur_id = record.attributeId;
} else if (rowKey == 'drawId') {
cur_id = record.drawId;
}
this.setState({
rowId: cur_id,
});
};
//设置选中行的背景色
setRowClassName = (rowKey, record) => {
if (this.props.onSldHandleSeleRow) {
let cur_id = '';
if (rowKey == 'id') {
cur_id = record.id;
}else if (rowKey == 'specId') {
cur_id = record.specId;
} else if (rowKey == 'brandId') {
cur_id = record.brandId;
} else if (rowKey == 'goodsId') {
cur_id = record.goodsId;
}else if (rowKey == 'categoryId') {
cur_id = record.categoryId;
}else if (rowKey == 'decoId') {
cur_id = record.decoId;
}else if (rowKey == 'seckillId') {
cur_id = record.seckillId;
} else if (rowKey == 'labelId') {
cur_id = record.labelId;
} else if (rowKey == 'integralGoodsId') {
cur_id = record.integralGoodsId;
} else if (rowKey == 'couponId') {
cur_id = record.couponId;
} else if (rowKey == 'attributeId') {
cur_id = record.attributeId;
} else if (rowKey == 'drawId') {
cur_id = record.drawId;
}
let showClassName = '';
if (this.props.showMarkColor && record.mark_color) {
//去掉#
let color = record.mark_color.replace('#', '');
//小写转为大写,方便获取类名
showClassName = 'row_sld_color_' + color.toUpperCase();
}
if (cur_id === this.state.rowId) {
showClassName = 'seleSingle';
}
return showClassName;
} else {
return '';
}
};
components = {
header: {
cell: ResizeableTitle,
},
};
handleResize = index => (e, { size }) => {
if (this.props.resizeTable) this.props.resizeTable(index, size);
};
onExpand = (expanded, record) => {
if (this.props.onExpand) {
this.props.onExpand(expanded, record);
}
};
render() {
const { selectedRowKeys, needTotalList } = this.state;
const {
data: { list, pagination },
rowKey, isCheck, sldSeleSingleRow, sldpagination, scroll, isColumnResize,
...rest
} = this.props;
const paginationProps = {
showSizeChanger: true,
showQuickJumper: true,
...pagination,
};
const rowSelection = {
type: this.props.sel_type != undefined ? this.props.sel_type : 'checkbox',
selectedRowKeys:this.props.selectedRowKeys!=undefined?this.props.selectedRowKeys:selectedRowKeys,
onChange: this.handleRowSelectChange,
getCheckboxProps: record => ({
disabled: (record.disabled == 'true' || record.disabled == true) ? true : false,
}),
};
const columns = isColumnResize ? this.props.columns.map((col, index) => ({
...col,
onHeaderCell: column => ({
width: column.width,
onResize: this.handleResize(index),
}),
})) : this.props.columns;
let showData =
{this.props.expandedRowKeys != undefined && this.props.expandData == undefined &&
this.setRowClassName(rowKey, record)}
onRow={(record, index) => {
return {
onClick: () => {
if (this.props.onSldHandleSeleRow) {
this.sldHandleRow(record, index, rowKey);
}
},
};
}}
indentSize={this.props.indentSize}
rowKey={rowKey || 'key'}
rowSelection={isCheck ? rowSelection : null}
dataSource={list}
pagination={sldpagination != undefined ? (sldpagination ? paginationProps : false) : paginationProps}
onChange={this.handleTableChange}
onExpand={this.onExpand}
{...rest}
columns={columns}
/>}
{this.props.expandedRowKeys == undefined && this.props.expandData != undefined && {
let expand_data = [];
for (let i in this.props.expandData) {
expand_data.push({
lval: this.props.expandData[i].key,
rval: sldEmptyHandle1(record[this.props.expandData[i].val]),
});
}
return ;
}}
showHeader={this.props.showHeader != undefined ? this.props.showHeader : true}
bordered={this.props.border!=undefined?this.props.border:true}
components={this.components}
size={'small'}
scroll={typeof (scroll) != 'undefined' ? scroll : {}}
rowClassName={(record) => this.setRowClassName(rowKey, record)}
onRow={(record, index) => {
return {
onClick: () => {
if (this.props.onSldHandleSeleRow) {
this.sldHandleRow(record, index, rowKey);
}
},
};
}}
indentSize={this.props.indentSize}
rowKey={rowKey || 'key'}
rowSelection={isCheck ? rowSelection : null}
dataSource={list}
pagination={sldpagination != undefined ? (sldpagination ? paginationProps : false) : paginationProps}
onChange={this.handleTableChange}
{...rest}
columns={columns}
/>}
{this.props.expandedRowKeys == undefined && this.props.expandData == undefined && this.setRowClassName(rowKey, record)}
onRow={(record, index) => {
return {
onClick: () => {
if (this.props.onSldHandleSeleRow) {
this.sldHandleRow(record, index, rowKey);
}
},
};
}}
indentSize={this.props.indentSize}
rowKey={rowKey || 'key'}
rowSelection={isCheck ? rowSelection : null}
dataSource={list}
pagination={sldpagination != undefined ? (sldpagination ? paginationProps : false) : paginationProps}
onChange={this.handleTableChange}
{...rest}
columns={columns}
/>}
;
return (
{this.props.showScrollbar!=undefined&&!this.props.showScrollbar
?showData
:
{showData}
}
);
}
}
export default StandardTable;