带快捷键的批量操作(按下shift键批量改变复选框的值)

<template>
  <ul class="checkbox-wrapper">
    <li :class="{'false-msg': !item}" v-for="(item, i) in data" :key="i">
      <input v-model="data[i]" type="checkbox" @click="sectionCompute($event,i)">
      {{item}}
    </li>
  </ul>
</template>

<script>
  export default {
    name: "text",
    data () {
      return {
        data: [true, true, true, true, true, true, true, true, true, true, true, true, true, true],
        isLastChecked: false,
        preI: -1,
      }
    },
    methods: {
      sectionCompute (e, i) {
        let vm = this;
        if(e.shiftKey && vm.isLastChecked) { //第二次摁下shift键
          vm.isLastChecked = false;     //将前一次摁下记录清空
          let k = 0;
          let firStatus = true;
          // if(vm.data[vm.preI] == vm.data[i]) {  //两次选中值不一样则不做批量处理
          //   return;
          // }
          if (i > vm.preI) {
            firStatus = vm.data[vm.preI];
            for (k = vm.preI; k < i + 1; k++) {
              vm.data[k] = firStatus;
            }
          } else if (i < vm.preI) {
            firStatus = vm.data[vm.preI];
            for (k = i; k < vm.preI + 1; k++) {
              vm.data[k] = firStatus;
            }
          }
        } else if (e.shiftKey && !vm.isLastChecked) { //第一次摁下shift键
          vm.isLastChecked = true;  //第一次摁下shift
          vm.preI = i;
        } else {
          vm.isLastChecked = false;  //将前一次摁下记录清空
          vm.data[i] = !vm.data[i];
        }
      },
    }
  }
</script>

<style scoped>
  .checkbox-wrapper {
    width: 256px;
    margin: 20px auto;
  }
  .false-msg {
    text-decoration:line-through
  }
</style>

效果:
带快捷键的批量操作(按下shift键批量改变复选框的值)