detail.vue 6.0 KB

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