openService.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <!-- -->
  2. <template>
  3. <div class="m-core">
  4. <el-alert
  5. title="开通服务"
  6. type="info"
  7. :closable="false"
  8. style="margin-bottom: 20px"
  9. ></el-alert>
  10. <el-form ref="form" label-position="top" :model="form" label-width="140px" :inline="true">
  11. <el-form-item label="服务名称" prop="serveId"
  12. :rules="[{ required: true, message: '请选择服务名称', trigger: 'change' }]">
  13. <el-select
  14. v-model="form.serveId"
  15. :disabled="isDisabled"
  16. placeholder="请选择服务名称"
  17. @change="onProductChange"
  18. >
  19. <el-option v-for="item in productList" :key="item.id"
  20. :label="item.serveName" :value="item.id"></el-option>
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item label="付费模式" prop="serveMode"
  24. :rules="[{ required: true, message: '请选择付费模式', trigger: 'change' }]">
  25. <el-select
  26. v-model="form.serveMode"
  27. :disabled="isDisabled"
  28. placeholder="请选择付费模式"
  29. @change="onModeChange"
  30. >
  31. <el-option v-for="(item, index) in modeList" :key="index"
  32. :label="paymentMode[item.mode]" :value="item.mode"></el-option>
  33. </el-select>
  34. </el-form-item>
  35. <el-form-item label="学员上限" prop="serveDetailId"
  36. :rules="[{ required: true, message: '请选择学员上限', trigger: 'blur, change' }]">
  37. <el-select
  38. placeholder="请选择学员上限"
  39. :disabled="isDisabled"
  40. @change="onStudentUpLimitChange"
  41. v-model="form.serveDetailId"
  42. >
  43. <el-option v-for="(item, index) in studentUpList" :key="index"
  44. :label="item.studentUpLimit" :value="item.id"></el-option>
  45. </el-select>
  46. </el-form-item>
  47. <el-form-item label="合同价" prop="contractPrice"
  48. :rules="[{ required: true, message: '请输入合同价', trigger: 'blur' },
  49. { type: 'number', message: '合同价必须为数字值' }]">
  50. <el-input
  51. :disabled="isDisabled"
  52. placeholder="请输入合同价"
  53. v-model.number="form.contractPrice"
  54. type="number"
  55. >
  56. <div slot="append">元/{{ unitSuffix }}</div>
  57. </el-input>
  58. </el-form-item>
  59. <el-form-item label="原价" prop="originalPrice"
  60. :rules="[{ required: true, message: '请输入原价', trigger: 'blur' },
  61. { type: 'number', message: '原价必须为数字值' }]">
  62. <el-input
  63. placeholder="请输入原价"
  64. disabled
  65. v-model.number="form.originalPrice"
  66. >
  67. <div slot="append">元/{{ unitSuffix }}</div>
  68. </el-input>
  69. </el-form-item>
  70. <el-form-item label="有效期" prop="expiryCount"
  71. :rules="[{ required: true, message: '请输入有效期', trigger: 'blur' },
  72. { type: 'number', message: '有效期必须为数字值' }]">
  73. <el-input
  74. :disabled="isDisabled"
  75. type="number"
  76. v-model.number="form.expiryCount"
  77. placeholder="请输入有效期"
  78. >
  79. <div slot="append">{{ unitSuffix }}</div>
  80. </el-input>
  81. </el-form-item>
  82. <el-form-item label="开通价格" prop="payAmount"
  83. :rules="[{ required: true, message: '请输入开通价格', trigger: 'blur' },
  84. { type: 'number', message: '开通价格必须为数字值' }]">
  85. <el-input
  86. placeholder="请输入开通价格"
  87. type="number"
  88. v-model.number="form.payAmount"
  89. :disabled="isDisabled"
  90. >
  91. <div slot="append">元</div>
  92. </el-input>
  93. </el-form-item>
  94. </el-form>
  95. </div>
  96. </template>
  97. <script>
  98. import { platformServeQueryPage, platformServeQueryModeDetail } from '@/views/platformManager/serviceManager/api'
  99. import { paymentMode } from '@/constant'
  100. export default {
  101. props: ['type', 'data'],
  102. data () {
  103. return {
  104. paymentMode,
  105. form: {
  106. serveId: null,
  107. serveMode: null,
  108. serveDetailId: null,
  109. studentUpLimit: null,
  110. expiryUnit: null,
  111. contractPrice: null,
  112. originalPrice: null,
  113. expiryCount: null,
  114. payAmount: null
  115. },
  116. payState: null,
  117. productList: [],
  118. modeList: [],
  119. studentUpList: [], // 学员上限列表
  120. };
  121. },
  122. async mounted () {
  123. await this.__init()
  124. if(this.data) {
  125. const data = this.data
  126. this.payState = data.payState
  127. data.serveId ? (await this.onProductChange(data.serveId)) : null
  128. this.form = data
  129. this.form.serveMode = data.expiryUnit
  130. data.serveDetailId ? (await this.onModeChange(data.expiryUnit, 'none')) : null
  131. }
  132. },
  133. computed: {
  134. isDisabled() {
  135. console.log(this.payState)
  136. return this.type == 'setting' || this.payState == 1 ? true : false
  137. },
  138. unitSuffix() {
  139. // 后辍默认为年
  140. return this.paymentMode[this.form.expiryUnit] || '年'
  141. }
  142. },
  143. methods: {
  144. async __init() {
  145. try {
  146. const res = await platformServeQueryPage({ page: 1, rows: 999 })
  147. this.productList = res.data?.rows || []
  148. } catch(e) {}
  149. },
  150. async onProductChange(val) {
  151. const form = this.form
  152. try {
  153. const res = await platformServeQueryModeDetail({ id: val })
  154. this.modeList = res.data || []
  155. } catch(e) { console.log(e) }
  156. },
  157. onSubmit() {
  158. let status = false
  159. this.$refs.form.validate(_ => {
  160. status = _
  161. })
  162. return status
  163. },
  164. getValues() {
  165. return this.form
  166. },
  167. onModeChange(val, type) { // 付费模式改变时
  168. const form = this.form
  169. for(let item of (this.modeList || [])) {
  170. if(val == item.mode) {
  171. this.studentUpList = item.list || []
  172. form.expiryUnit = item.mode
  173. // ...
  174. if(type != 'none') {
  175. form.serveDetailId = null // 学员上限
  176. form.originalPrice = null // 重置原价
  177. }
  178. }
  179. }
  180. },
  181. onStudentUpLimitChange(val) {
  182. const form = this.form
  183. for(let item of (this.studentUpList || [])) {
  184. if(val == item.id) {
  185. form.serveDetailId = item.id
  186. form.originalPrice = item.originalPrice
  187. }
  188. }
  189. }
  190. },
  191. };
  192. </script>
  193. <style lang='scss' scoped>
  194. .el-input, .el-select {
  195. width: 300px !important;
  196. }
  197. </style>