testReport.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. <template>
  2. <el-dialog
  3. custom-class="cDialog"
  4. top="50px"
  5. v-model="dialogVisible"
  6. width="80%"
  7. >
  8. <el-button
  9. style="position: absolute; right: 24px; top: 60px; z-index: 5000"
  10. type="primary"
  11. @click="exportPDF"
  12. >
  13. 导出为PDF</el-button
  14. >
  15. <div class="pdfDom">
  16. <div class="title">故障检测报告</div>
  17. <div class="info">
  18. <div class="infoContent">
  19. <div class="contents">
  20. <div class="contentsTitle">风机编号:</div>
  21. <div>NG01_01</div>
  22. </div>
  23. <div class="contents">
  24. <div class="contentsTitle">风机型号:</div>
  25. <div>UP82</div>
  26. </div>
  27. <div class="contents">
  28. <div class="contentsTitle">故障发生时间:</div>
  29. <div>2021-11-26 09:00:00</div>
  30. </div>
  31. </div>
  32. <div class="infoContent">
  33. <div class="contents">
  34. <div class="contentsTitle">使用模型:</div>
  35. <div>神经网络</div>
  36. </div>
  37. <div class="contents">
  38. <div class="contentsTitle">训练次数:</div>
  39. <div>200次</div>
  40. </div>
  41. <div class="contents"></div>
  42. </div>
  43. <div class="result">
  44. <div class="moduleTitle">诊断结果:</div>
  45. <div class="resultContent">
  46. 诊断故障最大可能为<text style="color: #dc143c">齿轮箱故障</text
  47. >,下表为各故障可能发生的实际概率:
  48. </div>
  49. <div class="resultTable">
  50. <el-table
  51. empty-text="暂无数据"
  52. :data="faultList"
  53. :header-cell-style="{
  54. background: 'rgb(153,204,255)',
  55. color: '#000',
  56. 'font-size': '20px',
  57. }"
  58. :cell-style="{
  59. 'font-size': '20px',
  60. color: '#696969',
  61. }"
  62. border
  63. stripe
  64. style="width: 100%; margin: 10px 0"
  65. >
  66. <el-table-column
  67. prop="name"
  68. label="故障名称"
  69. align="center"
  70. ></el-table-column>
  71. <el-table-column
  72. prop="percent"
  73. label="发生概率"
  74. align="center"
  75. ></el-table-column>
  76. </el-table>
  77. </div>
  78. </div>
  79. <div class="result">
  80. <div class="moduleTitle">诊断依据:</div>
  81. <div class="resultContent">
  82. 根据风场情况,训练故障权重图、训练和测试准确率、训练模型误差率如下:
  83. </div>
  84. <div class="charts">
  85. <BarChart
  86. v-if="barList.length > 0"
  87. id="reportBar"
  88. :barList="barList"
  89. ></BarChart>
  90. <LineChart
  91. v-if="lossList"
  92. id="reporLoss"
  93. :reportFlag="true"
  94. :dataList="lossList"
  95. ></LineChart>
  96. <LineChart
  97. v-if="accuracyList"
  98. id="reporAccuracy"
  99. :reportFlag="true"
  100. :dataList="accuracyList"
  101. ></LineChart>
  102. </div>
  103. <div class="resultContent">
  104. 该模型训练和测试的准确率分别为<text style="color: #dc143c"
  105. >74.2%和73.3%</text
  106. >;误差率分别为<text style="color: #dc143c">2%和1%</text
  107. >;该模型训练所倚重的测点比重分别为:<text style="color: #dc143c"
  108. >偏航位置7.2%、发电机转速4.4%、有功功率3.4%、U1项绕组电流2.9%、齿轮箱轴2温度2.1%</text
  109. >。模型训练过程所有测点倚重占比如下表所示:
  110. </div>
  111. <div class="resultTable">
  112. <el-table
  113. empty-text="暂无数据"
  114. :data="proportionList"
  115. :header-cell-style="{
  116. background: 'rgb(153,204,255)',
  117. color: '#000',
  118. 'font-size': '20px',
  119. }"
  120. :cell-style="{
  121. 'font-size': '20px',
  122. color: '#696969',
  123. }"
  124. border
  125. stripe
  126. style="width: 100%; margin: 10px 0"
  127. >
  128. <el-table-column
  129. prop="name"
  130. label="故障名称"
  131. align="center"
  132. ></el-table-column>
  133. <el-table-column
  134. prop="percent"
  135. label="发生概率"
  136. align="center"
  137. ></el-table-column>
  138. </el-table>
  139. </div>
  140. </div>
  141. </div>
  142. </div>
  143. </el-dialog>
  144. </template>
  145. <script>
  146. import Get_PDF from "@tools/htmlToPdf";
  147. import LineChart from "./lineChart.vue";
  148. import BarChart from "./barChart.vue";
  149. export default {
  150. components: {
  151. LineChart,
  152. BarChart,
  153. },
  154. created() {
  155. let dataList = JSON.parse(
  156. '{"ducumentName":"NNS-1637028563000","loss":[1.0882383584976196,1.067789912223816,1.0520573854446411,1.0380222797393799,1.0230460166931152,1.0070627927780151,0.9899255037307739,0.9736341238021851,0.9547672271728516,0.9341660737991333,0.9082227945327759,0.8833365440368652,0.8581799268722534,0.8310791254043579,0.8011142611503601,0.7700659036636353,0.7383494973182678,0.7076452970504761,0.6731187105178833,0.6390867829322815],"accuracy":[0.3047619163990021,0.37142857909202576,0.3619047701358795,0.3619047701358795,0.380952388048172,0.5809524059295654,0.6571428775787354,0.6571428775787354,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6761904954910278,0.6952381134033203,0.7333333492279053,0.7428571581840515],"val_loss":[1.0914311408996582,1.0727100372314453,1.0579898357391357,1.0469794273376465,1.0305122137069702,1.012723684310913,0.9997329115867615,0.9839586615562439,0.9610583782196045,0.9339884519577026,0.9096081256866455,0.8876619338989258,0.862886905670166,0.8299474120140076,0.793283998966217,0.7597811222076416,0.7229973673820496,0.6826366782188416,0.6449647545814514,0.6126752495765686],"val_accuracy":[0.2666666805744171,0.2666666805744171,0.2666666805744171,0.2666666805744171,0.4000000059604645,0.644444465637207,0.644444465637207,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.6666666865348816,0.7333333492279053,0.7555555701255798,0.7333333492279053],"bar":[{"name":"邮箱温度","value":0.3},{"name":"风速","value":0.25},{"name":"变桨","value":0.25},{"name":"有高","value":0.2}]}'
  157. );
  158. this.lossList.loss = dataList.loss;
  159. this.lossList.val_loss = dataList.val_loss;
  160. this.accuracyList.accuracy = dataList.accuracy;
  161. this.accuracyList.val_accuracy = dataList.val_accuracy;
  162. this.barList = dataList.bar;
  163. },
  164. data() {
  165. return {
  166. barList: [],
  167. lossList: {},
  168. accuracyList: {},
  169. faultList: [
  170. {
  171. name: "齿轮箱故障",
  172. percent: "80%",
  173. },
  174. {
  175. name: "变频器故障",
  176. percent: "17%",
  177. },
  178. {
  179. name: "变桨系统故障",
  180. percent: "3%",
  181. },
  182. ],
  183. proportionList: [
  184. {
  185. name: "偏航位置",
  186. percent: "7.2%",
  187. },
  188. {
  189. name: "发电机转速",
  190. percent: "4.4%",
  191. },
  192. {
  193. name: "有功功率",
  194. percent: "3.4%",
  195. },
  196. {
  197. name: "U1项绕组电流",
  198. percent: "2.9%",
  199. },
  200. {
  201. name: "齿轮箱轴2温度",
  202. percent: "2.1%",
  203. },
  204. {
  205. name: "电网无功功率",
  206. percent: "1.9%",
  207. },
  208. ],
  209. };
  210. },
  211. methods: {
  212. // 导出PDF
  213. exportPDF(name) {
  214. this.BASE.showMsg({
  215. type: "success",
  216. msg: "正在导出...请稍后...",
  217. });
  218. Get_PDF.downloadPDF(document.querySelector(".pdfDom"), "故障检测报告");
  219. },
  220. },
  221. };
  222. </script>
  223. <style lang="less" scoped>
  224. .cDialog {
  225. position: relative;
  226. .pdfDom {
  227. padding: 30px 50px;
  228. }
  229. .title {
  230. text-align: center;
  231. font-size: 32px;
  232. font-weight: 700;
  233. }
  234. .info {
  235. display: flex;
  236. flex-direction: column;
  237. width: 100%;
  238. .infoContent {
  239. width: 100%;
  240. display: flex;
  241. flex-direction: row;
  242. align-items: center;
  243. justify-content: center;
  244. margin-bottom: 20px;
  245. font-size: 22px;
  246. .contents {
  247. display: flex;
  248. flex-direction: row;
  249. align-items: center;
  250. width: 33%;
  251. .contentsTitle {
  252. font-weight: bold;
  253. }
  254. }
  255. }
  256. .result {
  257. font-size: 22px;
  258. .resultTable {
  259. display: flex;
  260. width: 40%;
  261. margin-left: 30%;
  262. }
  263. .charts {
  264. display: flex;
  265. flex-direction: row;
  266. align-items: center;
  267. }
  268. }
  269. }
  270. }
  271. </style>