ModifyExamTask.vue 6.5 KB

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