RuleExam.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <div class="rule-exam part-box part-box-pad part-box-border">
  3. <h4 class="part-box-tips">变量印刷考务字段配置:</h4>
  4. <el-form ref="modalFormComp" :model="modalForm" label-width="170px">
  5. <el-form-item label="必选字段:" required>
  6. <el-checkbox
  7. v-for="field in modalForm.requiredFields"
  8. :key="field.code"
  9. v-model="field.enable"
  10. disabled
  11. >{{ field.name }}</el-checkbox
  12. >
  13. </el-form-item>
  14. <el-form-item label="扩展字段:">
  15. <div class="part-box part-box-pad part-box-border">
  16. <div class="label-edit">
  17. <div
  18. v-for="field in modalForm.extendFields"
  19. :key="field.code"
  20. class="label-item"
  21. >
  22. <el-checkbox
  23. v-model="field.enable"
  24. class="label-item-content"
  25. @change="validateExtendFields"
  26. >{{ field.name }}</el-checkbox
  27. >
  28. <i
  29. class="label-item-delete el-icon-error"
  30. @click="deleteField(field)"
  31. ></i>
  32. </div>
  33. <div class="label-add" @click="toAddField">
  34. <i class="el-icon-plus"></i><i>添加</i>
  35. </div>
  36. </div>
  37. </div>
  38. </el-form-item>
  39. <el-form-item label="是否启用入库审核:" required>
  40. <el-switch v-model="modalForm.review" inactive-color="#dcdfe6">
  41. </el-switch>
  42. </el-form-item>
  43. <el-form-item label="入库强制包含试卷:" required>
  44. <el-switch v-model="modalForm.includePaper" inactive-color="#dcdfe6">
  45. </el-switch>
  46. <p class="tips-info">
  47. 注意:若入库时非强制包含试卷,适用于同时有课程要求打印试卷,有的课程不打印试卷的场景。因此,印刷计划里即使勾选了“试卷”,有试卷则打印,否则不打印。
  48. </p>
  49. </el-form-item>
  50. <el-form-item label="提交印刷方式:" required>
  51. <el-radio-group v-model="modalForm.printMethod">
  52. <el-radio
  53. v-for="(val, key) in CONFIRM_PRINT_TYPE"
  54. :key="key"
  55. :label="key"
  56. >{{ val }}</el-radio
  57. >
  58. </el-radio-group>
  59. </el-form-item>
  60. <el-form-item>
  61. <el-button
  62. type="primary"
  63. :disabled="isSubmit"
  64. style="width: 140px"
  65. @click="submit"
  66. >保存</el-button
  67. >
  68. </el-form-item>
  69. </el-form>
  70. <!-- ModifyField -->
  71. <modify-field ref="ModifyField" @confirm="addField"></modify-field>
  72. </div>
  73. </template>
  74. <script>
  75. import ModifyField from "../components/ModifyField";
  76. import { CONFIRM_PRINT_TYPE } from "@/constants/enumerate";
  77. import { examRuleDetail, saveExamRule } from "../api";
  78. import { getEnums } from "../../login/api";
  79. const initModalForm = {
  80. id: null,
  81. review: true,
  82. includePaper: true,
  83. printMethod: "AUTO",
  84. requiredFields: "[]",
  85. extendFields: "[]"
  86. };
  87. export default {
  88. name: "rule-exam",
  89. components: { ModifyField },
  90. data() {
  91. return {
  92. modalForm: { ...initModalForm },
  93. isSubmit: false,
  94. CONFIRM_PRINT_TYPE
  95. };
  96. },
  97. mounted() {
  98. this.init();
  99. },
  100. methods: {
  101. async init() {
  102. const requiredFields = await getEnums("REQUIRED_FIELDS");
  103. const examRule = await examRuleDetail();
  104. this.modalForm = Object.assign(initModalForm, examRule || {});
  105. this.modalForm.requiredFields = requiredFields.map(item => {
  106. return {
  107. code: item.code,
  108. name: item.desc,
  109. enable: true
  110. };
  111. });
  112. console.log(this.modalForm.extendFields);
  113. this.modalForm.extendFields = JSON.parse(this.modalForm.extendFields);
  114. },
  115. validateRequiredFields() {
  116. this.$refs.modalFormComp.validateField("requiredFields");
  117. },
  118. validateExtendFields() {
  119. this.$refs.modalFormComp.validateField("extendFields");
  120. },
  121. toAddField() {
  122. this.$refs.ModifyField.open();
  123. },
  124. addField(field) {
  125. this.modalForm.extendFields.push({ ...field });
  126. },
  127. deleteField(field) {
  128. const index = this.modalForm.extendFields.findIndex(
  129. item => item.code === field.code
  130. );
  131. if (index !== -1) this.modalForm.extendFields.splice(index, 1);
  132. this.validateExtendFields();
  133. },
  134. async submit() {
  135. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  136. if (!valid) return;
  137. if (this.isSubmit) return;
  138. this.isSubmit = true;
  139. let datas = {
  140. ...this.modalForm
  141. };
  142. datas.requiredFields = JSON.stringify(datas.requiredFields);
  143. datas.extendFields = JSON.stringify(datas.extendFields);
  144. const data = await saveExamRule(datas).catch(() => {});
  145. this.isSubmit = false;
  146. if (!data) return;
  147. this.modalForm.id = data;
  148. this.$message.success("保存成功!");
  149. }
  150. }
  151. };
  152. </script>