reportTableCustom.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <template>
  2. <div class="reportTable-custom">
  3. <div class="report-query">
  4. <Query :show="['time']" :query-data.sync="queryData" :search="search" />
  5. </div>
  6. <div class="report-table-view">
  7. <Card title="报告预览">
  8. <template #title-extra>
  9. <div style="padding-right: 20px">
  10. <span style="color: #b2b2b2; font-size: 12px"
  11. >支持 pdf,word,excel</span
  12. >
  13. <a-button type="link" size="small" @click="exportFunc"
  14. >导出</a-button
  15. >
  16. <a-button type="link" size="small">打印</a-button>
  17. </div>
  18. </template>
  19. <reportDataTable :data="tableData" :time-range="timeRange" />
  20. </Card>
  21. </div>
  22. </div>
  23. </template>
  24. <script>
  25. import Query from "@/components/common/query.vue";
  26. import Card from "@/components/common/card.vue";
  27. import reportDataTable from "@/components/report/data/tables/reportDataTable.vue";
  28. import * as XLSX from "xlsx";
  29. export default {
  30. components: {
  31. Card,
  32. Query,
  33. reportDataTable,
  34. },
  35. data() {
  36. let timeRange = this.$util.dateUtil.getNearlyMonthRange();
  37. return {
  38. timeRange: "",
  39. queryData: {
  40. timeRange: timeRange,
  41. },
  42. oriTableData: [],
  43. tableData: [
  44. {
  45. building: "主语国际",
  46. tjwd: "事项总计",
  47. undervoltage: 0,
  48. },
  49. {
  50. tjwd: "分项总计",
  51. undervoltage: 0,
  52. overvoltage: 0,
  53. overcurrent: 0,
  54. overload: 0,
  55. overtm: 0,
  56. undertm: 0,
  57. shortcircuit: 0,
  58. breakele: 0,
  59. underline: 0,
  60. },
  61. {
  62. tjwd: "1层",
  63. eventObj: "1F 插座动力",
  64. undervoltage: 0,
  65. overvoltage: 0,
  66. overcurrent: 0,
  67. overload: 0,
  68. overtm: 0,
  69. undertm: 0,
  70. shortcircuit: 0,
  71. breakele: 0,
  72. underline: 0,
  73. },
  74. {
  75. tjwd: "规划院",
  76. eventObj: "7F 一般照明",
  77. undervoltage: 0,
  78. overvoltage: 0,
  79. overcurrent: 0,
  80. overload: 0,
  81. overtm: 0,
  82. undertm: 0,
  83. shortcircuit: 0,
  84. breakele: 0,
  85. underline: 0,
  86. },
  87. {
  88. eventObj: "8F 插座动力",
  89. undervoltage: 0,
  90. overvoltage: 0,
  91. overcurrent: 0,
  92. overload: 0,
  93. overtm: 0,
  94. undertm: 0,
  95. shortcircuit: 0,
  96. breakele: 0,
  97. underline: 0,
  98. },
  99. {
  100. eventObj: "8F 应急照明",
  101. undervoltage: 0,
  102. overvoltage: 0,
  103. overcurrent: 0,
  104. overload: 0,
  105. overtm: 0,
  106. undertm: 0,
  107. shortcircuit: 0,
  108. breakele: 0,
  109. underline: 0,
  110. },
  111. {
  112. eventObj: "8F 一般照明",
  113. undervoltage: 0,
  114. overvoltage: 0,
  115. overcurrent: 0,
  116. overload: 0,
  117. overtm: 0,
  118. undertm: 0,
  119. shortcircuit: 0,
  120. breakele: 0,
  121. underline: 0,
  122. },
  123. {
  124. eventObj: "9F 一般照明",
  125. undervoltage: 0,
  126. overvoltage: 0,
  127. overcurrent: 0,
  128. overload: 0,
  129. overtm: 0,
  130. undertm: 0,
  131. shortcircuit: 0,
  132. breakele: 0,
  133. underline: 0,
  134. },
  135. ],
  136. };
  137. },
  138. mounted() {
  139. this.oriTableData = JSON.parse(JSON.stringify(this.tableData));
  140. this.search();
  141. },
  142. methods: {
  143. exportFunc() {
  144. console.log("打印报表");
  145. const data = [
  146. ["姓名", "年龄", "性别", "毕业院校"],
  147. ["张三", 18, "男", "清华大学"],
  148. ["李四", 22, "女", "北京大学"],
  149. ["王五", 20, "男", "上海交通大学"],
  150. ];
  151. const worksheet = XLSX.utils.aoa_to_sheet(data);
  152. const workbook = XLSX.utils.book_new();
  153. XLSX.utils.book_append_sheet(workbook, worksheet, "表格名字");
  154. XLSX.writeFile(workbook, "能源报警报表.xlsx");
  155. },
  156. getRandom(m, n) {
  157. let val = Math.random() * (m - n) + n;
  158. return Math.ceil(val);
  159. },
  160. search() {
  161. let value =
  162. this.queryData.timeRange.startDate +
  163. " ~ " +
  164. this.queryData.timeRange.endDate;
  165. this.timeRange = value;
  166. this.tableData = JSON.parse(JSON.stringify(this.oriTableData));
  167. for (let i = 0; i < 4; i++) {
  168. let index = this.getRandom(2, 7);
  169. let obj = this.tableData[index];
  170. let i = 0;
  171. let keyIndex = this.getRandom(0, 9);
  172. for (const key in obj) {
  173. let num = this.getRandom(0, 5);
  174. if (key == "eventObj") {
  175. continue;
  176. } else if (keyIndex == i) {
  177. obj[key] = num;
  178. }
  179. i++;
  180. }
  181. }
  182. // 计算总数
  183. let obj = {
  184. tjwd: "分项总计",
  185. undervoltage: 0,
  186. overvoltage: 0,
  187. overcurrent: 0,
  188. overload: 0,
  189. overtm: 0,
  190. undertm: 0,
  191. shortcircuit: 0,
  192. breakele: 0,
  193. underline: 0,
  194. };
  195. for (let i = 2; i < 8; i++) {
  196. obj.undervoltage += this.tableData[i].undervoltage;
  197. obj.overvoltage += this.tableData[i].overvoltage;
  198. obj.overcurrent += this.tableData[i].overcurrent;
  199. obj.overload += this.tableData[i].overload;
  200. obj.overtm += this.tableData[i].overtm;
  201. obj.undertm += this.tableData[i].undertm;
  202. obj.shortcircuit += this.tableData[i].shortcircuit;
  203. obj.breakele += this.tableData[i].breakele;
  204. obj.underline += this.tableData[i].underline;
  205. }
  206. this.tableData[1] = obj;
  207. },
  208. },
  209. };
  210. </script>
  211. <style lang="less" scoped>
  212. .reportTable-custom {
  213. width: 100%;
  214. height: 100%;
  215. .report-query {
  216. background-color: #ffffff;
  217. padding: 12px;
  218. margin-bottom: 12px;
  219. }
  220. .report-table-view {
  221. width: 100%;
  222. height: 690px;
  223. background-color: #ffffff;
  224. }
  225. }
  226. </style>