Files
MER-2.2_2601/mer_uniapp/pages/activity/status/index.vue
2026-03-08 20:07:52 +08:00

1332 lines
35 KiB
Vue
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.
<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>