zoukankan      html  css  js  c++  java
  • vue移动端下拉多选基于vant实现下拉多选组件

    1.最近需要做一个移动端多选的功能,发现vant上没有多选的下拉组件,于是决定写一个,样式如下

    调用部分传入值

    props
    select-data-opts 传入list数据,
    disabled 下拉是否可用
    checkedList 默认选中数据
    selectName 下拉菜单名称

    event
    selectMutiple 选中和确定时的回调函数,注意在回调方法里修改selectname
     <select-multiple :select-data-opts="supplierGetSupplierInfoOptsMixins" :disabled="selectDisabled" :checked-list="checked" :select-name="selectName" @selectMutiple="selectMutiple" />

    2.基于 DropdownMenu的样式写的所以该组件没使用,但是需要存在,代码比较简单,可以直接使用

    SelectMultiple.vue

    <template>
      <div>
        <div class="van-dropdown-menu">
          <div class="van-dropdown-menu__bar van-dropdown-menu__bar--opened">
            <div role="button" tabindex="0" class="van-dropdown-menu__item">
              <span class="van-dropdown-menu__title" :class="[ showSelectMultiple ? 'van-dropdown-menu__title--active van-dropdown-menu__title--down' : '' ]" @click="selectActive()">
                <div class="van-ellipsis">{{ selectName }}</div>
              </span>
              <div v-if="showSelectMultiple" class="btn_left">
                <span v-if="!all" @click="toggleAll()">全选</span>
                <span v-if="all" @click="toggleFalseAll()">取消全选</span>
              </div>
              <div v-if="showSelectMultiple" class="btn_true" @click="submitSelect()">确定</div>
            </div>
          </div>
        </div>
        <div v-if="showSelectMultiple" class="van-dropdown-item van-dropdown-item--down" style="top: 40.9531px;">
          <div class="van-overlay" style="z-index: 2005; position: absolute; animation-duration: 0.2s;" />
          <div ref="content" class="van-popup van-popup--top van-dropdown-item__content" style="transition-duration: 0.2s; z-index: 2006; position: relative; ">
    
            <van-checkbox-group v-model="checked" res="checkboxGroup" @change="selectDataOptsChange">
              <div v-for="(item,index) in selectDataOpts" :key="item.value" role="button" :tabindex="index" class="van-cell van-cell--clickable van-dropdown-item__option">
                <div class="van-cell__title">
                  <span>
                    <van-checkbox :name="item.value" checked-color="#A9B910">{{ index+1 }}.{{ item.text }}</van-checkbox></span>
                </div>
              </div>
              <!-- <div class="footer_btn">
                <div class="btn_d" @click="cancelSelect()">取消</div>
                <div class="btn_d btn_cur" @click="submitSelect()">确定</div>
              </div> -->
              <!-- <div class="blank">&nbsp;</div> -->
            </van-checkbox-group>
    
          </div>
    
        </div>
      </div>
    </template>
    <script >
    import { Checkbox, CheckboxGroup, DropdownMenu, DropdownItem } from 'vant'
    export default {
      name: 'CopyCode',
      components: {
        VanCheckbox: Checkbox,
        VanCheckboxGroup: CheckboxGroup,
        // eslint-disable-next-line
        VanDropdownMenu: DropdownMenu,
        // eslint-disable-next-line
        VanDropdownItem: DropdownItem
      },
      props: {
        selectName: {
          type: String,
          default: '全部'
        },
        disabled: {
          type: Boolean,
          default: false
        },
        otherName: {
          type: String,
          default: '供应商'
        },
        checkedList: {
          type: Array,
          default: function() { return [] }
        },
        selectDataOpts: {
          type: Array,
          default: function() { return [] }
        }
        // showSelectMultiple: {
        //   type: Boolean,
        //   default: false
        // }
      },
      data() {
        return {
          showSelectMultiple: false,
          checked: [],
          all: false
        }
      },
      mounted() {
        this.checked = this.checkedList
      },
      methods: {
        selectActive() {
          if (this.disabled) {
            return
          }
          this.showSelectMultiple = !this.showSelectMultiple
        },
        toggleAll() {
          const data = []
          for (let i = 0; i < this.selectDataOpts.length; i++) {
            data.push(this.selectDataOpts[i].value)
          }
          this.all = true
          this.checked = data
        },
        toggleFalseAll() {
          this.all = false
          this.checked = []
        },
        submitSelect() {
          this.showSelectMultiple = false
          this.selectNameData()
        },
        cancelSelect() {
          this.showSelectMultiple = false
        },
        selectDataOptsChange(data) {
          this.selectNameData()
        },
        selectNameData() {
          if (!this.checked.length || this.selectDataOpts.length === this.checked.length) {
            this.$emit('selectMutiple', { checked: this.checked, name: '全部' + this.otherName })
          } else {
            this.$emit('selectMutiple', { checked: this.checked, name: '已选中(' + this.checked.length + ')' + this.otherName })
          }
        },
        onCopy() {
        },
        onError() {
        }
    
      }
    }
    </script>
    <style lang="scss" scoped>
    .copy{
      font-size:14px;
    }
    .blank{
      position: relative;
      width:100%;
      height:60px;
    }
    .btn_true{
      width:60px;
      height:30px;
      border-radius: 5px;
      background-color:#A2C14D;
      color:#fff;
      position: absolute;
      text-align:center;
      line-height:30px;
      right:10px;
      font-size:14px;
      top:10px;
    }
    .btn_left{
      width:60px;
      height:30px;
      position: absolute;
      text-align:center;
      line-height:30px;
      left:10px;
      font-size:14px;
      top:10px;
    }
    .block_content{
      width:100%;
    }
    .flex_bottom{
      position: absolute ;
      bottom:-10px;
      left:0;
    }
    </style>
  • 相关阅读:
    Centos7安装Tomcat
    Centos7安装Java8
    NumPy
    面试题(2020)前端HTTP浏览器相关面试题
    面试题(2020)Vue面试题汇总
    面试题(2020)微信小程序常见面试题
    QuantLib 金融计算——案例之主成分久期(PCD)
    QuantLib 金融计算——案例之 KRD、Fisher-Weil 久期及久期的解释能力
    QuantLib 金融计算——一个使用 ActualActual 时需要注意的陷阱
    python selenium list index out of range
  • 原文地址:https://www.cnblogs.com/kbnet/p/13754969.html
Copyright © 2011-2022 走看看