detail.vue 5.3 KB

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