ModifyAnalysisBatchPaper.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. <template>
  2. <div class="modify-analysis-batch">
  3. <el-dialog
  4. class="page-dialog"
  5. :visible.sync="modalIsShow"
  6. :title="title"
  7. :close-on-click-modal="false"
  8. :close-on-press-escape="false"
  9. append-to-body
  10. fullscreen
  11. @opened="visibleChange"
  12. @closed="dialogClosed"
  13. >
  14. <div class="part-box part-box-filter part-box-flex">
  15. <el-form
  16. ref="FilterForm"
  17. label-position="left"
  18. label-width="55px"
  19. inline
  20. >
  21. <el-form-item label="课程:">
  22. <el-input
  23. style="width: 100%"
  24. v-model.trim="filter.courseName"
  25. placeholder="课程名称"
  26. clearable
  27. ></el-input>
  28. </el-form-item>
  29. <el-form-item>
  30. <el-button type="primary" @click="toPage(1)">查询</el-button>
  31. </el-form-item>
  32. </el-form>
  33. <div class="part-box-action">
  34. <el-button type="danger" icon="el-icon-delete" @click="toBatchDelete"
  35. >批量删除</el-button
  36. >
  37. <el-button
  38. type="primary"
  39. icon="el-icon-circle-plus-outline"
  40. @click="toAdd"
  41. >添加分析试卷</el-button
  42. >
  43. </div>
  44. </div>
  45. <div class="part-box part-box-pad">
  46. <el-table
  47. ref="TableList"
  48. :data="dataList"
  49. @selection-change="handleSelectionChange"
  50. >
  51. <el-table-column
  52. type="selection"
  53. fixed="left"
  54. width="55"
  55. align="center"
  56. ></el-table-column>
  57. <el-table-column
  58. prop="semesterName"
  59. label="学期"
  60. min-width="210"
  61. ></el-table-column>
  62. <el-table-column prop="examName" label="考试" min-width="160">
  63. </el-table-column>
  64. <el-table-column prop="courseCode" label="课程(代码)" min-width="120">
  65. <span slot-scope="scope">
  66. {{ scope.row.courseName }}({{ scope.row.courseCode }})
  67. </span>
  68. </el-table-column>
  69. <el-table-column prop="paperNumber" label="试卷编号">
  70. </el-table-column>
  71. <el-table-column prop="paperType" label="试卷类型" width="100">
  72. </el-table-column>
  73. <el-table-column prop="teacherName" label="命题老师">
  74. </el-table-column>
  75. <el-table-column prop="publishStatus" label="发布状态">
  76. <template slot-scope="scope">
  77. <span>{{ scope.row.publishStatus ? "已发布" : "未发布" }}</span>
  78. </template>
  79. </el-table-column>
  80. <el-table-column
  81. class-name="action-column"
  82. label="操作"
  83. width="80"
  84. align="center"
  85. >
  86. <template slot-scope="scope">
  87. <el-button
  88. v-if="
  89. scope.row.status === 'FINISH_CALCULATE' &&
  90. !scope.row.publishStatus
  91. "
  92. class="btn-primary"
  93. type="text"
  94. @click="toPublish(scope.row)"
  95. >发布</el-button
  96. >
  97. <el-button
  98. v-if="!scope.row.publishStatus"
  99. class="btn-danger"
  100. type="text"
  101. @click="toDelete(scope.row)"
  102. >删除</el-button
  103. >
  104. </template>
  105. </el-table-column>
  106. </el-table>
  107. <div class="part-page">
  108. <el-pagination
  109. background
  110. layout="total, sizes, prev, pager, next, jumper"
  111. :pager-count="5"
  112. :current-page="current"
  113. :total="total"
  114. :page-size="size"
  115. @current-change="toPage"
  116. @size-change="pageSizeChange"
  117. >
  118. </el-pagination>
  119. </div>
  120. </div>
  121. <div slot="footer"></div>
  122. </el-dialog>
  123. <!-- SelectAnalysisPaper -->
  124. <select-analysis-paper
  125. ref="SelectAnalysisPaper"
  126. :batch="instance"
  127. @modified="getList"
  128. ></select-analysis-paper>
  129. </div>
  130. </template>
  131. <script>
  132. import {
  133. analysisBatchPaperList,
  134. deleteAnalysisBatchPaper,
  135. analysisBatchPaperPublish,
  136. } from "../api";
  137. import SelectAnalysisPaper from "./SelectAnalysisPaper.vue";
  138. export default {
  139. name: "modify-analysis-batch-paper",
  140. components: { SelectAnalysisPaper },
  141. props: {
  142. instance: {
  143. type: Object,
  144. default() {
  145. return {};
  146. },
  147. },
  148. },
  149. data() {
  150. return {
  151. modalIsShow: false,
  152. filter: {
  153. batchId: "",
  154. semesterId: "",
  155. courseName: "",
  156. },
  157. current: 1,
  158. size: this.GLOBAL.pageSize,
  159. total: 0,
  160. dataList: [],
  161. curRow: {},
  162. multipleSelection: [],
  163. loading: false,
  164. };
  165. },
  166. computed: {
  167. title() {
  168. return `分析试卷管理-${this.instance.batchName}`;
  169. },
  170. },
  171. methods: {
  172. visibleChange() {
  173. this.filter = {
  174. batchId: this.instance.id,
  175. semesterId: this.instance.semesterId,
  176. courseName: "",
  177. };
  178. this.curRow = {};
  179. this.toPage(1);
  180. },
  181. dialogClosed() {
  182. this.$emit("closed");
  183. },
  184. cancel() {
  185. this.modalIsShow = false;
  186. },
  187. open() {
  188. this.modalIsShow = true;
  189. },
  190. async getList() {
  191. this.multipleSelection = [];
  192. const datas = {
  193. ...this.filter,
  194. pageNumber: this.current,
  195. pageSize: this.size,
  196. };
  197. const data = await analysisBatchPaperList(datas);
  198. this.dataList = data.records;
  199. this.total = data.total;
  200. },
  201. toPage(page) {
  202. this.current = page;
  203. this.getList();
  204. },
  205. toAdd() {
  206. this.$refs.SelectAnalysisPaper.open();
  207. },
  208. handleSelectionChange(val) {
  209. this.multipleSelection = val.map((item) => item.id);
  210. },
  211. async toBatchDelete() {
  212. if (!this.multipleSelection.length) {
  213. this.$message.error("请选择要删除的试卷!");
  214. return;
  215. }
  216. const confirm = await this.$confirm(`确定要删除选中的试卷吗?`, "提示", {
  217. type: "warning",
  218. }).catch(() => {});
  219. if (confirm !== "confirm") return;
  220. await deleteAnalysisBatchPaper(this.instance.id, this.multipleSelection);
  221. this.$message.success("删除成功!");
  222. this.deletePageLastItem();
  223. },
  224. async toPublish(row) {
  225. const confirm = await this.$confirm(
  226. `确定要发布试卷【${row.paperNumber}】吗?`,
  227. "提示",
  228. {
  229. type: "warning",
  230. }
  231. ).catch(() => {});
  232. if (confirm !== "confirm") return;
  233. await analysisBatchPaperPublish(this.instance.id, row.id);
  234. this.$message.success("发布成功!");
  235. this.getList();
  236. },
  237. async toDelete(row) {
  238. const confirm = await this.$confirm(
  239. `确定要删除试卷【${row.paperNumber}】吗?`,
  240. "提示",
  241. {
  242. type: "warning",
  243. }
  244. ).catch(() => {});
  245. if (confirm !== "confirm") return;
  246. await deleteAnalysisBatchPaper(this.instance.id, [row.id]);
  247. this.$message.success("删除成功!");
  248. this.deletePageLastItem();
  249. },
  250. },
  251. };
  252. </script>