elementui 组件的二次封装

发布时间:2023-03-20 14:30

在使用elementui开发过程中,在业务中表格的重复性比较多,每写一个页面都要去复制一份表格的代码这个时候就会产生大量重复的代码。但是在同一个系统中表格的样式基本上是比较固定的,而且功能也都一样。如果每个地方都复制一份相似的代码,既不利于后期的维护代码也不简洁。为此我对原组件进行了简单的二次封装

参数说明

参数 说明 类型
loading 表格的加载 Boolean
size 表格的尺寸 String
tableData 表格数据 Array
pager 分页配置 Object
columns 表头 Array
isCheckbox 是否展示复选框 Boolean
isOperate 是否展示操作列 Boolean
isPaging 是否展示分页 Boolean

table组件封装

<template>
  <div class="common-table">
    <el-table
      :data="tableData"
      border="border"
      size="mini"
      style="width: 100%"
      @selection-change="handleSelectionChange"
      :header-cell-style="{ background: '#FAFAFA', color: '#606266' }"
    >
      <el-table-column
        v-if="isCheckbox"
        type="selection"
        width="50"/>
      <el-table-column
        v-for="(item, index) in columns"
        :key="index"
        :prop="item.filed"
        :label="item.title"
        :align="item.align ? item.align : 'center'"
        :width="item.width"
      >
        <template slot-scope="scope">
          <el-tag
            v-if="item.filed === 'status_text'"
            :type="scope.row.status | statusFilter"
          >
          {{ scope.row.status_text }}
          el-tag>
          <p v-else>{{ scope.row[item.filed] }}p>
        template>
      el-table-column>
      <el-table-column label="操作" align="center" v-if="isOperate">
        <template slot-scope="scope">
          <slot :row="scope.row" :index="scope.$index">slot>
        template>
      el-table-column>
      <div slot="empty">
        <span>暂无数据span>
      div>
    el-table>
    <el-pagination
      style="text-align: right;margin:20px 0;"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="pager.currentPage"
      :page-size="pager.pageSize"
      :page-sizes="pager.pageSizes"
      :total="pager.total"
      :layout="pager.layout">
    el-pagination>
  div>
template>

<script>
export default {
  props: {
    tableData: {
      type: Array,
      default: () => []
    },
    pager: {
      type: Object,
      default: () => {}
    },
    columns: {
      type: Array,
      default: () => []
    },
    isCheckbox: {
      type: Boolean,
      default: false
    },
    isOperate: {
      type: Boolean,
      default: false
    }
  },
  filters: {
    statusFilter (status) {
      const statusMap = {
        1: 'success',
        2: 'danger'
      }
      return statusMap[status]
    }
  },
  data () {
    return {}
  },
  created () {},
  methods: {
    handleSizeChange (val) {
      this.$emit('handleSizeChange', val)
    },
    handleCurrentChange (val) {
      this.$emit('handleCurrentChange', val)
    },
    handleSelectionChange (val) {
      this.$emit('handleSelectionChange', val)
    }
  }
}
script>

<style lang="scss" scoped>

style>

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号