ElementUI中统计Table筛选结果数量

在这里插入图片描述1、el-table标签栏添加@filter-change="filterChange"

2、需过滤的列el-table-column加上

:filters="type"
:filter-multiple='false'
filter-placement='right-end'

3、初始化页面界面显示数据

created () {
    this.tableData = this.tableTempData // tableTempData为临时静态数据
}

4、监听计算表格数量

computed: {
    num: function () {
        return this.tableData.length
    }
}

5、过滤事件

filterChange (filters) {
    for (const key in filters) {
        if (filters[key].length > 0) {
            // 配合data中定义的数据枚举数组type,确定操作的是那一列
            if (filters[key][0].substr(0, 1) === 'p') {
                let queryParams = null
                // 获取选中的枚举值
                queryParams = filters[key][0].substr(1, 2)
                // 1、用的是静态数据,根据枚举值确定tableData
                // 2、如果用的是http请求的话,将queryParams作为参数去获取结果集,赋值给tableData即可
                if (queryParams === '') {
                    this.tableData = this.tableTempData
                } else {
                    this.tableData = this.tableTempData.filter((item) => item.status === queryParams)
                }
            }
        }
    }
}

6、隐藏掉组件自带的全部枚举,使用自定义的

.el-table-filter__list li:first-child {
  display: none;
}

7、单页面的完整代码

<template>
  <div class="ele-table">
    <h3>数量({{num}})</h3>
    <el-table ref="filterTable"
              :data="tableData"
              style="width: 100%"
              @filter-change="filterChange">
      <el-table-column prop="date"
                       label="日期"
                       width="180">
      </el-table-column>
      <el-table-column prop="name"
                       label="姓名"
                       width="180">
      </el-table-column>
      <el-table-column prop="status"
                       label="订单状态"
                       width="180"
                       column-key="status"
                       :filters="type"
                       :filter-multiple='false'
                       filter-placement='right-end'>
        <template slot-scope='scope'>
          <span v-if='scope.row.status === "1"'>状态01</span>
          <span v-if='scope.row.status === "2"'>状态02</span>
          <span v-if='scope.row.status === "3"'>状态03</span>
          <span v-if='scope.row.status === "4"'>状态04</span>
        </template>
      </el-table-column>
      <el-table-column prop="address"
                       label="地址"
                       :formatter="formatter">
      </el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  data () {
    return {
      tableData: [],
      tableTempData: [{
        date: '2016-05-02',
        name: '王小虎',
        status: '1',
        address: '上海市普陀区金沙江路 1518 弄',
      }, {
        date: '2016-05-04',
        name: '王小虎',
        status: '2',
        address: '上海市普陀区金沙江路 1517 弄',
      }, {
        date: '2016-05-01',
        name: '王小虎',
        status: '2',
        address: '上海市普陀区金沙江路 1519 弄',
      }, {
        date: '2016-05-03',
        name: '王小虎',
        status: '4',
        address: '上海市普陀区金沙江路 1516 弄',
      }],
      type: [
        {
          text: '全部',
          value: 'p'
        }, {
          text: '状态01',
          value: 'p1'
        }, {
          text: '状态02',
          value: 'p2'
        },
        {
          text: '状态03',
          value: 'p3'
        }, {
          text: '状态04',
          value: 'p4'
        }
      ],
    }
  },
  created () {
    this.tableData = this.tableTempData
  },
  computed: {
    num: function () {
      return this.tableData.length
    }
  },
  methods: {
    formatter (row) {
      return row.address
    },
    filterChange (filters) {
      for (const key in filters) {
        if (filters[key].length > 0) {
          if (filters[key][0].substr(0, 1) === 'p') {
            let queryParams = null
            queryParams = filters[key][0].substr(1, 2)
            if (queryParams === '') {
              this.tableData = this.tableTempData
            } else {
              this.tableData = this.tableTempData.filter((item) => item.status === queryParams)
              console.log(queryParams, this.tableData, filters)
            }
          }
        }
      }
    }
  }
}
</script>


<style>
.el-table-filter__list li:first-child {
  display: none;
}
</style>
<style scoped>
.ele-table {
  margin-top: 20px;
}
h3 {
  text-indent: 2rem;
}
.el-table--fit {
  margin-top: 20px;
  padding: 0 30px 30px 30px;
  border-top: 1px solid #ccc;
}
</style>
在使用 Element UI el-table 组件时,可以通过设置 `span-method` 属性来实现对上下行数值连续性的校验。具体实现方式如下: 1. 在表格数据添加一个字段,用于记录当前行是否需要合并单元格,可以命名为 `rowSpan`。 2. 在表格设置 `span-method` 属性,该属性的值是一个回调函数,用于判断当前单元格是否需要进行合并。 3. 在回调函数,可以判断当前单元格所在的行和上一行是否需要合并,如果需要,则返回一个对象,包含合并行数和列数两个属性。 示例代码如下: ```html <template> <el-table :data="tableData" :span-method="handleSpanMethod"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="gender" label="性别"></el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 18, gender: '男', rowSpan: 1 }, { name: '李四', age: 20, gender: '女', rowSpan: 1 }, { name: '王五', age: 22, gender: '男', rowSpan: 2 }, { name: '赵六', age: 25, gender: '女', rowSpan: 1 }, { name: '钱七', age: 28, gender: '男', rowSpan: 1 }, { name: '孙八', age: 30, gender: '女', rowSpan: 1 }, ], }; }, methods: { handleSpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { // 判断当前单元格所在的行和上一行是否需要合并 if (rowIndex > 0 && this.tableData[rowIndex - 1].name === row.name) { return { rowspan: row.rowSpan + 1, colspan: 1, }; } else { return { rowspan: row.rowSpan, colspan: 1, }; } } }, }, }; </script> ``` 以上代码,`handleSpanMethod` 是一个回调函数,它接收一个参数 `{ row, column, rowIndex, columnIndex }`,分别表示当前单元格所在的行数据、列数据、行索引和列索引。在该函数,我们首先判断当前单元格所在的列是否为第一列,如果是,则判断当前单元格所在的行和上一行是否需要合并,如果需要,则返回一个对象,包含 `rowspan` 和 `colspan` 两个属性。其,`rowspan` 表示需要合并的行数,`colspan` 表示需要合并的列数。 如果你对这个问题还有疑问,欢迎继续提问。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值