ModifyExamTask.vue 6.3 KB

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