detail.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="form" :rules="rules" ref="form" label-width="100px">
  4. <el-form-item label="关联设备:">
  5. <el-select v-model="deviceIds" multiple placeholder="请选择关联设备">
  6. <el-option v-for="item in devOptions" :key="item.value" :label="item.label" :value="item.value.toString()" />
  7. </el-select>
  8. </el-form-item>
  9. <el-form-item :label="form.typeList[0] === '12' ? '流量名称:' : '套餐名称:'">
  10. <el-input v-model="form.name" placeholder="请输入套餐名称" />
  11. </el-form-item>
  12. <el-form-item label="服务类型:">
  13. <el-select v-model="form.businessType" placeholder="请选择服务类型"
  14. :disabled="form.id && form.typeList[0] === '12' ? true : false">
  15. <el-option v-for="item in serviceTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item v-if="form.typeList[0] === '13'" label="资源平台:">
  19. <el-select v-model="form.platformId" placeholder="请选择资源平台">
  20. <el-option v-for="item in platformOptions" :key="item.value" :label="item.label" :value="item.value" />
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item v-else label="流量套餐:">
  24. <el-select v-model="form.goodsId" placeholder="请选择流量套餐" :disabled="form.id ? true : false">
  25. <el-option v-for="(item, index) in goodsOptions" :key="index" :label="item" :value="index" />
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item v-if="form.platformId === 10" label="栏目:">
  29. <el-select v-model="form.groupId" placeholder="请选择爱听栏目">
  30. <el-option v-for="item in sceneOptions" :key="item.value" :value="item.value" :label="item.label" />
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item label="原价:" prop="price">
  34. <el-input-number v-model="form.price" :min="0" :max="500" :controls="false" :precision="2"
  35. placeholder="请输入原价" />
  36. </el-form-item>
  37. <el-form-item label="活动价:" prop="discount">
  38. <el-input-number v-model="form.discount" :min="0" :max="500" :controls="false" :precision="2"
  39. placeholder="请输入活动价" />
  40. </el-form-item>
  41. <el-form-item label="服务时长:">
  42. <el-select v-model="form.indate" placeholder="请选择服务时长">
  43. <el-option v-for="item in serviceTimeOptions" :key="item.value" :label="item.label" :value="item.value" />
  44. </el-select>
  45. </el-form-item>
  46. <el-form-item label="是否推荐:">
  47. <el-select v-model="form.isRecommend" placeholder="请选择是否推荐">
  48. <el-option v-for="item in recommendOptions" :key="item.value" :label="item.label" :value="item.value" />
  49. </el-select>
  50. </el-form-item>
  51. <el-form-item label="排序:" v-if="form.businessType === 5">
  52. <el-input-number v-model="form.sort" :min="1" />
  53. </el-form-item>
  54. <el-form-item>
  55. <el-button @click="cancel">取消</el-button>
  56. <el-button type="primary" @click="getSubmit">提交</el-button>
  57. </el-form-item>
  58. </el-form>
  59. </div>
  60. </template>
  61. <script>
  62. import { devMixin, serviceTimeMixin, serviceTypeMixin } from '@/mixin/index'
  63. import { list } from '@/api/operation/scene'
  64. import { detail, edit, create, goodsList } from '@/api/service/package'
  65. export default {
  66. mixins: [devMixin, serviceTimeMixin, serviceTypeMixin],
  67. data() {
  68. let checkedPrice = (rule, value, callback) => {
  69. if (Number(value) > 500) {
  70. callback(new Error('原价不得超过500'))
  71. } else {
  72. if (this.form.discount !== undefined) {
  73. this.$refs.form.validateField('discount')
  74. }
  75. callback()
  76. }
  77. }
  78. let checkedDiscount = (rule, value, callback) => {
  79. if (Number(value) > Number(this.form.price)) {
  80. callback(new Error('活动价不得大于原价!'))
  81. } else {
  82. callback()
  83. }
  84. }
  85. return {
  86. // 表单
  87. form: {
  88. typeList: this.$route.query.typeList.split(',')
  89. },
  90. // 流量套餐
  91. goodsOptions: [],
  92. // 爱听专区
  93. sceneOptions: [],
  94. // 关联设备
  95. deviceIds: [],
  96. // 资源平台
  97. platformOptions: [{
  98. value: 6,
  99. label: 'QQ音乐'
  100. }, {
  101. value: 9,
  102. label: '酷狗音乐'
  103. }, {
  104. value: 10,
  105. label: '爱听音乐'
  106. }],
  107. // 是否推荐
  108. recommendOptions: [{
  109. value: 0,
  110. label: '是'
  111. }, {
  112. value: 1,
  113. label: '否'
  114. }],
  115. // 校验
  116. rules: {
  117. price: [{
  118. validator: checkedPrice,
  119. trigger: 'blur'
  120. }],
  121. discount: [{
  122. validator: checkedDiscount,
  123. trigger: 'blur'
  124. }]
  125. }
  126. }
  127. },
  128. watch: {
  129. deviceIds(val) {
  130. this.form.deviceIds = val.join(',')
  131. }
  132. },
  133. mounted() {
  134. this.form.typeList[0] === '12' ? this.getGoodSList() : this.getSceneList()
  135. if (this.$route.query.id) {
  136. this.form.id = this.$route.query.id
  137. this.getList()
  138. }
  139. },
  140. methods: {
  141. // 详情
  142. getList() {
  143. detail(this.form.id).then(res => {
  144. if (res.code === 0) {
  145. this.form = res.data
  146. this.deviceIds = res.data.deviceIds.split(',')
  147. }
  148. })
  149. },
  150. // 流量套餐
  151. getGoodSList() {
  152. goodsList().then(res => {
  153. if (res.code === 0) {
  154. this.goodsOptions = res.data
  155. }
  156. })
  157. },
  158. // 爱听专区
  159. getSceneList() {
  160. list().then(res => {
  161. if (res.code === 0) {
  162. res.data.map(i => {
  163. this.sceneOptions.push({
  164. value: i.id,
  165. label: i.name
  166. })
  167. })
  168. }
  169. })
  170. },
  171. // 提交
  172. getSubmit() {
  173. this.$refs.form.validate((valid) => {
  174. if (valid) {
  175. if (this.form.id) {
  176. edit(this.form).then(res => {
  177. if (res.code === 0) {
  178. this.$message.success('修改成功!')
  179. this.cancel()
  180. }
  181. })
  182. } else {
  183. create(this.form).then(res => {
  184. if (res.code === 0) {
  185. this.$message.success('新增成功!')
  186. this.cancel()
  187. }
  188. })
  189. }
  190. } else {
  191. return false
  192. }
  193. })
  194. },
  195. // 取消
  196. cancel() {
  197. let url = this.form.typeList[0] === '13' ? 'musicPackage' : 'flowPackage'
  198. this.$tab.closeOpenPage(`/service/${url}?typeList=${this.form.typeList}`);
  199. }
  200. }
  201. }
  202. </script>
  203. <style lang="scss" scoped>
  204. .el-form {
  205. width: 500px;
  206. }
  207. </style>