index.vue 7.4 KB

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