接到某个需求前端的表格排序,【全部学习】那一行数据不参与排序,我这边这一行的数据可以通过school_id为-1来确定这一行,因为有多个字段都使用排序,将这块提取出来作为fn,核心代码如下:
const getAllSchoolResult = ({ order, a, b, result }) => {
let newResult = result;
if (order === 'ascend') {
// 全部学校那行不参与排序 school_id 是-1
if (a.school_id === '-1' || b.school_id === '-1') {
newResult = 9999;
}
} else if (order === 'descend') {
if (a.school_id === '-1' || b.school_id === '-1') {
newResult = -9999;
}
}
return newResult;
};
columns代码如下:
const columns: ColumnsType<ComprehensiveScoreAnalysisData> = [
{
title: '学校',
dataIndex: 'school_name',
fixed: 'left',
render: (school_name) => (
<span className='text-span'>{school_name || '-'}</span>
),
},
{
title: '实考人数',
dataIndex: 'real_exam_num',
render: (real_exam_num) => (
<span>
{real_exam_num || real_exam_num === 0 ? real_exam_num : '-'}
</span>
),
},
{
title: '满分',
dataIndex: 'full_score',
render: (full_score) => <span>{full_score || '-'}</span>,
},
{
title: '最高分',
dataIndex: 'max_score',
sorter: (a, b, order) => {
let result = a.max_score - b.max_score;
result = getAllSchoolResult({ result, a, b, order });
return result;
},
render: (max_score) => (
<span>{max_score || max_score === 0 ? max_score : '-'}</span>
),
},
{
title: '最低分',
dataIndex: 'min_score',
sorter: (a, b, order) => {
let result = a.min_score - b.min_score;
result = getAllSchoolResult({ order, a, b, result });
return result;
},
render: (min_score) => (
<span>{min_score || min_score === 0 ? min_score : '-'}</span>
),
},
{
title: '平均分',
dataIndex: 'avg_score',
sorter: (a, b, order) => {
let result = a.avg_score - b.avg_score;
result = getAllSchoolResult({ order, a, b, result });
return result;
},
render: (avg_score) => (
<span>{avg_score || avg_score === 0 ? avg_score : '-'}</span>
),
},
];