console
var mockList = []
for (var index = 1; index < 310; index++) {
mockList.push({
id: index,
checked: false,
name: 'test' + index,
nickname: '昵称' + index,
role: index % 2 === 0 ? '后端': '前端',
sex: 'Man',
date: '2019-05-01',
time: 1556677810888 + index * 500,
region: 'ShenZhen',
address: 'address abc' + index
})
}
var Main = {
data() {
return {
validRules: {
name: [{
required: true,
message: '名称必须填写'
},
{
min: 3,
max: 50,
message: '名称长度在 3 到 50 个字符'
}],
role: [{
required: true,
message: '角色必须填写'
}]
},
tablePages: {
pageSize: 15
},
tableProxy: {
props: {
result: 'results',
total: 'pageVO.sumTotal'
},
ajax: {
query: (params) => this.doGet(params),
delete: (params) => this.doDelete(params),
save: (params) => this.doSave(params)
}
},
tableToolbar: {
buttons: [{
code: 'reload',
name: '刷新'
},
{
code: 'insert_actived',
name: '新增'
},
{
code: 'mark_cancel',
name: '标记/取消'
},
{
code: 'save',
name: '保存'
},
{
code: 'getReserveRecord',
name: '获取选中'
}],
refresh: true,
custom: true
},
tableColumn: [{
type: 'checkbox',
width: 50
},
{
type: 'seq',
title: '序号',
width: 80
},
{
field: 'id',
title: 'ID',
width: 80
},
{
field: 'name',
title: 'Name',
editRender: {
name: 'input'
}
},
{
field: 'nickname',
title: 'Nickname',
editRender: {
name: 'input'
}
},
{
field: 'sex',
title: 'Sex',
editRender: {
name: 'select',
options: []
}
},
{
field: 'role',
title: 'Role',
editRender: {
name: 'input'
}
},
{
field: 'address',
title: 'Address',
showOverflow: true,
editRender: {
name: 'input'
}
}]
}
},
methods: {
doGet(params) {
return new Promise(resolve => {
setTimeout(() => {
const page = params.page
const startIndex = (page.currentPage - 1) * page.pageSize
var rest = {
results: mockList.slice(startIndex, startIndex + page.pageSize),
pageVO: {
sumTotal: mockList.length
}
}
resolve(rest)
},
300)
})
},
doDelete(params) {
return new Promise(resolve => {
setTimeout(() => {
resolve()
},
300)
})
},
doSave(params) {
return new Promise(resolve => {
setTimeout(() => {
resolve()
},
300)
})
},
handleButtonClick({
code
}) {
switch(code) {
case 'getReserveRecord': {
console.log('选中记录(之前保留)',this.$refs.xGrid.getCheckboxReserveRecords())
console.log('选中记录(当前页)',this.$refs.xGrid.getCheckboxRecords())
console.log('所有页选中',JSON.stringify([...this.$refs.xGrid.getCheckboxReserveRecords(),...this.$refs.xGrid.getCheckboxRecords()]))
break
}
}
}
}
};
var Ctor = Vue.extend(Main);
new Ctor().$mount('#app')
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://cdn.jsdelivr.net/npm/xe-utils"></script>
<script src="https://cdn.jsdelivr.net/npm/vxe-table"></script>
<div id="app">
<template>
<vxe-grid
border
resizable
highlight-hover-row
keep-source
ref="xGrid"
height="500"
:pager-config="tablePages"
:toolbar="tableToolbar"
:proxy-config="tableProxy"
:columns="tableColumn"
:edit-rules="validRules"
:edit-config="{trigger: 'click', mode: 'row', showStatus: true}"
row-id="id"
:checkbox-config="{ checkRowKeys:[1,2,3,13,17,20,22],reserve:true }"
@toolbar-button-click="handleButtonClick"
>
</vxe-grid>
</template>
</div>
@import url("https://cdn.jsdelivr.net/npm/vxe-table/lib/index.css");