PrintPlanPushManage.vue 11 KB

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