BusinessDataDetail.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <template>
  2. <div class="business-data-detail">
  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. ></semester-select>
  11. </el-form-item>
  12. <el-form-item label="考试:">
  13. <exam-select
  14. v-model="filter.examId"
  15. :semester-id="filter.semesterId"
  16. default-select
  17. @default-selected="getList"
  18. ></exam-select>
  19. </el-form-item>
  20. <el-form-item label="印刷计划:">
  21. <print-plan-select
  22. v-model.trim="filter.printPlanIdList"
  23. placeholder="印刷计划"
  24. clearable
  25. multiple
  26. :semester-id="filter.semesterId"
  27. :exam-id="filter.examId"
  28. @change="printPlanChange"
  29. ></print-plan-select>
  30. </el-form-item>
  31. <el-form-item label="课程(代码):" label-width="110px">
  32. <course-select
  33. v-model.trim="filter.courseId"
  34. :semester-id="filter.semesterId"
  35. :exam-id="filter.examId"
  36. :print-plan-id="filter.printPlanIdList"
  37. placeholder="课程(代码)"
  38. clearable
  39. ></course-select>
  40. </el-form-item>
  41. <el-form-item label="试卷编号:">
  42. <paper-number-select
  43. ref="PaperNumberSelect"
  44. v-model="filter.paperNumber"
  45. :semester-id="filter.semesterId"
  46. :exam-id="filter.examId"
  47. :print-plan-id="filter.printPlanIdList"
  48. :course-id="filter.courseId"
  49. placeholder="试卷编号"
  50. clearable
  51. ></paper-number-select>
  52. </el-form-item>
  53. <el-form-item label="考点:" label-width="55px">
  54. <place-select
  55. v-model.trim="filter.examPlace"
  56. :exam-id="filter.examId"
  57. :print-plan-id="filter.printPlanIdList"
  58. placeholder="考点"
  59. clearable
  60. ></place-select>
  61. </el-form-item>
  62. <el-form-item label="考场:" label-width="55px">
  63. <room-select
  64. v-model.trim="filter.examRoom"
  65. :exam-id="filter.examId"
  66. :print-plan-id="filter.printPlanIdList"
  67. placeholder="考场"
  68. clearable
  69. ></room-select>
  70. </el-form-item>
  71. <el-form-item label="考试日期:">
  72. <el-date-picker
  73. v-model="createTime"
  74. type="daterange"
  75. :picker-options="pickerOptions"
  76. range-separator="至"
  77. start-placeholder="考试开始日期"
  78. end-placeholder="考试结束日期"
  79. value-format="timestamp"
  80. align="right"
  81. unlink-panels
  82. >
  83. </el-date-picker>
  84. </el-form-item>
  85. <el-form-item label="考生:" label-width="70px">
  86. <el-input
  87. v-model="filter.studentParams"
  88. placeholder="学号/姓名"
  89. clearable
  90. ></el-input>
  91. </el-form-item>
  92. </template>
  93. <el-form-item label-width="0px">
  94. <el-button
  95. v-if="checkPrivilege('button', 'select')"
  96. type="primary"
  97. @click="search"
  98. >查询</el-button
  99. >
  100. </el-form-item>
  101. </el-form>
  102. </div>
  103. <div class="part-box part-box-pad">
  104. <el-table ref="TableList" :data="dataList">
  105. <el-table-column
  106. type="index"
  107. label="序号"
  108. width="70"
  109. :index="indexMethod"
  110. ></el-table-column>
  111. <el-table-column prop="studentCode" label="学号" width="150">
  112. </el-table-column>
  113. <el-table-column prop="studentName" label="姓名" min-width="140">
  114. </el-table-column>
  115. <el-table-column
  116. prop="printPlanName"
  117. label="印刷计划"
  118. min-width="240"
  119. ></el-table-column>
  120. <el-table-column
  121. prop="courseNameCode"
  122. label="课程(代码)"
  123. min-width="260"
  124. >
  125. </el-table-column>
  126. <el-table-column
  127. prop="paperNumber"
  128. label="试卷编号"
  129. width="160"
  130. ></el-table-column>
  131. <el-table-column prop="examDate" label="考试日期" width="100">
  132. </el-table-column>
  133. <el-table-column prop="examTime" label="考试时间" width="100">
  134. </el-table-column>
  135. <el-table-column prop="examPlace" label="考点" min-width="160">
  136. </el-table-column>
  137. <el-table-column prop="examRoom" label="考场" min-width="160">
  138. </el-table-column>
  139. <el-table-column
  140. class-name="action-column"
  141. label="操作"
  142. width="80"
  143. fixed="right"
  144. >
  145. <template slot-scope="scope">
  146. <el-button
  147. v-if="checkPrivilege('link', 'preview')"
  148. class="btn-primary"
  149. type="text"
  150. @click="toPreview(scope.row)"
  151. >预览</el-button
  152. >
  153. </template>
  154. </el-table-column>
  155. </el-table>
  156. <div class="part-page">
  157. <el-pagination
  158. background
  159. layout="total, sizes, prev, pager, next, jumper"
  160. :pager-count="5"
  161. :current-page="current"
  162. :total="total"
  163. :page-size="size"
  164. @current-change="toPage"
  165. @size-change="pageSizeChange"
  166. >
  167. </el-pagination>
  168. </div>
  169. </div>
  170. <!-- PreviewBusinessStudentDetail -->
  171. <preview-business-student-detail
  172. :instance="curRow"
  173. ref="PreviewBusinessStudentDetail"
  174. ></preview-business-student-detail>
  175. </div>
  176. </template>
  177. <script>
  178. import { businessDataDetailListPage } from "../api";
  179. import { parseTimeRangeDateAndTime } from "@/plugins/utils";
  180. import PreviewBusinessStudentDetail from "../components/PreviewBusinessStudentDetail";
  181. import pickerOptions from "@/constants/datePickerOptions";
  182. export default {
  183. name: "business-data-detail",
  184. components: { PreviewBusinessStudentDetail },
  185. data() {
  186. return {
  187. filter: {
  188. printPlanIdList: [],
  189. courseId: "",
  190. paperNumber: "",
  191. examPlace: "",
  192. examRoom: "",
  193. studentParams: "",
  194. startDate: "",
  195. endDate: "",
  196. },
  197. current: 1,
  198. size: this.GLOBAL.pageSize,
  199. total: 0,
  200. dataList: [],
  201. curRow: {},
  202. // date-picker
  203. createTime: [],
  204. pickerOptions,
  205. };
  206. },
  207. mounted() {
  208. // this.search();
  209. },
  210. methods: {
  211. async getList() {
  212. if (!this.checkPrivilege("list", "list")) return;
  213. const datas = {
  214. ...this.filter,
  215. pageNumber: this.current,
  216. pageSize: this.size,
  217. };
  218. if (this.createTime) {
  219. datas.startDate = this.createTime[0];
  220. datas.endDate = this.createTime[1];
  221. }
  222. const data = await businessDataDetailListPage(datas);
  223. this.dataList = data.records.map((item) => {
  224. const { date, time } = parseTimeRangeDateAndTime(
  225. item.examStartTime,
  226. item.examEndTime
  227. );
  228. item.examDate = date || "--";
  229. item.examTime = time || "--";
  230. return item;
  231. });
  232. this.total = data.total;
  233. },
  234. toPage(page) {
  235. this.current = page;
  236. this.getList();
  237. },
  238. search() {
  239. this.toPage(1);
  240. },
  241. printPlanChange() {
  242. this.filter.examRoom = "";
  243. this.filter.examPlace = "";
  244. },
  245. toPreview(row) {
  246. this.curRow = row;
  247. this.$refs.PreviewBusinessStudentDetail.open();
  248. },
  249. },
  250. };
  251. </script>