detail.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="form" ref="form" :rules="rules" label-width="110px" :disabled="disabled">
  4. <el-form-item label="电台名称:" prop="name">
  5. <el-input v-model="form.name" placeholder="请输入电台名称" />
  6. </el-form-item>
  7. <el-form-item label="资源平台:" prop="platformId">
  8. <el-select v-model="form.platformId" placeholder="请选择资源平台" :disabled="disabledPlatformId(form.platformId)">
  9. <el-option v-for="item in platformOptions" :key="item.value" :value="item.value" :label="item.label"
  10. :disabled="disabledJoinType(item.joinType)" />
  11. </el-select>
  12. </el-form-item>
  13. <el-form-item label="城市筛选:" prop="cascader">
  14. <el-cascader v-model="form.cascader" :options="mapOptions" placeholder="请选择省市区" clearable
  15. :props="{ value: 'id', label: 'name', children: 'childList', checkStrictly: true }" style="width: 100%" />
  16. </el-form-item>
  17. <el-form-item v-if="form.platformId !== 4" label="地域分类:" prop="addressClassifyId">
  18. <el-select v-model="form.addressClassifyId" placeholder="请选择地域分类">
  19. <el-option v-for="item in addressOptions" :key="item.value" :value="item.value.toString()"
  20. :label="item.label" />
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item label="广播分类:" prop="contentClassifyId">
  24. <el-select v-model="form.contentClassifyId" placeholder="请选择广播分类">
  25. <el-option v-for="item in contentOptions" :key="item.value" :value="item.value.toString()"
  26. :label="item.label" />
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item label="电台简介:" prop="description">
  30. <el-input v-model="form.description" type="textarea" rows="5" maxlength="300" show-word-limit
  31. placeholder="请输入电台简介" />
  32. </el-form-item>
  33. <el-form-item label="非加速链接:" prop="noStreamUrl">
  34. <el-input v-model="form.noStreamUrl" placeholder="请输入非加速链接" />
  35. </el-form-item>
  36. <el-form-item label="加速链接:" prop="fullUrl">
  37. <el-input v-model="form.fullUrl" placeholder="请输入加速链接" />
  38. </el-form-item>
  39. <el-form-item label="电台封面:" prop="thumb">
  40. <Upload listType="picture-card" :url="form.thumb" @upload="upload" :disabled="disabled" />
  41. </el-form-item>
  42. </el-form>
  43. <div style="margin-left: 110px">
  44. <el-button @click="cancel">取消</el-button>
  45. <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
  46. </div>
  47. </div>
  48. </template>
  49. <script>
  50. import { submit, detail } from '@/api/music/radio'
  51. import { platformMixin, addressMixin, contentMixin, mapMixin } from '@/mixin/index'
  52. export default {
  53. mixins: [platformMixin, addressMixin, contentMixin, mapMixin],
  54. data() {
  55. return {
  56. // 表单
  57. form: {
  58. addressClassifyId: null,
  59. status: 1
  60. },
  61. // 校验
  62. rules: {
  63. name: [{
  64. required: true, message: '请输入电台名称', trigger: 'blur'
  65. }],
  66. cascader: [{
  67. type: 'array', required: true, message: '请选择省市区', trigger: 'change'
  68. }],
  69. addressClassifyId: [{
  70. required: true, message: '请选择地域分类', trigger: 'change'
  71. }],
  72. contentClassifyId: [{
  73. required: true, message: '请选择广播分类', trigger: 'change'
  74. }],
  75. description: [{
  76. required: true, message: '请输入电台简介', trigger: 'blur'
  77. }],
  78. platformId: [{
  79. required: true, message: '请选择资源平台', trigger: 'change'
  80. }],
  81. thumb: [{
  82. required: true, message: '请上传电台封面', trigger: 'change'
  83. }]
  84. },
  85. // 只读
  86. disabled: false
  87. }
  88. },
  89. mounted() {
  90. // 获取资源平台
  91. this.getPlatform({
  92. audioType: 2
  93. })
  94. if (this.$route.query.id) {
  95. this.form.id = this.$route.query.id
  96. this.disabled = Boolean(this.$route.query.disabled)
  97. this.getList()
  98. }
  99. },
  100. methods: {
  101. // 详情
  102. getList() {
  103. detail(this.form.id).then(res => {
  104. if (res.code === 0) {
  105. this.form = res.data
  106. this.$set(this.form, 'cascader', [res.data.province])
  107. if (res.data.city) {
  108. this.form.cascader[1] = res.data.city
  109. }
  110. if (res.data.area) {
  111. this.form.cascader[2] = res.data.area
  112. }
  113. }
  114. })
  115. },
  116. // 上传
  117. upload(e) {
  118. this.form.thumb = e.file
  119. },
  120. // 确定
  121. getSubmit() {
  122. console.log(this.form);
  123. this.$refs.form.validate((valid) => {
  124. if (valid) {
  125. this.form.province = this.form.cascader[0]
  126. this.form.city = this.form.cascader[1] ? this.form.cascader[1] : null
  127. this.form.area = this.form.cascader[2] ? this.form.cascader[2] : null
  128. submit(this.form).then(res => {
  129. if (res.code === 0) {
  130. this.$message.success(`提交成功!`)
  131. this.cancel()
  132. }
  133. })
  134. } else {
  135. return false
  136. }
  137. })
  138. },
  139. // 取消
  140. cancel() {
  141. this.$tab.closeOpenPage('/music/radio')
  142. }
  143. }
  144. };
  145. </script>
  146. <style lang="scss" scoped>
  147. .el-form {
  148. width: 500px;
  149. }
  150. </style>