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