ModifyStudent.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. <template>
  2. <el-dialog
  3. class="modify-student"
  4. :visible.sync="modalIsShow"
  5. :title="title"
  6. top="10vh"
  7. width="500px"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. append-to-body
  11. destroy-on-close
  12. @open="visibleChange"
  13. >
  14. <el-form
  15. ref="modalFormComp"
  16. :model="modalForm"
  17. :rules="rules"
  18. :key="modalForm.id"
  19. label-width="100px"
  20. >
  21. <el-form-item prop="studentName" label="姓名:">
  22. <el-input
  23. v-model.trim="modalForm.studentName"
  24. placeholder="请输入姓名"
  25. clearable
  26. ></el-input>
  27. </el-form-item>
  28. <el-form-item prop="studentCode" label="学号:">
  29. <el-input
  30. v-model.trim="modalForm.studentCode"
  31. placeholder="请输入学号"
  32. clearable
  33. :disabled="isEdit"
  34. ></el-input>
  35. </el-form-item>
  36. <el-form-item prop="courseName" label="课程名称:">
  37. <el-input
  38. v-model.trim="modalForm.courseName"
  39. placeholder="请输入课程名称"
  40. clearable
  41. :disabled="isEdit"
  42. ></el-input>
  43. </el-form-item>
  44. <el-form-item prop="courseCode" label="课程代码:">
  45. <el-input
  46. v-model.trim="modalForm.courseCode"
  47. placeholder="请输入课程代码"
  48. clearable
  49. :disabled="isEdit"
  50. ></el-input>
  51. </el-form-item>
  52. <el-form-item prop="collegeName" label="学院:">
  53. <el-input
  54. v-model.trim="modalForm.collegeName"
  55. placeholder="请输入学院"
  56. clearable
  57. ></el-input>
  58. </el-form-item>
  59. <el-form-item prop="majorName" label="专业:">
  60. <el-input
  61. v-model.trim="modalForm.majorName"
  62. placeholder="请输入专业"
  63. clearable
  64. ></el-input>
  65. </el-form-item>
  66. <el-form-item prop="className" label="班级:">
  67. <el-input
  68. v-model.trim="modalForm.className"
  69. placeholder="请输入班级"
  70. clearable
  71. ></el-input>
  72. </el-form-item>
  73. <el-form-item prop="teacher" label="任课老师:">
  74. <el-input
  75. v-model.trim="modalForm.teacher"
  76. placeholder="请输入任课老师"
  77. clearable
  78. ></el-input>
  79. </el-form-item>
  80. <el-form-item prop="teachClass" label="教学班:">
  81. <el-input
  82. v-model.trim="modalForm.teachClass"
  83. placeholder="请输入教学班"
  84. clearable
  85. ></el-input>
  86. </el-form-item>
  87. <el-form-item prop="examRoom" label="考场:">
  88. <el-input
  89. v-model.trim="modalForm.examRoom"
  90. placeholder="请输入考场"
  91. clearable
  92. ></el-input>
  93. </el-form-item>
  94. <el-form-item prop="score" label="成绩:">
  95. <el-input-number
  96. v-model="modalForm.score"
  97. :min="0"
  98. :max="999"
  99. :step="1"
  100. step-strictly
  101. :controls="false"
  102. ></el-input-number>
  103. </el-form-item>
  104. <el-form-item prop="remark" label="备注:">
  105. <el-input
  106. v-model.trim="modalForm.remark"
  107. placeholder="请输入备注"
  108. clearable
  109. ></el-input>
  110. </el-form-item>
  111. </el-form>
  112. <div slot="footer">
  113. <el-button type="primary" :disabled="isSubmit" @click="submit"
  114. >确认</el-button
  115. >
  116. <el-button @click="cancel">取消</el-button>
  117. </div>
  118. </el-dialog>
  119. </template>
  120. <script>
  121. import { updateStudent } from "../api";
  122. const initModalForm = {
  123. id: null,
  124. semesterId: "",
  125. examId: "",
  126. courseName: "",
  127. courseCode: "",
  128. studentName: "",
  129. studentCode: "",
  130. phoneNumber: "",
  131. collegeName: "",
  132. majorName: "",
  133. className: "",
  134. teacher: "",
  135. teachClass: "",
  136. examRoom: "",
  137. score: "",
  138. remark: "",
  139. };
  140. export default {
  141. name: "modify-student",
  142. props: {
  143. instance: {
  144. type: Object,
  145. default() {
  146. return {};
  147. },
  148. },
  149. },
  150. computed: {
  151. isEdit() {
  152. return !!this.instance.id;
  153. },
  154. title() {
  155. return (this.isEdit ? "编辑" : "新增") + "考生";
  156. },
  157. },
  158. data() {
  159. return {
  160. modalIsShow: false,
  161. isSubmit: false,
  162. modalForm: { ...initModalForm },
  163. rules: {
  164. studentName: [
  165. {
  166. required: true,
  167. message: "请输入姓名",
  168. trigger: "change",
  169. },
  170. {
  171. message: "姓名不能超过50字符",
  172. max: 50,
  173. trigger: "change",
  174. },
  175. ],
  176. studentCode: [
  177. {
  178. required: true,
  179. message: "请输入学号",
  180. trigger: "change",
  181. },
  182. {
  183. message: "学号只能由数字、字母和下划线组成,长度1-30个字符",
  184. pattern: /^[a-zA-Z0-9_-]{1,30}$/,
  185. trigger: "change",
  186. },
  187. ],
  188. collegeName: [
  189. {
  190. message: "学院不能超过50字符",
  191. max: 50,
  192. trigger: "change",
  193. },
  194. ],
  195. majorName: [
  196. {
  197. message: "专业不能超过50字符",
  198. max: 50,
  199. trigger: "change",
  200. },
  201. ],
  202. className: [
  203. {
  204. message: "班级不能超过50字符",
  205. max: 50,
  206. trigger: "change",
  207. },
  208. ],
  209. teacher: [
  210. {
  211. message: "任课老师不能超过30字符",
  212. max: 30,
  213. trigger: "change",
  214. },
  215. ],
  216. teachClass: [
  217. {
  218. message: "教学班不能超过50字符",
  219. max: 50,
  220. trigger: "change",
  221. },
  222. ],
  223. courseName: [
  224. {
  225. required: true,
  226. message: "请输入课程名称",
  227. trigger: "change",
  228. },
  229. {
  230. message: "课程名称不能超过50字符",
  231. max: 50,
  232. trigger: "change",
  233. },
  234. ],
  235. courseCode: [
  236. {
  237. required: true,
  238. message: "请输入课程代码",
  239. trigger: "change",
  240. },
  241. {
  242. message: "课程代码不能超过50字符",
  243. max: 50,
  244. trigger: "change",
  245. },
  246. ],
  247. examRoom: [
  248. {
  249. message: "考场不能超过50字符",
  250. max: 50,
  251. trigger: "change",
  252. },
  253. ],
  254. remark: [
  255. {
  256. message: "备注不能超过50字符",
  257. max: 50,
  258. trigger: "change",
  259. },
  260. ],
  261. },
  262. };
  263. },
  264. methods: {
  265. initData(val) {
  266. this.modalForm = this.$objAssign(initModalForm, val);
  267. this.modalForm.score = this.modalForm.score || undefined;
  268. },
  269. visibleChange() {
  270. this.initData(this.instance);
  271. },
  272. cancel() {
  273. this.modalIsShow = false;
  274. },
  275. open() {
  276. this.modalIsShow = true;
  277. },
  278. async submit() {
  279. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  280. if (!valid) return;
  281. if (this.isSubmit) return;
  282. this.isSubmit = true;
  283. const data = await updateStudent(this.modalForm).catch(() => {
  284. this.isSubmit = false;
  285. });
  286. if (!data) return;
  287. this.isSubmit = false;
  288. this.$message.success(this.title + "成功!");
  289. this.$emit("modified");
  290. this.cancel();
  291. },
  292. },
  293. };
  294. </script>