detail.vue 5.3 KB

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