关于vue项目中的echrts需要以HTML文件的格式导出

vue项目中echarts以html格式导出

项目需求要有导出echrts的功能,原本以为只是用echrts自带的那个toolbox里面的导出就行了,结果看了下效果,不尽人意,那个导出只是截图当前视图的png格式,要是数据没标点在统计图上的话,只能看个模糊的大概,有滚动条的话也截不全数据。所以只能各种资源搜索去解决,不过网上好像没有特别全的攻略,都是导出excel,或者pdf格式的居多。特此整理个版本,希望能帮助到搜索到有相同需求的朋友。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

export const htmlTemplate = `<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.2.1/echarts.common.js"></script>
    <script src="%echartUrl%"></script>
    <title>指标导出图表</title>
</head>
<style>
    * {
        margin: 0;
        height: 0;
    }
    .showTitle{
        font-weight: bold;
        font-size: 22px;
        text-align:center;
        line-height:80px;
        display:none;
        display:%letShow%;
    }
    .showSubTitle{
        font-weight: bold;
        font-size: 18px;
        text-align:center;
        line-height:140px;
        display:none;
        display:%letShow1%;
    }
</style>

<body>
    <div class="showTitle">%tmpTitle%</div> 
    <div class="showSubTitle">%tmpSubTitle%</div>
    <div id="tmpCharts" style="width: 100%;height: 90vh;margin-top:5vh"></div>
</body>
<script>
    var colors = ["#5470C6", "#91CC75", "#EE6666"];
    var myChart = echarts.init(document.getElementById("tmpCharts"));
    window.addEventListener("resize",myChart.resize)
    myChart.setOption(%tmp%);
</script>
</html>`;

这个是字符串模板的代码,可以放在utils下,如图
在这里插入图片描述
项目中引用此模板,并用变量去替换字符串模板,从而是代码导入到html模板中
在这里插入图片描述
在这里插入图片描述

 exportEcharts() {
      let exportName = this.$refs.rptKindList.selected
        .map((v) => v.label)
        .join();
      // this.nameList = exportName;
      // 读取模版文件
      let charsOptionStr = JSON.stringify(this.chartsOptions);
      let echartsUrl = `${location.origin}/js/echarts.js`;
      let tmpTitle = "统计维度:" + exportName;
      let tmpSubTitle = "TOP:" + this.formInline.top;
      console.log(htmlTemplate);
      let htmlFiles = htmlTemplate
        .replace(`%tmp%`, charsOptionStr)
        .replace(`%echartUrl%`, echartsUrl)
        .replace(`%tmpTitle%`, tmpTitle)
        .replace(`%tmpSubTitle%`, tmpSubTitle)
        .replace(`%letShow%`, "block")
        .replace(`%letShow1%`, "block");

      // 导出
      var chart = document.createElement("a");
      var url = window.URL.createObjectURL(
        new Blob([htmlFiles], {
          type: "",
        })
      );
      chart.href = url;
      chart.download =
        "指标使用情况统计图(" +
        exportName +
        ")TOP-" +
        this.formInline.top +
        ".html";
      chart.click();
      window.URL.revokeObjectURL(url);
    },

在这里插入图片描述
在这里插入图片描述
因为我们项目运行环境是在内网下的,所以资源只能整到项目下。可以在上面字符串模板的js里面引入个CDN,如下图,这样导出来的html文件在外网也能查看
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上就是整体导出的思路及部分代码,希望能对你有所帮助!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值