TaskManage.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <template>
  2. <div class="task-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="档案:">
  6. <archives-select
  7. v-model="filter.paperArchivesId"
  8. placeholder="请选择档案"
  9. >
  10. </archives-select>
  11. </el-form-item>
  12. <el-form-item label="课程:">
  13. <course-select
  14. v-model="filter.courseName"
  15. :filter-data="filter"
  16. placeholder="请选择课程"
  17. >
  18. </course-select>
  19. </el-form-item>
  20. <el-form-item label="教学班:">
  21. <teach-clazz-select
  22. v-model="filter.teachClazzName"
  23. placeholder="请选择教学班"
  24. :filter-data="filter"
  25. >
  26. </teach-clazz-select>
  27. </el-form-item>
  28. <el-form-item label-width="0px">
  29. <el-button type="primary" @click="search">查询</el-button>
  30. </el-form-item>
  31. </el-form>
  32. </div>
  33. <div class="mb-4 tab-btns">
  34. <el-button
  35. v-for="tab in tabs"
  36. :key="tab.val"
  37. size="medium"
  38. :type="curTab == tab.val ? 'primary' : 'default'"
  39. @click="selectMenu(tab.val)"
  40. >{{ tab.name }}
  41. </el-button>
  42. </div>
  43. <div class="part-box part-box-pad">
  44. <el-table ref="TableList" size="medium" :data="dataList">
  45. <el-table-column
  46. prop="id"
  47. label="任务ID"
  48. min-width="160"
  49. ></el-table-column>
  50. <el-table-column
  51. prop="scanTaskName"
  52. label="任务名称"
  53. min-width="160"
  54. ></el-table-column>
  55. <el-table-column prop="courseName" label="课程" min-width="200">
  56. </el-table-column>
  57. <el-table-column
  58. prop="teachClazzName"
  59. label="教学班"
  60. min-width="100"
  61. ></el-table-column>
  62. <el-table-column
  63. prop="studentCount"
  64. label="学生数"
  65. min-width="100"
  66. ></el-table-column>
  67. <el-table-column
  68. prop="scanCount"
  69. label="已扫描数量"
  70. min-width="100"
  71. ></el-table-column>
  72. <el-table-column
  73. class-name="action-column"
  74. label="操作"
  75. width="80"
  76. fixed="right"
  77. >
  78. <template slot-scope="scope">
  79. <el-button
  80. class="btn-primary"
  81. type="text"
  82. @click="toScan(scope.row)"
  83. >扫描</el-button
  84. >
  85. </template>
  86. </el-table-column>
  87. </el-table>
  88. <div class="part-page">
  89. <el-pagination
  90. background
  91. layout="total,prev, pager, next"
  92. :current-page="current"
  93. :total="total"
  94. :page-size="size"
  95. @current-change="toPage"
  96. >
  97. </el-pagination>
  98. </div>
  99. </div>
  100. <!-- ScanTaskProcessDialog -->
  101. <scan-task-process-dialog
  102. ref="ScanTaskProcessDialog"
  103. :task="curRow"
  104. @on-close="getList"
  105. ></scan-task-process-dialog>
  106. </div>
  107. </template>
  108. <script>
  109. import { taskListPage } from "../api";
  110. // import ScanTaskProcessDialog from "../components/ScanTaskProcessDialog.vue";
  111. import ScanTaskProcessDialog from "../components/ScanTaskDialog.vue";
  112. export default {
  113. name: "task-manage",
  114. components: {
  115. ScanTaskProcessDialog
  116. },
  117. data() {
  118. return {
  119. curTab: "all",
  120. tabs: [
  121. {
  122. name: "全部",
  123. val: "all"
  124. },
  125. {
  126. name: "我的",
  127. val: "my"
  128. }
  129. ],
  130. cacheData: {
  131. all: {},
  132. my: {}
  133. },
  134. filter: {
  135. paperArchivesId: "",
  136. courseName: "",
  137. teachClazzName: ""
  138. },
  139. current: 1,
  140. size: 10,
  141. total: 0,
  142. dataList: [],
  143. curRow: {},
  144. recordList: [],
  145. courseList: [],
  146. teachingClassList: []
  147. };
  148. },
  149. mounted() {
  150. this.search();
  151. },
  152. methods: {
  153. search() {
  154. this.cacheData[this.curTab] = {};
  155. this.toPage(1);
  156. },
  157. async getList() {
  158. let datas = {
  159. pageNumber: this.current,
  160. pageSize: this.size
  161. };
  162. if (this.curTab === "all") {
  163. datas = { ...datas, ...this.filter };
  164. } else {
  165. datas = { ...datas, isMine: true };
  166. }
  167. const data = await taskListPage(datas);
  168. this.dataList = data.records;
  169. this.total = data.total;
  170. },
  171. toPage(page) {
  172. this.current = page;
  173. this.getList();
  174. },
  175. selectMenu(curTab) {
  176. this.cacheData[this.curTab] = {
  177. current: this.current,
  178. total: this.total,
  179. dataList: this.dataList
  180. };
  181. this.curTab = curTab;
  182. if (this.cacheData[this.curTab].total) {
  183. const { current, total, dataList } = this.cacheData[this.curTab];
  184. this.current = current;
  185. this.total = total;
  186. this.dataList = dataList;
  187. } else {
  188. this.toPage(1);
  189. }
  190. },
  191. toScan(row) {
  192. this.curRow = row;
  193. this.$refs.ScanTaskProcessDialog.open();
  194. }
  195. }
  196. };
  197. </script>