vue2 若依项目,使用plotly.js-dist图表库,将数据图表一键导出为图片

此代码适用的场景是一个页面有多个数据图表。

首先需要拿到你生成数据图表的数据, 然后赋值给一个数组,数组需要在data定义,还需要去重。

               // 检查是否有相同的parameter值
                const hasDuplicate = this.toImageArr.some(
                    iiem => iiem.parameter === element.parameter
                );
                // 如果没有重复,则添加到数组
                if (!hasDuplicate) {
                    this.toImageArr.push(element);
                }

 然后点击导出按钮的代码如下:

   // 导出图表为图片
        exportExcel() {
            const uniqueImageNames = new Set(this.toImageArr);
            for (const image of this.toImageArr) {
                const imageName = image.parameter;
                if (uniqueImageNames.has(imageName)) {
                    continue;
                }
                Plotly.toImage(`id${imageName}`, { format: 'png', width: 1600, height: 1000 })
                    .then(function (url) {
                     // 创建一个虚拟的下载链接
                        const link = document.createElement('a');
                        link.href = url;
                        link.download = `${imageName}.png`; 
                     //imageName图片名称,根据自己需求修改
                        link.style.display = 'none';
                     // 将下载链接添加到页面中并触发点击事件
                        document.body.appendChild(link);
                        link.click();
                     // 清理下载链接
                        document.body.removeChild(link);
                        uniqueImageNames.add(imageName);
                    })
                    .catch(function (error) {
                        console.log('Error exporting chart:', error);
                    });
            }
        }

单个下载可以点击数据图表的照相机,可以实现单个下载。

如果数据图表做了分页和懒加载,无法获取第二页数据图表的dom, 使用以下代码:

exportExcel() {
  const uniqueImageNames = new Set();

  const promises = this.toImageArr.map((image) => {
    const imageName = image.parameter;
    if (uniqueImageNames.has(imageName)) {
      return Promise.resolve();
    }
    
    return Plotly.toImage(`id${imageName}`, { format: 'png', width: 1600, height: 1000 })
      .then(function (url) {
        const link = document.createElement('a');
        link.href = url;
        link.download = `${imageName}.png`;
        link.style.display = 'none';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        uniqueImageNames.add(imageName);
      })
      .catch(function (error) {
        console.log('Error exporting chart:', error);
      });
  });

  Promise.all(promises)
    .then(() => {
      console.log('All charts exported successfully');
    })
    .catch((error) => {
      console.log('Error exporting charts:', error);
    });
}

好用的话点赞支持一下,谢谢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值