StudentManagement.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <template>
  2. <div class="student-management">
  3. <div class="part-box-head">
  4. <div class="part-box-head-left"><h1>学生档案设置</h1></div>
  5. </div>
  6. <div class="part-filter">
  7. <div class="part-filter-form">
  8. <el-form :model="form" inline>
  9. <el-form-item label="姓名">
  10. <el-input v-model.trim="form.name"></el-input>
  11. </el-form-item>
  12. <el-form-item label="证件号">
  13. <el-input v-model.trim="form.identity"></el-input>
  14. </el-form-item>
  15. <el-form-item label="状态">
  16. <StateSelect v-model="form.enable"></StateSelect>
  17. </el-form-item>
  18. <el-form-item label="底照是否上传">
  19. <el-select
  20. v-model="form.photo"
  21. placeholder="底照是否上传"
  22. clearable
  23. >
  24. <el-option
  25. v-for="(val, key) in BOOLEAN_TYPE"
  26. :key="key"
  27. :value="key * 1"
  28. :label="val"
  29. ></el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item>
  33. <el-button type="primary" @click="handleCurrentChange(0)"
  34. >查询</el-button
  35. >
  36. </el-form-item>
  37. </el-form>
  38. </div>
  39. </div>
  40. <el-table :data="tableData">
  41. <el-table-column type="selection" width="42" />
  42. <el-table-column label="ID">
  43. <span slot-scope="scope">{{ scope.row.id }}</span>
  44. </el-table-column>
  45. <el-table-column width="120" label="姓名">
  46. <span slot-scope="scope">{{ scope.row.name }}</span>
  47. </el-table-column>
  48. <el-table-column width="200" label="证件号">
  49. <span slot-scope="scope">{{ scope.row.identity }}</span>
  50. </el-table-column>
  51. <!-- <el-table-column width="100" label="机构">
  52. <span slot-scope="scope">{{ scope.row.orgName }}</span>
  53. </el-table-column> -->
  54. <el-table-column width="120" label="状态">
  55. <span slot-scope="scope">{{
  56. scope.row.enable | zeroOneEnableDisableFilter
  57. }}</span>
  58. </el-table-column>
  59. <el-table-column width="120" label="照片">
  60. <span slot-scope="scope">
  61. <el-button
  62. size="mini"
  63. type="primary"
  64. plain
  65. @click="openBasePhotoDialog(scope.row.basePhotoPath)"
  66. v-if="scope.row.basePhotoPath"
  67. >
  68. 查看底照
  69. </el-button>
  70. <span v-else>无底照</span>
  71. </span>
  72. </el-table-column>
  73. <el-table-column width="120" label="更新人">
  74. <span slot-scope="scope">{{ scope.row.updateName }}</span>
  75. </el-table-column>
  76. <el-table-column sortable width="170" label="更新时间">
  77. <span slot-scope="scope">{{
  78. scope.row.updateTime | datetimeFilter
  79. }}</span>
  80. </el-table-column>
  81. <el-table-column :context="_self" label="操作" width="260" fixed="right">
  82. <div slot-scope="scope">
  83. <el-button
  84. size="mini"
  85. type="primary"
  86. plain
  87. @click="openExamRecord(scope.row)"
  88. >
  89. 考试记录
  90. </el-button>
  91. <el-button
  92. size="mini"
  93. type="primary"
  94. plain
  95. @click="resetStudentPassword(scope.row)"
  96. >
  97. 重置密码
  98. </el-button>
  99. <el-button
  100. size="mini"
  101. type="primary"
  102. plain
  103. @click="toggleEnableStudent(scope.row)"
  104. >
  105. {{ !scope.row.enable | booleanEnableDisableFilter }}
  106. </el-button>
  107. </div>
  108. </el-table-column>
  109. </el-table>
  110. <div class="part-page">
  111. <el-pagination
  112. background
  113. @current-change="handleCurrentChange"
  114. :current-page="currentPage"
  115. :page-size="pageSize"
  116. :page-sizes="[10, 20, 50, 100, 200, 300]"
  117. @size-change="handleSizeChange"
  118. layout="total, sizes, prev, pager, next, jumper"
  119. :total="total"
  120. />
  121. </div>
  122. <el-dialog
  123. title="底照"
  124. :visible.sync="basePhotoDialogVisible"
  125. destroy-on-close
  126. >
  127. <img :src="selectedBasePhoto" style="width: 400px;" />
  128. </el-dialog>
  129. <StudentManagementDialog ref="theDialog" :student="selectedStudent" />
  130. </div>
  131. </template>
  132. <script>
  133. import {
  134. searchStudents,
  135. toggleEnableStudent,
  136. resetStudentPassword,
  137. } from "@/api/examwork-student";
  138. import StudentManagementDialog from "./StudentManagementDialog";
  139. import { BOOLEAN_TYPE } from "@/constant/constants";
  140. export default {
  141. name: "StudentManagement",
  142. data() {
  143. return {
  144. form: {
  145. name: "",
  146. identity: "",
  147. enable: null,
  148. photo: null,
  149. },
  150. tableData: [],
  151. currentPage: 1,
  152. pageSize: 10,
  153. total: 10,
  154. basePhotoDialogVisible: false,
  155. selectedBasePhoto: null,
  156. selectedStudent: {},
  157. BOOLEAN_TYPE,
  158. };
  159. },
  160. components: { StudentManagementDialog },
  161. async created() {
  162. this.searchForm();
  163. },
  164. methods: {
  165. async searchForm() {
  166. let datas = {
  167. enable: this.form.enable,
  168. identity: this.form.identity,
  169. name: this.form.name,
  170. pageNumber: this.currentPage,
  171. pageSize: this.pageSize,
  172. };
  173. if (this.form.photo !== null && this.form.photo !== "") {
  174. datas.photo = !!this.form.photo;
  175. }
  176. const res = await searchStudents(datas);
  177. this.tableData = res.data.data.records;
  178. // this.tableData.forEach(
  179. // (v) =>
  180. // (v.basePhotoPath =
  181. // "https://ecs-test-static.qmth.com.cn/org_logo/0/1597046412749.png")
  182. // );
  183. this.total = res.data.data.total;
  184. if (this.total > 0 && this.tableData.length === 0) {
  185. this.handleCurrentChange(this.currentPage - 1);
  186. }
  187. },
  188. handleCurrentChange(val) {
  189. this.currentPage = val;
  190. this.searchForm();
  191. },
  192. handleSizeChange(val) {
  193. this.pageSize = val;
  194. this.currentPage = 1;
  195. this.searchForm();
  196. },
  197. openBasePhotoDialog(url) {
  198. this.selectedBasePhoto = url;
  199. this.basePhotoDialogVisible = true;
  200. },
  201. openExamRecord(user) {
  202. this.selectedStudent = user;
  203. this.$refs.theDialog.openDialog();
  204. },
  205. async toggleEnableStudent(user) {
  206. await toggleEnableStudent({
  207. id: user.id,
  208. enable: user.enable === 0 ? 1 : 0,
  209. });
  210. this.searchForm();
  211. },
  212. async resetStudentPassword(user) {
  213. await resetStudentPassword({
  214. id: user.id,
  215. password: "123456",
  216. });
  217. this.searchForm();
  218. },
  219. },
  220. };
  221. </script>
  222. <style></style>