PaperBuildConfig.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <template>
  2. <div class="paper-build-config">
  3. <el-form
  4. ref="modalFormComp"
  5. :model="modalForm"
  6. :rules="rules"
  7. size="small"
  8. inline
  9. >
  10. <el-form-item label="页数模式:">
  11. <el-radio-group v-model="modalForm.pageCountMode" style="width: 160px">
  12. <el-radio-button label="SIMPLE">单页</el-radio-button>
  13. <el-radio-button label="DOUBLE">双页</el-radio-button>
  14. </el-radio-group>
  15. </el-form-item>
  16. <el-form-item>
  17. <el-checkbox v-model="modalForm.showDetailNo"
  18. >是否显示大题序号</el-checkbox
  19. >
  20. </el-form-item>
  21. <el-form-item>
  22. <el-checkbox v-model="modalForm.showDetailScoreInfo"
  23. >是否显示大题分值说明</el-checkbox
  24. >
  25. </el-form-item>
  26. <el-form-item>
  27. <el-checkbox v-model="modalForm.showDetailScoreTable"
  28. >是否显示大题给分板</el-checkbox
  29. >
  30. </el-form-item>
  31. <br />
  32. <el-form-item
  33. v-for="item in sources"
  34. :key="item.field"
  35. :label="`${item.name}:`"
  36. :prop="item.field"
  37. >
  38. <el-radio-group
  39. v-if="item.options"
  40. v-model="modalForm[item.field]"
  41. style="width: 100px"
  42. >
  43. <el-radio-button
  44. v-for="option in item.options"
  45. :key="option"
  46. :label="option"
  47. ></el-radio-button>
  48. </el-radio-group>
  49. <el-input
  50. v-else
  51. v-model.trim="modalForm[item.field]"
  52. maxlength="5"
  53. :placeholder="`请输入${item.name}`"
  54. >
  55. <span v-if="item.unit" slot="append">{{ item.unit }}</span>
  56. </el-input>
  57. </el-form-item>
  58. <el-form-item v-if="showConfirmBtn">
  59. <el-button type="primary" @click="confirm">确定</el-button>
  60. </el-form-item>
  61. </el-form>
  62. </div>
  63. </template>
  64. <script>
  65. const initModalForm = {
  66. showDetailNo: true,
  67. showDetailScoreInfo: true,
  68. showDetailScoreTable: false,
  69. pageCountMode: "SIMPLE",
  70. };
  71. export default {
  72. name: "PaperBuildConfig",
  73. props: {
  74. configSources: {
  75. type: Array,
  76. default() {
  77. return [];
  78. },
  79. },
  80. showConfirmBtn: {
  81. type: Boolean,
  82. default: true,
  83. },
  84. },
  85. data() {
  86. return {
  87. modalForm: {
  88. ...initModalForm,
  89. },
  90. rules: {},
  91. sources: [],
  92. };
  93. },
  94. watch: {
  95. configSources: {
  96. immediate: true,
  97. handler() {
  98. this.initModalForm();
  99. },
  100. },
  101. },
  102. methods: {
  103. initModalForm() {
  104. let modalForm = { ...initModalForm };
  105. let rules = {};
  106. this.sources = this.configSources.filter((item) => item.enable);
  107. this.sources.forEach((item) => {
  108. modalForm[item.field] = "";
  109. rules[item.field] = {
  110. required: true,
  111. message: `请设置${item.name}`,
  112. trigger: "change",
  113. };
  114. });
  115. this.modalForm = modalForm;
  116. this.rules = rules;
  117. },
  118. checkData() {
  119. return this.$refs.modalFormComp.validate();
  120. },
  121. getData() {
  122. return { ...this.modalForm };
  123. },
  124. async confirm() {
  125. const valid = await this.$refs.modalFormComp.validate().catch(() => {});
  126. if (!valid) return;
  127. this.$emit("confirm", this.getData());
  128. },
  129. },
  130. };
  131. </script>