基于elementui的表头自定义筛选功能

2021-10-20  本文已影响0人  卖手机的程序猿

项目研发过程中遇到一个自动表头筛选的逻辑,其主要是利用el-table的 render-header属性进行实现的,话不多少,直接上代码:

render-header(ps):

列标题 Label 区域渲染使用的 Function

Function(h, { column, $index })

第一步:在el-table-column的增加该属性:render-header="renderHeader"


      <el-table-column prop="sowStatus" label="状态" align="center" :render-header="renderHeader" min-width="90">

          <template slot-scope="scope">

            <div v-if="scope.row.sowStatus == null">-</div>

            <div v-else>

              <span v-if="scope.row.sowBackFlag">已退回</span>

              <span v-else>{{emnuList.get(scope.row.sowStatus)}}</span>

            </div>

          </template>

        </el-table-column>

第二步:在methods里增加如下代码


renderHeader(createElement, { column, $index }) {

      let proty = column.property

      // console.log('该列的绑定数据', column)

      // console.log(proty)

      return createElement(

        'div',

        {

          style: 'display:flex;justify-content: center;'

        },

        [

          createElement(TableHeader, {

            style: 'cursor: pointer;',

            props: {

              column: column,

              options: proty,

              tableQuery: this.tableParams,

            }

          })

        ]

      )

    }

第三步:新建 TableHeader.vue组件


<template>

  <div class="table-header">

    <span @click="clickIcon(column)">{{ column.label }}<span class="el-icon-sort"></span></span>

  </div>

</template>

<script>

export default {

  name: 'TableHeader',

  data() {

    return {}

  },

  props: {

    type: {

      type: String,

      default: ''

    },

    defaultValue: {

      type: String,

      default: ''

    },

    options: {

      type: [Array, String],

      default: function() {

        return []

      }

    },

    defaultProps: {

      type: Object,

      default: function() {

        return {

          label: 'label',

          value: 'value'

        }

      }

    },

    //传递过来的接口参数

    tableQuery: {

      type: Object,

      default: function() {

        return {}

      }

    },

    cancelCb: {

      type: Function

    },

    // 父组件传递过来的自定义表列名字

    column: {

      type: Object,

      default: function() {

        return {

          label: 'label',

          value: 'value'

        }

      }

    }

  },

  mounted() {},

  methods: {

    clickIcon(column) {

      // 在这里处理排序的逻辑

    }

  }

}

</script>

<style scoped></style>

第四步:在script代码段引入自定义的表头组件


import TableHeader from './TableHeader'

上一篇 下一篇

猜你喜欢

热点阅读