RulePackage.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <template>
  2. <div class="rule-package part-box part-box-pad">
  3. <h4 class="part-box-tips">卷袋贴字段配置:</h4>
  4. <el-form
  5. ref="modalFormComp"
  6. :model="modalForm"
  7. :rules="rules"
  8. label-width="170px"
  9. >
  10. <el-form-item prop="packageScope" label="卷袋贴显示字段:">
  11. <rule-field-edit
  12. v-model="modalForm.packageScope"
  13. :data="fieldSources"
  14. @change="validateField('packageScope')"
  15. ></rule-field-edit>
  16. </el-form-item>
  17. <el-form-item>
  18. <el-button
  19. type="primary"
  20. :disabled="isSubmit"
  21. style="width: 140px"
  22. @click="submit"
  23. >保存</el-button
  24. >
  25. </el-form-item>
  26. </el-form>
  27. </div>
  28. </template>
  29. <script>
  30. import { examRuleDetail, saveExamRule } from "../api";
  31. import RuleFieldEdit from "./RuleFieldEdit.vue";
  32. export default {
  33. name: "rule-package",
  34. components: {
  35. RuleFieldEdit,
  36. },
  37. data() {
  38. return {
  39. isSubmit: false,
  40. examRule: {},
  41. fieldSources: [],
  42. modalForm: {
  43. packageScope: [],
  44. },
  45. rules: {
  46. packageScope: [
  47. {
  48. required: true,
  49. validator: (rule, value, callback) => {
  50. if (!value || !value.length) {
  51. return callback(new Error(`请选择卷袋贴显示字段`));
  52. }
  53. callback();
  54. },
  55. trigger: "change",
  56. },
  57. ],
  58. },
  59. };
  60. },
  61. mounted() {
  62. this.getFields();
  63. },
  64. methods: {
  65. async getFields() {
  66. const examRule = await examRuleDetail();
  67. this.examRule = examRule;
  68. let fields = [...JSON.parse(examRule.requiredFields)];
  69. if (examRule.extendFields)
  70. fields.push(...JSON.parse(examRule.extendFields));
  71. this.fieldSources = fields
  72. .filter((item) => item.enable)
  73. .map((item) => {
  74. return {
  75. code: item.code,
  76. name: item.name,
  77. };
  78. });
  79. const packageScope = examRule.packageScope
  80. ? JSON.parse(examRule.packageScope)
  81. : { basic: [] };
  82. this.modalForm.packageScope = packageScope.basic;
  83. },
  84. validateField(field) {
  85. this.$refs.modalFormComp.validateField(field, () => {});
  86. },
  87. async submit() {
  88. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  89. if (!valid) return;
  90. if (this.isSubmit) return;
  91. this.isSubmit = true;
  92. this.examRule.packageScope = JSON.stringify({
  93. title: [
  94. {
  95. code: "semesterName",
  96. name: "学期",
  97. disabled: false,
  98. enable: false,
  99. },
  100. ],
  101. basic: this.modalForm.packageScope,
  102. });
  103. const data = await saveExamRule(this.examRule).catch(() => {});
  104. this.isSubmit = false;
  105. if (!data) return;
  106. this.$message.success("保存成功!");
  107. },
  108. },
  109. };
  110. </script>