UploadStructure.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <template>
  2. <div class="upload-structure">
  3. <div class="part-box part-box-filter part-box-flex">
  4. <el-form ref="FilterForm" label-position="left" inline>
  5. <template v-if="checkPrivilege('condition', 'condition')">
  6. <el-form-item label="学期:">
  7. <semester-select v-model="filter.semesterId"></semester-select>
  8. </el-form-item>
  9. <el-form-item label="考试:">
  10. <exam-select
  11. v-model="filter.examId"
  12. :semester-id="filter.semesterId"
  13. ></exam-select>
  14. </el-form-item>
  15. </template>
  16. <el-form-item label-width="0px">
  17. <el-button
  18. v-if="checkPrivilege('button', 'select')"
  19. type="primary"
  20. @click="toPage(1)"
  21. >查询</el-button
  22. >
  23. </el-form-item>
  24. </el-form>
  25. </div>
  26. <div class="part-box part-box-pad">
  27. <el-table ref="TableList" :data="dataList">
  28. <el-table-column
  29. prop="thirdRelateId"
  30. label="云阅卷考试ID"
  31. min-width="160"
  32. ></el-table-column>
  33. <el-table-column
  34. prop="thirdRelateName"
  35. label="云阅卷考试名称"
  36. min-width="160"
  37. ></el-table-column>
  38. <el-table-column prop="courseName" label="课程(代码)" min-width="200">
  39. <span slot-scope="scope">
  40. {{ scope.row.courseName }}({{ scope.row.courseCode }})
  41. </span>
  42. </el-table-column>
  43. <el-table-column
  44. prop="paperNumber"
  45. label="试卷编号"
  46. min-width="160"
  47. ></el-table-column>
  48. <el-table-column
  49. prop="paperType"
  50. label="试卷类型"
  51. width="100"
  52. ></el-table-column>
  53. <el-table-column prop="statusStr" label="状态" width="100">
  54. <span
  55. slot-scope="scope"
  56. :class="{ 'color-danger': scope.row.status === 'INIT' }"
  57. >{{ scope.row.statusStr }}</span
  58. >
  59. </el-table-column>
  60. <el-table-column
  61. class-name="action-column"
  62. label="操作"
  63. width="220px"
  64. fixed="right"
  65. >
  66. <template slot-scope="scope">
  67. <el-button
  68. class="btn-primary"
  69. type="text"
  70. :disabled="scope.row.taskStatus === 'RUNNING'"
  71. @click="toSetParams(scope.row)"
  72. >评卷参数设置</el-button
  73. >
  74. <el-button
  75. class="btn-primary"
  76. type="text"
  77. :disabled="
  78. !scope.row.paperInfoJson || scope.row.taskStatus === 'RUNNING'
  79. "
  80. @click="toSetAnswer(scope.row)"
  81. >设置客观题标答</el-button
  82. >
  83. <el-button
  84. class="btn-primary"
  85. type="text"
  86. :disabled="
  87. !scope.row.paperInfoJson || scope.row.taskStatus === 'RUNNING'
  88. "
  89. @click="toBindMarkLeader(scope.row)"
  90. >绑定科组长</el-button
  91. >
  92. <el-button
  93. class="btn-primary"
  94. type="text"
  95. :disabled="
  96. !scope.row.paperInfoJson || scope.row.taskStatus === 'RUNNING'
  97. "
  98. @click="toBindMarker(scope.row)"
  99. >绑定评卷员</el-button
  100. >
  101. <el-button
  102. v-if="checkPrivilege('link', 'transfer')"
  103. class="btn-primary"
  104. type="text"
  105. @click="toTransfer(scope.row)"
  106. >{{ scope.row.transferId ? "打回" : "转办" }}</el-button
  107. >
  108. <el-button
  109. v-if="checkPrivilege('link', 'Upload')"
  110. class="btn-primary"
  111. type="text"
  112. :disabled="scope.row.taskStatus === 'RUNNING'"
  113. @click="toUpload(scope.row)"
  114. >上传标答文件</el-button
  115. >
  116. <el-button
  117. v-if="checkPrivilege('link', 'Preview')"
  118. class="btn-primary"
  119. type="text"
  120. :disabled="!scope.row.paperAnswer"
  121. @click="toViewAnswer(scope.row, scope.row.paperType)"
  122. >查看标答文件</el-button
  123. >
  124. </template>
  125. </el-table-column>
  126. </el-table>
  127. <div class="part-page">
  128. <el-pagination
  129. background
  130. layout="total, sizes, prev, pager, next, jumper"
  131. :pager-count="5"
  132. :current-page="current"
  133. :total="total"
  134. :page-size="size"
  135. @current-change="toPage"
  136. @size-change="pageSizeChange"
  137. >
  138. </el-pagination>
  139. </div>
  140. </div>
  141. <UploadPaperAnswerDialog
  142. v-if="checkPrivilege('link', 'Upload')"
  143. ref="UploadPaperAnswerDialog"
  144. :instance="curTask"
  145. @modified="delayUpdateList"
  146. />
  147. <ModifyMarkParams
  148. ref="ModifyMarkParams"
  149. :instance="curTask"
  150. @modified="delayUpdateList"
  151. />
  152. <ModifyPaperMarker
  153. ref="ModifyPaperMarker"
  154. :instance="curTask"
  155. @close="delayUpdateList"
  156. />
  157. <ModifyObjectiveAnswer
  158. ref="ModifyObjectiveAnswer"
  159. :instance="curTask"
  160. @modified="delayUpdateList"
  161. />
  162. <SelectTypeUser
  163. ref="SelectTypeUser"
  164. special-privilege="SUBJECT_HEADER"
  165. :user-ids="curMarkLeaders"
  166. :user-limit-count="0"
  167. @confirm="headerBind"
  168. />
  169. <SelectTransferUser
  170. v-if="checkPrivilege('link', 'transfer')"
  171. ref="SelectTransferUser"
  172. :task="curTask"
  173. @modified="getList"
  174. />
  175. </div>
  176. </template>
  177. <script>
  178. import { examStructureListPage, examBindMarkLeader } from "../api";
  179. import UploadPaperAnswerDialog from "../components/UploadPaperAnswerDialog";
  180. import ModifyMarkParams from "../components/markParam/ModifyMarkParams";
  181. import ModifyObjectiveAnswer from "../components/markParam/ModifyObjectiveAnswer.vue";
  182. import ModifyPaperMarker from "../components/markParam/ModifyPaperMarker.vue";
  183. import SelectTypeUser from "../components/SelectTypeUser.vue";
  184. import SelectTransferUser from "../components/SelectTransferUser.vue";
  185. export default {
  186. name: "upload-structure",
  187. components: {
  188. UploadPaperAnswerDialog,
  189. ModifyMarkParams,
  190. ModifyObjectiveAnswer,
  191. SelectTypeUser,
  192. ModifyPaperMarker,
  193. SelectTransferUser
  194. },
  195. data() {
  196. return {
  197. filter: {
  198. semesterId: "",
  199. examId: ""
  200. },
  201. current: 1,
  202. size: this.GLOBAL.pageSize,
  203. total: 0,
  204. dataList: [],
  205. curTask: {},
  206. curMarkLeaders: []
  207. };
  208. },
  209. mounted() {
  210. this.toPage(1);
  211. },
  212. methods: {
  213. delayUpdateList() {
  214. setTimeout(() => {
  215. this.getList();
  216. }, 1000);
  217. },
  218. async getList() {
  219. if (!this.checkPrivilege("list", "list")) return;
  220. const datas = {
  221. ...this.filter,
  222. pageNumber: this.current,
  223. pageSize: this.size
  224. };
  225. const data = await examStructureListPage(datas);
  226. this.dataList = data.records;
  227. this.total = data.total;
  228. },
  229. toPage(page) {
  230. this.current = page;
  231. this.getList();
  232. },
  233. toSetParams(row) {
  234. this.curTask = row;
  235. this.$refs.ModifyMarkParams.open();
  236. },
  237. toSetAnswer(row) {
  238. this.curTask = row;
  239. this.$refs.ModifyObjectiveAnswer.open();
  240. },
  241. toUpload(row) {
  242. this.curTask = row;
  243. this.$refs.UploadPaperAnswerDialog.open();
  244. },
  245. toViewAnswer(row, paperType) {
  246. if (!row.paperAnswer) {
  247. this.$message.error("暂时还没有标答可预览!");
  248. return;
  249. }
  250. const paperAnswer = JSON.parse(row.paperAnswer);
  251. const paper = paperAnswer.find(item => item.paperType === paperType);
  252. if (!paper) {
  253. this.$message.error("标答文件不存在!");
  254. return;
  255. }
  256. window.open(paper.answerUrl);
  257. },
  258. toBindMarkLeader(row) {
  259. this.curTask = row;
  260. const markLeaders = row.markLeader ? JSON.parse(row.markLeader) : [];
  261. this.curMarkLeaders = markLeaders.map(item => item.id);
  262. this.$refs.SelectTypeUser.open();
  263. },
  264. toBindMarker(row) {
  265. this.curTask = row;
  266. this.$refs.ModifyPaperMarker.open();
  267. },
  268. async headerBind(users) {
  269. await examBindMarkLeader({
  270. id: this.curTask.id,
  271. markLeader: users.map(item => {
  272. return {
  273. id: item.id,
  274. loginName: item.loginName
  275. };
  276. })
  277. });
  278. this.$message.success("绑定成功!");
  279. this.getList();
  280. },
  281. toTransfer(row) {
  282. this.curTask = row;
  283. this.$refs.SelectTransferUser.open();
  284. }
  285. }
  286. };
  287. </script>