el-table排序(部分行/指定行不参与) 排序

356 阅读1分钟

el-table排序(部分行/指定行不参与) 排序

需求描述

待发货总数和库存 最后两行不参与排序

62d469973d842c2c754bf1c89d61a16.png

需要配置属性方法

  • el-table 需要配置 @sort-change="soltHandle" 方法
  • el-table-column 需要配置 sortable="custom"属性

详细代码如下

   <el-table @sort-change="soltHandle" :data="regionalDemands"  max-height="600" border size="small">
         <el-table-column label="#" type="index" />
         <el-table-column label="客户名称" min-width="150" prop="name">
         <el-table-column label="东北" prop="demand_NW" sortable="custom" />
         <el-table-column label="华东" prop="demand_E" sortable="custom" />
         <el-table-column label="华北" prop="demand_SW" sortable="custom" />
         <el-table-column label="华中" prop="demand_NE" sortable="custom" />
         <el-table-column label="华南" prop="demand_S" sortable="custom" />
         <el-table-column label="西南" prop="demand_M" sortable="custom" />
         <el-table-column label="西北" prop="demand_N" sortable="custom" />
         <el-table-column label="总数" prop="total_demand" sortable="custom" />
   </el-table>
 methods: {
       soltHandle(column) {
            let fieldName = column.prop;
            let sortingType = column.order;//排序类型
            let tableData = this.regionalDemands;//渲染对应data数据
            
            //待发货合计一行数据
            let awaitDeliver = tableData.find(item=>item.totalDemandText== "待发货合计");

            //库存一行数据
            let stockData = tableData.find(item=>item.totalDemandText== "库存"); 

            if (sortingType == "ascending") {
                //正序
                tableData = tableData.sort((a, b) => b[fieldName] - a[fieldName]);
            } else if (sortingType == "descending") {
                // 倒序
                tableData = tableData.sort((a, b) => a[fieldName] - b[fieldName]);
            }

            // 删除table中的待发货合计、库存
            // 两个循环要分开写,利用splice根据索引删除数据
            tableData.forEach((item, index) => {
                if (item.totalDemandText == "待发货合计") {
                    tableData.splice(index, 1);
                }
            });

            tableData.forEach((item, index) => {
                if (item.totalDemandText == "库存") {
                    tableData.splice(index, 1);
                }
            });

            tableData.push(awaitDeliver);
            tableData.push(stockData);
        },
    }