TaskInfo.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <div>
  3. <el-form class="form-info mb-4" label-width="120px">
  4. <el-row>
  5. <el-col :span="12">
  6. <el-form-item label="课程(代码):">
  7. <span>{{ examTask.courseName }}({{ examTask.courseCode }})</span>
  8. </el-form-item>
  9. </el-col>
  10. <el-col :span="12">
  11. <el-form-item label="机构:">
  12. <span>{{ examTask.teachingRoomName | defaultFieldFilter }}</span>
  13. </el-form-item>
  14. </el-col>
  15. </el-row>
  16. <el-row>
  17. <el-col :span="12">
  18. <el-form-item label="使用学期:">
  19. <span>{{ examTask.semesterName || "--" }}</span>
  20. </el-form-item>
  21. </el-col>
  22. <el-col :span="12">
  23. <el-form-item label="考试:">
  24. <span>{{ examTask.examName || "--" }}</span>
  25. </el-form-item>
  26. </el-col>
  27. </el-row>
  28. <el-row>
  29. <el-col :span="12">
  30. <el-form-item label="拟卷教师:">
  31. <span>{{ examTask.teacherName | defaultFieldFilter }}</span>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="12">
  35. <el-form-item label="命题老师:">
  36. <span>{{ examTask.propositionName || examTask.userName }}</span>
  37. </el-form-item>
  38. </el-col>
  39. </el-row>
  40. <el-row>
  41. <el-col :span="12">
  42. <el-form-item label="考试时间:">
  43. <span v-if="examRoomInfo.examDate && examRoomInfo.examTime">
  44. {{ examRoomInfo.examDate }} <i class="mr-1"></i>
  45. {{ examRoomInfo.examTime }}
  46. </span>
  47. <span v-else>--</span>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item label="审核状态:">
  52. <span>{{ examTask.auditStatus | auditStatusFilter }}</span>
  53. </el-form-item>
  54. </el-col>
  55. </el-row>
  56. </el-form>
  57. <div v-if="examRoomClassList.length && !IS_MODEL2" class="task-exam-room">
  58. <el-table
  59. :data="examRoomClassList"
  60. border
  61. style="width: 100%"
  62. max-height="300px"
  63. >
  64. <el-table-column
  65. v-if="hasClassInfo"
  66. prop="clazzNames"
  67. label="使用班级"
  68. min-width="400"
  69. ></el-table-column>
  70. <el-table-column
  71. prop="studentCount"
  72. label="人数"
  73. min-width="100"
  74. ></el-table-column>
  75. <el-table-column
  76. prop="printCount"
  77. label="总印份数"
  78. min-width="100"
  79. ></el-table-column>
  80. </el-table>
  81. </div>
  82. <div class="part-box part-box-pad task-exam-room" v-if="IS_MODEL2">
  83. <p>
  84. 正式考生{{ examRoomClassInfo.studentCount }}个,总印份数{{
  85. examRoomClassInfo.printCount
  86. }}份(正式考生{{ examRoomClassInfo.studentCount }}份,备用卷{{
  87. examRoomClassInfo.backupCount
  88. }}份)
  89. </p>
  90. <p>考试对象:{{ examRoomClassInfo.clazzNames }}</p>
  91. </div>
  92. </div>
  93. </template>
  94. <script>
  95. import { mapState } from "vuex";
  96. import { taskApplyExamObject } from "../../api";
  97. import { parseTimeRangeDateAndTime } from "@/plugins/utils";
  98. export default {
  99. name: "task-info",
  100. data() {
  101. return {
  102. hasClassInfo: false,
  103. examRoomClassList: [],
  104. examRoomClassInfo: {},
  105. examRoomInfo: {},
  106. };
  107. },
  108. computed: {
  109. ...mapState("exam", ["editType", "examTask"]),
  110. IS_MODEL2() {
  111. return this.examTask.examModel === "MODEL2";
  112. },
  113. },
  114. mounted() {
  115. this.getExamRoomInfo();
  116. },
  117. methods: {
  118. async getExamRoomInfo() {
  119. const data = await taskApplyExamObject({
  120. paperNumber: this.examTask.paperNumber,
  121. examId: this.examTask.examId,
  122. });
  123. if (this.IS_MODEL2) {
  124. const { printCount, clazzNames } = data.examRoomClassList[0];
  125. const nums = printCount.split("+").map((item) => item * 1);
  126. this.examRoomClassInfo = {
  127. backupCount: nums[1],
  128. studentCount: nums[0],
  129. printCount: nums[0] + nums[1],
  130. clazzNames,
  131. };
  132. } else {
  133. this.examRoomClassList = data.examRoomClassList || [];
  134. this.hasClassInfo = this.examRoomClassList.some(
  135. (item) => item.clazzNames
  136. );
  137. }
  138. const { date, time } = parseTimeRangeDateAndTime(
  139. data.examStartTime,
  140. data.examEndTime
  141. );
  142. this.examRoomInfo = {
  143. examDate: date,
  144. examTime: time,
  145. };
  146. },
  147. },
  148. };
  149. </script>