PrintPlanPushManage.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. <template>
  2. <div class="print-plan-push-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. <template v-if="checkPrivilege('condition', 'condition')">
  6. <el-form-item label="学期:">
  7. <semester-select
  8. v-model="filter.semesterId"
  9. default-select
  10. @default-selected="semesterChange"
  11. @change="semesterChange"
  12. ></semester-select>
  13. </el-form-item>
  14. <el-form-item label="考试:">
  15. <exam-select
  16. v-model="filter.examId"
  17. :semester-id="filter.semesterId"
  18. @change="examChange"
  19. ></exam-select>
  20. </el-form-item>
  21. <el-form-item label="课程(代码):" label-width="110px">
  22. <course-select
  23. ref="CourseSelect"
  24. v-model="filter.courseCode"
  25. :semester-id="filter.semesterId"
  26. :exam-id="filter.examId"
  27. placeholder="课程(代码)"
  28. clearable
  29. ></course-select>
  30. </el-form-item>
  31. <el-form-item label="试卷编号:">
  32. <paper-number-select
  33. ref="PaperNumberSelect"
  34. v-model="filter.paperNumber"
  35. :semester-id="filter.semesterId"
  36. :exam-id="filter.examId"
  37. :course-code="filter.courseCode"
  38. placeholder="试卷编号"
  39. clearable
  40. ></paper-number-select>
  41. </el-form-item>
  42. <el-form-item label="学院:">
  43. <college-select
  44. v-model="filter.orgId"
  45. placeholder="学院"
  46. ></college-select>
  47. </el-form-item>
  48. <el-form-item label="推送状态:">
  49. <el-select
  50. v-model="filter.syncStatus"
  51. style="width: 120px"
  52. placeholder="推送状态"
  53. clearable
  54. >
  55. <el-option
  56. v-for="(val, key) in PUSH_TYPE"
  57. :key="key"
  58. :value="key"
  59. :label="val"
  60. ></el-option>
  61. </el-select>
  62. </el-form-item>
  63. <el-form-item>
  64. <el-date-picker
  65. v-model="createTime"
  66. type="datetimerange"
  67. range-separator="至"
  68. start-placeholder="考试开始时间"
  69. end-placeholder="考试结束时间"
  70. value-format="timestamp"
  71. align="right"
  72. unlink-panels
  73. >
  74. </el-date-picker>
  75. </el-form-item>
  76. </template>
  77. <el-form-item label-width="0px">
  78. <el-button
  79. v-if="checkPrivilege('button', 'select')"
  80. type="primary"
  81. :disabled="!filter.semesterId || !filter.examId"
  82. @click="search"
  83. >查询</el-button
  84. >
  85. </el-form-item>
  86. </el-form>
  87. <div class="part-box-action">
  88. <el-button
  89. v-if="checkPrivilege('button', 'BatchSend')"
  90. icon="el-icon-top-right"
  91. type="primary"
  92. @click="toBatchPush"
  93. >
  94. 批量推送
  95. </el-button>
  96. <el-button
  97. v-if="checkPrivilege('button', 'BatchSend')"
  98. type="primary"
  99. icon="el-icon-s-order"
  100. @click="toResult"
  101. >
  102. 推送结果
  103. </el-button>
  104. </div>
  105. </div>
  106. <div class="part-box part-box-pad">
  107. <el-table
  108. ref="TableList"
  109. :data="dataList"
  110. @selection-change="handleSelectionChange"
  111. >
  112. <el-table-column
  113. type="selection"
  114. width="55"
  115. align="center"
  116. ></el-table-column>
  117. <el-table-column prop="name" label="课程名称(代码)" min-width="180">
  118. <span slot-scope="scope"
  119. >{{ scope.row.courseName }}({{ scope.row.courseCode }})</span
  120. >
  121. </el-table-column>
  122. <el-table-column
  123. prop="sequence"
  124. label="序号"
  125. width="60"
  126. ></el-table-column>
  127. <el-table-column
  128. prop="paperNumber"
  129. label="试卷编号"
  130. min-width="100"
  131. ></el-table-column>
  132. <el-table-column prop="name" label="学院(代码)" min-width="180">
  133. <span slot-scope="scope"
  134. >{{ scope.row.collegeName }}({{ scope.row.collegeCode }})</span
  135. >
  136. </el-table-column>
  137. <el-table-column
  138. prop="paperType"
  139. label="卷型"
  140. width="60"
  141. ></el-table-column>
  142. <el-table-column
  143. prop="syncCardType"
  144. label="题卡类型"
  145. width="100"
  146. ></el-table-column>
  147. <el-table-column prop="examDate" label="考试日期" width="160">
  148. </el-table-column>
  149. <el-table-column prop="examTime" label="考试时间" width="120">
  150. </el-table-column>
  151. <el-table-column
  152. prop="totalSubjects"
  153. label="科次"
  154. width="60"
  155. ></el-table-column>
  156. <el-table-column
  157. prop="syncStatusDisplay"
  158. label="推送状态"
  159. width="100"
  160. ></el-table-column>
  161. <el-table-column
  162. prop="syncUserName"
  163. label="推送人"
  164. width="120"
  165. ></el-table-column>
  166. <el-table-column
  167. prop="thirdRelateId"
  168. label="考试ID"
  169. width="100"
  170. ></el-table-column>
  171. <el-table-column
  172. class-name="action-column"
  173. label="操作"
  174. width="80"
  175. fixed="right"
  176. >
  177. <template slot-scope="scope">
  178. <el-button
  179. v-if="checkPrivilege('link', 'Send')"
  180. class="btn-primary"
  181. type="text"
  182. @click="toPush(scope.row)"
  183. >推送</el-button
  184. >
  185. </template>
  186. </el-table-column>
  187. </el-table>
  188. <div class="part-page">
  189. <el-pagination
  190. background
  191. layout="total, sizes, prev, pager, next, jumper"
  192. :pager-count="5"
  193. :current-page="current"
  194. :total="total"
  195. :page-size="size"
  196. @current-change="toPage"
  197. @size-change="pageSizeChange"
  198. >
  199. </el-pagination>
  200. </div>
  201. </div>
  202. <div class="tips-info">
  203. <p>说明:</p>
  204. <p>1、印刷计划下的印刷任务,印刷完成后才允许推送;</p>
  205. <p>
  206. 2、未开始阅卷工作前,可以重复推送,云阅卷会以最后一次推送的数据为准;
  207. </p>
  208. <p>
  209. 3、课程数:指该计划下包含的课程总数量;推送成功课程数:成功推送到云阅卷系统课程数量;推送失败课程数:未成功推送到云阅卷系统课程数量;未推送课程数:未推送到云阅卷系统课程数量;
  210. </p>
  211. </div>
  212. <!-- PrintPlanBatchPushDialog -->
  213. <print-plan-batch-push-dialog
  214. v-if="
  215. checkPrivilege('link', 'Send') || checkPrivilege('button', 'BatchSend')
  216. "
  217. ref="PrintPlanBatchPushDialog"
  218. :courses="curSelectedCourses"
  219. @modified="mergePushed"
  220. ></print-plan-batch-push-dialog>
  221. <!-- DataSyncDialog -->
  222. <data-sync-dialog
  223. v-if="
  224. checkPrivilege('link', 'Send') || checkPrivilege('button', 'BatchSend')
  225. "
  226. ref="DataSyncDialog"
  227. sync-type="EXAM_PUSH"
  228. ></data-sync-dialog>
  229. </div>
  230. </template>
  231. <script>
  232. import { PUSH_TYPE } from "@/constants/enumerate";
  233. import { printPlanPushListQuery, printPlanCheckSyncMode } from "../api";
  234. import PrintPlanBatchPushDialog from "../components/PrintPlanBatchPushDialog.vue";
  235. import DataSyncDialog from "../../stmms/components/DataSyncDialog.vue";
  236. export default {
  237. name: "print-plan-push-manage",
  238. components: { PrintPlanBatchPushDialog, DataSyncDialog },
  239. data() {
  240. return {
  241. filter: {
  242. semesterId: "",
  243. examId: "",
  244. orgId: "",
  245. syncStatus: "",
  246. courseCode: "",
  247. paperNumber: "",
  248. startTime: "",
  249. endTime: "",
  250. },
  251. filterInfo: { semesterName: "", examName: "" },
  252. PUSH_TYPE,
  253. current: 1,
  254. size: this.GLOBAL.pageSize,
  255. total: 0,
  256. loading: false,
  257. semesters: [],
  258. dataList: [],
  259. curPrintPlan: {},
  260. multipleSelection: [],
  261. curSelectedCourses: [],
  262. createTime: [],
  263. orgCode: "",
  264. };
  265. },
  266. methods: {
  267. async getList() {
  268. if (!this.checkPrivilege("list", "list")) return;
  269. if (!this.filter.semesterId || !this.filter.examId) return;
  270. let datas = {
  271. ...this.filter,
  272. pageNumber: this.current,
  273. pageSize: this.size,
  274. };
  275. if (this.createTime) {
  276. datas.startTime = this.createTime[0];
  277. datas.endTime = this.createTime[1];
  278. }
  279. const data = await printPlanPushListQuery(datas);
  280. this.dataList = data.records.map((item) => {
  281. return {
  282. ...item,
  283. ...this.filterInfo,
  284. };
  285. });
  286. this.total = data.total;
  287. },
  288. toPage(page) {
  289. this.multipleSelection = [];
  290. this.current = page;
  291. this.getList();
  292. },
  293. search() {
  294. this.toPage(1);
  295. },
  296. semesterChange(val) {
  297. this.filterInfo.semesterName = val ? val.name : "";
  298. },
  299. examChange(val) {
  300. this.filterInfo.examName = val ? val.name : "";
  301. },
  302. sizeChange(size) {
  303. this.size = size;
  304. this.toPage(1);
  305. },
  306. handleSelectionChange(val) {
  307. this.multipleSelection = val;
  308. },
  309. async toBatchPush() {
  310. if (!this.multipleSelection.length) {
  311. this.$message.error("请选择要批量推送的数据");
  312. return;
  313. }
  314. this.curSelectedCourses = this.multipleSelection;
  315. this.orgCode = await printPlanCheckSyncMode({
  316. list: this.curSelectedCourses,
  317. });
  318. this.$refs.PrintPlanBatchPushDialog.open();
  319. },
  320. async toPush(row) {
  321. this.curSelectedCourses = [row];
  322. this.orgCode = await printPlanCheckSyncMode({
  323. list: this.curSelectedCourses,
  324. });
  325. this.$refs.PrintPlanBatchPushDialog.open();
  326. },
  327. mergePushed() {
  328. this.toPage(this.current);
  329. },
  330. toResult() {
  331. this.$refs.DataSyncDialog.open();
  332. },
  333. },
  334. };
  335. </script>