index.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  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.url"
  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="address" label="操作">
  52. <template #default="scope">
  53. <el-button
  54. size="small"
  55. v-if="scope.row.statusCode !== 'info'"
  56. @click="detail(scope.row)"
  57. >
  58. 查看详情
  59. </el-button>
  60. </template>
  61. </el-table-column>
  62. </el-table>
  63. <br />
  64. <el-pagination
  65. background
  66. layout="prev, pager, next"
  67. @current-change="currentChange"
  68. :current-page="page_data.page"
  69. :page-size="page_data.pageSize"
  70. :total="page_data.total"
  71. />
  72. <el-dialog v-model="dialogVisible" title="选择文件">
  73. <div>文件名称</div>
  74. <br />
  75. <el-input v-model="input" placeholder="请输入文件名称" clearable />
  76. <br />
  77. <br />
  78. <el-upload
  79. v-model:file-list="fileList"
  80. class="upload-demo"
  81. ref="upload_ele"
  82. :on-error="upError"
  83. :limit="1"
  84. :on-exceed="handleExceed"
  85. :headers="{ Authorization }"
  86. :on-progress="upProgress"
  87. :before-upload="upload"
  88. :action="config.base.videoProcessing + '/review/img/upload'"
  89. >
  90. <el-button type="primary" :icon="UploadFilled"> 选择文件 </el-button>
  91. </el-upload>
  92. <template #footer>
  93. <div class="dialog-footer">
  94. <el-button type="primary" @click="submit"> 提交 </el-button>
  95. </div>
  96. </template>
  97. </el-dialog>
  98. </div>
  99. </div>
  100. </template>
  101. <script setup>
  102. import header_local from '../components/header.vue';
  103. import { UploadFilled } from '@element-plus/icons-vue';
  104. import { ElMessage, genFileId } from 'element-plus';
  105. import { storeImg, historyImg } from '@/api/processing';
  106. import { ref } from 'vue';
  107. import config from '../../../config/index';
  108. import { useRouter } from 'vue-router';
  109. const route = useRouter();
  110. const Authorization = localStorage.getItem('token') || '';
  111. const dialogVisible = ref(false);
  112. const upload_ele = ref(null);
  113. const fileList = ref([]);
  114. const input = ref('');
  115. const page_data = ref({
  116. page: 1,
  117. pageSize: 10,
  118. title: '',
  119. total: 0
  120. });
  121. const tableData = ref([]);
  122. getList();
  123. function upProgress(par) {
  124. // 上传进度
  125. console.log(par);
  126. }
  127. function handleExceed(files) {
  128. upload_ele.value.clearFiles();
  129. const file = files[0];
  130. file.uid = genFileId();
  131. upload_ele.value.handleStart(file);
  132. upload_ele.value.submit();
  133. }
  134. function upError() {
  135. ElMessage.error('请稍后重新选择文件!');
  136. }
  137. function upload(file) {
  138. if (/^image\//.test(file.type)) return true;
  139. ElMessage.error('请选择图片文件');
  140. return false;
  141. }
  142. function submit() {
  143. if (!fileList.value[0]) return ElMessage.error('请选择图片文件');
  144. storeImg({
  145. data: {
  146. title: input.value || '',
  147. url: fileList.value[0].response.data.url
  148. }
  149. })
  150. .then(r => {
  151. dialogVisible.value = false;
  152. input.value = '';
  153. getList();
  154. upload_ele.value.clearFiles();
  155. })
  156. .catch(e => {
  157. upload_ele.value.clearFiles();
  158. dialogVisible.value = false;
  159. input.value = '';
  160. });
  161. }
  162. function getList() {
  163. historyImg({
  164. data: page_data.value
  165. }).then(r => {
  166. tableData.value = (r.records || []).map(v => {
  167. return {
  168. ...v,
  169. createTime: v.createTime.replace('T', ' ')
  170. };
  171. });
  172. page_data.value.total = r.total;
  173. });
  174. }
  175. function detail(row) {
  176. sessionStorage.setItem('Processing_detail', JSON.stringify(row));
  177. route.push({
  178. name: 'imageProcessing_detail'
  179. });
  180. }
  181. function currentChange(page) {
  182. page_data.value.page = page;
  183. getList();
  184. }
  185. </script>
  186. <style>
  187. .main {
  188. padding: 1em;
  189. font-size: 14px;
  190. font-family: PingFangSC, PingFang SC;
  191. }
  192. .main .head {
  193. background: #f9fafc;
  194. height: 42px;
  195. line-height: 42px;
  196. padding: 0 22px;
  197. }
  198. </style>