RuleExam.vue 5.1 KB

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