<template>
|
|
<view>
|
|
<view class="dynamics" v-html="$utils.stringFormatHtml(item.title)">
|
|
</view>
|
|
|
|
<view class="Artworkimages">
|
|
<view class="wrokimg" @click.stop="previewMedia(media, i)" :key="i" v-for="(media, i) in mediaList">
|
|
<image v-if="media.type === 'image'" :src="media.url" mode="aspectFill"></image>
|
|
<video v-else-if="media.type === 'video'" :src="media.url"
|
|
controls
|
|
:poster="media.poster || ''"
|
|
style="width: 190rpx; height: 190rpx; border-radius: 20rpx;"></video>
|
|
<!-- <view v-if="media.type === 'video'" class="video-overlay">
|
|
<uv-icon name="play-circle-fill" size="60rpx" color="#fff"></uv-icon>
|
|
</view> -->
|
|
</view>
|
|
</view>
|
|
|
|
<addressSpot
|
|
:address="item.address"
|
|
:latitude="item.latitude"
|
|
:longitude="item.longitude"
|
|
/>
|
|
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
props: {
|
|
item: {},
|
|
},
|
|
computed : {
|
|
images(){
|
|
if(!this.item.image){
|
|
return []
|
|
}
|
|
|
|
let arr = this.item.image.split(',')
|
|
|
|
if(this.item.wxImage){
|
|
arr.unshift(this.item.wxImage)
|
|
}
|
|
|
|
return arr
|
|
},
|
|
mediaList(){
|
|
let mediaArray = []
|
|
|
|
// 添加微信二维码图片
|
|
if(this.item.wxImage){
|
|
mediaArray.push({
|
|
url: this.item.wxImage,
|
|
type: 'image'
|
|
})
|
|
}
|
|
|
|
// 从 image 字段解析所有文件(图片和视频)
|
|
if(this.item.image){
|
|
this.item.image.split(',').forEach(url => {
|
|
if(url.trim()){
|
|
// 根据文件扩展名判断类型
|
|
const isVideo = this.isVideoFile(url.trim())
|
|
mediaArray.push({
|
|
url: url.trim(),
|
|
type: isVideo ? 'video' : 'image'
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
return mediaArray
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
|
|
}
|
|
},
|
|
methods: {
|
|
previewMedia(media, index){
|
|
if(media.type === 'image'){
|
|
// 只预览图片
|
|
const imageUrls = this.mediaList.filter(item => item.type === 'image').map(item => item.url)
|
|
const imageIndex = this.mediaList.slice(0, index).filter(item => item.type === 'image').length
|
|
uni.previewImage({
|
|
urls: imageUrls,
|
|
current: imageIndex
|
|
})
|
|
} else if(media.type === 'video'){
|
|
// 视频点击播放(已经有controls属性,无需额外处理)
|
|
console.log('播放视频:', media.url)
|
|
}
|
|
},
|
|
isVideoFile(url) {
|
|
const videoExtensions = ['.mp4', '.avi', '.mov', '.wmv', '.flv', '.webm', '.m4v']
|
|
const lowerUrl = url.toLowerCase()
|
|
return videoExtensions.some(ext => lowerUrl.includes(ext))
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
|
|
.dynamics {
|
|
margin-top: 20rpx;
|
|
font-size: 28rpx;
|
|
letter-spacing: 3rpx;
|
|
}
|
|
|
|
.Artworkimages {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
|
|
.wrokimg {
|
|
margin: 10rpx;
|
|
position: relative;
|
|
|
|
image {
|
|
height: 190rpx;
|
|
width: 190rpx;
|
|
border-radius: 20rpx;
|
|
}
|
|
|
|
video {
|
|
height: 190rpx;
|
|
width: 190rpx;
|
|
border-radius: 20rpx;
|
|
}
|
|
|
|
.video-overlay {
|
|
position: absolute;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
pointer-events: none;
|
|
z-index: 1;
|
|
}
|
|
}
|
|
}
|
|
</style>
|