| <template> | |
|   <uv-popup  | |
|     ref="videoModal" | |
|     title="视频播放" | |
|     :show-cancel-button="false" | |
|     :show-confirm-button="false" | |
|     :close-on-click-overlay="true" | |
|     :safeAreaInsetBottom="false" | |
|     @close="handleClose" | |
|   > | |
|     <template #default> | |
|       <view class="video-container"> | |
|         <video  | |
|           v-if="currentVideo" | |
|           :src="currentVideo" | |
|           controls | |
|           autoplay | |
|           :show-fullscreen-btn="true" | |
|           :show-play-btn="true" | |
|           :show-center-play-btn="true" | |
|           style="width: 100%; height: 400rpx; border-radius: 8rpx;" | |
|           @error="onVideoError" | |
|           @play="onVideoPlay" | |
|           @pause="onVideoPause" | |
|         ></video> | |
|         <view v-else class="video-loading"> | |
|           <text>视频加载中...</text> | |
|         </view> | |
|       </view> | |
|     </template> | |
|   </uv-popup> | |
| </template> | |
|  | |
| <script> | |
| export default { | |
|   name: 'VideoPopup', | |
|   data() { | |
|     return { | |
|       currentVideo: '' | |
|     } | |
|   }, | |
|   methods: { | |
|     // 打开视频弹窗 | |
|     open(videoUrl) { | |
|       if (videoUrl) { | |
|         this.currentVideo = videoUrl | |
|         this.$refs.videoModal.open() | |
|       } else { | |
|         uni.showToast({ | |
|           title: '视频地址无效', | |
|           icon: 'error' | |
|         }) | |
|       } | |
|     }, | |
|      | |
|     // 关闭视频弹窗 | |
|     close() { | |
|       this.$refs.videoModal.close() | |
|       this.currentVideo = '' | |
|     }, | |
|      | |
|     // 处理弹窗关闭事件 | |
|     handleClose() { | |
|       this.currentVideo = '' | |
|       this.$emit('close') | |
|     }, | |
|      | |
|     // 视频错误处理 | |
|     onVideoError(e) { | |
|       console.error('视频播放错误:', e) | |
|       uni.showToast({ | |
|         title: '视频播放失败', | |
|         icon: 'error' | |
|       }) | |
|       this.close() | |
|       this.$emit('error', e) | |
|     }, | |
|      | |
|     // 视频开始播放 | |
|     onVideoPlay() { | |
|       console.log('视频开始播放') | |
|       this.$emit('play') | |
|     }, | |
|      | |
|     // 视频暂停 | |
|     onVideoPause() { | |
|       console.log('视频暂停播放') | |
|       this.$emit('pause') | |
|     } | |
|   } | |
| } | |
| </script> | |
|  | |
| <style scoped lang="scss"> | |
| .video-container { | |
|   position: relative; | |
|   width: 90vw; | |
|    | |
|   .video-loading { | |
|     display: flex; | |
|     align-items: center; | |
|     justify-content: center; | |
|     height: 400rpx; | |
|     background: #f5f5f5; | |
|     border-radius: 8rpx; | |
|      | |
|     text { | |
|       font-size: 28rpx; | |
|       color: #999; | |
|     } | |
|   } | |
| } | |
| </style> |