循环新增、删除层级

产品需求:

  1. 新增一层,同时在下一层的下拉框里,可以选择这一层的内容
  2. 删除一层,删除这一层和下拉框里对应的选择项

如图:

vue代码:

<a-form-item v-for="(item, index) in list" :label="`第${index + 1}层`">
    <a-row>
        <a-col :span="8">
          <a-input v-model="item.name" @change="onName(item.id)" />
        </a-col>
        <a-col :span="7" :offset="1">
          <a-select v-model="item.type">
            <a-select-option v-for="n in item.selsctList" :value="n.id">
              {{ n.value }}
            </a-select-option>
          </a-select>
        </a-col>
        <a-col :span="1" class="symbol">*</a-col>
        <a-col :span="5">
          <a-input-number v-model="item.num" :min="0" :step="0.001" />
        </a-col>
        <a-col :span="2">
          <a-button
            type="primary"
            shape="circle"
            @click="delHierarchy(item.id)"
          >
            -
          </a-button>
        </a-col>
    </a-row>
 </a-form-item>
 <a-button type="primary" @click="addHierarchy"> + 添加层级 </a-button>

逻辑代码:

@Provide() list = [
    {
      id: 'hierarchy0',
      name: null,
      type: null,
      num: null,
      selsctList: [
        { id: '1', value: '成本价' },
        { id: '2', value: '代理价' },
        { id: '3', value: '标准成本' },
        { id: '4', value: '参考成本' },
      ],
    },
  ];
addHierarchy() {
    const data = lodash.last(this.list);
    const obj = this.list[this.list.length + 1];
    let list
    if (data.name !== null && !obj) {
      list = lodash.unionBy(data.selsctList, [{ id: data.id, value: data.name }])
    }
    this.list.push({
      id: lodash.uniqueId('hierarchy'),
      name: null,
      type: null,
      num: null,
      selsctList: list ? list : data.selsctList,
    });
  }
  onName(id) {
    const data = lodash.find(this.list, { id: id });
    const index = lodash.findIndex(this.list, { id: id });
    this.list.forEach((item,i)=>{
      if(index<i){
        const optionList = lodash.find(item.selsctList, { id: data.id });
          if (optionList) {
            optionList.value = data.name;
          } else {
             item.selsctList = lodash.unionBy(data.selsctList, [{ id: data.id, value: data.name }]);
          }
      }
    })
  }
  delHierarchy(id) {
    console.log(this.list);
    this.list.forEach(item => {
      item.selsctList = lodash.remove(item.selsctList,function(i){
        return id !== i.id
      })
    })
    this.list = lodash.remove(this.list,function(i){
      return i.id !== id
    })
  }
}

大功告成~~~

又是开心搬砖的一天~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值