表格的编辑修改
项目需求
招生跟进的学生,在表格中编辑跟踪记录,修改失去焦点后保存,
实现方法
原理
表格上加上::key取值为随机数,key: Math.random(), 单元格的双击事件加上方法@cell-dblclick=“doubleClick”
表格的内容为多选的文本框,默认情况不显示,当scope.row[scope.column.property + ‘Show’]的列属性为真时显示,失去焦点时将该属性在置为假
视图代码,
代码如下:表格的代码片断
<!--表格渲染-->
<el-table ref="table" :key="key" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @cell-dblclick="doubleClick" :cell-class-name="addSeparate"
:header-cell-class-name="addSeparate" @selection-change="crud.selectionChangeHandler">
<el-table-column prop="trackRecord" label="跟踪记录" width="300">
<template slot-scope="scope">
<el-input v-if="scope.row[scope.column.property + 'Show']" v-model="scope.row.trackRecord" autosize clearable type="textarea" :rows="3" @blur="onBlur(scope.row, scope.column)" />
<span v-else style="white-space: pre-wrap;">{{ scope.row.trackRecord }}</span>
</template>
</el-table-column>
script 代码片断
// 双击单元格触发事件
doubleClick(row, column) {
// 避免点击过快导致多个输入框处于焦点状态
row[column.property + 'Show'] = false
// 避免点击其他单元格导致表格刷新
if (!['trackRecord'].includes(column.property)) return
row[column.property + 'Show'] = true
this.updateTable()
},
// 输入框失焦事件
onBlur(row, column) {
row[column.property + 'Show'] = false
this.updateTable()
// 请求后台更改数据
crudBizIntendedStudent.edit(row).then(() => {
this.crud.notify('编辑成功', 'success')
}).catch(err => {
this.crud.notify(err.data.message)
})
},
// 更新表格
updateTable() {
this.key = Math.random()
},