BusinessDataDetail.vue 7.7 KB

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