index.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <template>
  2. <div class="padding-20">
  3. <el-form
  4. ref="form"
  5. :inline="true"
  6. :model="searchForm"
  7. clearable
  8. class="mt-10">
  9. <el-form-item label="名称:">
  10. <el-input v-model="searchForm.video_name" placeholder="请输入视频名称" clearable></el-input>
  11. </el-form-item>
  12. <el-form-item label="状态:">
  13. <el-select
  14. v-model="searchForm.video_status"
  15. filterable
  16. clearable
  17. placeholder="请选择状态">
  18. <el-option
  19. v-for="item in arrHideAndShow"
  20. :key="item.value"
  21. :label="item.name"
  22. :value="item.value">
  23. </el-option>
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="置顶:">
  27. <el-select
  28. v-model="searchForm.lunbo_status"
  29. filterable
  30. clearable
  31. placeholder="请选择是否置顶推荐">
  32. <el-option
  33. v-for="item in arrRecommend"
  34. :key="item.value"
  35. :label="item.name"
  36. :value="item.value">
  37. </el-option>
  38. </el-select>
  39. </el-form-item>
  40. <el-form-item label="创建时间:">
  41. <el-date-picker
  42. :editable="false"
  43. v-model="time"
  44. @change="timearr => {timearr ? (searchForm.start_time = timearr[0] + ' 00:00:00', searchForm.end_time = timearr[1] + ' 23:59:59') : searchForm.start_time = searchForm.end_time = undefined}"
  45. type="daterange"
  46. value-format="yyyy-MM-dd"
  47. start-placeholder="开始时间"
  48. end-placeholder="结束时间"
  49. ></el-date-picker>
  50. </el-form-item>
  51. <el-form-item>
  52. <el-button icon="el-icon-search" type="primary" @click="searchSubmit">查询</el-button>
  53. </el-form-item>
  54. <el-form-item>
  55. <el-button icon="el-icon-plus"
  56. type="primary"
  57. @click="add">新增
  58. </el-button>
  59. </el-form-item>
  60. </el-form>
  61. <el-table
  62. :data="tableData"
  63. stripe
  64. v-loading="tableLoading"
  65. fit
  66. class="marginT-10 order-table"
  67. border
  68. :max-height="vheight">
  69. <el-table-column label="视频名称" prop="video_name" min-width="140" show-overflow-tooltip></el-table-column>
  70. <el-table-column label="视频简介" prop="video_introduce" min-width="140" show-overflow-tooltip></el-table-column>
  71. <el-table-column label="视频预览" prop="video_cover_url" min-width="100">
  72. <template slot-scope="scope">
  73. <el-image
  74. class="el-icon-video-play"
  75. style="display:block;width: 80px; height: 80px;font-size: 0;position: relative;left: 0;top: 0;cursor: pointer;"
  76. :src="scope.row.video_cover_url"
  77. @click.native="showVideoPlayDialog(scope.row)">
  78. </el-image>
  79. </template>
  80. </el-table-column>
  81. <el-table-column label="出镜人员" prop="video_auther" min-width="140" show-overflow-tooltip></el-table-column>
  82. <el-table-column label="显示状态" prop="video_status">
  83. <template slot-scope="scope">{{ scope.row.video_status === 1 ? '显示' : '隐藏' }}</template>
  84. </el-table-column>
  85. <el-table-column label="置顶推荐" prop="lunbo_status">
  86. <template slot-scope="scope">{{ scope.row.lunbo_status === 1 ? '已推荐' : '/' }}</template>
  87. </el-table-column>
  88. <el-table-column label="播放数" prop="video_act_num"></el-table-column>
  89. <el-table-column label="点赞数" prop="video_good_num"></el-table-column>
  90. <el-table-column label="评论数" prop="video_comment_num"></el-table-column>
  91. <el-table-column label="转发数" prop="video_transfer_num"></el-table-column>
  92. <el-table-column label="发布时间" prop="release_at" min-width="160"></el-table-column>
  93. <el-table-column label="创建时间" prop="created_at" min-width="160"></el-table-column>
  94. <el-table-column label="更新时间" prop="updated_at" min-width="160"></el-table-column>
  95. <el-table-column label="操作" min-width="100">
  96. <template slot-scope="scope">
  97. <el-button type="text" @click="edit(scope.row)">操作</el-button>
  98. <el-button type="text" @click="del(scope.row)">删除</el-button>
  99. </template>
  100. </el-table-column>
  101. </el-table>
  102. <el-pagination
  103. class="marginT-20"
  104. @size-change="handleSizeChange"
  105. @current-change="handleCurrentChange"
  106. :hide-on-single-page="true"
  107. :current-page="page"
  108. :page-size="page_size"
  109. :page-sizes="[10, 20, 100, 200, 300, 400]"
  110. background
  111. layout="total, sizes, prev, pager, next, jumper"
  112. :total="totalCount"/>
  113. <detail
  114. v-if="detailsDialog.show"
  115. v-model="detailsDialog.show"
  116. :exData="detailsDialog.exData"
  117. :arrRecommend="arrRecommend"
  118. :arrHideAndShow="arrHideAndShow"
  119. @success="init"></detail>
  120. </div>
  121. </template>
  122. <script>
  123. import page from '@/mixin/page'
  124. import detail from './details'
  125. export default {
  126. mixins: [page],
  127. components: {
  128. detail
  129. },
  130. data() {
  131. return {
  132. detailsDialog: {
  133. show: false,
  134. exData: {}
  135. },
  136. time: [],
  137. searchForm: {},
  138. tableData: [],
  139. tableUrl: '/api/admin/video/list',
  140. arrRecommend: [
  141. {
  142. name: '否',
  143. value: '0'
  144. },
  145. {
  146. name: '是',
  147. value: '1'
  148. }
  149. ],
  150. arrHideAndShow: [
  151. {
  152. name: '隐藏',
  153. value: '0'
  154. },
  155. {
  156. name: '显示',
  157. value: '1'
  158. }
  159. ]
  160. }
  161. },
  162. methods: {
  163. add() {
  164. this.detailsDialog.exData = {}
  165. this.detailsDialog.show = true
  166. },
  167. edit(row) {
  168. this.detailsDialog.exData = row
  169. this.detailsDialog.show = true
  170. },
  171. del(row) {
  172. this.$confirm('确定要删除吗', '确认', {
  173. type: 'warning'
  174. }).then(async () => {
  175. const data = await this.$fetch('/api/admin/video/delete', { id: row.id })
  176. if (data.code === 200) {
  177. this.$message.success('删除成功')
  178. this.init()
  179. }
  180. }).catch(() => {
  181. })
  182. },
  183. showVideoPlayDialog(row) {
  184. const { video_url } = row
  185. if (!video_url) {
  186. this.$message.error('视频不存在')
  187. return
  188. }
  189. this.$store.commit('common/SET_VIDEOPLAYDIALOG', {
  190. src: video_url,
  191. show: true
  192. })
  193. }
  194. },
  195. mounted() {
  196. this.init()
  197. }
  198. }
  199. </script>
  200. <style lang="scss" scoped>
  201. .key-word {
  202. ::v-deep .el-form-item__content {
  203. width: 260px;
  204. }
  205. }
  206. .el-icon-video-play {
  207. &:before {
  208. position: absolute;
  209. left: 50%;
  210. top: 50%;
  211. z-index: 1;
  212. font-size: 30px;
  213. color: #999;
  214. transform: translate(-50%, -50%);
  215. }
  216. }
  217. </style>