WorkOverview.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <template>
  2. <div class="overview">
  3. <div class="overview-head" v-if="overviewInfo.workName">
  4. <div class="overview-bg-person"></div>
  5. <h1 class="overview-title">{{ overviewInfo.workName }}</h1>
  6. <ul class="overview-infos">
  7. <li>
  8. <span><i class="icon ivu-icon-student"></i></span>
  9. <span>考生总数:</span>
  10. <span>{{ overviewInfo.stuTotalCount }}</span>
  11. </li>
  12. <li>
  13. <span><i class="icon ivu-icon-area"></i></span>
  14. <span>考区数:</span>
  15. <span>{{ overviewInfo.questionCount }}</span>
  16. </li>
  17. </ul>
  18. <div class="overview-actions">
  19. <Button
  20. icon="md-download"
  21. shape="circle"
  22. @click="download(exportGradeScoreUrl)"
  23. >导出档位成绩</Button
  24. >
  25. <Button
  26. icon="md-download"
  27. shape="circle"
  28. @click="download(exportScoreUrl)"
  29. >导出分数成绩</Button
  30. >
  31. </div>
  32. </div>
  33. <div class="overview-body">
  34. <div
  35. class="overview-subject"
  36. v-for="(subject, index) in overviewInfo.subjectOverviews"
  37. :key="index"
  38. >
  39. <div class="subject-content">
  40. <h2 class="subject-name">{{ subject.subjectName }}</h2>
  41. <ul class="subject-infos">
  42. <li>
  43. <p>已上传</p>
  44. <p>{{ subject.uploadedCount }}</p>
  45. </li>
  46. <li>
  47. <p>未采集</p>
  48. <p>{{ subject.leftCount }}</p>
  49. </li>
  50. <li>
  51. <p>进度</p>
  52. <p>{{ subject.progress }}</p>
  53. </li>
  54. </ul>
  55. <div class="subject-actions">
  56. <p>当前阶段</p>
  57. <p>{{ subject.markStageName }}</p>
  58. <div class="subject-actions-detail">
  59. <Button
  60. icon="upload icon"
  61. shape="circle"
  62. @click="toUploadManual(subject)"
  63. >导入缺考名单</Button
  64. >
  65. <br />
  66. <Button
  67. icon="md-download"
  68. shape="circle"
  69. @click="download(subject.exportAbsentDataUrl)"
  70. >导出缺考名单</Button
  71. >
  72. </div>
  73. </div>
  74. <Button
  75. type="primary"
  76. shape="circle"
  77. @click="toCommit(subject)"
  78. style="width: 120px;"
  79. >评卷管理</Button
  80. >
  81. </div>
  82. </div>
  83. </div>
  84. <!-- import student -->
  85. <import-file
  86. title="导入缺考名单"
  87. :upload-url="uploadUrl"
  88. :upload-data="uploadData"
  89. :download-url="downloadManualTemplateUrl"
  90. :download-filename="downloadManualTemplateFilename"
  91. :headers="headers"
  92. :format="['xls', 'xlsx']"
  93. @upload-success="uploadSuccess"
  94. ref="ImportManual"
  95. >
  96. </import-file>
  97. </div>
  98. </template>
  99. <script>
  100. import { workOverviewDetail } from "@/api";
  101. import { SUBJECT_STAGE } from "@/constants/enumerate";
  102. import ImportFile from "@/components/common/ImportFile";
  103. export default {
  104. name: "overview",
  105. components: { ImportFile },
  106. data() {
  107. return {
  108. workId: this.$route.params.workId,
  109. SUBJECT_STAGE,
  110. exportGradeScoreUrl: "",
  111. exportScoreUrl: "",
  112. overviewInfo: {
  113. subjectOverviews: []
  114. },
  115. // upload
  116. headers: {
  117. Authorization: this.$ls.get("user", { token: "" }).token,
  118. workId: this.$route.params.workId,
  119. userId: this.$ls.get("user", { id: "" }).id
  120. },
  121. uploadData: {
  122. workId: this.$route.params.workId,
  123. subject: ""
  124. },
  125. uploadUrl: "/api/import/students/missingStudent",
  126. downloadManualTemplateUrl: "/templates/导入缺考名单-模板.xlsx",
  127. downloadManualTemplateFilename: "导入缺考名单-模板.xlsx"
  128. };
  129. },
  130. mounted() {
  131. this.getDetail();
  132. this.exportGradeScoreUrl = `${this.GLOBAL.domain}/api/export/score/exportLevelResult?workId=${this.workId}`;
  133. this.exportScoreUrl = `${this.GLOBAL.domain}/api/export/score/exportScoreResult?workId=${this.workId}`;
  134. },
  135. methods: {
  136. async getDetail() {
  137. const data = await workOverviewDetail(this.workId);
  138. data.subjectOverviews.map(item => {
  139. item.markStageName = SUBJECT_STAGE[item.markStage];
  140. item.exportAbsentDataUrl = `${this.GLOBAL.domain}/api/export/users/${this.workId}/${item.subject}/export`;
  141. item.progress =
  142. item.uploadedCount + item.leftCount
  143. ? (
  144. (100 * item.uploadedCount) /
  145. (item.uploadedCount + item.leftCount)
  146. ).toFixed(1) + "%"
  147. : "0.0%";
  148. });
  149. this.overviewInfo = data;
  150. },
  151. download(url) {
  152. window.open(this.urlAddAuthor(url));
  153. },
  154. toUploadManual(subject) {
  155. this.uploadData.subject = subject.subject;
  156. this.$refs.ImportManual.open();
  157. },
  158. uploadSuccess() {
  159. this.$Message.success("导入成功!");
  160. },
  161. toCommit(subject) {
  162. const routerName = subject.markStage === "SCORE" ? "Mark" : "Grading";
  163. this.$router.push({
  164. name: routerName,
  165. params: { workId: this.workId, subjectId: subject.subjectId }
  166. });
  167. }
  168. }
  169. };
  170. </script>