Browse Source

回滚到3.0

DESKTOP-O04BTUJ\muzen 2 years ago
parent
commit
9fc2cbdf2f
72 changed files with 1888 additions and 5988 deletions
  1. 0 0
      src/api/article/list.js
  2. 0 0
      src/api/channel/custom.js
  3. 0 0
      src/api/label/tag.js
  4. 23 28
      src/api/music/anchor.js
  5. 15 39
      src/api/music/blog.js
  6. 0 43
      src/api/music/list.js
  7. 0 43
      src/api/music/menu.js
  8. 15 47
      src/api/music/platform.js
  9. 0 43
      src/api/music/program.js
  10. 8 41
      src/api/music/radio.js
  11. 0 52
      src/api/music/singer.js
  12. 0 54
      src/api/registration/content.js
  13. 0 62
      src/api/registration/exchange.js
  14. 0 65
      src/api/registration/lottery.js
  15. 0 10
      src/api/registration/lotteryStat.js
  16. 0 9
      src/api/registration/order.js
  17. 0 35
      src/api/registration/regConfig.js
  18. 0 1
      src/assets/icons/svg/registration.svg
  19. 0 36
      src/components/Audio/index.vue
  20. 49 82
      src/components/Upload/index.vue
  21. 12 447
      src/mixin/index.js
  22. 115 156
      src/router/index.js
  23. 4 24
      src/views/device/article/detail.vue
  24. 9 8
      src/views/device/article/index.vue
  25. 0 0
      src/views/article/list/mixin.js
  26. 2 2
      src/views/operation/channel/detail.vue
  27. 9 10
      src/views/operation/channel/index.vue
  28. 58 53
      src/views/device/list/detail.vue
  29. 2 2
      src/views/device/version/index.vue
  30. 6 2
      src/views/operation/tag/detail.vue
  31. 7 6
      src/views/operation/tag/index.vue
  32. 84 296
      src/views/music/album/detail.vue
  33. 61 163
      src/views/music/album/index.vue
  34. 0 117
      src/views/music/anchor/detail.vue
  35. 121 88
      src/views/music/anchor/index.vue
  36. 123 300
      src/views/music/blog/detail.vue
  37. 67 120
      src/views/music/blog/index.vue
  38. 60 148
      src/views/music/list/detail.vue
  39. 48 159
      src/views/music/list/index.vue
  40. 0 288
      src/views/music/menu/detail.vue
  41. 0 182
      src/views/music/menu/index.vue
  42. 32 0
      src/views/music/mixin/index.js
  43. 54 0
      src/views/music/model/detail.vue
  44. 53 0
      src/views/music/model/index.vue
  45. 80 127
      src/views/music/platform/index.vue
  46. 124 0
      src/views/music/playlist/detail.vue
  47. 31 0
      src/views/music/playlist/index.vue
  48. 25 152
      src/views/music/program/detail.vue
  49. 46 149
      src/views/music/program/index.vue
  50. 137 102
      src/views/music/radio/detail.vue
  51. 59 133
      src/views/music/radio/index.vue
  52. 0 147
      src/views/music/singer/detail.vue
  53. 63 147
      src/views/music/singer/index.vue
  54. 3 3
      src/views/ohplay/operation/index.vue
  55. 41 38
      src/views/operation/recommend/index.vue
  56. 74 0
      src/views/order/goods/index.vue
  57. 49 0
      src/views/order/recharge/index.vue
  58. 0 256
      src/views/registration/content/detail.vue
  59. 0 179
      src/views/registration/content/index.vue
  60. 0 165
      src/views/registration/exchange/detail.vue
  61. 0 171
      src/views/registration/exchange/index.vue
  62. 0 249
      src/views/registration/lottery/detail.vue
  63. 0 124
      src/views/registration/lottery/index.vue
  64. 0 141
      src/views/registration/lotteryStat/index.vue
  65. 0 125
      src/views/registration/order/index.vue
  66. 0 286
      src/views/registration/regConfig/index.vue
  67. 1 1
      src/views/service/code/index.vue
  68. 0 6
      src/views/service/flowPackage/detail.vue
  69. 1 21
      src/views/service/mixin/index.js
  70. 0 5
      src/views/service/musicPackage/detail.vue
  71. 54 0
      src/views/watch/list/detail.vue
  72. 63 0
      src/views/watch/list/index.vue

src/api/device/article.js → src/api/article/list.js


src/api/operation/channel.js → src/api/channel/custom.js


src/api/operation/tag.js → src/api/label/tag.js


+ 23 - 28
src/api/music/anchor.js

@@ -1,51 +1,46 @@
 import request from '@/utils/request'
 
-// 列表
-export function list(data) {
+// 分页
+export function getPage(data){
   return request({
-    url: `/admin/podcaster/manage/list`,
+    url: `/podCaster/page`,
     method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(id) {
-  return request({
-    url: `/admin/podcaster/manage/queryById/${id}`,
-    method: 'get'
+    data: data
   })
 }
 
 // 新增
-export function submit(data) {
+export function getAdd(data){
   return request({
-    url: `/admin/podcaster/manage/addOrUpdate`,
+    url: `/podCaster/add`,
     method: 'post',
-    data
+    data: data
   })
 }
 
-// 上下架
-export function change(id, status) {
+// 编辑
+export function getEdit(data){
   return request({
-    url: `/admin/podcaster/manage/hitOrSold/${id}/${status}`,
-    method: 'get'
+    url: `/podCaster/edit`,
+    method: 'post',
+    data: data
   })
 }
 
-// 删除
-export function remove(id) {
+// 详情
+export function getDetail(data){
   return request({
-    url: `/admin/podcaster/manage/remove/${id}`,
-    method: 'delete'
+    url: `/podCaster/view`,
+    method: 'post',
+    data: data
   })
 }
 
-// 查询主播
-export function selectAnchor(name) {
+// 删除
+export function getDelete(data){
   return request({
-    url: `/admin/podcaster/manage/querySingerlistByName/${name}`,
-    method: 'get'
+    url: `/podCaster/delete`,
+    method: 'post',
+    data: data
   })
-}
+}

+ 15 - 39
src/api/music/blog.js

@@ -1,52 +1,28 @@
 import request from '@/utils/request'
 
-// 列表
-export function list(data) {
+// 播客分页
+export function getPage(query) {
   return request({
-    url: `/admin/podcast/manmage/list`,
-    method: 'post',
-    data
+    url: `/podcast/page`,
+    method: 'get',
+    params: query
   })
 }
 
-// 新增 编辑
-export function submit(data) {
+// 播客分类
+export function getCategories(query) {
   return request({
-    url: `/admin/podcast/manmage/addOrUpdate`,
-    method: 'post',
-    data
+    url: `/podcast/categories`,
+    method: 'get',
+    params: query
   })
 }
 
-// 详情
-export function detail(id) {
+// 播客节目分页
+export function getProgrammePage(query){
   return request({
-    url: `/admin/podcast/manmage/queryById/${id}`,
-    method: 'get'
+    url: `/podcast/programme/page`,
+    method: 'get',
+    params: query
   })
 }
-
-// 上下架
-export function change(id, status) {
-  return request({
-    url: `/admin/podcast/manmage/hitOrSold/${id}/${status}`,
-    method: 'get'
-  })
-}
-
-// 删除
-export function remove(ids){
-  return request({
-    url: `/admin/podcast/manmage/remove/${ids}`,
-    method: 'delete'
-  })
-}
-
-// 解除关联
-export function relieve(data){
-  return request({
-    url: `/admin/podcast/manmage/relieve`,
-    method: 'post',
-    data
-  })
-}

+ 0 - 43
src/api/music/list.js

@@ -1,43 +0,0 @@
-import request from '@/utils/request'
-
-// 列表
-export function list(data) {
-  return request({
-    url: `/admin/program/list`,
-    method: 'post',
-    data
-  })
-}
-
-// 新增
-export function submit(data) {
-  return request({
-    url: `/admin/program/addOrUpdate`,
-    method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(id){
-  return request({
-    url: `/admin/program/queryById/${id}`,
-    method: 'get'
-  })
-}
-
-// 删除
-export function remove(id) {
-  return request({
-    url: `/admin/program/remove/${id}`,
-    method: 'delete'
-  })
-}
-
-// 上下架
-export function change(id, status){
-  return request({
-    url: `/admin/program/hitOrSold/${id}/${status}`,
-    method: 'get'
-  })
-}

+ 0 - 43
src/api/music/menu.js

@@ -1,43 +0,0 @@
-import request from '@/utils/request'
-
-// 列表
-export function list(data){
-  return request({
-    url: `/admin/alubm/list`,
-    method: 'post',
-    data
-  })
-}
-
-// 新增
-export function submit(data){
-  return request({
-    url: `/admin/alubm/addOrUpdate`,
-    method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(id){
-  return request({
-    url: `/admin/alubm/queryById/${id}`,
-    method: 'get'
-  })
-}
-
-// 上下架
-export function change(id, status){
-  return request({
-    url: `/admin/alubm/hitOrSold/${id}/${status}`,
-    method: 'get'
-  })
-}
-
-// 删除
-export function remove(id) {
-  return request({
-    url: `/admin/alubm/remove/${id}`,
-    method: 'delete'
-  })
-}

+ 15 - 47
src/api/music/platform.js

@@ -1,52 +1,20 @@
 import request from '@/utils/request'
 
-// 列表
-export function list(data) {
-  return request({
-    url: `/admin/platform/list`,
-    method: 'post',
-    data
-  })
+// 资源平台
+// 分页列表
+export function getPlatformPage(query){
+    return request({
+        url: '/platform/page',
+        method: 'get',
+        params: query
+    })
 }
 
-// 新增 编辑
-export function submit(data) {
-  return request({
-    url: `/admin/platform/addOrUpdate`,
-    method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(id) {
-  return request({
-    url: `/admin/platform/queryById/${id}`,
-    method: 'get'
-  })
-}
-
-// 删除
-export function remove(id) {
-  return request({
-    url: `/admin/platform/remove/${id}`,
-    method: 'delete'
-  })
-}
-
-// 通过音频类型获取平台类型
-export function audioType(data) {
-  return request({
-    url: `/admin/platform/getlistByAudioType`,
-    method: 'post',
-    data
-  })
-}
-
-// 通过平台类型获取音频类型
-export function platform(platfromId){
-  return request({
-    url: `/admin/platform/getlistByPlatfromId/${platfromId}`,
-    method: 'get'
-  })
+// 编辑
+export function getplatformEdit(data){
+    return request({
+        url: `/platform`,
+        method: 'put',
+        data: data
+    })
 }

+ 0 - 43
src/api/music/program.js

@@ -1,43 +0,0 @@
-import request from '@/utils/request'
-
-// 列表
-export function list(data) {
-  return request({
-    url: `/admin/podcastProgram/list`,
-    method: 'post',
-    data
-  })
-}
-
-// 新增 编辑
-export function submit(data) {
-  return request({
-    url: `/admin/podcastProgram/addOrUpdate`,
-    method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(id) {
-  return request({
-    url: `/admin/podcastProgram/queryById/${id}`,
-    method: 'get'
-  })
-}
-
-// 上下架
-export function change(id, status) {
-  return request({
-    url: `/admin/podcastProgram/hitOrSold/${id}/${status}`,
-    method: 'get'
-  })
-}
-
-// 删除
-export function remove(id) {
-  return request({
-    url: `/admin/podcastProgram/remove/${id}`,
-    method: 'delete'
-  })
-}

+ 8 - 41
src/api/music/radio.js

@@ -1,51 +1,18 @@
 import request from '@/utils/request'
 
-// 列表
-export function list(data) {
+// 分页
+export function getPage(query){
   return request({
-    url: `/admin/tBroadcast/list`,
-    method: 'post',
-    data
+    url: `/broadcast/page`,
+    method: 'get',
+    params: query
   })
 }
 
-// 地域 / 内容分类
-export function options(type) {
+// 分类
+export function getCategories(){
   return request({
-    url: `/admin/tBroadcast/getAddOrContentlist/${type}`,
-    method: 'get'
-  })
-}
-
-// 新增 编辑
-export function submit(data) {
-  return request({
-    url: `/admin/tBroadcast/addOrUpdate`,
-    method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(id) {
-  return request({
-    url: `/admin/tBroadcast/queryById/${id}`,
-    method: 'get'
-  })
-}
-
-// 删除
-export function remove(id) {
-  return request({
-    url: `/admin/tBroadcast/remove/${id}`,
-    method: 'delete'
-  })
-}
-
-// 上下架
-export function change(id, status){
-  return request({
-    url: `/admin/tBroadcast/hitOrSold/${id}/${status}`,
+    url: `/broadcast/categories`,
     method: 'get'
   })
 }

+ 0 - 52
src/api/music/singer.js

@@ -1,52 +0,0 @@
-import request from '@/utils/request'
-
-// 歌手列表
-export function list(data) {
-  return request({
-    url: `/admin/singer/list`,
-    method: 'post',
-    data
-  })
-}
-
-// 新增 编辑
-export function submit(data) {
-  return request({
-    url: `/admin/singer/addOrUpdate`,
-    method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(id) {
-  return request({
-    url: `/admin/singer/queryById/${id}`,
-    method: 'get'
-  })
-}
-
-// 删除
-export function remove(id) {
-  return request({
-    url: `/admin/singer/remove/${id}`,
-    method: 'delete'
-  })
-}
-
-// 上下架
-export function change(data) {
-  return request({
-    url: `/admin/singer/hitOrSold`,
-    method: 'post',
-    data
-  })
-}
-
-// 查询歌手
-export function selectSinger(name){
-  return request({
-    url: `/admin/singer/querySingerlistByName/${name}`,
-    method: 'get'
-  })
-}

+ 0 - 54
src/api/registration/content.js

@@ -1,54 +0,0 @@
-import request from '@/utils/request'
-
-// 列表
-export function list(data) {
-  return request({
-    url: `/appSignRadioContent/page`,
-    method: 'post',
-    data
-  })
-}
-
-// 新增
-export function create(data){
-  return request({
-    url: `/appSignRadioContent/save`,
-    method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(id){
-  return request({
-    url: `/appSignRadioContent/get/${id}`,
-    method: 'get'
-  })
-}
-
-// 编辑
-export function edit(data){
-  return request({
-    url: `/appSignRadioContent/update`,
-    method: 'post',
-    data
-  })
-}
-
-// 上下架
-export function change(data){
-  return request({
-    url: `/appSignRadioContent/updateStatus`,
-    method: 'post',
-    data
-  })
-}
-
-// 删除
-export function remove(data){
-  return request({
-    url: `/appSignRadioContent/remove`,
-    method: 'post',
-    data
-  })
-}

+ 0 - 62
src/api/registration/exchange.js

@@ -1,62 +0,0 @@
-import request from '@/utils/request'
-
-// 列表
-export function list(data){
-  return request({
-    url: `/appExchangeConfig/page`,
-    method: 'post',
-    data
-  })
-}
-
-// 新增
-export function create(data){
-  return request({
-    url: `/appExchangeConfig/save`,
-    method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(id){
-  return request({
-    url: `/appExchangeConfig/get/${id}`,
-    method: 'get'
-  })
-}
-
-// 编辑
-export function edit(data) {
-  return request({
-    url: `/appExchangeConfig/update`,
-    method: 'post',
-    data
-  })
-}
-
-// 上下架
-export function change(data){
-  return request({
-    url: `/appExchangeConfig/updateStatus`,
-    method: 'post',
-    data
-  })
-}
-
-// 删除
-export function remove(data){
-  return request({
-    url: `/appExchangeConfig/remove`,
-    method: 'post',
-    data
-  })
-}
-
-// 套餐
-export function mealList(type, businessType) {
-  return request({
-    url: `/admin/goods/queryList/${type}/${businessType}`,
-    method: 'get'
-  })
-}

+ 0 - 65
src/api/registration/lottery.js

@@ -1,65 +0,0 @@
-import request from '@/utils/request'
-
-// 列表
-export function list(query) {
-  return request({
-    url: `/appLotteryConfig/page`,
-    method: 'get',
-    params: query
-  })
-}
-
-// 上下架
-export function change(data){
-  return request({
-    url: `/appLotteryConfig/updateStatus`,
-    method: 'post',
-    data
-  })
-}
-
-// 详情
-export function detail(query){
-  return request({
-    url: `/appLotteryConfig/get`,
-    method: 'get',
-    params: query
-  })
-}
-
-// 新增
-export function create(data){
-  return request({
-    url: `/appLotteryConfig/save`,
-    method: 'post',
-    data
-  })
-}
-
-// 编辑
-export function edit(data) {
-  return request({
-    url: `/appLotteryConfig/update`,
-    method: 'post',
-    data
-  })
-}
-
-
-// 校验时间
-export function checkTime(data){
-  return request({
-    url: `/appLotteryConfig/checkTime`,
-    method: 'post',
-    data
-  })
-}
-
-// 删除
-export function remove(data){
-  return request({
-    url: `/appLotteryConfig/remove`,
-    method: 'post',
-    data
-  })
-}

+ 0 - 10
src/api/registration/lotteryStat.js

@@ -1,10 +0,0 @@
-import request from '@/utils/request'
-
-// 抽奖统计
-export function list(query){
-  return request({
-    url: `/appLotteryStatistic/page`,
-    method: 'get',
-    params: query
-  })
-}

+ 0 - 9
src/api/registration/order.js

@@ -1,9 +0,0 @@
-import request from '@/utils/request'
-
-export function list(data) {
-  return request({
-    url: `/appExchangeRecord/page`,
-    method: 'post',
-    data
-  })
-}

+ 0 - 35
src/api/registration/regConfig.js

@@ -1,35 +0,0 @@
-import request from '@/utils/request'
-
-// 签到配置详情
-export function list(){
-  return request({
-    url: `/appSignConfig/get`,
-    method: 'get'
-  })
-}
-
-// 修改签到配置
-export function submit(data){
-  return request({
-    url: `/appSignConfig/update`,
-    method: 'post',
-    data
-  })
-}
-
-// 删除连续签到奖励
-export function removeContinue(ids){
-  return request({
-    url: `/appSignConfig/deleteContinue/${ids}`,
-    method: 'delete'
-  })
-}
-
-// 删除收听时间奖励
-export function removeListenGood(data){
-  return request({
-    url: `/appSignConfig/deleteListenGood`,
-    method: 'post',
-    data
-  })
-}

File diff suppressed because it is too large
+ 0 - 1
src/assets/icons/svg/registration.svg


+ 0 - 36
src/components/Audio/index.vue

@@ -1,36 +0,0 @@
-<template>
-  <el-button :type="type" :icon="icon" @click="getPlayAudio" />
-</template>
-
-<script>
-const audio = new Audio()
-export default {
-  props: {
-    src: String
-  },
-  data() {
-    return {
-      type: 'text',
-      icon: 'el-icon-video-play'
-    }
-  },
-  methods: {
-    getPlayAudio() {
-      if (this.type === 'text') {
-        audio.src = this.src
-        if (!this.src) {
-          this.$message.error('没有找到可播放的资源')
-          return false
-        }
-        this.type = 'delete'
-        this.icon = 'el-icon-video-pause'
-        audio.play()
-      } else {
-        this.type = 'text'
-        this.icon = 'el-icon-video-play'
-        audio.pause()
-      }
-    }
-  }
-}
-</script>

+ 49 - 82
src/components/Upload/index.vue

@@ -1,9 +1,9 @@
 <template>
   <div class="upload">
     <el-upload v-if="hidden" :action="newAction" :headers="headers" :multiple="multiple" :data="data"
-      :accept="accept" :show-file-list="showFileList" :list-type="listType" :on-progress="onProgress"
+      :show-file-list="showFileList" :accept="accept" :list-type="listType" :on-progress="onProgress"
       :on-error="onError" :on-success="onSuccess" :before-upload="beforeUpload" :disabled="disabled">
-      <el-button v-if="listType !== 'picture-card'" :type="btnType">{{ newTitle }}</el-button>
+      <el-button v-if="listType === 'text'" :type="btnType">{{ newTitle }}</el-button>
       <i v-else class="el-icon-plus" />
     </el-upload>
     <el-progress v-if="isShow()" type="circle" :percentage="percent" :status="isStatus" />
@@ -15,14 +15,11 @@
 </template>
 
 <script>
-const baseUrl = process.env.VUE_APP_BASE_API
 import { getToken } from "@/utils/auth";
 export default {
   props: {
-    action: {
-      type: String,
-      default: ''
-    },
+    // 接口地址
+    action: String,
     // 图片
     url: String,
     // 类型
@@ -30,16 +27,16 @@ export default {
       type: String,
       default: 'text'
     },
-    // 是否显示已上传文件列表
-    showFileList: {
-      type: Boolean,
-      default: false
-    },
     // 是否支持多选文件
     multiple: {
       type: Boolean,
       default: false
     },
+    // 限制上传文件类型
+    accept: {
+      type: String,
+      default: ''
+    },
     // 是否禁用
     disabled: {
       type: Boolean,
@@ -54,14 +51,12 @@ export default {
     measure: {
       type: String,
       default: ''
-    },
-    // 文件大小
-    size: Number
+    }
   },
   data() {
     return {
       // 上传地址
-      newAction: baseUrl + this.action,
+      newAction: this.action !== undefined ? process.env.VUE_APP_BASE_API + this.action : this.listType === 'text' ? `${process.env.VUE_APP_BASE_API}/system/file/file/upload` : `${process.env.VUE_APP_BASE_API}/system/file/picture/upload`,
       // 请求头
       headers: {
         Authorization: "Bearer " + getToken(),
@@ -70,6 +65,9 @@ export default {
       data: {},
       // 文件字段名
       name: '',
+      // 是否显示已上传文件列表
+      showFileList: false,
+
       // 是否显示上传按钮
       hidden: true,
       // 按钮文字
@@ -86,14 +84,16 @@ export default {
       form: {},
       // 上传图片的尺寸
       width: Number(this.measure.split('*')[0]),
-      height: Number(this.measure.split('*')[1]),
-      // 上传的文件格式
-      accept: ''
+      height: Number(this.measure.split('*')[1])
     }
   },
+  mounted() {
+    this.newUrl = this.url ? this.url : ''
+    this.hidden = this.url ? false : true
+  },
   watch: {
     measure(val) {
-      this.width = Number(val.split('*')[0])
+      this.width = Number(val.split('*')[0]),
       this.height = Number(val.split('*')[1])
     },
     url(val) {
@@ -101,63 +101,40 @@ export default {
       this.hidden = val ? false : true
     }
   },
-  mounted() {
-    if (!this.action) {
-      if (this.listType === 'picture-card') {
-        this.newAction = `${baseUrl}/system/file/picture/upload`
-        this.accept = '.jpg, .jpeg, .png, .bmp, .icon, .gif'
-      } else if (this.listType === 'text') {
-        this.newAction = `${baseUrl}/system/file/file/upload`
-      } else if (this.listType === 'audio') {
-        this.newAction = `${baseUrl}/system/file/mp3/upload`
-        this.accept = '.mp3, .wav, .aiff, .midi, .wma'
-      }
-    }
-    this.newUrl = this.url ? this.url : ''
-    this.hidden = this.url ? false : true
-  },
   methods: {
     // 上传之前
     async beforeUpload(file) {
-      this.btnType = 'primary'
-      if (this.measure || this.size) {
+      if (this.measure) {
         await this.measureChecked(file).then((res) => {
-          if (res) {
-            this.isUpload(file)
+          this.data.multipartFile = res ? file : ''
+          this.name = res ? file.name : ''
+          if (this.listType === 'text') {
+            this.form.size = res ? file.size : ''
+          } else {
+            this.hidden = res ? false : true
           }
         })
       } else {
-        this.isUpload(file)
-      }
-    },
-
-    // 上传
-    isUpload(file) {
-      this.data.multipartFile = file
-      this.name = file.name
-      if (this.listType !== 'picture-card') {
-        this.form.size = file.size
-      } else {
-        this.hidden = false
+        this.data.multipartFile = file
+        this.name = file.name
+        if (this.listType === 'text') {
+          this.form.size = file.size
+        } else {
+          this.hidden = false
+        }
       }
     },
-
     // 上传过程中
     onProgress(e) {
       this.percent = parseInt(e.percent)
       this.newTitle = `已上传${parseInt(e.percent - 1)}%`
-      this.$emit('loading')
-      this.visible = true
     },
-
     // 上传失败
     onError() {
       this.newTitle = `上传失败`
       this.btnType = `danger`
       this.isStatus = 'exception'
-      this.$emit('upload')
     },
-
     // 上传成功
     onSuccess(res) {
       if (this.listType === 'picture-card') {
@@ -168,6 +145,7 @@ export default {
         this.newTitle = '上传成功'
         this.btnType = 'success'
       }
+
       // 传参
       this.form.file = res.data
       this.$emit('upload', this.form)
@@ -175,7 +153,7 @@ export default {
 
     // 删除图片
     getDelete() {
-      if (this.listType == 'picture-card') {
+      if (this.listType !== 'text') {
         this.hidden = true
         this.percent = 0
         this.newUrl = ''
@@ -185,41 +163,30 @@ export default {
 
     // 是否显示图片进度条
     isShow() {
-      if (this.listType == 'picture-card') {
+      if (this.listType !== 'text') {
         return !this.hidden && this.newUrl === '' ? true : false
       } else {
         return false
       }
     },
 
-    // 判断图片尺寸 或 文件大小
+    // 判断图片尺寸
     measureChecked(file) {
       return new Promise((resolve, reject) => {
-        if (this.measure) {
-          let reader = new FileReader()
-          reader.readAsDataURL(file)
-          reader.onload = () => {
-            let img = new Image()
-            img.src = reader.result
-            img.onload = () => {
-              if (img.width !== this.width || img.height !== this.height) {
-                this.$message.error(`请上传${this.measure}尺寸的图片`)
-                reject
-              } else {
-                resolve(true)
-              }
+        let reader = new FileReader()
+        reader.readAsDataURL(file)
+        reader.onload = () => {
+          let img = new Image()
+          img.src = reader.result
+          img.onload = () => {
+            if (img.width !== this.width || img.height !== this.height) {
+              this.$message.error(`请上传${this.measure}尺寸的图片`)
+              resolve(false)
+            } else {
+              resolve(true)
             }
           }
         }
-
-        if (this.size) {
-          if ((file.size / 1024 / 1024) > this.size) {
-            this.$message.error(`上传文件过大`)
-            reject
-          } else {
-            resolve(true)
-          }
-        }
       })
     }
   }

+ 12 - 447
src/mixin/index.js

@@ -2,19 +2,6 @@ import {
   getClientTypeList
 } from '@/api/device/version'
 
-import {
-  platform,
-  audioType
-} from '@/api/music/platform'
-
-import {
-  options
-} from '@/api/music/radio'
-
-import {
-  channelTemplate
-} from '@/api/operation/channel'
-
 // 设备列表
 const devMixin = {
   data() {
@@ -40,46 +27,17 @@ const devMixin = {
 const serviceTimeMixin = {
   data() {
     return {
-      serviceTimeOptions: [{
-          value: 1,
-          label: '7天'
-        },
-        {
-          value: 2,
-          label: '14天'
-        },
-        {
-          value: 3,
-          label: '1个月'
-        },
-        {
-          value: 4,
-          label: '3个月'
-        },
-        {
-          value: 5,
-          label: '6个月'
-        },
-        {
-          value: 6,
-          label: '1年'
-        },
-        {
-          value: 7,
-          label: '2年'
-        },
-        {
-          value: 8,
-          label: '3年'
-        },
-        {
-          value: 9,
-          label: '5年'
-        },
-        {
-          value: 0,
-          label: '永久'
-        }
+      serviceTimeOptions: [
+        { value: 1, label: '7天' },
+        { value: 2, label: '14天' },
+        { value: 3, label: '1个月' },
+        { value: 4, label: '3个月' },
+        { value: 5, label: '6个月' },
+        { value: 6, label: '1年' },
+        { value: 7, label: '2年' },
+        { value: 8, label: '3年' },
+        { value: 9, label: '5年' },
+        { value: 0, label: '永久' }
       ]
     }
   }
@@ -100,397 +58,4 @@ const isFreeMixin = {
   }
 }
 
-// 音频类型
-const audioMixin = {
-  data() {
-    return {
-      audioOptions: [{
-        value: 2,
-        label: '广播电台'
-      }, {
-        value: 6,
-        label: '节目'
-      }, {
-        value: 8,
-        label: '播客专辑'
-      }, {
-        value: 9,
-        label: '歌手'
-      }, {
-        value: 10,
-        label: '歌单'
-      }, {
-        value: 11,
-        label: '歌曲'
-      }, {
-        value: 12,
-        label: '主播'
-      }, {
-        value: 15,
-        label: '音乐专辑'
-      }],
-      audioTypeOptions: []
-    }
-  },
-  methods: {
-    // 通过平台获取对应的音频类型
-    getAudioType(e) {
-      return new Promise((resolve, reject) => {
-        platform(e).then(res => {
-          if (res.code === 0) {
-            resolve(this.audioTypeOptions = res.data[0].audioType.split(',').map(i => this.audioOptions.find(j => j.value == i)))
-          }
-        })
-      }).catch(err => {
-        reject()
-      })
-    }
-  }
-}
-
-// 性别
-const sexMixin = {
-  data() {
-    return {
-      sexOptions: [{
-        value: 0,
-        label: '男'
-      }, {
-        value: 1,
-        label: '女'
-      }, {
-        value: 2,
-        label: '未知'
-      }]
-    }
-  }
-}
-
-// 所属地区
-const regionMixin = {
-  data() {
-    return {
-      regionOptions: [{
-        value: 0,
-        label: '内地'
-      }, {
-        value: 1,
-        label: '港台'
-      }, {
-        value: 2,
-        label: '欧美'
-      }, {
-        value: 3,
-        label: '日本'
-      }, {
-        value: 4,
-        label: '韩国'
-      }, {
-        value: 5,
-        label: '其他'
-      }]
-    }
-  }
-}
-
-// 语种
-const languageMixin = {
-  data() {
-    return {
-      languageOptions: [{
-        value: 1,
-        label: '国语'
-      }, {
-        value: 2,
-        label: '欧美'
-      }, {
-        value: 3,
-        label: '粤语'
-      }, {
-        value: 4,
-        label: '韩语'
-      }, {
-        value: 5,
-        label: '日语'
-      }, {
-        value: 6,
-        label: '其他'
-      }]
-    }
-  }
-}
-
-// 所属平台
-const platformMixin = {
-  data() {
-    return {
-      platformOptions: [{
-        value: 1,
-        label: '蜻蜓'
-      }, {
-        value: 2,
-        label: '官方电台'
-      }, {
-        value: 3,
-        label: '猫王好听'
-      }, {
-        value: 4,
-        label: '海外电台'
-      }, {
-        value: 5,
-        label: '音乐随身听'
-      }, {
-        value: 6,
-        label: 'QQ音乐'
-      }, {
-        value: 7,
-        label: 'HIFIVE音乐'
-      }, {
-        value: 8,
-        label: '看见音乐'
-      }]
-    }
-  },
-  methods: {
-    // 通过音频类型获取对应的平台
-    getPlatform(e) {
-      this.platformOptions = []
-      audioType(e).then(res => {
-        if (res.code === 0) {
-          res.data.map(i => {
-            this.platformOptions.push({
-              value: Number(i.id),
-              label: i.name
-            })
-          })
-        }
-      })
-    }
-  }
-}
-
-// 上下架状态
-const onOrOffMixin = {
-  data() {
-    return {
-      onOrOffOptions: [{
-        value: 1,
-        label: '上架'
-      }, {
-        value: 2,
-        label: '下架'
-      }]
-    }
-  }
-}
-
-// 禁用状态
-const disabledMixin = {
-  data() {
-    return {
-      disabledOptions: [{
-        value: 0,
-        label: '启用'
-      }, {
-        value: 1,
-        label: '禁用'
-      }]
-    }
-  }
-}
-
-// 付费类型
-const payTypeMixin = {
-  data() {
-    return {
-      payTypeOptions: [{
-        value: 1,
-        label: '免费'
-      }, {
-        value: 2,
-        label: '全本购买'
-      }, {
-        value: 3,
-        label: '单集购买'
-      }, {
-        value: 4,
-        label: 'Vip专享'
-      }, {
-        value: 5,
-        label: '亲子付费'
-      }]
-    }
-  }
-}
-
-// 专辑类型
-const albumTypeMixin = {
-  data() {
-    return {
-      albumTypeOptions: [{
-        value: 1,
-        label: 'Single'
-      }, {
-        value: 2,
-        label: 'EP'
-      }, {
-        value: 3,
-        label: 'Album'
-      }, {
-        value: 4,
-        label: '古典专辑'
-      }, {
-        value: 5,
-        label: '自制专辑'
-      }]
-    }
-  }
-}
-
-// 地域分类
-const addressMixin = {
-  data() {
-    return {
-      addressOptions: []
-    }
-  },
-  mounted() {
-    this.getAddress()
-  },
-  methods: {
-    getAddress() {
-      options(2).then(res => {
-        if (res.code === 0) {
-          this.addressOptions = res.data
-        }
-      })
-    }
-  }
-}
-
-// 内容分类
-const contentMixin = {
-  data() {
-    return {
-      contentOptions: []
-    }
-  },
-  mounted() {
-    this.getContent()
-  },
-  methods: {
-    getContent() {
-      options(1).then(res => {
-        if (res.code === 0) {
-          this.contentOptions = res.data
-        }
-      })
-    }
-  }
-}
-
-// 奖励类型
-const rewardMixin = {
-  data() {
-    return {
-      rewardOptions: [{
-        //   value: 0,
-        //   label: '音乐套餐'
-        // }, {
-        //   value: 1,
-        //   label: '流量套餐'
-        // }, {
-        //   value: 2,
-        //   label: '亲子礼包'
-        // }, {
-        //   value: 3,
-        //   label: '音响实物'
-        // }, {
-        //   value: 4,
-        //   label: '积分'
-        // },{
-        //   value: 5,
-        //   label: '谢谢惠顾'
-      }]
-    }
-  }
-}
-
-// 分类
-const classifyMixin = {
-  data() {
-    return {
-      classifyOptions: []
-    }
-  },
-  methods: {
-    getClassify(e) {
-      channelTemplate({
-        audioType: e
-      }).then(res => {
-        if (res.code === 0) {
-          res.data.map(i => {
-            this.classifyOptions.push({
-              value: i.id,
-              label: i.name
-            })
-          })
-        }
-      })
-    }
-  }
-}
-
-// 时效性
-const currentMixin = {
-  data() {
-    return {
-      currentOptions: [{
-        value: 0,
-        label: '进行中'
-      }, {
-        value: 1,
-        label: '未开始'
-      }, {
-        value: 2,
-        label: '已过期'
-      }]
-    }
-  }
-}
-
-// 封面类型
-const coverMixin = {
-  data() {
-    return {
-      coverOptions: [{
-        value: 0,
-        label: '自定义封面'
-      }, {
-        value: 1,
-        label: '内容封面'
-      }]
-    }
-  }
-}
-
-export {
-  devMixin,
-  serviceTimeMixin,
-  isFreeMixin,
-  audioMixin,
-  sexMixin,
-  regionMixin,
-  languageMixin,
-  platformMixin,
-  onOrOffMixin,
-  disabledMixin,
-  payTypeMixin,
-  albumTypeMixin,
-  addressMixin,
-  contentMixin,
-  rewardMixin,
-  classifyMixin,
-  currentMixin,
-  coverMixin
-}
+export { devMixin, serviceTimeMixin, isFreeMixin }

+ 115 - 156
src/router/index.js

@@ -183,6 +183,22 @@ export const dynamicRoutes = [{
       }
     }]
   },
+  // AutoFM
+  {
+    path: '/content',
+    component: Layout,
+    hidden: true,
+    permissions: ['content:autoFM:list'],
+    children: [{
+      path: 'autoFM/detail',
+      component: () => import('@/views/content/autoFM/detail'),
+      name: 'detail',
+      meta: {
+        title: 'AutoFM详情',
+        activeMenu: '/content/autoFM'
+      }
+    }]
+  },
   // 设备管理
   // 设备列表
   {
@@ -190,7 +206,6 @@ export const dynamicRoutes = [{
     component: Layout,
     hidden: true,
     permissions: ['device:list:list'],
-    name: 'deviceList',
     children: [{
       path: 'list/detail',
       component: () => import('@/views/device/list/detail'),
@@ -217,157 +232,133 @@ export const dynamicRoutes = [{
       }
     }]
   },
-  // 设备文章
-  {
-    path: '/device',
-    component: Layout,
-    hidden: true,
-    permissions: ['device:article:list'],
-    name: 'article',
-    children: [{
-      path: 'article/detail',
-      component: () => import('@/views/device/article/detail'),
-      name: 'articleDetail',
-      meta: {
-        title: '文章详情',
-        activeMenu: '/device/article'
-      }
-    }]
-  },
   // 音频管理
-  // 歌手
+  // 音乐专辑
   {
-    path: "/music",
+    path: '/music',
     component: Layout,
     hidden: true,
-    permissions: ['music:singer:list'],
-    name: 'singer',
+    permissions: ['music:album:list'],
     children: [{
-      path: 'singer/detail',
-      component: () => import('@/views/music/singer/detail'),
-      name: 'musicSingerDetail',
+      path: 'album/detail',
+      component: () => import('@/views/music/album/detail'),
+      name: 'musicAlbumDetail',
       meta: {
-        title: `歌手详情`,
-        activeMenu: '/music/singer'
+        title: '专辑详情',
+        activeMenu: '/music/album'
       }
     }]
   },
-  // 歌曲
+  // 歌曲列表
   {
     path: '/music',
     component: Layout,
     hidden: true,
     permissions: ['music:list:list'],
-    name: 'musicList',
     children: [{
       path: 'musicList/detail',
       component: () => import('@/views/music/list/detail'),
       name: 'musicListDetail',
       meta: {
         title: `歌曲详情`,
-        activeMenu: '/music/musicList'
+        activeMenu: '/musicList/list'
       }
     }]
   },
-  // 歌单
+  // 播客专辑
   {
     path: '/music',
     component: Layout,
     hidden: true,
-    permissions: ['music:menu:list'],
-    name: 'musicMenu',
+    permissions: ['music:blog:list'],
     children: [{
-      path: 'menu/detail',
-      component: () => import('@/views/music/menu/detail'),
-      name: 'menu',
+      path: 'blog/detail',
+      component: () => import('@/views/music/blog/detail'),
+      name: 'musicBlogDetail',
       meta: {
-        title: `歌单详情`,
-        activeMenu: '/music/musicMenu'
+        title: `播客详情`,
+        activeMenu: '/music/blog'
       }
     }]
   },
-  // 音乐专辑
+  // 节目列表
   {
     path: '/music',
     component: Layout,
     hidden: true,
-    permissions: ['music:album:list'],
-    name: 'album',
+    permissions: ['music:program:list'],
     children: [{
-      path: 'album/detail',
-      component: () => import('@/views/music/album/detail'),
-      name: 'albumDetail',
+      path: 'program/detail',
+      component: () => import('@/views/music/program/detail'),
+      name: 'musicProgramDetail',
       meta: {
-        title: '专辑详情',
-        activeMenu: '/music/album'
+        title: `节目详情`,
+        activeMenu: '/music/program'
       }
     }]
   },
-  // 播客专辑
+  // 广播电台
   {
     path: '/music',
     component: Layout,
     hidden: true,
-    permissions: ['music:blog:list'],
-    name: 'blog',
+    permissions: ['music:radio:list'],
     children: [{
-      path: 'blog/detail',
-      component: () => import('@/views/music/blog/detail'),
-      name: 'blogDetail',
+      path: 'radio/detail',
+      component: () => import('@/views/music/radio/detail'),
+      name: 'musicRadioDetail',
       meta: {
-        title: `播客详情`,
-        activeMenu: '/music/blog'
+        title: `电台详情`,
+        activeMenu: '/music/radio'
       }
     }]
   },
-  // 节目
+  // 场景模式
   {
-    path: '/music',
+    path: "/music",
     component: Layout,
     hidden: true,
-    permissions: ['music:program:list'],
-    name: 'program',
+    permissions: ['music:model:list'],
     children: [{
-      path: 'program/detail',
-      component: () => import('@/views/music/program/detail'),
-      name: 'programDetail',
+      path: 'model/detail',
+      component: () => import('@/views/music/model/detail'),
+      name: 'musicModelDetail',
       meta: {
-        title: `节目详情`,
-        activeMenu: '/music/program'
+        title: `模式详情`,
+        activeMenu: '/music/model'
       }
     }]
   },
-  // 主播
+  // 场景歌单
   {
-    path: '/music',
+    path: "/music",
     component: Layout,
     hidden: true,
-    permissions: ['music:anchor:list'],
-    name: 'anchor',
+    permissions: ['music:playlist:list'],
     children: [{
-      path: 'anchor/detail',
-      component: () => import('@/views/music/anchor/detail'),
-      name: 'anchorDetail',
+      path: 'playlist/detail',
+      component: () => import('@/views/music/playlist/detail'),
+      name: 'musicPlaylistDetail',
       meta: {
-        title: '主播详情',
-        activeMenu: '/music/anchor'
+        title: `歌单详情`,
+        activeMenu: '/music/playlist'
       }
     }]
   },
-  // 广播电台
+  // 频道管理
+  // 定制频道
   {
-    path: '/music',
+    path: '/channel',
     component: Layout,
     hidden: true,
-    permissions: ['music:radio:list'],
-    name: 'radio',
+    permissions: ['channel:custom:list'],
     children: [{
-      path: 'radio/detail',
-      component: () => import('@/views/music/radio/detail'),
-      name: 'radioDetail',
+      path: 'custom/detail',
+      component: () => import('@/views/channel/custom/detail'),
+      name: 'channelCustomDetail',
       meta: {
-        title: `电台详情`,
-        activeMenu: '/music/radio'
+        title: `定制详情`,
+        activeMenu: '/channel/custom'
       }
     }]
   },
@@ -388,54 +379,71 @@ export const dynamicRoutes = [{
       }
     }]
   },
-  // 运营管理
-  // 启动页
+  // 智能手表
+  // 表盘管理
   {
-    path: '/operation',
+    path: '/watch',
     component: Layout,
     hidden: true,
-    permissions: ['operation:startPage:list'],
+    permissions: ['watch:list:list'],
     children: [{
-      path: 'startPage/detail',
-      component: () => import('@/views/operation/startPage/detail'),
-      name: 'startPageDetail',
+      path: 'watchList/detail',
+      component: () => import('@/views/watch/list/detail'),
+      name: 'watchListDetail',
       meta: {
-        title: '启动页详情',
-        activeMenu: '/operation/startPage'
+        title: `表盘详情`,
+        activeMenu: '/watch/watchList'
       }
     }]
   },
-  // 定制频道
+  // 标签管理
+  // 标签分类
   {
-    path: '/operation',
+    path: '/label',
     component: Layout,
     hidden: true,
-    permissions: ['operation:channel:list'],
-    name: 'channel',
+    permissions: ['label:tag:list'],
     children: [{
-      path: 'channel/detail',
-      component: () => import('@/views/operation/channel/detail'),
-      name: 'channelDetail',
+      path: 'tag/detail',
+      component: () => import('@/views/label/tag/detail'),
+      name: 'labelTagDetail',
       meta: {
-        title: `频道详情`,
-        activeMenu: '/operation/channel'
+        title: '标签详情',
+        activeMenu: '/label/tag'
       }
     }]
   },
-  // 标签分类
+  // 运营管理
+  // 启动页
   {
     path: '/operation',
     component: Layout,
     hidden: true,
-    permissions: ['operation:tag:list'],
-    name: 'tag',
+    permissions: ['operation:startPage:list'],
     children: [{
-      path: 'tag/detail',
-      component: () => import('@/views/operation/tag/detail'),
-      name: 'tagDetail',
+      path: 'startPage/detail',
+      component: () => import('@/views/operation/startPage/detail'),
+      name: 'startPageDetail',
       meta: {
-        title: '标签详情',
-        activeMenu: '/operation/tag'
+        title: '启动页详情',
+        activeMenu: '/operation/startPage'
+      }
+    }]
+  },
+  // 文章管理
+  // 设备文章
+  {
+    path: '/article',
+    component: Layout,
+    hidden: true,
+    permissions: ['article:list:list'],
+    children: [{
+      path: 'articleList/detail',
+      component: () => import('@/views/article/list/detail'),
+      name: 'articleListDetail',
+      meta: {
+        title: '文章详情',
+        activeMenu: '/article/articleList'
       }
     }]
   },
@@ -487,55 +495,6 @@ export const dynamicRoutes = [{
         activeMenu: '/service/flowPackage'
       }
     }]
-  },
-  // 签到管理
-  // 抽奖配置
-  {
-    path: '/registration',
-    component: Layout,
-    hidden: true,
-    permissions: ['registration:lotteryConfig:list'],
-    children: [{
-      path: 'lotteryConfig/detail',
-      component: () => import('@/views/registration/lottery/detail'),
-      name: 'lotteryConfigDetail',
-      meta: {
-        title: '配置详情',
-        activeMenu: '/registration/lotteryConfig'
-      }
-    }]
-  },
-  // 内容配置
-  {
-    path: '/registration',
-    component: Layout,
-    hidden: true,
-    permissions: ['registration:contentConfig:list'],
-    children: [{
-      path: 'contentConfig/detail',
-      component: () => import('@/views/registration/content/detail'),
-      name: 'contentConfigDetail',
-      meta: {
-        title: '配置详情',
-        activeMenu: '/registration/contentConfig'
-      }
-    }]
-  },
-  // 兑换配置
-  {
-    path: '/registration',
-    component: Layout,
-    hidden: true,
-    permissions: ['registration:exchangeConfig:list'],
-    children: [{
-      path: 'exchangeConfig/detail',
-      component: () => import('@/views/registration/exchange/detail'),
-      name: 'exchangeConfigDetail',
-      meta: {
-        title: '配置详情',
-        activeMenu: '/registration/exchangeConfig'
-      }
-    }]
   }
 ]
 

+ 4 - 24
src/views/device/article/detail.vue

@@ -13,12 +13,6 @@
       <el-form-item label="文章内容:" prop="content">
         <Editor v-model="form.content" :min-height="250" />
       </el-form-item>
-      <el-form-item label="背景图:" prop="pic">
-        <Upload listType="picture-card" :url="form.pic" @upload="upload($event, 'pic')" />
-      </el-form-item>
-      <el-form-item label="分享图:" prop="shareIcon">
-        <Upload listType="picture-card" :url="form.shareIcon" @upload="upload($event, 'shareIcon')" />
-      </el-form-item>
       <el-form-item label="文章状态:" prop="status" v-if="this.form.id">
         <el-select v-model="form.status" placeholder="请选择文章状态">
           <el-option v-for="item in statusOptions" :key="item.value" :label="item.label"
@@ -34,16 +28,14 @@
 </template>
 
 <script>
-import { create, detail, edit } from '@/api/device/article'
+import { create, detail, edit } from '@/api/article/list'
 import { devMixin } from '@/mixin/index'
 import { statusMixin } from './mixin'
-import Editor from '@/components/Editor/index'
-import Upload from '@/components/Upload/index.vue'
+import Editor from "@/components/Editor/index"
 export default {
   mixins: [devMixin, statusMixin],
   components: {
-    Editor,
-    Upload
+    Editor
   },
   data() {
     return {
@@ -59,15 +51,9 @@ export default {
         title: [{
           required: true, message: '请输入文章标题', trigger: 'blur'
         }],
-        pic: [{
-          required: true, message: '请上传文章背景图', trigger: 'change'
-        }],
         content: [{
           required: true, message: '请输入文章内容', trigger: 'blur'
         }],
-        shareIcon: [{
-          required: true, message: '请上传文章分享图', trigger: 'change'
-        }],
         status: [{
           required: true, message: '请选择文章状态', trigger: 'change'
         }]
@@ -92,12 +78,6 @@ export default {
         }
       })
     },
-
-    // 上传
-    upload(e, key) {
-      this.form[key] = e.file
-    },
-
     // 提交
     getSubmit() {
       this.$refs.form.validate((valid) => {
@@ -125,7 +105,7 @@ export default {
     },
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/device/article");
+      this.$tab.closeOpenPage("/article/articleList");
     }
   }
 }

+ 9 - 8
src/views/device/article/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <!-- 搜索 -->
-    <el-form inline size="mini">
+    <el-form inline label-width="100px" size="mini">
       <el-form-item label="设备:">
         <el-select v-model="form.deviceId" placeholder="请选择设备" clearable>
           <el-option v-for="item in devOptions" :key="item.value" :label="item.label" :value="item.value" />
@@ -17,9 +17,9 @@
         <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
         <el-button type="primary" icon="el-icon-plus" plain @click="getDetail()"
-          v-hasPermi="['device:article:add']">新增</el-button>
+          v-hasPermi="['article:list:add']">新增</el-button>
         <el-button type="primary" icon="el-icon-delete" @click="getDelete(deleteList)"
-          :disabled="deleteList.length > 0 ? false : true" v-hasPermi="['device:article:delete']">
+          :disabled="deleteList.length > 0 ? false : true" v-hasPermi="['article:list:delete']">
           批量删除
         </el-button>
       </el-form-item>
@@ -33,10 +33,10 @@
       <el-table-column label="文章状态" prop="status" align="center" :formatter="statusFormatter" />
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id)" v-hasPermi="['device:article:edit']">
+          <el-button type="text" @click="getDetail(scope.row.id)" v-hasPermi="['article:list:edit']">
             编辑
           </el-button>
-          <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['device:article:delete']">
+          <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['article:list:delete']">
             删除
           </el-button>
         </template>
@@ -46,11 +46,10 @@
 </template>
 
 <script>
-import { list, remove } from '@/api/device/article'
+import { list, remove } from '@/api/article/list'
 import { devMixin } from '@/mixin/index'
 import { statusMixin } from './mixin'
 export default {
-  name: 'Article',
   mixins: [devMixin, statusMixin],
   data() {
     return {
@@ -99,7 +98,7 @@ export default {
     // 新增 / 编辑
     getDetail(id) {
       this.$router.push({
-        path: `/device/article/detail`,
+        path: `/article/articleList/detail`,
         query: {
           id: id
         }
@@ -126,6 +125,8 @@ export default {
         ids = row.id
       }
       this.$confirm(`是否${title}?`, '提示', {
+        'confirmButtonText': '确定',
+        'cancelButtonText': '取消',
         type: 'warning'
       }).then(() => {
         remove({

src/views/device/article/mixin.js → src/views/article/list/mixin.js


+ 2 - 2
src/views/operation/channel/detail.vue

@@ -92,7 +92,7 @@
 
 <script>
 import Upload from '@/components/Upload/index'
-import { channelList, channelTemplate, channelDetail, edit, list, remove, queryList } from '@/api/operation/channel'
+import { channelList, channelTemplate, channelDetail, edit, list, remove, queryList } from '@/api/channel/custom'
 import { isFreeMixin } from '@/mixin/index'
 export default {
   dicts: ['channels_type'],
@@ -219,7 +219,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage('/operation/channel')
+      this.$tab.closeOpenPage('/channel/custom')
     },
 
     // 删除

+ 9 - 10
src/views/operation/channel/index.vue

@@ -2,7 +2,7 @@
   <div class="app-container">
     <!-- 新增 -->
     <el-button type="primary" icon="el-icon-plus" size="mini" @click="getDialog()"
-      v-hasPermi="['operation:channel:add']">
+      v-hasPermi="['channel:custom:add']">
       新增频道配置
     </el-button>
     <!-- 列表 -->
@@ -15,9 +15,9 @@
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
           <el-button type="text" @click="getDialog(scope.row, scope.$index)"
-            v-hasPermi="['operation:channel:edit']">编辑</el-button>
+            v-hasPermi="['channel:custom:edit']">编辑</el-button>
           <el-button v-if="scope.$index !== 0" type="delete" @click="getDelete(scope.row)"
-            v-hasPermi="['operation:channel:delete']">
+            v-hasPermi="['channel:custom:delete']">
             删除
           </el-button>
         </template>
@@ -31,8 +31,7 @@
         </el-form-item>
         <el-form-item v-if="index !== 1" label="关联设备:">
           <el-select v-model="ids" multiple placeholder="请选择关联设备">
-            <el-option v-for="item in devOptions" :key="item.label" :value="item.value.toString()"
-              :label="item.label" />
+            <el-option v-for="item in devOptions" :key="item.label" :value="item.value.toString()" :label="item.label" />
           </el-select>
         </el-form-item>
         <el-form-item v-if="title === '编辑'" label="内容列表:">
@@ -62,9 +61,8 @@
 </template>
 
 <script>
-import { channelPage, page, create, editPage, getRemove, devList } from '@/api/operation/channel'
+import { channelPage, page, create, editPage, getRemove, devList } from '@/api/channel/custom'
 export default {
-  name: 'Channel',
   dicts: ['deployment_form'],
   data() {
     return {
@@ -128,9 +126,8 @@ export default {
 
     // 编辑
     edit(e) {
-      this.dialogVisible = false
       this.$router.push({
-        path: `/operation/channel/detail`,
+        path: `/channel/custom/detail`,
         query: {
           channelId: e.row.id,
           audioType: e.row.channelType,
@@ -142,6 +139,8 @@ export default {
     // 删除
     getDelete(row) {
       this.$confirm(`是否删除${row.name}?`, '提示', {
+        'confirmButtonText': '确定',
+        'cancelButtonText': '取消',
         type: 'warning'
       }).then(() => {
         getRemove(row.id).then(res => {
@@ -217,7 +216,7 @@ export default {
     },
 
     // 取消
-    cancel() {
+    cancel(){
       this.dialogVisible = false
       this.getList()
     },

+ 58 - 53
src/views/device/list/detail.vue

@@ -53,60 +53,62 @@
       <!-- 子表单 -->
       <el-button v-if="disabled === false && form.typeList.length < 4" type="primary" icon="el-icon-plus"
         @click="getAdd">新增</el-button>
-      <div class="sub-form" v-for="(item, index) in form.typeList" :key="item.id">
-        <el-form-item label="设备模式:" :prop="`typeList.${index}.type`" :rules="{
+      <Draggable v-model="form.typeList" animation="300">
+        <div class="sub-form" v-for="(item, index) in form.typeList" :key="item.id">
+          <el-form-item label="设备模式:" :prop="`typeList.${index}.type`" :rules="{
               required: true,
               message: '请选择设备模式',
               trigger: 'change',
             }">
-          <el-select v-model="item.type" placeholder="请选择设备模式" @change="getTypeChange($event, index)">
-            <el-option v-for="item in dict.type.dev_list_type" :key="item.value" :label="item.label"
-              :value="Number(item.value)" :disabled="item.disabled" />
-          </el-select>
-        </el-form-item>
-        <el-form-item v-if="item.type !== 3" label="功能权限:" :prop="`typeList.${index}.functionList`"
-          :rules="{type: 'array', required: true, message: '请选择功能权限', trigger: 'change'}">
-          <el-select v-model="item.functionList" placeholder="请选择功能权限" multiple>
-            <el-option v-for="item in functionOptions" :key="item.id" :label="item.name" :value="item.type" />
-          </el-select>
-        </el-form-item>
-        <el-form-item v-if="item.type == 2" label="连接方式:" :prop="`typeList.${index}.connectType`"
-          :rules="{required: true, message: '请选择连接方式', trigger: 'change'}">
-          <el-select v-model="item.connectType" placeholder="请选择连接方式">
-            <el-option v-for="item in dict.type.dev_connect_type" :key="item.value" :label="item.label"
-              :value="Number(item.value)" />
-          </el-select>
-        </el-form-item>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item :label="item.type === 1 || 3 ? '连接引导图:' : '开机引导图'" :prop="`typeList.${index}.icon1`"
-              :rules="{ required: true, message: '请上传引导图片', trigger: 'change'}">
-              <Upload listType="picture-card" :url="item.icon1"
-                @upload="handleUploadIcon($event, index, 'icon1')" :disabled="disabled" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="配对键引导图:" :prop="`typeList.${index}.icon2`" style="float:right"
-              :rules="{ required: true, message: '请上传配对键引导图', trigger: 'change'}">
-              <Upload listType="picture-card" :url="item.icon2"
-                @upload="handleUploadIcon($event, index, 'icon2')" :disabled="disabled" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item v-if="item.type === 1 || item.type === 3" label="引导页:"
-          :prop="`typeList.${index}.guideUrl`"
-          :rules="{ required: true, message: '请输入引导页网址' , trigger: 'blur'}">
-          <el-input v-model="item.guideUrl" placeholder="请输入引导页网址" />
-        </el-form-item>
-        <el-form-item v-if="item.type === 1 || item.type === 3" label="引导页内容:"
-          :prop="`typeList.${index}.guidePageContent`"
-          :rules="{required: true, message: '请输入引导页内容', trigger: 'blur'}">
-          <Editor v-model="item.guidePageContent" :min-height="250" :readOnly="disabled" />
-        </el-form-item>
-        <!-- 删除按钮 -->
-        <el-link class="el-icon-close" v-if="form.typeList.length > 1" :underline="false"
-          @click="getDelete(index)" />
-      </div>
+            <el-select v-model="item.type" placeholder="请选择设备模式" @change="getTypeChange($event, index)">
+              <el-option v-for="item in dict.type.dev_list_type" :key="item.value" :label="item.label"
+                :value="Number(item.value)" :disabled="item.disabled" />
+            </el-select>
+          </el-form-item>
+          <el-form-item v-if="item.type !== 3" label="功能权限:" :prop="`typeList.${index}.functionList`"
+            :rules="{type: 'array', required: true, message: '请选择功能权限', trigger: 'change'}">
+            <el-select v-model="item.functionList" placeholder="请选择功能权限" multiple>
+              <el-option v-for="item in functionOptions" :key="item.id" :label="item.name"
+                :value="item.type" />
+            </el-select>
+          </el-form-item>
+          <el-form-item v-if="item.type == 2" label="连接方式:" :prop="`typeList.${index}.connectType`"
+            :rules="{required: true, message: '请选择连接方式', trigger: 'change'}">
+            <el-select v-model="item.connectType" placeholder="请选择连接方式">
+              <el-option v-for="item in dict.type.dev_connect_type" :key="item.value" :label="item.label"
+                :value="Number(item.value)" />
+            </el-select>
+          </el-form-item>
+          <el-form-item v-if="item.type === 1" label="引导页:" :prop="`typeList.${index}.guideUrl`"
+            :rules="{ required: true, message: '请输入引导页网址' , trigger: 'blur'}">
+            <el-input v-model="item.guideUrl" placeholder="请输入引导页网址" />
+          </el-form-item>
+          <el-row>
+            <el-col :span="12">
+              <el-form-item :label="item.type === 1 || 3 ? '连接引导页:' : '开机引导图'"
+                :prop="`typeList.${index}.icon1`"
+                :rules="{ required: true, message: '请上传引导图片', trigger: 'change'}">
+                <Upload listType="picture-card" :url="item.icon1"
+                  @upload="handleUploadIcon($event, index, 'icon1')" :disabled="disabled" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="配对键引导图:" :prop="`typeList.${index}.icon2`" style="float:right"
+                :rules="{ required: true, message: '请上传配对键引导图', trigger: 'change'}">
+                <Upload listType="picture-card" :url="item.icon2"
+                  @upload="handleUploadIcon($event, index, 'icon2')" :disabled="disabled" />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-form-item v-if="item.type === 1" label="引导页内容:" :prop="`typeList.${index}.guidePageContent`"
+            :rules="{required: true, message: '请输入引导页内容', trigger: 'blur'}">
+            <Editor v-model="item.guidePageContent" :min-height="250" :readOnly="disabled" />
+          </el-form-item>
+          <!-- 删除按钮 -->
+          <el-link class="el-icon-close" v-if="form.typeList.length > 1" :underline="false"
+            @click="getDelete(item.type, index)" />
+        </div>
+      </Draggable>
     </el-form>
     <div class="form-btn">
       <el-button @click="getCancel">取消</el-button>
@@ -120,6 +122,7 @@ import { Add, Detail, Edit } from "@/api/device/list";
 import { category, functions } from "../mixin/index";
 import Upload from "@/components/Upload/index";
 import Editor from "@/components/Editor/index";
+import Draggable from "vuedraggable";
 
 export default {
   dicts: [
@@ -132,7 +135,8 @@ export default {
   mixins: [category, functions],
   components: {
     Upload,
-    Editor
+    Editor,
+    Draggable,
   },
   data() {
     return {
@@ -265,9 +269,9 @@ export default {
     },
 
     // 删除子表单
-    getDelete(index) {
+    getDelete(e, index) {
       this.form.typeList.splice(index, 1);
-      this.dict.type.dev_list_type[index].disabled = false;
+      this.dict.type.dev_list_type[e - 1].disabled = false;
     },
 
     // 取消
@@ -317,6 +321,7 @@ export default {
 }
 
 .sub-form {
+  // width: 600px;
   position: relative;
   border: 1px solid #e8e8e8;
   padding: 25px 25px 0 0;

+ 2 - 2
src/views/device/version/index.vue

@@ -23,7 +23,7 @@
       <el-table-column prop="id" label="型号ID" align="center" />
       <el-table-column prop="title" label="升级标题" align="center" />
       <el-table-column prop="deviceTypeName" label="设备名称" align="center" />
-      <el-table-column prop="listType" label="设备类型" align="center" :formatter="typeFormatter" />
+      <el-table-column prop="type" label="设备类型" align="center" :formatter="typeFormatter" />
       <el-table-column prop="version" label="版本号" align="center" />
       <el-table-column label="下载路径" align="center" show-overflow-tooltip>
         <template slot-scope="scope">
@@ -128,7 +128,7 @@ export default {
 
     // 字典翻译
     typeFormatter(row) {
-      return row.listType.map(i => this.selectDictLabel(this.dict.type.dev_list_type, i)).join(',')
+      return this.selectDictLabel(this.dict.type.dev_list_type, row.type)
     }
   }
 }

+ 6 - 2
src/views/operation/tag/detail.vue

@@ -116,7 +116,7 @@
 </template>
 
 <script>
-import { contentList, findList, detail, edit, createTag, remove, removeChildren } from '@/api/operation/tag'
+import { contentList, findList, detail, edit, createTag, remove, removeChildren } from '@/api/label/tag'
 import { isFreeMixin } from '@/mixin/index'
 export default {
   dicts: ['audio_type'],
@@ -248,6 +248,8 @@ export default {
     // 删除标签
     getClose(id, name) {
       this.$confirm(`是否删除 ${name} 标签?`, '提示', {
+        'cancelButtonText': '取消',
+        'confirmButtonText': '确定',
         type: 'warning'
       }).then(() => {
         removeChildren(id).then(res => {
@@ -320,7 +322,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/operation/tag");
+      this.$tab.closeOpenPage("/label/tag");
     },
 
     // 提交
@@ -382,6 +384,8 @@ export default {
       remove(id).then(res => {
         if (res.code === 0) {
           this.$confirm('是否删除?', '警告', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
             type: 'warning'
           }).then(() => {
             this.$message.success('删除成功!')

+ 7 - 6
src/views/operation/tag/index.vue

@@ -2,7 +2,7 @@
   <div class="app-container">
     <!-- 新增 -->
     <el-button type="primary" icon="el-icon-plus" size="mini" @click="dialogVisible = true"
-      v-hasPermi="['operation:tag:add']">新增标签</el-button>
+      v-hasPermi="['label:tag:add']">新增标签</el-button>
     <!-- 列表 -->
     <el-table :data="tableData" height="614">
       <el-table-column label="排序" type="index" align="center" />
@@ -23,8 +23,8 @@
       </el-table-column>
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row)" v-hasPermi="['operation:tag:edit']">编辑</el-button>
-          <el-button type="delete" @click="getDelete(scope.row.id)" v-hasPermi="['operation:tag:delete']">
+          <el-button type="text" @click="getDetail(scope.row)" v-hasPermi="['label:tag:edit']">编辑</el-button>
+          <el-button type="delete" @click="getDelete(scope.row.id)" v-hasPermi="['label:tag:delete']">
             删除
           </el-button>
         </template>
@@ -55,9 +55,8 @@
 </template>
 
 <script>
-import { list, create, getRemove } from '@/api/operation/tag'
+import { list, create, getRemove } from '@/api/label/tag'
 export default {
-  name: 'Tag',
   data() {
     return {
       // 表单
@@ -95,7 +94,7 @@ export default {
     // 编辑
     getDetail(row) {
       this.$router.push({
-        path: '/operation/tag/detail',
+        path: '/label/tag/detail',
         query: {
           id: row.id
         }
@@ -105,6 +104,8 @@ export default {
     // 删除
     getDelete(id) {
       this.$confirm('是否删除当前标签', '提示', {
+        'confirmButtonText': '确定',
+        'cancelButtonText': '取消',
         type: 'warning'
       }).then(() => {
         getRemove(id).then(res => {

+ 84 - 296
src/views/music/album/detail.vue

@@ -1,336 +1,124 @@
 <template>
   <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="专辑名称:" prop="name">
-        <el-input v-model="form.name" placeholder="请输入专辑名称" maxlength="10" show-word-limit />
+    <el-form label-width="100px" size="small">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="音乐封面:">
+            <imageUpload />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="音乐名称:">
+            <el-input placeholder="请输入音乐名称" />
+          </el-form-item>
+          <el-form-item label="音乐类型:">
+            <el-select placeholder="请选择音乐类型">
+              <el-option />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="资源平台:">
+            <el-input disabled />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item label="音乐简介:">
+        <el-input type="textarea" rows="4" placeholder="请输入音乐简介" />
       </el-form-item>
-      <el-form-item label="专辑介绍" prop="description">
-        <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 5, maxRows: 10}"
-          maxlength="100" show-word-limit placeholder="请输入专辑介绍" />
-      </el-form-item>
-      <el-form-item label="专辑类型:" prop="albumType">
-        <el-select v-model="form.albumType" placeholder="请选择专辑类型">
-          <el-option v-for="item in albumTypeOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+      <el-form-item label="付费类型:">
+        <el-select placeholder="请选择付费类型">
+          <el-option />
         </el-select>
       </el-form-item>
-      <el-form-item label="资源平台:" prop="platformId">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
+      <el-form-item label="原价:">
+        <el-input placeholder="请输入原价" />
       </el-form-item>
-      <el-form-item label="付费类型:" prop="payType">
-        <el-select v-model="form.payType" placeholder="请选择付费类型">
-          <el-option v-for="item in payTypeOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
+      <el-form-item label="折扣价:">
+        <el-input placeholder="请输入折扣价" />
       </el-form-item>
-      <el-form-item v-if="form.payType !== 1" label="原价:" prop="price">
-        <el-input-number v-model="form.price" placeholder="请输入原价" :min="1" :precision="2" :controls="false" />
-      </el-form-item>
-      <el-form-item v-if="form.payType !== 1" label="折扣价:" prop="discount">
-        <el-input-number v-model="form.discount" placeholder="请输入折扣价" :min="1" :precision="2"
-          :controls="false" />
+      <el-form-item label="标签分类:">
+        <el-select placeholder="请选择标签分类">
+          <el-option />
+        </el-select>
       </el-form-item>
-      <el-form-item label="专辑封面:" prop="coverUrl">
-        <Upload listType="picture-card" :url="form.coverUrl" @upload="upload($event, 'coverUrl')"
-          :disabled="disabled" />
+      <el-form-item label="关联歌曲:">
+        <el-button type="primary" @click="dialogVisible = true">关联</el-button>
+        <el-button disabled>解除关联</el-button>
+        <el-table>
+          <el-table-column label="ID" align="center"></el-table-column>
+          <el-table-column label="歌曲名称" align="center"></el-table-column>
+          <el-table-column label="当前状态" align="center"></el-table-column>
+          <el-table-column label="操作" align="center">
+            <template>
+              <el-button>解除关联</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
       </el-form-item>
-      <el-form-item label="歌曲列表:">
-        <el-button type="primary" icon="el-icon-plus" @click="getDialog">添加歌曲</el-button>
+      <el-form-item>
+        <el-button @click="getCancel">取消</el-button>
+        <el-button type="primary" @click="getSubmit">提交</el-button>
       </el-form-item>
     </el-form>
-    <!-- 列表 -->
-    <el-table class="table" :data="form.programList" height="329px" v-loading="form_loading">
-      <el-table-column label="ID" prop="id" align="center" />
-      <el-table-column label="歌曲名称" prop="name" align="center" show-overflow-tooltip />
-      <el-table-column label="歌手名称" prop="singerName" align="center" show-overflow-tooltip />
-      <el-table-column label="播放时长" prop="playTime" align="center" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="操作" align="center">
-        <template slot-scope="scope">
-          <Audio :src="scope.row.progaramUrl" />
-          <el-button type="delete" :disabled="disabled" @click="getDelete(scope.$index)">删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
-    </div>
-
-    <!-- 弹窗 -->
-    <el-dialog :visible.sync="dialogVisible" title="添加歌曲" width="1100px">
-      <el-form inline size="mini" style="width: 100%">
-        <el-form-item label="歌曲名称:">
-          <el-input v-model="dialogForm.name" placeholder="请输入歌曲名称" clearable />
+    <!-- 关联弹窗 -->
+    <el-dialog :visible.sync="dialogVisible" title="关联歌曲" width="1000px">
+      <el-form inline size="mini">
+        <el-form-item label="ID:">
+          <el-input placeholder="请输入节目ID" />
         </el-form-item>
-        <el-form-item label="歌手名称:">
-          <el-input v-model="dialogForm.singerName" placeholder="请输入歌手名称" clearable />
-        </el-form-item>
-        <el-form-item label="资源平台:">
-          <el-select v-model="dialogForm.platformId" placeholder="请选择资源平台" clearable>
-            <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-              :label="item.label" />
-          </el-select>
+        <el-form-item label="歌曲名称:">
+          <el-input placeholder="请输入节目名称" />
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
-          <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
+          <el-button icon="el-icon-search" type="primary">搜索</el-button>
         </el-form-item>
       </el-form>
-      <el-table :data="tableData" v-loading="loading">
-        <el-table-column label="ID" prop="id" align="center" />
-        <el-table-column label="歌曲名称" prop="name" align="center" show-overflow-tooltip />
-        <el-table-column label="歌手名称" prop="singerName" align="center" show-overflow-tooltip />
-        <el-table-column label="播放时长" prop="playTime" align="center" />
-        <el-table-column label="操作" align="center">
-          <template slot-scope="scope">
-            <el-button type="text" @click="getChecked(scope.row)"
-              :disabled="form.programList.findIndex(i => i.id === scope.row.id) === -1 ? false : true">
-              选择
-            </el-button>
-          </template>
-        </el-table-column>
+      <el-table>
+        <el-table-column type="selection" />
+        <el-table-column label="ID" align="center" />
+        <el-table-column label="歌曲名称" align="center" />
+        <el-table-column label="当前状态" align="center" />
       </el-table>
-      <pagination v-show="total>0" :total="total" :page.sync="dialogForm.pageNum"
-        :limit.sync="dialogForm.pageSize" @pagination="getList" />
+      <!-- <pagination
+        v-show="total>0"
+        :total="total"
+        :page.sync="form.pageNum"
+        :limit.sync="form.pageSize"
+        @pagination="getList"
+      />-->
+      <div slot="footer">
+        <el-button>取消</el-button>
+        <el-button type="primary">关联</el-button>
+      </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { submit, detail } from '@/api/music/menu'
-import { list } from '@/api/music/list'
-import { platformMixin, onOrOffMixin, payTypeMixin, albumTypeMixin } from '@/mixin/index'
-import Upload from '@/components/Upload/index.vue'
-import Audio from '@/components/Audio/index.vue'
+import imageUpload from "@/components/Upload/index";
 export default {
-  mixins: [platformMixin, onOrOffMixin, payTypeMixin, albumTypeMixin],
   components: {
-    Upload,
-    Audio
+    imageUpload,
   },
   data() {
-    // 判断原价是否大于折扣价
-    var checkPrice = (rule, value, callback) => {
-      if (!value) {
-        callback(new Error('请输入原价'))
-      } else if (value.toString().length > 10) {
-        callback(new Error('字符长度不超过10个'))
-      } else if (this.form.discount && value < this.form.discount) {
-        callback(new Error('原价必须大于折扣价'))
-      } else {
-        callback()
-      }
-    }
-    // 判断折扣价是否小于原价
-    var checkDiscount = (rule, value, callback) => {
-      if (value) {
-        if (value.toString().length > 10) {
-          callback(new Error('字符长度不超过10个'))
-        } else if (this.form.price && value > this.form.price) {
-          callback(new Error('折扣价必须小于原价'))
-        } else {
-          callback()
-        }
-      }
-    }
     return {
-      // 遮罩层
-      form_loading: false,
-      loading: false,
-      // 表单
-      form: {
-        programList: [], // 歌曲列表
-        status: 1,
-        type: 1
-      },
-      // 校验
-      rules: {
-        name: [{
-          required: true, message: '请输入歌单名称', trigger: 'blur'
-        }],
-        description: [{
-          required: true, message: '请输入歌单介绍', trigger: 'blur'
-        }],
-        albumType: [{
-          required: true, message: '请选择专辑类型', trigger: 'blur'
-        }],
-        avatarNickName: [{
-          required: true, message: '请输入歌单创建者名称', trigger: 'blur'
-        }],
-        platformId: [{
-          required: true, message: '请选择资源平台', trigger: 'change'
-        }],
-        payType: [{
-          required: true, message: '请选择付费类型', trigger: 'change'
-        }],
-        price: [{
-          required: true, validator: checkPrice, trigger: 'blur'
-        }],
-        discount: [{
-          validator: checkDiscount, trigger: 'blur'
-        }],
-        coverUrl: [{
-          required: true, message: '请上传歌单封面', trigger: 'change'
-        }],
-        avatarNickHead: [{
-          required: true, message: '请上传创建者头像', trigger: 'change'
-        }]
-      },
       // 弹窗
       dialogVisible: false,
-      // 弹窗表单
-      dialogForm: {
-        pageNum: 1,
-        pageSize: 10,
-        status: 1
-      },
-      // 总数据
-      total: 0,
-      // 弹窗列表
-      tableData: [],
-      // 只读
-      disabled: false,
-      // 是否已选
-      disabledChecked: false
-    }
-  },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 15,
-      joinType: 2
-    })
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getDetail()
-    }
+    };
   },
   methods: {
-    // 详情
-    getDetail() {
-      this.form_loading = true
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-          this.form_loading = false
-        }
-      })
-    },
-    // 上传
-    upload(e, key) {
-      this.form[key] = e.file
-    },
-
-    // 添加歌曲
-    getDialog() {
-      this.dialogVisible = true
-      this.getList()
-    },
-
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.dialogForm).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.dialogForm.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.dialogForm = {
-        pageNum: 1,
-        pageSize: 10,
-        status: 1
-      }
-      this.getList()
-    },
-
-    // 选择
-    getChecked(row) {
-      this.form.programList.push({
-        id: row.id,
-        name: row.name,
-        singerName: row.singerName,
-        playTime: row.playTime,
-        status: row.status,
-        progaramUrl: row.progaramUrl
-      })
-      this.$message.success('添加成功!')
-    },
-
-    // 删除已选歌曲
-    getDelete(index) {
-      this.form.programList.splice(index, 1)
-    },
-
-    // 确定
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          if (this.form.programList) {
-            let arr = []
-            this.form.programList.map(i => {
-              arr.push(i.id)
-            })
-            this.form.programList = arr
-          }
-          this.form_loading = true
-          let title = this.form.id ? '编辑成功!' : '新增成功!'
-          submit(this.form).then(res => {
-            if (res.code === 0) {
-              this.$message.success(`${title}`)
-              if (!this.form.id) {
-                this.cancel()
-              } else {
-                this.getDetail()
-              }
-            }
-          })
-        } else {
-          return false
-        }
-      })
-    },
-
     // 取消
-    cancel() {
+    getCancel() {
       this.$tab.closeOpenPage("/music/album");
+      this.$refs.form.resetFields();
     },
-
-    // 字典翻译
-    statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    }
-  }
-}
+    // 提交
+    getSubmit() {},
+  },
+};
 </script>
 
 <style lang="scss" scoped>
 .el-form {
-  width: 500px;
-}
-
-.form-btn {
-  margin-top: 20px;
-}
-
-.table {
-  width: calc(100% - 100px);
-  margin-left: 100px;
+  width: 600px;
 }
 </style>

+ 61 - 163
src/views/music/album/index.vue

@@ -1,203 +1,101 @@
 <template>
   <div class="app-container">
-    <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="专辑名称:">
-        <el-input v-model="form.name" placeholder="请输入专辑名称" clearable />
-      </el-form-item>
+    <!-- 搜索框 -->
+    <el-form inline label-width="100px" size="mini">
       <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+        <el-select>
+          <el-option />
         </el-select>
       </el-form-item>
-      <el-form-item label="专辑类型:">
-        <el-select v-model="form.albumType" placeholder="请选择专辑类型">
-          <el-option v-for="item in albumTypeOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+      <el-form-item label="音乐类型:">
+        <el-select>
+          <el-option />
         </el-select>
       </el-form-item>
       <el-form-item label="付费类型:">
-        <el-select v-model="form.payType" placeholder="请选择付费类型">
-          <el-option v-for="item in payTypeOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+        <el-select>
+          <el-option />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="上架状态:">
+        <el-select>
+          <el-option />
         </el-select>
       </el-form-item>
-      <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option v-for="item in onOrOffOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+      <el-form-item label="标签分类:">
+        <el-select>
+          <el-option />
         </el-select>
       </el-form-item>
+      <el-form-item label="音乐ID:">
+        <el-input />
+      </el-form-item>
+      <el-form-item label="音乐名称:">
+        <el-input />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 1)">批量上架</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 2)">批量下架</el-button>
+        <el-button type="primary" icon="el-icon-plus" plain @click="getDetail()">新增</el-button>
+        <el-button type="primary" icon="el-icon-plus" plain>快捷新增(上传压缩包)</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading" @selection-change="handleSelect">
-      <el-table-column type="selection" align="center" />
-      <el-table-column label="ID" prop="id" align="center" show-overflow-tooltip />
-      <el-table-column label="专辑名称" prop="name" align="center" show-overflow-tooltip />
-      <el-table-column label="专辑封面" align="center" width="100px">
-        <template slot-scope="scope">
-          <el-image v-if="scope.row.coverUrl" :src="scope.row.coverUrl" />
-        </template>
-      </el-table-column>
-      <el-table-column label="专辑类型" prop="albumType" align="center" :formatter="typeFormatter" show-overflow-tooltip />
-      <el-table-column label="付费类型" prop="payType" align="center" :formatter="payTypeFormatter" />
-      <el-table-column label="歌曲数量" prop="programCount" align="center" />
-      <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="更新时间" prop="updateTime" align="center">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
-        </template>
-      </el-table-column>
+    <el-table :data="tableData">
+      <el-table-column prop="id" label="音乐ID" align="center" />
+      <el-table-column prop="name" label="音乐名称" align="center" />
+      <el-table-column prop="img" label="音乐封面" align="center"></el-table-column>
+      <el-table-column prop="musicType" label="音乐类型" align="center"></el-table-column>
+      <el-table-column prop="payType" label="付费类型" align="center"></el-table-column>
+      <el-table-column prop="titleType" label="标签分类" align="center"></el-table-column>
+      <el-table-column prop="number" label="歌曲数量" align="center"></el-table-column>
+      <el-table-column prop="status" label="上架状态" align="center"></el-table-column>
+      <el-table-column prop="update" label="更新时间" align="center"></el-table-column>
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 2" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 1)">上架</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button v-else type="text" @click="getChange(scope.row, 2)">下架</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id)">查看</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
+          <el-button type="text">上架</el-button>
+          <!-- <el-button type="text">下架</el-button> -->
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
   </div>
 </template>
 
 <script>
-import { list, change, remove } from '@/api/music/menu'
-import { platformMixin, onOrOffMixin, payTypeMixin, albumTypeMixin } from '@/mixin/index'
 export default {
-  mixins: [platformMixin, onOrOffMixin, payTypeMixin, albumTypeMixin],
   data() {
     return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10,
-        type: 1
-      },
-      // 总数据
-      total: 0,
-      // 列表
-      tableData: [],
-      // 批量上下架
-      obj: {
-        id: '',
-        name: '已选数据'
-      }
-    }
-  },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 15
-    })
-    this.getList()
+      tableData: [
+        {
+          id: 1,
+          name: "测试",
+          img: "",
+          musicType: "测试",
+          payType: "免费",
+          titleType: "测试",
+          number: "2",
+          status: "下架",
+          update: "2022/3/16 11:33:00",
+        },
+      ],
+    };
   },
   methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.form.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.form = {
-        pageNum: 1,
-        pageSize: 10,
-        type: 1
-      }
-      this.getList()
-    },
-
-    // 新增 / 查看 / 编辑
-    getDetail(id, boolean) {
+    // 查看 / 编辑
+    getDetail(id) {
       this.$router.push({
         path: `/music/album/detail`,
         query: {
           id: id,
-          disabled: boolean
-        }
-      })
+        },
+      });
     },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 1 ? '上架' : '下架'
-      this.$confirm(`是否${title}${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change(row.id, status).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove(row.id).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 多选
-    handleSelect(e) {
-      this.obj.id = ''
-      e.map((item, index) => this.obj.id += item.id + ((index + 1) < e.length ? ',' : ''))
-    },
-
-    // 字典翻译
-    platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId)
-    },
-
-    statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    },
-
-    typeFormatter(row) {
-      return this.selectDictLabel(this.albumTypeOptions, row.albumType)
-    },
-
-    payTypeFormatter(row) {
-      return this.selectDictLabel(this.payTypeOptions, row.payType)
-    }
+    // 搜索
+    getSearch() {},
+    // 重置
+    getRefresh() {},
   },
 };
 </script>

+ 0 - 117
src/views/music/anchor/detail.vue

@@ -1,117 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="主播名称:" prop="nickname">
-        <el-input v-model="form.nickname" placeholder="请输入主播名称" />
-      </el-form-item>
-      <el-form-item label="主播简介:" prop="description">
-        <el-input v-model="form.description" type="textarea" rows="5" maxlength="100" show-word-limit
-          placeholder="请输入主播简介" />
-      </el-form-item>
-      <el-form-item label="资源平台:" prop="platformId">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="主播头像:" prop="avatar">
-        <Upload listType="picture-card" :url="form.avatar" @upload="upload" :disabled="disabled" />
-      </el-form-item>
-    </el-form>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
-    </div>
-  </div>
-</template>
-
-<script>
-import { submit, detail } from '@/api/music/anchor'
-import Upload from '@/components/Upload/index.vue'
-import { platformMixin } from '@/mixin/index'
-export default {
-  mixins: [platformMixin],
-  components: {
-    Upload
-  },
-  data() {
-    return {
-      // 表单
-      form: {
-        status: 1
-      },
-      // 校验
-      rules: {
-        nickname: [{
-          required: true, message: '请输入主播名称', trigger: 'blur'
-        }],
-        description: [{
-          required: true, message: '请输入主播简介', trigger: 'blur'
-        }],
-        platformId: [{
-          required: true, message: '请选择资源平台', trigger: 'change'
-        }],
-        avatar: [{
-          required: true, message: '请上传主播头像', trigger: 'change'
-        }]
-      },
-      // 只读
-      disabled: false
-    }
-  },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 12,
-      joinType: 2
-    })
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getList()
-    }
-  },
-  methods: {
-    getList() {
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-        }
-      })
-    },
-
-    // 上传
-    upload(e) {
-      this.form.avatar = e.file
-    },
-
-    // 确定
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          let title = this.form.id ? '编辑成功!' : '新增成功!'
-          submit(this.form).then(res => {
-            if (res.code === 0) {
-              this.$message.success(`${title}`)
-              this.cancel()
-            }
-          })
-        } else {
-          return false
-        }
-      })
-    },
-
-    // 取消
-    cancel() {
-      this.$tab.closeOpenPage('/music/anchor')
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.el-form {
-  width: 500px;
-}
-</style>

+ 121 - 88
src/views/music/anchor/index.vue

@@ -1,88 +1,125 @@
 <template>
   <div class="app-container">
     <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="主播名称:">
-        <el-input v-model="form.nickname" placeholder="请输入主播名称" clearable />
-      </el-form-item>
+    <el-form inline label-width="100px" size="mini">
       <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+        <el-select v-model="listForm.platformId" placeholder="请选择资源平台">
+          <el-option v-for="item in platformOptions" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
-      <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option v-for="item in onOrOffOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
+      <el-form-item label="主播名称:">
+        <el-input v-model="listForm.nickname" placeholder="请输入主播名称"></el-input>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
+        <el-button type="primary" icon="el-icon-plus" plain @click="getDialog()">新增</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->
     <el-table :data="tableData" v-loading="loading">
-      <el-table-column label="ID" prop="id" align="center" />
-      <el-table-column label="主播名称" prop="nickname" align="center" />
-      <el-table-column label="主播头像" align="center" width="100px">
+      <el-table-column prop="id" label="主播ID" align="center" />
+      <el-table-column prop="nickname" label="主播名称" align="center" />
+      <el-table-column prop="img" label="主播头像" align="center" width="100px">
         <template slot-scope="scope">
-          <el-image v-if="scope.row.avatar" :src="scope.row.avatar" />
+          <el-image :src="scope.row.avatar" />
         </template>
       </el-table-column>
-      <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
+      <el-table-column prop="platformName" label="资源平台" align="center" />
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 2" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 1)">上架</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button v-else type="text" @click="getChange(scope.row, 2)">下架</el-button>
+          <el-button type="text" @click="getDialog(scope.row, '查看')">查看</el-button>
+          <el-button v-if="scope.row.platformName !== '蜻蜓' && scope.row.platformName !== 'qq音乐'" type="text"
+            @click="getDialog(scope.row, '编辑')">编辑</el-button>
+          <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
+    <!-- 分页 -->
+    <pagination v-show="total>0" :total="total" :page.sync="listForm.pageIndex"
+      :limit.sync="listForm.pageSize" @pagination="getList" />
+    <!-- 弹窗 -->
+    <el-dialog :title="title" :visible.sync="dialogVisible" width="600px">
+      <el-form :model="submitForm" ref="submitForm" label-width="100px" :disabled="title === '查看'">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="主播头像:">
+              <Upload listType="picture-card" :url="submitForm.avatar" @upload="getUpload"
+                :disabled="title === '查看'" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="主播名称:">
+              <el-input v-model="submitForm.nickname" placeholder="请输入主播名称" />
+            </el-form-item>
+            <el-form-item label="资源平台:">
+              <el-select v-model="submitForm.platformId" placeholder="请选择资源平台">
+                <el-option v-for="item in platformOptions" :key="item.id" :label="item.name" :value="item.id"
+                  :disabled="item.disabled" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="主播简介:">
+          <el-input v-model="submitForm.description" type="textarea" placeholder="请输入主播简介" rows="4">
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="dialogVisible = false">取消</el-button>
+        <el-button v-show="title !== '查看'" type="primary" @click="getSubmit">确定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { list, change, remove } from '@/api/music/anchor'
-import { platformMixin, onOrOffMixin } from '@/mixin/index'
+import { getPlatformPage } from '@/api/music/platform'
+import { getPage, getAdd, getEdit, getDetail, getDelete } from '@/api/music/anchor'
+import Upload from "@/components/Upload/index";
 export default {
-  mixins: [platformMixin, onOrOffMixin],
+  components: {
+    Upload,
+  },
   data() {
     return {
       // 遮罩层
       loading: false,
       // 表单
-      form: {
-        pageNum: 1,
+      listForm: {
+        pageIndex: 1,
         pageSize: 10
       },
-      // 总数据
       total: 0,
       // 列表
-      tableData: []
-    }
+      tableData: [],
+      // 弹窗
+      dialogVisible: false,
+      title: '',
+      // 表单
+      submitForm: {},
+      // 资源平台
+      platformOptions: [],
+    };
   },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 12
+  async mounted() {
+    // 资源平台列表
+    getPlatformPage({
+      pageIndex: 1,
+      pageSize: 10
+    }).then(res => {
+      if (res.code === 0) {
+        this.platformOptions = res.data.records
+        this.platformOptions.find(i => i.name === '蜻蜓').disabled = true
+        this.platformOptions.find(i => i.name === 'qq音乐').disabled = true
+      }
     })
-    this.getList()
+    await this.getList()
   },
   methods: {
-    // 列表
     getList() {
       this.loading = true
-      list(this.form).then(res => {
+      getPage(this.listForm).then(res => {
         if (res.code === 0) {
           this.tableData = res.data.records
           this.total = res.data.total
@@ -91,73 +128,69 @@ export default {
       })
     },
 
+    // 打开弹窗
+    getDialog(e, key) {
+      this.dialogVisible = true;
+      key ? this.title = key : [this.title = '新增', this.submitForm = {}]
+      if (e) {
+        getDetail({ id: e.id }).then(res => {
+          if (res.code === 0) {
+            this.submitForm = res.data
+          }
+        })
+      }
+    },
+
     // 搜索
     getSearch() {
-      this.form.pageNum = 1
+      this.listForm.pageIndex = 1
       this.getList()
     },
 
     // 重置
     getRefresh() {
-      this.form = {
-        pageNum: 1,
+      this.listForm = {
+        pageIndex: 1,
         pageSize: 10
       }
       this.getList()
     },
 
-    // 新增 查看 编辑
-    getDetail(id, boolean) {
-      this.$router.push({
-        path: `/music/anchor/detail`,
-        query: {
-          id: id,
-          disabled: boolean
+    // 上传
+    getUpload(e) {
+      this.submitForm.avatar = e.file
+    },
+
+    // 删除
+    getDelete(row) {
+      getDelete({ id: row.id }).then(res => {
+        if (res.code === 0) {
+          this.$message.success('删除成功!')
+          this.getList()
         }
       })
     },
 
-    // 上下架
-    getChange(row, status) {
-      let title = status === 1 ? '上架' : '下架'
-      this.$confirm(`是否${title}${row.nickname}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change(row.id, status).then(res => {
+    // 确定
+    getSubmit() {
+      if (this.title === '新增') {
+        getAdd(this.submitForm).then(res => {
           if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
+            this.$message.success('新增成功!')
+            this.dialogVisible = false
             this.getList()
           }
         })
-      }).catch(() => { })
-    },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.nickname}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove(row.id).then(res => {
+      } else {
+        getEdit(this.submitForm).then(res => {
           if (res.code === 0) {
-            this.$message.success('删除成功!')
+            this.$message.success('修改成功!')
+            this.dialogVisible = false
             this.getList()
           }
         })
-      }).catch(() => { })
-    },
-
-
-    // 字典翻译
-    platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId)
-    },
-
-    statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
+      }
     }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-</style>
+  },
+};
+</script>

+ 123 - 300
src/views/music/blog/detail.vue

@@ -1,373 +1,196 @@
 <template>
   <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="播客名称:" prop="name">
-        <el-input v-model="form.name" placeholder="请输入播客名称" maxlength="50" show-word-limit />
+    <el-form class="form" label-width="100px" size="small">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="播客封面:">
+            <Upload listType="picture-card" @upload="getUpload" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="播客名称:">
+            <el-input placeholder="请输入播客名称" />
+          </el-form-item>
+          <el-form-item label="播客分类:">
+            <el-select placeholder="请选择播客分类">
+              <el-option />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="资源平台:">
+            <el-input disabled />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item label="音乐简介:">
+        <el-input type="textarea" rows="4" placeholder="请输入音乐简介" />
       </el-form-item>
-      <el-form-item label="主播名称:" prop="podcasterIds">
-        <el-select v-model="form.podcasterIds" multiple filterable remote reserve-keyword
-          placeholder="请输入主播名称" :remote-method="getSelect" no-data-text="请新增主播">
-          <el-option v-for="item in anchorOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+      <el-form-item label="付费类型:">
+        <el-select placeholder="请选择付费类型">
+          <el-option />
         </el-select>
       </el-form-item>
-      <el-form-item label="播客分类:" prop="categoryIds">
-        <el-select v-model="form.categoryIds" multiple placeholder="请选择播客分类">
-          <el-option v-for="item in classifyOptions" :key="item.value" :value="item.value.toString()"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="播客介绍:" prop="description">
-        <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 5, maxRows: 10}"
-          maxlength="300" show-word-limit placeholder=" 请输入播客介绍" />
+      <el-form-item label="原价:">
+        <el-input placeholder="请输入原价" />
       </el-form-item>
-      <el-form-item label="资源平台:" prop="platformId">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
+      <el-form-item label="折扣价:">
+        <el-input placeholder="请输入折扣价" />
       </el-form-item>
-      <el-form-item label="付费类型:" prop="charging">
-        <el-select v-model="form.charging" placeholder="请选择付费类型">
-          <el-option v-for="item in payTypeOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+      <el-form-item label="标签分类:">
+        <el-select placeholder="请选择标签分类">
+          <el-option />
         </el-select>
       </el-form-item>
-      <el-form-item v-if="form.charging !== 1" label="原价:" prop="price">
-        <el-input-number v-model="form.price" placeholder="请输入原价" :min="1" :precision="2" :controls="false" />
-      </el-form-item>
-      <el-form-item v-if="form.charging !== 1" label="折扣价:" prop="discountedPrice">
-        <el-input-number v-model="form.discountedPrice" placeholder="请输入折扣价" :min="1" :precision="2"
-          :controls="false" />
-      </el-form-item>
-      <el-form-item label="播客封面" prop="thumb">
-        <Upload listType="picture-card" :url="form.thumb" @upload="upload" :disabled="disabled" />
-      </el-form-item>
-      <el-form-item label="关联节目:" prop="adminPodCastProgramDetailResp">
-        <el-button type="primary" @click="getDialog">关联节目</el-button>
-        <el-button @click="getDelete" :disabled="ids.length > 0 ? false : true">解除关联</el-button>
-      </el-form-item>
-      <el-form-item style="width: 1000px">
-        <el-table :data="form.adminPodCastProgramDetailResp" height="497" @selection-change="handleSelect">
+      <el-form-item label="关联节目:" style="width: 1000px">
+        <el-button type="primary" @click="getPage">关联</el-button>
+        <el-button @click="getDelete">解除关联</el-button>
+        <el-table :data="tableData1" height="229px" :row-key="getRowKey"
+          @selection-change="selectionChangeDelete">
           <el-table-column type="selection" align="center" />
-          <el-table-column label="ID" prop="id" align="center" show-overflow-tooltip />
-          <el-table-column label="节目名称" prop="name" align="center" show-overflow-tooltip />
-          <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
-          <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
+          <el-table-column prop="id" label="节目ID" align="center" width="150px" />
+          <el-table-column prop="name" label="节目名称" align="center" show-overflow-tooltip />
+          <el-table-column prop="platformId" label="资源平台" align="center" width="100px" />
+          <el-table-column prop="status" label="当前状态" align="center" width="100px"
+            :formatter="statusFormatter" />
         </el-table>
       </el-form-item>
+      <el-form-item>
+        <el-button @click="getCancel">取消</el-button>
+        <el-button type="primary" @click="getSubmit">提交</el-button>
+      </el-form-item>
     </el-form>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
-    </div>
 
-    <!-- 弹窗 -->
-    <el-dialog :visible.sync="dialogVisible" title="关联节目" width="1100px">
-      <el-form inline size="mini" style="width: 100%">
+    <!-- 关联弹窗 -->
+    <el-dialog :visible.sync="dialogVisible" title="关联节目" width="1000px">
+      <el-form :model="programmeForm" inline size="mini">
         <el-form-item label="节目ID:">
-          <el-input v-model="dialogForm.id" placeholder="请输入节目ID" />
+          <el-input v-model="programmeForm.id" placeholder="请输入节目ID" />
         </el-form-item>
         <el-form-item label="节目名称:">
-          <el-input v-model="dialogForm.name" placeholder="请输入节目名称" />
-        </el-form-item>
-        <el-form-item label="付费类型:">
-          <el-select v-model="dialogForm.isFree" placeholder="请选择付费类型">
-            <el-option v-for="item in freeOptions" :key="item.value" :value="item.value"
-              :label="item.label" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="资源平台:">
-          <el-select v-model="dialogForm.platformId" placeholder="请选择资源平台">
-            <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-              :label="item.label" />
-          </el-select>
+          <el-input v-model="programmeForm.name" placeholder="请输入节目名称" />
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
+          <el-button icon="el-icon-search" type="primary" @click="getSearch">搜索</el-button>
           <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
         </el-form-item>
       </el-form>
-      <el-table :data="dialogTableData" v-loading="loading">
-        <el-table-column label="ID" prop="id" align="center" />
-        <el-table-column label="节目名称" prop="name" align="center" show-overflow-tooltip />
-        <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
-        <el-table-column label="付费类型" prop="isFree" align="center" :formatter="freeFormatter" />
-        <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-        <el-table-column label="操作" align="center">
-          <template slot-scope="scope">
-            <el-button type="text" @click="getChecked(scope.row)"
-              :disabled="form.adminPodCastProgramDetailResp.findIndex(i => i.id === scope.row.id) === -1 ? false : true">
-              选择
-            </el-button>
-          </template>
-        </el-table-column>
+      <el-table :data="programmeTable" ref="programmeTable" v-loading="loading" :row-key="getRowKey"
+        @selection-change="selectionChangeAdd">
+        <el-table-column type="selection" reserve-selection align="center" />
+        <el-table-column prop="id" label="节目ID" align="center" width="150px" />
+        <el-table-column prop="name" label="节目名称" align="center" show-overflow-tooltip />
+        <el-table-column prop="platformId" label="资源平台" align="center" width="100px" />
+        <el-table-column prop="status" label="当前状态" align="center" width="100px"
+          :formatter="statusFormatter" />
       </el-table>
-      <pagination v-show="total>0" :total="total" :page.sync="dialogForm.pageNum"
-        :limit.sync="dialogForm.pageSize" @pagination="getList" />
+      <pagination v-show="total>0" :total="total" :page.sync="programmeForm.pageNum"
+        :limit.sync="programmeForm.pageSize" @pagination="getPage" />
     </el-dialog>
   </div>
 </template>
 
 <script>
-import Upload from '@/components/Upload/index.vue'
-import { classifyMixin, platformMixin, payTypeMixin, onOrOffMixin, isFreeMixin } from '@/mixin/index'
-import { selectAnchor } from '@/api/music/anchor'
-import { list } from '@/api/music/program'
-import { detail, submit, relieve } from '@/api/music/blog'
+import { getProgrammePage } from '@/api/music/blog'
+import { statusMixin } from '../mixin/index'
+import Upload from "@/components/Upload/index";
 export default {
-  mixins: [classifyMixin, platformMixin, payTypeMixin, onOrOffMixin, isFreeMixin],
+  mixins: [statusMixin],
   components: {
-    Upload
+    Upload,
   },
   data() {
-    // 判断原价是否大于折扣价
-    var checkPrice = (rule, value, callback) => {
-      if (!value) {
-        callback(new Error('请输入原价'))
-      } else if (value.toString().length > 10) {
-        callback(new Error('字符长度不超过10个'))
-      } else if (this.form.discountedPrice) {
-        value > this.form.discountedPrice ? callback() : callback(new Error('原价必须大于折扣价'))
-      }
-    }
-    // 判断折扣价是否小于原价
-    var checkDiscount = (rule, value, callback) => {
-      if (value) {
-        if (value.toString().length > 10) {
-          callback(new Error('字符长度不超过10个'))
-        } else if (this.form.price) {
-          value < this.form.price ? callback() : callback(new Error('折扣价必须小于原价'))
-        }
-      }
-    }
     return {
       // 遮罩层
-      loading: false,
+      loading: true,
       // 表单
-      form: {
-        adminPodCastProgramDetailResp: [],
-        podcastProgramIds: [],
-        categoryIds: [],
-        status: 1
+      programmeForm: {
+        pageNum: 1,
+        pageSize: 10
       },
-      // 主播
-      anchorOptions: [],
       // 弹窗
       dialogVisible: false,
-      // 弹窗表单
-      dialogForm: {
-        pageNum: 1,
-        pageSize: 10,
-        status: 1
-      },
-      // 总数据
-      total: 0,
-      // 弹窗列表
-      dialogTableData: [],
-      // 只读
-      disabled: false,
-      // 校验
-      rules: {
-        name: [{
-          required: true, message: '请输入播客专辑名称', trigger: 'blur'
-        }],
-        podcasterIds: [{
-          required: true, message: '请输入主播名称', trigger: 'blur'
-        }],
-        categoryIds: [{
-          required: true, message: '请选择播客分类', trigger: 'change'
-        }],
-        platformId: [{
-          required: true, message: '请选择资源平台', trigger: 'change'
-        }],
-        charging: [{
-          required: true, message: '请选择付费类型', trigger: 'change'
-        }],
-        price: [{
-          required: true, validator: checkPrice, trigger: 'blur'
-        }],
-        discountedPrice: [{
-          validator: checkDiscount, trigger: 'blur'
-        }],
-        thumb: [{
-          required: true, message: '请上传播客封面', trigger: 'change'
-        }],
-        adminPodCastProgramDetailResp: [{
-          required: true, message: '请关联节目', trigger: 'change'
-        }]
-      },
+      // 选择的节目列表
+      tableData1: [],
       // 解除关联
-      ids: [],
-      // 是否已选
-      disabledChecked: false
-    }
-  },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 8,
-      joinType: 2
-    })
-    // 分类
-    this.getClassify(8)
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getDetail()
-    }
+      delete_list: [],
+      flag: false,
+      // 节目总列表
+      programmeTable: [],
+      total: 0,
+    };
   },
   methods: {
-    // 详情
-    getDetail() {
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-          this.anchorOptions = []
-          res.data.adminPrdCasterResp.map(i => {
-            this.anchorOptions.push({
-              value: i.podcasterId,
-              label: i.podcasterName
-            })
-          })
-          this.form.podcasterIds = res.data.podcasterIds.split(',')
-        }
-      })
+    // 上传封面
+    getUpload(e){
+      
     },
 
-    // 查询主播
-    getSelect(e) {
-      if (e) {
-        setTimeout(() => {
-          this.anchorOptions = []
-          selectAnchor(e).then(res => {
-            if (res.code === 0) {
-              res.data.map(i => {
-                this.anchorOptions.push({
-                  value: i.id,
-                  label: i.nickname
-                })
-              })
-            }
-          }, 500)
+    // 关联
+    getPage() {
+      this.loading = true
+      this.dialogVisible = true,
+        getProgrammePage(this.programmeForm).then(res => {
+          if (res.code === 0) {
+            this.programmeTable = res.data.records
+            this.total = res.data.total
+            this.loading = false
+          }
         })
-      }
     },
 
-    // 上传
-    upload(e) {
-      this.form.thumb = e.file
+    // 多选
+    selectionChangeDelete(e) {
+      this.delete_list = e
     },
 
-    // 弹窗
-    getDialog() {
-      this.dialogVisible = true
-      this.getList()
+    selectionChangeAdd(e) {
+      if(this.flag) return
+      this.tableData1 = e
     },
 
-    // 节目列表
-    getList() {
-      this.loading = true
-      list(this.dialogForm).then(res => {
-        if (res.code === 0) {
-          this.dialogTableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
+    getRowKey(row) {
+      return row.id;
+    },
+
+    // 解除关联
+    getDelete() {
+      this.flag = true
+      this.delete_list.forEach(i => {
+        this.tableData1.splice(i, 1)
+        this.$refs.programmeTable.toggleRowSelection(i)
       })
+      this.flag = false
     },
 
     // 搜索
     getSearch() {
-      this.dialogForm.pageNum = 1
-      this.getList()
+      this.programmeForm.pageNum = 1
+      this.getPage()
     },
 
     // 重置
     getRefresh() {
-      this.dialogForm = {
+      this.programmeForm = {
         pageNum: 1,
-        pageSize: 10,
-        status: 1
+        pageSize: 10
       }
-      this.getList()
+      this.getPage()
     },
 
-    // 选择
-    getChecked(row) {
-      this.form.adminPodCastProgramDetailResp.push(row)
-    },
-
-    // 解除关联
-    getDelete() {
-      relieve({
-        id: this.form.id,
-        podcastProgramIds: this.ids
-      }).then(res => {
-        if (res.code === 0) {
-          this.$message.success('解除成功!')
-          this.getDetail()
-        }
-      })
-    },
-
-    // 确定
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          let title = this.form.id ? '编辑成功!' : '新增成功!'
-          this.form.podcastProgramIds = []
-          this.form.adminPodCastProgramDetailResp.map(i => {
-            this.form.podcastProgramIds.push(i.id)
-          })
-          delete this.form.adminPodCastProgramDetailResp
-          submit(this.form).then(res => {
-            if (res.code === 0) {
-              this.$message.success(`${title}`)
-              if (this.form.id) {
-                this.getDetail()
-              } else {
-                this.cancel()
-              }
-            }
-          })
-        } else {
-          return false
-        }
-      })
-    },
-
-    // 多选
-    handleSelect(e) {
-      this.ids = []
-      e.map(i => this.ids.push(i.id))
-    },
-
-    // 取消
-    cancel() {
-      this.$tab.closeOpenPage('/music/blog')
+    getCancel() {
+      this.$tab.closeOpenPage("/music/blog");
     },
+    getSubmit() { },
 
     // 字典翻译
-    platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId)
-    },
     statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    },
-    freeFormatter(row) {
-      return this.selectDictLabel(this.freeOptions, row.isFree)
+      return this.selectDictLabel(this.statusOptions, row.status)
     }
-  }
-}
+  },
+};
 </script>
 
 <style lang="scss" scoped>
-.el-form {
-  width: 500px;
-}
-
-.form-btn {
-  margin-top: 20px;
+.form {
+  width: 600px;
 }
 </style>

+ 67 - 120
src/views/music/blog/index.vue

@@ -1,119 +1,111 @@
 <template>
   <div class="app-container">
     <!-- 搜索 -->
-    <el-form inline size="mini">
+    <el-form inline label-width="100px" size="mini">
       <el-form-item label="播客名称:">
-        <el-input v-model="form.podcastName" placeholder="请输入播客名称" clearable />
+        <el-input v-model="form.name" placeholder="请输入播客名称" />
       </el-form-item>
-      <el-form-item label="主播名称:">
-        <el-input v-model="form.podcasterName" placeholder="请输入主播名称" clearable />
-      </el-form-item>
-      <el-form-item label="付费类型:">
-        <el-select v-model="form.payType" placeholder="请选择付费类型" clearable>
-          <el-option v-for="item in payTypeOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option v-for="item in onOrOffOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+      <el-form-item label="播客分类:">
+        <el-select v-model="form.category_id" placeholder="请选择播客分类">
+          <el-option v-for="item in categoryOptions" :key="item.id" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 1)">批量上架</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 2)">批量下架</el-button>
+        <el-button type="primary" icon="el-icon-plus" plain @click="getDetail()">新增</el-button>
+        <el-button type="primary" icon="el-icon-plus" plain>快捷新增(上传压缩包)</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading" @selection-change="handleSelect">
-      <el-table-column type="selection" align="center" />
-      <el-table-column label="ID" prop="id" align="center" show-overflow-tooltip />
-      <el-table-column label="播客名称" prop="name" align="center" show-overflow-tooltip />
+    <el-table :data="tableData">
+      <el-table-column prop="id" label="播客ID" align="center" />
+      <el-table-column prop="name" label="播客名称" align="center" />
       <el-table-column label="播客封面" align="center" width="100px">
         <template slot-scope="scope">
-          <el-image :src="scope.row.thumb" />
+          <el-image :src="scope.row.thumb" :preview-src-list="[scope.row.thumb]" />
         </template>
       </el-table-column>
-      <el-table-column label="播客分类" prop="categoryids" align="center" :formatter="categoryFormatter"
-        show-overflow-tooltip>
-      </el-table-column>
-      <el-table-column label="主播名称" align="center" show-overflow-tooltip>
+      <el-table-column prop="categoryName" label="播客分类" align="center" />
+      <el-table-column label="主播" align="center" show-overflow-tooltip>
         <template slot-scope="scope">
-          <span v-for="(item, index) in scope.row.adminPrdCasterResp" :key="item.podcasterId">
-            {{ item.podcasterName }}{{ index + 1 >= scope.row.adminPrdCasterResp.length ? '' : ',' }}
-          </span>
+          <span v-for="item in scope.row.podcasters" :key="item.id">{{ item.nickname }} </span>
         </template>
       </el-table-column>
-      <el-table-column label="付费类型" prop="charging" align="center" :formatter="chargingFormatter" />
-      <el-table-column label="节目数量" prop="programCount" align="center" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
+      <el-table-column prop="charging" label="付费类型" align="center" :formatter="chargingFormatter" />
+      <el-table-column prop="programCount" label="节目数量" align="center" />
+      <el-table-column prop="status" label="当前状态" align="center" :formatter="statusFormatter" />
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 2" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 1)">上架</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button v-else type="text" @click="getChange(scope.row, 2)">下架</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id)">查看</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
+          <el-button v-if="scope.row.status === 1" type="text">上架</el-button>
+          <el-button v-else type="text">下架</el-button>
         </template>
       </el-table-column>
     </el-table>
+    <!-- 分页 -->
     <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
       @pagination="getList" />
   </div>
 </template>
 
 <script>
-import { list, change, remove } from '@/api/music/blog'
-import { payTypeMixin, onOrOffMixin, platformMixin, classifyMixin } from '@/mixin/index'
+import { getPage, getCategories } from '@/api/music/blog'
 export default {
-  mixins: [payTypeMixin, onOrOffMixin, platformMixin, classifyMixin],
   data() {
     return {
       // 遮罩层
-      loading: false,
+      loading: true,
+      // 列表
+      tableData: [],
       // 表单
       form: {
         pageNum: 1,
         pageSize: 10
       },
-      // 总数据
       total: 0,
-      // 列表
-      tableData: [],
-      // 批量上下架
-      obj: {
-        id: '',
-        name: '已选数据'
+      // 付费类型
+      chargingOptions: [{
+        value: 1,
+        label: '免费'
+      }, {
+        value: 2,
+        label: '全本购买'
+      }, {
+        value: 3,
+        label: '单集购买'
+      }, {
+        value: 4,
+        label: 'VIP专享'
+      }],
+      // 播客分类
+      categoryOptions: [],
+      // 当前状态
+      statusOptions: [{
+        value: 1,
+        label: '上架'
+      }, {
+        value: 2,
+        label: '下架'
+      }]
+    };
+  },
+  created() {
+    getCategories().then(res => {
+      if (res.code === 0) {
+        this.categoryOptions = res.data
       }
-    }
+    })
   },
   mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 8
-    })
-    // 获取分类
-    this.getClassify(8)
     this.getList()
   },
   methods: {
     // 列表
     getList() {
       this.loading = true
-      list(this.form).then(res => {
+      getPage(this.form).then(res => {
         if (res.code === 0) {
           this.tableData = res.data.records
           this.total = res.data.total
@@ -137,68 +129,23 @@ export default {
       this.getList()
     },
 
-    // 新增 查看 编辑
-    getDetail(id, boolean) {
+    // 新增 / 查看 / 编辑
+    getDetail(id) {
       this.$router.push({
         path: `/music/blog/detail`,
         query: {
           id: id,
-          disabled: boolean
-        }
-      })
-    },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 1 ? '上架' : '下架'
-      this.$confirm(`是否${title}${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change(row.id, status).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove(row.id).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 多选
-    handleSelect(e) {
-      this.obj.id = ''
-      e.map((item, index) => this.obj.id += item.id + ((index + 1) < e.length ? ',' : ''))
+        },
+      });
     },
 
     // 字典翻译
     chargingFormatter(row) {
-      return this.selectDictLabel(this.payTypeOptions, row.charging)
+      return this.selectDictLabel(this.chargingOptions, row.charging)
     },
     statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    },
-    platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId)
-    },
-    categoryFormatter(row) {
-      return row.categoryIds.map((item, index) => (this.selectDictLabel(this.classifyOptions, item)) + (index + 1 < row.categoryIds.length ? ',' : ''))
+      return this.selectDictLabel(this.statusOptions, row.status)
     }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-</style>
+  },
+};
+</script>

+ 60 - 148
src/views/music/list/detail.vue

@@ -1,172 +1,88 @@
 <template>
   <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="歌曲名称:" prop="name">
-        <el-input v-model="form.name" placeholder="请输入歌曲名称" />
+    <el-form model="form" :rules="rules" label-width="100px" size="small">
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="音频上传:">
+            <imageUpload />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item prop="name" label="歌曲名称:">
+            <el-input v-model="form.name" />
+          </el-form-item>
+          <el-form-item label="歌手名称:">
+            <el-select>
+              <el-option></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="播放时长:">
+            <el-input></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item label="资源平台:">
+        <el-input disabled />
       </el-form-item>
-      <el-form-item label="歌手名称:" prop="singerId">
-        <el-select v-model="form.singerId" multiple filterable remote reserve-keyword placeholder="请输入歌手名称"
-          :remote-method="getSelect" no-data-text="请新增歌手">
-          <el-option v-for="item in singerOptions" :key="item.value" :value="item.value.toString()"
-            :label="item.label" />
+      <el-form-item label="标签分类:">
+        <el-select>
+          <el-option></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="歌曲语言:" prop="lanuage">
-        <el-select v-model="form.lanuage" placeholder="请选择歌曲语言">
-          <el-option v-for="item in languageOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+      <el-form-item label="所属专辑:">
+        <!-- 必填 -->
+        <el-select filterable placeholder="请选择所属专辑">
+          <el-option></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="资源平台:" prop="platformId">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+      <el-form-item label="所属歌单:">
+        <!-- 选填 -->
+        <el-select v-model="value" multiple filterable placeholder="请选择所属歌单">
+          <el-option v-for="item in options" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
-      <el-form-item label="音频封面:" prop="thumbUrl">
-        <Upload listType="picture-card" :url="form.thumbUrl" @upload="upload($event, 'thumbUrl')"
-          :disabled="disabled" />
-      </el-form-item>
-      <el-form-item label="音频文件:" prop="realName">
-        <el-input v-model="form.realName" readonly>
-          <template slot="suffix">
-            <Upload listType="audio" :size="100" @upload="upload($event, 'progaramUrl')" />
-          </template>
-        </el-input>
-        <div style="color:#909399">单个上传音频文件不超过100MB</div>
+      <el-form-item>
+        <el-button @click="getCancel">取消</el-button>
+        <el-button type="primary" @click="getSubmit">提交</el-button>
       </el-form-item>
     </el-form>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button type="primary" @click="getSubmit" v-if="!disabled">确定</el-button>
-    </div>
   </div>
 </template>
 
 <script>
-import Upload from "@/components/Upload/index";
-import { submit, detail } from '@/api/music/list'
-import { selectSinger } from '@/api/music/singer'
-import { platformMixin, languageMixin } from '@/mixin/index'
+import imageUpload from "@/components/Upload/index";
 export default {
-  mixins: [platformMixin, languageMixin],
   components: {
-    Upload,
+    imageUpload,
   },
   data() {
     return {
-      // 歌手
-      singerOptions: [],
+      // 歌单
+      options:[{
+        value: 1,
+        label: '每日精选'
+      },{
+        value: 2,
+        label: '昨日精选'
+      }],
+      value: [],
       // 表单
-      form: {
-        status: 1,
-        realName: ''
-      },
-      // 是否只读
-      disabled: false,
-      // 校验
+      form: {},
       rules: {
-        name: [{
-          required: true, message: '请输入歌曲名称', trigger: 'blur'
-        }],
-        singerId: [{
-          required: true, message: '请输入歌手名称', trigger: 'blur'
-        }],
-        lanuage: [{
-          required: true, message: '请选择歌曲语言', trigger: 'change'
-        }],
-        platformId: [{
-          required: true, message: '请选择资源平台', trigger: 'change'
-        }],
-        thumbUrl: [{
-          required: true, message: '请上传音频封面', trigger: 'change'
-        }],
-        realName: [{
-          required: true, message: '请上传音频文件', trigger: 'blur'
-        }]
-      }
+        name: [
+          {
+            required: true,
+            message: "请输入歌曲名称",
+            trigger: "blur",
+          },
+        ],
+      },
     };
   },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 11,
-      joinType: 2
-    })
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getList()
-    }
-  },
   methods: {
-    // 详情
-    getList() {
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-          this.form.singerId = res.data.singerId.split(',')
-          res.data.singerResp.map(i => {
-            this.singerOptions.push({
-              value: i.singerId,
-              label: i.singerName
-            })
-          })
-        }
-      })
-    },
-
-    // 查询歌手
-    getSelect(e) {
-      if (e) {
-        setTimeout(() => {
-          this.singerOptions = []
-          selectSinger(e).then(res => {
-            if (res.code === 0) {
-              res.data.map(i => {
-                this.singerOptions.push({
-                  value: i.id,
-                  label: i.name
-                })
-              })
-            }
-          }, 500)
-        })
-      }
-    },
-
-    // 上传
-    upload(e, key) {
-      if (key === 'thumbUrl') {
-        this.form.thumbUrl = e.file
-      } else {
-        this.form.progaramUrl = e.file.url
-        this.form.playTime = e.file.time
-        this.form.realName = e.file.realName
-      }
-    },
-
-    // 确定
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          this.form.singerId = this.form.singerId.join(',')
-          let title = this.form.id ? '编辑成功!' : '新增成功!'
-          submit(this.form).then(res => {
-            if (res.code === 0) {
-              this.$message.success(`${title}`)
-              this.cancel()
-            }
-          })
-        } else {
-          return false
-        }
-      })
-    },
-
-    // 取消
-    cancel() {
+    getCancel() {
       this.$tab.closeOpenPage("/music/musicList");
+      this.$refs.form.resetFields();
     },
   },
 };
@@ -174,10 +90,6 @@ export default {
 
 <style lang="scss" scoped>
 .el-form {
-  width: 500px;
-}
-
-::v-deep .el-input__suffix {
-  right: 0;
+  width: 600px;
 }
 </style>

+ 48 - 159
src/views/music/list/index.vue

@@ -1,195 +1,84 @@
 <template>
   <div class="app-container">
     <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="歌曲名称:">
-        <el-input v-model="form.name" placeholder="请输入歌曲名称" clearable />
-      </el-form-item>
-      <el-form-item label="歌手名称:">
-        <el-input v-model="form.singerName" placeholder="请输入歌手名称" clearable />
-      </el-form-item>
+    <el-form inline label-width="100px" size="mini">
       <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+        <el-select placeholder="请选择资源平台">
+          <el-option></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option v-for="item in onOrOffOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+        <el-select placeholder="请选择当前状态">
+          <el-option></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item label="标签分类:">
+        <el-select placeholder="请选择标签分类">
+          <el-option></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="歌曲ID:">
+        <el-input placeholder="请输入歌曲ID"></el-input>
+      </el-form-item>
+      <el-form-item label="歌曲名称:">
+        <el-input placeholder="请输入歌曲名称"></el-input>
+      </el-form-item>
+      <el-form-item label="歌手名称:">
+        <el-input placeholder="请输入歌手名称"></el-input>
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 1)">批量上架</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 2)">批量下架</el-button>
-        <Upload action="/admin/program/batch/upload" multiple title="批量上传音频" @loading="loading = true" @upload="loading = false"
-          style="margin-left: 10px" />
+        <el-button type="primary" icon="el-icon-upload2" plain>上传音频文件</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading" @selection-change="handleSelect">
-      <el-table-column type="selection" align="center" />
-      <el-table-column label="ID" prop="id" align="center" />
-      <el-table-column label="歌曲名称" prop="name" align="center" show-overflow-tooltip />
-      <el-table-column label="歌手名称" align="center" show-overflow-tooltip>
-        <template slot-scope="scope">
-          <span v-for="(item, index) in scope.row.singerResp" :key="item.singerId">
-            {{ item.singerName }} {{ index + 1 !== scope.row.singerResp.length ? ',' : '' }}
-          </span>
-        </template>
-      </el-table-column>
-      <el-table-column label="音频封面" align="center" width="100px">
-        <template slot-scope="scope">
-          <el-image v-if="scope.row.thumbUrl" :src="scope.row.thumbUrl" />
-        </template>
-      </el-table-column>
-      <el-table-column label="播放时长" prop="playTime" align="center" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="更新时间" prop="updateTime" align="center">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
-        </template>
-      </el-table-column>
+    <el-table :data="tableData">
+      <el-table-column prop="id" label="歌曲ID" align="center"></el-table-column>
+      <el-table-column prop="name" label="歌曲名称" align="center"></el-table-column>
+      <el-table-column prop="belong" label="所属音乐" align="center"></el-table-column>
+      <el-table-column prop="titleType" label="标签分类" align="center"></el-table-column>
+      <el-table-column prop="singer" label="歌手名称" align="center"></el-table-column>
+      <el-table-column prop="playDate" label="播放时长" align="center"></el-table-column>
+      <el-table-column prop="status" label="上架状态" align="center"></el-table-column>
+      <el-table-column prop="update" label="更新时间" align="center"></el-table-column>
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 2" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 1)">上架</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button type="text" v-else @click="getChange(scope.row, 2)">下架</el-button>
-          <Audio :src="scope.row.progaramUrl" />
+          <el-button type="text" @click="getDetail(scope.row.id)">查看</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
+          <el-button type="text">上架</el-button>
+          <!-- <el-button type="text">下架</el-button> -->
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
   </div>
 </template>
 
 <script>
-import Audio from '@/components/Audio/index.vue'
-import Upload from '@/components/Upload/index.vue'
-import { list, remove, change } from '@/api/music/list'
-import { platformMixin, onOrOffMixin } from '@/mixin/index'
 export default {
-  mixins: [platformMixin, onOrOffMixin],
-  components: {
-    Audio,
-    Upload
-  },
   data() {
     return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      // 总数据
-      total: 0,
-      // 列表
-      tableData: [],
-      // 试听
-      isPlay: true,
-      // 批量上下架
-      obj: {
-        id: '',
-        name: '已选数据'
-      }
+      tableData:[{
+        id: 1,
+        name: '测试',
+        belong: '测试',
+        titleType: '测试',
+        singer: '周杰伦',
+        playDate: '3分40秒',
+        status: '下架',
+        update: '2022/3/16 14:12:00'
+      }]
     };
   },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 11
-    })
-    this.getList()
-  },
   methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.form.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.form = {
-        pageNum: 1,
-        pageSize: 10
-      }
-      this.getList()
-    },
-
-    // 新增 编辑
-    getDetail(id, boolean) {
+    getDetail(id) {
       this.$router.push({
         path: `/music/musicList/detail`,
         query: {
           id: id,
-          disabled: boolean
-        }
-      })
-    },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 1 ? '上架' : '下架'
-      this.$confirm(`是否${title}${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change(row.id, status).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 多选
-    handleSelect(e) {
-      this.obj.id = ''
-      e.map((item, index) => this.obj.id += item.id + ((index + 1) < e.length ? ',' : ''))
+        },
+      });
     },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove(row.id).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 字典翻译
-    statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    }
-  }
-}
+  },
+};
 </script>

+ 0 - 288
src/views/music/menu/detail.vue

@@ -1,288 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="歌单名称:" prop="name">
-        <el-input v-model="form.name" placeholder="请输入歌单名称" />
-      </el-form-item>
-      <el-form-item label="歌单介绍:" prop="description">
-        <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 5, maxRows: 10}"
-          maxlength="100" show-word-limit placeholder="请输入歌单介绍" />
-      </el-form-item>
-      <el-form-item label="创建者:" prop="avatarNickName">
-        <el-input v-model="form.avatarNickName" placeholder="请输入歌单创建者名称" />
-      </el-form-item>
-      <el-form-item label="资源平台:" prop="platformId">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="歌单封面:" prop="coverUrl">
-        <Upload listType="picture-card" :url="form.coverUrl" @upload="upload($event, 'coverUrl')"
-          :disabled="disabled" />
-      </el-form-item>
-      <el-form-item label="头像:" prop="avatarNickHead">
-        <Upload listType="picture-card" :url="form.avatarNickHead" @upload="upload($event, 'avatarNickHead')"
-          :disabled="disabled" />
-      </el-form-item>
-      <el-form-item label="歌曲列表:">
-        <el-button type="primary" icon="el-icon-plus" @click="getDialog">添加歌曲</el-button>
-      </el-form-item>
-    </el-form>
-    <!-- 列表 -->
-    <el-table class="table" :data="form.programList" height="329px" v-loading="form_loading">
-      <el-table-column label="ID" prop="id" align="center" />
-      <el-table-column label="歌曲名称" prop="name" align="center" show-overflow-tooltip />
-      <el-table-column label="歌手名称" prop="singerName" align="center" show-overflow-tooltip />
-      <el-table-column label="播放时长" prop="playTime" align="center" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="操作" align="center">
-        <template slot-scope="scope">
-          <Audio :src="scope.row.progaramUrl" />
-          <el-button type="delete" :disabled="disabled" @click="getDelete(scope.$index)">删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
-    </div>
-
-    <!-- 弹窗 -->
-    <el-dialog :visible.sync="dialogVisible" title="添加歌曲" width="1100px">
-      <el-form inline size="mini" style="width: 100%">
-        <el-form-item label="歌曲名称:">
-          <el-input v-model="dialogForm.name" placeholder="请输入歌曲名称" clearable />
-        </el-form-item>
-        <el-form-item label="歌手名称:">
-          <el-input v-model="dialogForm.singerName" placeholder="请输入歌手名称" clearable />
-        </el-form-item>
-        <el-form-item label="资源平台:">
-          <el-select v-model="dialogForm.platformId" placeholder="请选择资源平台" clearable>
-            <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-              :label="item.label" />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
-          <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        </el-form-item>
-      </el-form>
-      <el-table :data="tableData" v-loading="loading">
-        <el-table-column label="ID" prop="id" align="center" />
-        <el-table-column label="歌曲名称" prop="name" align="center" show-overflow-tooltip />
-        <el-table-column label="歌手名称" prop="singerName" align="center" show-overflow-tooltip />
-        <el-table-column label="播放时长" prop="playTime" align="center" />
-        <el-table-column label="操作" align="center">
-          <template slot-scope="scope">
-            <el-button type="text" @click="getChecked(scope.row)"
-              :disabled="form.programList.findIndex(i => i.id === scope.row.id) === -1 ? false : true">
-              选择
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-        @pagination="getList" />
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { submit, detail } from '@/api/music/menu'
-import { list } from '@/api/music/list'
-import { platformMixin, onOrOffMixin } from '@/mixin/index'
-import Upload from '@/components/Upload/index.vue'
-import Audio from '@/components/Audio/index.vue'
-export default {
-  mixins: [platformMixin, onOrOffMixin],
-  components: {
-    Upload,
-    Audio
-  },
-  data() {
-    return {
-      // 遮罩层
-      form_loading: false,
-      loading: false,
-      // 表单
-      form: {
-        programList: [], // 歌曲列表
-        status: 1,
-        type: 2
-      },
-      // 校验
-      rules: {
-        name: [{
-          required: true, message: '请输入歌单名称', trigger: 'blur'
-        }, {
-          max: 10, message: '字符不超过10个', trigger: 'blur'
-        }],
-        description: [{
-          required: true, message: '请输入歌单介绍', trigger: 'blur'
-        }],
-        avatarNickName: [{
-          required: true, message: '请输入歌单创建者名称', trigger: 'blur'
-        }],
-        platformId: [{
-          required: true, message: '请选择资源平台', trigger: 'change'
-        }],
-        coverUrl: [{
-          required: true, message: '请上传歌单封面', trigger: 'change'
-        }],
-        avatarNickHead: [{
-          required: true, message: '请上传创建者头像', trigger: 'change'
-        }]
-      },
-      // 弹窗
-      dialogVisible: false,
-      // 弹窗表单
-      dialogForm: {
-        pageNum: 1,
-        pageSize: 10,
-        status: 1
-      },
-      // 总数据
-      total: 0,
-      // 弹窗列表
-      tableData: [],
-      // 只读
-      disabled: false,
-      // 是否已选
-      disabledChecked: false
-    }
-  },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 10,
-      joinType: 2
-    })
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getDetail()
-    }
-  },
-  methods: {
-    // 详情
-    getDetail() {
-      this.form_loading = true
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-          this.form_loading = false
-        }
-      })
-    },
-    // 上传
-    upload(e, key) {
-      this.form[key] = e.file
-    },
-
-    // 添加歌曲
-    getDialog() {
-      this.dialogVisible = true
-      this.getList()
-    },
-
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.dialogForm).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.dialogForm.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.dialogForm = {
-        pageNum: 1,
-        pageSize: 10,
-        status: 1
-      }
-      this.getList()
-    },
-
-    // 选择
-    getChecked(row) {
-      this.form.programList.push({
-        id: row.id,
-        name: row.name,
-        singerName: row.singerName,
-        playTime: row.playTime,
-        status: row.status,
-        progaramUrl: row.progaramUrl
-      })
-      this.$message.success('添加成功!')
-    },
-
-    // 删除已选歌曲
-    getDelete(index) {
-      this.form.programList.splice(index, 1)
-    },
-
-    // 确定
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          let arr = []
-          this.form.programList.map(i => {
-            arr.push(i.id)
-          })
-          this.form.programList = arr
-          this.form_loading = true
-          let title = this.form.id ? '编辑成功!' : '新增成功!'
-          submit(this.form).then(res => {
-            if (res.code === 0) {
-              this.$message.success(`${title}`)
-              if (this.form.id) {
-                this.getDetail()
-              } else {
-                this.cancel()
-              }
-            }
-          })
-        } else {
-          return false
-        }
-      })
-    },
-
-    // 取消
-    cancel() {
-      this.$tab.closeOpenPage("/music/musicMenu");
-    },
-
-    // 字典翻译
-    statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.el-form {
-  width: 500px;
-}
-
-.form-btn {
-  margin-top: 20px;
-}
-
-.table {
-  width: calc(100% - 100px);
-  margin-left: 100px;
-}
-</style>

+ 0 - 182
src/views/music/menu/index.vue

@@ -1,182 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="歌单名称:">
-        <el-input v-model="form.name" placeholder="请输入歌单名称" clearable />
-      </el-form-item>
-      <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option v-for="item in onOrOffOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
-        <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 1)">批量上架</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 2)">批量下架</el-button>
-      </el-form-item>
-    </el-form>
-    <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading" @selection-change="handleSelect">
-      <el-table-column type="selection" align="center" />
-      <el-table-column label="ID" prop="id" align="center" show-overflow-tooltip />
-      <el-table-column label="歌单名称" prop="name" align="center" show-overflow-tooltip />
-      <el-table-column label="歌单封面" align="center" width="100px">
-        <template slot-scope="scope">
-          <el-image v-if="scope.row.coverUrl" :src="scope.row.coverUrl" />
-        </template>
-      </el-table-column>
-      <el-table-column label="歌单创建者" prop="avatarNickName" align="center" show-overflow-tooltip />
-      <el-table-column label="创建者头像" align="center" width="100px">
-        <template slot-scope="scope">
-          <el-image v-if="scope.row.avatarNickHead" :src="scope.row.avatarNickHead" />
-        </template>
-      </el-table-column>
-      <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
-      <el-table-column label="歌曲数量" prop="programCount" align="center" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="操作" align="center">
-        <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 2" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 1)">上架</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button v-else type="text" @click="getChange(scope.row, 2)">下架</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
-  </div>
-</template>
-
-<script>
-import { list, change, remove } from '@/api/music/menu'
-import { platformMixin, onOrOffMixin } from '@/mixin/index'
-export default {
-  mixins: [platformMixin, onOrOffMixin],
-  data() {
-    return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10,
-        type: 2
-      },
-      // 总数据
-      total: 0,
-      // 列表
-      tableData: [],
-      // 批量上下架
-      obj: {
-        id: '',
-        name: '已选数据'
-      }
-    };
-  },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 10
-    })
-    this.getList()
-  },
-  methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.form.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.form = {
-        pageNum: 1,
-        pageSize: 10,
-        type: 2
-      }
-      this.getList()
-    },
-
-    // 新增 / 查看 / 编辑
-    getDetail(id, boolean) {
-      this.$router.push({
-        path: `/music/menu/detail`,
-        query: {
-          id: id,
-          disabled: boolean
-        }
-      })
-    },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 1 ? '上架' : '下架'
-      this.$confirm(`是否${title}${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change(row.id, status).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove(row.id).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 多选
-    handleSelect(e) {
-      this.obj.id = ''
-      e.map((item, index) => this.obj.id += item.id + ((index + 1) < e.length ? ',' : ''))
-    },
-
-    // 字典翻译
-    platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId)
-    },
-
-    statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    }
-  },
-};
-</script>

+ 32 - 0
src/views/music/mixin/index.js

@@ -0,0 +1,32 @@
+const statusMixin = {
+  data() {
+    return {
+      statusOptions: [{
+        value: 1,
+        label: '正常'
+      }, {
+        value: 2,
+        label: '下架'
+      }]
+    }
+  }
+}
+
+const chargingMixin = {
+  data(){
+    return{ 
+      chargingOptions: [{
+        value: 1,
+        label: '免费'
+      },{
+        value: 2,
+        label: '收费'
+      }]
+    }
+  }
+}
+
+export {
+  statusMixin,
+  chargingMixin
+}

+ 54 - 0
src/views/music/model/detail.vue

@@ -0,0 +1,54 @@
+<template>
+  <div class="app-container">
+    <el-form label-width="100px">
+      <el-form-item label="场景模式:">
+        <el-input placeholder="请输入场景模式" />
+      </el-form-item>
+      <el-form-item label="场景名称:">
+        <el-input placeholder="请输入场景名称" />
+      </el-form-item>
+      <el-form-item label="心率(BMP):">
+        <el-input-number controls-position="right" placeholder="下限" />
+        <span> — </span>
+        <el-input-number controls-position="right" placeholder="上限" />
+      </el-form-item>
+      <el-form-item label="步数:">
+        <el-input-number controls-position="right" placeholder="下限" />
+        <span> — </span>
+        <el-input-number controls-position="right" placeholder="上限" />
+      </el-form-item>
+      <el-form-item label="时间:">
+        <el-time-picker is-range start-placeholder="开始时间" end-placeholder="结束时间" />
+      </el-form-item>
+      <el-form-item label="优先级:">
+        <el-input placeholder="请输入优先级,数字越大优先级越高" />
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="cancel">取消</el-button>
+        <el-button type="primary">确定</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  methods: {
+    // 取消
+    cancel() {
+      this.$tab.closeOpenPage("/music/model");
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.el-form {
+  width: 550px;
+}
+</style>

+ 53 - 0
src/views/music/model/index.vue

@@ -0,0 +1,53 @@
+<template>
+  <div class="app-container">
+    <!-- 搜索 -->
+    <el-form inline label-width="100px" size="mini">
+      <el-form-item label="当前状态:">
+        <!-- <el-select placeholder="请选择当前状态">
+          <el-option></el-option>
+        </el-select> -->
+      </el-form-item>
+      <el-form-item>
+        <el-button icon="el-icon-search" type="primary">搜索</el-button>
+        <el-button icon="el-icon-refresh">重置</el-button>
+        <el-button icon="el-icon-plus" type="primary" plain @click="getDetail">新增</el-button>
+      </el-form-item>
+    </el-form>
+    <!-- 列表 -->
+    <el-table>
+      <el-table-column label="场景ID" align="center" />
+      <el-table-column label="场景模式" align="center" />
+      <el-table-column label="场景名称" align="center" />
+      <el-table-column label="心率" align="center" />
+      <el-table-column label="步数" align="center" />
+      <el-table-column label="时间" align="center" />
+      <el-table-column label="优先级" align="center" />
+      <el-table-column label="当前状态" align="center" />
+      <el-table-column label="操作" align="center">
+        <template>
+          <el-button type="text">查看</el-button>
+          <el-button type="text">编辑</el-button>
+          <el-button type="text">上架</el-button>
+          <!-- <el-button type="text">下架</el-button> -->
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  methods:{
+    getDetail(){
+      this.$router.push({
+        path: `/music/model/detail`
+      })
+    }
+  }
+}
+</script>

+ 80 - 127
src/views/music/platform/index.vue

@@ -1,178 +1,131 @@
 <template>
   <div class="app-container">
-    <el-button type="primary" icon="el-icon-plus" size="mini" @click="getDialog()">新增</el-button>
     <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading">
+    <el-table :data="list" v-loading="loading">
       <el-table-column type="index" label="序号" align="center" />
-      <el-table-column label="资源平台" prop="name" align="center" />
-      <el-table-column label="音频类型" prop="audioType" align="center" :formatter="audioFormatter" />
-      <el-table-column label="对接方式" prop="joinType" align="center" :formatter="joinTypeFormatter" />
+      <el-table-column prop="name" label="资源平台" align="center"></el-table-column>
+      <el-table-column prop="isThird" label="平台类型" align="center" :formatter="isThirdFormatter" />
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDialog(scope.row.id)">编辑</el-button>
-          <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
+          <el-button type="text" :disabled="scope.row.isThird !== 0" @click="getEdit(scope.row)">编辑</el-button>
+          <!-- <el-button type="delete" :disabled="scope.row.status !== 2">删除</el-button> -->
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
-
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="listForm.pageNum"
+      :limit.sync="listForm.pageSize"
+      @pagination="getList"
+    />
     <!-- 弹窗 -->
-    <el-dialog :visible.sync="dialogVisible" :title="title" width="500px" :before-close="cancel">
-      <el-form :model="dialogForm" :rules="rules" ref="dialogForm" label-width="100px">
-        <el-form-item label="资源平台:" prop="name">
-          <el-input v-model="dialogForm.name" placeholder="请输入资源平台名称" />
-        </el-form-item>
-        <el-form-item label="音频类型:" prop="audioType">
-          <el-select v-model="dialogForm.audioType" multiple placeholder="请选择音频类型">
-            <el-option v-for="item in audioOptions" :key="item.value" :value="item.value.toString()"
-              :label="item.label" />
-          </el-select>
+    <el-dialog title="编辑" :visible.sync="dialogVisible" width="500px">
+      <el-form :model="form" ref="form" :rules="rules" label-width="100px">
+        <el-form-item prop="name" label="资源平台:">
+          <el-input v-model="form.name" placeholder="请输入资源平台名称" />
         </el-form-item>
-        <el-form-item label="对接方式:" prop="joinType">
-          <el-select v-model="dialogForm.joinType" placeholder="请选择资源对接方式">
-            <el-option v-for="item in joinTypeOptions" :key="item.value" :value="item.value.toString()"
-              :label="item.label" />
+        <el-form-item prop="status" label="平台类型:">
+          <el-select v-model="form.isThird" disabled>
+            <el-option v-for="item in isThirdOptions" :key="item.value" :label="item.label" :value="item.value" />
           </el-select>
         </el-form-item>
-        <el-form-item style="text-align: right;">
-          <el-button @click="cancel">取消</el-button>
-          <el-button type="primary" @click="getSubmit">确定</el-button>
-        </el-form-item>
       </el-form>
+      <div slot="footer">
+        <el-button @click="getCancel">取消</el-button>
+        <el-button type="primary" @click="getSubmit">确定</el-button>
+      </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { list, submit, detail, remove } from '@/api/music/platform'
-import { audioMixin } from '@/mixin/index'
+import { getPlatformPage, getplatformEdit } from "@/api/music/platform";
+
 export default {
-  mixins: [audioMixin],
   data() {
     return {
       // 遮罩层
-      loading: false,
-      // 列表表单
-      form: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      // 总数
-      total: 0,
-      // 列表
-      tableData: [],
+      loading: true,
       // 弹窗
       dialogVisible: false,
-      title: '',
-      // 提交表单
-      dialogForm: {
-        name: '',
-        audioType: []
+      // 列表
+      list: [],
+      // 总数
+      total: 0,
+      // 分页表单
+      listForm: {
+        pageNum: 1,
+        pageSize: 10,
       },
-      // 校验
+      // 提交表单
+      form: {},
+      // 表单验证
       rules: {
-        name: [{
-          required: true, message: '请输入资源平台名称', trigger: 'blur'
-        }, {
-          max: 20, message: '名称不得超过20个字符', trigger: 'blur'
-        }],
-        audioType: [{
-          required: true, message: '请选择音频类型', trigger: 'change'
-        }],
-        joinType: [{
-          required: true, message: '请选择资源对接方式', trigger: 'change'
-        }]
+        name: [
+          {
+            required: true,
+            message: "请输入资源平台名称",
+            trigger: "blur",
+          },
+        ],
       },
-      // 对接方式
-      joinTypeOptions: [{
-        value: 1,
-        label: 'API接口'
-      }, {
-        value: 2,
-        label: '本地管理'
-      }]
-    }
+      // 字典
+      isThirdOptions: [
+        {
+          value: 0,
+          label: "猫王",
+        },
+        {
+          value: 1,
+          label: "第三方",
+        },
+      ],
+    };
   },
   mounted() {
-    this.getList()
+    this.getList();
   },
   methods: {
     // 列表
     getList() {
-      this.loading = true
-      list(this.form).then(res => {
+      this.loading = true;
+      getPlatformPage(this.listForm).then((res) => {
         if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
+          this.list = res.data.records;
+          this.total = res.data.total;
+          this.loading = false;
         }
-      })
-    },
-    // 弹窗
-    getDialog(id) {
-      this.dialogVisible = true
-      if (id) {
-        this.title = '编辑'
-        detail(id).then(res => {
-          if (res.code === 0) {
-            this.dialogForm = res.data
-            if (this.dialogForm.audioType) {
-              this.dialogForm.audioType = res.data.audioType.split(',')
-            }
-          }
-        })
-      } else {
-        this.title = '新增'
-      }
+      });
     },
 
-    // 取消
-    cancel() {
-      this.dialogVisible = false
-      this.dialogForm = {}
-      this.$refs.dialogForm.resetFields();
+    // 编辑
+    getEdit(row) {
+      this.dialogVisible = true;
+      this.form = row;
     },
 
     // 确定
     getSubmit() {
-      this.$refs.dialogForm.validate((valid) => {
-        if (valid) {
-          this.dialogForm.audioType = this.dialogForm.audioType.join(',')
-          submit(this.dialogForm).then(res => {
-            if (res.code === 0) {
-              this.$message.success(`${this.title}成功!`)
-              this.dialogVisible = false
-              this.cancel()
-            }
-          })
-        } else {
-          return false
+      getplatformEdit(this.form).then((res) => {
+        if (res.code === 0) {
+          this.$message.success("修改成功!");
+          this.dialogVisible = false;
+          this.getList();
         }
-      })
+      });
     },
 
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否要删除${row.name}?`, '警告', {
-        type: 'warning'
-      }).then(() => {
-        remove(row.id).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
+    // 取消
+    getCancel() {
+      this.$refs.form.clearValidate();
+      this.dialogVisible = false;
     },
 
     // 字典翻译
-    audioFormatter(row) {
-      return row.audioType ? row.audioType.split(',').map(i => this.selectDictLabel(this.audioOptions, i)).join(',') : '/'
+    isThirdFormatter(row) {
+      return this.selectDictLabel(this.isThirdOptions, row.isThird);
     },
-    joinTypeFormatter(row) {
-      return this.selectDictLabel(this.joinTypeOptions, row.joinType)
-    }
-  }
+  },
 };
 </script>

+ 124 - 0
src/views/music/playlist/detail.vue

@@ -0,0 +1,124 @@
+<template>
+  <div class="app-container">
+    <el-form class="form" label-width="120px">
+      <el-form-item label="封面图:(750*1334)">
+        <Upload listType="picture-card" />
+      </el-form-item>
+      <el-form-item label="场景模式:">
+        <el-input disabled />
+      </el-form-item>
+      <el-form-item label="歌曲/节目列表:" style="width: 1000px">
+        <el-button type="primary" @click="dialogVisible_program = true" style="margin-right: 10px">关联节目</el-button>
+        <Upload multiple title="上传歌曲" />
+        <el-tabs type="card" v-model="tabActive" addable closable @tab-add="dialogVisible = true"
+          @tab-remove="getRemove">
+          <el-tab-pane v-for="item in tabList" :key="item.id" :label="item.label" :name="item.value">
+            <el-table :data="tableData" height="342">
+              <el-table-column label="序号" type="index" align="center" />
+              <el-table-column label="歌曲/节目ID" align="center" />
+              <el-table-column label="名称" align="center" />
+              <el-table-column label="操作" align="center">
+                <template>
+                  <el-button type="delete">删除</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-tab-pane>
+        </el-tabs>
+        <!-- <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
+          @pagination="getPage" /> -->
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="cancel">取消</el-button>
+        <el-button type="primary">确定</el-button>
+      </el-form-item>
+    </el-form>
+
+    <!-- 增加歌单 -->
+    <el-dialog title="新增" :visible.sync="dialogVisible" width="500px">
+      <el-form label-width="100px">
+        <el-form-item label="分页名称:">
+          <el-input v-model="name" placeholder="请输入分页名称" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="dialogVisible = false">取消</el-button>
+        <el-button type="primary" @click="getAdd">确定</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 关联节目 -->
+    <el-dialog title="关联节目" :visible.sync="dialogVisible_program">
+      <el-table>
+        <el-table-column label="节目ID" align="center" />
+        <el-table-column label="节目名称" align="center" />
+        <el-table-column label="操作" align="center">
+          <template>
+            <el-button type="text">选择</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Upload from '@/components/Upload/index'
+export default {
+  components: {
+    Upload
+  },
+  data() {
+    return {
+      // 表单
+      form: {
+        pageNum: 1,
+        pageSize: 10
+      },
+      // 歌曲/节目列表分页
+      tabList: [{
+        id: 0,
+        label: '默认',
+        value: '1'
+      }],
+      tabActive: '1',
+      // 列表
+      tableData:[],
+      total: 0,
+      // 弹窗
+      dialogVisible: false,
+      dialogVisible_program: false,
+      // 分页名称
+      name: ''
+    }
+  },
+  mounted(){
+
+  },
+  methods: {
+    // 添加分页
+    getAdd() {
+      this.tabList.push({
+        id: `${this.tabList.length}`,
+        label: this.name,
+        value: `${this.tabList.length + 1}`
+      })
+      this.dialogVisible = false
+    },
+    // 删除分页
+    getRemove(e) {
+      this.tabList.splice(e - 1, 1)
+    },
+    // 取消
+    cancel(){
+      this.$tab.closeOpenPage("/music/playlist");
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.form {
+  width: 500px;
+}
+</style>

+ 31 - 0
src/views/music/playlist/index.vue

@@ -0,0 +1,31 @@
+<template>
+  <div class="app-container">
+    <!-- 列表 -->
+    <el-table :data="tableData">
+      <el-table-column label="场景ID" align="center" />
+      <el-table-column label="场景模式" align="center" />
+      <el-table-column label="场景封面" align="center">
+        <template>
+          <el-image />
+        </template>
+      </el-table-column>
+      <el-table-column label="歌曲、节目数量" align="center" />
+      <el-table-column label="操作" align="center">
+        <template>
+          <el-button type="text">查看</el-button>
+          <el-button type="text">编辑</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      tableData:[]
+    }
+  }
+}
+</script>

+ 25 - 152
src/views/music/program/detail.vue

@@ -1,173 +1,50 @@
 <template>
   <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="节目名称:" prop="name">
-        <el-input v-model="form.name" placeholder="请输入节目名称" />
+    <el-form label-width="100px" size="small">
+      <el-form-item label="节目名称:">
+        <el-input></el-input>
       </el-form-item>
-      <el-form-item label="节目介绍:">
-        <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 5, maxRows: 10}"
-          maxlength="100" show-word-limit placeholder="请输入节目介绍" />
+      <el-form-item label="播客专辑:">
+        <el-input disabled></el-input>
       </el-form-item>
-      <el-form-item label="资源平台:" prop="platformId">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
+      <el-form-item label="资源平台:">
+        <el-input disabled></el-input>
       </el-form-item>
-      <el-form-item label="付费类型:" prop="isFree">
-        <el-select v-model="form.isFree" placeholder="请选择付费类型">
-          <el-option v-for="item in freeOptions" :key="item.value" :value="item.value" :label="item.label" />
+      <el-form-item label="标签分类:">
+        <el-select>
+          <el-option></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item v-if="form.isFree === 0" label="原价:" prop="price">
-        <el-input-number v-model="form.price" placeholder="请输入原价" :min="1" :precision="2" :controls="false" />
+      <el-form-item label="付费类型:">
+        <el-select>
+          <el-option></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item v-if="form.isFree === 0" label="折扣价:" prop="discountedPrice">
-        <el-input-number v-model="form.discountedPrice" placeholder="请输入折扣价" :min="1" :precision="2"
-          :controls="false" />
+      <el-form-item label="原价:">
+        <el-input></el-input>
       </el-form-item>
-      <el-form-item label="节目封面:" prop="cover">
-        <Upload listType="picture-card" :url="form.cover" @upload="upload($event, 'cover')"
-          :disabled="disabled" />
+      <el-form-item label="折扣价:">
+        <el-input></el-input>
       </el-form-item>
-      <el-form-item label="音频文件:" prop="realName">
-        <el-input v-model="form.realName" readonly>
-          <template slot="suffix">
-            <Upload listType="audio" :size="100" @upload="upload($event, 'fullUrl')" />
-          </template>
-        </el-input>
-        <div style="color:#909399">单个上传音频文件不超过100MB</div>
+      <el-form-item>
+        <el-button @click="getCancel">取消</el-button>
+        <el-button type="primary" @click="getSubmit">提交</el-button>
       </el-form-item>
     </el-form>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">提交</el-button>
-    </div>
   </div>
 </template>
 
 <script>
-import { submit, detail } from '@/api/music/program'
-import { platformMixin, isFreeMixin } from '@/mixin/index'
-import Upload from "@/components/Upload/index"
 export default {
-  mixins: [platformMixin, isFreeMixin],
-  components: {
-    Upload,
-  },
   data() {
-    // 小数点后两位 正则
-    var str = /^\d+.?\d{0,2}$/
-    // 判断原价是否大于折扣价
-    var checkPrice = (rule, value, callback) => {
-      if (!value) {
-        callback(new Error('请输入原价'))
-      } else if (value.toString().length > 10) {
-        callback(new Error('字符长度不超过10个'))
-      } else if (this.form.discountedPrice) {
-        value > this.form.discountedPrice ? callback() : callback(new Error('原价必须大于折扣价'))
-      }
-    }
-    // 判断折扣价是否小于原价
-    var checkDiscount = (rule, value, callback) => {
-      if (value) {
-        if (value.toString().length > 10) {
-          callback(new Error('字符长度不超过10个'))
-        } else if (this.form.price) {
-          value < this.form.price ? callback() : callback(new Error('折扣价必须小于原价'))
-        }
-      }
-    }
-    return {
-      // 表单
-      form: {
-        status: 1,
-        realName: ''
-      },
-      // 校验
-      rules: {
-        name: [{
-          required: true, message: '请输入节目名称', trigger: 'blur'
-        }, {
-          max: 20, message: '字符不超过20个', trigger: 'blur'
-        }],
-        platformId: [{
-          required: true, message: '请选择资源平台', trigger: 'change'
-        }],
-        isFree: [{
-          required: true, message: '请选择付费类型', trigger: 'change'
-        }],
-        price: [{
-          required: true, validator: checkPrice, trigger: 'blur'
-        }],
-        discountedPrice: [{
-          validator: checkDiscount, trigger: 'blur'
-        }],
-        cover: [{
-          required: true, message: '请上传节目封面', trigger: 'change'
-        }],
-        realName: [{
-          required: true, message: '请上传音频文件', trigger: 'blur, change'
-        }]
-      },
-      // 只读
-      disabled: false
-    };
-  },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 6,
-      joinType: 2
-    })
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getList()
-    }
+    return {};
   },
   methods: {
-    // 详情
-    getList() {
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-        }
-      })
-    },
-
-    // 上传
-    upload(e, key) {
-      if (key === 'cover') {
-        this.form.cover = e.file
-      } else {
-        this.form.fullUrl = e.file.url
-        this.form.fullDuration = e.file.time
-        this.form.realName = e.file.realName
-      }
-    },
-
-    // 确定
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          let title = this.form.id ? `编辑成功!` : `新增成功!`
-          submit(this.form).then(res => {
-            if (res.code === 0) {
-              this.$message.success(`${title}`)
-              this.cancel()
-            }
-          })
-        } else {
-          return false
-        }
-      })
-    },
-
-    // 取消
-    cancel() {
+    getCancel() {
       this.$tab.closeOpenPage("/music/program");
+      this.$refs.form.resetFields();
     },
+    getSubmit() {},
   },
 };
 </script>
@@ -176,8 +53,4 @@ export default {
 .el-form {
   width: 500px;
 }
-
-::v-deep .el-input__suffix {
-  right: 0;
-}
 </style>

+ 46 - 149
src/views/music/program/index.vue

@@ -1,189 +1,86 @@
 <template>
   <div class="app-container">
     <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="节目名称:">
-        <el-input v-model="form.name" placeholder="请选择节目名称" />
-      </el-form-item>
+    <el-form inline label-width="100px" size="mini">
       <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+        <el-select placeholder="请选择资源平台">
+          <el-option></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="付费类型:">
-        <el-select v-model="form.isFree" placeholder="请选择付费类型">
-          <el-option v-for="item in freeOptions" :key="item.value" :value="item.value" :label="item.label" />
+      <el-form-item label="当前状态:">
+        <el-select placeholder="请选择当前状态">
+          <el-option></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态">
-          <el-option v-for="item in onOrOffOptions" :key="item.value" :label="item.label"
-            :value="item.value" />
+      <el-form-item label="标签分类:">
+        <el-select placeholder="请选择标签分类">
+          <el-option></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item label="节目ID:">
+        <el-input placeholder="请选择节目ID"></el-input>
+      </el-form-item>
+      <el-form-item label="节目名称:">
+        <el-input placeholder="请选择节目名称"></el-input>
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 1)">批量上架</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 2)">批量下架</el-button>
+        <el-button type="primary" icon="el-icon-upload2" plain>上传音频文件</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading" @selection-change="handleSelect">
-      <el-table-column type="selection" align="center" />
-      <el-table-column label="ID" prop="id" align="center" show-overflow-tooltip />
-      <el-table-column label="节目名称" prop="name" align="center" show-overflow-tooltip />
-      <el-table-column label="付费类型" prop="isFree" align="center" :formatter="freeFormatter" />
-      <el-table-column label="原价 / 元" prop="price" align="center" />
-      <el-table-column label="折扣价 / 元" prop="discountedPrice" align="center" />
-      <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="更新时间" align="center" show-overflow-tooltip>
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
-        </template>
-      </el-table-column>
+    <el-table :data="tableDate">
+      <el-table-column prop="id" label="节目ID" align="center" width="80px"></el-table-column>
+      <el-table-column prop="name" label="节目名称" align="center" show-overflow-tooltip></el-table-column>
+      <el-table-column prop="blog" label="播客专辑" align="center" show-overflow-tooltip></el-table-column>
+      <el-table-column prop="title" label="标签分类" align="center"></el-table-column>
+      <el-table-column prop="pay" label="付费类型" align="center" width="80px"></el-table-column>
+      <el-table-column prop="origin" label="原价" align="center" width="80px"></el-table-column>
+      <el-table-column prop="discount" label="折扣价" align="center" width="80px"></el-table-column>
+      <el-table-column prop="plat" label="资源平台" align="center"></el-table-column>
+      <el-table-column prop="status" label="当前状态" align="center" width="80px"></el-table-column>
+      <el-table-column prop="update" label="更新时间" align="center" show-overflow-tooltip></el-table-column>
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 2" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 1)">上架</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button type="text" v-else @click="getChange(scope.row, 2)">下架</el-button>
-          <Audio :src="scope.row.fullUrl" />
+          <el-button type="text" @click="getDetail(scope.row.id)">查看</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
+          <el-button type="text">上架</el-button>
+          <!-- <el-button type="text">下架</el-button> -->
+          <el-button type="text">试听</el-button>
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
   </div>
 </template>
 
 <script>
-import Audio from '@/components/Audio/index.vue'
-import { list, change, remove } from '@/api/music/program'
-import { platformMixin, onOrOffMixin, isFreeMixin } from '@/mixin/index'
 export default {
-  mixins: [platformMixin, onOrOffMixin, isFreeMixin],
-  components: {
-    Audio
-  },
   data() {
     return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      // 总数据
-      total: 0,
-      // 列表
-      tableData: [],
-      // 批量上下架
-      obj: {
-        id: '',
-        name: '已选数据'
-      }
+        tableDate:[{
+            id: '1',
+            name: '测试',
+            blog: '测试',
+            title: '测试',
+            pay: '免费',
+            origin: '100',
+            discount: '70',
+            plat: 'QQ音乐',
+            status: '下架',
+            update: '2022/3/16 15:47:00'
+        }]
     };
   },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 6
-    })
-    this.getList()
-  },
   methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.form.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.form = {
-        pageNum: 1,
-        pageSize: 10
-      }
-      this.getList()
-    },
-
-    // 新增 / 查看 / 编辑
-    getDetail(id, boolean) {
+    getDetail(id) {
       this.$router.push({
         path: `/music/program/detail`,
         query: {
           id: id,
-          disabled: boolean
         },
       });
     },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 1 ? '上架' : '下架'
-      this.$confirm(`是否${title}${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change(row.id, status).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove(row.id).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-
-    // 多选
-    handleSelect(e) {
-      this.obj.id = ''
-      e.map((item, index) => this.obj.id += item.id + ((index + 1) < e.length ? ',' : ''))
-    },
-
-    // 字典翻译
-    freeFormatter(row) {
-      return this.selectDictLabel(this.freeOptions, row.isFree)
-    },
-    platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId)
-    },
-    statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    }
-  }
+  },
 };
 </script>

+ 137 - 102
src/views/music/radio/detail.vue

@@ -1,136 +1,171 @@
 <template>
   <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="电台名称:" prop="name">
-        <el-input v-model="form.name" placeholder="请输入电台名称" maxlength="100" show-word-limit />
-      </el-form-item>
-      <el-form-item label="资源平台:" prop="platformId">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
+    <el-form class="form" label-width="100px" size="small">
+      <el-form-item label="资源平台:">
+        <el-select placeholder="请选择资源平台">
+          <el-option></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item v-if="form.platformId !== 4" label="地域分类:" prop="addressClassifyId">
-        <el-select v-model="form.addressClassifyId" placeholder="请选择地域分类">
-          <el-option v-for="item in addressOptions" :key="item.id" :value="item.id.toString()"
-            :label="item.name" />
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="电台封面:">
+            <Upload listType="picture-card" @upload="getUpload" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="电台名称:">
+            <el-input placeholder="请输入电台名称" />
+          </el-form-item>
+          <el-form-item label="电台分类:">
+            <el-select placeholder="请选择电台分类">
+              <el-option></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="资源平台:">
+            <el-input disabled></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item label="电台简介:">
+        <el-input type="textarea" rows="4" placeholder="请输入电台简介" />
+      </el-form-item>
+      <el-form-item label="标签分类:">
+        <el-select placeholder="请选择标签分类">
+          <el-option></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="内容分类:" prop="contentClassifyId">
-        <el-select v-model="form.contentClassifyId" placeholder="请选择内容分类">
-          <el-option v-for="item in contentOptions" :key="item.id" :value="item.id.toString()"
-            :label="item.name" />
+      <el-form-item label="付费类型:">
+        <el-select placeholder="请选择付费类型">
+          <el-option></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="电台简介:" prop="description">
-        <el-input v-model="form.description" type="textarea" rows="5" maxlength="300" show-word-limit
-          placeholder="请输入电台简介" />
+      <el-form-item label="原价:">
+        <el-input placeholder="请输入原价"></el-input>
+      </el-form-item>
+      <el-form-item label="折扣价:">
+        <el-input placeholder="请输入折扣价"></el-input>
       </el-form-item>
-      <el-form-item label="电台链接:" prop="fullUrl">
-        <el-input v-model="form.fullUrl" placeholder="请输入电台链接" />
+      <!-- 海外电台显示 -->
+      <el-form-item label="电台链接:">
+        <el-input placeholder="请输入电台链接"></el-input>
       </el-form-item>
-      <el-form-item label="电台封面:" prop="thumb">
-        <Upload listType="picture-card" :url="form.thumb" @upload="upload" :disabled="disabled" />
+      <!-- 海外电台不显示 -->
+      <el-form-item label="电台节目:" style="width: 700px">
+        <el-tabs>
+          <el-tab-pane v-for="item in dict.type.sys_week_list" :key="item.value" :label="item.label" :naem="item.value">
+            <el-table :data="tableData1">
+              <el-table-column type="index" label="序号" align="center" />
+              <el-table-column prop="radio" label="电台名称" align="center" show-overflow-tooltip />
+              <el-table-column prop="name" label="节目名称" align="center" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="type" label="电台分类" align="center" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="date" label="时间段" align="center" show-overflow-tooltip></el-table-column>
+              <el-table-column align="center">
+                <template slot="header" slot-scope="scope">
+                  <el-button icon="el-icon-plus" type="text" @click="dialogVisible = true">新增关联</el-button>
+                </template>
+                <template>
+                  <el-button type="delete">删除</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </el-tab-pane>
+        </el-tabs>
+      </el-form-item>
+      <el-form-item>
+        <el-button @click="getCancel">取消</el-button>
+        <el-button type="primary" @click="getSubmit">提交</el-button>
       </el-form-item>
     </el-form>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
-    </div>
+    <!-- 弹窗 - 新增关联 -->
+    <el-dialog title="关联电台" :visible.sync="dialogVisible" width="1000px">
+      <!-- 搜索 -->
+      <el-form inline size="mini">
+        <el-form-item label="资源平台:">
+          <el-select placeholder="请选择资源平台">
+            <el-option></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="付费类型:">
+          <el-select placeholder="请选择付费类型">
+            <el-option></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="节目名称:">
+          <el-input placeholder="请输入节目名称" />
+        </el-form-item>
+        <el-form-item>
+          <el-button icon="el-icon-search" type="primary">搜索</el-button>
+          <el-button icon="el-icon-refresh">重置</el-button>
+        </el-form-item>
+      </el-form>
+      <!-- 列表 -->
+      <el-table :data="tableData2">
+        <el-table-column prop="id" label="ID" align="center" width="100px" />
+        <el-table-column prop="radio" label="电台名称" align="center" />
+        <el-table-column prop="name" label="节目名称" align="center" />
+        <el-table-column prop="type" label="电台分类" align="center" />
+        <el-table-column prop="date" label="时间段" align="center" />
+        <el-table-column label="操作" align="center">
+          <template>
+            <el-button type="text">选择</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import Upload from "@/components/Upload/index";
-import { submit, detail } from '@/api/music/radio'
-import { platformMixin, addressMixin, contentMixin } from '@/mixin/index'
 export default {
-  mixins: [platformMixin, addressMixin, contentMixin],
+  dicts: ["sys_week_list"],
   components: {
     Upload,
   },
   data() {
     return {
-      // 表单
-      form: {
-        status: 1
-      },
-      // 校验
-      rules: {
-        name: [{
-          required: true, message: '请输入电台名称', trigger: 'blur'
-        }],
-        addressClassifyId: [{
-          required: true, message: '请选择地域分类', trigger: 'change'
-        }],
-        contentClassifyId: [{
-          required: true, message: '请选择内容分类', trigger: 'change'
-        }],
-        description: [{
-          required: true, message: '请输入电台简介', trigger: 'blur'
-        }],
-        platformId: [{
-          required: true, message: '请选择资源平台', trigger: 'change'
-        }],
-        thumb: [{
-          required: true, message: '请上传电台封面', trigger: 'change'
-        }]
-      },
-      // 只读
-      disabled: false
-    }
-  },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 2,
-      joinType: 2
-    })
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getList()
-    }
+      // 列表
+      tableData1: [
+        {
+          radio: "CNR中国之声",
+          name: "档案揭秘",
+          type: "国家台,咨询台",
+          date: "00:00:00 00:00:00",
+        },
+      ],
+      tableData2: [
+        {
+          id: 1,
+          radio: "CNR中国之声",
+          name: "档案揭秘",
+          type: "国家台,咨询台",
+          date: "00:00:00 00:00:00",
+        },
+      ],
+      // 弹窗
+      dialogVisible: false,
+    };
   },
   methods: {
-    // 详情
-    getList() {
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-        }
-      })
-    },
-    // 上传
-    upload(e) {
-      this.form.thumb = e.file
+    getAdd() {
+      this.tableData.push({
+        name: "",
+        radio: "",
+        start: "",
+        end: "",
+      });
     },
-    // 确定
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          let title = this.form.id ? `编辑成功!` : `新增成功!`
-          submit(this.form).then(res => {
-            if (res.code === 0) {
-              this.$message.success(`${title}`)
-              this.cancel()
-            }
-          })
-        } else {
-          return false
-        }
-      })
-    },
-    // 取消
-    cancel() {
-      this.$tab.closeOpenPage('/music/radio')
+
+    // 上传封面
+    getUpload(){
+      
     }
   }
 };
 </script>
 
 <style lang="scss" scoped>
-.el-form {
-  width: 500px;
+.form {
+  width: 600px;
 }
 </style>

+ 59 - 133
src/views/music/radio/index.vue

@@ -1,117 +1,100 @@
 <template>
   <div class="app-container">
     <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="电台名称:">
-        <el-input v-model="form.name" placeholder="请输入电台名称" />
-      </el-form-item>
-      <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
+    <el-form inline label-width="100px" size="mini">
       <el-form-item label="地域分类:">
-        <el-select v-model="form.addressClassifyId" placeholder="请选择地域分类">
-          <el-option v-for="item in addressOptions" :key="item.id" :value="item.id" :label="item.name" />
+        <el-select v-model="form.category_id" placeholder="请选择地域分类">
+          <el-option v-for="item in cityOptions" :key="item.id" :label="item.title" :value="item.id" />
         </el-select>
       </el-form-item>
       <el-form-item label="内容分类:">
-        <el-select v-model="form.contentClassifyId" placeholder="请选择内容分类">
-          <el-option v-for="item in contentOptions" :key="item.id" :value="item.id" :label="item.name" />
+        <el-select v-model="form.contentCategoryId" placeholder="请选择内容分类">
+          <el-option v-for="item in contentOptions" :key="item.id" :label="item.title" :value="item.id" />
         </el-select>
       </el-form-item>
-      <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态">
-          <el-option v-for="item in onOrOffOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
+      <el-form-item label="电台名称:">
+        <el-input v-model="form.name" placeholder="请输入电台名称" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 1)">批量上架</el-button>
-        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 2)">批量下架</el-button>
+        <el-button type="primary" icon="el-icon-upload2" plain>上传音频文件</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading" @selection-change="handleSelect">
-      <el-table-column type="selection" align="center" />
-      <el-table-column label="ID" prop="id" align="center" show-overflow-tooltip />
-      <el-table-column label="电台名称" prop="name" align="center" show-overflow-tooltip />
+    <el-table :data="tableData" v-loading="loading">
+      <el-table-column prop="id" label="电台ID" align="center" show-overflow-tooltip/>
+      <el-table-column prop="title" label="电台名称" align="center" show-overflow-tooltip />
       <el-table-column label="电台封面" align="center" width="100px">
         <template slot-scope="scope">
-          <el-image v-if="scope.row.thumb" :src="scope.row.thumb" />
+          <el-image :src="scope.row.thumbs.medium_thumb"
+            :preview-src-list="[scope.row.thumbs.medium_thumb]" />
+        </template>
+      </el-table-column>
+      <el-table-column label="电台分类" align="center" show-overflow-tooltip>
+        <template slot-scope="scope">
+          <span v-for="item in scope.row.categories" :key="item.id">{{ item.title }} </span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="description" label="电台描述" align="center" show-overflow-tooltip />
+      <el-table-column label="试听" align="center" width="400px">
+        <template slot-scope="scope">
+          <audio :src="scope.row.playUrl" controls />
         </template>
       </el-table-column>
-      <el-table-column label="地域分类" prop="addressClassifyId" align="center" :formatter="addressFormatter" />
-      <el-table-column label="内容分类" prop="contentClassifyName" align="center" :formatter="contentFormatter" />
-      <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 2" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 1)">上架</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button v-else type="text" @click="getChange(scope.row, 2)">下架</el-button>
-          <Audio :src="scope.row.fullUrl" />
+          <el-button type="text" @click="getDetail(scope.row.id)">查看</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
+          <!-- <el-button type="text">上架</el-button> -->
+          <!-- <el-button type="text">下架</el-button> -->
         </template>
       </el-table-column>
     </el-table>
+    <!-- 分页 -->
     <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
       @pagination="getList" />
   </div>
 </template>
 
 <script>
-import { platformMixin, onOrOffMixin, addressMixin, contentMixin } from '@/mixin/index'
-import { list, change, remove } from '@/api/music/radio'
-import Audio from '@/components/Audio/index.vue'
+import { getPage, getCategories } from '@/api/music/radio'
 export default {
-  mixins: [platformMixin, onOrOffMixin, addressMixin, contentMixin],
-  components: {
-    Audio
-  },
   data() {
     return {
       // 遮罩层
       loading: false,
+      // 地域分类
+      cityOptions: [],
+      // 内容分类
+      contentOptions: [],
+      // 列表
+      tableData: [],
       // 表单
       form: {
         pageNum: 1,
         pageSize: 10
       },
-      // 总数据
-      total: 0,
-      // 列表
-      tableData: [],
-      // 内容分类
-      contentOptions: [],
-      // 地域分类
-      addressOptions: [],
-      // 批量上下架
-      obj: {
-        id: '',
-        name: '已选数据'
+      total: 0
+    };
+  },
+  created() {
+    // 地域分类 内容分类
+    getCategories().then(res => {
+      if (res.code === 0) {
+        res.data.filter(i => i.name === 'regions').map(j => this.cityOptions = j.records)
+        res.data.filter(i => i.name === 'content').map(j => this.contentOptions = j.records)
       }
-    }
+    })
   },
   mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 2
-    })
     this.getList()
   },
   methods: {
     // 列表
     getList() {
       this.loading = true
-      list(this.form).then(res => {
+      getPage(this.form).then(res => {
         if (res.code === 0) {
           this.tableData = res.data.records
           this.total = res.data.total
@@ -120,6 +103,16 @@ export default {
       })
     },
 
+    // 编辑 / 查看
+    getDetail(id) {
+      this.$router.push({
+        path: `/music/radio/detail`,
+        query: {
+          id: id,
+        },
+      });
+    },
+
     // 搜索
     getSearch() {
       this.form.pageNum = 1
@@ -133,74 +126,7 @@ export default {
         pageSize: 10
       }
       this.getList()
-    },
-
-    // 新增 / 查看 / 编辑
-    getDetail(id, boolean) {
-      this.$router.push({
-        path: `/music/radio/detail`,
-        query: {
-          id: id,
-          disabled: boolean
-        }
-      })
-    },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 1 ? '上架' : '下架'
-      this.$confirm(`是否${title}${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change(row.id, status).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove(row.id).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 多选
-    handleSelect(e) {
-      this.obj.id = ''
-      e.map((item, index) => this.obj.id += item.id + ((index + 1) < e.length ? ',' : ''))
-    },
-
-    // 字典翻译
-    platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId)
-    },
-
-    statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    },
-
-    addressFormatter(row) {
-      return row.addressClassifyId ? this.addressOptions.find(i => i.id === row.addressClassifyId).name : '/'
-    },
-
-    contentFormatter(row) {
-      return row.contentClassifyId ? this.contentOptions.find(i => i.id === row.contentClassifyId).name : '/'
     }
   },
-}
-</script>
-
-<style lang="scss" scoped>
-</style>
+};
+</script>

+ 0 - 147
src/views/music/singer/detail.vue

@@ -1,147 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="歌手名称:" prop="name">
-        <el-input v-model="form.name" placeholder="请输入歌手名称" />
-      </el-form-item>
-      <el-form-item label="歌手性别:" prop="sex">
-        <el-select v-model="form.sex" placeholder="请选择歌手性别">
-          <el-option v-for="item in sexOptions" :key="item.value" :value="item.value" :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="所属地区:" prop="singerArea">
-        <el-select v-model="form.singerArea" placeholder="请选择歌手所属地区">
-          <el-option v-for="item in regionOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="资源平台:" prop="platformId">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="歌手简介:" prop="description">
-        <el-input v-model="form.description" type="textarea" rows="5" placeholder="请输入歌手简介" />
-      </el-form-item>
-      <el-form-item label="歌手头像:" prop="coverUrl">
-        <Upload listType="picture-card" :url="form.coverUrl" @upload="upload" :disabled="disabled" />
-      </el-form-item>
-    </el-form>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button type="primary" @click="getSubmit" v-if="!disabled">确定</el-button>
-    </div>
-  </div>
-</template>
-
-<script>
-import { detail, submit } from '@/api/music/singer'
-import { sexMixin, regionMixin, platformMixin } from '@/mixin/index'
-import Upload from '@/components/Upload/index.vue'
-export default {
-  components: {
-    Upload
-  },
-  mixins: [sexMixin, regionMixin, platformMixin],
-  data() {
-    return {
-      // 表单
-      form: {
-        name: '',
-        sex: '',
-        singerArea: '',
-        platformId: '',
-        status: '',
-        description: '',
-        coverUrl: ''
-      },
-      // 校验
-      rules: {
-        name: [{
-          required: true, message: '请输入歌手名称', trigger: 'blur'
-        }, {
-          max: '100', message: '歌手名称字符不可超过100个', trigger: 'blur'
-        }],
-        sex: [{
-          required: true, message: '请选择歌手性别', trigger: 'change'
-        }],
-        singerArea: [{
-          required: true, message: '请选择歌手所属地区', trigger: 'change'
-        }],
-        platformId: [{
-          required: true, message: '请选择资源平台', trigger: 'change'
-        }],
-        status: [{
-          required: true, message: '请选择当前状态', trigger: 'change'
-        }],
-        description: [{
-          required: true, message: '请输入歌手简介', trigger: 'blur'
-        }, {
-          max: '100', message: '歌手简介字符不可超过100个', trigger: 'blur'
-        }],
-        coverUrl: [{
-          required: true, message: '请上传歌手头像', trigger: 'change'
-        }]
-      },
-      // 是否只读
-      disabled: false
-    }
-  },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 9,
-      joinType: 2
-    })
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getList()
-    }
-  },
-  methods: {
-    // 详情
-    getList() {
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-        }
-      })
-    },
-
-    // 上传
-    upload(e) {
-      this.form.coverUrl = e.file
-    },
-
-    // 新增
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          let title = this.form.id ? '编辑成功!' : '新增成功!'
-          submit(this.form).then(res => {
-            if (res.code === 0) {
-              this.$message.success(`${title}`)
-              this.cancel()
-            }
-          })
-        } else {
-          return false
-        }
-      })
-    },
-
-    // 取消
-    cancel() {
-      this.$tab.closeOpenPage("/music/singer");
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.el-form {
-  width: 500px;
-}
-</style>

+ 63 - 147
src/views/music/singer/index.vue

@@ -1,183 +1,99 @@
 <template>
   <div class="app-container">
     <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="歌手名称:">
-        <el-input v-model="form.name" placeholder="请输入歌手名称" clearable />
-      </el-form-item>
+    <el-form inline label-width="100px" size="mini">
       <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="歌手性别:">
-        <el-select v-model="form.sex" placeholder="请选择歌手性别" clearable>
-          <el-option v-for="item in sexOptions" :key="item.value" :value="item.value" :label="item.label" />
+        <el-select placeholder="请选择资源平台">
+          <el-option />
         </el-select>
       </el-form-item>
-      <el-form-item label="所属地区:">
-        <el-select v-model="form.singerArea" placeholder="请选择所属地区" clearable>
-          <el-option v-for="item in regionOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option v-for="item in onOrOffOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
+      <el-form-item label="歌手名称:">
+        <el-input placeholder="请输入歌手名称" />
       </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
+        <el-button type="primary" icon="el-icon-plus" plain @click="getDetail()">新增</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading">
-      <el-table-column label="ID" prop="id" align="center" show-overflow-tooltip />
-      <el-table-column label="歌手名称" prop="name" align="center" show-overflow-tooltip />
-      <el-table-column label="歌手头像" align="center" width="100px">
-        <template slot-scope="scope">
-          <el-image v-if="scope.row.coverUrl" :src="scope.row.coverUrl" />
-        </template>
-      </el-table-column>
-      <el-table-column label="歌手性别" prop="sex" align="center" :formatter="sexFormatter" />
-      <el-table-column label="所属地区" prop="singerArea" align="center" :formatter="areaFormatter" />
-      <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
+    <el-table :data="tableData">
+      <el-table-column prop="id" label="歌手ID" align="center"></el-table-column>
+      <el-table-column prop="name" label="歌手名称" align="center"></el-table-column>
+      <el-table-column prop="img" label="歌手头像" align="center"></el-table-column>
+      <el-table-column prop="platform" label="资源平台" align="center"></el-table-column>
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 2" style="margin-left: 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 1)">上架</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button type="text" v-else @click="getChange(scope.row, 2)">下架</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id, 0)">查看</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id, 1)">编辑</el-button>
+          <el-button type="delete">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
+    <!-- 弹窗 -->
+    <el-dialog title="新增" :visible.sync="dialogVisible" width="600px">
+      <el-form label-width="100px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="歌手头像:">
+              <imageUpload />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="歌手名称:">
+              <el-input placeholder="请输入歌手名称"></el-input>
+            </el-form-item>
+            <el-form-item label="资源平台:">
+              <el-select placeholder="请选择资源平台">
+                <el-option></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-form-item label="歌手简介:">
+          <el-input type="textarea" placeholder="请输入歌手简介" rows="4"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="getCancel">取消</el-button>
+        <el-button type="primary" @click="getSubmit">确定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { list, remove, change } from '@/api/music/singer'
-import { platformMixin, sexMixin, regionMixin, onOrOffMixin } from '@/mixin/index'
+import imageUpload from "@/components/Upload/index";
 export default {
-  mixins: [platformMixin, sexMixin, regionMixin, onOrOffMixin],
+  components: {
+    imageUpload,
+  },
   data() {
     return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      // 总数据
-      total: 0,
       // 列表
-      tableData: []
+      tableData: [
+        {
+          id: "1",
+          name: "周杰伦",
+          img: "",
+          platform: "官方平台",
+        },
+      ],
+      // 弹窗
+      dialogVisible: false,
     };
   },
-  mounted() {
-    // 获取资源平台
-    this.getPlatform({
-      audioType: 9
-    })
-    this.getList()
-  },
   methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
     // 搜索
-    getSearch() {
-      this.form.pageNum = 1
-      this.getList()
-    },
-
+    getSearch() {},
     // 重置
-    getRefresh() {
-      this.form = {
-        pageNum: 1,
-        pageSize: 10
+    getRefresh() {},
+    // 新增 / 编辑 / 查看
+    getDetail(id) {
+      this.dialogVisible = true;
+      if (id) {
       }
-      this.getList()
-    },
-
-    // 新增 编辑
-    getDetail(id, boolean) {
-      this.$router.push({
-        path: `/music/singer/detail`,
-        query: {
-          id: id,
-          disabled: boolean
-        }
-      })
-    },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 1 ? '上架' : '下架'
-      this.$confirm(`是否${title}${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change({
-          id: row.id,
-          status: status
-        }).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.name}`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove(row.id).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
     },
-
-    // 字典翻译
-    sexFormatter(row) {
-      return this.selectDictLabel(this.sexOptions, row.sex)
-    },
-
-    areaFormatter(row) {
-      return this.selectDictLabel(this.regionOptions, row.singerArea)
-    },
-
-    platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId)
-    },
-
-    statusFormatter(row) {
-      return this.selectDictLabel(this.onOrOffOptions, row.status)
-    }
   },
 };
 </script>

+ 3 - 3
src/views/ohplay/operation/index.vue

@@ -135,7 +135,6 @@ export default {
 
     // 上传图片
     getUpload(e) {
-      console.log(e);
       this.pic = e.file
     },
 
@@ -148,11 +147,11 @@ export default {
         sort: index + 1,
         skip: item.skip,
         skipUrl: item.skipUrl,
-        script: item.script,
-        banner: this.pic
+        script: item.script
       }
       if (item.id) {
         form.id = item.id
+        form.banner = item.banner
         edit(form).then(res => {
           if (res.code === 0) {
             this.$message.success('修改成功!')
@@ -160,6 +159,7 @@ export default {
           }
         })
       } else {
+        form.banner = this.pic
         create(form).then(res => {
           if (res.code === 0) {
             this.$message.success('创建成功!')

+ 41 - 38
src/views/operation/recommend/index.vue

@@ -119,16 +119,16 @@
     <!-- 弹窗 -->
     <el-dialog :visible.sync="dialogVisible" title="添加内容" width="1000px">
       <el-form inline size="mini">
-        <el-form-item label="音频类型:">
-          <el-select v-model="form.audioType" placeholder="请选择类型" :disabled="disabled">
-            <el-option v-for="item in audioOptions" :key="item.value" :label="item.label"
-              :value="item.value" />
+        <el-form-item label="平台:">
+          <el-select v-model="form.platformId" placeholder="请选择平台">
+            <el-option v-for="item in dict.type.platform_type" :key="item.value" :label="item.label"
+              :value="Number(item.value)" />
           </el-select>
         </el-form-item>
-        <el-form-item label="资源平台:">
-          <el-select v-model="form.platformId" placeholder="请选择平台">
-            <el-option v-for="item in platformOptions" :key="item.value" :label="item.label"
-              :value="item.value" />
+        <el-form-item label="音频类型:">
+          <el-select v-model="form.audioType" placeholder="请选择类型" :disabled="disabled">
+            <el-option v-for="item in audioTypeOptions" :key="item.value" :label="item.label"
+              :value="Number(item.value)" />
           </el-select>
         </el-form-item>
         <el-form-item label="内容:">
@@ -152,11 +152,10 @@
         <el-table-column label="音频类型" prop="audioType" align="center" :formatter="audioFormatter" />
         <el-table-column label="音频数量" prop="programCount" align="center" />
         <el-table-column label="付费类型" align="center" :formatter="freeFormatter" width="100px" />
-        <el-table-column label="当前状态" align="center" :formatter="listStatusFormatter" />
         <el-table-column label="操作" align="center">
           <template slot-scope="scope">
             <el-button v-if="tabIndex === 2 && active === 1 ? false : true" type="text"
-              @click="getSelect(scope.row)" :disabled="scope.row.status === 2">
+              @click="getSelect(scope.row)">
               选择
             </el-button>
           </template>
@@ -183,7 +182,7 @@ import {
   upOrDown
 } from '@/api/operation/recommend'
 import Upload from '@/components/Upload/index'
-import { isFreeMixin, audioMixin, platformMixin, onOrOffMixin } from '@/mixin/index'
+import { isFreeMixin } from '@/mixin/index'
 
 export default {
   dicts: [
@@ -191,7 +190,7 @@ export default {
     'is_custom',
     'content_model'
   ],
-  mixins: [isFreeMixin, audioMixin, platformMixin, onOrOffMixin],
+  mixins: [isFreeMixin],
   components: {
     Upload
   },
@@ -293,10 +292,10 @@ export default {
       // 弹窗
       dialogVisible: false,
       form: {
+        audioType: 2,
+        platformId: 1,
         pageNum: 1,
-        pageSize: 10,
-        audioType: null,
-        platformId: null
+        pageSize: 10
       },
       total: 0,
       index: 0,
@@ -330,27 +329,32 @@ export default {
       }, {
         value: 6,
         label: 'H5外链'
+      }],
+      // 音频类型
+      audioTypeOptions: [{
+        value: 2,
+        label: '广播'
+      }, {
+        value: 6,
+        label: '节目'
+      }, {
+        value: 8,
+        label: '专辑'
+      }, {
+        value: 9,
+        label: '歌手'
+      }, {
+        value: 10,
+        label: '歌单'
+      }, {
+        value: 11,
+        label: '歌曲'
+      }, {
+        value: 12,
+        label: '主播'
       }]
     }
   },
-  watch: {
-    'form.audioType': {
-      handler(val) {
-        this.$nextTick(() => {
-          this.getPlatform(val)
-        })
-        this.form.platformId = this.platformOptions[0].value
-        this.getContentList()
-      },
-      deep: true
-    },
-    'form.platformId': {
-      handler() {
-        this.getContentList()
-      },
-      deep: true
-    }
-  },
   mounted() {
     this.getTab()
   },
@@ -454,7 +458,9 @@ export default {
     getDialog(index) {
       this.dialogVisible = true
       this.index = index
-      this.form.audioType = this.list[index].forwardType !== null ? this.typeOptions.find(i => i.value === this.list[index].forwardType).type : 2
+      if (this.list[index].forwardType !== null) {
+        this.form.audioType = this.typeOptions.find(i => i.value === this.list[index].forwardType).type
+      }
       this.disabled = this.tabIndex == 2 && this.active === 1 || this.list[index].forwardType !== null ? true : false
       this.getContentList()
     },
@@ -558,7 +564,7 @@ export default {
 
     // 字典翻译
     audioFormatter(row) {
-      return this.selectDictLabel(this.audioOptions, row.audioType)
+      return this.selectDictLabel(this.audioTypeOptions, row.audioType)
     },
     freeFormatter(row) {
       return this.selectDictLabel(this.freeOptions, row.isFree)
@@ -566,9 +572,6 @@ export default {
     statusFormatter(row) {
       return row.status === 0 ? '上架' : '下架'
     },
-    listStatusFormatter(row) {
-      return row.status ? this.selectDictLabel(this.onOrOffOptions, row.status) : '上架'
-    },
 
     // v-if判断
     // 标题模块

+ 74 - 0
src/views/order/goods/index.vue

@@ -0,0 +1,74 @@
+<template>
+  <div class="app-container">
+    <!-- 搜索 -->
+    <el-form inline label-width="100px" size="mini">
+      <el-form-item label="订单编号:">
+        <el-input placeholder="请输入订单编号" />
+      </el-form-item>
+      <el-form-item label="商品ID:">
+        <el-input placeholder="请输入商品ID" />
+      </el-form-item>
+      <el-form-item label="商品名称:">
+        <el-input placeholder="请输入商品名称" />
+      </el-form-item>
+      <el-form-item label="会员账号:">
+        <el-input placeholder="请输入会员账号" />
+      </el-form-item>
+      <el-form-item label="订单状态:">
+        <el-select placeholder="请选择订单状态">
+          <el-option></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="支付方式:">
+        <el-select placeholder="请选择支付方式">
+          <el-option></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="下单时间:">
+        <el-date-picker type="datetimerange" start-placeholder="开始日期" end-placeholder="结束时间" />
+      </el-form-item>
+      <el-form-item>
+        <el-button icon="el-icon-search" type="primary">搜索</el-button>
+        <el-button icon="el-icon-refresh">重置</el-button>
+        <el-button icon="el-icon-download" type="primary">导出</el-button>
+      </el-form-item>
+    </el-form>
+    <!-- 列表 -->
+    <el-table>
+      <el-table-column label="订单编号" align="center"></el-table-column>
+      <el-table-column label="商品ID" align="center"></el-table-column>
+      <el-table-column label="商品名称" align="center"></el-table-column>
+      <el-table-column label="订单金额/元" align="center"></el-table-column>
+      <el-table-column label="订单状态" align="center"></el-table-column>
+      <el-table-column label="付费类型" align="center"></el-table-column>
+      <el-table-column label="会员ID" align="center"></el-table-column>
+      <el-table-column label="支付方式" align="center"></el-table-column>
+      <el-table-column label="下单时间" align="center"></el-table-column>
+      <el-table-column label="操作" align="center">
+        <template>
+          <el-button type="text" @click="getDetail()">查看</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 弹窗 -->
+    <el-dialog title="订单详情" :visible.sync="dialogVisible">
+      
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      // 弹窗
+      dialogVisible: false
+    }
+  },
+  methods:{
+    getDetail(){
+      this.dialogVisible = true
+    }
+  }
+}
+</script>

+ 49 - 0
src/views/order/recharge/index.vue

@@ -0,0 +1,49 @@
+<template>
+  <div class="app-container">
+    <!-- 搜索 -->
+    <el-form inline label-width="100px" size="mini">
+      <el-form-item label="充值订单号:">
+        <el-input placeholder="请输入充值订单号" />
+      </el-form-item>
+      <el-form-item label="会员ID:">
+        <el-input placeholder="请输入会员ID" />
+      </el-form-item>
+      <el-form-item label="操作系统:">
+        <el-select placeholder="请选择操作系统">
+          <el-option v-for="item in dict.type.phone_sys_type" :key="item.value" :label="item.label"
+            :value="item.value" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="下单时间:">
+        <el-date-picker type="datetimerange" start-placeholder="开始日期" end-placeholder="结束时间" />
+      </el-form-item>
+      <el-form-item>
+        <el-button icon="el-icon-search" type="primary">搜索</el-button>
+        <el-button icon="el-icon-refresh">重置</el-button>
+        <el-button icon="el-icon-download" type="primary">导出</el-button>
+      </el-form-item>
+    </el-form>
+    <!-- 列表 -->
+    <el-table>
+      <el-table-column label="会员ID" align="center"></el-table-column>
+      <el-table-column label="充值订单号" align="center"></el-table-column>
+      <el-table-column label="支付流水号" align="center"></el-table-column>
+      <el-table-column label="充值金额/元" align="center"></el-table-column>
+      <el-table-column label="订单来源" align="center"></el-table-column>
+      <el-table-column label="支付方式" align="center"></el-table-column>
+      <el-table-column label="订单状态" align="center"></el-table-column>
+      <el-table-column label="充值时间" align="center"></el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  dicts: ['phone_sys_type'],
+  data() {
+    return {
+
+    }
+  }
+}
+</script>

+ 0 - 256
src/views/registration/content/detail.vue

@@ -1,256 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="有效时间:" prop="date">
-        <el-date-picker v-model="form.date" type="datetimerange" range-separator="至" start-placeholder="开始日期"
-          end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="内容:" prop="audioName">
-        <el-input v-model="form.audioName" placeholder="请选择内容" @focus="getDialog" />
-      </el-form-item>
-      <el-form-item label="封面模式:" prop="isCustom">
-        <el-select v-model="form.isCustom" placeholder="请选择封面模式">
-          <el-option v-for="item in coverOptions" :key="item.value" :value="item.value" :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item v-if="form.isCustom === 0" label="内容封面:" prop="pic">
-        <Upload listType="picture-card" :url="form.pic" @upload="upload" :disabled="disabled" />
-      </el-form-item>
-    </el-form>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
-    </div>
-    <!-- 弹窗 -->
-    <el-dialog :visible.sync="dialogVisible" title="添加内容" width="1100px">
-      <el-form inline size="mini" style="width: 100%">
-        <el-form-item label="资源平台:">
-          <el-select v-model="dialogForm.platformId" placeholder="请选择资源平台">
-            <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-              :label="item.label" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="音频类型:">
-          <el-select v-model="dialogForm.audioType" placeholder="请选择音频类型">
-            <el-option v-for="item in audioTypeOptions" :key="item.value" :value="item.value"
-              :label="item.label" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="音频名称:">
-          <el-input placeholder="请输入音频名称" />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
-          <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        </el-form-item>
-      </el-form>
-      <el-table :data="tableData" v-loading="loading">
-        <el-table-column label="内容ID" prop="audioId" align="center" show-overflow-tooltip />
-        <el-table-column label="音频名称" prop="audioName" align="center" show-overflow-tooltip />
-        <el-table-column label="音频封面" align="center" width="100px">
-          <template slot-scope="scope">
-            <el-image :src="scope.row.audioPic" />
-          </template>
-        </el-table-column>
-        <el-table-column label="音频类型" prop="audioType" align="center" :formatter="audioTypeFormatter" />
-        <el-table-column label="音频数量" prop="programCount" align="center" />
-        <el-table-column label="付费类型" prop="isFree" align="center" :formatter="freeFormatter" />
-        <el-table-column label="操作" align="center">
-          <template slot-scope="scope">
-            <el-button type="text" @click="getChecked(scope.row)">选择</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="total>0" :total="total" :page.sync="dialogForm.pageNum"
-        :limit.sync="dialogForm.pageSize" @pagination="getList" />
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import Upload from '@/components/Upload/index.vue'
-import { radioList } from '@/api/operation/recommend'
-import { create, detail, edit } from '@/api/registration/content'
-import { platformMixin, audioMixin, isFreeMixin, coverMixin } from '@/mixin/index'
-export default {
-  mixins: [platformMixin, audioMixin, isFreeMixin, coverMixin],
-  components: {
-    Upload
-  },
-  data() {
-    return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        status: 0
-      },
-      // 弹窗
-      dialogVisible: false,
-      // 弹窗表单
-      dialogForm: {
-        pageNum: 1,
-        pageSize: 10,
-        platformId: 1,
-        audioType: null
-      },
-      // 列表
-      tableData: [],
-      // 总数据
-      total: 0,
-      // 校验
-      rules: {
-        date: [{
-          required: true, message: '请选择有效时间', trigger: 'change'
-        }],
-        audioName: [{
-          required: true, message: '请选择内容', trigger: 'change'
-        }],
-        isCustom: [{
-          required: true, message: '请选择封面模式', trigger: 'change'
-        }],
-        pic: [{
-          required: true, message: '请上传内容封面', trigger: 'change'
-        }]
-      },
-      // 只读
-      disabled: false
-    }
-  },
-  watch: {
-    'dialogForm.platformId': {
-      async handler(val) {
-        await this.getAudioType(val)
-        this.dialogForm.audioType = this.audioTypeOptions[0].value
-        this.getList()
-      },
-      deep: true
-    },
-    'form.date': {
-      handler(val) {
-        if (val) {
-          this.form.startTime = val[0]
-          this.form.endTime = val[1]
-        }
-      },
-      deep: true
-    }
-  },
-  mounted() {
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getDetail()
-    }
-  },
-  methods: {
-    // 详情
-    getDetail() {
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-          this.form.date = [res.data.startTime, res.data.endTime]
-        }
-      })
-    },
-
-    // 打开弹窗
-    async getDialog() {
-      this.dialogVisible = true
-      await this.getAudioType(this.dialogForm.platformId)
-      this.dialogForm.audioType = this.audioTypeOptions[0].value
-      this.getList()
-    },
-
-    // 音频列表
-    getList() {
-      this.loading = true
-      radioList(this.dialogForm).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.dialogForm.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.dialogForm = {
-        pageNum: 1,
-        pageSize: 10,
-        audioType: this.audioTypeOptions[0].value,
-        platformId: 1
-      }
-      this.getList()
-    },
-
-    // 选择
-    getChecked(row) {
-      this.form.audioId = row.audioId
-      this.form.audioInfo = row.description
-      this.form.audioName = row.audioName
-      this.form.audioType = row.audioType
-      this.form.platformId = row.platformId
-      this.form.pic = row.audioPic
-    },
-
-    // 上传
-    upload(e) {
-      this.form.pic = e.file
-    },
-
-    // 取消
-    cancel() {
-      this.$tab.closeOpenPage('/registration/contentConfig')
-    },
-
-    // 确定
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          delete this.form.date
-          if (this.form.id) {
-            edit(this.form).then(res => {
-              if (res.code === 0) {
-                this.$message.success('编辑成功!')
-                this.cancel()
-              }
-            })
-          } else {
-            create(this.form).then(res => {
-              if (res.code === 0) {
-                this.$message.success('新增成功!')
-                this.cancel()
-              }
-            })
-          }
-        } else {
-          return false
-        }
-      })
-    },
-
-    // 字典翻译
-    audioTypeFormatter(row) {
-      return this.selectDictLabel(this.audioOptions, row.audioType)
-    },
-    freeFormatter(row) {
-      return this.selectDictLabel(this.freeOptions, row.isFree)
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.el-form {
-  width: 500px;
-}
-</style>

+ 0 - 179
src/views/registration/content/index.vue

@@ -1,179 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台">
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="音频类型:">
-        <el-select v-model="form.audioType" placeholder="请选择音频类型">
-          <el-option
-            v-for="item in audioOptions.filter(i => i.value !== 9 && i.value !== 12 && i.value !== 15)"
-            :key="item.value" :value="item.value" :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="内容标题:">
-        <el-input v-model="form.audioName" placeholder="请输入内容标题" />
-      </el-form-item>
-      <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态">
-          <el-option v-for="item in disabledOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
-        <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
-      </el-form-item>
-    </el-form>
-    <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading">
-      <el-table-column label="序号" type="index" align="center" />
-      <el-table-column label="内容标题" prop="audioName" align="center" />
-      <el-table-column label="内容图片" align="center" width="100px">
-        <template slot-scope="scope">
-          <el-image :src="scope.row.pic" />
-        </template>
-      </el-table-column>
-      <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
-      <el-table-column label="音频类型" prop="audioType" align="center" :formatter="audioTypeFormatter" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="内容状态" prop="currentStatus" align="center" :formatter="currentFormatter" />
-      <el-table-column label="有效时间" align="center" show-overflow-tooltip>
-        <template slot-scope="scope">
-          {{ scope.row.startTime }} 至 {{ scope.row.endTime }}
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center">
-        <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 1" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 0)">启用</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button v-else type="delete" @click="getChange(scope.row, 1)">禁用</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
-  </div>
-</template>
-
-<script>
-import { platformMixin, audioMixin, disabledMixin, currentMixin } from '@/mixin/index'
-import { list, change, remove } from '@/api/registration/content'
-export default {
-  mixins: [platformMixin, audioMixin, disabledMixin, currentMixin],
-  data() {
-    return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      // 列表
-      tableData: [],
-      // 总数据
-      total: 0
-    }
-  },
-  mounted() {
-    this.getList()
-  },
-  methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.form.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.form = {
-        pageNum: 1,
-        pageSize: 10
-      }
-      this.getList()
-    },
-
-    // 新增 查看 编辑
-    getDetail(id, boolean) {
-      this.$router.push({
-        path: `/registration/contentConfig/detail`,
-        query: {
-          id: id,
-          disabled: boolean
-        }
-      })
-    },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 0 ? '启用' : '禁用'
-      this.$confirm(`是否${title}${row.audioName}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change({
-          id: row.id,
-          status: status
-        }).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.audioName}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove({
-          id: row.id
-        }).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 字典翻译
-    platformFormatter(row) {
-      return this.selectDictLabel(this.platformOptions, row.platformId)
-    },
-    audioTypeFormatter(row) {
-      return this.selectDictLabel(this.audioOptions, row.audioType)
-    },
-    statusFormatter(row) {
-      return this.selectDictLabel(this.disabledOptions, row.status)
-    },
-    currentFormatter(row) {
-      return this.selectDictLabel(this.currentOptions, row.currentStatus)
-    }
-  }
-}
-</script>

+ 0 - 165
src/views/registration/exchange/detail.vue

@@ -1,165 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
-      <el-form-item label="兑换标题:" prop="name">
-        <el-input v-model="form.name" placeholder="请输入兑换标题" maxlength="50" show-word-limit />
-      </el-form-item>
-      <el-form-item label="兑换积分:" prop="exchangePoint">
-        <el-input-number v-model="form.exchangePoint" placeholder="请输入兑换积分" :controls="false" :min="1" />
-        <span style="margin-left: 10px">积分</span>
-      </el-form-item>
-      <el-form-item label="兑换类型:" prop="type">
-        <el-select v-model="form.type" placeholder="请选择兑换类型">
-          <el-option v-for="item in rewardOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="套餐名称:" v-if="form.type !== 3">
-        <el-select v-model="form.businessId" placeholder="请选择套餐">
-          <el-option v-for="item in mealOptions" :key="item.id" :value="item.id" :label="item.name" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="实物数量:" v-else prop="totalNum">
-        <el-input-number v-model="form.totalNum" :min="1" :controls="false" />
-        <span style="margin-left: 10px">个</span>
-      </el-form-item>
-      <el-form-item label="兑换图片:" prop="pic">
-        <Upload listType="picture-card" :url="form.pic" @upload="upload" :disabled="disabled" />
-      </el-form-item>
-    </el-form>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
-    </div>
-  </div>
-</template>
-
-<script>
-import Upload from '@/components/Upload/index.vue'
-import { create, detail, edit, mealList } from '@/api/registration/exchange'
-export default {
-  components: {
-    Upload
-  },
-  data() {
-    return {
-      // 表单
-      form: {
-        status: 0,
-        type: null,
-        businessType: 4
-      },
-      // 校验
-      rules: {
-        name: [{
-          required: true, message: '请输入兑换标题', trigger: 'blur'
-        }],
-        exchangePoint: [{
-          required: true, message: '请输入兑换积分', trigger: 'blur'
-        }],
-        type: [{
-          required: true, message: '请选择兑换类型', trigger: 'change'
-        }],
-        totalNum: [{
-          required: true, message: '请输入实物数量', trigger: 'blur'
-        }],
-        pic: [{
-          required: true, message: '请上传兑换图片', trigger: 'change'
-        }]
-      },
-      // 奖品类型
-      rewardOptions: [{
-        value: 0,
-        label: '音乐套餐'
-      }, {
-        value: 1,
-        label: '流量套餐'
-      }, {
-        value: 3,
-        label: '音响实物'
-      }],
-      // 套餐类型
-      mealOptions: [],
-      // 只读
-      disabled: false
-    }
-  },
-  watch: {
-    'form.type': {
-      handler(val) {
-        if (val !== null) {
-          this.getMealList()
-        }
-      },
-      deep: true
-    }
-  },
-  mounted() {
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getList()
-    }
-  },
-  methods: {
-    // 详情
-    getList() {
-      detail(this.form.id).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-        }
-      })
-    },
-
-    // 上传
-    upload(e) {
-      this.form.pic = e.file
-    },
-
-    // 取消
-    cancel() {
-      this.$tab.closeOpenPage('/registration/exchangeConfig')
-    },
-
-    getMealList() {
-      let type = this.form.type === 0 ? 13 : 12
-      mealList(type, 2).then(res => {
-        if (res.code === 0) {
-          this.mealOptions = res.data
-        }
-      })
-    },
-
-    // 确定
-    getSubmit() {
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          if (this.form.id) {
-            edit(this.form).then(res => {
-              if (res.code === 0) {
-                this.$message.success('修改成功!')
-                this.cancel()
-              }
-            })
-          } else {
-            create(this.form).then(res => {
-              if (res.code === 0) {
-                this.$message.success('新增成功!')
-                this.cancel()
-              }
-            })
-          }
-        } else {
-          return false
-        }
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.el-form {
-  width: 500px;
-}
-</style>

+ 0 - 171
src/views/registration/exchange/index.vue

@@ -1,171 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="兑换标题:">
-        <el-input v-model="form.name" placeholder="请输入兑换标题" clearable />
-      </el-form-item>
-      <el-form-item label="当前状态:">
-        <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option v-for="item in disabledOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="兑换类型:">
-        <el-select v-model="form.type" placeholder="请选择奖品类型" clearable>
-          <el-option v-for="item in rewardOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
-        <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()">新增</el-button>
-      </el-form-item>
-    </el-form>
-    <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading">
-      <el-table-column label="兑换标题" prop="name" align="center" />
-      <el-table-column label="所需积分" prop="exchangePoint" align="center" />
-      <el-table-column label="兑换图片" align="center" width="100px">
-        <template slot-scope="scope">
-          <el-image :src="scope.row.pic" />
-        </template>
-      </el-table-column>
-      <el-table-column label="兑换类型" prop="type" align="center" :formatter="typeFormatter" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="创建时间" prop="createTime" align="center" />
-      <el-table-column label="操作" align="center">
-        <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 1" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 0)">启用</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button v-else type="delete" @click="getChange(scope.row, 1)">禁用</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
-  </div>
-</template>
-
-<script>
-import { disabledMixin } from '@/mixin/index'
-import { list, change, remove } from '@/api/registration/exchange'
-export default {
-  mixins: [disabledMixin],
-  data() {
-    return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      // 总数据
-      total: 0,
-      // 列表
-      tableData: [],
-      // 奖品类型
-      rewardOptions: [{
-        value: 0,
-        label: '音乐套餐'
-      }, {
-        value: 1,
-        label: '流量套餐'
-      }, {
-        value: 3,
-        label: '音响实物'
-      }]
-    }
-  },
-  mounted() {
-    this.getList()
-  },
-  methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 新增 编辑 查看
-    getDetail(id, boolean) {
-      this.$router.push({
-        path: '/registration/exchangeConfig/detail',
-        query: {
-          id: id,
-          disabled: boolean
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.form.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.form = {
-        pageNum: 1,
-        pageSize: 10
-      }
-      this.getList()
-    },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 0 ? '启用' : '禁用'
-      this.$confirm(`是否${title}${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change({
-          id: row.id,
-          status: status
-        }).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove({
-          id: row.id
-        }).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 字典翻译
-    statusFormatter(row) {
-      return this.selectDictLabel(this.disabledOptions, row.status)
-    },
-    typeFormatter(row) {
-      return this.selectDictLabel(this.rewardOptions, row.type)
-    }
-  }
-}
-</script>

+ 0 - 249
src/views/registration/lottery/detail.vue

@@ -1,249 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="auto" :disabled="disabled">
-      <el-form-item label="活动名称:" prop="name">
-        <el-input v-model="form.name" placeholder="请输入活动名称" maxlength="20" show-word-limit />
-      </el-form-item>
-      <el-form-item label="活动时间:" prop="date">
-        <el-date-picker v-model="form.date" type="datetimerange" range-separator="至" start-placeholder="开始日期"
-          end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" @change="handleChange">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="抽奖积分:" prop="lotteryConsumePoint">
-        <el-input-number v-model="form.lotteryConsumePoint" :min="1" :max="999" :controls="false"
-          placeholder="请输入抽奖积分" />
-        <span class="input-number">积分</span>
-      </el-form-item>
-      <el-form-item label="每日限抽次数:" prop="lotteryLimitCount">
-        <el-input-number v-model="form.lotteryLimitCount" :min="1" :max="999" :controls="false"
-          placeholder="请输入每日限抽次数" />
-        <span class="input-number">次</span>
-      </el-form-item>
-      <el-form-item label="活动规则:" prop="rule">
-        <el-input v-model="form.rule" type="textarea" :autosize="{ minRows: 5, maxRows: 10}" :maxlength="150"
-          show-word-limit placeholder="请输入活动规则" />
-      </el-form-item>
-      <el-form-item label="转盘数量:" prop="goodNum">
-        <el-select v-model.number="form.goodNum" placeholder="请选择转盘数量" :disabled="form.id ? true : false"
-          @change="getChange">
-          <el-option v-for="item in numOptions" :key="item.value" :value="item.value" :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item style="width: 1000px">
-        <el-table :data="form.lotteryConfigGoodList">
-          <el-table-column label="顺序" type="index" align="center" />
-          <el-table-column label="奖品类型" align="center">
-            <template slot-scope="scope">
-              <el-select v-model="scope.row.type" :disabled="form.id ? true : false">
-                <el-option v-for="item in rewardOptions" :key="item.value" :value="item.value"
-                  :label="item.label" />
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="奖品名称" align="center">
-            <template slot-scope="scope">
-              <el-input v-model="scope.row.name" :disabled="form.id ? true : false" />
-            </template>
-          </el-table-column>
-          <el-table-column label="奖品数量" align="center">
-            <template slot-scope="scope">
-              <el-input v-model="scope.row.totalNum" />
-            </template>
-          </el-table-column>
-          <el-table-column label="已发放数量" prop="useNum" align="center" />
-          <el-table-column label="奖品图片" align="center">
-            <template slot-scope="scope">
-              <Upload listType="picture-card" :url="scope.row.pic" @upload="upload($event, scope.$index)"
-                :disabled="disabled" />
-            </template>
-          </el-table-column>
-          <el-table-column label="中奖概率 / %" align="center">
-            <template slot-scope="scope">
-              <el-input-number style="width: 120px" v-model="scope.row.rate" :controls="false" />
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form-item>
-    </el-form>
-    <div class="form-btn">
-      <el-button @click="cancel">取消</el-button>
-      <el-button type="primary" @click="getSubmit">确定</el-button>
-    </div>
-  </div>
-</template>
-
-<script>
-import { detail, create, checkTime, edit } from '@/api/registration/lottery'
-import Upload from '@/components/Upload/index.vue'
-export default {
-  components: {
-    Upload
-  },
-  data() {
-    return {
-      // 表单
-      form: {
-        lotteryConfigGoodList: [],
-        status: 0
-      },
-      // 只读
-      disabled: false,
-      // 转盘数量
-      numOptions: [{
-        value: 6,
-        label: '6'
-      }, {
-        value: 8,
-        label: '8'
-      }],
-      // 奖品类型
-      rewardOptions: [{
-        value: 3,
-        label: '音响实物'
-      }, {
-        value: 4,
-        label: '积分'
-      }, {
-        value: 5,
-        label: '谢谢参与'
-      }],
-      // 校验
-      rules: {
-        name: [{
-          required: true, message: '请输入活动名称', trigger: 'blur'
-        }],
-        date: [{
-          required: true, message: '请选择活动时间', trigger: 'change'
-        }],
-        lotteryConsumePoint: [{
-          required: true, message: '请输入抽奖积分', trigger: 'blur'
-        }],
-        lotteryLimitCount: [{
-          required: true, message: '请输入每日限抽次数', trigger: 'blur'
-        }],
-        rule: [{
-          required: true, message: '请输入活动规则', trigger: 'blur'
-        }],
-        goodNum: [{
-          required: true, message: '请选择转盘数量', trigger: 'change'
-        }]
-      }
-    }
-  },
-  mounted() {
-    if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.disabled = Boolean(this.$route.query.disabled)
-      this.getList()
-    }
-  },
-  methods: {
-    // 详情
-    getList() {
-      detail({
-        id: this.form.id
-      }).then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-          this.form.date = [res.data.startTime, res.data.endTime]
-        }
-      })
-    },
-
-    // 校验时间
-    handleChange(e) {
-      checkTime({
-        startTime: e[0],
-        endTime: e[1]
-      }).then(res => {
-        if (res.code === 0) {
-          if (!res.data) {
-            this.$message.error('已有其他活动在此活动时间内!')
-            this.form.date = []
-          }
-        }
-      })
-    },
-
-    // 更改转盘数量
-    getChange() {
-      this.form.lotteryConfigGoodList = []
-      for (let i = 0; i < this.form.goodNum; i++) {
-        this.form.lotteryConfigGoodList.push({})
-      }
-    },
-
-    // 上传
-    upload(e, index) {
-      this.form.lotteryConfigGoodList[index].pic = e.file
-    },
-
-    // 取消
-    cancel() {
-      this.$tab.closeOpenPage('/registration/lotteryConfig')
-    },
-
-    // 确定
-    getSubmit() {
-      let rate = 0
-      this.form.lotteryConfigGoodList.map(i => {
-        rate += i.rate
-      })
-      this.$refs.form.validate((valid) => {
-        if (valid) {
-          if (rate !== 100) {
-            this.$message.error('中奖概率总和要满足100%')
-          } else {
-            this.form.startTime = this.form.date[0]
-            this.form.endTime = this.form.date[1]
-            delete this.form.date
-            if (this.form.id) {
-              edit(this.form).then(res => {
-                if (res.code === 0) {
-                  this.$message.success('编辑成功!')
-                  this.getList()
-                }
-              })
-            } else {
-              create(this.form).then(res => {
-                if (res.code === 0) {
-                  this.$message.success('新增成功!')
-                  this.cancel()
-                }
-              })
-            }
-          }
-        } else {
-          return false
-        }
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.el-form {
-  width: 500px;
-}
-
-::v-deep .upload {
-  .el-upload {
-    width: 100px;
-    height: 100px;
-    line-height: 110px;
-  }
-  .upload-image {
-    width: 100px;
-    height: 100px;
-  }
-}
-
-.form-btn {
-  margin-left: 120px;
-}
-
-.input-number {
-  margin-left: 10px;
-}
-</style>

+ 0 - 124
src/views/registration/lottery/index.vue

@@ -1,124 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form size="mini">
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-plus" @click="getDetail()">新增</el-button>
-      </el-form-item>
-    </el-form>
-    <!-- 列表 -->
-    <el-table :data="tableData">
-      <el-table-column label="序号" type="index" align="center" />
-      <el-table-column label="活动名称" prop="name" align="center" />
-      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="活动时间" align="center">
-        <template slot-scope="scope">
-          {{ scope.row.startTime }} 至 {{ scope.row.endTime }}
-        </template>
-      </el-table-column>
-      <el-table-column label="活动状态" prop="currentStatus" align="center" :formatter="currentFormatter" />
-      <el-table-column label="操作" align="center">
-        <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
-          <span v-if="scope.row.status === 1" style="margin: 0 10px">
-            <el-button type="text" @click="getDetail(scope.row.id)">编辑</el-button>
-            <el-button type="text" @click="getChange(scope.row, 0)">启用</el-button>
-            <el-button type="delete" @click="getDelete(scope.row)">删除</el-button>
-          </span>
-          <el-button v-else type="delete" @click="getChange(scope.row, 1)">禁用</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { list, change, remove } from '@/api/registration/lottery'
-import { disabledMixin, currentMixin } from '@/mixin/index'
-export default {
-  mixins: [disabledMixin, currentMixin],
-  data() {
-    return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      // 总数据
-      total: 0,
-      // 列表
-      tableData: []
-    }
-  },
-  mounted() {
-    this.getList()
-  },
-  methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 新增
-    getDetail(id, boolean) {
-      this.$router.push({
-        path: `/registration/lotteryConfig/detail`,
-        query: {
-          id: id,
-          disabled: boolean
-        }
-      })
-    },
-
-    // 上下架
-    getChange(row, status) {
-      let title = status === 0 ? '启用' : '禁用'
-      this.$confirm(`是否${title}${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        change({
-          id: row.id,
-          status: status
-        }).then(res => {
-          if (res.code === 0) {
-            this.$message.success(`${title}成功!`)
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 删除
-    getDelete(row) {
-      this.$confirm(`是否删除${row.name}?`, '提示', {
-        type: 'warning'
-      }).then(() => {
-        remove({
-          id: row.id
-        }).then(res => {
-          if (res.code === 0) {
-            this.$message.success('删除成功!')
-            this.getList()
-          }
-        })
-      }).catch(() => { })
-    },
-
-    // 字典翻译
-    statusFormatter(row) {
-      return this.selectDictLabel(this.disabledOptions, row.status)
-    },
-    currentFormatter(row) {
-      return this.selectDictLabel(this.currentOptions, row.currentStatus)
-    }
-  }
-}
-</script>

+ 0 - 141
src/views/registration/lotteryStat/index.vue

@@ -1,141 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 搜索 -->
-    <el-form inline size="mini">
-      <el-form-item label="用户账号:">
-        <el-input v-model="form.userName" placeholder="请输入用户账号" clearable />
-      </el-form-item>
-      <el-form-item label="用户手机号:">
-        <el-input v-model="form.userPhone" placeholder="请输入用户手机号" clearable />
-      </el-form-item>
-      <el-form-item label="奖品类型:">
-        <el-select v-model="form.goodType" placeholder="请选择奖品类型" clearable>
-          <el-option v-for="item in rewardOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="活动时间:">
-        <el-date-picker v-model="date" type="datetimerange" range-separator="至" start-placeholder="开始日期"
-          end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
-        <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-      </el-form-item>
-    </el-form>
-    <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading">
-      <el-table-column label="序号" type="index" align="center" />
-      <el-table-column label="用户账号" prop="userName" align="center" show-overflow-tooltip />
-      <el-table-column label="用户手机号" prop="userPhone" align="center" />
-      <el-table-column label="消耗积分" prop="goodConsumePoint" align="center" />
-      <el-table-column label="活动时间" prop="createTime" align="center" />
-      <el-table-column label="奖品类型" prop="goodType" align="center" :formatter="goodFormatter" />
-      <el-table-column label="奖品" prop="goodName" align="center" />
-      <el-table-column label="收货地址" align="center" show-overflow-tooltip>
-        <template slot-scope="scope">
-          <el-button type="text" v-clipboard:copy="getCope(scope.row)" v-clipboard:success="copeSuccess">
-            {{ scope.row.receiveLocation }}{{ scope.row.receiveAddress }}
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
-  </div>
-</template>
-
-<script>
-import { list } from '@/api/registration/lotteryStat'
-export default {
-  data() {
-    return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      // 活动时间
-      date: [],
-      // 列表
-      tableData: [],
-      // 总数据
-      total: 0,
-      // 奖品类型
-      rewardOptions: [{
-        value: 3,
-        label: '音响实物'
-      }, {
-        value: 4,
-        label: '积分'
-      }, {
-        value: 5,
-        label: '谢谢参与'
-      }]
-    }
-  },
-  watch: {
-    date(val) {
-      if (val) {
-        this.form.startTime = val[0]
-        this.form.endTime = val[1]
-      }else{
-        delete this.form.startTime
-        delete this.form.endTime
-      }
-    }
-  },
-  mounted() {
-    this.getList()
-  },
-  methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.form.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.form = {
-        pageNum: 1,
-        pageSize: 10
-      }
-      this.date = []
-      this.getList()
-    },
-
-    getCope(row) {
-      return row.receiveLocation + row.receiveAddress
-    },
-
-    // 复制
-    copeSuccess() {
-      this.$message.success('复制成功!')
-    },
-
-    // 字典翻译
-    goodFormatter(row) {
-      return this.selectDictLabel(this.rewardOptions, row.goodType)
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-</style>

+ 0 - 125
src/views/registration/order/index.vue

@@ -1,125 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 表单 -->
-    <el-form inline size="mini">
-      <el-form-item label="用户昵称:">
-        <el-input v-model="form.userName" placeholder="请输入用户昵称" clearable />
-      </el-form-item>
-      <el-form-item label="用户手机号:">
-        <el-input v-model="form.userPhone" placeholder="请输入用户手机号" clearable />
-      </el-form-item>
-      <el-form-item label="兑换标题:">
-        <el-input v-model="form.goodName" placeholder="请输入兑换标题" clearable />
-      </el-form-item>
-      <el-form-item label="兑换类型:">
-        <el-select v-model="form.goodType" placeholder="请输入兑换类型" clearable>
-          <el-option v-for="item in rewardOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
-        <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-      </el-form-item>
-    </el-form>
-    <!-- 列表 -->
-    <el-table :data="tableData" v-loading="loading">
-      <el-table-column label="序号" type="index" align="center" />
-      <el-table-column label="用户昵称" prop="userName" align="center" />
-      <el-table-column label="用户手机号" prop="userPhone" align="center" />
-      <el-table-column label="兑换类型" prop="goodType" align="center" :formatter="typeFormatter" />
-      <el-table-column label="兑换标题" prop="goodName" align="center" />
-      <el-table-column label="兑换积分" prop="goodConsumePoint" align="center" />
-      <el-table-column label="兑换时间" prop="createTime" align="center" />
-      <el-table-column label="收货地址" align="center" show-overflow-tooltip>
-        <template slot-scope="scope">
-          <el-button type="text" v-clipboard:copy="getCope(scope.row)" v-clipboard:success="copeSuccess">
-            {{ scope.row.receiveLocation }}{{ scope.row.receiveAddress }}
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <pagination v-show="total>0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
-  </div>
-</template>
-
-<script>
-import { list } from '@/api/registration/order'
-export default {
-  data() {
-    return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pageNum: 1,
-        pageSize: 10
-      },
-      // 总数据
-      total: 0,
-      // 列表
-      tableData: [],
-      // 奖品类型
-      rewardOptions: [{
-        value: 0,
-        label: '音乐套餐'
-      }, {
-        value: 1,
-        label: '流量套餐'
-      }, {
-        value: 3,
-        label: '音响实物'
-      }]
-    }
-  },
-  mounted() {
-    this.getList()
-  },
-  methods: {
-    // 列表
-    getList() {
-      this.loading = true
-      list(this.form).then(res => {
-        if (res.code === 0) {
-          this.tableData = res.data.records
-          this.total = res.data.total
-          this.loading = false
-        }
-      })
-    },
-
-    // 搜索
-    getSearch() {
-      this.form.pageNum = 1
-      this.getList()
-    },
-
-    // 重置
-    getRefresh() {
-      this.form = {
-        pageNum: 1,
-        pageSize: 10
-      }
-      this.getList()
-    },
-
-    getCope(row) {
-      return row.receiveLocation + row.receiveAddress
-    },
-
-    // 复制
-    copeSuccess() {
-      this.$message.success('复制成功!')
-    },
-
-    // 字典翻译
-    typeFormatter(row) {
-      return this.selectDictLabel(this.rewardOptions, row.goodType)
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-</style>

+ 0 - 286
src/views/registration/regConfig/index.vue

@@ -1,286 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="form" ref="form" :rules="rules" label-width="auto" v-loading="loading">
-      <el-form-item label="签到标题:" prop="signTitle">
-        <el-input v-model="form.signTitle" placeholder="请输入签到标题" maxlength="50" show-word-limit />
-      </el-form-item>
-      <el-form-item label="签到周期:" prop="signDay">
-        <el-input-number v-model="form.signDay" :min="1" :max="99" placeholder="请输入签到周期" :controls="false"
-          @change="changeSignDay" />
-        <span class="span">天</span>
-      </el-form-item>
-      <el-form-item label="基础积分:" prop="baseRewardPoint">
-        <el-input-number v-model="form.baseRewardPoint" :min="0" :controls="false" placeholder="请输入基础积分" />
-        <span class="span">积分</span>
-      </el-form-item>
-
-      <el-form-item label="连续签到奖励:">
-        <el-popover placement="top" content="连续签到一定天数后,可以额外获得积分" trigger="hover">
-          <el-checkbox v-model="form.isContinueReward" :true-label="0" :false-label="1" slot="reference">
-            开启
-          </el-checkbox>
-        </el-popover>
-        <el-table v-if="form.isContinueReward === 0" :data="form.pointConfigContinueRList">
-          <el-table-column label="连续签到天数 / 天" align="center">
-            <template slot-scope="scope">
-              <el-input-number class="input-number" v-model="scope.row.signDay" :min="1" :max="99"
-                :controls="false" @blur="checkSignDay(scope.row.signDay, scope.$index)" />
-            </template>
-          </el-table-column>
-          <el-table-column label="奖励积分 / 积分" align="center">
-            <template slot-scope="scope">
-              <el-input-number class="input-number" v-model="scope.row.rewardPoint" :min="0"
-                :controls="false" />
-            </template>
-          </el-table-column>
-          <el-table-column align="center">
-            <template #header>
-              <el-button type="text" icon="el-icon-plus" @click="handlerPush('签到奖励')"
-                :disabled="continuePush">添加</el-button>
-            </template>
-            <template slot-scope="scope">
-              <el-button type="delete" @click="getDeleteContinue(scope)">
-                删除
-              </el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form-item>
-
-      <el-form-item label="收听播放奖励:">
-        <el-popover placement="top" content="播放一定时间后,可以获得相应奖励" trigger="hover">
-          <el-select v-model="form.notifyRewardType" placeholder="请选择奖励类型" slot="reference"
-            style="width: 150px; margin-bottom: 10px">
-            <el-option v-for="item in rewardOptions" :key="item.value" :value="item.value"
-              :label="item.label" />
-          </el-select>
-        </el-popover>
-        <el-table v-if="form.notifyRewardType" :data="form.pointConfigListenGoodList">
-          <el-table-column label="播放时间 / 小时" align="center">
-            <template slot-scope="scope">
-              <el-input-number class="input-number" v-model="scope.row.listenTime" :max="99" :controls="false"
-                @blur="checkListenTime(scope.row.listenTime, scope.$index)" />
-            </template>
-          </el-table-column>
-          <el-table-column label="奖励积分 / 积分" align="center">
-            <template slot-scope="scope">
-              <el-input-number class="input-number" v-model="scope.row.rewardPoint" :min="0"
-                :controls="false" />
-            </template>
-          </el-table-column>
-          <el-table-column align="center">
-            <template #header>
-              <el-button type="text" icon="el-icon-plus" @click="handlerPush('播放奖励')"
-                :disabled="listenGoodPush">添加</el-button>
-            </template>
-            <template slot-scope="scope">
-              <el-button type="delete" @click="getDeleteListenGood(scope)">
-                删除
-              </el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-form-item>
-      <el-form-item label="手机通知奖励:">
-        <el-input-number v-model="form.notifyRewardPoint" :min="0" :controls="false" />
-        <span class="span">积分</span>
-      </el-form-item>
-      <el-form-item label="签到规则:" prop="signRule">
-        <el-input v-model="form.signRule" type="textarea" :autosize="{minRows: 5, maxRows: 10}"
-          placeholder="请输入签到规则" />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" @click="getSubmit">确定</el-button>
-      </el-form-item>
-    </el-form>
-  </div>
-</template>
-
-<script>
-import { list, submit, removeContinue, removeListenGood } from '@/api/registration/regConfig'
-export default {
-  data() {
-    return {
-      // 遮罩层
-      loading: false,
-      // 表单
-      form: {
-        pointConfigContinueRList: []
-      },
-      // 连续签到奖励 添加按钮禁止
-      continuePush: false,
-      // 收听播放奖励 添加按钮禁止
-      listenGoodPush: false,
-      // 校验
-      rules: {
-        signTitle: [{
-          required: true, message: '请输入签到标题', trigger: 'blur'
-        }],
-        signDay: [{
-          required: true, message: '请输入签到周期', trigger: 'blur'
-        }],
-        baseRewardPoint: [{
-          required: true, message: '请输入基础积分', trigger: 'blur'
-        }],
-        signRule: [{
-          required: true, message: '请输入签到规则', trigger: 'blur'
-        }]
-      },
-      // 奖励类型
-      rewardOptions: [{
-        value: 4,
-        label: '积分'
-      }]
-    }
-  },
-  watch: {
-    'form.pointConfigContinueRList': {
-      handler(val) {
-        // 当连续签到已达基础签到周期上限则禁止添加新数据
-        this.continuePush = val.length < this.form.signDay ? val.findIndex(i => i.signDay === this.form.signDay) !== -1 ? true : false : true
-      },
-      deep: true
-    },
-    'form.pointConfigListenGoodList'(val) {
-      this.listenGoodPush = val.length >= 10 ? true : false
-    }
-  },
-  mounted() {
-    this.getList()
-  },
-  methods: {
-    // 详情
-    getList() {
-      this.loading = true
-      list().then(res => {
-        if (res.code === 0) {
-          this.form = res.data
-          this.loading = false
-        }
-      })
-    },
-
-    // 签到周期改变 连续签到列表重置
-    changeSignDay() {
-      let ids = ''
-      let arr = []
-      this.form.pointConfigContinueRList.map(i => {
-        if (i.id) {
-          arr.push(i.id)
-        }
-      })
-      ids = arr.join(',')
-      if (ids) {
-        removeContinue(ids).then(res => { })
-      }
-      this.form.pointConfigContinueRList = []
-  },
-
-  // 添加
-  handlerPush(key) {
-    if (key === '签到奖励') {
-      this.form.pointConfigContinueRList.push({
-        signDay: undefined,
-        rewardPoint: undefined,
-        status: 1,
-      })
-    } else {
-      this.form.pointConfigListenGoodList.push({
-        listenTime: undefined,
-        rewardPoint: undefined,
-        type: this.form.notifyRewardType
-      })
-    }
-  },
-
-  // 判断连续签到天数是否大于签到周期天数
-  checkSignDay(e, index) {
-    if (e > this.form.signDay) {
-      this.$message.error('连续签到天数不可大于签到周期!')
-      this.form.pointConfigContinueRList[index].signDay = undefined
-    }
-    if (this.form.pointConfigContinueRList.filter(i => i.signDay === e).length === 2) {
-      this.$message.error('此天数已存在!')
-      this.form.pointConfigContinueRList[index].signDay = undefined
-    }
-  },
-
-  // 判断收听播放奖励时是否填写重复的时间
-  checkListenTime(e, index) {
-    if (this.form.pointConfigListenGoodList.filter(i => i.listenTime === e).length === 2) {
-      this.$message.error('此时间已存在!')
-      this.form.pointConfigListenGoodList[index].listenTime = undefined
-    }
-  },
-
-  // 删除连续签到奖励
-  getDeleteContinue(scope) {
-    let title = scope.row.signDay ? scope.row.signDay : '空'
-    this.$confirm(`是否删除 连续签到天数为${title} 的数据?`, '提示', {
-      type: 'warning'
-    }).then(() => {
-      if (scope.row.id) {
-        removeContinue(scope.row.id).then(res => {
-          if (res.code !== 0) {
-            return false
-          }
-        })
-      }
-      this.$message.success('删除成功!')
-      this.form.pointConfigContinueRList.splice(scope.$index, 1)
-    }).catch(() => { })
-  },
-
-  // 删除收听播放奖励
-  getDeleteListenGood(scope) {
-    let title = scope.row.listenTime ? scope.row.listenTime : '空'
-    this.$confirm(`是否删除 播放时间为${title} 的数据?`, '提示', {
-      type: 'warning'
-    }).then(() => {
-      if (scope.row.id) {
-        removeListenGood({
-          id: scope.row.id
-        }).then(res => {
-          if (res.code !== 0) {
-            return false
-          }
-        })
-      }
-      this.$message.success('删除成功!')
-      this.form.pointConfigListenGoodList.splice(scope.$index, 1)
-    }).catch(() => { })
-
-  },
-
-  // 确定
-  getSubmit() {
-    this.$refs.form.validate((valid) => {
-      if (valid) {
-        submit(this.form).then(res => {
-          if (res.code === 0) {
-            this.$message.success('修改成功!')
-            this.getList()
-          }
-        })
-      } else {
-        return false
-      }
-    })
-  }
-}
-}
-</script>
-
-<style lang="scss" scoped>
-.el-form {
-  width: 500px;
-}
-
-.input-number {
-  width: 110px;
-}
-
-.span {
-  margin-left: 10px;
-}
-</style>

+ 1 - 1
src/views/service/code/index.vue

@@ -9,7 +9,7 @@
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" plain icon="el-icon-plus" @click="dialogVisible = true" v-hasPermi="['service:code:add']">新增</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" @click="dialogVisible = true">新增</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->

+ 0 - 6
src/views/service/flowPackage/detail.vue

@@ -10,12 +10,6 @@
       <el-form-item label="流量名称:">
         <el-input v-model="form.name" placeholder="请输入套餐名称" />
       </el-form-item>
-      <el-form-item label="服务类型:">
-        <el-select v-model="form.businessType" placeholder="请选择服务类型">
-          <el-option v-for="item in businessOptions" :key="item.value" :value="item.value"
-            :label="item.label" />
-        </el-select>
-      </el-form-item>
       <el-form-item label="流量套餐:">
         <el-select v-model="form.goodsId" placeholder="请选择流量套餐">
           <el-option v-for="(item, index) in goodsOptions" :key="index" :label="item" :value="index" />

+ 1 - 21
src/views/service/mixin/index.js

@@ -189,27 +189,7 @@ const detailMixin = {
           validator: checkedDiscount,
           trigger: 'blur'
         }]
-      },
-      // 服务类型
-      businessOptions:[{
-        value: 0,
-        label: '签到'
-      }, {
-        value: 1,
-        label: '收听奖励'
-      }, {
-        value: 2,
-        label: '积分抽奖'
-      }, {
-        value: 3,
-        label: '打开手机通知'
-      }, {
-        value: 4,
-        label: '积分兑换'
-      }, {
-        value: 5,
-        label: '服务中心'
-      }]
+      }
     }
   },
   watch: {

+ 0 - 5
src/views/service/musicPackage/detail.vue

@@ -10,11 +10,6 @@
       <el-form-item label="套餐名称:">
         <el-input v-model="form.name" placeholder="请输入套餐名称" />
       </el-form-item>
-      <el-form-item label="服务类型:">
-        <el-select v-model="form.businessType" placeholder="请选择服务类型">
-          <el-option v-for="item in businessOptions" :key="item.value" :value="item.value" :label="item.label" />
-        </el-select>
-      </el-form-item>
       <el-form-item label="资源平台:">
         <el-select v-model="form.platformId" placeholder="请选择资源平台">
           <el-option v-for="item in platformOptions" :key="item.value" :label="item.label"

+ 54 - 0
src/views/watch/list/detail.vue

@@ -0,0 +1,54 @@
+<template>
+  <div class="app-container">
+    <el-form label-width="100px">
+      <el-form-item label="表盘名称:">
+        <el-input placeholder="请输入表盘名称" />
+      </el-form-item>
+      <el-form-item label="表盘类型:">
+        <el-input placeholder="请输入表盘类型" />
+      </el-form-item>
+      <el-form-item label="表盘地址:">
+        <el-row type="flex" justify="space-between">
+          <el-col :span="16">
+            <el-input placeholder="请输入 或 上传表盘图片" />
+          </el-col>
+          <el-col :span="6">
+            <Upload />
+          </el-col>
+        </el-row>
+      </el-form-item>
+      <el-form-item label="表盘图片:">
+        <Upload listType="picture-card" />
+      </el-form-item>
+    </el-form>
+    <div class="form-btn">
+      <el-button @click="cancel">取消</el-button>
+      <el-button type="primary">确定</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import Upload from '@/components/Upload/index'
+export default {
+  components: {
+    Upload
+  },
+  data() {
+    return {
+
+    }
+  },
+  methods: {
+    cancel() {
+      this.$tab.closeOpenPage("/watch/watchList");
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.el-form {
+  width: 500px;
+}
+</style>

+ 63 - 0
src/views/watch/list/index.vue

@@ -0,0 +1,63 @@
+<template>
+  <div class="app-container">
+    <!-- 搜索 -->
+    <el-form inline label-width="100px" size="mini">
+      <el-form-item label="表盘ID:">
+        <el-input placeholder="请输入表盘ID" />
+      </el-form-item>
+      <el-form-item label="表盘名称:">
+        <el-input placeholder="请输入表盘名称" />
+      </el-form-item>
+      <el-form-item label="表盘类型:">
+        <el-select placeholder="请选择表盘类型"></el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button icon="el-icon-search" type="primary">搜索</el-button>
+        <el-button icon="el-icon-refresh">重置</el-button>
+        <el-button icon="el-icon-plus" type="primary" plain @click="getCreate">新增</el-button>
+      </el-form-item>
+    </el-form>
+    <!-- 列表 -->
+    <el-table>
+      <el-table-column label="表盘ID" align="center"></el-table-column>
+      <el-table-column label="表盘名称" align="center"></el-table-column>
+      <el-table-column label="表盘图片" align="center">
+        <template slot-scope="scope">
+          <el-image :src="scope.row.pic" :preview-src-list="scope.row.pic" />
+        </template>
+      </el-table-column>
+      <el-table-column label="表盘地址" align="center" show-overflow-tooltip>
+        <template>
+          <el-link :underline="false"></el-link>
+        </template>
+      </el-table-column>
+      <el-table-column label="表盘类型" align="center" />
+      <el-table-column label="操作" align="center">
+        <template>
+          <el-button type="text">编辑</el-button>
+          <el-button type="text">取消推荐</el-button>
+          <el-button type="text">设为推荐</el-button>
+          <el-button type="delete">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  methods:{
+    // 新增
+    getCreate(){
+      this.$router.push({
+        path: `/watch/watchList/detail`,
+      })
+    }
+  }
+}
+</script>