form表单一个给后台的值对应前端很多下拉选择框

自己封装一个组件

<template>
  <div class="">
    <basic-select
      v-for="(item,index) in selectRuleIdArray"
      :key="index"
      v-model="selectRuleIdArray[index]"
      allow-create
      filterable
      default-first-option
      :options="options"
      placeholder="请选择"
      @change="selectChange"
    />
  </div>
</template>

<script lang='ts'>
import Vue from 'vue';
import { Component, Prop } from 'vue-property-decorator';
import BasicSelect, { Option } from '@/components/form/BasicSelect.vue';

@Component({
  components: {
    BasicSelect
  }
})
export default class MultiSelect extends Vue {
    @Prop(Array)
    private options !: Option[]; // 传来的选项。

    @Prop(String)
    private value !: ''; // 选择的字符串

    private count = 4; // 初始化4
    private selectRuleIdArray: string[]=[]; // 匹配规则

    private get bindSelectValue (): string[] {
      return this.value ? this.value.split(',') : [];
    }

    private mounted () {
      this.selectRuleIdArray = this.bindSelectValue.length ? this.bindSelectValue : new Array(this.count).fill(null).map((_, i) => {
        return '';
      });
    }

    public addSelect () {
      if (this.selectRuleIdArray.length >= this.options.length) {
        return false;
      }
      this.$set(this.selectRuleIdArray, this.selectRuleIdArray.length, '');
    }

    public subSelect () {
      if (this.selectRuleIdArray.length <= 1) {
        return false;
      }
      this.$delete(this.selectRuleIdArray, this.selectRuleIdArray.length - 1);
    }

    private selectChange (val: string) {
      this.$emit('update:value', this.selectRuleIdArray.filter(x => x).join(','));
    }
}
</script>

<style lang='scss' scoped>

</style>

<el-form-item
   label="全部数据ID:"
   prop="image_id_field"
 >
   <multi-select
     ref="imageIdFieldMulti"
     :options="matchOptions"
     :value.sync="formModel.image_id_field"
   />
 </el-form-item>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值