PaperImportDialog.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <el-dialog
  3. ref="dialog"
  4. title="导入试卷"
  5. width="550px"
  6. :visible.sync="visible"
  7. @close="closeDialog"
  8. >
  9. <el-form
  10. :model="form"
  11. ref="form"
  12. :rules="rules"
  13. label-position="right"
  14. label-width="120px"
  15. >
  16. <el-row>
  17. <el-form-item label="选择文件">
  18. <input @change="selectFile" type="file" /> *系统支持数据包
  19. </el-form-item>
  20. </el-row>
  21. <el-row>
  22. <el-form-item label="试卷包解析内容">
  23. <el-checkbox v-model="form.processPaper">试卷</el-checkbox>
  24. <el-checkbox v-model="form.processAnswer">答案</el-checkbox>
  25. </el-form-item>
  26. </el-row>
  27. <el-row>
  28. <el-form-item label="音频播放次数">
  29. <el-input-number v-model.trim="form.audioPlayCount"></el-input-number>
  30. </el-form-item>
  31. </el-row>
  32. <el-row>
  33. <el-form-item label="客观题小题乱序" prop="objectiveShuffle">
  34. <el-radio-group class="pull_right_sm" v-model="form.objectiveShuffle">
  35. <el-radio :label="true">启用</el-radio>
  36. <el-radio :label="false">禁用</el-radio>
  37. </el-radio-group>
  38. </el-form-item>
  39. </el-row>
  40. <el-row>
  41. <el-form-item label="客观题选项乱序" prop="optionShuffle">
  42. <el-radio-group class="pull_right_sm" v-model="form.optionShuffle">
  43. <el-radio :label="true">启用</el-radio>
  44. <el-radio :label="false">禁用</el-radio>
  45. </el-radio-group>
  46. </el-form-item>
  47. </el-row>
  48. <el-row class="d-flex justify-content-center">
  49. <el-button type="primary" @click="submitForm" :loading="loading"
  50. >保 存</el-button
  51. >
  52. <el-button @click="closeDialog">取 消</el-button>
  53. </el-row>
  54. </el-form>
  55. </el-dialog>
  56. </template>
  57. <script>
  58. import MD5 from "js-md5";
  59. import { importPaper } from "@/api/examwork-task";
  60. export default {
  61. name: "PaperImportDialog",
  62. props: {
  63. examId: String,
  64. },
  65. data() {
  66. return {
  67. visible: false,
  68. form: {},
  69. rules: {},
  70. loading: false,
  71. };
  72. },
  73. watch: {
  74. examId: {
  75. immediate: true,
  76. handler() {
  77. this.form = {
  78. processPaper: false,
  79. processAnswer: false,
  80. objectiveShuffle: false,
  81. optionShuffle: false,
  82. audioPlayCount: 0,
  83. file: "",
  84. fileName: "",
  85. };
  86. },
  87. },
  88. },
  89. methods: {
  90. openDialog() {
  91. this.visible = true;
  92. },
  93. closeDialog() {
  94. this.visible = false;
  95. },
  96. selectFile(e) {
  97. this.form.file = e.target.files[0];
  98. this.form.fileName = this.form.file?.name;
  99. },
  100. async submitForm() {
  101. async function blobToArray(blob) {
  102. return new Promise((resolve) => {
  103. var reader = new FileReader();
  104. reader.addEventListener("loadend", function () {
  105. // reader.result contains the contents of blob as a typed array
  106. resolve(reader.result);
  107. });
  108. reader.readAsArrayBuffer(blob);
  109. });
  110. }
  111. const ab = await blobToArray(this.form.file);
  112. const md5 = MD5(ab);
  113. let data = this.form;
  114. try {
  115. this.loading = true;
  116. await importPaper({ ...data, examId: this.examId, md5 });
  117. this.$emit("reload");
  118. this.$notify({ title: "导入任务已成功启动", type: "success" });
  119. this.closeDialog();
  120. } finally {
  121. this.loading = false;
  122. }
  123. },
  124. },
  125. };
  126. </script>
  127. <style></style>