flyx/pages/shouye/detail.vue
2024-11-09 18:21:36 +08:00

1936 lines
42 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.

<!--
* @Date: 2023-11-13 15:46:52
* @LastEditTime: 2024-03-05 15:54:07
* @Description: content
-->
<template>
<view class="content">
<view class="navLeft align-center" :style="{top:$sys().statusBarHeight+'px'}" @tap="$c.back(1)">
<uni-icons type="left" color="#FFFFFF"></uni-icons>
<view class="">{{$c.detailPageTitle((pageData && pageData.goods) || '')}}</view>
</view>
<view class="header relative" v-if="pageData&&pageData.goods"
:style="{background: 'url('+pageData.goods.imgurl_detail+') no-repeat 0 0 / 100% 100%'}">
<view class="header-wuzhe flex" v-if="pageData.goods.is_shou_zhe==1">
<image class="img100" :src="$img1('common/chouBanjia.png')" mode="aspectFit"></image>
</view>
<view class="header-goodsTitel">{{ pageData.goods.title }}</view>
<view class="header-suoxiang center"
v-if="pageData.goods.lock_is == 1 && pageData.lock_info.goods_lock_surplus_time > 0">
<image :src="pageData.lock_info.goods_lock_user_headimg" mode="aspectFill"></image>
<view class="hidden ml10">{{ pageData.lock_info.goods_lock_user_nickname }}</view>
<image class="ml20" :src="$img1('index/suoxiang.png')" mode="aspectFit"></image>
<view class="ml30">倒计时:{{secNum}}S</view>
</view>
<view class="header-title center"
:style="{background: 'url('+$img1('common/chouTitle.png') +') no-repeat 0 0 / 100% 100%'}">
<text>
<template></template>
</text>
<text>
<template v-if="pageData.goods.type != 5">¥</template>
<template>{{pageData.goods.price}}</template>
<template v-if="pageData.goods.type == 5">积分</template>
</text>
<text>
<template v-if="pageData.goods.type != 5">/含明信片</template>
</text>
</view>
<view class="header-shoucang justify-center" @tap="toggleCollect">
<image :src="pageData.goods.collection_is?$img1('index/sc1.png'):$img1('index/sc2.png')"></image>
<text>收藏</text>
</view>
<view class="header-footer relative">
<view class="header-footer-one">
<image v-if="pageData.goods.type == 5" @click="$refs.rulePop.getRule(13, '购买说明')"
:src="$img1('common/gzsm.png')"></image>
<image v-else-if="pageData.goods.type == 6" @click="$refs.rulePop.getRule(18, '购买说明')"
:src="$img1('common/gzsm.png')"></image>
<image v-else @click="$refs.rulePop.getRule(7, '购买说明')" :src="$img1('common/gzsm.png')"></image>
</view>
<view class="header-footer-two" @tap="tabChange(1)">
<image v-if="tabCur==1" :src="$img1('common/spyl1.png')"></image>
<image v-if="tabCur==2" :src="$img1('common/spyl2.png')"></image>
</view>
<view class="header-footer-three" @tap="tabChange(2)">
<image v-if="tabCur==1" :src="$img1('common/zsjl2.png')"></image>
<image v-if="tabCur==2" :src="$img1('common/zsjl1.png')"></image>
</view>
<view class="header-footer-four" @click="changeBox">
<image :src="$img1('common/huanxiang.png')"></image>
</view>
</view>
</view>
<view class="spylView" v-if="tabCur == 1 && pageData">
<view class="spylView-head align-center justify-between">
<view class="column align-center" @click="prev">
<view class="center">
<uni-icons type="left" color="#000000"></uni-icons>
</view>
<view class="">上一箱</view>
</view>
<view class="">
<view class="bgfff flex">
<text :style="{width:'80%'}"></text>
</view>
<view class="align-center justify-between" v-if="pageData.goods">
<view class="align-center">第 <text>{{ pageData.goods.num }}</text> /{{ pageData.goods.stock }}箱
</view>
<view>赏品余量</view>
<view class="align-center">
<text>{{ pageData.goods.goodslist_surplus_stock }}</text>/{{ pageData.goods.goodslist_stock }}
</view>
</view>
</view>
<view class="column align-center" @click="next">
<view class="center">
<uni-icons type="right" color="#000000"></uni-icons>
</view>
<view class="">下一箱</view>
</view>
</view>
<view class="list">
<view class="list-item" v-for="(item, i) in pageData.goodslist" :key="i" @click="previewDetail(item)">
<view class="pic center relative">
<image class="pic-img" :src="item.imgurl" mode="aspectFit"></image>
<view class="type-tag center"
:style="{background: item.shang_info?item.shang_info.color:'#FFFFFF'}">
{{ item.shang_info?item.shang_info.title:'' }}
</view>
<view class="num center bgfff">{{ item.surplus_stock }}/{{ item.stock }}</view>
<view v-if="item.goods_type == 2" class="yu-tag ziti">预售</view>
<view v-if="item.surplus_stock <= 0" class="shadow center">
<image :src="$img1('common/sold_out.png')"></image>
</view>
</view>
<view class="title hang1">
{{ item.title }}
</view>
<view class="price">
<text>售价:¥{{ item.sc_money }}</text>
</view>
<view class="desc">{{ item.pro }}</view>
</view>
</view>
</view>
<template v-if="tabCur == 2">
<mescroll-body ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="getLog" :down="downOption"
:up="upOption">
<scroll-view class="sub-tab" scroll-x>
<view class="sub-tab-item" v-for="(item, i) in subTab" :key="i"
:class="subTabCur == i?'act':'unact'" @click="subTabChange(i)">
{{ item.shang_title }}
</view>
</scroll-view>
<view class="log-list">
<view class="log-item br20" v-for="(item, i) in logList" :key="i">
<view class="avatar">
<image :src="item.user_info.headimg" lazy-load></image>
</view>
<view class="info">
<view class="name hang1">
{{ item.user_info.nickname }}
</view>
<view class="time">{{ item.addtime }}</view>
</view>
<view class="prize">
<view class="pic flex">
<image class="img100" :src="item.goodslist_imgurl" lazy-load></image>
</view>
<view class="column align-end">
<view :style="{background: item.shang_color}" class="prize-shang center">
{{item.shang_title}}
</view>
<view class="flex mt10">
<view class="title hang1">
{{ item.goodslist_title }}
</view>
<view class="num">×{{item.prize_num}}</view>
</view>
</view>
</view>
</view>
</view>
</mescroll-body>
</template>
<!-- <view class="fixed-btns">
<view class="btn" @click="doRefresh">
<image :src="$img('/static/img/refresh.png')" lazy-load></image>
</view>
<view class="btn relative">
<button class="hide" open-type="share"></button>
<image :src="$img('/static/img/share.png')" lazy-load></image>
</view>
<view class="btn" @click="toBag">
<image :src="$img('/static/img/bag.png')" lazy-load></image>
</view>
</view> -->
<view v-if="pageData" class="ft-fixed justify-evenly">
<view v-if="pageData.goods.type == 3" class="lt-btn" @click="confirmSubmit([0, 1])">
一发入魂
</view>
<template v-else>
<view class="btn common_bg column center" v-if="getBtnXianShi(1)"
:style="{ backgroundImage: `url(${$img1('common/chouBtn1.png')})`}" @click="confirmSubmit([0, 1])">
<!-- <view>冲一发</view> -->
</view>
<view class="btn common_bg column center" v-if="getBtnXianShi(3)"
:style="{backgroundImage: `url(${$img1('common/chouBtn3.png')})`}" @click="confirmSubmit([0, 3])">
<!-- <view>冲三发</view> -->
</view>
<view class="btn common_bg column center" v-if="getBtnXianShi(5)"
:style="{backgroundImage: `url(${$img1('common/chouBtn5.png')})`}" @click="confirmSubmit([0, 5])">
<!-- <view>冲五发</view> -->
</view>
<view class="btn common_bg column center" v-if="pageData.goods.type != 5&&getBtnXianShi(0)"
:style="{backgroundImage: `url(${$img1('common/chouBtnAll.png')})`}"
@click="confirmSubmit([0, pageData.goods.goodslist_surplus_stock])">
<!-- <view>全收</view> -->
</view>
</template>
</view>
<uni-popup ref="dPop" type="center" maskBackgroundColor="rgba(0,0,0,0.9)">
<view v-if="previewData" class="d-pop">
<view class="pic center relative">
<image :src="previewData.imgurl" lazy-load></image>
<view class="justify-center" v-if="previewData.shang_info.title">{{previewData.shang_info.title}}
</view>
</view>
<view class="title">
<text class="hang1">
{{ previewData.title }}
</text>
</view>
<view class="d-list">
<view class="d-item">
{{ previewData.shang_info.title }} {{ previewData.pro }}
</view>
<view class="d-item">产品类型:{{ optData.type_text }}</view>
</view>
<view class="close icon" @click="close('dPop')">
<image :src="$img('/static/img/close.png')" lazy-load></image>
</view>
</view>
</uni-popup>
<uni-popup ref="buyPop" type="bottom">
<view v-if="orderData" class="buy-pop relative">
<view class="buy-pop-hd">
<text class="ziti">确认订单</text>
<view class="close icon" @click="close('buyPop')">
<image :src="$img('/static/img/close2.png')" lazy-load></image>
</view>
</view>
<view class="buy-card">
<view class="buy-info">
<view class="pic flex">
<image class="img100" :src="orderData.goods.imgurl_detail"></image>
</view>
<view class="info-r">
<view class="title hang1">
{{ orderData.goods.title }}
</view>
<view class="type">类型:明信片</view>
<template v-if="
orderData.goods.is_shou_zhe == 1 &&
orderData.goods.shou_zhe_price * 1 > 0
">
<view class="price-num">
<view class="price">
<template v-if="pageData.goods.type != 5">¥</template>
<text>{{ orderData.goods.shou_zhe_price }}</text>
<template v-if="pageData.goods.type == 5">积分</template>
(首抽5折)
</view>
<view class="num">×{{ 1 }}</view>
</view>
<view v-if="orderData.goods.prize_num > 1" class="price-num">
<view class="price">
<template v-if="pageData.goods.type != 5">¥</template>
<text>{{ orderData.goods.price }}</text>
<template v-if="pageData.goods.type == 5">积分</template>
</view>
<view class="num">
×{{ orderData.goods.prize_num * 1 - 1 }}
</view>
</view>
</template>
<view v-else class="price-num">
<view class="price">
<template v-if="pageData.goods.type != 5">¥</template>
<text>{{ orderData.goods.price }}</text>
<template v-if="pageData.goods.type == 5">积分</template>
</view>
<view class="num">×{{ orderData.goods.prize_num }}</view>
</view>
</view>
</view>
<view class="line"></view>
<template v-if="pageData.goods.type != 5">
<view class="card-row" @click="toCoupon">
<view class="title">优惠券</view>
<view class="row-r">
{{
couponData && orderData.coupon_price > 0
? `-${couponData.price}`
: '未选择'
}}
<view class="icon">
<image :src="$img1('common/right1.png')" lazy-load></image>
</view>
</view>
</view>
<view class="card-row" @click="$c.to({ url: '/pages/user/vip' })">
<view class="title">
{{
orderData.zhe
? `会员折扣 (${orderData.zhe}折)`
: '暂无会员抵扣'
}}
</view>
<view class="row-r">
详情
<view class="icon">
<image :src="$img1('common/right1.png')" lazy-load></image>
</view>
</view>
</view>
</template>
</view>
<view v-if="!(pageData.goods.type == 6 && !getBtnXianShi(0))" class="pay-title ziti">请选择抵扣方式</view>
<view v-if="pageData.goods.type == 5" class="pay-type">
<view class="icon">
<image :src="$img('/static/img/pay_type3.png')" lazy-load></image>
</view>
<view class="title">
使用积分抵扣
{{ orderData.use_score }} (剩余:{{ orderData.score }})
</view>
<view class="icon">
<image v-if="true" :src="$img1('common/check_act.png')" lazy-load></image>
<image v-else :src="$img1('common/check.png')" lazy-load></image>
</view>
</view>
<view v-if="pageData.goods.type == 6 && !getBtnXianShi(0)">
</view>
<template v-else>
<view class="pay-type" @click="changePay('useIntegral')">
<view class="icon">
<image :src="$img('/static/img/pay_type1.png')" lazy-load></image>
</view>
<view class="title">
使用吧唧币抵扣¥ {{ orderData.use_integral_money }} (剩余:{{ orderData.integral }}个)
</view>
<view class="icon">
<image v-if="useIntegral" :src="$img1('common/check_act.png')" lazy-load></image>
<image v-else :src="$img1('common/check.png')" lazy-load></image>
</view>
</view>
<view class="pay-type" @click="changePay('useMoney')">
<view class="icon">
<image :src="$img('/static/img/pay_type2.png')" lazy-load></image>
</view>
<view class="title">
使用星钻抵扣¥
{{ orderData.use_money }} (剩余:{{ orderData.money }})
</view>
<view class="icon">
<image v-if="useMoney" :src="$img1('common/check_act.png')" lazy-load></image>
<image v-else :src="$img1('common/check.png')" lazy-load></image>
</view>
</view>
</template>
<view class="rule">
<scroll-view class="rule-inner" scroll-y>
<view v-html="sendRuleData"></view>
</scroll-view>
</view>
<view class="agree" @click="isAgree = !isAgree">
<view class="icon">
<image v-if="isAgree" :src="$img1('common/check_act.png')" lazy-load></image>
<image v-else :src="$img1('common/check.png')" lazy-load></image>
</view>
我已满18岁,阅读并同意
<text @click.stop="$c.to({ url: '/pages/guize/guize?type=4' })">
《用户协议》
</text>
<text @click.stop="$c.to({ url: '/pages/guize/guize?type=5' })">
《隐私政策》
</text>
</view>
<view class="pay-btn" @click="$c.noDouble(confirmSubmit, [1, buyNum])">
<text>确认支付</text>
<text>{{
pageData.goods.type == 5
? ` ${orderData.use_score}积分`
: ` ¥${orderData.price}`
}}</text>
</view>
</view>
</uni-popup>
<buy-notice ref="buyNotice" @confirm="$c.noDouble(confirmSubmit, [1, buyNum, true])"></buy-notice>
<uni-popup ref="resPop" type="center" mask-background-color="rgba(0,0,0,0.8)">
<view v-if="prizeData" class="res-pop common_bg column center">
<view class="res-pop-hd"></view>
<scroll-view class="res-pop-bd" scroll-y>
<view class="res-list">
<view class="res-item" v-for="(item, i) in prizeData.data" :key="i">
<view class="pic center">
<image :src="item.goodslist_imgurl" lazy-load></image>
<view class="type-tag center">{{ item.shang_title }}</view>
<view class="num center">×{{ item.prize_num }}</view>
</view>
<view class="title hang1">
{{ item.goodslist_title }}
</view>
<view class="exchange">
{{
item.goodslist_money * 1 > 0
? `可兑换:${item.goodslist_money}`
: `不可兑换`
}}
</view>
</view>
</view>
</scroll-view>
<view class="res-pop-ft mt20">
<view class="ft-btn common_bg justify-center" :style="{
backgroundImage: `url(${$img1('common/quhegui.png')})`
}" @click="toBag">
<text>去盒柜</text>
</view>
<view class="ft-btn common_bg justify-center" :style="{
backgroundImage: `url(${$img1('common/jixuchou.png')})`
}" @click="close('resPop')">
<text>继续抽</text>
</view>
</view>
</view>
</uni-popup>
<view v-if="aniShow" class="ani-pop">
<image :src="aniSrc" lazy-load></image>
</view>
<rule-pop ref="rulePop"></rule-pop>
<coupon-pop ref="couponPop"></coupon-pop>
</view>
</template>
<script>
export default {
data() {
return {
optData: '',
boxNum: '',
buyNum: 0,
useMoney: true,
useIntegral: true,
// 下拉刷新的配置(可选, 绝大部分情况无需配置)
downOption: {
auto: false
},
// 上拉加载的配置(可选, 绝大部分情况无需配置)
upOption: {
auto: true,
page: {
size: 15 // 每页数据的数量,默认10
}
},
tabList: {
1: {
title: '商品预览'
},
2: {
title: '中赏记录'
}
},
tabCur: 1,
subTab: [],
subTabCur: 0,
payType: {
1: {
title: '吧唧币',
icon: '/static/img/pay_type1.png'
},
2: {
title: '星钻',
icon: '/static/img/pay_type2.png'
}
},
payTypeCur: 1,
isAgree: true,
pageData: '',
couponData: '',
orderData: '',
prizeData: '',
secTimer: null,
secNum: 0,
aniSrc: '',
aniShow: false,
logList: [],
sendRuleData: '',
previewData: ''
}
},
computed: {
},
onShareAppMessage() {
if(this.$refs["couponPop"]!=null){
var co= this.$refs["couponPop"].getfengxiaodata();
if(co!=null){
console.log(co);
return co;
}
}
return {
title: `吧唧一番赏${this.pageData.goods.title}系列 第${this.pageData.goods.num}套`,
imageUrl: this.pageData.goods.imgurl_detail,
path: '/pages/shouye/detail' +
this.$c.qs({
goods_id: this.pageData.goods.id,
goods_num: this.pageData.goods.num,
pid: uni.getStorageSync('userinfo').ID
})
}
},
onLoad(options) {
console.log(options);
this.optData = options
this.tabChange(this.tabCur)
uni.$on('chooseCoupon', data => {
// console.log('data', data)
this.couponData = data
this.confirmSubmit([0, this.buyNum])
})
// uni.getImageInfo({
// src: this.$img('/static/img/animation.png'),
// success: ({ path }) => {
// this.aniSrc = path
// }
// })
this.$c.getRule(10).then(res => {
if (res.status == 1) {
this.sendRuleData = res.data
}
})
},
onReady() {
// this.open('dPop')
// this.open('buyPop')
// this.open('buyNotice')
// this.open('resPop')
},
onUnload() {
uni.$off('chooseCoupon')
},
methods: {
previewDetail(item) {
console.log(item)
this.previewData = item
this.open('dPop')
},
resetSec() {
clearInterval(this.secTimer)
this.secTimer = null
this.secNum = 0
},
runSec(time) {
const nowTime = Math.floor(Date.now() / 1000)
if (time < nowTime) {
this.resetSec()
return
}
this.secTimer && clearInterval(this.secTimer)
this.secNum = time - nowTime
this.secTimer = setInterval(() => {
if (this.secNum <= 0) {
this.resetSec()
uni.showLoading({
title: '加载中',
mask: true
})
setTimeout(() => {
// uni.hideLoading()
this.doRefresh()
}, 1000)
return
}
this.secNum -= 1
}, 1000)
},
toCoupon() {
this.$c.to({
url: '/pages/user/coupon',
query: {
type: 2,
total_price: this.orderData.order_total
}
})
},
getPrize(order_num) {
if (!order_num) {
return
}
setTimeout(() => {
this.req({
url: 'prizeorderlog',
data: {
order_num
},
success: res => {
if (res.status == 1) {
this.prizeData = res.data
if (res.data.data.length <= 0) {
this.getPrize(order_num)
return
}
// this.aniShow = true
// setTimeout(() => {
// this.aniShow = false
this.bgmCtx.openBgm.stop()
this.bgmCtx.openBgm.play()
this.open('resPop')
// }, 1300)
}
}
})
}, 500)
},
changePay(e) {
this[e] = !this[e]
this.confirmSubmit([0, this.buyNum])
},
confirmSubmit([type, num, fromNotice = false]) {
let url = 'ordermoney'
if (type == 1) {
url = 'orderbuy'
if (!uni.getStorageSync('_agree_buy_notice') && !fromNotice) {
this.$refs.buyNotice.getRule(6)
return
}
}
if (!this.getBtnXianShi(0)) {
this.useMoney = false;
this.useIntegral = false;
}
this.buyNum = num
let data = {
goods_id: this.pageData.goods.id,
prize_num: this.buyNum,
goods_num: this.pageData.goods.num,
use_money_is: this.useMoney ? 1 : 2,
use_integral_is: this.useIntegral ? 1 : 2,
coupon_id: (this.couponData && this.couponData.id) || ''
// ad_id: uni.getStorageSync('_ad_id')
}
if (this.pageData.goods.type == 5) {
data.coupon_id = ''
}
this.req({
url,
data,
success: async res => {
if (res.status == 1) {
if (type == 0) {
if (res.data.coupon_id) {
this.couponData = {
id: res.data.coupon_id,
price: res.data.coupon_price
}
}
this.orderData = res.data
this.open('buyPop')
}
if (type == 1) {
this.close('buyPop')
if (res.data.status == 1) {
const status = await this.$c.wxMpPay({
data: res.data.res
})
if (status == 'success') {
this.getPrize(res.data.order_num)
this.doRefresh()
}
} else {
this.$c.toast({
title: res.msg,
duration: 500,
success: () => {
this.getPrize(res.data.order_num)
this.doRefresh()
}
})
}
}
}
}
})
},
toggleCollect() {
this.req({
url: 'addCollect',
data: {
goods_id: this.pageData.goods.id,
goods_num: this.pageData.goods.num
},
success: res => {
if (res.status == 1) {
this.doRefresh()
}
}
})
},
toBag() {
this.close('resPop')
this.$c.to({
type: 3,
url: '/pages/sangdai/sangdai'
})
},
changeBox() {
this.$c.to({
url: '/pages/shouye/huanxiang',
query: {
id: this.pageData.goods.id,
type_text: this.optData.type_text
}
})
},
doRefresh() {
this.getData()
if (this.tabCur == 2) {
this.tabChange(this.tabCur)
}
},
subTabChange(i) {
this.subTabCur = i
this.logList = []
this.$nextTick(() => {
setTimeout(() => {
this.mescroll.resetUpScroll()
this.mescroll.scrollTo(0, 0)
}, 100)
})
},
tabChange(i) {
this.tabCur = i
switch (Number(i)) {
case 1:
this.getData()
break
case 2:
this.subTabChange(this.subTabCur)
break
}
},
next() {
if (this.optData.goods_num >= this.pageData.goods.stock) {
this.optData.goods_num = this.pageData.goods.stock
this.$c.toast({
title: '已经是最后一箱了'
})
return
}
this.optData.goods_num += 1
this.getData()
},
prev() {
if (this.optData.goods_num <= 1) {
this.optData.goods_num = 1
this.$c.toast({
title: '已经是第一箱了'
})
return
}
this.optData.goods_num -= 1
this.getData()
},
getLog({
num,
size
}) {
if (num > 1) return this.mescroll.endByPage(this.logList.length, 1)
this.req({
url: 'shang_log',
data: {
page: num,
goods_id: this.optData.goods_id,
goods_num: this.optData.goods_num,
shang_id: this.subTab.length > 0 ? this.subTab[this.subTabCur].shang_id : ''
},
Loading: true,
success: res => {
if (res.status == 1) {
this.subTab = res.data.category
if (num == 1) {
this.logList = []
}
this.logList = this.logList.concat(res.data.data)
this.mescroll.endByPage(res.data.data.length, res.data.last_page)
}
}
})
},
getData() {
this.req({
url: 'goodsdetail',
data: {
goods_id: this.optData.goods_id,
goods_num: this.optData.goods_num
},
success: res => {
if (res.status == 1) {
this.optData.goods_num = Number(res.data.goods.num)
if (
res.data.goods.lock_is == 1 &&
res.data.lock_info.goods_lock_surplus_time > 0
) {
this.runSec(res.data.lock_info.goods_lock_surplus_time)
}
this.pageData = res.data
console.log(this.pageData);
}
}
})
},
getBtnXianShi(type) {
if (this.pageData == null || this.pageData['xuangou'] == null) {
// this.pageData
return true;
}
let xuangou = this.pageData['xuangou'];
if (xuangou.quanju_xiangou == 0) {
return true;
}
if (type == 0) {
return false;
}
if (type == 1) {
return true;
}
let yuxia = xuangou.quanju_xiangou - xuangou.user_xiangou_count;
console.log(yuxia);
if (yuxia >= type) {
return true;
}
return false;
},
close(e) {
this.$refs[e].close()
if (e == "resPop") {
if (this.prizeData['user_coupon'] != null) {
this.$refs["couponPop"].open(this.prizeData['user_coupon']);
}
}
},
open(e) {
this.$refs[e].open()
}
}
}
</script>
<style lang="scss">
.navLeft {
position: fixed;
left: 30rpx;
z-index: 100;
height: 44px;
>view {
font-family: YouSheBiaoTiHei;
font-weight: 400;
font-size: 50rpx;
color: #FFFFFF;
}
}
.content {
padding: 0 0 300rpx;
.sub-tab {
white-space: nowrap;
padding: 30rpx 0 10rpx;
.sub-tab-item {
display: inline-flex;
align-items: center;
padding: 0 20rpx;
height: 50rpx;
margin-left: 30rpx;
font-size: 24rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #999999;
font-family: YouSheBiaoTiHei;
font-weight: 400;
font-size: 28rpx;
border-radius: 6rpx;
&.act {
color: #FFFFFF;
background: #B07AF3;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #FFFFFF;
}
&.unact {
color: #FFFFFF;
background: #3B3941;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid rgba(255, 255, 255, 0.27);
}
&:last-child {
margin-right: 30rpx;
}
}
.common_bg {}
}
.log-list {
padding: 1rpx 30rpx 30rpx;
.log-item {
height: 144rpx;
padding: 0 20rpx;
display: flex;
align-items: center;
margin-top: 20rpx;
background: #3B3941;
.avatar {
width: 80rpx;
height: 80rpx;
background: #9d9d9d;
border: 1px solid #cccccc;
border-radius: 50%;
overflow: hidden;
}
.info {
width: 230rpx;
margin-left: 20rpx;
.name {
font-size: 26rpx;
font-weight: 400;
color: #ffffff;
}
.time {
margin-top: 10rpx;
white-space: nowrap;
font-size: 24rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #dddddd;
}
}
.prize {
flex: 1;
padding-left: 60rpx;
display: flex;
align-items: center;
.prize-shang {
height: 40rpx;
padding: 0 20rpx;
// background: #B07AF3;
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #FFFFFF;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
}
.pic {
width: 80rpx;
height: 80rpx;
}
.title {
width: 100rpx;
margin-left: 20rpx;
font-size: 24rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
text-align: right;
}
.num {
font-size: 24rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
}
}
}
}
.header {
width: 750rpx;
height: 722rpx;
&-wuzhe {
width: 160rpx;
height: 60rpx;
position: absolute;
top: 300rpx;
left: 0;
}
&-goodsTitel {
position: absolute;
font-weight: 400;
font-size: 28rpx;
color: #FFFFFF;
left: 50%;
transform: translateX(-50%);
bottom: 510rpx;
z-index: 2;
text-shadow: #000 1px 0 0, #000 0 1px 0, #000 -1px 0 0, #000 0 -1px 0;
}
&-suoxiang {
position: absolute;
width: 584rpx;
height: 120rpx;
background: rgba(0, 0, 0, 0.73);
left: 50%;
transform: translateX(-50%);
bottom: 390rpx;
z-index: 2;
>image:nth-of-type(1) {
width: 46rpx;
height: 46rpx;
border: 2rpx solid #FFFFFF;
border-radius: 50rpx;
}
>image:nth-of-type(2) {
width: 144rpx;
height: 68rpx;
}
>view:nth-of-type(1) {
width: 140rpx;
font-weight: 400;
font-size: 28rpx;
color: #FFFFFF;
}
>view:nth-of-type(2) {
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
}
}
&-title {
position: absolute;
padding: 0 20rpx;
width: 260rpx;
height: 66rpx;
left: 50%;
transform: translateX(-50%);
bottom: 120rpx;
>text:nth-child(2n+1) {
font-weight: 400;
font-size: 24rpx;
color: #000000;
}
>text:nth-child(2) {
font-weight: 700;
font-size: 32rpx;
color: #000000;
}
}
&-shoucang {
width: 120rpx;
height: 64rpx;
position: absolute;
right: 0;
bottom: 140rpx;
box-sizing: border-box;
background: url($imgurl+'/common/shoucang.png') no-repeat 0 0 / 100% 100%;
>image {
width: 28rpx;
height: 28rpx;
margin-top: 22rpx;
}
>text {
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
margin-left: 4rpx;
line-height: 66rpx;
text-shadow: #000 1px 0 0, #000 0 1px 0, #000 -1px 0 0, #000 0 -1px 0;
}
}
&-footer {
width: 750rpx;
position: absolute;
left: 0;
bottom: 0;
&-one {
width: 186rpx;
height: 106rpx;
display: flex;
position: absolute;
left: 0;
bottom: 0;
z-index: 1;
>image {
width: 100%;
height: 100%;
}
}
&-two {
width: 224rpx;
height: 119rpx;
display: flex;
position: absolute;
left: 160rpx;
bottom: 0;
z-index: 1;
>image {
width: 100%;
height: 100%;
}
}
&-three {
width: 224rpx;
height: 119rpx;
display: flex;
position: absolute;
right: 160rpx;
bottom: 0;
>image {
width: 100%;
height: 100%;
}
}
&-four {
width: 186rpx;
height: 106rpx;
display: flex;
position: absolute;
right: 0;
bottom: 0;
>image {
width: 100%;
height: 100%;
}
}
}
}
.spylView {
background: #1C1B20;
&-head {
box-sizing: border-box;
padding: 24rpx 30rpx;
width: 750rpx;
>view:nth-child(2n+1) {
>view:nth-child(1) {
width: 74rpx;
height: 56rpx;
background: #FFFFFF;
border-radius: 12rpx;
border: 2rpx solid #000000;
}
>view:nth-child(2) {
margin-top: 8rpx;
font-weight: 400;
font-size: 20rpx;
color: #FFFFFF;
text-align: center;
}
}
>view:nth-child(2) {
width: 420rpx;
>view:nth-child(1) {
width: 420rpx;
height: 14rpx;
border-radius: 40rpx;
>text {
height: 14rpx;
border-radius: 40rpx;
background: #B07AF3;
}
}
>view:nth-child(2) {
padding: 14rpx 30rpx 0;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
>view {
>text {
font-family: YouSheBiaoTiHei;
font-weight: 400;
font-size: 36rpx;
color: #B07AF3;
}
}
}
}
}
.list {
padding: 30rpx;
display: grid;
grid-template-columns: repeat(3, 210rpx);
gap: 30rpx 30rpx;
.list-item {
width: 210rpx;
box-sizing: border-box;
.pic {
width: 210rpx;
height: 210rpx;
box-sizing: border-box;
position: relative;
background: #3B3941;
border-radius: 24rpx;
border: 3rpx solid #FFFFFF;
.pic-img {
width: 210rpx;
height: 210rpx;
border-radius: 24rpx;
}
.type-tag {
position: absolute;
top: 0;
left: 0;
border-radius: 24rpx 0 24rpx 0;
font-weight: 400;
font-size: 20rpx;
color: #FFFFFF;
min-width: 78rpx;
height: 38rpx;
box-sizing: border-box;
border-right: 3rpx solid #FFFFFF;
border-bottom: 3rpx solid #FFFFFF;
}
.num {
position: absolute;
right: 0;
bottom: 0;
border-radius: 24rpx 0 24rpx 0;
min-width: 66rpx;
height: 38rpx;
font-weight: 400;
font-size: 20rpx;
color: #000000;
}
.yu-tag {
position: absolute;
right: 10rpx;
top: 10rpx;
z-index: 1;
display: flex;
justify-content: center;
align-items: center;
font-weight: 400;
font-size: 32rpx;
color: #894DD3;
text-shadow: #fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0;
}
.shadow {
position: absolute;
z-index: 1;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.6);
border-radius: 24rpx;
>image {
width: 86rpx;
height: 156rpx;
}
}
}
.title {
padding: 10rpx 10rpx 0;
font-size: 24rpx;
font-weight: 400;
color: #ffffff;
}
.desc {
padding: 0 10rpx 0;
font-size: 20rpx;
font-weight: 300;
color: #DABCFF;
}
.price {
padding: 6rpx 10rpx 10rpx;
font-weight: 400;
font-size: 22rpx;
color: #CCCCCC;
}
}
}
}
.fixed-btns {
position: fixed;
z-index: 10;
right: 20rpx;
bottom: 300rpx;
.btn {
width: 94rpx;
height: 110rpx;
margin-top: 40rpx;
}
}
.ft-fixed {
position: fixed;
z-index: 10;
left: 0;
bottom: 0;
width: 100%;
display: flex;
flex-flow: row wrap;
justify-content: center;
padding-bottom: 40rpx;
background: #141317;
padding-top: 40rpx;
.lt-btn {
width: 690rpx;
height: 80rpx;
background: linear-gradient(90deg, #2dcbff 0%, #ff95fb 100%);
border-radius: 40rpx;
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 20rpx;
font-size: 32rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
}
.btn {
width: 152rpx;
height: 110rpx;
position: relative;
>view {
white-space: nowrap;
font-family: YouSheBiaoTiHei;
font-weight: 400;
font-size: 52rpx;
color: #FFFFFF;
position: relative;
text-shadow: #000 1px 0 0, #000 0 1px 0, #000 -1px 0 0, #000 0 -1px 0;
// &::before {
// content: '';
// position: absolute;
// bottom: 10rpx;
// left: -8rpx;
// width: 22rpx;
// height: 22rpx;
// background: url($imgurl+'common/jiantou1.png') no-repeat 0 0 / 100% 100%;
// }
// &::after {
// content: '';
// position: absolute;
// top: 0rpx;
// right: -10rpx;
// width: 22rpx;
// height: 22rpx;
// background: url($imgurl+'common/jiantou2.png') no-repeat 0 0 / 100% 100%;
// }
}
}
}
.d-pop {
position: relative;
width: 570rpx;
box-sizing: border-box;
.pic {
width: 570rpx;
height: 598rpx;
// background: #8953DC;
background: #FFFFFF;
border: 2rpx solid #FFFFFF;
>image {
width: 548rpx;
height: 549rpx;
}
>view {
width: 130rpx;
height: 46rpx;
position: absolute;
top: -12rpx;
left: 0;
font-weight: 400;
font-size: 20rpx;
color: #FFDF46;
box-sizing: border-box;
background: url($imgurl+'common/chouLabel.png') no-repeat 0 0 / 100% 100%;
}
}
.title {
margin: 40rpx auto 0;
width: 574rpx;
height: 82rpx;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
padding: 20rpx;
border: 2rpx solid #894DD3;
border-radius: 12rpx;
background: #313133;
>text {
font-weight: 400;
font-size: 32rpx;
color: #FFFFFF;
}
}
.d-list {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
padding: 20rpx 0 0;
.d-item {
margin-top: 14rpx;
font-size: 24rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
}
}
.close {
width: 48rpx;
height: 48rpx;
position: absolute;
left: 50%;
bottom: 0;
transform: translate(-50%, 160%);
}
}
.buy-pop {
padding: 0 30rpx;
box-sizing: border-box;
background: #1C1B20;
padding-bottom: 30rpx;
&::after {
content: '';
position: absolute;
top: -62rpx;
left: 0;
width: 750rpx;
height: 62rpx;
background: url($imgurl+'common/ding.png') no-repeat 0 0 / 100% 100%;
}
.buy-pop-hd {
padding: 20rpx 0;
padding-left: 10rpx;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 40rpx;
font-weight: 500;
color: #ffffff;
.close {
width: 60rpx;
height: 60rpx;
}
}
.buy-card {
border-radius: 20rpx;
padding: 30rpx 30rpx 10rpx;
background: #5B5B5D;
.buy-info {
display: flex;
.pic {
width: 190rpx;
height: 190rpx;
border-radius: 10rpx;
}
.info-r {
width: calc(100% - 190rpx);
box-sizing: border-box;
display: flex;
flex-flow: column nowrap;
justify-content: space-between;
padding: 10rpx 0 10rpx 30rpx;
.title {
font-size: 32rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
}
.hang1 {}
.type {
font-size: 28rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #dddddd;
}
.price-num {
display: flex;
justify-content: space-between;
align-items: center;
.price {
font-weight: 500;
font-size: 32rpx;
color: #F6C0FF;
text {
font-size: 36rpx;
}
}
.num {
font-size: 28rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
}
}
}
}
.line {
height: 1px;
background: #222222;
margin: 30rpx 0 10rpx;
}
.card-row {
padding: 16rpx 0;
display: flex;
justify-content: space-between;
align-items: center;
.title {
font-size: 28rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #ffffff;
}
.row-r {
display: flex;
align-items: center;
font-size: 24rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #FFFFFF;
.icon {
width: 32rpx;
height: 32rpx;
}
}
}
}
.pay-title {
margin-top: 30rpx;
font-size: 32rpx;
font-weight: 400;
color: #ffffff;
}
.pay-type {
padding: 30rpx;
border-radius: 20rpx;
margin-top: 20rpx;
display: flex;
align-items: center;
background: #313133;
.icon {
width: 32rpx;
height: 32rpx;
}
.title {
flex: 1;
padding: 0 20rpx;
font-size: 28rpx;
font-weight: 400;
color: #ffffff;
}
}
.agree {
display: flex;
margin-top: 30rpx;
font-size: 24rpx;
font-weight: 400;
color: #ffffff;
line-height: 32rpx;
.icon {
width: 32rpx;
height: 32rpx;
margin-right: 10rpx;
}
}
.rule {
padding: 20rpx;
border-radius: 20rpx;
box-sizing: border-box;
margin: 20rpx 0 0;
height: 160rpx;
background: #313133;
border-radius: 20rpx;
.rule-inner {
max-height: 120rpx;
font-size: 20rpx;
font-weight: 400;
color: #dddddd;
}
}
.pay-btn {
margin: 30rpx auto 0;
width: 406rpx;
height: 116rpx;
background: url($imgurl+'common/payBtn.png') no-repeat 0 0 / 100% 100%;
display: flex;
justify-content: center;
font-weight: 500;
color: #7825DE;
>text:nth-child(1) {
font-size: 28rpx;
margin-top: 32rpx;
}
>text:nth-child(2) {
font-size: 36rpx;
margin-top: 26rpx;
}
}
}
.res-pop {
width: 100%;
height: 100vh;
position: relative;
background: url($imgurl+'common/yb.png') no-repeat 0 0 / 100% 100%;
.res-pop-hd {
width: 380rpx;
height: 104rpx;
background: url($imgurl+'common/gxhd.png') no-repeat 0 0 / 100% 100%;
}
.res-pop-bd {
width: 750rpx;
height: 40vh;
.res-list {
padding: 30rpx 30rpx;
display: grid;
grid-template-columns: repeat(3, 210rpx);
gap: 30rpx 30rpx;
.res-item {
width: 100%;
box-sizing: border-box;
.pic {
width: 100%;
height: 210rpx;
position: relative;
background: #8953DC;
border: 2rpx solid #FFFFFF;
>image {
width: 202rpx;
height: 202rpx;
}
.type-tag {
position: absolute;
left: 14rpx;
top: -14rpx;
z-index: 2;
width: 134rpx;
height: 42rpx;
background: url($imgurl+ 'common/chouLabel.png') no-repeat 0 0 / 100% 100%;
font-weight: 400;
font-size: 20rpx;
color: #FFDF46;
}
.num {
position: absolute;
z-index: 2;
top: -20rpx;
right: -22rpx;
min-width: 42rpx;
height: 48rpx;
font-weight: 400;
font-size: 20rpx;
color: #FFDF46;
background: url($imgurl+ 'common/chouNum.png') no-repeat 0 0 / 100% 100%;
text-shadow: #000 1rpx 0 0, #000 0 1rpx 0, #000 -1rpx 0 0, #000 0 -1rpx 0;
}
}
.title {
padding: 10rpx 10rpx 0;
font-weight: 400;
font-size: 28rpx;
color: #FFFFFF;
}
.exchange {
padding: 10rpx 10rpx;
font-weight: 400;
font-size: 20rpx;
color: #FFFFFF;
}
}
}
}
.res-pop-ft {
width: 750rpx;
display: flex;
justify-content: space-evenly;
.ft-btn {
width: 244rpx;
height: 116rpx;
font-weight: 400;
font-size: 28rpx;
>text {
margin-top: 36rpx;
}
}
>view:nth-child(1) {
color: #DE6025;
}
>view:nth-child(2) {
color: #7825DE;
}
}
}
.ani-pop {
width: 100vw;
height: 100vh;
position: fixed;
left: 0;
top: 0;
z-index: 88;
display: flex;
justify-content: center;
align-items: center;
background: #000;
image {
width: 100%;
height: 1624rpx;
}
}
}
</style>