detail.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="form" ref="form" :rules="rules" label-width="100px" :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="singerId">
  8. <el-select v-model="form.singerId" multiple filterable remote reserve-keyword placeholder="请输入歌手名称"
  9. :remote-method="getSelect" no-data-text="请新增歌手">
  10. <el-option v-for="item in singerOptions" :key="item.value" :value="item.value" :label="item.label" />
  11. </el-select>
  12. </el-form-item>
  13. <el-form-item label="歌曲语言:" prop="lanuage">
  14. <el-select v-model="form.lanuage" placeholder="请选择歌曲语言">
  15. <el-option v-for="item in languageOptions" :key="item.value" :value="item.value" :label="item.label" />
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="资源平台:" prop="platformId">
  19. <el-select v-model="form.platformId" placeholder="请选择资源平台" :disabled="disabledPlatformId(form.platformId)">
  20. <el-option v-for="item in platformOptions" :key="item.value" :value="item.value" :label="item.label"
  21. :disabled="disabledJoinType(item.joinType)" />
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="音频封面:" prop="thumbUrl">
  25. <Upload listType="picture-card" :url="form.thumbUrl" @upload="upload($event, 'thumbUrl')" :disabled="disabled" />
  26. </el-form-item>
  27. <el-form-item label="音频文件:" prop="realName">
  28. <el-input v-model="form.realName" readonly>
  29. <template slot="suffix">
  30. <Upload listType="audio" :size="100" @upload="upload($event, 'progaramUrl')" />
  31. </template>
  32. </el-input>
  33. <div style="color:#909399">单个上传音频文件不超过100MB</div>
  34. </el-form-item>
  35. </el-form>
  36. <div class="form-btn">
  37. <el-button @click="cancel">取消</el-button>
  38. <el-button type="primary" @click="getSubmit" v-if="!disabled">确定</el-button>
  39. </div>
  40. </div>
  41. </template>
  42. <script>
  43. import { submit, detail } from '@/api/music/list'
  44. import { selectSinger } from '@/api/music/singer'
  45. import { platformMixin, languageMixin } from '@/mixin/index'
  46. export default {
  47. mixins: [platformMixin, languageMixin],
  48. data() {
  49. return {
  50. // 歌手
  51. singerOptions: [],
  52. // 表单
  53. form: {
  54. status: 1,
  55. realName: ''
  56. },
  57. // 是否只读
  58. disabled: false,
  59. // 校验
  60. rules: {
  61. name: [{
  62. required: true, message: '请输入歌曲名称', trigger: 'blur'
  63. }],
  64. singerId: [{
  65. required: true, message: '请输入歌手名称', trigger: 'blur'
  66. }],
  67. lanuage: [{
  68. required: true, message: '请选择歌曲语言', trigger: 'blur'
  69. }],
  70. platformId: [{
  71. required: true, message: '请选择资源平台', trigger: 'change'
  72. }],
  73. thumbUrl: [{
  74. required: true, message: '请上传音频封面', trigger: 'change'
  75. }],
  76. realName: [{
  77. required: true, message: '请上传音频文件', trigger: 'blur'
  78. }]
  79. }
  80. };
  81. },
  82. mounted() {
  83. // 获取资源平台
  84. this.getPlatform({
  85. audioType: 11
  86. })
  87. if (this.$route.query.id) {
  88. this.form.id = this.$route.query.id
  89. this.disabled = Boolean(this.$route.query.disabled)
  90. this.getList()
  91. }
  92. },
  93. methods: {
  94. // 详情
  95. getList() {
  96. detail(this.form.id).then(res => {
  97. if (res.code === 0) {
  98. this.form = res.data
  99. this.form.singerId = res.data.singerId.split(',')
  100. res.data.singerResp.map(i => {
  101. this.singerOptions.push({
  102. value: i.singerId,
  103. label: i.singerName
  104. })
  105. })
  106. }
  107. })
  108. },
  109. // 查询歌手
  110. getSelect(e) {
  111. if (e) {
  112. setTimeout(() => {
  113. this.singerOptions = []
  114. selectSinger(e).then(res => {
  115. if (res.code === 0) {
  116. res.data.map(i => {
  117. this.singerOptions.push({
  118. value: i.id,
  119. label: i.name
  120. })
  121. })
  122. }
  123. }, 500)
  124. })
  125. }
  126. },
  127. // 上传
  128. upload(e, key) {
  129. if (key === 'thumbUrl') {
  130. this.form.thumbUrl = e.file
  131. } else {
  132. this.form.progaramUrl = e.file.url
  133. this.form.playTime = e.file.time
  134. this.form.realName = e.file.realName
  135. }
  136. },
  137. // 确定
  138. getSubmit() {
  139. this.$refs.form.validate((valid) => {
  140. if (valid) {
  141. this.form.singerId = this.form.singerId.join(',')
  142. let title = this.form.id ? '编辑成功!' : '新增成功!'
  143. submit(this.form).then(res => {
  144. if (res.code === 0) {
  145. this.$message.success(`${title}`)
  146. this.cancel()
  147. }
  148. })
  149. } else {
  150. return false
  151. }
  152. })
  153. },
  154. // 取消
  155. cancel() {
  156. this.$tab.closeOpenPage("/music/musicList");
  157. },
  158. },
  159. };
  160. </script>
  161. <style lang="scss" scoped>
  162. .el-form {
  163. width: 500px;
  164. }
  165. ::v-deep .el-input__suffix {
  166. right: 0;
  167. }
  168. </style>