QualityAnalysisExport.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <template>
  2. <div class="quality-analysis-export analysis-export-modal">
  3. <div class="print-box">
  4. <h1>
  5. 阅卷质量分析
  6. </h1>
  7. <div class="quality-info">
  8. <p>科目:{{ pageInfo.subjectName }}</p>
  9. <p>考区:{{ pageInfo.areaName }}</p>
  10. <p>开始时间:{{ pageInfo.startTime }}</p>
  11. <p>结束时间:{{ pageInfo.endTime }}</p>
  12. </div>
  13. <div class="print-chart" v-if="chartData.levelsPropReportData">
  14. <div class="print-chart-body" v-if="!showImg">
  15. <echart-render
  16. chart-title="档位分布图"
  17. :animation-is-open="false"
  18. :chart-data="chartData.levelsPropReportData"
  19. chart-type="barGroup"
  20. ref="levelsPropChart"
  21. ></echart-render>
  22. </div>
  23. <div
  24. class="print-chart-body"
  25. v-show="showImg && chartData.levelsPropReportData.names.length"
  26. >
  27. <div class="print-chart-title">档位分布图:</div>
  28. <img src="" ref="levelsPropImg" />
  29. </div>
  30. </div>
  31. <div class="print-chart" v-if="chartData.deviationReportData">
  32. <div class="print-chart-body" v-if="!showImg">
  33. <echart-render
  34. chart-title="累计偏差"
  35. :animation-is-open="false"
  36. :chart-data="chartData.deviationReportData"
  37. :chart-color="['#FF7786']"
  38. chart-type="barReverse"
  39. ref="deviationChart"
  40. ></echart-render>
  41. </div>
  42. <div
  43. class="print-chart-body"
  44. v-show="showImg && chartData.deviationReportData.names.length"
  45. >
  46. <div class="print-chart-title">累计偏差:</div>
  47. <img src="" ref="deviationImg" />
  48. </div>
  49. </div>
  50. </div>
  51. <div class="print-box">
  52. <div class="print-chart" v-if="chartData.distanceReportData">
  53. <div class="print-chart-body" v-if="!showImg">
  54. <echart-render
  55. chart-title="累计误差"
  56. :animation-is-open="false"
  57. :chart-data="chartData.distanceReportData"
  58. :chart-color="['#22C0FF']"
  59. chart-type="bar"
  60. ref="distanceChart"
  61. ></echart-render>
  62. </div>
  63. <div
  64. class="print-chart-body"
  65. v-show="showImg && chartData.distanceReportData.names.length"
  66. >
  67. <div class="print-chart-title">累计误差:</div>
  68. <img src="" ref="distanceImg" />
  69. </div>
  70. </div>
  71. <div class="print-chart" v-if="chartData.callbackReportData">
  72. <div class="print-chart-body" v-if="!showImg">
  73. <echart-render
  74. chart-title="打回次数"
  75. :animation-is-open="false"
  76. :chart-data="chartData.callbackReportData"
  77. :chart-color="['#41CD7D']"
  78. chart-type="bar"
  79. ref="callbackChart"
  80. ></echart-render>
  81. </div>
  82. <div
  83. class="print-chart-body"
  84. v-show="showImg && chartData.callbackReportData.names.length"
  85. >
  86. <div class="print-chart-title">打回次数:</div>
  87. <img src="" ref="callbackImg" />
  88. </div>
  89. </div>
  90. </div>
  91. </div>
  92. </template>
  93. <script>
  94. import EchartRender from "@/components/EchartRender";
  95. import { download } from "@/plugins/utils";
  96. import html2canvas from "html2canvas";
  97. export default {
  98. name: "quality-analysis-export",
  99. components: { EchartRender },
  100. props: {
  101. chartData: {
  102. type: Object,
  103. default() {
  104. return {};
  105. }
  106. },
  107. pageInfo: {
  108. type: Object,
  109. default() {
  110. return {};
  111. }
  112. }
  113. },
  114. data() {
  115. return {
  116. showImg: false
  117. };
  118. },
  119. mounted() {
  120. this.$nextTick(() => {
  121. this.$refs.levelsPropImg.src = this.$refs.levelsPropChart.getDataURL({
  122. backgroundColor: "#fff",
  123. excludeComponents: ["toolbox "]
  124. });
  125. this.$refs.deviationImg.src = this.$refs.deviationChart.getDataURL({
  126. backgroundColor: "#fff",
  127. excludeComponents: ["toolbox "]
  128. });
  129. this.$refs.distanceImg.src = this.$refs.distanceChart.getDataURL({
  130. backgroundColor: "#fff",
  131. excludeComponents: ["toolbox "]
  132. });
  133. this.$refs.callbackImg.src = this.$refs.callbackChart.getDataURL({
  134. backgroundColor: "#fff",
  135. excludeComponents: ["toolbox "]
  136. });
  137. this.showImg = true;
  138. this.$nextTick(() => {
  139. this.toExport();
  140. });
  141. });
  142. },
  143. methods: {
  144. async toExport() {
  145. let fetchAll = [];
  146. this.$el.childNodes.forEach(item => {
  147. fetchAll.push(
  148. html2canvas(item, {
  149. allowTaint: true
  150. })
  151. );
  152. });
  153. const canvasList = await Promise.all(fetchAll).catch(() => {});
  154. const contents = canvasList
  155. .filter(canvas => canvas)
  156. .map(canvas => canvas.toDataURL().split(",")[1]);
  157. if (!contents.length) {
  158. this.$emit("on-exported", false);
  159. return;
  160. }
  161. let result = true;
  162. const user = this.$ls.get("user", { token: "", id: "" });
  163. await download({
  164. type: "post",
  165. url: `${this.GLOBAL.domain}/api/exportPdf`,
  166. header: { Authorization: user.token, userId: user.id },
  167. data: {
  168. content: contents
  169. },
  170. fileName: `${this.pageInfo.subjectName}-${this.pageInfo.areaName}-阅卷质量分析.pdf`
  171. }).catch(() => {
  172. result = false;
  173. });
  174. this.$emit("on-exported", result);
  175. }
  176. }
  177. };
  178. </script>