extra-class-user.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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. :header-cell-style="{ background: '#EDEEF0', color: '#444' }"
  10. >
  11. <el-table-column
  12. label="学员姓名"
  13. prop="username"></el-table-column>
  14. <el-table-column
  15. label="手机号码"
  16. prop="phone"></el-table-column>
  17. <el-table-column
  18. label="课程类型"
  19. prop="courseType"
  20. key="courseType"
  21. width="150">
  22. <template slot-scope="scope">
  23. {{courseType[list.form[scope.$index].courseType]}}
  24. </template>
  25. </el-table-column>
  26. <el-table-column
  27. label="课程时长(分钟)"
  28. prop="courseTime"
  29. width="130"></el-table-column>
  30. <el-table-column
  31. label="现价(元)"
  32. prop="courseCurrentPrice"
  33. key="courseCurrentPrice"
  34. width="140">
  35. <template slot="header">
  36. <p style="position: relative">
  37. 现价(元)
  38. <el-tooltip placement="top" popper-class="mTooltip">
  39. <div slot="content">学生实际缴费金额</div>
  40. <i
  41. class="el-icon-question"
  42. style="font-size: 18px; color: #f56c6c"
  43. ></i>
  44. </el-tooltip>
  45. </p>
  46. </template>
  47. <template slot-scope="scope">
  48. <el-form-item
  49. class="tableItem"
  50. :prop="'form.' + scope.$index + '.courseCurrentPrice'"
  51. :rules="{ required: true, message: '请输入现价', trigger: 'blur' }"
  52. >
  53. <!-- $listeners.moneyChange -->
  54. <el-input-number
  55. size="small"
  56. style="width: 90%!important;"
  57. class="number-input"
  58. v-model="list.form[scope.$index].courseCurrentPrice"
  59. :controls="false"
  60. :precision="0"
  61. :min="0"
  62. placeholder="请输入现价"
  63. />
  64. </el-form-item>
  65. </template>
  66. </el-table-column>
  67. <el-table-column
  68. prop="courseOriginalPrice"
  69. key="courseOriginalPrice"
  70. label="原价(元)"
  71. width="140">
  72. <template slot-scope="scope">
  73. <el-form-item
  74. class="tableItem"
  75. :prop="'form.' + scope.$index + '.courseOriginalPrice'"
  76. :rules="{ required: true, message: '请输入原价', trigger: 'blur' }"
  77. >
  78. <el-input-number
  79. size="small"
  80. style="width: 90%!important;"
  81. class="number-input"
  82. v-model="list.form[scope.$index].courseOriginalPrice"
  83. :controls="false"
  84. :precision="0"
  85. :min="0"
  86. placeholder="请输入原价"
  87. />
  88. </el-form-item>
  89. </template>
  90. </el-table-column>
  91. <el-table-column
  92. v-if="clearable && $listeners.remove"
  93. prop="close"
  94. key="close"
  95. width="60">
  96. <template slot-scope="scope">
  97. <i
  98. v-if="form.length > 1"
  99. @click="$listeners.remove && $listeners.remove(scope.$index)"
  100. class="el-icon-circle-close"
  101. style="margin-bottom: 24px;cursor: pointer;"
  102. ></i>
  103. </template>
  104. </el-table-column>
  105. </el-table>
  106. <el-button
  107. icon="el-icon-circle-plus-outline"
  108. plain
  109. v-if="!isCommon && $listeners.create"
  110. type="info"
  111. size="small"
  112. style="width: 100%;margin: 20px 0;"
  113. @click="$listeners.create"
  114. >新增课程类型</el-button>
  115. </el-form>
  116. </template>
  117. <script>
  118. import { courseType, boolOptions } from '@/constant'
  119. import { objectToOptions } from '@/utils'
  120. import { classTimeList, array2object } from '@/utils/searchArray'
  121. import numeral from 'numeral'
  122. import MusicStore from '@/views/resetTeaming/store'
  123. export default {
  124. props: ['form', 'isCommon', 'isDisabled', 'isUserType', 'courseUnitPriceSettingsByType', 'clearable'],
  125. data() {
  126. return {
  127. courseType,
  128. courseTypeOptions: this.courseUnitPriceSettingsByType,
  129. boolOptionsOptions: objectToOptions(boolOptions),
  130. }
  131. },
  132. computed: {
  133. list() {
  134. return {
  135. form: this.form
  136. }
  137. },
  138. classTimeList() {
  139. return array2object(classTimeList)
  140. },
  141. },
  142. methods: {
  143. isOptionDisabled(key) {
  144. const selected = this.form.map(item => item.courseType)
  145. return selected.includes(key)
  146. },
  147. getOldMoney(index) {
  148. return numeral(this.list.form[index].courseTotalMinuties * this.list.form[index].unitPrice).format('0,0.00')
  149. },
  150. validatorCourseTotalMinuties(index) {
  151. return (rule, value, callback) => {
  152. const { courseType } = this.list.form[index]
  153. if (courseType && value > 1 && this.classTimeList[courseType] && value < this.classTimeList[courseType]) {
  154. callback(new Error(`单节课不得少于${this.classTimeList[courseType]}分钟`))
  155. return
  156. }
  157. callback()
  158. }
  159. }
  160. },
  161. }
  162. </script>
  163. <style lang="less" scoped>
  164. .number-input{
  165. /deep/ .el-input__inner {
  166. text-align: left;
  167. }
  168. }
  169. .tableItem {
  170. margin-bottom: 0!important;
  171. }
  172. </style>