动态表格的表头

 

//循环出来的表头        
<el-table-column :min-width="item.width" v-for="(item,index) in headerData" :key="index" :label="item.name"
          :prop="item.code" align="center" show-overflow-tooltip>
        </el-table-column>
        //固定表头 点击出现操作的表头的弹窗
        <el-table-column align="center" label="操作" width="180" fixed="right">
           //操作后面的按钮
          <template slot="header" class="operation">
            <span style="line-height: 32px;">操作</span>
            <el-tooltip class="item" effect="dark" content="字段展示" placement="top">
              <el-popover popper-class="popperOptions" ref="popoverRef" placement="bottom" trigger="manual"
                v-model="visible">
                <!-- <p>字段展示</p> -->
                <!-- <el-input placeholder="搜索字段" suffix-icon="el-icon-search" v-model="input1">
                </el-input> -->
                <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handleCheckAllChange">
                  全选{{checkData.length}}/{{selectData.length}}
                </el-checkbox>
                <el-checkbox-group v-model="checkData" @change="handleCheckedValChange">
                  <draggable @end="onDragEnd" class="checkboxGroup">
                    <el-checkbox v-for="item in selectData" :label="item" :key="item.id">
                      {{item.name}}
                    </el-checkbox>
                  </draggable>
                </el-checkbox-group>
                <i slot="reference" class="operatingButton" @click.stop="sortClick"></i>
              </el-popover>
            </el-tooltip>
          </template>
        //操作单元格的按钮
          <template slot-scope="scope">
            <div class="operation-box" v-if="routeName==='interior'">
              <el-tooltip class="" effect="dark" content="设置部门" placement="top">
                <i class="set" @click="setGroup(scope.row)"></i>
              </el-tooltip>
              <el-tooltip class="" effect="dark" content="导出" placement="top">
                <i class="export" @click="exportPerson(scope.row)"></i>
              </el-tooltip>
              <el-tooltip class="" effect="dark" content="删除" placement="top">
                <i class="delete" @click="deletePerson(scope.row)"></i>
              </el-tooltip>
            </div>
            <div class="operation-box" v-else>
              <el-tooltip class="" effect="dark" content="设置职位" placement="top">
                <i class="set" @click="setPosition(scope.row)"></i>
              </el-tooltip>
              <el-tooltip class="" effect="dark" content="导出" placement="top">
                <i class="export" @click="exportPerson(scope.row)"></i>
              </el-tooltip>
              <el-tooltip class="" effect="dark" content="删除" placement="top">
                <i class="delete" @click="deletePerson(scope.row)"></i>
              </el-tooltip>
            </div>
          </template>
        </el-table-column>
  // 页面重新渲染
    renderPage() {
      this.$nextTick(el => {
        this.$refs.contentData.doLayout();
      })
    },
    // 打开字段展示
    sortClick() {
      this.visible = !this.visible
      this.queryTableField()
    },
    // 字段展示排序拖拽排序
    async onDragEnd({ oldIndex, newIndex }) {
      let sort = 0
      let diff = Math.abs(newIndex - oldIndex)//插值绝对值
      let index = this.selectData[oldIndex]
      if (eval(oldIndex) > eval(newIndex)) {
        for (let i = 0; i < diff; i++) {
          this.selectData[oldIndex - i] = this.selectData[oldIndex - i - 1]
        }
        this.selectData[newIndex] = index
      } else {
        for (let i = 0; i < diff; i++) {
          this.selectData[oldIndex + i] = this.selectData[oldIndex + i + 1]
        }
        this.selectData[newIndex] = index
      }
      this.selectData.forEach(item => {
        sort++
        this.$set(item, 'sort', sort)
      })
      await this.updateTableField()
    },
    // 获取展示数据
    async queryTableField() {
      let type
      if (this.routeName === 'interior') {
        type = 1
      }
      if (this.routeName === 'outside') {
        type = 2
      }
      let arr = []
      const { result, success } = await this.$http.INTERIOR.queryTableField({
        tableType: type
      })
      if (success) {
        result.forEach(item => {
          if (item.isShow) {
            if (item.code === "idCardNo" || item.code === "email") {
              this.$set(item, 'width', '190')
            } else if (item.code === "phone" || item.code === "nativePlace") {
              this.$set(item, 'width', '140')
            } else {
              this.$set(item, 'width', '110')
            }
            arr.push(item)
          }
          this.$set(item, 'companyCode', localStorage.getItem('selectCompanyCode'))
          this.$set(item, 'groupCode', localStorage.getItem('selectGroupCode'))
        })
        this.selectData = result
        this.checkData = arr
        this.headerData = arr
        if (this.checkData.length) {
          let flag = this.selectData.every(item => {
            return item.isShow === 1
          })
          if (flag) {
            this.isIndeterminate = false
            this.checkAll = flag
          } else {
            this.isIndeterminate = true
            this.checkAll = flag
          }
          console.log(flag, 'flag');
        }
      }
    },
    // 操作展示数据
    async updateTableField() {
      let arr = []
      const { result, success } = await this.$http.INTERIOR.updateTableField(this.selectData)
      if (success) {
        await this.queryTableField()
      }
    },
    // 字段展示全选
    handleCheckAllChange(val) {
      let arr = []
      this.selectData.forEach(item => {
        if (val) {
          this.$set(item, 'isShow', 1)
          arr.push(item)
        } else {
          this.$set(item, 'isShow', 0)
        }
      })
      this.checkData = val ? arr : [];
      this.isIndeterminate = false
      this.renderPage()
      this.updateTableField()
    },
    // 字段展示单选
    handleCheckedValChange(value) {
      let filterArr = []
      let checkedCount = value.length;
      this.checkAll = checkedCount === this.selectData.length;
      this.isIndeterminate = checkedCount > 0 && checkedCount < this.selectData.length;
      const getData = (arr1, arr2) => {
        return arr1.concat(arr2).filter((v, i, arr3) => {
          return arr3.indexOf(v) === arr3.lastIndexOf(v)
        })
      }
      filterArr = getData(this.checkData, this.selectData)
      console.log(filterArr, 'filterArrfilterArr');
      this.selectData.forEach(item => {
        this.$set(item, 'isShow', 1)
        if (filterArr.length) {
          filterArr.forEach(item1 => {
            if (item.name === item1.name) {
              item.isShow = 0
            }
          })
        }
      })
      this.renderPage()
      this.updateTableField()
    },

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值