zoukankan      html  css  js  c++  java
  • element ui checkbox实现多项全选反选功能

    <!-- 说明 -->
    <!-- @author ex-jinming002-->
    <script>
    export default {
      name: 'Overall',
      data() {
        return {
          // 顶部全选所有状态
          checkAll: false,
          isIndeterminate: false,
          checkBoxData: [],
          testData: [
            {
              title: '基本信息:',
              options: [{ label: '存在问题', value: 'laborum officia' }],
            },
            {
              title: '预计进展详情:',
              options: [
                {
                  label: '预计土地盘整年份',
                  value: 'nostrud fugiat',
                },
                { label: '是否计划本年度开工', value: 'aliqua' },
                { label: 'in deserunt', value: 'mollit sed' },
              ],
            },
            {
              title: '实际进展详情:',
              options: [
                { label: '签约时间', value: 'consectetur proident' },
                { label: '用地面积(公顷)', value: 'dolor et qui cupidatat' },
                { label: '开工时间', value: 'dolore ut occaecat non cillum' },
              ],
            },
            {
              title: '中止项目:',
              options: [
                { label: '中止原因', value: 'exercitation ut' },
                { label: '土地实际盘整面积', value: 'amet' },
                { label: '是否计划盘整', value: 'Excepteur esse in' },
              ],
            },
          ],
        }
      },
    
      mounted() {
        const tempArr = []
        this.testData.forEach(item => {
          tempArr.push({
            // 子项的全选状态
            checkAll: false,
            // 子项的默认选中的checkbox
            checkedCities: [],
            isIndeterminate: false,
            options: item.options,
            title: item.title,
          })
        })
        console.log(this.checkBoxData, '遍历之前的')
        this.checkBoxData = tempArr
        console.log(this.checkBoxData, '遍历之hou的')
      },
    
      methods: {
        // 全选所有子项
        handleCheckAll(val) {
          this.checkBoxData.forEach((item, index) => {
            this.handleCheckAllChange(val, index)
            this.checkBoxData[index].checkAll = val
          })
        },
        // 子项的全选change事件
        handleCheckAllChange(val, index) {
          console.log(val)
          this.checkBoxData[index].checkedCities = (val
            ? this.checkBoxData[index].options
            : []
          ).map(item => item.value)
          this.checkBoxData[index].isIndeterminate = false
          this.TopCheckBoxCheck()
        },
        // 子项change事件
        handleCheckedCitiesChange(value, index) {
          console.log(this.checkBoxData[index].checkedCities)
          const checkedCount = value.length
          this.checkBoxData[index].checkAll =
            checkedCount === this.checkBoxData[index].options.length
          this.checkBoxData[index].isIndeterminate =
            checkedCount > 0 &&
            checkedCount < this.checkBoxData[index].options.length
          this.TopCheckBoxCheck()
        },
        TopCheckBoxCheck() {
          const allSelectLen = this.checkBoxData.filter(item => item.checkAll)
            .length
    
          if (allSelectLen === this.checkBoxData.length) {
            this.checkAll = true
            this.isIndeterminate = false
          } else {
            this.checkAll = false
            this.isIndeterminate =
              this.checkBoxData.findIndex(item => item.isIndeterminate) >= 0 ||
              this.checkBoxData.findIndex(item => item.checkAll) >= 0
          }
        },
        handleCheck() {
          const res = this.checkBoxData.map(item => {
            if (item.checkedCities && item.checkedCities.length > 0) {
              return item.checkedCities
            }
          })
          console.log(res.flat())
          const result = res
            .flat()
            .filter(item => {
              if (item) {
                return item
              }
            })
            .join()
          console.log(result)
        },
      },
    }
    </script>
    <template>
      <section class="Overall" v-if="checkBoxData && checkBoxData.length > 0">
        <el-checkbox
          :indeterminate="isIndeterminate"
          v-model="checkAll"
          @change="handleCheckAll"
          >全选</el-checkbox
        >
        <br /><br /><br />
        <div v-for="(item, index) in checkBoxData" :key="index">
          <el-checkbox
            :indeterminate="item.isIndeterminate"
            v-model="item.checkAll"
            @change="
              val => {
                handleCheckAllChange(val, index)
              }
            "
            >{{ item.title }}</el-checkbox
          >
          <div style="margin: 15px 0;"></div>
          <el-checkbox-group
            v-model="item.checkedCities"
            @change="
              val => {
                handleCheckedCitiesChange(val, index)
              }
            "
          >
            <el-checkbox
              v-for="option in item.options"
              :label="option.value"
              :key="option.value"
              >{{ option.label }}</el-checkbox
            >
          </el-checkbox-group>
          <br />
          <br />
          <br />
        </div>
        <br /><br /><br />
        <el-button :style="{ 'margin-left': '100px' }" @click="handleCheck"
          >提交</el-button
        >
      </section>
    </template>
    <style lang="less">
    .Overall {
    }
    </style>
  • 相关阅读:
    Atitit 人脸识别 眼睛形态 attilax总结
    Atitit 手机号码选号 规范 流程 attilax总结 v2 r99.docx
    atitit 板块分类 上市公司 龙头企业公司 列表 attilax总结.docx
    Atititi atiitt eam pam资产管理 购物表去年.xlsx
    使用cmd查看电脑连接过的wifi密码(一)
    常见十大web攻击手段 悟寰轩
    常见web攻击方式 悟寰轩
    【MYSQL数据库】MYSQL学习笔记mysql分区基本操作 悟寰轩
    Filter及FilterChain的使用详解 悟寰轩
    启动tomcat spring初始化两次问题(eg:@PostConstruct) 悟寰轩
  • 原文地址:https://www.cnblogs.com/jinmmm/p/14297232.html
Copyright © 2011-2022 走看看