1.ElementUI中table的sortable使用

ElementUI中table的sortable使用

ElementUI-table

1.业务分析

将相对应的字段进行升序或者降序,在后台管理系统中,后端返回的指定的页面的数据,所有后端将排序做好,前端传:排序字段和排序方法

效果:默认升序,点击排序的icon,上箭头升序,下箭头降序

在这里插入图片描述

2.实现

在这里插入图片描述

在列中设置sortable属性即可实现以该列为基准的排序,接受一个Boolean,默认为false。可以通过 Table 的default-sort属性设置默认的排序列和排序顺序。可以使用sort-method或者sort-by使用自定义的排序规则。如果需要后端排序,需将sortable设置为custom,同时在 Table 上监听sort-change事件,在事件回调中可以获取当前排序的字段名和排序顺序,从而向接口请求排序后的表格数据。在本例中,我们还使用了formatter属性,它用于格式化指定列的值,接受一个Function,会传入两个参数:row和column,可以根据自己的需求进行处理。

elementUI-table

具体代码

<template>
  <div style="padding:20px;height:100%" class="resolve">
    <el-table
      :data="tableData"
      stripe
      border
      @sort-change="changeTableSort"
      style="width:100%;"
    >
      <el-table-column type="selection" width="55"> </el-table-column>
      <el-table-column type="index" width="50" label="序号"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column
        prop="address"
        label="地址"
        width="200"
      ></el-table-column>
      <el-table-column prop="payDate" label="payDate"></el-table-column>
      <el-table-column
        prop="come"
        label="come"
        sortable="custom"
      ></el-table-column>
      <el-table-column prop="pay" label="pay"></el-table-column>
      <el-table-column prop="money" label="money"></el-table-column>
    </el-table>
    <div class="block">
      <el-pagination
        background
        layout="prev, pager, next"
        :total="50"
        :page-size="5"
        :current-page="currentPage"
        @current-change="handlePageCurrentChange"
      >
      </el-pagination>
    </div>
  </div>
</template>

<script>
import { getHomeData } from "@/api/index";
export default {
  name: "",
  data() {
    return {
      tableData: [],
      currentPage: 1,
      fieldName: "",
      sortMethod: "",
    };
  },
  mounted() {
    this.getData();
  },
  methods: {
    getData() {
      var data = {
        pageIndex: this.currentPage,
        pageSize: 10,
        come: this.sortMethod, // 排序的字段:排序的方式(升序/降序)
      };
      getHomeData(data).then((res) => {
        console.log(res);
        console.log("table", res.data.content);
        if (res.code == 0) {
          this.tableData = res.data.content;
        }
      });
    },
    handlePageCurrentChange(value) {
      console.log("value", value);
      this.currentPage = value;
      this.getData();
    },
    // 排序
    changeTableSort(column) {
      console.log("column", column);
      // this.fieldName = column.prop;
      var sortingType = column.order;
      sortingType == "ascending"
        ? (this.sortMethod = "ASC")
        : (this.sortMethod = "DESC");
      this.getData(this.sortMethod);
    },
  },
};
</script>

<style scoped>
.resolve {
  overflow-y: auto;
}
.block {
  margin-top: 20px;
}
</style>

在需要排序的字段上增加sortable=“custom”,el-table增加@sort-change事件监听排序

Mock模拟后端

Mockjs

npm install --save mockjs
// Mock/mock.js
import Mock from "mockjs";
let list = []; //保存数据

for (var i = 0; i < 100; i++) {
  //循环100次
  list.push({
    id: Mock.Random.guid(),
    name: Mock.Random.cname(),
    address: Mock.mock("@county(true)"), //北京市 昌平区 北七家镇
    payDate: Mock.Random.datetime(),
    payType: Mock.Random.integer(0, 8), //类型 【1,  8】
    come: Mock.Random.integer(0, 9999),
    pay: Mock.Random.integer(0, 9999),
    money: Mock.Random.integer(0, 9999),
  });
}


export default Mock.mock(/\/user\/list/, "post", (data) => {
  console.log("data", data);
  var info = JSON.parse(data.body);
  var [index, size, come, total] = [
    info.pageIndex,
    info.pageSize,
    info.come,
    list.length,
  ];
  var len = total / size;
  var totalPages = len - parseInt(len) > 0 ? parseInt(len) + 1 : len;
  console.log('come',come);
  if (!come || (come && come == "ASC")) {
    list.sort(function(a, b) {
      return a.come - b.come;
    });
  } else if (come == "DESC") {
    list.sort(function(a, b) {
      return b.come - a.come;
    });
  }
  var newDataList = list.slice((index - 1) * size, index * size);
  return {
    code: "0",
    message: "success",
    data: {
      pageIndex: index,
      pageSize: size,
      content: newDataList,
      total: total,
      totalPages: totalPages,
    },
  };
});

// main.js
import './mock/mock'

request axios

npm install --save axios
// utils/request.js
//请求工具类
import axios from 'axios'

//1.创建server
const server = axios.create({
    baseURL:'localhost:8080',
    timeout:5000
})
//2.请求拦截
server.interceptors.request.use(config=>{
    return config
})
//3.响应拦截
server.interceptors.response.use(res=>{
    return res.data
})

export default server

api

//接口管理
import request from '../utils/request'

//1.获取list数据
export function getHomeData(data){
    return request({
        url:'/user/list',
        method:'post',
        data:data
    })
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值