# 表格组件

【基于 element 表格组件重构】 说明:目前只是简单的封装满足繁琐的业务要求及冗余的代码,并未完整实现所有 element 表格功能部分功能可能不支持,如有需要请讨论区提出

# 案例展示

An image

# 代码示例

<template>
  <div class="useReTable">
    <reTable ref="multipleTable" :tableData="tableData" :filterColums="filterColums" selectType="selection" @handleSelect="handleSelectFn">
      <template v-slot:tableBody="{ scopeData: { row, column } }">
        <template v-if="column.property === 'enable'">
          <div v-if="row.enable === 0" style="color: #d9001b">disable</div>
          <div v-else style="color: #67c23a">enable</div>
        </template>
        <template v-else-if="column.property === 'imgCover'">
          <img v-if="row.imgCover" :src="row.imgCover" style="width: 80px; height: 80px" />
        </template>
        <template v-else-if="column.property === 'effectiveDate'">{{ row.date }}~{{ row.endDate }}</template>
        <template v-else-if="column.property === 'edit'">
          <el-button type="text" size="small" @click="openFn(row)">open</el-button>
          <el-button type="text" size="small" @click="editFn(row)">edit</el-button>
        </template>
        <template v-else>{{ row[column.property] }}</template>
      </template>
    </reTable>
  </div>
</template>

<script>
  export default {
    name: 'useReTable',
    data() {
      return {
        sortData: ['age'],
        filterColums: [
          {
            prop: 'enable',
            label: '是否禁用',
          },
          {
            prop: 'province',
            label: '省份',
          },
          {
            prop: 'city',
            label: '市区',
          },
          {
            prop: 'address',
            label: '地址',
          },
          {
            prop: 'zip',
            label: '邮编',
          },
          {
            prop: 'age',
            label: '年龄',
          },
          {
            prop: 'effectiveDate',
            label: '有效日期',
          },
          {
            prop: 'imgCover',
            label: '封面',
            width: '180',
          },
          {
            label: '操作',
            prop: 'edit',
            fixed: 'right',
            width: '180',
          },
        ],
        tableData: [
          {
            date: '2016-05-02',
            endDate: '2020-02-01',
            name: '王小虎',
            province: '上海',
            city: '普陀区',
            address: '上海市普陀区金沙江路 1518 弄',
            zip: 200333,
            age: 12,
            enable: 1,
            imgCover: 'https://tva1.sinaimg.cn/large/9bd9b167gy1g2qkwm4hsoj21hc0u04qp.jpg',
          },
          {
            date: '2016-05-04',
            endDate: '2020-06-01',
            name: '王小虎',
            province: '上海',
            city: '普陀区',
            address: '上海市普陀区金沙江路 1517 弄',
            zip: 200333,
            age: 22,
            enable: 1,
            imgCover: `https://tva1.sinaimg.cn/large/9bd9b167gy1g2qkwm4hsoj21hc0u04qp.jpg`,
          },

          {
            date: '2016-05-01',
            endDate: '2021-01-01',
            name: '王小虎',
            province: '上海',
            city: '普陀区',
            address: '上海市普陀区金沙江路 1519 弄',
            zip: 200333,
            age: 9,
            enable: 0,
            imgCover: 'https://tva1.sinaimg.cn/large/9bd9b167gy1g2qkwm4hsoj21hc0u04qp.jpg',
          },

          {
            date: '2016-05-03',
            endDate: '2021-10-01',
            name: '王小虎',
            province: '上海',
            city: '普陀区',
            address: '上海市普陀区金沙江路 1516 弄',
            zip: 200333,
            age: 2,
            enable: 0,
            imgCover: '',
          },
        ],
      }
    },
    mounted() {},
    methods: {
      toggleSelection() {
        console.log('this.$refs.multipleTable', this.$refs.multipleTable)
      },
      openFn(val) {
        console.log('openFn', val)
      },
      editFn(val) {
        console.log('editFn', val)
      },
      handleSelectFn(val) {
        console.log('handleSelectFn ', val)
      },
    },
  }
</script>

# Attributes

参数 说明 类型 是否必填 默认值
tableData 显示的数据 Array false -
filterColums 表头数据 Array false -
colType 列表显示选择框、序号 object false -
height Table 的高度,默认为自动高度 string/number false -
max-height Table 的最大高度 string/number false -
stripe 是否为斑马纹 table boolean false -
border 是否带有纵向边框 boolean false -
size Table 的尺寸 medium/small/mini false -
fit 列的宽度是否自撑开 boolean false true
show-header 是否显示表头 boolean false true
highlight-current-row 是否要高亮当前行 boolean false false
empty-text 空数据时显示的文本内容可以通过 slot="empty" 设置 String false 暂无数据
default-expand-all 是否默认展开所有行 Boolean false false

# Table Methods

事件名 说明 参数
select 当用户手动勾选数据行的 Checkbox 时触发的事件 selection, row
select-all 当用户手动勾选全选 Checkbox 时触发的事件 selection
selection-change 当选择项发生变化时会触发该事件 selection
cell-mouse-enter 当单元格 hover 进入时会触发该事件 row, column, cell, event
cell-mouse-leave 当单元格 hover 退出时会触发该事件 row, column, cell, event
cell-click 当某个单元格被点击时会触发该事件 row, column, cell, event
row-contextmenu 当某一行被鼠标右键点击时会触发该事件 row, column, event
cell-dblclick 当某个单元格被双击击时会触发该事件 row, column, cell, event
row-click 当某一行被点击时会触发该事件 row, column, event
sort-change 当表格的排序条件发生变化的时候会触发该事件 { column, prop, order }
filter-change 当表格的筛选条件发生变化的时候会触发该事件 currentRow, oldCurrentRow
current-change 当表格的当前行发生变化的时候会触发该事件, selection, row
expand-change 当用户对某一行展开或者关闭的时候会触发该事件 selection, row

# Table-column Attributes

事件名 说明 类型 可选值 默认值
column-key column 的 key string - -
label 显示的标题 string - -
prop 对应列内容的字段名,也可以使用 property 属性 string - -
width 对应列的宽度 string - -
min-width 对应列的最小宽度 string - -
fixed 列是否固定在左侧或者右侧,true 表示固定在左侧 string, boolean true, left, right -
width string - -
sortable 对应列是否可以排序, boolean, string true, false, 'custom' false
sort-method 对数据进行排序的时候使用的方法 Function(a, b) - -
sort-by 指定数据按照哪个属性进行排序,仅当 sortable 设置为 true 且没有设置 sort-method 的时候有效 String/Array/Function(row, index) - -
sort-orders 数据在排序时所使用排序策略的轮转顺序 array - ['ascending', 'descending', null]
resizable 对应列是否可以通过拖动改变宽度 boolean - true
formatter 用来格式化内容 Function(row, column, cellValue, index) - -
show-overflow-tooltip 当内容过长被隐藏时显示 tooltip Boolean - false
align 对齐方式 string left/center/right left
header-align 表头对齐方式,若不设置该项,则使用表格的对齐方式 left/center/right - -
class-name 列的 className string
label-class-name 当前列标题的自定义类名 string
selectable 仅对 type=selection 的列有效,类型为 Function,Function 的返回值用来决定这一行的 CheckBox 是否可以勾选 Function(row, index)
reserve-selection 仅对 type=selection 的列有效,类型为 Boolean,为 true 则会在数据更新之后保留之前选中的数据(需指定 row-key Boolean false
filters 数据过滤的选项,数组格式,数组中的元素需要有 text 和 value 属性。 Array[{ text, value }]
filter-placement 过滤弹出框的定位 String 与 Tooltip 的 placement 属性相同
filter-multiple 数据过滤的选项是否多选 Boolean true
filter-method 数据过滤使用的方法,如果是多选的筛选项,对每一条数据会执行多次,任意一次返回 true 就会显示。 Function(value, row, column)
filtered-value 选中的数据过滤项,如果需要自定义表头过滤的渲染方式,可能会需要此属性。 Array