From 98f494cf633e3acf5c20f3e9de0d708f2a6c2045 Mon Sep 17 00:00:00 2001
From: ZhangXianQiang <1135831638@qq.com>
Date: 星期五, 05 七月 2024 09:39:59 +0800
Subject: [PATCH] feat:视频浏览

---
 src/views/folder/index.vue           |   41 +++++++++++++++++++-
 public/test.mp4                      |    0 
 src/views/exam-list/index.vue        |   10 ++++
 src/components/VideoViewer/index.vue |   34 +++++++++++++++-
 4 files changed, 79 insertions(+), 6 deletions(-)

diff --git a/public/test.mp4 b/public/test.mp4
new file mode 100644
index 0000000..d3eebb8
--- /dev/null
+++ b/public/test.mp4
Binary files differ
diff --git a/src/components/VideoViewer/index.vue b/src/components/VideoViewer/index.vue
index 18ed0c6..2e1f2ff 100644
--- a/src/components/VideoViewer/index.vue
+++ b/src/components/VideoViewer/index.vue
@@ -1,25 +1,53 @@
 <template>
   <div class="video-container">
-    <div id="player"></div>
+    <div class="video-content">
+      <video :src="props.videoUrl" class="video-player" controls ref="player"></video>
+    </div>
   </div>
 </template>
 
 <script setup>
-import {ref} from 'vue';
-import Player from 'xgplayer';
+import {ref, onMounted, onBeforeUnmount} from 'vue';
 
 const props = defineProps({
   videoUrl: {
     type: String,
     required: true
+  },
+  poster: {
+    type: String,
+    default: ''
   }
 });
 
 const player = ref(null);
 
 
+onMounted(() => {
+});
+
+onBeforeUnmount(() => {
+  player.value.pause();
+});
+
 </script>
 
 <style lang="scss" scoped>
+.video-container {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background: rgba($color: #000000, $alpha: 0.5);
+  .video-content {
+    width: 70%;
+    height: 800px;
+  }
+}
 
+.video-player {
+  width: 100%;
+  height: 100%;
+}
 </style>
\ No newline at end of file
diff --git a/src/views/exam-list/index.vue b/src/views/exam-list/index.vue
index 1fed416..f83cbaa 100644
--- a/src/views/exam-list/index.vue
+++ b/src/views/exam-list/index.vue
@@ -32,7 +32,11 @@
               </div>
 
               <div class="card-footer flex justify-center mb-7 shrink-0">
-                <el-pagination background layout="prev, pager, next" :total="1000" />
+                <el-pagination background layout="prev, pager, next" :total="dataList.length"
+                :default-page-size="20"
+                :currentPage="currentIndex"
+                :hide-on-single-page="true"
+                @current-change="handleCurrentChange"/>
               </div>
             </div>
           </el-card>
@@ -78,6 +82,10 @@
 
 const handleClick = (tab, event) => {
 };
+
+const handleCurrentChange = (val) => {
+  getData();
+}
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/folder/index.vue b/src/views/folder/index.vue
index 8af363c..1901e4e 100644
--- a/src/views/folder/index.vue
+++ b/src/views/folder/index.vue
@@ -74,8 +74,17 @@
     </div>
 
     <!-- 瑙嗛鏌ョ湅 -->
-    <div class="video-container">
-
+    <div class="video-container" v-show="videoViewer">
+      <VideoViewer :videoUrl="videoUrl"></VideoViewer>
+      <div class="close-btn">
+        <el-button type="danger" size="large" circle @click="closeViewer">
+          <template #icon>
+            <el-icon :size="20">
+              <Close />
+            </el-icon>
+          </template>
+        </el-button>
+      </div>
     </div>
 
   </div>
@@ -90,6 +99,8 @@
 import { getFileList } from '@/api/modules/file.js';
 
 import PDFViewer from '@/components/PDFViewer/index.vue';
+import VideoViewer from '@/components/VideoViewer/index.vue';
+
 import { useUserStore } from '@/store/index.js';
 import useWebScoket from '@/hooks/useWebScoket.js';
 
@@ -117,6 +128,8 @@
     iconPath: '/static/icons/file_type_video.png',
     handle: (item) => {
       console.log(item);
+      videoViewer.value = true;
+      videoUrl.value = [item.contentUrl.url];
       resendMessage();
     }
   },
@@ -140,6 +153,7 @@
 
 const imageList = ref([]);
 const pdfFile = ref('');
+const videoUrl = ref('');
 
 const fileList = ref([]);
 
@@ -241,4 +255,27 @@
     }
   }
 }
+
+.video-container {
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  z-index: 99999;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+
+  .close-btn {
+    position: absolute;
+    top: 60px;
+    right: 100px;
+    z-index: 9999999;
+
+    :deep(.el-button) {
+      width: fit-content;
+      height: fit-content;
+      padding: 10px !important;
+    }
+  }
+}
 </style>
\ No newline at end of file

--
Gitblit v1.8.0