findme-miniprogram-frontend/components/media-preview/media-preview.wxml
2025-12-27 17:16:03 +08:00

192 lines
7.4 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 🎨 媒体预览组件 -->
<view class="media-preview-container" wx:if="{{visible}}" bindtap="onMaskTap">
<!-- 背景遮罩 -->
<view class="preview-mask"></view>
<!-- 预览内容 -->
<view class="preview-content" catchtap="stopPropagation">
<!-- 头部工具栏 -->
<view class="preview-header">
<view class="header-info">
<text class="media-title">{{currentMedia.name || '媒体预览'}}</text>
<text class="media-info" wx:if="{{currentMedia.size}}">
{{formatFileSize(currentMedia.size)}}
</text>
</view>
<view class="header-actions">
<!-- 下载按钮 -->
<view class="action-btn" bindtap="downloadMedia" wx:if="{{currentMedia.url}}">
<text class="action-icon">📥</text>
</view>
<!-- 分享按钮 -->
<view class="action-btn" bindtap="shareMedia" wx:if="{{canShare}}">
<text class="action-icon">📤</text>
</view>
<!-- 关闭按钮 -->
<view class="action-btn close-btn" bindtap="closePreview">
<text class="action-icon">✕</text>
</view>
</view>
</view>
<!-- 媒体内容区域 -->
<view class="media-container">
<!-- 图片预览 -->
<view class="image-preview" wx:if="{{currentMedia.type === 'image'}}">
<swiper class="image-swiper"
current="{{currentIndex}}"
bindchange="onSwiperChange"
indicator-dots="{{mediaList.length > 1}}"
indicator-color="rgba(255, 255, 255, 0.3)"
indicator-active-color="rgba(255, 255, 255, 0.8)">
<swiper-item wx:for="{{mediaList}}" wx:key="index" wx:if="{{item.type === 'image'}}">
<view class="image-item">
<image class="preview-image"
src="{{item.url || item.tempFilePath}}"
mode="aspectFit"
bindload="onImageLoad"
binderror="onImageError"
bindtap="onImageTap"
data-index="{{index}}" />
<!-- 加载状态 -->
<view class="loading-overlay" wx:if="{{item.loading}}">
<view class="loading-spinner"></view>
<text class="loading-text">加载中...</text>
</view>
<!-- 错误状态 -->
<view class="error-overlay" wx:if="{{item.error}}">
<text class="error-icon">❌</text>
<text class="error-text">加载失败</text>
<view class="retry-btn" bindtap="retryLoad" data-index="{{index}}">
<text class="retry-text">重试</text>
</view>
</view>
</view>
</swiper-item>
</swiper>
<!-- 图片计数 -->
<view class="image-counter" wx:if="{{mediaList.length > 1}}">
<text class="counter-text">{{currentIndex + 1}} / {{mediaList.length}}</text>
</view>
</view>
<!-- 视频预览 -->
<view class="video-preview" wx:if="{{currentMedia.type === 'video'}}">
<video class="preview-video"
src="{{currentMedia.url || currentMedia.tempFilePath}}"
poster="{{currentMedia.thumbnailPath}}"
controls="{{true}}"
autoplay="{{false}}"
loop="{{false}}"
muted="{{false}}"
show-center-play-btn="{{true}}"
show-play-btn="{{true}}"
show-fullscreen-btn="{{true}}"
bindplay="onVideoPlay"
bindpause="onVideoPause"
bindended="onVideoEnded"
binderror="onVideoError"
bindtimeupdate="onVideoTimeUpdate">
</video>
<!-- 视频信息 -->
<view class="video-info">
<text class="video-duration">{{formatDuration(currentMedia.duration)}}</text>
<text class="video-size">{{currentMedia.width}}×{{currentMedia.height}}</text>
</view>
</view>
<!-- 文件预览 -->
<view class="file-preview" wx:if="{{currentMedia.type === 'file'}}">
<view class="file-icon-container">
<text class="file-icon">{{getFileIcon(currentMedia.extension)}}</text>
</view>
<view class="file-details">
<text class="file-name">{{currentMedia.name}}</text>
<text class="file-size">{{formatFileSize(currentMedia.size)}}</text>
<text class="file-type">{{currentMedia.extension.toUpperCase()}} 文件</text>
</view>
<view class="file-actions">
<view class="file-action-btn" bindtap="openFile">
<text class="action-text">打开文件</text>
</view>
<view class="file-action-btn" bindtap="saveFile">
<text class="action-text">保存到本地</text>
</view>
</view>
</view>
<!-- 音频预览 -->
<view class="audio-preview" wx:if="{{currentMedia.type === 'audio'}}">
<view class="audio-player">
<view class="audio-cover">
<text class="audio-icon">🎵</text>
</view>
<view class="audio-controls">
<view class="play-btn {{audioPlaying ? 'playing' : ''}}" bindtap="toggleAudioPlay">
<text class="play-icon">{{audioPlaying ? '⏸️' : '▶️'}}</text>
</view>
<view class="audio-progress">
<view class="progress-bar">
<view class="progress-fill" style="width: {{audioProgress}}"></view>
</view>
<view class="time-info">
<text class="current-time">{{formatTime(audioCurrentTime)}}</text>
<text class="total-time">{{formatTime(currentMedia.duration)}}</text>
</view>
</view>
</view>
</view>
<view class="audio-info">
<text class="audio-name">{{currentMedia.name}}</text>
<text class="audio-size">{{formatFileSize(currentMedia.size)}}</text>
</view>
</view>
</view>
<!-- 底部操作栏 -->
<view class="preview-footer" wx:if="{{showFooter}}">
<view class="footer-actions">
<!-- 编辑按钮 -->
<view class="footer-btn" bindtap="editMedia" wx:if="{{canEdit}}">
<text class="footer-icon">✏️</text>
<text class="footer-text">编辑</text>
</view>
<!-- 删除按钮 -->
<view class="footer-btn" bindtap="deleteMedia" wx:if="{{canDelete}}">
<text class="footer-icon">🗑️</text>
<text class="footer-text">删除</text>
</view>
<!-- 收藏按钮 -->
<view class="footer-btn" bindtap="favoriteMedia">
<text class="footer-icon">{{currentMedia.favorited ? '❤️' : '🤍'}}</text>
<text class="footer-text">{{currentMedia.favorited ? '已收藏' : '收藏'}}</text>
</view>
<!-- 更多按钮 -->
<view class="footer-btn" bindtap="showMoreActions">
<text class="footer-icon">⋯</text>
<text class="footer-text">更多</text>
</view>
</view>
</view>
</view>
<!-- 手势操作提示 -->
<view class="gesture-tips" wx:if="{{showGestureTips}}">
<text class="tips-text">双击放大 · 滑动切换 · 点击关闭</text>
</view>
</view>