vue+element-UI实现复制表格当前行的内容

vue+element-UI实现复制表格当前行的内容

目录

这是在实习中遇到的一个小问题,第一次分享文章,功能不难,但是我觉得挺有意思的,记录一下,各位小伙伴如果有更好的方法,欢迎大家留言哟~

功能实现场景

1、只改变表格里面的一个参数
我们在做项目时,可能需要我们改变表格某一列的内容,并复制多个,例如进货日期,如下图
页面
我想要添加水果在不同进货日期,希望在点击复制时,有一个弹出框,我们在弹出框输入开始时间和结束日期,点击确认我们就可以进行复制
在这里插入图片描述

基本思路

1、我们需要获取到从开始时间到结束时间里面所有的日期,并放在一个数组里;
2、遍历日期进行添加。

代码

1、不请求接口

copyDialog(data) {
      this.dialog.show = true;
      this.$set(this.dialog, "data", data);
    },
add(data = {}) {
    this.isDialogSubmiting = true;
    const dateArr = this.getDayAll(
      this.dialog.data.begin_time,
      this.dialog.data.end_time
    );
    for (let i = 0; i < dateArr.length; i++) {
      const obj = JSON.parse(JSON.stringify(data));
      obj.date = dateArr[i];
      this.tableData.push(obj);
    }
    this.isDialogSubmiting = false;
    this.dialog.show = false;
    }

//dateArr为复制时间的数组
//data是此行的数据加上开始和结束的时间
在这里插入图片描述

2、请求接口
假如我们通过Add添加数据

async add(data = {}) {
      this.isDialogSubmiting = true;
      const dateArr = this.getDayAll(
        this.dialog.data.begin_time,
        this.dialog.data.end_time
      );
      const res = [];
      for (let i = 0; i < dateArr.length; i++) {
        const obj = JSON.parse(JSON.stringify(data));
        obj.date = dateArr[i];
        const rst =Add(obj);
        res.push(rst);
      }
     if (await Promise.all(res)) {
        this.isDialogSubmiting = false;
        this.dialog.show = false;
        this.getList();
      }
      }

补充+进一步

1、因为使用了eslint ,在请求后端接口的时候,不让在循环里面使用await,使用了Promise.all()
2、使用Promise.all(),虽然也可以实现复制,但是返回的数据并不是按顺序返回的,因此我使用 reduce 函数来遍历数组并按顺序解决 Promise。

for (let i = 0; i < dateArr.length; i++) {
        const obj = JSON.parse(JSON.stringify(data));
        obj.award_date = dateArr[i];
        res.push(obj);
      }
      //这里真的绝了,reduce真厉害
      const result = res.reduce((accumulatorPromise, next) => accumulatorPromise.then(() => awardAdd(next)), Promise.resolve());
      result.then(() => {
        this.isDialogSubmiting = false;
        this.dialog.show = false;
        this.getList();
      });

参考
在js循环里面正确使用async/await
解决循坏里async/await.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值