前端分页el-table中的sortable按修改时间跨页排序

7 篇文章 0 订阅

在el-table-column中使用sortable就可以实现升序和降序,但是在前端分页中是只能按照当前分页排序,所以用了@sort-change

 

<!-- 表格 -->
<el-table
:row-class-name="tableRowClassname"
v-loading="loading"
:data="
  allList.slice(
	(currentPage - 1) * pageSize,
	currentPage * pageSize
  )
"
height="700"
@sort-change="changeSort"
border
stripe
class="mt-10"
>
	<el-table-column prop="name" label="店铺名"></el-table-column>
	<el-table-column
	  prop="storenumber"
	  label="店铺号" width="70"
	></el-table-column>
	<el-table-column prop="vlan1" label="ip地址"></el-table-column>
	<el-table-column prop="region" label="区域" width="70"></el-table-column>
	<el-table-column
	  prop="loopback"
	  label="loopback IP"
	></el-table-column>
	<el-table-column
	  prop="modify_time"
	  label="修改日期"
	  sortable
	></el-table-column>
	<el-table-column prop="opendate" label="开店日期"></el-table-column>
</el-table>

获取的数据修改时间是datetime格式的,因此要把T去掉,我这里简单把T替换掉,如果有更多的需求可以用moment转换

async getAllList() {
  this.loading = true;
  await this.$request({
	url: "/cmdb/searchBySome/",
	method: "get",
	params:{
	  query:this.keywords
	}
  })
	.then(res => {
	  console.log(res.data)
	  res.data.map(item => {
		item.modify_time = item.modify_time.replace("T", " ");
	  });
	  this.allList=res.data
	  // console.log(this.allList)
	  this.total = this.allList.length;
	  this.currentPage = 1
	  this.loading = false;
	})
	.catch(err => {
	  this.loading = false;
	});
},

 而后写排序的方法,_.cloneDeep是lodash的深拷贝方法,npm安装之后 import _ from 'lodash' 导入

    changeSort(val){
      let sortData=_.cloneDeep(this.allList)
      if(val.order==="descending"){
        if(val.prop==="modify_time"){
          // console.log(val.prop)
          sortData.sort(this.sortKeys(val.prop,true))
          // console.log(sortData)
        }
      }else{
        if(val.prop==="modify_time"){
          sortData.sort(this.sortKeys(val.prop,false))
        }
      }
      this.allList=sortData
      // this.currentPage=1
    },
    // 升序降序
    sortKeys(key,order){
      if(order){
        return (val1,val2)=>{
          return val2[key] > val1[key] ? 1 : -1
        }
      }else{
        return (val1,val2)=>{
          return val2[key] < val1[key] ? 1 : -1
        }
      }
    }

然后就可以了,order的作用是区别升序降序

moment的可以参考下面的文章,不过我个人觉得有点麻烦

https://blog.csdn.net/yangfan_357/article/details/100140641

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 el-table 表格分页且可以拖拽的功能,你可以使用 Element UI 提供的 el-pagination 分页组件和 el-table-column 的 sortable 属性来实现。以下是一个示例代码: ```html <template> <el-table :data="tableData" :default-sort="{ prop: 'date', order: 'descending' }" :row-key="row => row.id" :header-cell-style="{ 'background-color': '#f5f7fa', 'color': '#333' }" style="width: 100%;" @sort-change="handleSortChange" > <el-table-column prop="name" label="Name" sortable width="180" ></el-table-column> <el-table-column prop="date" label="Date" sortable width="180" ></el-table-column> <el-table-column prop="address" label="Address" width="180" ></el-table-column> <el-table-column label="Actions" width="120" > <template slot-scope="scope"> <span class="action-button">Edit</span> <span class="action-button">Delete</span> </template> </el-table-column> </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" style="margin-top: 20px; text-align: right;" ></el-pagination> </template> <script> export default { data() { return { tableData: [ { id: 1, name: 'John Doe', date: '2021-01-01', address: '123 Main St' }, { id: 2, name: 'Jane Smith', date: '2021-02-01', address: '456 Elm St' }, // more data... ], currentPage: 1, pageSize: 10, total: 20, }; }, methods: { handleSortChange(sort) { // 排序逻辑 console.log(sort); }, handleSizeChange(size) { // 每页显示条数改变逻辑 console.log(size); }, handleCurrentChange(page) { // 当前页码改变逻辑 console.log(page); }, }, }; </script> <style scoped> .action-button { color: #409eff; cursor: pointer; margin-right: 10px; } </style> ``` 在这个示例el-table 的数据通过 `tableData` 属性进行绑定,el-pagination 的当前页码、每页显示条数和总数分别绑定到 `currentPage`、`pageSize` 和 `total` 属性。你可以根据实际情况进行调整和修改。 需要注意的是,以上代码仅提供了分页排序的基本实现,拖拽功能需要根据具体需求进行自定义开发,可以使用 Element UI 提供的 el-draggable 组件结合 el-table 实现拖拽功能。具体实现方式可以参考 Element UI 官方文档的示例和说明。 希望这个示例可以帮助到你!如果有任何问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值