upload_video.vue
1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<template>
<div class="upload-video-container">
<van-button icon="plus" type="primary" @click="showUploadPopup = true">上传视频</van-button>
<div class="video-list">
<div v-for="video in videos" :key="video.id" class="video-preview">
<VideoPlayer :video-url="video.url" :autoplay="false" />
<div class="video-info">
<span class="video-name">{{ video.name }}</span>
<van-button icon="delete" type="danger" size="small" class="delete-btn" @click="deleteVideo(video.id)">删除</van-button>
</div>
</div>
</div>
<UploadVideoPopup
v-model="showUploadPopup"
@submit="onVideoUploaded"
@cancel="showUploadPopup = false"
/>
</div>
</template>
<script setup>
import { ref } from 'vue';
import VideoPlayer from '@/components/ui/VideoPlayer.vue';
import UploadVideoPopup from '@/components/ui/UploadVideoPopup.vue';
const showUploadPopup = ref(false);
const videos = ref([]);
const onVideoUploaded = (videoInfo) => {
videos.value.push(videoInfo);
};
const deleteVideo = (id) => {
const index = videos.value.findIndex(video => video.id === id);
if (index !== -1) {
const newVideos = [...videos.value];
newVideos.splice(index, 1);
videos.value = newVideos;
}
};
</script>
<style scoped>
.upload-video-container {
padding: 16px;
}
.video-list {
margin-top: 16px;
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 16px;
}
.video-preview {
position: relative;
width: 100%;
}
.delete-btn {
position: absolute;
top: 8px;
right: 8px;
z-index: 1;
}
</style>