MarkDetailArbitration.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <template>
  2. <div class="mark-detail-arbitration">
  3. <div class="part-box part-box-filter part-box-flex">
  4. <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
  5. <el-form-item label="评阅题目">
  6. <el-select
  7. v-model="filter.groupNumber"
  8. placeholder="评阅题目"
  9. clearable
  10. >
  11. <el-option
  12. v-for="group in questions"
  13. :key="group.groupNumber"
  14. :value="group.groupNumber"
  15. :label="group.groupQuestions"
  16. ></el-option>
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item label="状态">
  20. <status-select
  21. v-model="filter.type"
  22. type="MARK_ARBITRATE_STATUS"
  23. placeholder="状态"
  24. clearable
  25. >
  26. </status-select>
  27. </el-form-item>
  28. <el-form-item label="班级">
  29. <el-input
  30. v-model.trim="filter.className"
  31. placeholder="班级"
  32. clearable
  33. >
  34. </el-input>
  35. </el-form-item>
  36. <el-form-item label-width="0px">
  37. <el-button type="primary" @click="search">查询</el-button>
  38. </el-form-item>
  39. </el-form>
  40. <div class="part-box-action">
  41. <el-button
  42. type="primary"
  43. :disabled="!multipleSelection.length"
  44. @click="toBatchDone(multipleSelection)"
  45. >
  46. 批量处理
  47. </el-button>
  48. </div>
  49. </div>
  50. <div class="part-box part-box-pad">
  51. <el-table
  52. ref="TableList"
  53. :data="dataList"
  54. @selection-change="handleSelectionChange"
  55. >
  56. <el-table-column
  57. type="selection"
  58. width="55"
  59. align="center"
  60. @selectable="rowSelectable"
  61. ></el-table-column>
  62. <el-table-column prop="studentName" label="姓名" min-width="100">
  63. </el-table-column>
  64. <el-table-column
  65. prop="studentCode"
  66. label="学号"
  67. width="180"
  68. ></el-table-column>
  69. <el-table-column
  70. prop="groupQuestions"
  71. label="评阅题目"
  72. min-width="200"
  73. ></el-table-column>
  74. <el-table-column
  75. prop="statusName"
  76. label="状态"
  77. width="100"
  78. ></el-table-column>
  79. <el-table-column prop="createTime" label="创建时间" width="170">
  80. <span slot-scope="scope">{{
  81. scope.row.createTime | timestampFilter
  82. }}</span>
  83. </el-table-column>
  84. <el-table-column
  85. prop="updateUserName"
  86. label="处理人"
  87. min-width="160"
  88. ></el-table-column>
  89. <el-table-column prop="updateTime" label="处理时间" width="170">
  90. <span slot-scope="scope">{{
  91. scope.row.updateTime | timestampFilter
  92. }}</span>
  93. </el-table-column>
  94. <el-table-column
  95. class-name="action-column"
  96. label="操作"
  97. width="80"
  98. fixed="right"
  99. >
  100. <template slot-scope="scope">
  101. <el-button
  102. class="btn-primary"
  103. :disabled="scope.row.status === 'MARKED'"
  104. type="text"
  105. @click="toDone(scope.row)"
  106. >处理</el-button
  107. >
  108. </template>
  109. </el-table-column>
  110. </el-table>
  111. <div class="part-page">
  112. <el-pagination
  113. background
  114. layout="total, sizes, prev, pager, next, jumper"
  115. :pager-count="5"
  116. :current-page="current"
  117. :total="total"
  118. :page-size="size"
  119. @current-change="toPage"
  120. @size-change="pageSizeChange"
  121. >
  122. </el-pagination>
  123. </div>
  124. </div>
  125. </div>
  126. </template>
  127. <script>
  128. import { markArbitrationListPage, markGroupQuestions } from "../../api";
  129. import markMinxin from "../../markMinxin";
  130. export default {
  131. name: "mark-detail-arbitration",
  132. mixins: [markMinxin],
  133. props: {
  134. baseInfo: {
  135. type: Object,
  136. default() {
  137. return {};
  138. },
  139. },
  140. },
  141. data() {
  142. return {
  143. filter: {
  144. groupNumber: "",
  145. className: "",
  146. },
  147. current: 1,
  148. size: this.GLOBAL.pageSize,
  149. total: 0,
  150. dataList: [],
  151. multipleSelection: [],
  152. questions: [],
  153. };
  154. },
  155. computed: {
  156. selectGroupNumber() {
  157. return this.multipleSelection[0]?.groupNumber;
  158. },
  159. },
  160. mounted() {
  161. this.filter.className = this.$ls.get("preset-className", undefined);
  162. this.filter.groupNumber = this.$ls.get("preset-groupNumber", "");
  163. this.$ls.remove("preset-className");
  164. this.$ls.remove("preset-groupNumber");
  165. this.getQuestions();
  166. this.toPage(1);
  167. },
  168. methods: {
  169. async getQuestions() {
  170. const res = await markGroupQuestions({
  171. examId: this.baseInfo.examId,
  172. paperNumber: this.baseInfo.paperNumber,
  173. });
  174. this.questions = res || [];
  175. },
  176. async getList() {
  177. const datas = {
  178. ...this.filter,
  179. examId: this.baseInfo.examId,
  180. paperNumber: this.baseInfo.paperNumber,
  181. pageNumber: this.current,
  182. pageSize: this.size,
  183. };
  184. const data = await markArbitrationListPage(datas);
  185. this.dataList = data.records;
  186. this.total = data.total;
  187. },
  188. toPage(page) {
  189. this.current = page;
  190. this.getList();
  191. },
  192. search() {
  193. this.toPage(1);
  194. },
  195. rowSelectable(row) {
  196. return (
  197. !this.selectGroupNumber || this.selectGroupNumber === row.groupNumber
  198. );
  199. },
  200. handleSelectionChange(val) {
  201. this.multipleSelection = val;
  202. },
  203. toDone(row) {
  204. this.toMarkArbitrate({ arbitrateId: row.id });
  205. },
  206. toBatchDone() {
  207. if (!this.multipleSelection.length) return;
  208. if (
  209. this.multipleSelection.some(
  210. (item) => item.groupNumber !== this.selectGroupNumber
  211. )
  212. ) {
  213. this.$message.error("只能批量处理同一分组的数据");
  214. return;
  215. }
  216. this.toMarkArbitrate({
  217. examId: this.baseInfo.examId,
  218. paperNumber: this.baseInfo.paperNumber,
  219. groupNumber: this.selectGroupNumber,
  220. });
  221. },
  222. },
  223. };
  224. </script>