最新文章
antd 表格排序_react+antd+antd pro+dva ---> table 升降序及筛选的使用(排序+筛选)
2024-12-30 21:59

这次的需求是列表页可以按照时间进行升降序的排列(直接请求后端)及列筛选,如图

在打开页面时,我们要首先请求接口,获取缺卡类型的筛选数据,然后把数据拼成正确的格式赋给table的column

// 获取缺卡类型和缺卡状态的筛选菜单数据

getTypeListAll = () => {

const { dispatch } = this.props;

const param = {

dictCode: 'lackStatus'

};

const param2 = {

dictCode: 'lackType'

};

dispatch({

type: 'abnormalRank/fetchTypeList',

payload: param,

callback: () => {

dispatch({

type: 'abnormalRank/fetchLackTypeList',

payload: param2,

callback: () => {

this.setfilters();

}

});

}

});

};

// 类型/状态-加入表格的筛选,并将最新的column存入state

setfilters = () => {

const {

abnormalRank: { typeList, lackTypeList }

} = this.props;

const column = [

{

title: '工号',

dataIndex: 'userNo',

key: 'userNo'

},

{

title: '姓名',

dataIndex: 'userName',

key: 'userName'

},

{

title: '部门',

dataIndex: 'departName',

key: 'departName'

},

{

title: '缺卡类型',

dataIndex: 'typeNick',

key: 'typeNick',

filters: []

},

{

title: '缺卡时间',

dataIndex: 'lackTime',

key: 'lackTime',

render: (text, record) => {

return {record.lackTime};

},

sorter: () => {}

},

{

title: '状态',

dataIndex: 'status',

key: 'status',

filters: []

},

{

title: '补卡时间',

dataIndex: 'reissueTime',

key: 'reissueTime',

render: (text, record) => {

return {record.reissueTime};

},

sorter: () => {}

},

{

title: '相关流程',

dataIndex: 'applicationNo',

key: 'applicationNo',

render: (text, record) => {

return (

onClick={() =>

router.push(

`/xxx?abnormalId=${record.userNo}`

)

}

>

{record.applicationNo}

);

}

},

{

title: '操作',

dataIndex: 'action',

key: 'action',

render: (text, record) => {

return (

to={{

pathname:

'/xxxx',

query: {

id: record.employeeId,

name: record.employeeName,

signDate: record.signDate

}

}}

>

打卡记录

this.seeDetail(record)}>补卡

);

}

}

];

const lackStatus = [];

const lackType = [];

for (let index = 0; index < typeList.length; index += 1) {

const list = {

text: typeList[index].dictName,

value: typeList[index].dictKey

};

lackStatus.push(list);

}

for (let index = 0; index < lackTypeList.length; index += 1) {

const list = {

text: lackTypeList[index].dictName,

value: lackTypeList[index].dictKey

};

lackType.push(list);

}

column[3].filters = lackType;

column[5].filters = lackStatus;

this.setState({

columns: column

});

};

可以注意到代码中的两个时间的列加了一个空的sorter

而table的onChange事件里有sorter和filters两个参数【可以参考文档】,jsx代码

render() {

const { loading, dispatch, abnormalRank, form } = this.props;

const { missData, pagination } = abnormalRank;

const { columns } = this.state;

const { locale } = new Locale('stat.overtime');

return (

bordered={false}

title="缺卡记录"

extra={

{locale('form.search', false)}

}

>

form={form}

config={getPath(this.props, 'config')}

/>

dataSource={missData}

columns={columns}

loading={loading}

rowKey="id"

onChange={this.changeTable}

pagination={{

...pagination,

showTotal: total => (

itemsName={Locale.set('items')}

total={total}

pageSize={pagination.pageSize}

onChange={async pageSize => {

await dispatch({

type: 'abnormalRank/setPagination',

pagination: {

...pagination,

pageSize,

current: 1

}

});

this.fetchList();

}}

/>

)

}}

/>

);

}

在事件中可以进行类型、状态、以及排序的参数的存储,再通过调用接口请求数据

changeTable = async (pagination, filters, sorter) => {

// orderBy用来拼接 ‘排序根据词+空格+升序/降序’ 的字符串,用来传给后端,由后端进行数据的整理

let orderBy;

let sorterField;

if (sorter && sorter.field) {

if (sorter.field === 'lackTime') {

sorterField = 'lack_time';

}

if (sorter.field === 'reissueTime') {

sorterField = 'reissue_time';

}

const order = sorter.order.trim().split('end')[0];

orderBy = `${sorterField} ${order}`;

this.setState({

orderByField: orderBy

});

} else {

this.setState({

orderByField: ''

});

}

const {

dispatch,

abnormalRank: { pagination: curPagination }

} = this.props;

await dispatch({

type: 'abnormalRank/setPagination',

pagination: {

...curPagination,

current: pagination.current

}

});

this.setState(

{

lackStatus: filters.status,

lackType: filters.typeNick

},

() => {

this.fetchList();

}

);

};

请求其他部分代码

constructor(props) {

super(props);

this.state = {

lackStatus: [],

lackType: [],

columns: [],

orderByField: ''

};

}

componentDidMount() {

this.getTypeListAll();

this.fetchList();

}

// 获取列表

fetchList = () => {

const {

dispatch,

abnormalRank: { pagination },

form

} = this.props;

const { getFieldsValue } = form;

const { companyDepart, date, userName } = getFieldsValue();

const parame = {

companyId: companyDepart.companyId,

startTime: date.range[0].format('YYYY-MM-DD'),

endTime: date.range[1].format('YYYY-MM-DD'),

employeeName: userName || '',

pageNo: pagination.current,

pageSize: pagination.pageSize,

orderByField: getPath(this.state, 'orderByField', ''),

lackStatus: getPath(this.state, 'lackStatus', []),

lackType: getPath(this.state, 'lackType', [])

};

dispatch({

type: 'abnormalRank/fetchMylack',

payload: parame

});

};

补充:有一个列表页需要从其他页面跳转,需要携带查询参数,包括了类型,因此做一些补充

setfilters这个方法里添加类型的初始化:这里用到了antd表格筛选的一个属性:filteredValue

因为加入初始化设置后,在刷新页面时,column的渲染依旧会走这个初始化设置,会导致页面选中筛选项进行查询后,渲染出来的表头没有加入筛选的选中状态与选中项,所以我们在table的changeTable事件里需要补充

    以上就是本篇文章【antd 表格排序_react+antd+antd pro+dva ---> table 升降序及筛选的使用(排序+筛选)】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/quote/10964.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站http://ww.kub2b.com/mobile/,查看更多   
发表评论
0评