下而这段代码作用是, 复制表格中的最后一行数据,生成新一行
但是,复制多行时,我连续点击运行这段代码时,
点的速度太快时, 会出现几行相同的编号,慢着点没事
肯定异步造成的,怎么来处理这个异步
// 复制增加一行,同上一行相同,并改变焦点
async function addOne (index, row) {
if(!Number(window.sessionStorage.getItem('allowAdd'))){
alert('你没有新增数据的权限!')
return
}
// 如果表格中有一行数据就复制
if(data.searchResult.length>=1){
const newRow = toRaw(data.searchResult.slice(-1)[0]) // 截取最后一行数据,生成新行
const newAdd = JSON.parse(JSON.stringify(newRow)) // 深拷贝
newAdd.id = nanoid()
//----------------------------------------------------------------
// 从后端获取 用定自定义的 编号规则
let numberRules
const params ={ branch_name: newAdd.branch_name, name: '编号'}
await getMethod('number_rules/',params).then(res=>{
numberRules = res[0].rules
})
// 获取后端数据库中最后一个编号
if (numberRules.length>=1){
let last_number
await lastId(modData.modelName,newAdd.branch_name).then(res=>{
last_number =res
})
// 用自定义函数,计算出新编号
const newNumber1 = rulesComput(numberRules,last_number,newAdd)
// 用当前复制行编号,计算出新编号
const newNumber2 = rulesComput(numberRules,newAdd.serial_number,newAdd)
// 比较两个编号,选择最大的为新编号
if( newNumber1 > newNumber2 ){
newAdd.serial_number = newNumber1
}else{
newAdd.serial_number = newNumber2
}
}
newAdd[modData.editField] = toRaw(newRow[modData.editField] + 1)
newAdd.showCancel = true
newAdd.showAddSave = true
newAdd.showInput= true
newAdd.is_active = null
data.searchResult.push(newAdd)
updateEelement(newAdd.id) // 移动光标位置
// editFocus.value[ data.editField + newAdd.id ].focus()
} else {
errMessage('页面中最少要有一行数据,才能够复制','提示')
return
}
async function updateEelement(id){
await nextTick(()=>{
editFocus.value[ modData.editField+ id ].focus()
})
}
// 改变行数和页数
page.totalCount = page.totalCount + 1 // 总行数
page.pageCount = Math.ceil(data.searchResult.length / page.pageSize) // 总页数为当前页
page.currentPage = page.pageCount // 显示到最后一页
}