index.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <template>
  2. <div>
  3. <header_local />
  4. <div class="main">
  5. <el-row class="head">
  6. <el-col :span="12"> 视频审核 </el-col>
  7. <el-col style="text-align: right" :span="12">
  8. <el-input
  9. v-model="page_data.title"
  10. placeholder="请输入文件名"
  11. style="width: 250px; margin-right: 5px"
  12. >
  13. <template #append>
  14. <el-button type="primary" @click="getList"> 检索 </el-button>
  15. </template>
  16. </el-input>
  17. <el-button
  18. type="primary"
  19. :icon="UploadFilled"
  20. @click="dialogVisible = true"
  21. >
  22. 上传审核内容
  23. </el-button>
  24. </el-col>
  25. </el-row>
  26. <el-table :data="tableData">
  27. <el-table-column align="center" type="index" width="50" />
  28. <el-table-column align="center" prop="name" label="封面">
  29. <template #default="scope">
  30. <el-image
  31. style="width: 40px; height: 40px; border-radius: 5px"
  32. :src="scope.row.cover"
  33. fit="cover"
  34. />
  35. </template>
  36. </el-table-column>
  37. <el-table-column align="center" prop="title" label="标题">
  38. </el-table-column>
  39. <el-table-column
  40. align="center"
  41. prop="createTime"
  42. label="上传时间"
  43. ></el-table-column>
  44. <el-table-column align="center" prop="statusCode" label="审核状态">
  45. <template #default="scope">
  46. <el-tag :type="scope.row.statusCode">{{
  47. scope.row.statusDesc
  48. }}</el-tag>
  49. </template>
  50. </el-table-column>
  51. <el-table-column align="center" prop="statusCode" label="审核结果">
  52. <template #default="scope">
  53. {{ scope.row.reviewResult ? scope.row.reviewResult.labelDesc : '-' }}
  54. </template>
  55. </el-table-column>
  56. <el-table-column align="center" prop="address" label="操作">
  57. <template #default="scope">
  58. <el-button
  59. size="small"
  60. v-if="scope.row.statusCode == 'success'"
  61. @click="detail(scope.row)"
  62. >
  63. 查看详情
  64. </el-button>
  65. <el-popconfirm
  66. title="确定要删除该文件吗?"
  67. @confirm="deleteRow(scope.row)"
  68. >
  69. <template #reference>
  70. <el-button size="small" type="danger"> 删除 </el-button>
  71. </template>
  72. </el-popconfirm>
  73. </template>
  74. </el-table-column>
  75. </el-table>
  76. <br />
  77. <el-pagination
  78. background
  79. @current-change="currentChange"
  80. :current-page="page_data.page"
  81. :page-size="page_data.pageSize"
  82. layout="prev, pager, next"
  83. :total="page_data.total"
  84. />
  85. <el-dialog v-model="dialogVisible" title="选择文件">
  86. <div>文件名称</div>
  87. <br />
  88. <el-input v-model="input" placeholder="请输入文件名称" clearable />
  89. <br />
  90. <br />
  91. <el-upload
  92. v-model:file-list="fileList"
  93. class="upload-demo"
  94. ref="upload_ele"
  95. :on-error="upError"
  96. :limit="1"
  97. :on-exceed="handleExceed"
  98. :headers="{ Authorization }"
  99. :on-progress="upProgress"
  100. :before-upload="upload"
  101. :action="config.base.videoProcessing + '/review/img/upload'"
  102. >
  103. <el-button type="primary" :icon="UploadFilled"> 选择文件 </el-button>
  104. </el-upload>
  105. <template #footer>
  106. <div class="dialog-footer">
  107. <el-button type="primary" @click="submit"> 提交 </el-button>
  108. </div>
  109. </template>
  110. </el-dialog>
  111. </div>
  112. </div>
  113. </template>
  114. <script setup>
  115. import header_local from '../components/header.vue';
  116. import { UploadFilled } from '@element-plus/icons-vue';
  117. import { ElMessage, genFileId } from 'element-plus';
  118. import { storeVideo, historyVideo, deleteRowVideo } from '@/api/processing';
  119. import { ref } from 'vue';
  120. import config from '../../../config/index';
  121. import { useRouter } from 'vue-router';
  122. const route = useRouter();
  123. const Authorization = localStorage.getItem('token') || '';
  124. const dialogVisible = ref(false);
  125. const upload_ele = ref(null);
  126. const fileList = ref([]);
  127. const input = ref('');
  128. const page_data = ref({
  129. page: 1,
  130. pageSize: 10,
  131. title: '',
  132. total: 0
  133. });
  134. const tableData = ref([]);
  135. getList();
  136. function upProgress(par) {
  137. // 上传进度
  138. console.log(par);
  139. }
  140. function handleExceed(files) {
  141. upload_ele.value.clearFiles();
  142. const file = files[0];
  143. file.uid = genFileId();
  144. upload_ele.value.handleStart(file);
  145. upload_ele.value.submit();
  146. }
  147. function upError() {
  148. ElMessage.error('请稍后重新选择文件!');
  149. }
  150. function upload(file) {
  151. if (/^video\//.test(file.type)) return true;
  152. ElMessage.error('请选择视频文件');
  153. return false;
  154. }
  155. function submit() {
  156. if (!fileList.value[0]) return ElMessage.error('请选择视频文件');
  157. storeVideo({
  158. data: {
  159. title: input.value || '',
  160. url: fileList.value[0].response.data.url
  161. }
  162. })
  163. .then(r => {
  164. dialogVisible.value = false;
  165. input.value = '';
  166. getList();
  167. })
  168. .catch(e => {
  169. dialogVisible.value = false;
  170. input.value = '';
  171. });
  172. }
  173. function getList() {
  174. historyVideo({
  175. data: page_data.value
  176. }).then(r => {
  177. tableData.value = (r.records || []).map(v => {
  178. return {
  179. ...v,
  180. createTime: v.createTime.replace('T', ' ')
  181. };
  182. });
  183. page_data.value.total = r.total;
  184. });
  185. }
  186. function detail(row) {
  187. sessionStorage.setItem('Processing_detail', JSON.stringify(row));
  188. route.push({
  189. path: '/main_home/videoProcessing_detail',
  190. params: {
  191. item: JSON.stringify(row)
  192. }
  193. });
  194. }
  195. function currentChange(page) {
  196. page_data.value.page = page;
  197. getList();
  198. }
  199. function deleteRow(row) {
  200. deleteRowVideo({ id: row.id }).then(r => {
  201. getList();
  202. ElMessage.success('删除成功');
  203. });
  204. }
  205. </script>
  206. <style>
  207. .main {
  208. padding: 1em;
  209. font-size: 14px;
  210. font-family: PingFangSC, PingFang SC;
  211. }
  212. .main .head {
  213. background: #f9fafc;
  214. height: 42px;
  215. line-height: 42px;
  216. padding: 0 22px;
  217. }
  218. </style>