index.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <template>
  2. <div class="app-container">
  3. <!-- 搜索 -->
  4. <el-form inline size="mini">
  5. <el-form-item label="电台名称:">
  6. <el-input v-model="form.name" placeholder="请输入电台名称" clearable />
  7. </el-form-item>
  8. <el-form-item label="资源平台:">
  9. <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
  10. <el-option v-for="item in platformOptions" :key="item.value" :value="item.value" :label="item.label" />
  11. </el-select>
  12. </el-form-item>
  13. <el-form-item label="城市筛选:">
  14. <el-cascader v-model="form.list" :options="mapOptions" placeholder="请选择省市区" clearable
  15. :props="{ value: 'id', label: 'name', children: 'childList', checkStrictly: true }" />
  16. </el-form-item>
  17. <el-form-item label="地域分类:">
  18. <el-select v-model="form.addressClassifyId" placeholder="请选择地域分类" clearable>
  19. <el-option v-for="item in addressOptions" :key="item.value" :value="item.value" :label="item.label" />
  20. </el-select>
  21. </el-form-item>
  22. <el-form-item label="广播分类:">
  23. <el-select v-model="form.contentClassifyId" placeholder="请选择广播分类" clearable>
  24. <el-option v-for="item in contentOptions" :key="item.value" :value="item.value" :label="item.label" />
  25. </el-select>
  26. </el-form-item>
  27. <el-form-item label="当前状态:">
  28. <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
  29. <el-option v-for="item in onOrOffOptions" :key="item.value" :value="item.value" :label="item.label" />
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item>
  33. <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
  34. <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
  35. <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()"
  36. v-hasPermi="['music:radio:add']">新增</el-button>
  37. <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 1)"
  38. v-hasPermi="['music:radio:up']">批量上架</el-button>
  39. <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 2)"
  40. v-hasPermi="['music:radio:down']">批量下架</el-button>
  41. </el-form-item>
  42. </el-form>
  43. <!-- 列表 -->
  44. <el-table :data="tableData" v-loading="loading" @selection-change="handleSelect">
  45. <el-table-column type="selection" align="center" />
  46. <el-table-column label="ID" prop="id" align="center" show-overflow-tooltip />
  47. <el-table-column label="电台名称" prop="name" align="center" show-overflow-tooltip />
  48. <el-table-column label="电台封面" align="center" width="100px">
  49. <template slot-scope="scope">
  50. <el-image v-if="scope.row.thumb" :src="scope.row.thumb" />
  51. </template>
  52. </el-table-column>
  53. <el-table-column label="地区" align="center" :formatter="areaFormatter" />
  54. <el-table-column label="地域分类" prop="addressClassifyId" align="center" :formatter="addressFormatter" />
  55. <el-table-column label="广播分类" prop="contentClassifyName" align="center" :formatter="contentFormatter" />
  56. <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
  57. <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
  58. <el-table-column label="操作" align="center">
  59. <template slot-scope="scope">
  60. <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
  61. <span v-if="scope.row.status === 2">
  62. <el-button type="text" @click="getDetail(scope.row.id)" v-hasPermi="['music:radio:edit']"
  63. style="margin-left: 10px">编辑</el-button>
  64. <el-button type="text" @click="getChange(scope.row, 1)" v-hasPermi="['music:radio:up']">上架</el-button>
  65. <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['music:radio:delete']">删除</el-button>
  66. </span>
  67. <el-button v-else type="text" @click="getChange(scope.row, 2)" v-hasPermi="['music:radio:down']">下架</el-button>
  68. <Audio :src="scope.row.fullUrl" style="margin-left: 10px" />
  69. </template>
  70. </el-table-column>
  71. </el-table>
  72. <pagination v-show="total > 0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
  73. @pagination="getList" />
  74. </div>
  75. </template>
  76. <script>
  77. import { platformMixin, onOrOffMixin, addressMixin, contentMixin, mapMixin } from '@/mixin/index'
  78. import { list, change, remove } from '@/api/music/radio'
  79. import Audio from '@/components/Audio/index.vue'
  80. export default {
  81. mixins: [platformMixin, onOrOffMixin, addressMixin, contentMixin, mapMixin],
  82. components: {
  83. Audio
  84. },
  85. data() {
  86. return {
  87. // 遮罩层
  88. loading: false,
  89. // 表单
  90. form: {
  91. pageNum: 1,
  92. pageSize: 10
  93. },
  94. // 总数据
  95. total: 0,
  96. // 列表
  97. tableData: [],
  98. // 广播分类
  99. contentOptions: [],
  100. // 地域分类
  101. addressOptions: [],
  102. // 批量上下架
  103. obj: {
  104. id: '',
  105. name: '已选数据'
  106. }
  107. }
  108. },
  109. watch: {
  110. 'form.list'(val) {
  111. this.form.province = val[0]
  112. this.form.city = val[1]
  113. this.form.area = val[2]
  114. }
  115. },
  116. mounted() {
  117. // 获取资源平台
  118. this.getPlatform({
  119. audioType: 2
  120. })
  121. this.getList()
  122. },
  123. methods: {
  124. // 列表
  125. getList() {
  126. this.loading = true
  127. list(this.form).then(res => {
  128. if (res.code === 0) {
  129. this.tableData = res.data.records
  130. this.total = res.data.total
  131. this.loading = false
  132. }
  133. })
  134. },
  135. // 搜索
  136. getSearch() {
  137. this.form.pageNum = 1
  138. this.getList()
  139. },
  140. // 重置
  141. getRefresh() {
  142. this.form = {
  143. pageNum: 1,
  144. pageSize: 10
  145. }
  146. this.getList()
  147. },
  148. // 新增 / 查看 / 编辑
  149. getDetail(id, boolean) {
  150. this.$router.push({
  151. path: `/music/radio/detail`,
  152. query: {
  153. id: id,
  154. disabled: boolean
  155. }
  156. })
  157. },
  158. // 上下架
  159. getChange(row, status) {
  160. let title = status === 1 ? '上架' : '下架'
  161. this.$confirm(`是否${title}${row.name}?`, '提示', {
  162. type: 'warning'
  163. }).then(() => {
  164. change(row.id, status).then(res => {
  165. if (res.code === 0) {
  166. this.$message.success(`${title}成功!`)
  167. this.getList()
  168. }
  169. })
  170. }).catch(() => { })
  171. },
  172. // 删除
  173. getDelete(row) {
  174. this.$confirm(`是否删除${row.name}?`, '提示', {
  175. type: 'warning'
  176. }).then(() => {
  177. remove(row.id).then(res => {
  178. if (res.code === 0) {
  179. this.$message.success('删除成功!')
  180. this.getList()
  181. }
  182. })
  183. }).catch(() => { })
  184. },
  185. // 多选
  186. handleSelect(e) {
  187. this.obj.id = ''
  188. e.map((item, index) => this.obj.id += item.id + ((index + 1) < e.length ? ',' : ''))
  189. },
  190. // 字典翻译
  191. platformFormatter(row) {
  192. return this.selectDictLabel(this.platformOptions, row.platformId)
  193. },
  194. statusFormatter(row) {
  195. return this.selectDictLabel(this.onOrOffOptions, row.status)
  196. },
  197. addressFormatter(row) {
  198. return this.selectDictLabel(this.addressOptions, row.addressClassifyId)
  199. },
  200. contentFormatter(row) {
  201. return this.selectDictLabel(this.contentOptions, row.contentClassifyId)
  202. }
  203. },
  204. }
  205. </script>