ModifyExamTask.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <template>
  2. <div>
  3. <el-dialog
  4. class="modify-exam-task"
  5. :visible.sync="modalIsShow"
  6. :title="title"
  7. top="10vh"
  8. width="600px"
  9. :close-on-click-modal="false"
  10. :close-on-press-escape="false"
  11. append-to-body
  12. @open="visibleChange"
  13. >
  14. <el-form
  15. v-if="modalIsShow"
  16. ref="modalFormComp"
  17. label-width="120px"
  18. :class="{ 'form-info': !editable }"
  19. :rules="rules"
  20. :model="modalForm"
  21. >
  22. <el-form-item prop="semesterId" label="学期:">
  23. <semester-select
  24. v-if="editable"
  25. ref="SemesterSelect"
  26. v-model="modalForm.semesterId"
  27. default-select
  28. class="width-full"
  29. ></semester-select>
  30. <span v-else>{{ modalForm.semesterName }}</span>
  31. </el-form-item>
  32. <el-form-item prop="examId" label="考试:">
  33. <exam-select
  34. v-if="editable"
  35. v-model="modalForm.examId"
  36. :semester-id="modalForm.semesterId"
  37. class="width-full"
  38. ></exam-select>
  39. <span v-else>{{ modalForm.examName }}</span>
  40. </el-form-item>
  41. <el-form-item prop="courseCode" label="课程(代码):">
  42. <course-select
  43. v-if="editable"
  44. ref="CourseSelect"
  45. v-model.trim="modalForm.courseCode"
  46. placeholder="请选择"
  47. clearable
  48. class="width-full"
  49. :semester-id="modalForm.semesterId"
  50. :exam-id="modalForm.examId"
  51. @change="courseChange"
  52. ></course-select>
  53. <span v-else
  54. >{{ modalForm.courseName }}({{ modalForm.courseCode }})</span
  55. >
  56. </el-form-item>
  57. <el-form-item prop="paperNumber" label="试卷编号:">
  58. <el-input
  59. v-if="editable"
  60. v-model="modalForm.paperNumber"
  61. clearable
  62. ></el-input>
  63. <span v-else>{{ modalForm.paperNumber | defaultFieldFilter }}</span>
  64. </el-form-item>
  65. <el-form-item prop="startTime" label="命题时间:">
  66. <el-date-picker
  67. v-if="editable"
  68. v-model="createTime"
  69. type="datetimerange"
  70. range-separator="至"
  71. start-placeholder="开始时间"
  72. end-placeholder="结束时间"
  73. value-format="timestamp"
  74. align="right"
  75. unlink-panels
  76. @change="dateChange"
  77. >
  78. </el-date-picker>
  79. <span v-else>
  80. <span v-if="modalForm.startTime && modalForm.endTime">
  81. {{ modalForm.startTime | timestampFilter }} 至
  82. {{ modalForm.endTime | timestampFilter }}
  83. </span>
  84. <span v-else>--</span>
  85. </span>
  86. </el-form-item>
  87. <el-form-item label="命题老师:">
  88. <!-- <question-teacher-user-select
  89. v-if="editType !== 'PREVIEW' && modalIsShow"
  90. ref="QuestionTeacherSelect"
  91. v-model="modalForm.userId"
  92. class="width-full"
  93. :course-code="modalForm.courseCode"
  94. placeholder="请选择"
  95. ></question-teacher-user-select> -->
  96. <div class="box-justify">
  97. <span>{{ modalForm.userName | defaultFieldFilter }}</span>
  98. <el-button
  99. v-if="editType !== 'PREVIEW'"
  100. type="primary"
  101. @click="toSelectTeacher"
  102. >选择</el-button
  103. >
  104. </div>
  105. </el-form-item>
  106. </el-form>
  107. <div slot="footer">
  108. <el-button
  109. v-if="editType !== 'PREVIEW'"
  110. type="primary"
  111. :disabled="isSubmit"
  112. @click="submit"
  113. >确认</el-button
  114. >
  115. <el-button @click="cancel">取消</el-button>
  116. </div>
  117. </el-dialog>
  118. <!-- SelectQuestionTeacher -->
  119. <select-question-teacher
  120. ref="SelectQuestionTeacher"
  121. :users="teachers"
  122. :course-code="modalForm.courseCode"
  123. @modified="userSelected"
  124. ></select-question-teacher>
  125. </div>
  126. </template>
  127. <script>
  128. import { updateExamTask, updatExamTaskTeacher } from "../api";
  129. import SelectQuestionTeacher from "./SelectQuestionTeacher.vue";
  130. const initModalForm = {
  131. id: null,
  132. semesterId: "",
  133. semesterName: "",
  134. examId: "",
  135. examName: "",
  136. courseCode: "",
  137. courseName: "",
  138. specialty: "",
  139. paperNumber: "",
  140. startTime: "",
  141. endTime: "",
  142. cardRuleId: "",
  143. cardRuleName: "",
  144. userId: "",
  145. userName: ""
  146. };
  147. export default {
  148. name: "modify-exam-task",
  149. components: { SelectQuestionTeacher },
  150. props: {
  151. instance: {
  152. type: Object,
  153. default() {
  154. return {};
  155. }
  156. },
  157. editType: {
  158. type: String,
  159. default: "ADD",
  160. validator: val => ["ADD", "PREVIEW", "EDIT"].includes(val)
  161. }
  162. },
  163. computed: {
  164. title() {
  165. const names = {
  166. ADD: "新增命题任务",
  167. PREVIEW: "命题任务详情",
  168. EDIT: "指派命题任务"
  169. };
  170. return names[this.editType];
  171. },
  172. editable() {
  173. return this.editType === "ADD";
  174. }
  175. },
  176. data() {
  177. return {
  178. modalIsShow: false,
  179. isSubmit: false,
  180. modalForm: {},
  181. createTime: [],
  182. teachers: [],
  183. rules: {
  184. semesterId: [
  185. {
  186. required: true,
  187. message: "请选择学期",
  188. trigger: "change"
  189. }
  190. ],
  191. examId: [
  192. {
  193. required: true,
  194. message: "请选择考试",
  195. trigger: "change"
  196. }
  197. ],
  198. courseCode: [
  199. {
  200. required: true,
  201. message: "请选择课程",
  202. trigger: "change"
  203. }
  204. ],
  205. paperNumber: [
  206. {
  207. required: false,
  208. validator: (rule, value, callback) => {
  209. if (!value) {
  210. return callback();
  211. }
  212. if (value.length < 200) {
  213. callback();
  214. } else {
  215. callback(new Error("试卷编号长度不能超过200"));
  216. }
  217. // if (/^[0-9a-zA-Z]{3,30}$/.test(value)) {
  218. // callback();
  219. // } else {
  220. // callback(new Error("试卷编号只能包含字母数字,长度在3-30之间"));
  221. // }
  222. },
  223. trigger: "change"
  224. }
  225. ],
  226. startTime: [
  227. {
  228. required: true,
  229. message: "请设置命题时间",
  230. trigger: "change"
  231. }
  232. ]
  233. }
  234. };
  235. },
  236. methods: {
  237. initData(val) {
  238. this.modalForm = this.$objAssign(initModalForm, val);
  239. this.createTime = [];
  240. },
  241. visibleChange() {
  242. this.initData(this.instance);
  243. this.$nextTick(() => {
  244. this.$refs.modalFormComp.clearValidate();
  245. });
  246. },
  247. cancel() {
  248. this.modalIsShow = false;
  249. },
  250. open() {
  251. this.modalIsShow = true;
  252. },
  253. dateChange() {
  254. if (this.createTime) {
  255. this.modalForm.startTime = this.createTime[0];
  256. this.modalForm.endTime = this.createTime[1];
  257. } else {
  258. this.modalForm.startTime = "";
  259. this.modalForm.endTime = "";
  260. }
  261. },
  262. courseChange(course) {
  263. this.modalForm.courseName = course.name;
  264. this.modalForm.userId = "";
  265. this.modalForm.userName = "";
  266. this.teachers = [];
  267. },
  268. userSelected(teachers) {
  269. this.teachers = teachers;
  270. this.modalForm.userId = teachers[0].id;
  271. this.modalForm.userName = teachers[0].name;
  272. },
  273. toSelectTeacher() {
  274. if (!this.modalForm.courseCode) {
  275. this.$message.error("请选择课程");
  276. return;
  277. }
  278. this.$refs.SelectQuestionTeacher.open();
  279. },
  280. async submit() {
  281. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  282. if (!valid) return;
  283. if (this.isSubmit) return;
  284. this.isSubmit = true;
  285. let modals = {
  286. ...this.modalForm
  287. };
  288. const func =
  289. this.editType === "ADD" ? updateExamTask : updatExamTaskTeacher;
  290. const data = await func(modals).catch(() => {});
  291. this.isSubmit = false;
  292. if (!data) return;
  293. this.$message.success("保存成功!");
  294. this.$emit("modified");
  295. this.cancel();
  296. }
  297. }
  298. };
  299. </script>