diff --git a/client/package.json b/client/package.json index 749ca6b..2cb862a 100644 --- a/client/package.json +++ b/client/package.json @@ -20,6 +20,7 @@ "echarts": "^5.4.0", "element-china-area-data": "^5.0.2", "element-ui": "^2.15.13", + "exceljs": "^4.3.0", "file-saver": "^2.0.2", "js-cookie": "2.2.0", "normalize.css": "7.0.0", diff --git a/client/src/views/supervisionNew/statisticsGroup.vue b/client/src/views/supervisionNew/statisticsGroup.vue index ec3dc8c..8b491bf 100644 --- a/client/src/views/supervisionNew/statisticsGroup.vue +++ b/client/src/views/supervisionNew/statisticsGroup.vue @@ -21,6 +21,11 @@ @click="handlePrint" >打印 + 导出 @@ -30,16 +35,16 @@ -
+
-
+
-
+
-
+
@@ -50,6 +55,8 @@ import { taskAnalyse } from "@/api/task"; import checkPermission from "@/utils/permission"; import * as echarts from 'echarts'; + import ExcelJS from 'exceljs'; // 引入exceljs, 用于生成excel文件 + import { saveAs } from 'file-saver' export default { data() { return { @@ -107,7 +114,7 @@ type: 'category', data: [], }, - color:['#438af4','#91cc75','#ff0000'], + color:['#c9caca','#007dcd','#000000'], yAxis: { type: 'value', axisLabel:{ @@ -124,6 +131,10 @@ barGap: 0, barWidth:10, data: [], + label: { + show: true, + position: 'top' + }, markLine : { symbol:"none", label: { @@ -134,12 +145,12 @@ silent:false, //鼠标悬停事件 true没有,false有 lineStyle:{ //警戒线的样式 ,虚实 颜色 type:"solid", - color:"#ff0000", + color:"#000000", }, label:{ position:'end', formatter:'{c}', - color:"#ff0000", + color:"#000000", fontSize:'8' }, name:'', @@ -152,6 +163,10 @@ name: '单位目标值', type: 'bar', barWidth:10, + label: { + show: true, + position: 'top' + }, data: [] }, { @@ -217,13 +232,25 @@ data42.push(item4.客户投诉处理满意率设定值) }) markLine4 = sortedArr4[0].客户投诉处理满意率基础值; + + console.log(data1,data2,data3) let option1 =that.option; let option2 =that.option; let option3=that.option; let option4= that.option; option1.xAxis.data = xaxis1; - option1.series[0].data = data1; + + let arr1 = [],arr2=[],arr3=[],arr4=[]; + data1.forEach(item=>{ + if(item!==null){ + let item1 = item.toFixed(2) + arr1.push(item1) + }else{ + arr2.push(item) + } + }) + option1.series[0].data = arr1; option1.series[1].data = data12; option1.title.text = '报告/证书合格率'; option1.series[0].markLine.data[0].yAxis = markLine1; @@ -231,7 +258,15 @@ that.barChart1.setOption(option1); option2.xAxis.data = xaxis2; - option2.series[0].data = data2; + data2.forEach(item=>{ + if(item!==null){ + let item2 = item.toFixed(2) + arr2.push(item2) + }else{ + arr2.push(item) + } + }) + option2.series[0].data = arr2; option2.series[1].data = data22; option2.title.text = '报告/证书及时率'; option2.series[0].markLine.data[0].yAxis = markLine2; @@ -239,7 +274,15 @@ that.barChart2.setOption(option2); option3.xAxis.data = xaxis3; - option3.series[0].data = data3; + data3.forEach(item=>{ + if(item!==null){ + let item3 = item.toFixed(2) + arr3.push(item3) + }else{ + arr2.push(item) + } + }) + option3.series[0].data = arr3; option3.series[1].data = data32; option3.title.text = '能力验证满意率'; option3.series[0].markLine.data[0].yAxis = markLine3; @@ -247,7 +290,15 @@ that.barChart3.setOption(option3); option4.xAxis.data = xaxis4; - option4.series[0].data = data4; + data4.forEach(item=>{ + if(item!==null){ + let item4 = item.toFixed(2) + arr4.push(item4) + }else{ + arr4.push(item) + } + }) + option4.series[0].data = arr4; option4.series[1].data = data42; option4.title.text = '客户投诉处理满意率'; option4.series[0].markLine.data[0].yAxis = markLine4; @@ -255,6 +306,58 @@ that.barChart4.setOption(option4); }) }, + exportExcel() { + const workbook = new ExcelJS.Workbook(); // 创建工作簿 + const worksheet = workbook.addWorksheet('Sheet1'); // 添加工作表 + + const chart = echarts.getInstanceByDom(this.$refs.chart) // 获取图表实例 + const base64Image = chart.getDataURL({ + pixelRatio: 2, // 导出图片的分辨率比例,默认为1,即图片的分辨率为屏幕分辨率的一倍 + backgroundColor: '#fff' // 导出图片的背景色 + }) + let image= workbook.addImage({ // 添加图片 + base64: base64Image, // 图片的base64编码 + extension: 'png' // 图片的扩展名 + }); + worksheet.addImage(image, 'A1:AB35'); // 将图片添加到工作表中 + + const chart2 = echarts.getInstanceByDom(this.$refs.chart2) + const base64Image2 = chart2.getDataURL({ + pixelRatio: 2, + backgroundColor: '#fff' + }) + let image2= workbook.addImage({ + base64: base64Image2, + extension: 'png' + }); + worksheet.addImage(image2, 'A36:AB70'); + + const chart3 = echarts.getInstanceByDom(this.$refs.chart3) + const base64Image3 = chart3.getDataURL({ + pixelRatio: 2, + backgroundColor: '#fff' + }) + let image3= workbook.addImage({ + base64: base64Image3, + extension: 'png' + }); + worksheet.addImage(image3, 'A71:AB105'); + const chart4 = echarts.getInstanceByDom(this.$refs.chart4) + const base64Image4 = chart4.getDataURL({ + pixelRatio: 2, + backgroundColor: '#fff' + }) + let image4= workbook.addImage({ + base64: base64Image4, + extension: 'png' + }); + worksheet.addImage(image4, 'A106:AB140'); + workbook.xlsx.writeBuffer().then(function (buffer) { // 生成excel文件的二进制数据 + saveAs.saveAs(new Blob([buffer], { // 生成Blob对象 + type: 'application/octet-stream' // 指定文件的MIME类型 + }), 'xchart.xlsx'); // 指定文件名 + }); + } } };