form.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <div>
  3. <el-form ref="form" :model="form" label-width="100px">
  4. <el-form-item
  5. prop="name"
  6. label="伴奏名称"
  7. :rules="[{required: true, message: '请输入伴奏名称'}]"
  8. >
  9. <el-input placeholder="请输入伴奏名称" v-model="form.name"/>
  10. </el-form-item>
  11. <el-form-item
  12. prop="subjectIds"
  13. label="伴奏声部"
  14. :rules="[{required: true, message: '请选择伴奏声部'}]"
  15. >
  16. <el-select style="width: 100%!important;" collapse-tags multiple v-model="form.subjectIds" placeholder="请选择伴奏声部">
  17. <el-option v-for="item in selects.subjects" :value="String(item.id)" :label="item.name" :key="item.id"></el-option>
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item
  21. prop="speed"
  22. label="伴奏速度"
  23. :rules="[{required: true, message: '请输入伴奏速度'}]"
  24. >
  25. <el-input type="number" placeholder="请输入伴奏速度" v-model="form.speed"/>
  26. </el-form-item>
  27. <el-form-item
  28. label="伴奏文件"
  29. prop="url"
  30. :rules="[{required: true, message: '请选择伴奏文件'}]"
  31. >
  32. <el-upload
  33. action="/api-web/uploadFile"
  34. :headers="headers"
  35. :on-success="success"
  36. :on-remove="remove"
  37. :limit="1"
  38. :file-list="filelist"
  39. accept=".mp3, .aac">
  40. <el-button size="small" type="primary" plain>点击上传</el-button>
  41. <div slot="tip" class="el-upload__tip">仅支持上传 mp3/aac 格式音频文件</div>
  42. </el-upload>
  43. </el-form-item>
  44. <div class="btns">
  45. <el-button type="primary" @click="submit">提交</el-button>
  46. <el-button @click="$listeners.close">取消</el-button>
  47. </div>
  48. </el-form>
  49. </div>
  50. </template>
  51. <script>
  52. import { getToken } from "@/utils/auth"
  53. import { Add, Update } from '../api'
  54. export default {
  55. props: ['detail', 'type'],
  56. data() {
  57. return {
  58. headers: {
  59. Authorization: getToken()
  60. },
  61. filelist: [],
  62. form: {
  63. name: '',
  64. subjectIds: [],
  65. speed: '',
  66. url: ''
  67. }
  68. }
  69. },
  70. mounted() {
  71. this.$store.dispatch('setSubjects')
  72. if (this.detail) {
  73. for (const key in this.form) {
  74. if (this.form.hasOwnProperty(key)) {
  75. if (key === 'subjectIds') {
  76. this.$set(this.form, 'subjectIds', (this.detail[key] || '').split(','))
  77. } else {
  78. this.$set(this.form, key, this.detail[key])
  79. }
  80. }
  81. }
  82. this.filelist = [{
  83. name: this.detail.url,
  84. url: this.detail.url,
  85. }]
  86. }
  87. },
  88. methods: {
  89. remove() {
  90. this.filelist = []
  91. this.$set(this.form, 'url', '')
  92. },
  93. success(res) {
  94. if (res.code == 200) {
  95. this.filelist = [{
  96. name: res.data.url,
  97. url: res.data.url,
  98. }]
  99. this.$set(this.form, 'url', res.data.url)
  100. } else {
  101. this.$message.error(res.msg || '上传失败')
  102. }
  103. },
  104. async submit() {
  105. this.$refs.form.validate(async (valid) => {
  106. if (valid) {
  107. if (!this.detail) {
  108. await Add({
  109. ...this.form,
  110. subjectIds: this.form.subjectIds.join(','),
  111. type: 'COMMON',
  112. })
  113. this.$message.success('提交成功')
  114. } else {
  115. await Update({
  116. ...this.form,
  117. subjectIds: this.form.subjectIds.join(','),
  118. type: this.detail.type,
  119. id: this.detail.id
  120. })
  121. this.$message.success('修改成功')
  122. }
  123. this.$listeners.close()
  124. this.$listeners.submited()
  125. }
  126. })
  127. }
  128. }
  129. }
  130. </script>
  131. <style lang="less" scoped>
  132. .btns{
  133. text-align: right;
  134. }
  135. </style>