vue-cli 项目中使用 v-chart 及导出 chart 图片
安装:
npm i v-charts echarts -S
组件中使用:
1 <template> 2 <div class="app-chart"> 3 <div id="print-content"> 4 <!--用于图标组件--> 5 <ve-pie :data="chartData" :colors="colors"></ve-pie> 6 <!--导出的图片box--> 7 <div ref="box"></div> 8 </div> 9 <div class="foot"> 10 <!--打印操作--> 11 <button type="primary" @click="doPrint">打 印</button> 12 </div> 13 </div> 14 </template> 15 16 <script> 17 //引入图标组件 18 import VePie from 'v-charts/lib/pie.common' 19 20 export default { 21 22 name: "app-pie", 23 24 data(){ 25 26 return{ 27 28 //图标相关参数(详情见官方文档) 29 chartData:{ 30 columns: ['日期', '销售量'], 31 32 rows: [ 33 { '日期': '1月1日', '销售量': 123 }, 34 { '日期': '1月2日', '销售量': 207 }, 35 { '日期': '1月3日', '销售量': 167 }, 36 { '日期': '1月4日', '销售量': 193 }, 37 ] 38 39 }, 40 41 //图标样式的配置(相关配置查看官方文档) 42 colors:['#19d4ae','#fa6e86'] 43 } 44 45 }, 46 47 //注册图标组件 48 components:{ 49 VePie 50 }, 51 52 methods:{ 53 54 //打印页面 55 doPrint(){ 56 57 this.createImage(); 58 59 this.$nextTick(()=>{ 60 61 if(this.$refs.box.innerHTML){ 62 63 let PrintContent = document.getElementById('print-content'); 64 let newContent =PrintContent.innerHTML; 65 let oldContent = document.body.innerHTML; 66 document.body.innerHTML = newContent; 67 window.print(); 68 window.location.reload(); 69 document.body.innerHTML = oldContent; 70 return false; 71 72 } 73 74 }); 75 76 }, 77 78 //chart图标导出图片 79 createImage(){ 80 81 // this.$nextTick(()=>{}); 82 83 const canvas = document.getElementsByTagName('canvas')[0]; 84 85 const box = this.$refs.box; 86 87 let image = canvas.toDataURL({ 88 type:"png", 89 pixelRatio: 2, 90 backgroundColor: '#fff',//不设置此项,导出图片的底色是黑色 91 }); 92 93 box.innerHTML = '<img src="'+image+'" alt="">'; 94 } 95 }, 96 } 97 </script> 98 99 <style scoped> 100 @media print { 101 .no-print{ 102 display: none; 103 } 104 } 105 </style>