antd-vue的table二次封裝

<template>
  <a-table
    :pagination="pagination"
    :dataSource="tableList"
    :columns="columns"
    :rowKey="rowKey"
    v-bind="$attrs"
    @change="onTableChange"
  >
    <template v-for="custom in columnsCustoms" v-slot:[custom.customRender]="text, record, index">
      <slot :name="custom.customRender" :text="text" :record="record" :index="index"></slot>
    </template>
  </a-table>
</template>
<script>
export default {
  data() {
    return {
      tableList: [],
      pagination: {
        current: 1,
        pageSize: 10,
        total: 0,
        showTotal: (total, range) => `共${total}條記錄`,
        showSizeChanger: true,
        showQuickJumper: true
      }
    }
  },
  props: {
    fetchData: {
      type: Function,
      required: true
    },
    columns: {
      type: Array,
      required: true
    },
    rowKey: {
      type: String,
      default: 'id'
    }
  },
  computed: {
    columnsCustoms() {
      return this.columns.filter(record => record.scopedSlots).map(item => item.scopedSlots)
    }
  },
  mounted() {
    this.getTableList(this.pagination)
  },
  methods: {
    getTableList(pagination) {
      const { data } = this.fetchData(pagination)
      if (data.code === 200) {
        const { records, total, current, pageSize } = data.data
        this.tableList = records
        this.pagination.total = total
        this.pagination.current = current
        this.pagination.pageSize = pageSize
      }
    },
    onTableChange(pagination) {
      this.getTableList(pagination)
    }
  }
}
</script>

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容