Table 表格
引入组件
<template>
<m-table :columns="columns" :data-source="dataSource"></m-table>
</template>
<script>
import { MTable } from "@csr/m_ui";
export default {
components: {
MTable
},
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' },
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级' },
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age'},
{title: '分数', field: 'score'},
{title: '年级', field: 'grade'}
]
}
}
}
</script>
基础用法
代码
<div>
<m-table :columns="columns" :data-source="dataSource"></m-table>
</div>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' },
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级' },
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age'},
{title: '分数', field: 'score'},
{title: '年级', field: 'grade'}
]
}
}
}
</script>
有条纹的
代码
<div>
<m-table :columns="columns" :data-source="dataSource" :striped="true"></m-table>
</div>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' },
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级' },
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age'},
{title: '分数', field: 'score'},
{title: '年级', field: 'grade'}
]
}
}
}
</script>
有边框的
代码
<div>
<m-table :columns="columns" :data-source="dataSource" :bordered="true"></m-table>
</div>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' },
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级' },
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age'},
{title: '分数', field: 'score'},
{title: '年级', field: 'grade'}
]
}
}
}
</script>
loading状态
代码
<div>
<m-table :columns="columns" :data-source="dataSource" :loading="true"></m-table>
</div>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' },
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级' },
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age'},
{title: '分数', field: 'score'},
{title: '年级', field: 'grade'}
]
}
}
}
</script>
固定头部
代码
<div>
<m-table :columns="columns" :data-source="dataSource1" :fixedHead="true" :height="300"></m-table>
</div>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' },
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级' },
{ key: 5, name: '胖子', age: 10, score: 80, grade: '四年级' },
{ key: 6, name: '小红', age: 17, score: 100, grade: '六年级' },
{ key: 7, name: '小绿', age: 15, score: 77, grade: '四年级' },
{ key: 8, name: '阿紫', age: 20, score: 88, grade: '五年级' },
{ key: 9, name: 'tony', age: 28, score: 78, grade: '二年级' },
{ key: 10, name: 'mark', age: 30, score: 22, grade: '三年级' },
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age'},
{title: '分数', field: 'score'},
{title: '年级', field: 'grade'}
]
}
}
}
</script>
有序号的
代码
<div>
<m-table :columns="columns" :data-source="dataSource" :extended-columns="extendedColumns"></m-table>
</div>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' },
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级' },
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age'},
{title: '分数', field: 'score'},
{title: '年级', field: 'grade'}
],
extendedColumns: [
{ field: 'index', width: 50}
]
}
}
}
</script>
多选
代码
<div>
<m-table
:columns="columns" :data-source="dataSource"
:extended-columns="extendedColumns" :selected-items.sync="selectedItems"
></m-table>
</div>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' },
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级' },
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age'},
{title: '分数', field: 'score'},
{title: '年级', field: 'grade'}
],
extendedColumns: [
{ field: 'selection', width: 50 }
],
selectedItems: []
}
}
}
</script>
展开行
代码
<div>
<m-table
:columns="columns" :data-source="dataSource"
:extended-columns="extendedColumns"
></m-table>
</div>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级', description: '这是一行描述文字'},
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级', description: '这是一行描述文字' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级', description: '这是一行描述文字' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级', description: '这是一行描述文字' },
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age'},
{title: '分数', field: 'score'},
{title: '年级', field: 'grade'}
],
extendedColumns: [
{ field: "expend", expendField: "description", width: 50 }
]
}
}
}
</script>
排序功能
代码
<div>
<m-table
:columns="columns" :data-source="dataSource"
@on-sort="onSort"
></m-table>
</div>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级'},
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级'},
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级'},
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级'},
],
columns: [
{title: '姓名', field: 'name'},
{title: '年龄', field: 'age', sortType: true},
{title: '分数', field: 'score', sortType: true},
{title: '年级', field: 'grade'}
]
}
},
methods: {
onSort({ sortType, currentColumn }) {
const field = currentColumn.field;
this.dataSource3 = this.dataSource3.sort((a, b) => {
// 升序
if(sortType === 'asc') {
return b[field] - a[field]
}
// 降序
if(sortType === 'desc') {
return a[field] - b[field]
}
})
}
}
</script>
扩展列
代码
<m-table :columns="columns2" :data-source="dataSource">
<template v-slot:actions="slotProps">
<m-button>编辑</m-button>
<m-button>删除</m-button>
</template>
</m-table>
<script>
export default {
data() {
return {
dataSource: [
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' },
{ key: 2, name: '小李', age: 9, score: 40, grade: '二年级' },
{ key: 3, name: '阿花', age: 12, score: 90, grade: '五年级' },
{ key: 4, name: '老王', age: 30, score: 60, grade: '六年级' },
],
columns: [
{title: '姓名', field: 'name', width: 100},
{title: '年龄', field: 'age', width: 100},
{title: '分数', field: 'score', width: 100},
{title: '年级', field: 'grade', width: 150}
]
}
}
}
</script>
API
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
columns | 表头配置,必传。详情见columns表 | array | |
extendedColumns | 表头扩展配置,详情见extendedColumns表 | array | |
dataSource | 表格数据,必传。详情见columns表 | array | |
bordered | 是否展示外边框和列边框 | boolean | false |
striped | 是否展示斑马纹 | boolean | false |
selectedItems | 选中的行,支持.sync | array | |
loading | 是否开启loading状态 | boolean | false |
fixedHead | 是否开启固定表头 | boolean | false |
height | 表格高度 | number |
columns
列描述数据对象,是 columns 中的一项属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
title | 列头显示文字 | string | |
field | 对应dataSource中需要展示的数据的key值 | string | |
sortType | 是否展示排序图标,可选值:true(展示排序图标), asc(展示排序图标,并点亮升序图标), desc(展示排序图标,并点亮降序图标) | boolean | string | |
width | 列宽 | number |
extendedColumns
扩展列描述数据对象,是 extendedColumns 中的一项属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
field | 扩展列类型,可选值:index(展示序号),selection(多选类型),expend(当表格中的行需要展开时的类型) | string | |
expendField | 当表格中的行需要展开时需要该属性,值为展开行的key值 | string | |
width | 扩展列的宽度 | string |
dataSource
表格数据属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
key | 当前行的标识,值唯一。必传 | string | number |
事件
事件名 | 说明 | 回调参数 |
---|---|---|
on-change | 选择行时触发 | { selected: '是否选中, 类型boolean', selectedItems: '选中的行,类型array'} |
actions slot
actions 插槽是一个带有slot-scope 特性的插槽,接收的 prop 对象中提供
了一个item对象,以上面的例子说明,第一行中的item对象就是:
{ key: 1, name: '阿豆', age: 10, score: 100, grade: '三年级' }