StudentManagement.vue 5.3 KB

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