ExamStudentImport.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <template>
  2. <div>
  3. <!-- 下载链接 -->
  4. <el-form ref="form" :model="form" :rules="rules" inline>
  5. <el-form-item label="批次名称" prop="examId">
  6. <ExamSelect v-model="form.examId" />
  7. </el-form-item>
  8. <el-button @click="searchForm">查询</el-button>
  9. <el-button @click="importFile">导入</el-button>
  10. <!-- <el-button>导入</el-button> -->
  11. <a :href="downloadUrl" download class="mx-2">下载模板</a>
  12. </el-form>
  13. <el-table :data="tableData" stripe style="width: 100%;">
  14. <el-table-column type="selection" width="42" />
  15. <el-table-column width="100" label="ID">
  16. <span slot-scope="scope">{{ scope.row.id }}</span>
  17. </el-table-column>
  18. <el-table-column width="200" label="批次名称">
  19. <span slot-scope="scope">{{ scope.row.entityName }}</span>
  20. </el-table-column>
  21. <el-table-column label="上传文件名">
  22. <span slot-scope="scope">{{ scope.row.importFileName }}</span>
  23. </el-table-column>
  24. <el-table-column width="120" label="状态">
  25. <span slot-scope="scope">{{ scope.row.status }}</span>
  26. </el-table-column>
  27. <el-table-column width="100" label="异常">
  28. <span slot-scope="scope">{{ scope.row.summary }}</span>
  29. </el-table-column>
  30. <el-table-column width="100" label="上传时间">
  31. <span slot-scope="scope">{{
  32. scope.row.createTime | datetimeFilter
  33. }}</span>
  34. </el-table-column>
  35. <el-table-column :context="_self" label="操作" width="210">
  36. <div slot-scope="scope">
  37. <el-button
  38. size="mini"
  39. type="primary"
  40. plain
  41. v-if="scope.row.status === 'FINISH'"
  42. @click="
  43. download({
  44. id: scope.row.id,
  45. type: scope.row.hasResultFile === '1' ? 'RESULT' : 'IMPORTFILE',
  46. })
  47. "
  48. >
  49. 下载文件
  50. </el-button>
  51. <el-button
  52. size="mini"
  53. type="primary"
  54. plain
  55. v-if="scope.row.hasReportFile === '1'"
  56. @click="download({ id: scope.row.id, type: 'REPORT' })"
  57. >
  58. 导出报告
  59. </el-button>
  60. </div>
  61. </el-table-column>
  62. </el-table>
  63. <div class="page float-right">
  64. <el-pagination
  65. @current-change="handleCurrentChange"
  66. :current-page="currentPage"
  67. :page-size="pageSize"
  68. :page-sizes="[10, 20, 50, 100, 200, 300]"
  69. @size-change="handleSizeChange"
  70. layout="total, sizes, prev, pager, next, jumper"
  71. :total="total"
  72. />
  73. </div>
  74. <ExamStudentImportDialog
  75. ref="theDialog"
  76. :examId="form.examId"
  77. @reload="searchForm"
  78. />
  79. </div>
  80. </template>
  81. <script>
  82. import { searchTasks } from "@/api/examwork-task";
  83. import { downloadFileURL } from "@/utils/utils";
  84. import ExamStudentImportDialog from "./ExamStudentImportDialog";
  85. import { EXAM_STUDENT_IMPORT_TEMPLATE_DOWNLOAD_URL } from "@/constant/constants";
  86. import { downloadFile } from "@/api/system-info";
  87. export default {
  88. name: "ExamStudentImport",
  89. data() {
  90. return {
  91. form: {
  92. examId: "",
  93. },
  94. rules: {
  95. examId: [{ required: true, message: "批次必选" }],
  96. },
  97. tableData: [],
  98. currentPage: 1,
  99. pageSize: 10,
  100. total: 10,
  101. downloadUrl: EXAM_STUDENT_IMPORT_TEMPLATE_DOWNLOAD_URL,
  102. };
  103. },
  104. components: { ExamStudentImportDialog },
  105. methods: {
  106. async searchForm() {
  107. // try {
  108. // const valid = await this.$refs.form.validate();
  109. // if (!valid) return;
  110. // } catch (error) {
  111. // console.log(error);
  112. // return;
  113. // }
  114. const res = await searchTasks({
  115. type: "IMPORT_EXAM_STUDENT",
  116. entityId: this.form.examId,
  117. pageNumber: this.currentPage,
  118. pageSize: this.pageSize,
  119. });
  120. this.tableData = res.data.data.records;
  121. this.total = res.data.data.total;
  122. },
  123. handleCurrentChange(val) {
  124. this.currentPage = val;
  125. this.searchForm();
  126. },
  127. handleSizeChange(val) {
  128. this.pageSize = val;
  129. this.currentPage = 1;
  130. this.searchForm();
  131. },
  132. async importFile() {
  133. try {
  134. const valid = await this.$refs.form.validate();
  135. if (!valid) return;
  136. } catch (error) {
  137. console.log(error);
  138. return;
  139. }
  140. this.$refs.theDialog.openDialog();
  141. },
  142. async download({ id, type }) {
  143. const res = await downloadFile({ id, type });
  144. const url = res.data.data.url;
  145. downloadFileURL(url);
  146. },
  147. },
  148. };
  149. </script>
  150. <style></style>