console
// 将全局模态窗口挂载到 vue 实例中
Vue.prototype.$XModal = VXETable.modal
var Main = {
data() {
return {
tableData: [],
validRules: {
name: [
{ required: true, message: '名称必填' },
{ min: 3, max: 50, message: '名称长度在 3 到 50 个字符' }
],
sex: [
{ required: true, message: '性别必须填写' }
]
},
sexList: [
{ label: '', value: '' },
{ label: '女', value: '0' },
{ label: '男', value: '1' }
]
}
},
created () {
var list = []
for(var index = 0; index < 6; index++){
list.push({
id: index + 10000,
name: 'test' + index,
role: 'developer',
sex: '1',
date: '2019-05-01',
age: 20
})
}
this.tableData = list
},
methods: {
test({row}){
return row.age/2
},
validEvent () {
this.$refs.xTable.validate(errMap => {
if (errMap) {
this.$XModal.message({ status: 'error', message: '校验不通过!' })
} else {
this.$XModal.message({ status: 'success', message: '校验成功!' })
}
})
},
fullValidEvent () {
this.$refs.xTable.fullValidate((errMap) => {
if (errMap) {
let msgList = []
Object.values(errMap).forEach(errList => {
errList.forEach(params => {
let { rowIndex, column, rules } = params
rules.forEach(rule => {
msgList.push(`第 ${rowIndex} 行 ${column.title} 校验错误:${rule.message}`)
})
})
})
this.$XModal.message({
status: 'error',
message: (h) => {
return [
h('div', {
class: 'red',
style: {
maxHeight: '400px',
overflow: 'auto'
}
}, msgList.map(msg => h('div', msg)))
]
}
})
} else {
this.$XModal.message({ status: 'success', message: '校验成功!' })
}
})
},
selectValidEvent () {
let selectRecords = this.$refs.xTable.getCheckboxRecords()
if (selectRecords.length > 0) {
this.$refs.xTable.validate(selectRecords, errMap => {
if (errMap) {
this.$XModal.message({ status: 'error', message: '校验不通过!' })
} else {
this.$XModal.message({ status: 'success', message: '校验成功!' })
}
})
} else {
this.$XModal.message({ status: 'warning', message: '未选中数据!' })
}
},
insertEvent () {
this.$refs.xTable.insert().then(({ row }) => {
// 插入一条数据并触发校验
this.$refs.xTable.validate(row, (errMap) => {
if (errMap) {
}
})
})
},
getSelectEvent () {
let selectRecords = this.$refs.xTable.getCheckboxRecords()
this.$XModal.alert(selectRecords.length)
},
getInsertEvent () {
let insertRecords = this.$refs.xTable.getInsertRecords()
this.$XModal.alert(insertRecords.length)
},
getRemoveEvent () {
let removeRecords = this.$refs.xTable.getRemoveRecords()
this.$XModal.alert(removeRecords.length)
},
getUpdateEvent () {
let updateRecords = this.$refs.xTable.getUpdateRecords()
this.$XModal.alert(updateRecords.length)
}
}
};
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>
<!-- 使用 cdn 引用方式需要注意是否锁定版本,默认指向最新版本 -->
<div id="app">
<template>
<vxe-toolbar>
<template v-slot:buttons>
<vxe-button @click="insertEvent">新增</vxe-button>
<vxe-button @click="$refs.xTable.removeSelecteds()">删除选中</vxe-button>
<vxe-button @click="validEvent">校验</vxe-button>
<vxe-button @click="fullValidEvent">完整校验</vxe-button>
<vxe-button @click="selectValidEvent">选中校验</vxe-button>
<vxe-button @click="getSelectEvent">获取选中</vxe-button>
<vxe-button @click="getInsertEvent">获取新增</vxe-button>
<vxe-button @click="getRemoveEvent">获取删除</vxe-button>
<vxe-button @click="getUpdateEvent">获取修改</vxe-button>
</template>
</vxe-toolbar>
<vxe-table
border
show-overflow
keep-source
height="500"
ref="xTable"
:data="tableData"
:edit-rules="validRules"
:edit-config="{trigger: 'click', mode: 'cell', showStatus: true}">
<vxe-table-column type="checkbox" width="60"></vxe-table-column>
<vxe-table-column type="seq" width="60"></vxe-table-column>
<vxe-table-column field="age" title="在这输入" :edit-render="{name: 'input'}"></vxe-table-column>
<vxe-table-column field="sex" title="Sex" :edit-render="{name: 'input'}"></vxe-table-column>
<vxe-table-column field="date" title="在这显示2分之一" :formatter='test'></vxe-table-column>
</vxe-table>
</template>
</div>
@import url("https://cdn.jsdelivr.net/npm/vxe-table/lib/index.css");