vue2 el-table指定某些数据不参与排序

vue2 el-table指定某些数据不参与排序

1、需求描述

最后一行总计不参与排序

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0993219dbdb34604b16ea700fe26ae2d.png

2、配置属性方法

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

3、详细代码如下

<el-table
   v-loading="loading"
   border
   :data="stationTableData"
   :header-cell-style="{ 'text-align': 'center' }"
   :cell-style="{ 'text-align': 'center' }"
   style="width: 100%"
   height="470"
   stripe
   :row-class-name="rowClass"
   class="table-style"
   @sort-change="soltHandle"
 >
   <el-table-column
     prop="name"
     label="电站名称"
     width="150"
   ></el-table-column>
   <el-table-column prop="province" label="所属省份" width="100">
     <template slot-scope="{ row }">
       {{ getChineseName(row.province).value }}
     </template>
   </el-table-column>
   <el-table-column
     prop="operationDate"
     label="投运时间"
     width="100"
   ></el-table-column>
   <el-table-column
     prop="capacity"
     label="容量(kWh)"
     width="120"
     sortable="custom"
   ></el-table-column>
   <el-table-column
     prop="charge"
     label="充电量(kWh)"
     width="120"
   ></el-table-column>
   <el-table-column
     prop="discharge"
     label="放电量(kWh)"
     width="120"
   ></el-table-column>
   <el-table-column
     prop="saveElectricity"
     label="节约电费(元)"
     width="130"
     sortable="custom"
   ></el-table-column>
   <el-table-column
     prop="customerElectricityRevenue"
     label="客户电费收益(元)"
     width="160"
     sortable="custom"
   ></el-table-column>
   <el-table-column
     prop="ownElectricityRevenue"
     label="结算电费(元)"
     width="130"
     sortable="custom"
   ></el-table-column>

   <el-table-column label="操作">
     <template slot-scope="{ row }">
       <el-button
         v-if="row.name !== '总计'"
         type="text"
         @click="goElectricityBill(row.id)"
       >
         结算单
       </el-button>
     </template>
   </el-table-column>
 </el-table>
methods: {
	soltHandle(column) {
        console.log(column)
        //不参与排序的数组
        let freeGood = []
        //参与排序的数组
        let elseFree = []
        //fieldName 为对应列的prop
        let fieldName = column.prop
        let sortingType = column.order
        //降序
        if (sortingType == 'descending') {
          this.stationTableData.forEach((item) => {
            //在整个tableData中找到不参与排序的所有数据
            if (!item.id) {
              //不参与排序的所有数据加到数组中
              freeGood.push(item)
            } else {
              //参与排序的数据
              elseFree.push(item)
            }
          })
          this.stationTableData = elseFree.sort((a, b) => {
            if (typeof a[fieldName] == 'string') {
              return b[fieldName].localeCompare(a[fieldName])
            } else if (typeof a[fieldName] == 'number') {
              return b[fieldName] - a[fieldName]
            }
          })
          this.stationTableData = [...this.stationTableData, ...freeGood]
        } else {
          this.stationTableData.forEach((item) => {
            //在整个tableData中找到不参与排序的所有数据
            if (!item.id) {
              //不参与排序的所有数据加到数组中
              freeGood.push(item)
            } else {
              //参与排序的数据
              elseFree.push(item)
            }
          })
          this.stationTableData = elseFree.sort((a, b) => {
            if (typeof a[fieldName] == 'string') {
              return a[fieldName].localeCompare(b[fieldName])
            } else if (typeof a[fieldName] == 'number') {
              return a[fieldName] - b[fieldName]
            }
          })
          this.stationTableData = [...this.stationTableData, ...freeGood]
        }
      },
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue2 中,el-table-column 接口的排序功能实现与 Vue3 类似,也是通过 sort-method 属性来实现的。以下是一个简单的示例: ```html <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="Name" sortable :sort-method="sortByName"></el-table-column> <el-table-column prop="age" label="Age" sortable></el-table-column> </el-table> ``` ```javascript export default { data() { return { tableData: [ { name: 'Alice', age: 20 }, { name: 'Bob', age: 25 }, { name: 'Charlie', age: 18 } ] }; }, methods: { sortByName(a, b) { return a.name.localeCompare(b.name); } } }; ``` 在上面的示例中,我们给第一个 el-table-column 添加了 sort-method 属性,并将其绑定到一个名为 sortByName 的方法上。这个方法使用 String.prototype.localeCompare() 方法来比较两个字符串的大小关系,从而实现按照姓名排序的功能。第二个 el-table-column 没有指定 sort-method 属性,因此默认按照数字大小排序。 需要注意的是,sort-method 只能用于排序,而不能用于筛选。如果需要筛选功能,可以使用 el-table-column 的 filters 属性配合 filter-method 实现。另外,还需要在 el-table 上添加 :default-sort 属性来指定默认排序的列和排序方式。例如: ```html <el-table :data="tableData" :default-sort="{ prop: 'age', order: 'descending' }" style="width: 100%"> <el-table-column prop="name" label="Name" sortable :sort-method="sortByName"></el-table-column> <el-table-column prop="age" label="Age" sortable></el-table-column> </el-table> ``` 在上面的示例中,我们通过 :default-sort 属性指定了默认按照年龄倒序排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端~初学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值