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>
  • 相关阅读:
    [原][GIS]ARCGIS投影坐标系转换
    [转][osg]探索未知种族之osg类生物【目录】
    [转][osg]探究osg中的程序设计模式【目录】
    [原][资料整理][osg]osgDB文件读取插件,工作机制,支持格式,自定义插件
    [原][landcover]全球地表植被样例图片
    [转]arcgis for server 10.2 下载及安装
    [原]DOM、DEM、landcover,从tms服务发布格式转arcgis、google服务发布格式
    MySQL 数据库最优化设计原则
    MySQL常用存储引擎及如何选择
    Xtrabackup实现Mysql的InnoDB引擎热备份
  • 原文地址:https://www.cnblogs.com/jinmmm/p/14297232.html
Copyright © 2011-2022 走看看