|
|
@ -20,15 +20,108 @@ |
|
|
<view style="display: flex; width: 100%; height: 200rpx; border-radius: 8rpx; overflow: hidden; background-color: #f5f5f5;"> |
|
|
<view style="display: flex; width: 100%; height: 200rpx; border-radius: 8rpx; overflow: hidden; background-color: #f5f5f5;"> |
|
|
<!-- 左侧图片区域 40%宽度(2/5),高度固定 --> |
|
|
<!-- 左侧图片区域 40%宽度(2/5),高度固定 --> |
|
|
<view style="width: 40%; position: relative; height: 200rpx;"> |
|
|
<view style="width: 40%; position: relative; height: 200rpx;"> |
|
|
<!-- 第一张图片 --> |
|
|
<!-- 第一张媒体(支持图片和视频) --> |
|
|
<view wx:if="{{item.Product && item.Product.imageUrls && item.Product.imageUrls.length > 0}}" style="width: 100%; height: 100%;"> |
|
|
<view wx:if="{{item.Product && item.Product.mediaItems && item.Product.mediaItems.length > 0}}" style="width: 100%; height: 100%;"> |
|
|
<image src="{{item.Product.imageUrls[0]}}" mode="aspectFill" style="width: 100%; height: 100%;" bindtap="previewImage" data-urls="{{item.Product.imageUrls}}" data-index="0"></image> |
|
|
<!-- 视频处理:根据类型字段判断 --> |
|
|
|
|
|
<video |
|
|
|
|
|
wx:if="{{item.Product.mediaItems[0].type === 'video'}}" |
|
|
|
|
|
src="{{item.Product.mediaItems[0].url}}" |
|
|
|
|
|
class="slider-media" |
|
|
|
|
|
mode="aspectFill" |
|
|
|
|
|
show-center-play-btn="{{true}}" |
|
|
|
|
|
show-play-btn="{{false}}" |
|
|
|
|
|
controls="{{true}}" |
|
|
|
|
|
autoplay="{{true}}" |
|
|
|
|
|
loop="{{true}}" |
|
|
|
|
|
muted="{{true}}" |
|
|
|
|
|
initial-time="0" |
|
|
|
|
|
show-mute-btn="{{true}}" |
|
|
|
|
|
enable-progress-gesture="{{true}}" |
|
|
|
|
|
enable-play-gesture="{{true}}" |
|
|
|
|
|
object-fit="fill" > |
|
|
|
|
|
</video> |
|
|
|
|
|
<!-- 图片处理 --> |
|
|
|
|
|
<image |
|
|
|
|
|
wx:else |
|
|
|
|
|
src="{{item.Product.mediaItems[0].url || '/images/default-avatar.png'}}" |
|
|
|
|
|
mode="aspectFill" |
|
|
|
|
|
style="width: 100%; height: 100%;" |
|
|
|
|
|
bindtap="previewImage" |
|
|
|
|
|
data-urls="{{item.Product.mediaUrls}}" |
|
|
|
|
|
data-index="0" |
|
|
|
|
|
lazy-load="true" |
|
|
|
|
|
bindload="onImageLoad" |
|
|
|
|
|
data-index="0"> |
|
|
|
|
|
</image> |
|
|
|
|
|
</view> |
|
|
|
|
|
<!-- 兼容旧的imageUrls格式 --> |
|
|
|
|
|
<view wx:elif="{{item.Product && item.Product.imageUrls && item.Product.imageUrls.length > 0}}" style="width: 100%; height: 100%;"> |
|
|
|
|
|
<image |
|
|
|
|
|
src="{{item.Product.imageUrls[0] || '/images/default-avatar.png'}}" |
|
|
|
|
|
mode="aspectFill" |
|
|
|
|
|
style="width: 100%; height: 100%;" |
|
|
|
|
|
bindtap="previewImage" |
|
|
|
|
|
data-urls="{{item.Product.imageUrls}}" |
|
|
|
|
|
data-index="0" |
|
|
|
|
|
lazy-load="true" |
|
|
|
|
|
bindload="onImageLoad" |
|
|
|
|
|
data-index="0"> |
|
|
|
|
|
</image> |
|
|
</view> |
|
|
</view> |
|
|
<view wx:else style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: #999;"> |
|
|
<view wx:else style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; color: #999;"> |
|
|
<text>暂无图片</text> |
|
|
<text>暂无图片</text> |
|
|
</view> |
|
|
</view> |
|
|
<!-- 剩余图片可滑动区域 --> |
|
|
<!-- 剩余图片/视频可滑动区域 --> |
|
|
<view wx:if="{{item.Product && item.Product.imageUrls && item.Product.imageUrls.length > 0}}" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"> |
|
|
<view wx:if="{{item.Product && item.Product.mediaItems && item.Product.mediaItems.length > 0}}" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"> |
|
|
|
|
|
<swiper |
|
|
|
|
|
class="image-swiper" |
|
|
|
|
|
style="width: 100%; height: 100%;" |
|
|
|
|
|
current="{{item.currentImageIndex || 0}}" |
|
|
|
|
|
bindchange="swiperChange" |
|
|
|
|
|
data-item-id="{{index}}"> |
|
|
|
|
|
<block wx:for="{{item.Product.mediaItems}}" wx:for-item="media" wx:for-index="idx" wx:key="idx"> |
|
|
|
|
|
<swiper-item> |
|
|
|
|
|
<!-- 视频处理:根据类型字段判断 --> |
|
|
|
|
|
<video |
|
|
|
|
|
wx:if="{{media.type === 'video'}}" |
|
|
|
|
|
src="{{media.url}}" |
|
|
|
|
|
class="slider-media" |
|
|
|
|
|
mode="aspectFill" |
|
|
|
|
|
show-center-play-btn="{{true}}" |
|
|
|
|
|
show-play-btn="{{false}}" |
|
|
|
|
|
controls="{{true}}" |
|
|
|
|
|
autoplay="{{true}}" |
|
|
|
|
|
loop="{{true}}" |
|
|
|
|
|
muted="{{true}}" |
|
|
|
|
|
initial-time="0" |
|
|
|
|
|
show-mute-btn="{{true}}" |
|
|
|
|
|
enable-progress-gesture="{{true}}" |
|
|
|
|
|
enable-play-gesture="{{true}}" |
|
|
|
|
|
object-fit="fill" > |
|
|
|
|
|
</video> |
|
|
|
|
|
<!-- 图片处理 --> |
|
|
|
|
|
<image |
|
|
|
|
|
wx:else |
|
|
|
|
|
src="{{media.url || '/images/default-avatar.png'}}" |
|
|
|
|
|
mode="aspectFill" |
|
|
|
|
|
style="width: 100%; height: 100%; display: inline-block; box-sizing: border-box" |
|
|
|
|
|
bindtap="previewImage" |
|
|
|
|
|
data-urls="{{item.Product.mediaUrls}}" |
|
|
|
|
|
data-index="{{idx}}" |
|
|
|
|
|
lazy-load="true" |
|
|
|
|
|
bindload="onImageLoad" |
|
|
|
|
|
data-index="{{idx}}"> |
|
|
|
|
|
</image> |
|
|
|
|
|
</swiper-item> |
|
|
|
|
|
</block> |
|
|
|
|
|
</swiper> |
|
|
|
|
|
<!-- 显示页码指示器 --> |
|
|
|
|
|
<view style="position: absolute; bottom: 10rpx; right: 10rpx; background-color: rgba(0,0,0,0.5); color: white; padding: 5rpx 10rpx; border-radius: 15rpx; font-size: 20rpx;"> |
|
|
|
|
|
{{(item.currentImageIndex || 0) + 1}}/{{item.Product.mediaItems.length}} |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
<!-- 兼容旧的imageUrls格式 --> |
|
|
|
|
|
<view wx:elif="{{item.Product && item.Product.imageUrls && item.Product.imageUrls.length > 0}}" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"> |
|
|
<swiper |
|
|
<swiper |
|
|
class="image-swiper" |
|
|
class="image-swiper" |
|
|
style="width: 100%; height: 100%;" |
|
|
style="width: 100%; height: 100%;" |
|
|
@ -37,7 +130,17 @@ |
|
|
data-item-id="{{index}}"> |
|
|
data-item-id="{{index}}"> |
|
|
<block wx:for="{{item.Product.imageUrls}}" wx:for-item="img" wx:for-index="idx" wx:key="idx"> |
|
|
<block wx:for="{{item.Product.imageUrls}}" wx:for-item="img" wx:for-index="idx" wx:key="idx"> |
|
|
<swiper-item> |
|
|
<swiper-item> |
|
|
<image src="{{img}}" mode="aspectFill" style="width: 268rpx; height: 210rpx; display: inline-block; box-sizing: border-box" bindtap="previewImage" data-urls="{{item.Product.imageUrls}}" data-index="{{idx}}"></image> |
|
|
<image |
|
|
|
|
|
src="{{img || '/images/default-avatar.png'}}" |
|
|
|
|
|
mode="aspectFill" |
|
|
|
|
|
style="width: 268rpx; height: 210rpx; display: inline-block; box-sizing: border-box" |
|
|
|
|
|
bindtap="previewImage" |
|
|
|
|
|
data-urls="{{item.Product.imageUrls}}" |
|
|
|
|
|
data-index="{{idx}}" |
|
|
|
|
|
lazy-load="true" |
|
|
|
|
|
bindload="onImageLoad" |
|
|
|
|
|
data-index="{{idx}}"> |
|
|
|
|
|
</image> |
|
|
</swiper-item> |
|
|
</swiper-item> |
|
|
</block> |
|
|
</block> |
|
|
</swiper> |
|
|
</swiper> |
|
|
|