TaskPaperManage.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <template>
  2. <div class="task-paper-manage">
  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="课程(代码):" label-width="110px">
  6. <course-select
  7. ref="CourseSelect"
  8. v-model.trim="filter.courseCode"
  9. placeholder="请选择"
  10. clearable
  11. ></course-select>
  12. </el-form-item>
  13. <el-form-item label="试卷编号:">
  14. <paper-number-select
  15. ref="PaperNumberSelect"
  16. v-model="filter.paperNumber"
  17. placeholder="请选择"
  18. clearable
  19. ></paper-number-select>
  20. </el-form-item>
  21. <el-form-item label="入库时间:">
  22. <el-date-picker
  23. v-model="createTime"
  24. type="datetimerange"
  25. :picker-options="pickerOptions"
  26. range-separator="至"
  27. start-placeholder="开始日期"
  28. end-placeholder="结束日期"
  29. value-format="timestamp"
  30. align="right"
  31. unlink-panels
  32. >
  33. </el-date-picker>
  34. </el-form-item>
  35. <el-form-item label-width="0px">
  36. <el-button type="primary" icon="el-icon-search" @click="toPage(1)"
  37. >查询</el-button
  38. >
  39. </el-form-item>
  40. </el-form>
  41. </div>
  42. <div class="part-box">
  43. <el-table ref="TableList" :data="papers" border stripe>
  44. <el-table-column
  45. type="index"
  46. label="序号"
  47. width="70"
  48. align="center"
  49. :index="indexMethod"
  50. ></el-table-column>
  51. <el-table-column
  52. prop="paperNumber"
  53. label="试卷编号"
  54. width="120"
  55. ></el-table-column>
  56. <el-table-column prop="courseName" label="课程(代码)">
  57. <template slot-scope="scope">
  58. {{ scope.row.courseName }}({{ scope.row.courseCode }})
  59. </template>
  60. </el-table-column>
  61. <el-table-column
  62. prop="specialty"
  63. label="适用专业(方向)"
  64. ></el-table-column>
  65. <el-table-column
  66. prop="paperType"
  67. label="卷型"
  68. width="100"
  69. ></el-table-column>
  70. <el-table-column
  71. prop="userName"
  72. label="命题老师"
  73. width="100"
  74. ></el-table-column>
  75. <el-table-column prop="createTime" label="入库时间">
  76. <span slot-scope="scope">{{
  77. scope.row.createTime | timestampFilter
  78. }}</span>
  79. </el-table-column>
  80. <el-table-column
  81. prop="exposedPaperType"
  82. label="已曝光"
  83. width="100"
  84. ></el-table-column>
  85. <el-table-column
  86. prop="unexposedPaperType"
  87. label="未曝光"
  88. width="100"
  89. ></el-table-column>
  90. <el-table-column prop="enable" label="启用/禁用" width="100">
  91. <template slot-scope="scope">
  92. {{ scope.row.enable | enableFilter }}
  93. </template>
  94. </el-table-column>
  95. <el-table-column
  96. class-name="action-column"
  97. label="操作"
  98. align="center"
  99. width="120px"
  100. >
  101. <template slot-scope="scope">
  102. <el-button
  103. class="btn-table-icon"
  104. type="text"
  105. :icon="
  106. scope.row.enable
  107. ? 'icon icon-circle-stop'
  108. : 'icon icon-circle-caret-right'
  109. "
  110. @click="toEnable(scope.row)"
  111. :title="scope.row.enable ? '禁用' : '启用'"
  112. ></el-button>
  113. <el-button
  114. class="btn-table-icon"
  115. type="text"
  116. icon="icon icon-circle-right"
  117. @click="toPreview(scope.row)"
  118. title="查看"
  119. ></el-button>
  120. <el-button
  121. class="btn-table-icon"
  122. type="text"
  123. icon="icon icon-download-act"
  124. :disabled="loading"
  125. @click="toDownload(scope.row)"
  126. title="下载"
  127. ></el-button>
  128. </template>
  129. </el-table-column>
  130. </el-table>
  131. <div class="part-page">
  132. <el-pagination
  133. background
  134. layout="total,prev, pager, next"
  135. :current-page="current"
  136. :total="total"
  137. :page-size="size"
  138. @current-change="toPage"
  139. >
  140. </el-pagination>
  141. </div>
  142. </div>
  143. <!-- PreviewTaskPaper -->
  144. <preview-task-paper
  145. :instance="curPaper"
  146. ref="PreviewTaskPaper"
  147. ></preview-task-paper>
  148. </div>
  149. </template>
  150. <script>
  151. import { taskPaperListPage, ableTaskPaper, downloadPaper } from "../api";
  152. import pickerOptions from "@/constants/datePickerOptions";
  153. import { downloadBlob } from "@/plugins/utils";
  154. import PreviewTaskPaper from "../components/PreviewTaskPaper";
  155. export default {
  156. name: "task-paper-manage",
  157. components: { PreviewTaskPaper },
  158. data() {
  159. return {
  160. filter: {
  161. courseCode: "",
  162. paperNumber: "",
  163. startTime: "",
  164. endTime: ""
  165. },
  166. current: 1,
  167. size: this.GLOBAL.pageSize,
  168. total: 0,
  169. papers: [],
  170. curPaper: {},
  171. loading: false,
  172. // date-picker
  173. createTime: [],
  174. pickerOptions
  175. };
  176. },
  177. created() {
  178. this.getList();
  179. },
  180. methods: {
  181. async getList() {
  182. const datas = {
  183. ...this.filter,
  184. pageNumber: this.current,
  185. pageSize: this.size
  186. };
  187. if (this.createTime) {
  188. datas.startTime = this.createTime[0];
  189. datas.endTime = this.createTime[1];
  190. }
  191. const data = await taskPaperListPage(datas);
  192. this.papers = data.records;
  193. this.total = data.total;
  194. },
  195. toPage(page) {
  196. this.current = page;
  197. this.getList();
  198. },
  199. async toEnable(row) {
  200. const msgs = [
  201. [
  202. "命题任务取消后,有如下后果:",
  203. "1.命题老师将无法看到该命题任务;",
  204. "2.该任务无法审核和与考试计划关联;",
  205. "3.该任务已绑定的题卡将取消绑定。",
  206. "您确定要取消命题任务吗?"
  207. ],
  208. [
  209. "命题任务启用后:",
  210. "1.命题老师将重新看到该命题任务;",
  211. "2.该任务将允许继续审核及与考试计划关联;",
  212. "3.该任务需重新绑定题卡。",
  213. "您确定要启用命题任务吗?"
  214. ]
  215. ];
  216. const msg = row.enable ? msgs[0] : msgs[1];
  217. const msgHtml = msg
  218. .map(item => `<p class="text-left">${item}</p>`)
  219. .join("");
  220. this.$confirm(msgHtml, "提示", {
  221. cancelButtonClass: "el-button--danger is-plain",
  222. confirmButtonClass: "el-button--primary",
  223. dangerouslyUseHTMLString: true,
  224. type: "warning"
  225. })
  226. .then(async () => {
  227. const enable = !row.enable;
  228. await ableTaskPaper({
  229. id: row.id,
  230. enable
  231. });
  232. row.enable = enable;
  233. this.$message.success("操作成功!");
  234. })
  235. .catch(() => {});
  236. },
  237. toPreview(row) {
  238. this.curPaper = row;
  239. this.$refs.PreviewTaskPaper.open();
  240. },
  241. async toDownload(row) {
  242. if (this.loading) return;
  243. this.loading = true;
  244. const res = await downloadBlob(() => {
  245. return downloadPaper(row.id);
  246. }, `${row.paperNumber}-${Date.now()}.zip`).catch(() => {});
  247. this.loading = false;
  248. if (res) {
  249. this.$message.success("文件下载成功!");
  250. } else {
  251. this.$message.error("文件下载失败,请重新尝试!");
  252. }
  253. }
  254. }
  255. };
  256. </script>