# 表格
TIP
对 element-ui table 组件的扩展
# 基础用法
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource"></pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "日期",
name: "date",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄",
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1516 弄",
},
],
};
},
};
</script>
<style lang="scss" scoped></style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 带状态表格
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource" :row-class-name="tableRowClassName"></pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "日期",
name: "date",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄",
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1516 弄",
},
],
};
},
methods: {
tableRowClassName({ row, rowIndex }) {
if (rowIndex === 1) {
return "warning-row";
} else if (rowIndex === 3) {
return "success-row";
}
return "";
},
},
};
</script>
<style>
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# 单个数据状态
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource" :row-class-name="tableRowClassName"></pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "日期",
name: "date",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
tag({ $index }) {
if ($index === 1) {
return { type: "success" };
} else if ($index === 3) {
return { type: "warning" };
}
return { type: "danger" };
},
},
{
label: "性别",
name: "sex",
width: 200,
tag: true,
dict: [
{
value: 0,
type: "danger",
name: "女",
},
{
value: 1,
type: "success", //success/info/warning/danger
name: "男",
},
],
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
date: "2016-05-02",
name: "王小虎",
sex: 0,
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
sex: 1,
address: "上海市普陀区金沙江路 1517 弄",
},
{
date: "2016-05-01",
name: "王小虎",
sex: 1,
address: "上海市普陀区金沙江路 1519 弄",
},
{
date: "2016-05-03",
name: "王小虎",
sex: 0,
address: "上海市普陀区金沙江路 1516 弄",
},
],
};
},
methods: {
tableRowClassName({ row, rowIndex }) {
if (rowIndex === 1) {
return "warning-row";
} else if (rowIndex === 3) {
return "success-row";
}
return "";
},
},
};
</script>
<style>
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# 固定表头
只要在 pro-table 元素中定义了 height 属性,即可实现固定表头的表格,而不需要额外的代码。
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource" height="250" border></pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "日期",
name: "date",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "性别",
name: "sex",
width: 200,
dict: [
{
value: 1,
name: "男",
},
{
value: 0,
name: "女",
},
],
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
date: "2016-05-02",
name: "王小虎",
sex: 0,
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
sex: 1,
address: "上海市普陀区金沙江路 1517 弄",
},
{
date: "2016-05-01",
name: "王小虎",
sex: 1,
address: "上海市普陀区金沙江路 1519 弄",
},
{
date: "2016-05-03",
name: "王小虎",
sex: 0,
address: "上海市普陀区金沙江路 1516 弄",
},
{
date: "2016-05-02",
name: "王小虎",
sex: 0,
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
sex: 1,
address: "上海市普陀区金沙江路 1517 弄",
},
{
date: "2016-05-01",
name: "王小虎",
sex: 1,
address: "上海市普陀区金沙江路 1519 弄",
},
{
date: "2016-05-03",
name: "王小虎",
sex: 0,
address: "上海市普陀区金沙江路 1516 弄",
},
],
};
},
methods: {},
};
</script>
<style></style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# 多级表头
pro-table 元素中定义 header-nested 属性,
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource" :header-nested="headerNested"></pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
headerNested: [
{
prop: "date",
},
{
label: "配送信息",
children: [
{
prop: "name",
},
{
label: "地址",
children: [
{
prop: "province",
},
{
prop: "city",
},
{
prop: "address",
},
],
},
],
},
],
columns: [
{
label: "日期",
name: "date",
},
{
label: "姓名",
name: "name",
},
{
label: "省份",
name: "province",
},
{
label: "市区",
name: "city",
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
date: "2016-05-03",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
},
{
date: "2016-05-02",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
},
{
date: "2016-05-04",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
},
{
date: "2016-05-01",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
},
{
date: "2016-05-08",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
},
{
date: "2016-05-06",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
},
{
date: "2016-05-07",
name: "王小虎",
province: "上海",
city: "普陀区",
address: "上海市普陀区金沙江路 1518 弄",
zip: 200333,
},
],
};
},
methods: {},
};
</script>
<style></style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# 多选
只要在 pro-table 元素中定义了 selection 属性,即可实现多选。
<template>
<el-card>
<pro-table
ref="table"
:columns="columns"
:data="dataSource"
selection
@selection-change="handleSelectionChange"
>
</pro-table>
<div style="margin-top: 20px">
<el-button @click="toggleSelection([dataSource[1], dataSource[2]])"
>切换第二、第三行的选中状态</el-button
>
<el-button @click="toggleSelection()">取消选择</el-button>
</div>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "日期",
name: "date",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄",
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1516 弄",
},
],
multipleSelection: [],
};
},
methods: {
toggleSelection(rows) {
if (rows) {
rows.forEach((row) => {
this.$refs.table.toggleRowSelection(row);
});
} else {
this.$refs.table.clearSelection();
}
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
},
};
</script>
<style>
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# 展开行
通过设置 type="expand" 和 Scoped slot 可以开启展开行功能,el-table-column 的模板会被渲染成为展开行的内容,展开行可访问的属性与使用自定义列模板时的 Scoped slot 相同。
<template>
<el-card>
<pro-table ref="table" :columns="columns" :data="dataSource">
<el-table-column type="expand">
<template v-slot="props">
<el-form label-position="left" inline class="demo-table-expand">
<el-form-item label="商品名称">
<span>{{ props.row.name }}</span>
</el-form-item>
<el-form-item label="所属店铺">
<span>{{ props.row.shop }}</span>
</el-form-item>
<el-form-item label="商品 ID">
<span>{{ props.row.id }}</span>
</el-form-item>
<el-form-item label="店铺 ID">
<span>{{ props.row.shopId }}</span>
</el-form-item>
<el-form-item label="商品分类">
<span>{{ props.row.category }}</span>
</el-form-item>
<el-form-item label="店铺地址">
<span>{{ props.row.address }}</span>
</el-form-item>
<el-form-item label="商品描述">
<span>{{ props.row.desc }}</span>
</el-form-item>
</el-form>
</template>
</el-table-column>
</pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "商品 ID",
name: "id",
},
{
label: "商品名称",
name: "name",
},
{
label: "描述",
name: "desc",
},
],
dataSource: [
{
id: "12987122",
name: "好滋好味鸡蛋仔",
category: "江浙小吃、小吃零食",
desc: "荷兰优质淡奶,奶香浓而不腻",
address: "上海市普陀区真北路",
shop: "王小虎夫妻店",
shopId: "10333",
},
{
id: "12987123",
name: "好滋好味鸡蛋仔",
category: "江浙小吃、小吃零食",
desc: "荷兰优质淡奶,奶香浓而不腻",
address: "上海市普陀区真北路",
shop: "王小虎夫妻店",
shopId: "10333",
},
{
id: "12987125",
name: "好滋好味鸡蛋仔",
category: "江浙小吃、小吃零食",
desc: "荷兰优质淡奶,奶香浓而不腻",
address: "上海市普陀区真北路",
shop: "王小虎夫妻店",
shopId: "10333",
},
{
id: "12987126",
name: "好滋好味鸡蛋仔",
category: "江浙小吃、小吃零食",
desc: "荷兰优质淡奶,奶香浓而不腻",
address: "上海市普陀区真北路",
shop: "王小虎夫妻店",
shopId: "10333",
},
],
multipleSelection: [],
};
},
methods: {},
};
</script>
<style>
.demo-table-expand {
font-size: 0;
}
.demo-table-expand label {
width: 90px;
color: #99a9bf;
}
.demo-table-expand .el-form-item {
margin-right: 0;
margin-bottom: 0;
width: 50%;
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# 树形数据与懒加载
支持树类型的数据的显示。当 row 中包含 children 字段时,被视为树形数据。渲染树形数据时,必须要指定 row-key。支持子节点数据异步加载。设置 pro-table 的 lazy 属性为 true 与加载函数 load 。通过指定 row 中的 hasChildren 字段来指定哪些行是包含子节点。children 与 hasChildren 都可以通过 tree-props 配置。
<template>
<el-card>
<pro-table
:columns="columns"
:data="dataSource"
row-key="id"
default-expand-all
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
</pro-table>
<pro-table
:columns="columns"
:data="tableData1"
row-key="id"
lazy
:load="load"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
</pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "日期",
name: "date",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
id: 1,
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
id: 2,
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄",
},
{
id: 3,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
children: [
{
id: 31,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
id: 32,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
],
},
{
id: 4,
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1516 弄",
},
],
tableData1: [
{
id: 1,
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
id: 2,
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄",
},
{
id: 3,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
hasChildren: true,
},
{
id: 4,
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1516 弄",
},
],
};
},
methods: {
load(tree, treeNode, resolve) {
setTimeout(() => {
resolve([
{
id: 31,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
id: 32,
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
]);
}, 1000);
},
},
};
</script>
<style>
.demo-table-expand {
font-size: 0;
}
.demo-table-expand label {
width: 90px;
color: #99a9bf;
}
.demo-table-expand .el-form-item {
margin-right: 0;
margin-bottom: 0;
width: 50%;
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# 自定义表头
通过设置 ${name}Header Scoped slot 来自定义表头。
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource">
<template #addressHeader="scope">
<el-input size="mini" placeholder="输入关键字搜索" />
</template>
</pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "日期",
name: "date",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄",
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1516 弄",
},
],
};
},
};
</script>
<style lang="scss" scoped></style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 自定义内容
通过设置 ${name} Scoped slot 来自定义内容。
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource">
<template #address="{row}">
<el-input v-model="row.address" size="mini" placeholder="输入关键字搜索" />
</template>
</pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "日期",
name: "date",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄",
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1516 弄",
},
],
};
},
};
</script>
<style lang="scss" scoped></style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 表尾合计行
将 show-summary 设置为 true 就会在表格尾部展示合计行。默认情况下,对于合计行,第一列不进行数据求合操作,而是显示「合计」二字(可通过 sum-text 配置),其余列会将本列所有数值进行求合操作,并显示出来。当然,你也可以定义自己的合计逻辑。通过 sumFilter 过滤方法处理自定义逻辑。
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource" show-summary> </pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "ID",
name: "id",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "数值1",
name: "amount1",
sumPrefix: "¥",
sumSuffix: "元",
},
{
label: "数值2",
sumPrefix: "$",
name: "amount2",
},
{
label: "数值3",
name: "amount3",
sumFilter() {
return "🧟♂️🧟♂️🧟♂️";
},
},
],
dataSource: [
{
id: "12987122",
name: "王小虎",
amount1: "234",
amount2: "3.2",
amount3: 10,
},
{
id: "12987123",
name: "王小虎",
amount1: "165",
amount2: "4.43",
amount3: 12,
},
{
id: "12987124",
name: "王小虎",
amount1: "324",
amount2: "1.9",
amount3: 9,
},
{
id: "12987125",
name: "王小虎",
amount1: "621",
amount2: "2.2",
amount3: 17,
},
{
id: "12987126",
name: "王小虎",
amount1: "539",
amount2: "4.1",
amount3: 15,
},
],
};
},
};
</script>
<style lang="scss" scoped></style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# 分页表格
- 10条/页
- 20条/页
- 30条/页
- 50条/页
无数据
- 1
- 2
- 3
- 4
- 5
- 6
- 100
<template>
<el-card>
<pro-table
:columns="columns"
:data="dataSource"
:total="total"
:page="page"
:limit="limit"
@pagination="pagination"
>
</pro-table>
{{page}}/{{limit}}
</el-card>
</template>
<script>
export default {
data() {
return {
total: 1000,
page: 1,
limit: 10,
columns: [
{
label: "ID",
name: "id",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "数值1",
name: "amount1",
},
{
label: "数值2",
name: "amount2",
},
{
label: "数值3",
name: "amount3",
},
],
dataSource: [
{
id: "12987122",
name: "王小虎",
amount1: "234",
amount2: "3.2",
amount3: 10,
},
{
id: "12987123",
name: "王小虎",
amount1: "165",
amount2: "4.43",
amount3: 12,
},
{
id: "12987124",
name: "王小虎",
amount1: "324",
amount2: "1.9",
amount3: 9,
},
{
id: "12987125",
name: "王小虎",
amount1: "621",
amount2: "2.2",
amount3: 17,
},
{
id: "12987126",
name: "王小虎",
amount1: "539",
amount2: "4.1",
amount3: 15,
},
],
};
},
methods: {
pagination(pagination) {
this.page = pagination.page;
this.limit = pagination.pageSize;
},
},
};
</script>
<style lang="scss" scoped></style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 数据格式化
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource"> </pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "ID",
name: "id",
width: 100,
},
{
label: "姓名",
name: "name",
width: 100,
},
{
label: "执行时间",
name: "useTime",
format: "usetime",
width: 100,
},
{
label: "金额",
name: "currency",
format: "currency",
width: 200,
},
{
label: "日期",
name: "datatime",
format: "date",
width: 100,
},
{
label: "时间",
name: "datatime",
format: "time",
width: 100,
},
{
label: "日期时间",
width: 200,
name: "datatime",
format: "dateTime",
},
{
label: "描述",
showOverflowTooltip: true,
width: 200,
name: "desc",
},
{
label: "状态",
name: "status",
width: 200,
dict: [
{
value: 0,
type: "inactive",
name: "关闭",
},
{
value: 1,
type: "active",
name: "开启",
},
],
switch: {
onChange: (scope) => {
console.log(scope);
},
},
},
{
label: "标签",
name: "tag",
width: 100,
tag: {
effect: "dark",
},
dict: [
{
value: 0,
type: "success", //success/info/warning/danger
name: "成功",
},
{
value: 1,
type: "info", //success/info/warning/danger
name: "信息",
},
{
value: 2,
type: "warning", //success/info/warning/danger
name: "提示",
},
{
value: 3,
type: "danger", //success/info/warning/danger
name: "危险",
},
],
},
{
width: 200,
label: "进度",
name: "progress",
progress: true,
},
],
dataSource: [
{
id: "12987122",
name: "王小虎",
useTime: 3432,
currency: 2312312312,
datatime: "20201112163445",
status: 0,
tag: 2,
progress: 20,
desc: "这是一段描述文字这是一段描述文字这是一段描述文字这是一段描述文字这是一段描述文字",
},
{
id: "12987122",
name: "王小虎",
useTime: 5432,
currency: 23312312,
datatime: "20201112163445",
status: 1,
tag: 1,
progress: 80,
desc: "这是一段描述文字这是一段描述文字这是一段描述文字这是一段描述文字这是一段描述文字",
},
{
id: "12987122",
name: "王小虎",
useTime: 532,
currency: 23312312,
datatime: "2020-11-12 16:35:44",
status: 0,
tag: 3,
progress: 100,
desc: "这是一段描述文字这是一段描述文字这是一段描述文字这是一段描述文字这是一段描述文字",
},
],
};
},
methods: {
pagination(pagination) {
this.page = pagination.page;
this.limit = pagination.pageSize;
},
},
};
</script>
<style lang="scss" scoped></style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# 表格操作
<template>
<el-card>
<pro-table :columns="columns" :data="dataSource" :operation="operation"></pro-table>
</el-card>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "日期",
name: "date",
width: 200,
},
{
label: "姓名",
name: "name",
width: 200,
},
{
label: "地址",
name: "address",
},
],
dataSource: [
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1517 弄",
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1519 弄",
},
{
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1516 弄",
},
],
operation: {
props: { width: 120, fixed: "right" },
list: [
{
text: "查看",
onClick: () => {
console.log("查看");
},
},
{
text: "删除",
popconfirm: {
title: "确认删除?",
},
onClick: () => {
console.log("删除");
},
},
{
text: "修改",
onClick: () => {
console.log("修改");
},
},
],
},
};
},
};
</script>
<style lang="scss" scoped></style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# API
# ProTable Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
data | 显示的数据 | array | — | — |
height | Table 的高度,默认为自动高度。如果 height 为 number 类型,单位 px;如果 height 为 string 类型,则这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。 | string/number | — | — |
max-height | Table 的最大高度。合法的值为数字或者单位为 px 的高度。 | string/number | — | — |
stripe | 是否为斑马纹 table | boolean | — | true |
border | 是否带有纵向边框 | boolean | — | false |
size | Table 的尺寸 | string | medium / small / mini | small |
fit | 列的宽度是否自撑开 | boolean | — | true |
show-header | 是否显示表头 | boolean | — | true |
highlight-current-row | 是否要高亮当前行 | boolean | — | false |
current-row-key | 当前行的 key,只写属性 | String,Number | — | — |
row-class-name | 行的 className 的回调方法,也可以使用字符串为所有行设置一个固定的 className。 | Function({row, rowIndex})/String | — | — |
row-style | 行的 style 的回调方法,也可以使用一个固定的 Object 为所有行设置一样的 Style。 | Function({row, rowIndex})/Object | — | — |
cell-class-name | 单元格的 className 的回调方法,也可以使用字符串为所有单元格设置一个固定的 className。 | Function({row, column, rowIndex, columnIndex})/String | — | — |
cell-style | 单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有单元格设置一样的 Style。 | Function({row, column, rowIndex, columnIndex})/Object | — | — |
header-row-class-name | 表头行的 className 的回调方法,也可以使用字符串为所有表头行设置一个固定的 className。 | Function({row, rowIndex})/String | — | — |
header-row-style | 表头行的 style 的回调方法,也可以使用一个固定的 Object 为所有表头行设置一样的 Style。 | Function({row, rowIndex})/Object | — | — |
header-cell-class-name | 表头单元格的 className 的回调方法,也可以使用字符串为所有表头单元格设置一个固定的 className。 | Function({row, column, rowIndex, columnIndex})/String | — | — |
header-cell-style | 表头单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有表头单元格设置一样的 Style。 | Function({row, column, rowIndex, columnIndex})/Object | — | — |
row-key | 行数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能与显示树形数据时,该属性是必填的。类型为 String 时,支持多层访问:user.info.id,但不支持 user.info[0].id,此种情况请使用 Function。 | Function(row)/String | — | — |
empty-text | 空数据时显示的文本内容,也可以通过 slot="empty" 设置 | String | — | 暂无数据 |
default-expand-all | 是否默认展开所有行,当 Table 包含展开行存在或者为树形表格时有效 | Boolean | — | false |
expand-row-keys | 可以通过该属性设置 Table 目前的展开行,需要设置 row-key 属性才能使用,该属性为展开行的 keys 数组。 | Array | — | |
default-sort | 默认的排序列的 prop 和顺序。它的 prop 属性指定默认的排序的列,order 指定默认排序的顺序 | Object | order: ascending, descending | 如果只指定了 prop, 没有指定 order, 则默认顺序是 ascending |
tooltip-effect | tooltip effect 属性 | String | dark/light | |
show-summary | 是否在表尾显示合计行 | Boolean | — | false |
sum-text | 合计行第一列的文本 | String | — | 合计 |
summary-method | 自定义的合计计算方法 | Function({ columns, data }) | — | — |
span-method | 合并行或列的计算方法 | Function({ row, column, rowIndex, columnIndex }) | — | — |
select-on-indeterminate | 在多选表格中,当仅有部分行被选中时,点击表头的多选框时的行为。若为 true,则选中所有行;若为 false,则取消选择所有行 | Boolean | — | true |
indent | 展示树形数据时,树节点的缩进 | Number | — | 16 |
lazy | 是否懒加载子节点数据 | Boolean | — | — |
load | 加载子节点数据的函数,lazy 为 true 时生效,函数第二个参数包含了节点的层级信息 | Function(row, treeNode, resolve) | — | — |
tree-props | 渲染嵌套数据的配置选项 | Object | — | { hasChildren: 'hasChildren', children: 'children' } |
header-nested | 嵌套表头设置 | Array | - | - |
total | 总条目数 | number | — | — |
page | 当前页数,支持 .sync 修饰符 | number | — | 1 |
limit | 每页显示条目个数,支持 .sync 修饰符 | number | — | 10 |
layout | 组件布局,子组件名用逗号分隔 | String | sizes, prev, pager, next, jumper, ->, total, slot | total, sizes, prev, pager, next, jumper |
pageSizes | 每页显示个数选择器的选项设置 | number[] | — | [10, 20, 30, 40, 50] |
background | 是否为分页按钮添加背景色 | boolean | — | true |
autoScroll | 触发分页事件后是否自动滚动到顶部 | boolean | - | false |
operation | 操作按钮配置 | operation | - | - |
selection | 是否展示多选 | boolean | - | false |
columns | 列表列属性配置 | columns[] | - | - |
sumNaNText | 计算值为 NaN 时,显示文本 | string | - | N/A |
# Operation Attributes
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
props | 操作列属性配置 参考Table-column Attributes (opens new window) 注:属性需要驼峰名称规范 | object | - | - |
list | 操作按钮组; popconfirm 属性参考Popconfirm Attributes (opens new window) | {text:string,onClick:Function(callback:Funtion({ row, column, $index }), popconfirm: object} | - | - |
# Columns Attributes
TIP
Column 属性继承 Table-column Attributes;更多属性可以参考Table-column Attributes (opens new window)
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
label | 表头名称 | string | - | - |
name | 数据源属性名称 | string | - | - |
emptyText | 数据为空时显示字段 | string | - | - |
defaultValue | 默认值 | any | - | - |
format | 数据格式化 | string | usetime| currency| progress| date| dateTime| time | - |
switch | 是否使用 switch 组件; 如果是 object 参考switch (opens new window) | boolean| object | - | - |
tag | 是否使用 tag 组件; 如果是 object 参考tag (opens new window);如果是 function 则回调返回值就是 tag 属性。返回值参考tag (opens new window) | boolean| object| Function(callback:Funtion({ row, column, $index }) | - | - |
progress | 是否使用 progress 组件,如果是 function 则回调返回值就是 progress 属性。返回值参考progress (opens new window) | boolean| Function(callback:Funtion({ row, column, $index }) | - | - |
dict | 字典数据,映射数据。1. 如果 dict 和 switch 属性同时存在 则字典值为 0 就是非激活状态的值,字典值为 1 就是激活状态值;也可以通过 type 值来指定激活状态的 value 和 text,当 type 为 active 则是激活状态的 value 和 text,type 为 inactive 为非激活状态 2. 当 dict 和 tag 同时存在,设置 type 即是 tag type 属性值 | Array | - | - |
sum | 是否计算当前 column 总和 设置 show-summary 时生效 | boolean | - | true |
sumFilter | 对计算结果进行处理 | Funtion(sum, { column, data }) | - | - |
# ProTable Events
# ProTable Methods
# ProTable Scoped Slot
TIP
插槽名称规范:${name} name 值即是 columns 配置的 name 值; 如果想要自定义数据展示方式或者操作,可以通过 Slot name 为${name} 来自定义对应内容 如果想要自定义表头内容可以通过 Slot name 为 ${name}Header 来自定义内容;注意 Header 是固定字符串,表示是修改对应列表头
name | 说明 |
---|---|
${name} | 自定义列的内容,参数为 { row, column, $index } |
${name}Header | 自定义表头的内容. 参数为 { column, $index } |