2.el-table中需要处理的逻辑
@select="handleSelectChange"
@row-click="toClickRowPatient"
@row-dblclick="dblclickRowPatient"
@selection-change="handleSelectionChange"
@mousemove.native="handleToMouseMove"
说明:只有el-tablez支持可多选的时候使用批量勾选和取消勾选
isMultiPat是是否可多选的参数
mouseOrKeyPan是使用键盘监听换是鼠标监听触发,这里是键盘KeyPan
部分代码没用可做删掉操作
// 点击勾选框处理逻辑
handleSelectChange(rows,row){
state.dwj_ctrl_flag = '0'
if(!props.isMultiPat){
if(state.currentRow!=null){
if(zyhErbs(state.currentRow,row)){
return false
}
}
state.currentRow = row
state.patTable.setCurrentRow(row)
methods.sendSelectedPatient([row])
}else {
if(state.mouseOrKeyPan=='KeyPan'){
// 批量模式下使用onAlt键盘键两头选所有
if(proxy.onAlt&&state.isMultiPat){
state.dwjResOkList.push(row)
state.dwj_ctrl_flag = '1'
state.patTable.toggleRowSelection(row,true);
state.selectedPatients = rows
}
// 批量模式下使用onShfit键盘键两头选所有
if(proxy.onShfit&&state.isMultiPat){
state.dwjResOkList.push(row)
state.dwj_ctrl_flag = '1'
state.patTable.toggleRowSelection(row,false);
state.selectedPatients = rows
}
}
}
},
// 勾选行数据处理
handleSelectionChange(rows){
if(!props.isMultiPat){
if (rows.length > 1) {
state.patTable.clearSelection();
}
if(state.currentRow!=null){
if(state.patientList.length>0){
state.patTable.toggleRowSelection(state.currentRow,true);
}else {
state.patTable.toggleRowSelection(state.currentRow,false);
}
}
}else {
if(state.all_pat_is_check!='1'){
if(state.mouseOrKeyPan=='KeyPan'){
if(state.dwj_ctrl_flag=='1'){
console.log('使用onAlt进行勾选后onAlt失效后不处理')
}else {
// 这里总感觉写的不太好
if(proxy.onAlt&&state.isMultiPat){
// 长度必须大于1才能使用onAlt功能
if(state.dwj_ctrl_flag!='1'&&rows.length>1){
console.log('使用onAlt进行勾选的过程不处理数据')
}
}else {
state.selectedPatients = rows
methods.sendSelectedPatient(rows)
}
}
}
if(state.mouseOrKeyPan=='mouse'){
if(state.dragging){
state.selectedPatients = rows
}else {
state.selectedPatients = rows
methods.sendSelectedPatient(rows)
}
}
}
}
},
// 点击行处理逻辑
toClickRowPatient(row){
if(state.mouseOrKeyPan=='KeyPan'){
if(proxy.onAlt&&state.isMultiPat){
let list = state.selectedPatients
methods.handleSelectChange(list,row)
}else if(proxy.onShfit&&state.isMultiPat){
// 键盘移除后清除选中的文本避免键盘有选中
window.getSelection()!.removeAllRanges();
let list = state.selectedPatients
methods.handleSelectChange(list,row)
}else {
methods.dblclickRowPatient(row)
}
}
},
// 双击行处理逻辑
dblclickRowPatient(row){
if(!props.isMultiPat){
if(state.currentRow!=null){
if(zyhErbs(state.currentRow,row)){
return false
}
}
state.currentRow = row
methods.handleSelectionChange([row])
methods.sendSelectedPatient([row])
}else {
let isHasPat = state.selectedPatients.some(item=>zyhErbs(item,row))
if(isHasPat===true){
state.patTable.toggleRowSelection(row,false);
}else {
state.patTable.toggleRowSelection(row,true);
}
}
},
// 发送的患者是一个list
sendSelectedPatient(list){
content.emit("selectedPatient",list)
},
// 来自键盘监听的方法-释放键盘处理
toReleaseKeyToHandleData(flag){
if(state.mouseOrKeyPan=='KeyPan'){
if(flag==='onAlt'){
methods.toHandleOnCtrlReleaseLogic()
}
if(flag==='onShfit'){
methods.toHandleOnShfitReleaseLogic()
}
}
},
// 使用了onAlt键盘移除逻辑
toHandleOnCtrlReleaseLogic(){
console.log('使用了onAlt键盘')
let myResList :any= []
let rows = state.dwjResOkList
let patList = state.patientList
let selectOrder = state.selectedPatients
if(rows.length==1){
myResList = selectOrder.concat(rows)
state.selectedPatients = myResList
methods.sendSelectedPatient(state.selectedPatients)
state.dwj_ctrl_flag = '0'
state.dwjResOkList = []
}
else if(rows.length>=2){
// 最后一次选择的和onAlt后选择的及中间
let lastzyh = getPatFlag(rows[rows.length-1])
let prevzyh = getPatFlag(rows[rows.length-2])
let max_i = patList.findIndex(p=>getPatFlag(p)==lastzyh)
let min_i = patList.findIndex(p=>getPatFlag(p)==prevzyh)
let min_max_num = [min_i,max_i]
min_max_num.sort((a, b) => a - b)
min_i = min_max_num[0]
max_i = min_max_num[1]
let indexList :any= []
let hasMax_i = 0
for (let i=min_i;i<=max_i;i++){
hasMax_i = i
let hasZyh = getPatFlag(patList[i])
let hasData = selectOrder.filter(p=>getPatFlag(p)==hasZyh)
if(hasData.length==0){
indexList.push(patList[i])
state.dwj_ctrl_flag = '1'
state.patTable.toggleRowSelection(patList[i],true);
}
}
if(hasMax_i==max_i){
myResList = selectOrder.concat(indexList)
state.selectedPatients = myResList
methods.sendSelectedPatient(state.selectedPatients)
state.dwj_ctrl_flag = '0'
state.dwjResOkList = []
}
}
},
// 使用了onShfit键盘移除逻辑
toHandleOnShfitReleaseLogic(){
console.log('使用了onShfit键盘')
let myResList :any= []
let rows = state.dwjResOkList
let patList = state.patientList
let selectOrder = state.selectedPatients
if(rows.length==1){
let hasZyh = getPatFlag(rows[0])
selectOrder = selectOrder.filter(p=>getPatFlag(p)!=hasZyh)
state.selectedPatients = selectOrder
methods.sendSelectedPatient(state.selectedPatients)
state.dwj_ctrl_flag = '0'
state.dwjResOkList = []
}
else if(rows.length>=2){
// 最后一次选择的和onAlt后选择的及中间
let lastzyh = getPatFlag(rows[rows.length-1])
let prevzyh = getPatFlag(rows[rows.length-2])
let max_i = patList.findIndex(p=>getPatFlag(p)==lastzyh)
let min_i = patList.findIndex(p=>getPatFlag(p)==prevzyh)
let min_max_num = [min_i,max_i]
min_max_num.sort((a, b) => a - b)
min_i = min_max_num[0]
max_i = min_max_num[1]
let hasMax_i = 0
for (let i=min_i;i<=max_i;i++){
hasMax_i = i
let hasZyh = getPatFlag(patList[i])
selectOrder = selectOrder.filter(p=>getPatFlag(p)!=hasZyh)
state.dwj_ctrl_flag = '1'
state.patTable.toggleRowSelection(patList[i],false);
}
if(hasMax_i==max_i){
state.selectedPatients = selectOrder
methods.sendSelectedPatient(state.selectedPatients)
state.dwj_ctrl_flag = '0'
state.dwjResOkList = []
}
}
},