Files

1332 lines
35 KiB
Vue
Raw Permalink Normal View History

<template>
<view class="group-con" v-if="allData">
<view class="w-full header-gradient relative z-99">
<view class="swiper-box" v-if="allData.groupBuyUserActivityDoneList">
<swiper :indicator-dots="false" autoplay interval="2500" duration="500" vertical="true" circular="true">
<block v-for="(item,index) in allData.groupBuyUserActivityDoneList" :key='index' v-if="item.id>0">
<swiper-item>
<view class='line1'>
<image class="swiper-img" :src="item.groupAvatar" mode=""></image>
<text class="swiper-text">{{item.groupNickname}} 拼团成功</text>
</view>
</swiper-item>
</block>
</swiper>
</view>
<view class="px-24 py-20 p-bottom" @click="toGroupProduct">
<view class="w-full bg--w111-fff rd-24rpx p-20 flex relative">
<easy-loadimage mode="widthFix" :image-src="allData.productDetailResponse.productInfo.image"
width="240rpx" height="240rpx" radius="16rpx"></easy-loadimage>
<view class="flex-1 h-240 pl-20 flex-col justify-between">
<view class="w-full">
<view class="w-full fs-28 lh-40rpx line2">{{allData.productDetailResponse.productInfo.name}}
</view>
<view class="flex fs-20 mt-14">
<view class="tuan-num text--w111-fff flex-center">
{{allData.recordForShare.buyingCountNum}}人团
</view>
<view class="complete font-red flex-center">已拼{{allData.recordForShare.latestBuyCount}}
</view>
</view>
</view>
<view class="w-full flex-between-center">
<view>
<view class="flex items-baseline">
<text class="fs-22 lh-30rpx font-red fw-500">拼团价:</text>
<priceStyle :isActivity="true" :price="allData.recordForShare.activePrice"></priceStyle>
</view>
<view class="text-line text--w111-999 fs-22 lh-30rpx mt-12">
¥{{allData.productDetailResponse.productInfo.price}}</view>
</view>
</view>
</view>
<view class="abs-badge">
<image class="w-full h-full" src="../static/images/pinkSucess.png" v-if="pinkBool === 10">
</image>
<image class="w-full h-full" src="../static/images/pinkErr.png" v-else-if="pinkBool === -1">
</image>
</view>
</view>
</view>
</view>
<view class="px-24">
<view class="wrapper">
<view class="tips sucess-tips" v-if="pinkBool === 10">恭喜您拼团成功</view>
<view class="tips font-num-err" v-else-if="pinkBool === -1">还差<span
class="font-num pl-10 pr-10">{{ allData.recordForShare.buyingCountNum-allData.recordForShare.yetBuyingNum }}</span>拼团失败
</view>
<view class="tips" v-else-if="pinkBool === 0">拼团中还差<span
class="font-num font-num-sucess pl-10 pr-10">{{ allData.recordForShare.buyingCountNum-allData.recordForShare.yetBuyingNum }}</span>拼团成功
</view>
<view class="title acea-row row-center-wrapper" v-if="pinkBool === 0">
<view class="name acea-row row-center-wrapper">
剩余
<CountDown :is-day="true" :tip-text="' '" :day-text="' : '" :hour-text="' : '"
:minute-text="' : '" :second-text="' '" :isCol="false" :datatime="dataTimeLimit"
:bgColor="bgColor"></CountDown>结束
</view>
</view>
<view class="list acea-row row-middle result" :class="[ iShidden ? 'on' : '']">
<view class="pictrue" v-if="(fictiStatus===1&&pinkBool!==10)||fictiStatus!==1"
v-for="(item, index) in allData.groupBuyUserList" :key="index">
<view class="image-box" v-if="item.id">
<image class="groupAvater" :src="item.groupAvatar" />
</view>
<image v-else src="../static/images/pinkNo.png" mode=""></image>
<view v-if="item.isLeader" class="group-leader">团长</view>
</view>
<view class="pictrue" v-if="fictiStatus===1&&pinkBool===10"
v-for="(item, index) in allData.groupBuyUserList" :key="index">
<view class="image-box" v-if="item.id">
<image class="groupAvater" :src="item.groupAvatar" />
</view>
<view class="image-box" v-else>
<image src="../static/images/normal.png" mode=""></image>
</view>
<view v-if="item.isLeader" class="group-leader">团长</view>
</view>
</view>
<view v-if=" allData.groupBuyUserList.length > 10" class="lookAll acea-row row-center-wrapper"
@click="lookAll">
{{ iShidden ? '收起' : '查看全部' }}
<span class="iconfont" :class="iShidden ? 'icon-ic_uparrow' : 'icon-ic_downarrow'"></span>
</view>
<view v-if="userBool === 1 && isOk == 0 && pinkBool === 0">
<view class="teamBnt" @click="listenerActionSheet">邀请好友参团</view>
</view>
<view class="teamBnt" v-else-if="userBool === 0 && pinkBool === 0">
<view @click="toAddGroup">我要参团</view>
</view>
<view class="teamBnt" v-if="pinkBool === 10 || pinkBool === -1"
@click="goDetail(allData.recordForShare.productId,allData.recordForShare.groupActivityId)">
{{`${pinkBool === 10?'再次':'重新'}开团`}}
</view>
<view class="lookOrder" v-if="pinkBool === 10" @click="goOrder">
查看订单信息
<span class="iconfont icon-ic_rightarrow"></span>
</view>
</view>
<!-- -->
<view class="play-wrapper">
<view class="w-full flex-center">
<image class="zs" src="../static/images/pinkLeft.png"></image>
<text class="fs-28 fw-500 text--w111-333 lh-44rpx px-6">拼团玩法</text>
<image class="zs" src="../static/images/pinkRight.png"></image>
</view>
<view class="wrapper-main acea-row row-center-wrapper">
<view class="progress-box">
<view class="progress">
<view v-if="!nowShow&&pinkBool != 10" class="inner inner1 bg-red"></view>
<view v-if="nowShow&&pinkBool !== 10" class="inner inner2 bg-red"></view>
<view v-if="pinkBool === 10" class="inner inner3 bg-red"></view>
</view>
<view class="steps acea-row">
<view class="item">
<view class="head bg-red">1</view>
<view class="main">开团/参团享团购价</view>
</view>
<view class="item">
<view class="head bg-red" :class="nowShow&&pinkBool !== 10?'bg-red':''">2</view>
<view class="main">邀请好友参团优惠多</view>
</view>
<view class="item">
<view class="head" :class="pinkBool === 10 ? 'bg-red' : ''">3</view>
<view class="main">人满发货不满退款</view>
</view>
</view>
</view>
</view>
</view>
<view class="mt-40 all-pink">
<view class="w-full flex-center">
<image class="zs" src="../static/images/pinkLeft.png"></image>
<text class="fs-28 fw-500 text--w111-333 lh-44rpx px-6">大家都在拼</text>
<image class="zs" src="../static/images/pinkRight.png"></image>
</view>
<view class="card w-full bg--w111-fff rd-24rpx p-20 flex mt-24" v-for="(item,index) in groupGood"
:key="index" @tap="goDetail(item.productId,item.groupActivityId)">
<view class="relative">
<view v-show="item.quota===0" class="sellOut">已售罄</view>
<easy-loadimage mode="widthFix" :image-src="item.imageUrl" width="240rpx" height="240rpx" radius="16rpx"></easy-loadimage>
</view>
<view class="flex-1 h-240 pl-20 flex-col justify-between">
<view class="w-full">
<view class="w-full fs-28 lh-40rpx line2">{{item.productName}}</view>
<view class="flex fs-20 mt-14">
<view class="tuan-num text--w111-fff flex-center">{{item.buyCount}}人团</view>
<view class="complete font-red flex-center">已拼{{item.latestBuyCount}}</view>
</view>
</view>
<view class="w-full flex-between-center flex-special">
<view>
<view class="flex items-baseline">
<text class="fs-22 lh-30rpx font-red fw-500">拼团价:</text>
<priceStyle :price="item.activePrice"></priceStyle>
</view>
<view class="text-line text--w111-999 fs-22 lh-30rpx mt-12">¥{{item.price}}</view>
</view>
<view class="groupBtn">参与拼团</view>
</view>
</view>
</view>
</view>
</view>
<!-- 分享按钮 -->
<view class="generate-posters" :class="posters ? 'on' : ''">
<view class="generateCon acea-row row-middle">
<!-- #ifdef MP -->
<button class="item" open-type="share" hover-class="none">
<view class="pictrue">
<image src="../static/images/weixin.png"></image>
</view>
<view class="">分享给好友</view>
</button>
<!-- #endif -->
<!-- #ifdef APP-PLUS -->
<view class="item" @click="appShare('WXSceneSession')">
<view class="iconfont icon-icon_WeChat_1"></view>
<view class="">微信好友</view>
</view>
<view class="item" @click="appShare('WXSenceTimeline')">
<view class="iconfont icon-pengyouquan"></view>
<view class="">微信朋友圈</view>
</view>
<!-- #endif -->
<!-- #ifdef H5 || MP -->
<view class="item" @click="getpreviewImage">
<view class="pictrue">
<image src="../static/images/changan.png"></image>
</view>
<view class="">预览发图</view>
</view>
<!-- #endif -->
<!-- #ifdef MP -->
<button class="item" hover-class="none" @click="savePosterPath">
<view class="pictrue">
<image src="../static/images/haibao.png"></image>
</view>
<view class="">保存海报</view>
</button>
<!-- #endif -->
</view>
<view class="generateClose acea-row row-center-wrapper" @click="posterImageClose">取消</view>
</view>
<view class="mask" v-if="canvasStatus"></view>
<!-- 海报展示 -->
<view class='poster-pop' v-if="canvasStatus">
<image :src='imagePath'></image>
</view>
<view class="canvas" v-else>
<canvas style="width:750px;height:1190px;" canvas-id="firstCanvas"></canvas>
<canvas canvas-id="qrcode" :style="{width: `${qrcodeSize}px`, height: `${qrcodeSize}px`}" />
</view>
<!-- 发送给朋友图片 -->
<view class="share-box" v-if="H5ShareBox">
<image :src="urlDomain + 'crmebimage/presets/share-info.png'" @click="H5ShareBox = false"></image>
</view>
</view>
</view>
</template>
<script>
import {
HTTP_H5_URL
} from "@/config/app.js";
// #ifdef MP
import {
base64src
} from '@/utils/base64src.js'
import {
mpQrcode
} from '@/api/api.js';
// #endif
import {
groupBuySkuListApi
} from '@/api/group'
import {
imageBase64
} from "@/api/public";
import uQRCode from '@/js_sdk/Sansnn-uQRCode/uqrcode.js'
import CountDown from '@/components/countDown';
import BaseMoney from '@/components/BaseMoney.vue';
import easyLoadimage from '@/components/base/easy-loadimage.vue';
import priceStyle from '@/components/priceStyle'
import {
groupbuySkuOrderShare,
groupbuySkuOrderReadShare
} from '@/api/activity.js'
import {
toLogin
} from '@/libs/login.js';
import {
tokenIsExistApi
} from "@/api/api.js";
import {
silenceBindingSpread
} from "@/utils";
import {
mapGetters
} from "vuex";
import store from "../../../store";
const app = getApp();
export default {
components: {
CountDown,
BaseMoney,
easyLoadimage,
priceStyle
},
data: function() {
return {
where: {
page: 1,
limit: 5,
showgroup: 1,
},
pinkPriceImg: '../static/images/pinkPrice.png',
pinkbackgd: '../static/images/pinkShare.png',
pinkWhiteBg: '../static/images/whiteBg.png',
qrcodeSize: 600,
canvasStatus: false, //是否显示海报
bgColor: {
'bgColor': 'rgba(233,51,35,0.2)',
'Color': '#E93323',
'width': '36rpx',
'timeTxtwidth': '16rpx',
'isDay': true
},
isOk: 0, //判断拼团是否完成
pinkBool: 0, //判断拼团是否成功
userBool: 1, //判断当前用户是否在团内|0=未在,1=在
pinkT: [], //团长信息
iShidden: false,
userInfo: {},
posters: false,
weixinStatus: false,
H5ShareBox: false, //公众号分享图片
attrValue: '', //已选属性
/* imgHost: HTTP_REQUEST_URL, */
endTime: false,
allData: null,
loadend: false,
loading: false,
loadTitle: '加载更多',
groupGood: [],
imgTop: '',
storeImage: '', //海报产品图
errT: '',
imagePath: '', //海报路径
publicLoginType: app.globalData.publicLoginType, //公众号登录方式(单选),1微信授权2手机号登录
orderNo: '',
nowShow: '',
sd: null,
fictiStatus: 0,
groupLeaderAvatar: '',
urlDomain: this.$Cache.get("imgHost"),
};
},
onShow() {
// #ifdef MP
uni.setNavigationBarColor({
frontColor: '#ffffff',
backgroundColor: '#E93323',
})
// #endif
//绑定分销关系
this.getTokenIsExist();
},
onLoad(options) {
let value;
//小程序扫码进入
if (options.scene) {
value = this.$util.getUrlParams(decodeURIComponent(options.scene));
} else {
value = options
}
value.sd && (this.sd = value.sd)
value.orderNo && this.getData(value.orderNo)
if (value.sd) this.$store.commit('Change_Spread', value.sd);
if (!value.orderNo) {
this.getShareData(value)
}
this.getGroupList();
},
// 滚动监听
onPageScroll(e) {
// 传入scrollTop值并触发所有easy-loadimage组件下的滚动监听事件
uni.$emit('scroll');
},
// #ifdef MP
/**
* 用户点击右上角分享
*/
onShareAppMessage: function() {
let that = this;
return {
title: that.allData.productDetailResponse.productInfo.name || '',
imageUrl: that.allData.productDetailResponse.productInfo.image || '',
path: `/pages/activity/status/index?gt=${that.allData.recordForShare.groupActivityId}&pt=${that.allData.recordForShare.productId}&rd=${that.allData.recordForShare.groupRecordId}&sd=${that.uid}`,
}
},
// #endif
computed: {
dataTimeLimit() {
let date;
if (this.allData) {
date = new Date(this.allData.recordForShare.endTime.replace(/-/g, "/")).getTime() / 1000
}
return date
},
...mapGetters(['isLogin', 'globalData', 'uid']),
},
methods: {
toGroupProduct() {
uni.navigateTo({
url: `/pages/goods/goods_details/index?id=${this.allData.recordForShare.productId}&mt=2&gd=${this.allData.recordForShare.groupActivityId}`
})
},
nowShowChange() {
let arr = this.allData.groupBuyUserList.filter(val => val.id > 0)
this.nowShow = arr.length > 1 ? true : false
},
//校验token是否有效,true为有效false为无效
getTokenIsExist() {
tokenIsExistApi().then((res) => {
silenceBindingSpread(this.isLogin, this.globalData.spread);
}).catch(err => {});
},
//去订单
goOrder() {
uni.navigateTo({
url: '/pages/goods/order_details/index?orderNo=' + this.orderNo
})
},
//to商品详情
goDetail(productId, groupActivityId) {
uni.navigateTo({
url: `/pages/goods/goods_details/index?id=${productId}&mt=2&gd=${groupActivityId}`
})
},
//我要参团
toAddGroup() {
uni.navigateTo({
url: `/pages/goods/goods_details/index?id=${this.allData.recordForShare.productId}&mt=2&gd=${this.allData.recordForShare.groupActivityId}&rd=${this.allData.recordForShare.groupRecordId}&sd=${this.sd}`
})
},
lookAll: function() {
this.iShidden = !this.iShidden;
},
getData(orderNo) {
groupbuySkuOrderShare(orderNo).then(res => {
this.allData = res.data
this.pinkBool = res.data.recordForShare.recordStatus
this.isOk = res.data.recordForShare.recordStatus == 0 ? 0 : 1
this.fictiStatus = res.data.recordForShare.fictiStatus
this.orderNo = res.data.orderNo
this.getShareInfo()
this.nowShowChange()
}).catch(err => {
uni.showToast({
title: err,
icon: 'none'
})
setTimeout(() => {
this.$util.navigateTo('/pages/index/index');
}, 500)
})
},
getShareData(options) {
groupbuySkuOrderReadShare(options.gt, options.pt, options.rd).then(res => {
this.allData = res.data
this.pinkBool = res.data.recordForShare.recordStatus
this.isOk = res.data.recordForShare.recordStatus == 0 ? 0 : 1
this.fictiStatus = res.data.recordForShare.fictiStatus
this.userBool = res.data.recordForShare.canBuyFlag
this.orderNo = res.data.orderNo
this.getShareInfo()
this.nowShowChange()
}).catch(err => {
uni.showToast({
title: err,
icon: 'none'
})
setTimeout(() => {
this.$util.navigateTo('/pages/index/index');
}, 500)
})
},
getShareInfo() {
if (this.isLogin) {
//#ifdef H5
this.make();
this.ShareInfo();
this.getImageBase64(this.allData.productDetailResponse.productInfo.image);
// #endif
};
// #ifdef MP
this.getQrcode();
// #endif
// #ifdef MP
this.imgTop = this.allData.productDetailResponse.productInfo.image
// #endif
// #ifndef H5
this.downloadFilestoreImage();
// #endif
},
/**
* 分享打开
*
*/
listenerActionSheet: function() {
this.goPoster()
this.posters = true;
// #ifdef H5
if (!this.isLogin) {
toLogin();
} else {
if (this.$wechat.isWeixin()) {
this.weixinStatus = true;
}
}
// #endif
},
closePosters: function() {
this.posters = false;
this.currentPage = false;
},
//隐藏海报
posterImageClose: function() {
this.canvasStatus = false
this.posters = false;
},
//替换安全域名
setDomain: function(url) {
url = url ? url.toString() : '';
//本地调试打开,生产请注销
if (url.indexOf("https://") > -1) return url;
else return url.replace('http://', 'https://');
},
// #ifdef APP-PLUS
appShare(scene) {
let that = this;
uni.share({
provider: "weixin",
scene: scene,
type: 0,
href: `${HTTP_H5_URL}/pages/activity/status/index?gt=${this.allData.recordForShare.groupActivityId}&pt=${this.allData.recordForShare.productId}&rd=${this.allData.recordForShare.groupRecordId}&sd=${this.uid}`,
title: that.allData.productDetailResponse.productInfo.name,
imageUrl: that.allData.productDetailResponse.productInfo.image,
success: function(res) {
that.posters = false;
},
fail: function(err) {
uni.showToast({
title: "分享失败",
icon: "none",
duration: 2000,
});
that.posters = false;
},
});
},
// #endif
//获取海报产品图(解决跨域问题,只适用于小程序)
downloadFilestoreImage: function() {
let that = this;
uni.downloadFile({
url: that.setDomain(that.allData.recordForShare.groupLeaderAvatar),
success: function(res) {
that.groupLeaderAvatar = res.tempFilePath;
},
fail: function() {
return that.$util.Tips({
title: ''
});
that.groupLeaderAvatar = '';
},
});
},
// 小程序关闭分享弹窗;
goFriend: function() {
this.posters = false;
},
// 小程序二维码
getQrcode() {
let that = this;
let data = {
scene: `gt=${this.allData.recordForShare.groupActivityId}&pt=${this.allData.recordForShare.productId}&rd=${this.allData.recordForShare.groupRecordId}&sd=${this.uid}`,
page: 'pages/activity/status/index'
}
mpQrcode(data).then(res => {
base64src(res.data.code, Date.now(), res => {
that.PromotionCode = res;
});
}).catch(err => {
that.errT = err;
});
},
// 生成二维码;
make() {
let href =
`${this.globalData.frontDomain}/pages/activity/status/index?gt=${this.allData.recordForShare.groupActivityId}&pt=${this.allData.recordForShare.productId}&rd=${this.allData.recordForShare.groupRecordId}&sd=${this.uid}`
uQRCode.make({
canvasId: 'qrcode',
text: href,
size: this.qrcodeSize,
margin: 10,
success: res => {
this.PromotionCode = res;
},
complete: () => {},
fail: res => {
this.$util.Tips({
title: '海报二维码生成失败!'
});
}
})
},
getImageBase64: function(images) {
let that = this;
imageBase64({
url: images
}).then(res => {
that.imgTop = res.data.code;
})
imageBase64({
url: that.allData.recordForShare.groupLeaderAvatar
}).then(res => {
that.groupLeaderAvatar = res.data.code;
})
},
/**
* 生成海报
*/
goPoster: function() {
let that = this;
uni.showLoading({
title: '海报生成中',
mask: true
});
that.posters = false;
let arrImagesUrl = '';
let arrImagesUrlTop = '';
if (!that.PromotionCode) {
uni.hideLoading();
that.$util.Tips({
title: that.errT
});
return
}
setTimeout(() => {
// || !that.groupLeaderAvatar
if (!that.imgTop) {
uni.hideLoading();
that.$util.Tips({
title: '无法生成商品海报!'
});
return
}
}, 1000);
uni.downloadFile({
url: that.imgTop, //仅为示例,并非真实的资源
success: (res) => {
arrImagesUrlTop = res.tempFilePath;
let arrImages = [that.pinkbackgd, arrImagesUrlTop, that.PromotionCode, that
.pinkWhiteBg, that.pinkPriceImg, that.groupLeaderAvatar
];
let name = that.allData.productDetailResponse.productInfo.name;
let price = that.allData.recordForShare.activePrice;
let people = that.allData.recordForShare.buyingCountNum - that.allData
.recordForShare.yetBuyingNum;
let groupLeaderNickname = that.allData.recordForShare.groupLeaderNickname
setTimeout(() => {
that.$util.groupCanvas(arrImages, name, price, people,
groupLeaderNickname,
function(tempFilePath) {
that.imagePath = tempFilePath;
that.canvasStatus = true;
uni.hideLoading();
});
}, 500);
}
});
},
// 图片预览;
getpreviewImage: function() {
if (this.imagePath) {
let photoList = [];
photoList.push(this.imagePath)
uni.previewImage({
urls: photoList,
current: this.imagePath
});
} else {
this.$util.Tips({
title: '您的海报尚未生成'
});
}
},
/*
* 保存到手机相册
*/
// #ifdef MP
savePosterPath: function() {
let that = this;
uni.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
uni.saveImageToPhotosAlbum({
filePath: that.imagePath,
success: function(res) {
that.posterImageClose();
that.$util.Tips({
title: '保存成功',
icon: 'success'
});
},
fail: function(res) {
that.$util.Tips({
title: '保存失败'
});
}
})
}
})
} else {
uni.saveImageToPhotosAlbum({
filePath: that.imagePath,
success: function(res) {
that.posterImageClose();
that.$util.Tips({
title: '保存成功',
icon: 'success'
});
},
fail: function(res) {
that.$util.Tips({
title: '保存失败'
});
},
})
}
}
})
},
// #endif
ShareInfo() {
let data = this.allData.productDetailResponse.productInfo;
let href =
`${this.globalData.frontDomain}/pages/activity/status/index?gt=${this.allData.recordForShare.groupActivityId}&pt=${this.allData.recordForShare.productId}&rd=${this.allData.recordForShare.groupRecordId}&sd=${this.uid}`;
if (this.$wechat.isWeixin() && this.publicLoginType == 1) {
let configAppMessage = {
// desc: data.storeInfo,
title: data.name,
link: href,
imgUrl: data.image
};
this.$wechat.wechatEvevt([
"updateAppMessageShareData",
"updateTimelineShareData",
"onMenuShareAppMessage",
"onMenuShareTimeline"
], configAppMessage).then(res => {}).catch(err => {
console.log(err);
})
}
},
//拼团商品列表
getGroupList() {
if (this.loadend) return;
if (this.loading) return;
this.loading = true;
groupBuySkuListApi(this.where).then(res => {
let list = res.data;
let limit = this.where.limit;
this.where.page++;
this.loadend = limit > list.length;
this.groupGood = this.groupGood.concat(list);
this.loading = false;
this.loadTitle = this.loadend ? '没有更多内容啦~' : '加载更多';
}).catch(err => {
this.loading = false;
this.loadTitle = '加载更多';
return this.$util.Tips({
title: err
});
})
},
onReachBottom() {
this.getGroupList();
}
}
};
</script>
<style lang="scss" scoped>
.header-gradient {
background: linear-gradient(180deg, #E93323 0%, #E93323 52%, #F5F5F5 100%);
}
.tuan-num {
width: 70rpx;
height: 32rpx;
background: #E93323;
border-radius: 8rpx 0 0 8rpx;
}
.complete {
width: 110rpx;
height: 32rpx;
background: rgba(233, 51, 35, 0.1);
border-radius: 0 8rpx 8rpx 0;
}
.bg-red {
background: linear-gradient(90deg, #FF7931 0%, #E93323 100%) !important;
}
.notice-box {
width: 348rpx;
background: linear-gradient(270deg, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0) 99%);
}
.zs {
width: 42rpx;
height: 36rpx;
}
.abs-badge {
width: 102rpx;
height: 102rpx;
position: absolute;
right: 20rpx;
bottom: 20rpx;
border-radius: 50%;
}
.generate-posters {
width: 100%;
background-color: #fff;
position: fixed;
left: 0;
bottom: 0;
z-index: 300;
transform: translate3d(0, 100%, 0);
transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
border-top: 1rpx solid #eee;
}
.generate-posters.on {
transform: translate3d(0, 0, 0);
}
.generate-posters .item {
display: flex;
flex-direction: column;
align-items: center;
flex: 1;
text-align: center;
font-size: 30rpx;
}
.generate-posters .item .pictrue {
width: 86rpx;
height: 86rpx;
margin-bottom: 10rpx;
image {
width: 100%;
height: 100%;
border-radius: 50%;
}
}
.generate-posters .item .iconfont {
font-size: 80rpx;
color: #5eae72;
}
.generate-posters .item .iconfont.icon-a-ic_picture1 {
color: #5391f1;
}
.group-con {
padding-bottom: 30rpx !important;
}
.group-con .wrapper {
background-color: #fff;
margin-top: 20rpx;
padding: 48rpx 0;
border-radius: 24rpx;
}
.group-con .wrapper .title {
margin-top: 48rpx;
}
.group-con .wrapper .title .line {
width: 136rpx;
height: 1px;
background-color: #ddd;
}
.group-con .wrapper .title .name {
// margin: 0 45rpx;
font-size: 24rpx;
line-height: 36rpx;
color: #3D3D3D;
}
.group-con .wrapper .title .name .time {
margin: 0 12rpx;
}
.group-con .wrapper .title .name .timeTxt {
color: #fc4141;
}
.group-con .wrapper .title .name /deep/.time .styleAll {
text-align: center;
border-radius: 8rpx;
font-size: 24rpx;
font-weight: bold;
display: inline-block;
vertical-align: middle;
width: 36rpx;
height: 36rpx;
line-height: 36rpx;
}
.group-con .wrapper .tips {
font-size: 32rpx;
font-weight: bold;
text-align: center;
// margin-top: 30rpx;
line-height: 42rpx;
color: #333333;
}
.group-con .wrapper .list {
// padding: 0 30rpx;
padding-left: 44rpx;
margin-top: 40rpx;
}
.group-con .wrapper .list.result {
position: relative;
max-height: 240rpx;
overflow: hidden;
padding-top: 20rpx;
.group-leader {
position: absolute;
width: 72rpx;
height: 30rpx;
background: #E93323;
border-radius: 16rpx;
font-size: 20rpx;
color: #FFFFFF;
text-align: center;
line-height: 30rpx;
top: 72rpx;
left: 10rpx;
}
}
.group-con .wrapper .list.result.on {
max-height: 2000rpx;
}
.group-con .wrapper .list .pictrue {
width: 94rpx;
height: 94rpx;
margin: 0 38rpx 30rpx 0;
position: relative;
}
.group-con .wrapper .list .pictrue .label {
position: absolute;
bottom: 0;
left: 50%;
width: 72rpx;
height: 30rpx;
margin: 18rpx 0 0 -36rpx;
color: #fff;
font-size: 20rpx;
background-color: var(--view-theme);
text-align: center;
line-height: 30rpx;
border-radius: 15rpx;
}
.group-con .wrapper .list .pictrue img,
.group-con .wrapper .list .pictrue image {
width: 100%;
height: 100%;
border-radius: 50%;
border: 2rpx solid var(--view-theme);
}
.group-con .wrapper .list .pictrue image.img-none {
border: none;
}
.group-con .wrapper .lookAll {
font-size: 24rpx;
color: #282828;
padding-top: 10rpx;
}
.group-con .wrapper .lookAll .iconfont {
font-size: 25rpx;
margin: 2rpx 0 0 10rpx;
}
.group-con .wrapper .teamBnt {
font-size: 28rpx;
width: 646rpx;
height: 88rpx;
border-radius: 44rpx;
text-align: center;
line-height: 88rpx;
color: #fff;
margin: 32rpx auto 0;
background-color: #e93323;
}
.group-con .wrapper .cancel,
.group-con .wrapper .lookOrder {
text-align: center;
font-size: 24rpx;
color: #333333;
padding-top: 30rpx;
}
.group-con .wrapper .cancel .iconfont {
font-size: 35rpx;
color: #2c2c2c;
vertical-align: -4rpx;
margin-right: 9rpx;
}
.group-con .wrapper .lookOrder .iconfont {
font-size: 25rpx;
color: #2c2c2c;
margin-left: 10rpx;
}
.share-box {
z-index: 1000;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
image {
width: 100%;
height: 100%;
}
}
.play-wrapper {
padding: 32rpx 0 132rpx;
border-radius: 24rpx;
margin-top: 20rpx;
background-color: #FFFFFF;
}
.play-wrapper .wrapper-header {
text-align: center;
}
.play-wrapper .wrapper-header .title {
display: inline-block;
height: 40rpx;
padding: 0 48rpx;
font-weight: 500;
font-size: 28rpx;
line-height: 40rpx;
color: #333333;
}
.play-wrapper .wrapper-main {
margin-top: 42rpx;
}
.play-wrapper .wrapper-main .item {
position: relative;
margin-right: 210rpx;
}
.play-wrapper .wrapper-main .item:last-child {
margin-right: 0;
}
.play-wrapper .wrapper-main .item .head {
position: relative;
width: 36rpx;
height: 36rpx;
border-radius: 18rpx;
background-color: #DDDDDD;
text-align: center;
font-weight: 600;
font-size: 24rpx;
line-height: 36rpx;
color: #FFFFFF;
}
.play-wrapper .wrapper-main .item .main {
position: absolute;
top: 0;
left: 50%;
width: 120rpx;
margin: 68rpx 0 0 -60rpx;
text-align: center;
font-size: 24rpx;
line-height: 34rpx;
color: #333333;
}
.play-wrapper .wrapper-main .progress-box {
position: relative;
}
.play-wrapper .wrapper-main .progress {
position: absolute;
top: 50%;
left: 50%;
width: 494rpx;
height: 12rpx;
background-color: #EEEEEE;
transform: translate(-50%, -50%);
}
.play-wrapper .wrapper-main .progress .inner {
width: 70%;
height: 12rpx;
border-radius: 6rpx;
background: linear-gradient(90deg, #E93323 0%, #FF7931 100%);
}
.play-wrapper .wrapper-main .progress .inner.inner1 {
width: 30% !important;
}
.play-wrapper .wrapper-main .progress .inner.inner2 {
width: 70% !important;
}
.play-wrapper .wrapper-main .progress .inner.inner3 {
width: 100% !important;
}
.font-num-sucess {
color: #E93323 !important;
}
.font-num-err {
color: #999 !important;
}
.canvas {
position: fixed;
z-index: -5;
opacity: 0;
}
.poster-pop {
position: fixed;
width: 500rpx;
height: 714rpx;
top: 50%;
left: 50%;
transform: translateX(-50%);
margin-top: -432rpx;
z-index: 399;
}
.poster-pop image {
width: 100%;
height: 100%;
display: block;
}
.poster-pop .close {
width: 46rpx;
height: 75rpx;
position: fixed;
right: 0;
top: -73rpx;
display: block;
}
.poster-pop .save-poster {
background-color: #df2d0a;
font-size: 22rpx;
color: #fff;
text-align: center;
height: 76rpx;
line-height: 76rpx;
width: 100%;
}
.poster-pop .keep {
color: #fff;
text-align: center;
font-size: 25rpx;
margin-top: 10rpx;
}
.mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.6);
z-index: 99;
}
.generate-posters {
width: 100%;
height: 318rpx;
background-color: #fff;
position: fixed;
left: 0;
bottom: 0;
z-index: 388;
transform: translate3d(0, 100%, 0);
transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
border-top: 1rpx solid #eee;
.generateCon {
height: 220rpx;
}
.generateClose {
height: 98rpx;
font-size: 28rpx;
color: #333333;
border-top: 1px solid #eee;
}
.item {
.pictrue {
width: 96rpx;
height: 96rpx;
border-radius: 50%;
margin: 0 auto 6rpx auto;
/deep/image,
.easy-loadimage,
image,
uni-image {
width: 100%;
height: 100%;
border-radius: 50%;
}
}
}
}
.generate-posters.on {
transform: translate3d(0, 0, 0);
}
.generate-posters .item {
flex: 1;
text-align: center;
font-size: 30rpx;
}
.generate-posters .item .iconfont {
font-size: 80rpx;
color: #5eae72;
}
.generate-posters .item .iconfont.icon-a-ic_picture1 {
color: #5391f1;
}
.generate-posters .item .iconfont.icon-haowuquan1 {
color: #ff954d;
}
.img {
width: 240rpx;
height: 240rpx;
border-radius: 20rpx;
}
.groupBtn {
width: 144rpx;
height: 56rpx;
background: linear-gradient(90deg, #FF7931 0%, #E93323 100%);
border-radius: 50rpx;
text-align: center;
line-height: 56rpx;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
}
.flex-special {
align-items: flex-end !important;
}
.p-bottom {
padding-bottom: 4rpx;
}
.swiper-box {
height: 70rpx !important;
padding: 20rpx;
color: #fff;
font-size: 24rpx;
.swiper-img {
width: 48rpx;
height: 48rpx;
border-radius: 24rpx;
}
.line1 {
display: flex;
align-items: center;
width: 348rpx;
height: 56rpx;
background: linear-gradient(to right, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0) 99%);
border-radius: 200rpx;
padding-left: 4rpx;
}
.swiper-text {
margin-left: 8rpx;
}
}
.all-pink {
min-height: 20rpx;
}
.image-box {
width: 100%;
height: 100%;
border-radius: 50%;
border: 4rpx solid #E93323;
}
.sucess-tips {
color: #e93323 !important;
}
.color-e93323 {
color: #e93323 !important;
}
</style>