浏览代码

Merge branch 'test'

DESKTOP-SVI9JE1\muzen 1 年之前
父节点
当前提交
8df80994c3

+ 3 - 4
.eslintrc.js

@@ -18,12 +18,11 @@ module.exports = {
     "vue/max-attributes-per-line": [2, {
       "singleline": 10,
       "multiline": {
-        "max": 1,
-        "allowFirstLine": false
+        "max": 1
       }
     }],
     "vue/singleline-html-element-content-newline": "off",
-    "vue/multiline-html-element-content-newline":"off",
+    "vue/multiline-html-element-content-newline": "off",
     "vue/name-property-casing": ["error", "PascalCase"],
     "vue/no-v-html": "off",
     'accessor-pairs': 2,
@@ -48,7 +47,7 @@ module.exports = {
     'curly': [2, 'multi-line'],
     'dot-location': [2, 'property'],
     'eol-last': 2,
-    'eqeqeq': ["error", "always", {"null": "ignore"}],
+    'eqeqeq': ["error", "always", { "null": "ignore" }],
     'generator-star-spacing': [2, {
       'before': true,
       'after': true

+ 5 - 7
package.json

@@ -37,12 +37,16 @@
   },
   "dependencies": {
     "@riophae/vue-treeselect": "0.4.0",
+    "@vue/cli-plugin-eslint": "^5.0.8",
     "ali-oss": "^6.17.1",
     "axios": "0.24.0",
     "clipboard": "2.0.8",
     "core-js": "3.19.1",
     "echarts": "4.9.0",
     "element-ui": "2.15.6",
+    "eslint": "^7.32.0",
+    "eslint-loader": "^4.0.2",
+    "eslint-plugin-vue": "^9.18.1",
     "file-saver": "2.0.5",
     "fuse.js": "6.4.3",
     "highlight.js": "9.18.5",
@@ -66,15 +70,12 @@
   "devDependencies": {
     "@types/quill": "^2.0.10",
     "@vue/cli-plugin-babel": "4.4.6",
-    "@vue/cli-plugin-eslint": "4.4.6",
     "@vue/cli-service": "4.4.6",
     "babel-eslint": "10.1.0",
     "babel-plugin-dynamic-import-node": "2.3.3",
     "chalk": "4.1.0",
     "compression-webpack-plugin": "5.0.2",
     "connect": "3.6.6",
-    "eslint": "7.15.0",
-    "eslint-plugin-vue": "7.2.0",
     "lint-staged": "10.5.3",
     "runjs": "4.4.2",
     "sass": "1.32.13",
@@ -90,8 +91,5 @@
   "browserslist": [
     "> 1%",
     "last 2 versions"
-  ],
-  "optionalDependencies": {
-    "fsevents": "*"
-  }
+  ]
 }

+ 1 - 0
public/index.html

@@ -5,6 +5,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="renderer" content="webkit">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+    <!-- <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">  --> <!-- http协议升https  -->
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
     <title><%= webpackConfig.name %></title>
     <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->

+ 35 - 0
src/api/content/article.js

@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 列表
+export function list(data) {
+  return request({
+    url: `/admin/concent/share/page`,
+    method: 'post',
+    data
+  })
+}
+
+// 提交
+export function submit(data) {
+  return request({
+    url: `/admin/concent/share/addOrUpdate`,
+    method: 'post',
+    data
+  })
+}
+
+// 详情
+export function detail(id) {
+  return request({
+    url: `/admin/concent/share/queryById/${id}`,
+    method: 'get'
+  })
+}
+
+// 状态
+export function change(id, status){
+  return request({
+    url: `/admin/concent/share/hitOrSold/${id}/${status}`,
+    method: 'get' 
+  })
+}

+ 35 - 0
src/api/device/warning.js

@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 列表
+export function list(data) {
+  return request({
+    url: `/admin/yumxiaowei/waring/page`,
+    method: 'post',
+    data
+  })
+}
+
+// 详情
+export function detail(id) {
+  return request({
+    url: `admin/yumxiaowei/waring/getBullframeById/${id}`,
+    method: 'get'
+  })
+}
+
+// 新增 编辑
+export function submit(data) {
+  return request({
+    url: `/admin/yumxiaowei/waring/saveOrUpdate`,
+    method: 'post',
+    data
+  })
+}
+
+// 更改状态
+export function change(id, status) {
+  return request({
+    url: `/admin/yumxiaowei/waring/hitOrSold/${id}/${status}`,
+    method: 'get'
+  })
+}

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

@@ -0,0 +1,43 @@
+import request from '@/utils/request'
+
+// 列表
+export function list(data) {
+  return request({
+    url: `/admin/podcast/category/page`,
+    method: 'post',
+    data
+  })
+}
+
+// 新增 编辑
+export function submit(data) {
+  return request({
+    url: `/admin/podcast/category/addOrUpdate`,
+    method: 'post',
+    data
+  })
+}
+
+// 详情
+export function detail(id) {
+  return request({
+    url: `/admin/podcast/category/queryById/${id}`,
+    method: 'get'
+  })
+}
+
+// 改变状态
+export function change(id, status) {
+  return request({
+    url: `/admin/podcast/category/hitOrSold/${id}/${status}`,
+    method: 'get'
+  })
+}
+
+// 播客分类下拉列表
+export function options() {
+  return request({
+    url: `/admin/podcast/category/list`,
+    method: 'get'
+  })
+}

src/api/music/classify.js → src/api/music/radioclass.js


+ 4 - 4
src/api/operation/channel.js

@@ -45,7 +45,7 @@ export function create(data) {
 }
 
 // 频道属性
-export function channelTemplate(data){
+export function channelTemplate(data) {
   return request({
     url: `/device/channelTemplate/searchClassify`,
     method: 'post',
@@ -72,11 +72,11 @@ export function edit(data) {
 }
 
 // 频道内容列表
-export function list(query) {
+export function list(data) {
   return request({
     url: `/commonRadio/page`,
-    method: 'get',
-    params: query
+    method: 'post',
+    data
   })
 }
 

+ 3 - 3
src/api/operation/recommend.js

@@ -75,11 +75,11 @@ export function moduleList(id) {
 }
 
 // 音频内容列表
-export function radioList(query) {
+export function radioList(data) {
   return request({
     url: `/commonRadio/page`,
-    method: 'get',
-    params: query
+    method: 'post',
+    data
   })
 }
 

+ 18 - 22
src/mixin/index.js

@@ -4,12 +4,12 @@ import { platform, audioType } from '@/api/music/platform'
 
 import { options } from '@/api/music/radio'
 
-import { channelTemplate } from '@/api/operation/channel'
-
 import { list as categoryList } from '@/api/device/category'
 
 import { list as functionList } from '@/api/device/function'
 
+import { options as blogClass } from '@/api/music/blogclass'
+
 // 设备列表
 const devMixin = {
   data() {
@@ -477,7 +477,7 @@ const addressMixin = {
   }
 }
 
-// 内容分类
+// 广播分类
 const contentMixin = {
   data() {
     return {
@@ -503,28 +503,24 @@ const contentMixin = {
   }
 }
 
-// 分类
-const classifyMixin = {
+// 播客分类
+const blogClassMixin = {
   data() {
     return {
-      classifyOptions: []
+      blogClassOptions: []
     }
   },
-  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
-            })
+  mounted() {
+    blogClass().then(res => {
+      if (res.code === 0) {
+        res.data.map(i => {
+          this.blogClassOptions.push({
+            value: i.id,
+            label: i.name
           })
-        }
-      })
-    }
+        })
+      }
+    })
   }
 }
 
@@ -636,9 +632,9 @@ export {
   albumTypeMixin,
   addressMixin,
   contentMixin,
-  classifyMixin,
   currentMixin,
   coverMixin,
   channelMixin,
-  systemMixin
+  systemMixin,
+  blogClassMixin
 }

+ 18 - 1
src/router/index.js

@@ -183,6 +183,23 @@ export const dynamicRoutes = [{
     }
   }]
 },
+// 文章管理
+{
+  path: '/content',
+  component: Layout,
+  hidden: true,
+  permissions: ['content:articleList:list'],
+  name: 'articleList',
+  children: [{
+    path: 'articleList/detail',
+    component: () => import('@/views/content/article/detail'),
+    name: 'articleDetail',
+    meta: {
+      title: '文章详情',
+      activeMenu: '/content/articleList'
+    }
+  }]
+},
 // 设备管理
 // 设备列表
 {
@@ -243,7 +260,7 @@ export const dynamicRoutes = [{
   children: [{
     path: 'article/detail',
     component: () => import('@/views/device/article/detail'),
-    name: 'articleDetail',
+    name: 'devArticleDetail',
     meta: {
       title: '文章详情',
       activeMenu: '/device/article'

+ 484 - 0
src/views/content/article/detail.vue

@@ -0,0 +1,484 @@
+<template>
+  <div class='app-container'>
+    <el-form :model="form" ref="form" :rules="rules" class="form" label-width="auto" :disabled="disabled">
+      <el-form-item label="文章标题:" prop="title">
+        <el-input v-model="form.title" placeholder="请输入文章标题" />
+      </el-form-item>
+      <el-form-item label="模板类型:" prop="templateType">
+        <el-select v-model="form.templateType" placeholder="请选择模板类型">
+          <el-option v-for="item in typeOptions" :key="item.value" :value="item.value" :label="item.label" />
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="form.templateType !== undefined" label="背景图片:" prop="backgroundImage">
+        <Upload listType="picture-card" :url="form.backgroundImage" @upload="upload($event, 'backgroundImage')"
+          :disabled="disabled" />
+      </el-form-item>
+      <el-form-item v-if="form.templateType == 1" label="音频组件背景:">
+        <Upload listType="picture-card" :url="form.audioBackgroundImage" @upload="upload($event, 'audioBackgroundImage')"
+          :disabled="disabled" />
+      </el-form-item>
+      <el-form-item v-if="form.templateType == 1" label="页面排版:" style="width: 60%">
+        <el-button type="primary" icon="el-icon-plus" size="mini" @click="getAdd">添加</el-button>
+        <el-table :data="form.contentShareLayoutList">
+          <el-table-column label="布局类型" align="center">
+            <template slot-scope="scope">
+              <el-form-item :prop="`contentShareLayoutList.${scope.$index}.layoutType`"
+                :rules="{ required: true, trigger: 'change' }">
+                <el-select v-model="scope.row.layoutType" placeholder="请选择布局类型">
+                  <el-option v-for="item in layoutOptions" :key="item.value" :value="item.value" :label="item.label" />
+                </el-select>
+              </el-form-item>
+            </template>
+          </el-table-column>
+          <el-table-column label="内容" align="center">
+            <template slot-scope="scope">
+              <el-form-item v-if="scope.row.layoutType === 0" :prop="`contentShareLayoutList.${scope.$index}.contentPic`"
+                :rules="{ required: true, trigger: 'change' }">
+                <Upload listType="picture-card" :url="scope.row.contentPic"
+                  @upload="upload($event, `contentPic`, scope.$index)" :disabled="disabled" />
+              </el-form-item>
+              <el-form-item v-else :prop="`contentShareLayoutList.${scope.$index}.contentName`"
+                :rules="{ required: true, trigger: 'change' }">
+                <el-input v-model="scope.row.contentName" placeholder="请选择内容" readonly
+                  @focus="getDialog(scope.row.layoutType, scope.$index)" :title="scope.row.contentName" />
+              </el-form-item>
+            </template>
+          </el-table-column>
+          <el-table-column label="排序" align="center">
+            <template slot-scope="scope">
+              <el-form-item :prop="`contentShareLayoutList.${scope.$index}.sort`"
+                :rules="{ required: true, trigger: 'blur' }">
+                <el-input-number v-model="scope.row.sort" :min="1" step-strictly />
+              </el-form-item>
+            </template>
+          </el-table-column>
+          <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" width="100px" />
+          <el-table-column label="操作" align="center" width="100px">
+            <template slot-scope="scope">
+              <el-button type="delete" @click="getDelete(scope.$index)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-form-item>
+      <el-form-item label="分享标题:" prop="shareTitle">
+        <el-input v-model="form.shareTitle" placeholder="请输入分享标题" />
+      </el-form-item>
+      <el-form-item label="分享描述:" prop="shareDescription">
+        <el-input v-model="form.shareDescription" type="textarea" :rows="5" placeholder="请输入分享描述" />
+      </el-form-item>
+      <el-form-item label="分享图片:" prop="shareIcon">
+        <Upload listType="picture-card" :url="form.shareIcon" @upload="upload($event, 'shareIcon')"
+          :disabled="disabled" />
+      </el-form-item>
+      <el-form-item label="是否开启按钮:">
+        <el-switch v-model="form.isButton" :active-value="1" :inactive-value="0" />
+      </el-form-item>
+      <el-form-item v-if="form.isButton == 1" label="按钮交互:" prop="buttonFixType">
+        <el-select v-model="form.buttonFixType" placeholder="请选择按钮交互">
+          <el-option v-for="item in buttonOptions" :key="item.value" :value="item.value" :label="item.label" />
+        </el-select>
+      </el-form-item>
+      <el-row v-if="form.isButton == 1" style="width: 100%">
+        <el-col :span="8">
+          <el-form-item label="左按钮文案:" prop="leftButtonText">
+            <el-input v-model="form.leftButtonText" placeholder="请输入按钮文案" />
+          </el-form-item>
+          <el-form-item label="左按钮图片:">
+            <Upload listType="picture-card" :url="form.leftButtonImg" @upload="upload($event, 'leftButtonImg')"
+              :disabled="disabled" />
+          </el-form-item>
+          <el-form-item label="跳转方式:" prop="leftButtonForwardType">
+            <el-select v-model="form.leftButtonForwardType" placeholder="请选择跳转方式">
+              <el-option v-for="item in changeOptions" :key="item.value" :value="item.value" :label="item.label" />
+            </el-select>
+          </el-form-item>
+          <el-form-item v-if="form.leftButtonForwardType === 1" label="内容添加:" prop="leftButtonContentName">
+            <el-input v-model="form.leftButtonContentName" readonly placeholder="请选择内容" @focus="getDialog(2, -1)" />
+          </el-form-item>
+          <el-form-item v-if="form.leftButtonForwardType === 0" label="跳转链接:" prop="leftButtonForwardUrl">
+            <el-input v-model="form.leftButtonForwardUrl" placeholder="请输入跳转链接" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="右按钮文案:" prop="rightButtonText">
+            <el-input v-model="form.rightButtonText" placeholder="请输入按钮文案" />
+          </el-form-item>
+          <el-form-item label="右按钮图片:">
+            <Upload listType="picture-card" :url="form.rightButtonImg" @upload="upload($event, 'rightButtonImg')"
+              :disabled="disabled" />
+          </el-form-item>
+          <el-form-item label="跳转方式:" prop="rightButtonForwardType">
+            <el-select v-model="form.rightButtonForwardType" placeholder="请选择跳转方式">
+              <el-option v-for="item in changeOptions" :key="item.value" :value="item.value" :label="item.label" />
+            </el-select>
+          </el-form-item>
+          <el-form-item v-if="form.rightButtonForwardType === 1" label="内容添加:" prop="rightButtonContentName">
+            <el-input v-model="form.rightButtonContentName" readonly placeholder="请选择内容" @focus="getDialog(2, -2)" />
+          </el-form-item>
+          <el-form-item v-if="form.rightButtonForwardType === 0" label="跳转链接:" prop="rightButtonForwardUrl">
+            <el-input v-model="form.rightButtonForwardUrl" placeholder="请输入跳转链接" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <div style="margin-left: 110px;">
+      <el-button @click="close">取消</el-button>
+      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
+    </div>
+
+    <!-- 弹出 -->
+    <el-dialog :visible.sync="dialogVisible" title="选择音频" width="1000px">
+      <el-form inline size="mini">
+        <el-form-item label="音频ID:">
+          <el-input v-model="dialogForm.audioId" placeholder="请输入音频ID" clearable />
+        </el-form-item>
+        <el-form-item label="内容名称:">
+          <el-input v-model="dialogForm.keyword" placeholder="请输入内容名称" clearable />
+        </el-form-item>
+        <el-form-item label="音频类型:">
+          <el-select v-model="dialogForm.audioType" placeholder="请选择音频类型">
+            <el-option v-for="item in audioOptions" :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-form-item>
+        <el-form-item label="付费类型:">
+          <el-select v-model="dialogForm.isFree" placeholder="请选择付费类型" clearable>
+            <el-option v-for="item in freeOptions" :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">
+        <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="singerName" align="center" show-overflow-tooltip />
+        <el-table-column label="专辑名称" prop="songName" align="center" show-overflow-tooltip />
+        <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="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
+        <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>
+      <div slot="footer">
+        <pagination v-show="total > 0" :total="total" :page.sync="dialogForm.pageNum" :limit.sync="dialogForm.pageSize"
+          @pagination="getList" />
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { platformMixin, isFreeMixin, disabledMixin } from '@/mixin/index'
+import { detail, submit } from '@/api/content/article'
+import { list } from '@/api/operation/channel'
+export default {
+  mixins: [platformMixin, isFreeMixin, disabledMixin],
+  data() {
+    return {
+      // 遮罩层
+      loading: false,
+      // 表单
+      form: {
+        id: this.$route.query.id,
+        contentShareLayoutList: []
+      },
+      // 模板类型
+      typeOptions: [{
+        value: 0,
+        label: '图片模板'
+      }, {
+        value: 1,
+        label: '图片音频模板'
+      }],
+      // 布局类型
+      layoutOptions: [{
+        value: 0,
+        label: '图片'
+      }, {
+        value: 1,
+        label: '单音频'
+      }, {
+        value: 2,
+        label: '音频合集'
+      }],
+      // 按钮交互
+      buttonOptions: [{
+        value: 0,
+        label: '底部固定'
+      }, {
+        value: 1,
+        label: '文章固定'
+      }],
+      // 跳转方式
+      changeOptions: [{
+        value: 0,
+        label: 'H5内链'
+      }, {
+        value: 1,
+        label: 'App跳转音频合集'
+      }, {
+        value: 2,
+        label: '分享'
+      }],
+      // 音频类型
+      audioOptions: [],
+      // 弹窗
+      dialogVisible: false,
+      // 弹窗表单
+      dialogForm: {
+        pageNum: 1,
+        pageSize: 10,
+        platformId: null,
+        audioType: null
+      },
+      // 总数据
+      total: 0,
+      // 弹窗列表
+      tableData: [],
+      // 页面排版索引
+      index: -1,
+      // 只读
+      disabled: Boolean(this.$route.query.boolean),
+      // 校验
+      rules: {
+        title: [{
+          required: true, message: '请输入文章标题', trigger: 'blur'
+        }],
+        templateType: [{
+          required: true, message: '请选择模版类型', trigger: 'change'
+        }],
+        backgroundImage: [{
+          required: true, message: '请上传背景图片', trigger: 'change'
+        }],
+        shareTitle: [{
+          required: true, message: '请输入分享标题', trigger: 'blur'
+        }],
+        shareDescription: [{
+          required: true, message: '请输入分享描述', trigger: 'blur'
+        }],
+        shareIcon: [{
+          required: true, message: '请上传分享图片', trigger: 'change'
+        }],
+        buttonFixType: [{
+          required: true, message: '请选择按钮交互', trigger: 'change'
+        }],
+        leftButtonText: [{
+          required: true, message: '请输入按钮文案', trigger: 'blur'
+        }],
+        leftButtonForwardType: [{
+          required: true, message: '请选择跳转方式', trigger: 'change'
+        }],
+        leftButtonContentName: [{
+          required: true, message: '请选择内容', trigger: 'change'
+        }],
+        leftButtonForwardUrl: [{
+          required: true, message: '请输入跳转链接', trigger: 'blur'
+        }],
+        rightButtonText: [{
+          required: true, message: '请输入按钮文案', trigger: 'blur'
+        }],
+        rightButtonForwardType: [{
+          required: true, message: '请选择跳转方式', trigger: 'change'
+        }],
+        rightButtonContentName: [{
+          required: true, message: '请选择内容', trigger: 'change'
+        }],
+        rightButtonForwardUrl: [{
+          required: true, message: '请输入跳转链接', trigger: 'blur'
+        }]
+      }
+    }
+  },
+  watch: {
+    async 'dialogForm.audioType'(val) {
+      if (val) {
+        await this.getPlatform({
+          audioType: val
+        })
+        this.dialogForm.platformId = this.platformOptions[0].value
+        this.getList()
+      }
+    }
+  },
+  mounted() {
+    if (this.form.id) {
+      this.getDetail()
+    }
+  },
+  methods: {
+    // 详情
+    getDetail() {
+      detail(this.form.id).then(res => {
+        if (res.code === 0) {
+          this.form = res.data
+        }
+      })
+    },
+
+    // 添加
+    getAdd() {
+      this.form.contentShareLayoutList.push({
+        layoutType: 0
+      })
+    },
+
+    // 上传图片
+    upload(e, key, index) {
+      if (index !== undefined) {
+        this.form.contentShareLayoutList[index][key] = e.file
+      } else {
+        this.form[key] = e.file
+      }
+    },
+
+    // 弹窗
+    getDialog(e, index) {
+      this.audioOptions = e == 1 ? [{
+        value: 2,
+        label: '广播电台'
+      }, {
+        value: 6,
+        label: '节目'
+      }, {
+        value: 11,
+        label: '歌曲'
+      }] : [{
+        value: 8,
+        label: '播客专辑'
+      }, {
+        value: 10,
+        label: '歌单'
+      }, {
+        value: 15,
+        label: '音乐专辑'
+      }]
+      this.$set(this.dialogForm, 'audioType', this.audioOptions[0].value)
+      this.dialogVisible = true
+      this.index = index
+    },
+
+    // 列表
+    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,
+        audioType: this.audioOptions[0].value,
+        platformId: this.platformOptions[0].value
+      }
+      this.getList()
+    },
+
+    // 选择
+    getChecked(row) {
+      if (this.index >= 0) {
+        let e = this.form.contentShareLayoutList[this.index]
+        this.$set(e, 'contentId', row.audioId)
+        this.$set(e, 'contentName', row.audioName)
+        this.$set(e, 'contentPic', row.audioPic)
+        this.$set(e, 'contentType', row.audioType)
+        this.$set(e, 'platformId', row.platformId)
+        this.$set(e, 'status', row.status)
+      } else {
+        let e = this.index == -1 ? 'leftButton' : 'rightButton'
+        this.$set(this.form, `${e}ContentId`, row.audioId)
+        this.$set(this.form, `${e}ContentName`, row.audioName)
+        this.$set(this.form, `${e}ContentType`, row.audioType)
+        this.$set(this.form, `${e}PlatformId`, row.platformId)
+      }
+      this.$message.success('选择成功!')
+      this.dialogVisible = false
+    },
+
+    // 删除排版
+    getDelete(index) {
+      this.form.contentShareLayoutList.splice(index, 1)
+    },
+
+    // 关闭
+    close() {
+      this.$tab.closeOpenPage('/content/articleList')
+    },
+
+    // 提交
+    getSubmit() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          submit(this.form).then(res => {
+            if (res.code === 0) {
+              this.$message.success('提交成功!')
+              this.close()
+            }
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+    // 字典翻译
+    audioTypeFormatter(row) {
+      return this.selectDictLabel(this.audioOptions, row.audioType)
+    },
+
+    freeFormatter(row) {
+      return this.selectDictLabel(this.freeOptions, row.isFree)
+    },
+
+    platformFormatter(row) {
+      return this.selectDictLabel(this.platformOptions, row.platformId)
+    },
+
+    statusFormatter(row) {
+      return row.layoutType !== 0 ? this.selectDictLabel(this.disabledOptions, row.status) : ''
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.form {
+  .el-form-item {
+    width: 500px;
+  }
+
+  .el-table__row {
+    .el-form-item {
+      width: 100%;
+    }
+  }
+}
+</style>

+ 138 - 0
src/views/content/article/index.vue

@@ -0,0 +1,138 @@
+<template>
+  <div class='app-container'>
+    <!-- 搜索 -->
+    <el-form inline size="mini">
+      <el-form-item label="文章标题:">
+        <el-input v-model="form.title" placeholder="请输入文章标题" clearable />
+      </el-form-item>
+      <el-form-item label="创建时间">
+        <el-date-picker v-model="form.listDate" type="datetimerange" start-placeholder="开始日期" end-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()"
+          v-hasPermi="['content:article:add']">新增</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="文章ID" prop="id" align="center" show-overflow-tooltip />
+      <el-table-column label="文章标题" prop="title" align="center" show-overflow-tooltip />
+      <el-table-column label="分享标题" prop="shareTitle" align="center" show-overflow-tooltip />
+      <el-table-column label="分享图片" align="center" width="100px">
+        <template slot-scope="scope">
+          <el-image :src="scope.row.shareIcon" />
+        </template>
+      </el-table-column>
+      <el-table-column label="浏览数" prop="viewCount" align="center" />
+      <el-table-column label="创建时间" prop="createTime" align="center" show-overflow-tooltip />
+      <el-table-column label="更新时间" prop="updateTime" align="center" show-overflow-tooltip />
+      <el-table-column label="操作" align="center">
+        <template slot-scope="scope">
+          <el-popover trigger="click">
+            <vue-qr :text="getUrl(scope.row)" :ref="`qrcode` + scope.row.id" />
+            <el-button type="text" slot="reference" style="margin-right: 10px;">预览</el-button>
+          </el-popover>
+          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
+          <el-button type="text" @click="getDetail(scope.row.id)" v-hasPermi="['content:article:edit']">编辑</el-button>
+          <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['content:article:delete']">删除</el-button>
+          <el-button type="text" v-clipboard:copy="getUrl(scope.row)" v-clipboard:success="copySuccess">复制</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 VueQr from 'vue-qr'
+import { list, change } from '@/api/content/article'
+export default {
+  components: {
+    VueQr
+  },
+  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: `/content/articleList/detail`,
+        query: {
+          id: id,
+          boolean: boolean
+        }
+      })
+    },
+
+    // 删除
+    getDelete(row) {
+      this.$confirm(`是否删除${row.title}?`, '提示', {
+        type: 'warning'
+      }).then(() => {
+        change(row.id, 2).then(res => {
+          if (res.code === 0) {
+            this.$message.success('删除成功!')
+            this.getList()
+          }
+        })
+      }).catch(() => { })
+    },
+
+    // 复制地址
+    getUrl(e) {
+      return `${e.copyUrl}pages/content/index?articleId=${e.id}`
+    },
+
+    copySuccess() {
+      this.$message.success('复制成功!')
+    }
+  }
+}
+</script>

+ 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" show-overflow-tooltip />
       <el-table-column prop="deviceTypeName" label="设备名称" align="center" show-overflow-tooltip />
-      <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">
@@ -129,7 +129,7 @@ export default {
 
     // 字典翻译
     typeFormatter(row) {
-      return row.listType.map(i => this.selectDictLabel(this.devModeOptions, i)).join(',')
+      return this.selectDictLabel(this.devModeOptions, row.type)
     }
   }
 }

+ 180 - 0
src/views/device/warning/index.vue

@@ -0,0 +1,180 @@
+<template>
+  <div class='app-container'>
+    <!-- 搜索 -->
+    <el-form inline size="mini">
+      <el-form-item label="手机号:">
+        <el-input v-model="form.phone" placeholder="请输入手机号" clearable />
+      </el-form-item>
+      <el-form-item label="邮箱:">
+        <el-input v-model="form.email" placeholder="请输入邮箱" clearable />
+      </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" icon="el-icon-plus" plain @click="getDialog()" v-hasPermi="['device:warning:add']">新增</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="phone" align="center" />
+      <el-table-column label="邮箱" prop="email" align="center" />
+      <el-table-column label="创建时间" prop="createTime" align="center" />
+      <el-table-column label="操作" align="center">
+        <template slot-scope="scope">
+          <el-button type="text" @click="getDialog(scope.row.id)" v-hasPermi="['device:warning:edit']">编辑</el-button>
+          <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['device:warning:delete']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 弹出 -->
+    <el-dialog :visible.sync="dialogVisible" :title="form.id ? '编辑' : '新增'" width="500px" :before-close="getClose">
+      <el-form :model="dialogForm" ref="dialogForm" :rules="rules" label-width="auto">
+        <el-form-item label="联系人:" prop="username">
+          <el-input v-model="dialogForm.username" placeholder="请输入联系人" />
+        </el-form-item>
+        <el-form-item label="手机号:" prop="phone">
+          <el-input v-model="dialogForm.phone" placeholder="请输入手机号" />
+        </el-form-item>
+        <el-form-item label="邮箱:" prop="email">
+          <el-input v-model="dialogForm.email" placeholder="请输入邮箱" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="getClose">取消</el-button>
+        <el-button type="primary" @click="getSubmit">确定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { list, detail, submit, change } from '@/api/device/warning'
+export default {
+  data() {
+    var reg = /1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}/
+    var checkPhone = (rule, value, callback) => {
+      if (value) {
+        if (!reg.test(value)) {
+          callback(new Error('请输入正确的手机号'))
+        } else {
+          callback()
+        }
+      }
+    }
+    return {
+      // 遮罩层
+      loading: false,
+      // 表单
+      form: {
+        pageNum: 1,
+        pageSize: 10
+      },
+      // 列表
+      tableData: [],
+      // 总数据
+      total: 0,
+      // 弹窗
+      dialogVisible: false,
+      // 弹窗表单
+      dialogForm: {},
+      // 校验
+      rules: {
+        username: [{
+          required: true, message: '请输入联系人', trigger: 'blur'
+        }],
+        phone: [{
+          required: true, message: '请输入手机号', trigger: 'blur'
+        }, {
+          validator: checkPhone, trigger: 'blur'
+        }],
+        email: [{
+          required: true, message: '请输入邮箱', trigger: 'blur'
+        }, {
+          type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur'
+        }]
+      }
+    }
+  },
+  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()
+    },
+
+    // 弹窗
+    getDialog(id) {
+      this.dialogVisible = true
+      if (id) {
+        detail(id).then(res => {
+          if (res.code === 0) {
+            this.dialogForm = res.data
+          }
+        })
+      }
+    },
+
+    getClose() {
+      this.dialogForm = {}
+      this.$refs.dialogForm.resetFields()
+      this.dialogVisible = false
+    },
+
+    getSubmit() {
+      this.$refs.dialogForm.validate((valid) => {
+        if (valid) {
+          submit(this.dialogForm).then(res => {
+            if (res.code === 0) {
+              this.$message.success('提交成功!')
+              this.getClose()
+              this.getList()
+            }
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+    // 删除
+    getDelete(row) {
+      this.$confirm(`是否删除${row.username}的信息?`, '提示', {
+        type: 'warning'
+      }).then(() => {
+        change(row.id, 2).then(res => {
+          if (res.code === 0) {
+            this.$message.success('删除成功!')
+            this.getList()
+          }
+        })
+      }).catch(() => { })
+    }
+  }
+}
+</script>

+ 10 - 7
src/views/music/album/index.vue

@@ -123,13 +123,16 @@ export default {
     // 列表
     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
-        }
-      })
+      // 后端延迟
+      setTimeout(() => {
+        list(this.form).then(res => {
+          if (res.code === 0) {
+            this.tableData = res.data.records
+            this.total = res.data.total
+            this.loading = false
+          }
+        })
+      }, 1500);
     },
 
     // 搜索

+ 4 - 7
src/views/music/blog/detail.vue

@@ -12,8 +12,7 @@
       </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-option v-for="item in blogClassOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item label="播客介绍:" prop="description">
@@ -45,7 +44,7 @@
         <el-button @click="getDelete" :disabled="ids.length > 0 ? false : true">解除关联</el-button>
       </el-form-item>
       <el-form-item style="width: 100%">
-        <el-table :data="form.adminPodCastProgramDetailResp" height="497" @selection-change="handleSelect">
+        <el-table :data="form.adminPodCastProgramDetailResp" @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 />
@@ -106,11 +105,11 @@
 </template>
 
 <script>
-import { classifyMixin, platformMixin, payTypeMixin, onOrOffMixin, isFreeMixin } from '@/mixin/index'
+import { blogClassMixin, platformMixin, payTypeMixin, onOrOffMixin, isFreeMixin } from '@/mixin/index'
 import { selectAnchor } from '@/api/music/anchor'
 import { detail, submit, relieve, checkList } from '@/api/music/blog'
 export default {
-  mixins: [classifyMixin, platformMixin, payTypeMixin, onOrOffMixin, isFreeMixin],
+  mixins: [blogClassMixin, platformMixin, payTypeMixin, onOrOffMixin, isFreeMixin],
   data() {
     // 判断原价是否大于折扣价
     var checkPrice = (rule, value, callback) => {
@@ -199,8 +198,6 @@ export default {
     this.getPlatform({
       audioType: 8
     })
-    // 分类
-    this.getClassify(8)
     if (this.$route.query.id) {
       this.form.id = this.$route.query.id
       this.disabled = Boolean(this.$route.query.disabled)

+ 8 - 5
src/views/music/blog/index.vue

@@ -11,6 +11,11 @@
       <el-form-item label="主播名称:">
         <el-input v-model="form.podcasterName" placeholder="请输入主播名称" clearable />
       </el-form-item>
+      <el-form-item label="播客分类:">
+        <el-select v-model="form.categoryId" filterable placeholder="请选择播客分类" clearable>
+          <el-option v-for="item in blogClassOptions" :key="item.value" :value="item.value" :label="item.label" />
+        </el-select>
+      </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" />
@@ -84,9 +89,9 @@
 
 <script>
 import { list, change, remove } from '@/api/music/blog'
-import { payTypeMixin, onOrOffMixin, platformMixin, classifyMixin } from '@/mixin/index'
+import { payTypeMixin, onOrOffMixin, platformMixin, blogClassMixin } from '@/mixin/index'
 export default {
-  mixins: [payTypeMixin, onOrOffMixin, platformMixin, classifyMixin],
+  mixins: [payTypeMixin, onOrOffMixin, platformMixin, blogClassMixin],
   data() {
     return {
       // 遮罩层
@@ -112,8 +117,6 @@ export default {
     this.getPlatform({
       audioType: 8
     })
-    // 获取分类
-    this.getClassify(8)
     this.getList()
   },
   methods: {
@@ -201,7 +204,7 @@ export default {
       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 row.categoryIds.map((item, index) => (this.selectDictLabel(this.blogClassOptions, item)) + (index + 1 < row.categoryIds.length ? ',' : ''))
     }
   }
 }

+ 126 - 0
src/views/music/blogclass/index.vue

@@ -0,0 +1,126 @@
+<template>
+  <div class='app-container'>
+    <el-button type="primary" icon="el-icon-plus" size="mini" @click="getDialog()"
+      v-hasPermi="['music:blogclass:add']">新增</el-button>
+    <!-- 列表 -->
+    <el-table :data="tableData" v-loading="loading">
+      <el-table-column label="序号" type="index" align="center" />
+      <el-table-column label="分类名称" prop="name" align="center" />
+      <el-table-column label="更新时间" align="center">
+        <template slot-scope="scope">
+          {{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center">
+        <template slot-scope="scope">
+          <el-button type="text" @click="getDialog(scope.row.id)" v-hasPermi="['music:blogclass:edit']">编辑</el-button>
+          <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['music:blogclass: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 :visible.sync="dialogVisible" :title="dialogForm.id ? '编辑' : '新增'" width="500px" :before-close="getClose">
+      <el-form label-width="auto" :model="dialogForm" ref="dialogForm">
+        <el-form-item label="分类名称:" prop="name" :rules="[{ required: true, message: '请输入分类名称', trigger: 'blur' }]">
+          <el-input v-model="dialogForm.name" placeholder="请输入分类名称" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="getClose">取消</el-button>
+        <el-button type="primary" @click="getSubmit">确定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { list, detail, submit, change } from '@/api/music/blogclass'
+export default {
+  data() {
+    return {
+      // 遮罩层
+      loading: false,
+      // 表单
+      form: {
+        pageNum: 1,
+        pageSize: 10
+      },
+      // 总数据
+      total: 0,
+      // 列表
+      tableData: [],
+      // 弹窗
+      dialogVisible: false,
+      // 弹窗表单
+      dialogForm: {}
+    }
+  },
+  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
+        }
+      })
+    },
+
+    // 弹窗
+    getDialog(id) {
+      this.dialogVisible = true
+      if (id) {
+        detail(id).then(res => {
+          if (res.code === 0) {
+            this.dialogForm = res.data
+          }
+        })
+      }
+    },
+
+    // 取消
+    getClose() {
+      this.dialogVisible = false
+      this.dialogForm = {}
+    },
+
+    // 确定
+    getSubmit() {
+      this.$refs.dialogForm.validate((valid) => {
+        if (valid) {
+          submit(this.dialogForm).then(res => {
+            if (res.code === 0) {
+              this.$message.success('提交成功!')
+              this.getClose()
+              this.getList()
+            }
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+    // 删除
+    getDelete(row) {
+      this.$confirm(`是否删除${row.name}?`, '提示', {
+        type: 'warning'
+      }).then(() => {
+        change(row.id, 2).then(res => {
+          if (res.code === 0) {
+            this.$message.success('删除成功!')
+            this.getList()
+          }
+        })
+      }).catch(() => { })
+    }
+  }
+}
+</script>

+ 3 - 3
src/views/music/choiceness/detail.vue

@@ -66,8 +66,8 @@
             <el-option v-for="item in addressOptions" :key="item.value" :value="item.value" :label="item.label" />
           </el-select>
         </el-form-item>
-        <el-form-item label="内容分类:">
-          <el-select v-model="dialogForm.contentClassifyId" placeholder="请选择内容分类">
+        <el-form-item label="广播分类:">
+          <el-select v-model="dialogForm.contentClassifyId" placeholder="请选择广播分类">
             <el-option v-for="item in contentOptions" :key="item.value" :value="item.value" :label="item.label" />
           </el-select>
         </el-form-item>
@@ -92,7 +92,7 @@
           </template>
         </el-table-column>
         <el-table-column label="地域分类" key="address" align="center" :formatter="addressFormatter" />
-        <el-table-column label="内容分类" key="content" align="center" :formatter="contentFormatter" />
+        <el-table-column label="广播分类" key="content" align="center" :formatter="contentFormatter" />
         <el-table-column label="当前状态" key="status" align="center" :formatter="statusFormatter" />
         <el-table-column label="操作" key="checked" align="center" v-if="dialogForm.platformId === 4">
           <template slot-scope="scope">

+ 10 - 7
src/views/music/list/index.vue

@@ -123,13 +123,16 @@ export default {
     // 列表
     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
-        }
-      })
+      // 后端延迟
+      setTimeout(() => {
+        list(this.form).then(res => {
+          if (res.code === 0) {
+            this.tableData = res.data.records
+            this.total = res.data.total
+            this.loading = false
+          }
+        })
+      }, 1500);
     },
 
     // 搜索

+ 10 - 7
src/views/music/menu/index.vue

@@ -118,13 +118,16 @@ export default {
     // 列表
     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
-        }
-      })
+      // 后端延迟
+      setTimeout(() => {
+        list(this.form).then(res => {
+          if (res.code === 0) {
+            this.tableData = res.data.records
+            this.total = res.data.total
+            this.loading = false
+          }
+        })
+      }, 1500);
     },
 
     // 搜索

+ 3 - 3
src/views/music/radio/detail.vue

@@ -16,8 +16,8 @@
             :label="item.label" />
         </el-select>
       </el-form-item>
-      <el-form-item label="内容分类:" prop="contentClassifyId">
-        <el-select v-model="form.contentClassifyId" placeholder="请选择内容分类">
+      <el-form-item label="广播分类:" prop="contentClassifyId">
+        <el-select v-model="form.contentClassifyId" placeholder="请选择广播分类">
           <el-option v-for="item in contentOptions" :key="item.value" :value="item.value.toString()"
             :label="item.label" />
         </el-select>
@@ -63,7 +63,7 @@ export default {
           required: true, message: '请选择地域分类', trigger: 'change'
         }],
         contentClassifyId: [{
-          required: true, message: '请选择内容分类', trigger: 'change'
+          required: true, message: '请选择广播分类', trigger: 'change'
         }],
         description: [{
           required: true, message: '请输入电台简介', trigger: 'blur'

+ 4 - 4
src/views/music/radio/index.vue

@@ -15,8 +15,8 @@
           <el-option v-for="item in addressOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
-      <el-form-item label="内容分类:">
-        <el-select v-model="form.contentClassifyId" placeholder="请选择内容分类" clearable>
+      <el-form-item label="广播分类:">
+        <el-select v-model="form.contentClassifyId" placeholder="请选择广播分类" clearable>
           <el-option v-for="item in contentOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
@@ -47,7 +47,7 @@
         </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="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">
@@ -91,7 +91,7 @@ export default {
       total: 0,
       // 列表
       tableData: [],
-      // 内容分类
+      // 广播分类
       contentOptions: [],
       // 地域分类
       addressOptions: [],

+ 4 - 4
src/views/music/classify/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <el-button type="primary" icon="el-icon-plus" size="mini" @click="getDialog('新增')"
-      v-hasPermi="['music:classify:add']">新增</el-button>
+      v-hasPermi="['music:radioclass:add']">新增</el-button>
     <!-- 列表 -->
     <el-table :data="tableData" v-loading="loading">
       <el-table-column type="index" label="序号" align="center" />
@@ -14,8 +14,8 @@
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
           <el-button type="text" @click="getDialog('编辑', scope.row.id)"
-            v-hasPermi="['music:classify:edit']">编辑</el-button>
-          <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['music:classify:delete']">删除</el-button>
+            v-hasPermi="['music:radioclass:edit']">编辑</el-button>
+          <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['music:radioclass:delete']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -37,7 +37,7 @@
 </template>
 
 <script>
-import { list, submit, detail, remove } from '@/api/music/classify'
+import { list, submit, detail, remove } from '@/api/music/radioclass'
 export default {
   data() {
     return {

+ 1 - 1
src/views/ohplay/content/index.vue

@@ -7,7 +7,7 @@
           <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
-      <el-form-item label="内容分类:">
+      <el-form-item label="栏目分类:">
         <el-select v-model="form.type" placeholder="请选择内容分类" clearable>
           <el-option v-for="item in classifyOptions" :key="item.id" :label="item.name" :value='item.id' />
         </el-select>

+ 4 - 1
src/views/operation/agreement/detail.vue

@@ -56,9 +56,12 @@ export default {
       }, {
         value: 7,
         label: '第三方信息共享清单'
-      },{
+      }, {
         value: 8,
         label: '已收集个人信息清单'
+      }, {
+        value: 9,
+        label: '连接设备提示'
       }],
       // 校验
       rules: {

+ 3 - 0
src/views/operation/agreement/index.vue

@@ -67,6 +67,9 @@ export default {
       },{
         value: 8,
         label: '已收集个人信息清单'
+      }, {
+        value: 9,
+        label: '连接设备提示'
       }]
     }
   },

+ 4 - 4
vue.config.js

@@ -7,7 +7,7 @@ function resolve(dir) {
 
 const CompressionPlugin = require('compression-webpack-plugin')
 
-const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
+const name = process.env.VUE_APP_TITLE || 'OhPlay管理系统' // 网页标题
 
 const port = process.env.port || process.env.npm_config_port || 80 // 端口
 
@@ -36,9 +36,9 @@ module.exports = {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
         target: `https://o3tapi.radio1964.com/admin`,
-        // target: `http://192.168.0.217:2678/admin`, // 付新保本地
-        // target: `http://192.168.199.208:2027`, // 陈浩
-        // target: `http://10.0.2.24:2027`,
+        // target: `http://192.168.0.217:2678/admin`, // 付新保
+        // target: `http://192.168.0.174:2027`, // 陈浩
+        // target: `http://10.0.2.9:2027`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''