You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

708 lines
16 KiB

<template>
<view class="content">
<view class="left" v-for="(it,ix) in 2" :key='ix'>
<view class="item" v-show="index % 2 == ix" v-for="(item,index) in list" :key='index'>
<!-- #ifdef MP -->
<!-- 直播内容 -->
<view @click="goto" :data-url="'plugin-private://wx2b03c6e691cd7370/pages/live-player-plugin?room_id='+item.roomId" class="body body_live" v-if="item.listType == 'live' ">
<view class="top">
<image style="width: 100%; height: 100%;" :src="item.coverImg" mode="aspectFill"></image>
<view class="p1">
<view class="title_box" style="padding-left: 0;">
<view class="d-t">
<view class="left">
<text class="heng1"></text>
<text class="heng2"></text>
<text class="heng3"></text>
</view>
</view>
<view class="" style="font-size: 22rpx;">
{{item.status == '0'?'预告':item.status == '1'?'直播中':'已结束'}}
</view>
</view>
<!-- <view class="quan">
<text class="iconfont iconss"></text>
<text>优惠券疯抢中</text>
</view> -->
</view>
</view>
<view class="bot">
<view class="bot-header">
<image :src="item.business.logo" mode="aspectFill"></image>
</view>
<view class="bot-name">{{item.name}}</view>
<view class="bot-goods" v-if="item.goods.length">
<view class="bot-goods__title">{{item.goods[0].name}}</view>
<view class="bot-goods__price">{{item.goods[0].price}}</view>
</view>
</view>
</view>
<!-- #endif -->
<!-- 视频内容 -->
<view class="body body_video" @click="goto" :data-url="'/activity/shortvideo/detail?id='+item.id" v-if="item.listType == 'video'">
<view class="top">
<view class="player-box">
<text class="iconfont icon-bofang"></text>
</view>
<image style="width: 100%; height: 100%;" :src="item.coverimg" mode="aspectFill"></image>
<view class="p1">
<view class="title_box">
<view class="" style="font-size: 26rpx;">
{{ formatSeconds(Number(item.video_duration))||'00:00'}}
</view>
</view>
<view class="info" >
<view class="info-txt">{{item.name}}</view>
</view>
</view>
</view>
<view class="bot">
<view class="bot-hd">
<image :src="item.binfo.logo" mode="aspectFill"></image>
<view class="bot-hd__name">{{item.binfo.name || ''}}</view>
</view>
<view class="bot-bd" @click.stop.prevent="zan(item,index)">
<image class="flame-img" :src="event_rul + '/static/img/static/icon/flame-icon.svg'"></image>
<text class="iconfont" :class="item.iszan == 0 ? 'icon-aixin' : 'icon-aixin_shixin'"></text>
<text class="bot-bd__num">{{item.zan_num >= 10000 ? (item.zan_num / 10000).toFixed(1)+'万': item.zan_num}}</text>
</view>
</view>
</view>
<!-- 笔记内容 -->
<view class="body body_note" @click="goto" :data-url="'/activity/luntan/detail?id='+item.id" v-if="item.listType == 'note'">
<view class="note-item">
<image class="note-item__img" v-if="item.pics||item.coverimg" :src="item.pics||item.coverimg" mode="aspectFill"></image>
<view style="width: 100%; height: 330rpx; line-height: 330rpx; " v-else>
<view style="color: #ccc;">
<text style="font-size: 100rpx; color: #ccc;"
class="iconfont icon-tupianjiazaishibai"></text>
</view>
</view>
<view class="note-item__info">
<view class="note-item__info-title">{{item.title ||item.name|| '无'}}</view>
<view class="note-item__info-bd">
<view class="left" @click.stop="goto" :data-url="'/diary/info/info?id='+item.mid">
<image class="note-item__info-img" :src="item.headimg || item.binfo.logo"></image>
<view class="note-item__info-name">{{item.nickname || item.binfo.name ||''}}</view>
</view>
<view class="right" @click.stop.prevent="zan(item,index)">
<image class="flame-img" :src="event_rul + '/static/img/static/icon/flame-icon.svg'"></image>
<text v-if="!item.iszan" class="iconfont icon-aixin"></text>
<text v-else class="iconfont icon-aixin_shixin"></text>
<text class="note-item__info-num">{{item.zan || item.zan_num || 0}}</text>
</view>
</view>
</view>
</view>
</view>
<!-- 商品内容 -->
<view class="body body_shop" @click="goto" :data-url="'/pages/shop/product?id='+item.proid" v-if="item.listType == 'shop'">
<view class="top">
<image :src="item.pic" mode="aspectFill"></image>
</view>
<view class="shop-info">
<view class="shop-info__hd">
{{item.name ? item.name : ''}}
</view>
<view class="shop-info__bd">
<view class="left" v-show="item.sell_price">
<view class="shop-info__price">
<text class="ico">¥</text>
{{item.sell_price}}
</view>
<view class="shop-info__num">
已售{{ item.sales ? (item.sales >= 10000 ? (item.sales / 10000).toFixed(1) + '万': item.sales) : 0 }}件
</view>
</view>
<view class="iconfont icon-jiahao" @click.stop="buydialogChange" :data-proid="item.proid"></view>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
var app = getApp();
export default {
props: {
list: {},
},
data() {
return {
anShow:false,
event_rul: app.globalData.event_url,
}
},
mounted() {
},
beforeDestroy(){
this.anShow = false;
},
methods: {
formatSeconds(time){
let newTime,hour,minite,seconds;
if(time >= 3600){
hour = parseInt(time/3600) < 10 ? '0' + parseInt(time/3600) : parseInt(time/3600);
minite = parseInt(time%3600/60) < 10 ? '0' + parseInt(time%3600/60):parseInt(time%3600/60);
seconds = time%3600%60 < 10 ? '0' + Math.round(time%3600%60) : Math.round(time%3600%60);
newTime = hour + ':' + minite + ':' + seconds;
}else if(time >= 60 && time < 3600){
minite = parseInt(time/60) < 10 ? '0' + parseInt(time/60) : parseInt(time/60);
seconds = time%60 < 10 ? '0' + Math.round(time%60) : Math.round(time%60);
newTime = minite + ':' + seconds;
}else if(time < 60 ){
seconds = time < 10 ? '0' + Math.round(time) : Math.round(time);
newTime = '00:'+ seconds;
}
return newTime;
},
zan: function (item,index) {
var that = this
if(item.binfo){
app.post('ApiShortvideo/zan',{id:item.id},function(res){
that.$emit('listZanFn',{index:index,show:!item.iszan?1:0,num:item.iszan?--item.zan_num:++item.zan_num})
});
}else{
app.post("ApiLuntan/zan", {id: item.id}, function (res) {
that.$emit('listZanFn',{index:index,show:!item.iszan?1:0,num:item.iszan?--item.zan:++item.zan})
});
}
},
buydialogChange: function(e) {
let proid = e.currentTarget.dataset.proid;
this.$emit("dialogChange",proid);
},
},
}
</script>
<style lang="scss">
.dh_box{
width: 338rpx;
background-color: #fff;
border-radius: 12rpx;
margin-bottom: 24rpx;
&-hd{
background: linear-gradient(90deg, #FF8A44 0%, #FF3B41 100%);
border-radius: 12rpx 12rpx 0rpx 0px;
padding: 18rpx 20rpx 16rpx;
}
&-title{
display: flex;
align-content: center;
justify-content: space-between;
font-size: 28rpx;
font-weight: 500;
color: #FFFFFF;
line-height: 40rpx;
.more {
font-size: 22rpx;
line-height: 32rpx;
padding-right: 30rpx;
position: relative;
&::after {
content: "";
position: absolute;
right: 0;
top: 50%;
width: 12rpx;
height: 12rpx;
border-top: 1rpx solid #FFFFFF;
border-right: 1rpx solid #FFFFFF;
transform: rotate(45deg) translateX(-100%);
}
}
}
&-subtitle {
background: #FFE8E8;
border-radius: 6rpx;
padding: 0 14rpx;
font-size: 20rpx;
font-weight: 500;
color: #F93C41;
line-height: 30rpx;
margin-top: 8rpx;
}
&-bd {
padding: 10rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.goods-img {
width: 216rpx;
height: 224rpx;
border-radius: 10rpx;
}
.goods-title {
font-size: 22rpx;
color: #666666;
line-height: 32rpx;
margin-top: 18rpx;
}
.goods-tips {
display: flex;
align-items: center;
&__icon {
width: 28rpx;
height: 28rpx;
flex-shrink: 0;
margin-right: 10rpx;
}
&__txt {
font-size: 32rpx;
font-weight: 500;
color: #1BB149;
line-height: 44rpx;
}
}
}
.item {
width: 338rpx;
.flame-img {
width: 26rpx;
height: 30rpx;
margin-right: 10rpx;
}
.body {
border-radius: 12rpx;
position: relative;
overflow: hidden;
margin-bottom: 24rpx;
background-color: #ffffff;
}
.body_shop{
.top {
width: 100%;
height: 314rpx;
image {
width: 100%;
height: 100%;
}
}
.shop-info {
padding: 20rpx;
&__hd {
font-size: 26rpx;
font-weight: 500;
color: #333333;
line-height: 36rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
/* autoprefixer: ignore next */
-webkit-box-orient: vertical;
text-align: justify;
white-space: pre-wrap;
word-break: break-all;
}
&__bd{
margin-top: 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
.left{
flex: 1;
overflow: hidden;
display: flex;
align-items: center;
color: #ED5925;
font-size: 36rpx;
line-height: 50rpx;
font-weight: bold;
.ico{
font-size: 22rpx;
color: #ED5925;
line-height: 32rpx;
margin-right: 6rpx;
}
}
}
&__price {
flex-shrink: 0;
}
&__num {
flex: 1;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-left: 14rpx;
font-size: 20rpx;
color: #999999;
line-height: 28rpx;
}
.icon-jiahao {
flex-shrink: 0;
font-size: 44rpx;
color: #068150;
}
}
}
.body_note {
.note-item {
width: 100%;
height: 500rpx;
position: relative;
&__img {
width: 100%;
height: 100%;
}
&__info {
position: absolute;
bottom: 16rpx;
left: 16rpx;
right: 16rpx;
background: #FFF;
border-radius: 12rpx;
padding: 16rpx;
&-title {
margin-top: 8rpx;
font-size: 28rpx;
font-weight: 500;
color: #333333;
line-height: 40rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
/* autoprefixer: ignore next */
-webkit-box-orient: vertical;
text-align: justify;
white-space: pre-wrap;
word-break: break-all;
}
&-bd {
margin-top: 10rpx;
display: flex;
align-content: center;
justify-content: space-between;
color: #666666;
}
.left {
display: flex;
align-items: center;
}
&-img {
display: block;
width: 36rpx;
height: 36rpx;
margin-right: 6rpx;
flex-shrink: 0;
border-radius: 50%;
}
&-name {
flex: 1;
max-width: 140rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-size: 24rpx;
}
.right {
display: flex;
align-items: center;
}
.icon-aixin,.icon-aixin_shixin {
font-size: 28rpx;
}
.icon-aixin_shixin {
color: #EC2828;
}
&-num {
margin-left: 8rpx;
font-size: 22rpx;
line-height: 28rpx;
}
}
}
}
.body_video {
.top {
border-radius: 10rpx;
width: 100%;
height: 376rpx;
position: relative;
.player-box {
position: absolute;
font-size: 100rpx;
left: 50%;
top: 50%;
width: 80rpx;
height: 80rpx;
background: rgba($color: #000000, $alpha: .3);
border-radius: 50%;
transform: translateX(-50%) translateY(-60%);
}
.icon-bofang {
position: absolute;
left: 50%;
top: 50%;
color: #FFF;
transform: translateX(-40%) translateY(-50%);
}
.info {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 172rpx;
background: linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.8600) 100%);
display: flex;
align-items: flex-end;
padding: 12rpx 20rpx;
&-txt {
font-size: 28rpx;
color: #FFFFFF;
line-height: 40rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
/* autoprefixer: ignore next */
-webkit-box-orient: vertical;
text-align: justify;
white-space: pre-wrap;
word-break: break-all;
}
}
}
.bot {
padding: 16rpx;
display: flex;
align-items: center;
justify-content: space-between;
&-hd {
display: flex;
align-items: center;
image {
border-radius: 50%;
width: 58rpx;
height: 58rpx;
margin-right: 6rpx;
flex-shrink: 0;
}
&__name {
font-size: 26rpx;
font-weight: 500;
color: #333333;
line-height: 36rpx;
max-width: 176rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
&-bd {
flex-shrink: 0;
color: #666666;
.icon-aixin,.icon-aixin_shixin {
font-size: 28rpx;
}
.icon-aixin_shixin {
color: #EC2828;
}
&__num {
margin-left: 2rpx;
font-size: 22rpx;
line-height: 28rpx;
}
}
.right {
display: flex;
flex-direction: column;
justify-content: space-between;
padding: 10rpx 0;
margin-left: 20rpx;
.price {
font-weight: bold;
}
}
}
}
.body_live {
.top {
border-radius: 10rpx;
width: 100%;
height: 376rpx;
// background-color: red;
image {
width: 100%;
}
.quan {
position: absolute;
display: flex;
top: 280rpx;
padding: 4rpx 10rpx;
border-radius: 40rpx;
color: #fff;
left: 20rpx;
font-size: 24rpx;
background-color: rgba($color: #000000, $alpha: 0.4);
}
}
.bot {
padding: 32rpx 16rpx 16rpx;
position: relative;
&-header {
width: 58rpx;
height: 58rpx;
border-radius: 50%;
position: absolute;
overflow: hidden;
top: -29rpx;
left: 34rpx;
image {
width: 100%;
height: 100%;
}
}
&-name {
font-size: 26rpx;
font-weight: 500;
color: #333333;
line-height: 36rpx;
}
&-goods {
display: flex;
align-content: center;
font-size: 20rpx;
color: #999999;
line-height: 28rpx;
margin-top: 4rpx;
&__title {
max-width: 264rpx;
}
&__price {
flex-shrink: 0;
}
}
.left {
image {
border-radius: 10rpx;
width: 90rpx;
height: 90rpx;
background-color: pink;
}
}
.right {
display: flex;
flex-direction: column;
justify-content: space-between;
padding: 10rpx 0;
margin-left: 20rpx;
.price {
font-weight: bold;
}
}
}
}
}
.content {
display: flex;
justify-content: space-between;
}
.title_box {
background-color: rgba($color: #000000, $alpha: .3);
padding: 0 10rpx;
border-radius: 4rpx;
display: flex;
color: #fff;
position: absolute;
top: 16rpx;
left: 16rpx;
height: 30rpx;
border-radius: 15rpx;
align-items: center;
.d-t {
width: 30rpx;
height: 30rpx;
border-radius: 50%;
display: flex;
margin-right: 10rpx;
align-items: center;
justify-content: space-around;
background-color: #fee103;
}
.left {
height: 18rpx;
display: flex;
width: 50rpx;
padding: 0 4rpx 2rpx;
align-items: flex-end;
justify-content: space-around;
.heng1,
.heng2,
.heng3 {
display: block;
width: 4rpx;
border-radius: 4rpx;
margin-right: 2rpx;
background-color: #fff;
}
.heng1 {
height: 18rpx;
animation: hengos .8s linear infinite;
}
.heng2 {
height: 10rpx;
animation: hengts .8s linear infinite;
}
.heng3 {
height: 18rpx;
animation: henghs .8s linear .2s infinite;
margin-right: 0;
}
}
}
@keyframes hengos {
0% {height: 18rpx;}
50% {height: 10rpx;}
100% {height: 18rpx;}
}
@keyframes hengts {
0% {height: 10rpx;}
50% {height: 18rpx;}
100% {height: 10rpx;}
}
@keyframes henghs {
0% {height: 18rpx;}
50% {height: 10rpx;}
100% {height: 18rpx;}
}
</style>