vue 针对表格的封装

FilterTable.vue

<el-form :model="form">

      <el-table

        ref="table"

        v-loading="tableLoading"

        :data="tableData"

        :row-key="rowKey"

        @selection-change="handleSelectionChange"

      >

        <el-table-column

          :reserve-selection="reserveSelection"

          type="selection"

          width="80"

          v-if="selection"

        />

        <el-table-column

          v-for="(item, index) in columns"

          :key="index"

          v-bind="item"

          :formatter="item.render"

          :show-overflow-tooltip="tooltip"

          :render-header="item.renderHeader"

        />

      </el-table>

    </el-form>

    <el-pagination

      :current-page="currentPage"

      :page-size="pageSize"

      :page-sizes="pageSizes"

      :layout="layout"

      :total="total"

      @size-change="sizeChange"

      @current-change="currentChange"

      @prev-click="prevClick"

      @next-click="nextClick"

      @quick-prev-click="quickPrevClick"

      @quick-next-click="quickNextClick"

    />

  data() {

    return {

      form: {},

      inputVal: '',

      checkedColumns: [],

      columns: []

    }

  },

  watch: {

    columns: function (val) {

      this.checkedColumns = val.map((item) => item.label)

    },

    columnsList: {

      handler: function (val) {

        // this.columns = val.filter((item) => item.isShow)

        this.columns = val.filter((item) => !item.isHidden)

        console.log(this.columns)

      },

      immediate: true

    }

  },

method: {

handleSelectionChange(val) {

      this.$emit('update:multipleSelection', val)

    },

    handleRowClick(row) {

      this.$refs.multipleTable.toggleRowSelection(row)

    },

    clearSelection() {

      this.$refs.table.clearSelection?.()

    },

    inputChange() {

      console.log(this.form)

    },

    handleView(row) {

      this.$emit('handleView', row)

    },

    handleEdit(row) {

      this.$emit('handleEdit', row)

    },

    resetColumns() {

      this.checkedColumns = this.columns.map((item) => item.label)

    },

    delCheckedColumns(index) {

      this.checkedColumns.splice(index, 1)

    },

  beforeClose(done) {

      this.checkedColumns = this.columns.map((item) => item.label)

      done()

    },

    sizeChange(currentSize) {

      this.$emit('sizeChange', currentSize)

    },

    currentChange(currentPage) {

      this.$emit('currentChange', currentPage)

    },

    prevClick(currentPage) {

      this.$emit('prevClick', currentPage)

    },

    nextClick(currentPage) {

      this.$emit('nextClick', currentPage)

    },

    quickPrevClick(currentPage) {

      this.$emit('quickPrevClick', currentPage)

    },

    quickNextClick(currentPage) {

      this.$emit('quickNextClick', currentPage)

    }

}

-- 封装完结

组件调用

   <FilterTable

      style="max-width: 100%; width: 100%"

      :columnsList="columnsList"

      :tableData="tableData"

      :currentPage="currentPage"

      :pageSize="pageSize"

      :totalCount="totalCount"

      :tableLoading="tableLoading"

      layout="total,sizes,prev,pager,next,jumper"

      @sizeChange="handleSizeChange"

      @currentChange="handleCurrentChange"

      @prevClick="handlePrevClick"

      @nextClick="handleNextClick"

    />

 columnsList: [

        {

          prop: 'appName',

          label: ‘表头一’,

          render: (row) => {

            return <span>{row.appName || '--'}</span>

          }

        },

        {

          prop: 'prefix',

          label: ‘‘表头二’,

          render: (row) => {

            return <span>{row.prefix || '--'}</span>

          }

        },

        {

          prop: 'deployCode',

          label: ‘表头三’,,

          render: (row) => {

            return <span>{row.deployCode || '--'}</span>

          }

        },

        {

          prop: 'country',

          label: ‘表头四’,,

          render: (row) => {

            return <span>{row.country || '--'}</span>

          }

        },

// 传入就会填充表格

tableData: [

{

          appName: "bdm_shop_code",

          country: "CN",

          createdDate: "2022-01-14 10:11:38",

          currentValue: 1110132,

          deployCode: "",

          description: null,

          id: 88,

          lastModifiedDate: "2022-02-21 11:11:08",

          length: 6,

          prefix: "浅醉",

          province: "35",

          strategy: 1,

          strategyDescription: "国家码 + 省份码 + 长度"

        },

        {

          appName: "bdm_code",

          country: "CZ",

          createdDate: "2022-01-14 10:11:38",

          currentValue: 1110132,

          deployCode: "",

          description: null,

          id: 88,

          lastModifiedDate: "2022-02-21 11:11:08",

          length: 6,

          prefix: "前缀",

          province: "35",

          strategy: 1,

          strategyDescription: "国家码 + 长度"

        }

]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值