• 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>
  • 相关阅读:
    结构体、共用体
    strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
    memmove函数
    Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
    maven3常用命令、java项目搭建、web项目搭建详细图解
    C++中的const关键字
    Pyp 替代sed,awk的文本处理工具
    Python 中的进程、线程、协程、同步、异步、回调
    Python-aiohttp百万并发
    学习Python的三种境界
  • 原文地址:https://www.cnblogs.com/jinmmm/p/14297232.html
Copyright © 2020-2023  润新知