二、键盘监听按键并通过鼠标点击勾选table行或取消勾选行并发送数据

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 = []
    }
  }
},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值