ReportBreach.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <template>
  2. <div class="report-breach">
  3. <el-button
  4. type="primary"
  5. icon="el-icon-download"
  6. style="margin: 0 0 10px"
  7. :loading="isDownload"
  8. @click="exportData"
  9. >导出数据</el-button
  10. >
  11. <el-table ref="TableList" :data="dataList">
  12. <el-table-column type="index" label="排序"></el-table-column>
  13. <el-table-column prop="examName" label="批次名称(ID)"></el-table-column>
  14. <el-table-column
  15. prop="examActivityCode"
  16. label="场次代码"
  17. ></el-table-column>
  18. <el-table-column prop="examroom" label="考场名称(代码)">
  19. <span slot-scope="scope"
  20. >{{ scope.row.roomName }}({{ scope.row.roomCode }})</span
  21. >
  22. </el-table-column>
  23. <el-table-column prop="identity" label="证件号"></el-table-column>
  24. <el-table-column prop="name" label="姓名"></el-table-column>
  25. <el-table-column prop="courseCode" label="科目名称(代码)">
  26. <span slot-scope="scope"
  27. >{{ scope.row.courseName }}({{ scope.row.courseCode }})</span
  28. ></el-table-column
  29. >
  30. <el-table-column prop="breachStatus" label="违纪/正常"> </el-table-column>
  31. <el-table-column label="操作">
  32. <template slot-scope="scope">
  33. <el-button
  34. class="btn-table-icon"
  35. type="primary"
  36. icon="icon icon-view"
  37. @click="toDetail(scope.row)"
  38. >详情</el-button
  39. >
  40. </template>
  41. </el-table-column>
  42. </el-table>
  43. <div class="part-page">
  44. <el-pagination
  45. background
  46. layout="prev, pager, next,total,sizes,jumper"
  47. :current-page="current"
  48. :total="total"
  49. :page-size.sync="size"
  50. @size-change="toPage(1)"
  51. @current-change="toPage"
  52. >
  53. </el-pagination>
  54. </div>
  55. <breach-detail-dialog
  56. :detail-id="detailId"
  57. ref="BreachDetailDialog"
  58. ></breach-detail-dialog>
  59. </div>
  60. </template>
  61. <script>
  62. import { reportBreachData, exportReportBreachData } from "@/api/invigilation";
  63. import BreachDetailDialog from "./BreachDetailDialog";
  64. import { downloadBlob } from "@/utils/utils";
  65. export default {
  66. name: "report-breach",
  67. components: { BreachDetailDialog },
  68. props: {
  69. filter: {
  70. type: Object,
  71. default() {
  72. return {};
  73. },
  74. },
  75. },
  76. data() {
  77. return {
  78. current: 1,
  79. total: 0,
  80. size: 10,
  81. dataList: [],
  82. detailId: "",
  83. isDownload: false,
  84. };
  85. },
  86. mounted() {
  87. this.getData();
  88. },
  89. methods: {
  90. async getList() {
  91. const datas = {
  92. ...this.filter,
  93. pageNumber: this.current,
  94. pageSize: this.size,
  95. };
  96. const res = await reportBreachData(datas);
  97. this.dataList = res.data.data.records;
  98. this.total = res.data.data.total;
  99. },
  100. toPage(page) {
  101. this.current = page;
  102. this.getList();
  103. },
  104. getData() {
  105. this.toPage(1);
  106. },
  107. toDetail(row) {
  108. this.detailId = row.examStudentId;
  109. this.$refs.BreachDetailDialog.open();
  110. },
  111. async exportData() {
  112. this.isDownload = true;
  113. const res = await downloadBlob(() => {
  114. return exportReportBreachData({
  115. ...this.filter,
  116. });
  117. }).catch(() => {});
  118. this.isDownload = false;
  119. if (res) {
  120. this.$message.success("导出成功!");
  121. } else {
  122. this.$message.error("导出失败,请重新尝试!");
  123. }
  124. },
  125. },
  126. };
  127. </script>