vue element ui 根据数组长度制作折叠面板功能

vue element ui 根据数组长度制作折叠面板功能

1.先看效果

在这里插入图片描述

在这里插入图片描述

2.原理

  • 利用vue的计算属性来进行控制数组的长度。
<!--
 * @Author: qiaokun
 * @Date: 2020-12-14 10:16:03
 * @LastEditTime: 2021-01-20 11:42:45
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \celesta-web-project\src\components\form\YpSearchForm.vue
-->
<template>
  <el-form :model="formData" label-width="auto" :label-position="'left'" ref="formRef">
    <el-row type="flex" justify="start" style="flexWrap:wrap;">
      <el-col :span="7" v-for="(item, index) in showSearchList" :key="index">
        <el-form-item v-if="item.type === 'input'" :label="item.label" :prop="item.prop">
          <el-input v-model.trim="formData[item.prop]" :placeholder="item.placeholder ? item.placeholder : '请输入'" style="width:auto" clearable></el-input>
        </el-form-item>
        <el-form-item v-if="item.type === 'select'" :label="item.label">
          <el-select v-model="formData[item.prop]" filterable :placeholder="$t('lang.pleaseselect')" style="width:auto" :disabled="item.disabled ? true : false" clearable>
            <el-option v-for="(selectItem, index) in item.options" :key="index" :label="selectItem.label" :value="selectItem.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item v-if="item.type === 'date'" :label="item.label">
          <el-date-picker v-model="formData[item.prop]" type="date" value-format="yyyy-MM-dd" style="width:auto" :placeholder="item.placeholder ? item.placeholder : '请输入或选择'"> </el-date-picker>
        </el-form-item>
        <el-form-item v-if="item.type === 'time'" :label="item.label">
          <div class="block" style="display:flex;">
            <span>
              <el-date-picker value-format="yyyy-MM-dd HH-mm-ss" v-model="formData[item.props]" type="datetime" style="width:auto" :placeholder="item.placeholder"> </el-date-picker>
            </span>
          </div>
        </el-form-item>
        <el-form-item v-if="item.type === 'selectOrg'" :label="item.label">
          <el-select v-model="formData[item.prop]" :placeholder="$t('lang.pleaseselect')" style="width:auto" :disabled="item.disabled ? true : false">
            <el-option v-for="(selectItem, index) in item.options" :key="index" :label="selectItem.label" :value="selectItem.value"></el-option>
          </el-select>
        </el-form-item>
      </el-col>
      <el-button size="mini" class="search-btn-more" v-show="formLabel.length > 3" @click="changeIsBrandFold"
        ><span>{{ isBrandFold ? '更多查询' : '收起查询' }}</span
        ><i :class="isBrandFold ? 'el-icon-arrow-down' : 'el-icon-arrow-up'"></i
      ></el-button>
      <!-- <el-button size="mini" v-if="showSearchList.length > 3" @click="changeIsBrandFold">收起</el-button> -->
    </el-row>
  </el-form>
</template>
<script>
export default {
  props: {
    formData: {
      type: Object,
      default() {
        return {}
      }
    },
    formLabel: {
      type: Array,
      default() {
        return {}
      }
    },
    formRule: {
      type: Object,
      default() {
        return {}
      }
    }
  },
  data() {
    return {
      isBrandFold: true
    }
  },
  computed: {
    // 查询条件列表(展开折叠)
    showSearchList: {
      get: function() {
        if (this.isBrandFold) {
          if (this.formLabel.length < 4) {
            return this.formLabel
          }
          const newArr = []
          for (var i = 0; i < 3; i++) {
            const item = this.formLabel[i]
            newArr.push(item)
          }
          return newArr
        }
        return this.formLabel
      },
      set: function(val) {
        this.showSearchList = val
      }
    }
  },
  methods: {
    changeIsBrandFold() {
      this.isBrandFold = !this.isBrandFold
    },
    resetForm() {
      this.$refs.formRef.resetFields()
    }
  }
}
</script>
<style lang="scss" scoped>
.el-input {
  width: auto;
}
.search-btn-more {
  width: 120px;
  height: 40px;
}
</style>

提示:只关注方法,不用关注业务代码

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值