create-discount.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <template>
  2. <div>
  3. <el-form :model="form"
  4. ref="form">
  5. <el-form-item label="声部选择"
  6. prop="subjectId"
  7. :label-width="formLabelWidth"
  8. :rules="[{ required: true, message: '请选择声部', trigger: 'change' }]">
  9. <el-select v-model.trim="form.subjectId"
  10. filterable
  11. style="width: 100%!important;"
  12. placeholder="请选择声部组合"
  13. clearable>
  14. <el-option-group v-for="group in subjectList"
  15. :key="group.id"
  16. :label="group.label">
  17. <el-option v-for="item in group.options"
  18. :key="item.value"
  19. :label="item.label"
  20. :value="item.value">
  21. </el-option>
  22. </el-option-group>
  23. </el-select>
  24. </el-form-item>
  25. <el-form-item v-for="item in typesList"
  26. :key="item.value"
  27. :label="item.label + '折扣(%)'"
  28. :prop="`types.${item.value}`"
  29. :label-width="formLabelWidth"
  30. :rules="[
  31. { required: true, message: '请输入折扣', trigger: 'blur' },
  32. { pattern: /^\d+(\.\d{1,8})?$/, message: '请输入正确的折扣' }
  33. ]">
  34. <el-input v-model.trim="form.types[item.value]"
  35. autocomplete="off"
  36. type="number"
  37. placeholder="请输入折扣"
  38. controls-position="right"
  39. class="number-input"
  40. min="0"
  41. max="100"></el-input>
  42. </el-form-item>
  43. </el-form>
  44. <span slot="footer"
  45. class="dialog-footer">
  46. <el-button @click="$listeners.close">取 消</el-button>
  47. <el-button type="primary"
  48. @click="submit">确 定</el-button>
  49. </span>
  50. </div>
  51. </template>
  52. <script>
  53. import { insertChargeTypeSubjectMapper } from '@/api/specialSetting'
  54. import { listeners } from 'process';
  55. export default {
  56. props: ['typesList', 'subjectList'],
  57. data () {
  58. return {
  59. formLabelWidth: '130px',
  60. form: {
  61. subjectId: '',
  62. types: {},
  63. }
  64. }
  65. },
  66. methods: {
  67. submit () {
  68. this.$refs.form.validate(async valid => {
  69. if (valid) {
  70. const data = []
  71. for (const key in this.form.types) {
  72. if (this.form.types.hasOwnProperty(key)) {
  73. const item = this.form.types[key];
  74. data.push({
  75. chargeTypeId: key,
  76. subjectId: this.form.subjectId,
  77. goodsDiscountRate: item
  78. })
  79. }
  80. }
  81. try {
  82. await insertChargeTypeSubjectMapper(data)
  83. this.$message.success('创建成功')
  84. this.$listeners.submited()
  85. this.$listeners.close()
  86. } catch (error) { }
  87. }
  88. })
  89. }
  90. },
  91. };
  92. </script>
  93. <style lang="less" scoped>
  94. .dialog-footer {
  95. display: block;
  96. text-align: right;
  97. }
  98. .number-input {
  99. ::v-deep .el-input__inner {
  100. text-align: left;
  101. }
  102. width: 100%;
  103. }
  104. </style>