extra-class.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <template>
  2. <el-form
  3. ref="form"
  4. :model="list"
  5. >
  6. <el-table
  7. :data="form"
  8. style="width: 100%;text-alogn: center;"
  9. >
  10. <el-table-column
  11. label="课程类型"
  12. width="150">
  13. <template slot-scope="scope">
  14. <el-form-item
  15. :prop="'form.' + scope.$index + '.courseType'"
  16. :rules="{ required: true, message: '请选择课程类型', trigger: 'change' }"
  17. >
  18. <el-select
  19. style="width: 90%!important;"
  20. size="small"
  21. v-model="list.form[scope.$index].courseType"
  22. placeholder="课程类型"
  23. clearable
  24. >
  25. <el-option
  26. v-for="(item, index) in courseTypeOptions"
  27. :key="index"
  28. :label="item.label"
  29. :value="item.value"
  30. ></el-option>
  31. </el-select>
  32. </el-form-item>
  33. </template>
  34. </el-table-column>
  35. <el-table-column
  36. label="是否可选"
  37. width="150">
  38. <template slot-scope="scope">
  39. <el-form-item
  40. :prop="'form.' + scope.$index + '.isStudentOptional'"
  41. :rules="{ required: true, message: '请选择是否可选', trigger: 'change' }"
  42. >
  43. <el-select
  44. style="width: 90%!important;"
  45. size="small"
  46. v-model="list.form[scope.$index].isStudentOptional"
  47. placeholder="是否可选"
  48. clearable
  49. >
  50. <el-option
  51. v-for="(item, index) in boolOptionsOptions"
  52. :key="index"
  53. :label="item.label"
  54. :value="item.value"
  55. ></el-option>
  56. </el-select>
  57. </el-form-item>
  58. </template>
  59. </el-table-column>
  60. <el-table-column
  61. label="课程时长(分钟)"
  62. width="150">
  63. <template slot-scope="scope">
  64. <el-form-item
  65. :prop="'form.' + scope.$index + '.courseTotalMinuties'"
  66. :rules="{ required: true, message: '请输入课程时长', trigger: 'blur' }"
  67. >
  68. <el-input-number
  69. size="small"
  70. style="width: 90%!important;"
  71. class="number-input"
  72. v-model="list.form[scope.$index].courseTotalMinuties"
  73. :controls="false"
  74. :precision="0"
  75. :min="1"
  76. placeholder="课程时长"
  77. />
  78. </el-form-item>
  79. </template>
  80. </el-table-column>
  81. <el-table-column
  82. label="现价(元)"
  83. width="120">
  84. </el-table-column>
  85. <el-table-column
  86. label="原价(元)"
  87. width="100">
  88. <template slot-scope="scope">
  89. {{ getOldMoney(scope.$index) }}
  90. </template>
  91. </el-table-column>
  92. <el-table-column
  93. width="60">
  94. <template slot-scope="scope">
  95. <i v-if="form.length > 1" @click="$listeners.remove(scope.$index)" class="el-icon-circle-close"></i>
  96. </template>
  97. </el-table-column>
  98. </el-table>
  99. <el-button
  100. icon="el-icon-circle-plus-outline"
  101. plain
  102. type="info"
  103. size="small"
  104. style="width: 100%;margin: 20px 0;"
  105. @click="$listeners.create"
  106. >新增课程类型</el-button>
  107. </el-form>
  108. </template>
  109. <script>
  110. import { courseType, boolOptions } from '@/constant'
  111. import { objectToOptions } from '@/utils'
  112. import numeral from 'numeral'
  113. export default {
  114. props: ['form'],
  115. data() {
  116. return {
  117. courseTypeOptions: objectToOptions(courseType),
  118. boolOptionsOptions: objectToOptions(boolOptions),
  119. }
  120. },
  121. computed: {
  122. list() {
  123. return {
  124. form: this.form
  125. }
  126. }
  127. },
  128. methods: {
  129. getOldMoney(index) {
  130. return numeral(this.list.form[index].courseTotalMinuties * this.list.form[index].unitPrice).format('0,0.00')
  131. }
  132. },
  133. }
  134. </script>
  135. <style lang="less" scoped>
  136. .number-input{
  137. /deep/ .el-input__inner {
  138. text-align: left;
  139. }
  140. }
  141. </style>