flyx/package/index/leitai.vue
2025-03-07 12:31:14 +08:00

1861 lines
39 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" v-if="pageData.goods">
<view class="header-title center relative">
<image :src="$img1('index/ljLeft.png')"></image>
<text class="ziti">擂台赏</text>
<image :src="$img1('index/ljRight.png')"></image>
</view>
<view class="header-main column align-center">
<view class="header-main-title hidden">{{pageData.goods.title}}</view>
<view class="header-main-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-main-swiper relative">
<view class="header-main-swiper-item flex">
<image class="img100" :src="pageData.goods.imgurl_detail" mode="aspectFill"></image>
</view>
<view class="header-main-swiper-num center">第{{ pageData.goods.num }}/{{pageData.goods.stock}}箱
</view>
<view class="header-main-swiper-huanxiang center" @click="changeBox">换箱</view>
</view>
<view class="header-main-huanxiang flex justify-between mt30">
<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="center">
<text>¥{{pageData.goods.price}}</text>
<text>/含明信片</text>
</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="header-main-jidu column align-center">
<view class="flex">
<text :style="{width:'80%'}"></text>
</view>
<view class="">剩余库存{{pageData.goods.goodslist_surplus_stock}}/{{pageData.goods.goodslist_stock}}
</view>
</view>
</view>
</view>
<view class="tab pd30">
<view class="tab-item center" v-for="(item, i) in tabList" :key="i" :class="[tabCur == i?'act':'unact']"
@click="tabChange(i)">
<text>{{ item.title }}</text>
</view>
</view>
<view class="spylView" v-if="tabCur == 1 && pageData">
<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.color}">
{{ 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">
<view class="gailvList">
<view class="gailvList-item br10 align-center" v-for="(i,index) in pageData.goodslist" :key="index">
<view class="" :style="{color: i.shang_info.color}">{{i.shang_info.title}}</view>
<view class="flex-1">
<text>{{i.surplus_stock}}/{{i.stock}}</text>
<text class="ml10">{{i.title}}</text>
</view>
<view class="ml40">{{i.pro}}</view>
</view>
</view>
</template>
<template v-if="tabCur == 3">
<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 class="prize-shang center">{{item.shang_title}}</view>
<view class="flex mt10">
<view class="title hang1">
{{ item.goodslist_title }}
</view>
<view class="num">×1</view>
</view>
</view>
</view>
</view>
</view>
</mescroll-body>
</template>
<view v-if="pageData" class="ft-fixed">
<view class="lt-btn justify-center align-end" @click="confirmSubmit([0, 1])">
<text>抽1发</text>
</view>
</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">{{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="$img1('common/close.png')"></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="$img1('index/close.png')"></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 class="pay-title ziti">请选择抵扣方式</view>
<view v-if="pageData.goods.type == 5" class="pay-type">
<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>
<template v-else>
<!-- <view class="pay-type" @click="changePay('useIntegral')">
<view class="title">
使用吧唧币抵扣¥ {{ orderData.use_integral_money }} (剩余:{{ orderData.integral }}个)
</view>
<view class="icon">
<image style="width: 20px;height: 20px;" v-if="useIntegral" :src="$img1('common/check_act.png')" lazy-load></image>
<image style="width: 20px;height: 20px;" v-else :src="$img1('common/check.png')" lazy-load></image>
</view>
</view> -->
<view class="pay-type" @click="changePay('useMoney')">
<view class="title">
使用星钻抵扣¥
{{ orderData.use_money }} (剩余:{{ orderData.money }})
</view>
<view class="icon">
<image style="width: 20px;height: 20px;" v-if="useMoney"
:src="$img1('common/check_act.png')" lazy-load></image>
<image style="width: 20px;height: 20px;" 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>
</view>
</template>
<script>
export default {
data() {
return {
optData: '',
boxNum: '',
buyNum: 0,
useMoney: true,
useIntegral: false,
// 下拉刷新的配置(可选, 绝大部分情况无需配置)
downOption: {
auto: false
},
// 上拉加载的配置(可选, 绝大部分情况无需配置)
upOption: {
auto: true,
page: {
size: 15 // 每页数据的数量,默认10
}
},
tabList: {
1: {
title: '商品预览'
},
2: {
title: '概率'
},
3: {
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: '',
current: 0
}
},
onShareAppMessage() {
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])
})
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
}
}
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,
type: 3
}
})
},
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.getData()
break
case 3:
this.subTabChange(this.subTabCur)
break
case 4:
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
}
}
})
},
close(e) {
this.$refs[e].close()
},
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;
.gailvList {
width: 686rpx;
margin: 0 auto 0;
&-item {
margin: 28rpx 0 0;
background: #3B3941;
border: 1px solid #FFFFFF;
box-sizing: border-box;
padding: 28rpx 32rpx;
>view:nth-child(1) {
width: 100rpx;
font-weight: 700;
font-size: 28rpx;
}
>view:nth-child(2) {
font-weight: 400;
font-size: 28rpx;
color: #FFFFFF;
>text:nth-child(1) {
flex: 1;
}
>text:nth-child(2) {
flex: 3;
}
}
>view:nth-child(3) {
font-weight: 700;
font-size: 28rpx;
color: #3BFFF9;
}
}
}
.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;
}
}
}
.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 {
padding: 80rpx 0 0;
&-title {
z-index: 10;
>text {
color: #FFFFFF;
margin: 0 10rpx;
font-weight: 400;
font-size: 50rpx;
text-shadow: #894DD3 1rpx 0 0, #894DD3 0 1rpx 0, #894DD3 -1rpx 0 0, #894DD3 0 -1rpx 0;
}
>image {
width: 24rpx;
height: 32rpx;
}
}
&-main {
width: 686rpx;
height: 546rpx;
margin: -28rpx auto 0;
background: url($imgurl+'index/lianji.png') no-repeat 0 0 / 100% 100%;
&-title {
width: 500rpx;
padding-top: 80rpx;
font-weight: 400;
font-size: 28rpx;
color: #FFFFFF;
text-align: center;
}
&-wuzhe {
width: 160rpx;
height: 60rpx;
position: absolute;
top: 300rpx;
left: 0;
z-index: 20;
}
&-swiper {
margin-top: 14rpx;
width: 646rpx;
height: 238rpx;
&-item {
width: 646rpx;
height: 238rpx;
border-radius: 20rpx;
overflow: hidden;
}
&-num {
height: 38rpx;
background: rgba(0, 0, 0, 0.3);
padding: 0 20rpx;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
position: absolute;
bottom: 14rpx;
left: 50%;
transform: translateX(-50%);
z-index: 10;
}
&-huanxiang {
width: 88rpx;
height: 42rpx;
background: #B07AF3;
border-radius: 8rpx;
border: 2rpx solid #FFFFFF;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
position: absolute;
bottom: 14rpx;
right: 42rpx;
z-index: 10;
}
}
&-huanxiang {
width: 646rpx;
>view:nth-child(2) {
min-width: 260rpx;
height: 66rpx;
padding: 0 20rpx;
background: url($imgurl+'index/leitai.png') no-repeat 0 0 / 100% 100%;
>text:nth-child(1) {
font-weight: bold;
font-size: 32rpx;
color: #000000;
}
>text:nth-child(2) {
font-weight: 400;
font-size: 26rpx;
color: #000000;
}
}
>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;
}
}
}
&-jidu {
>view:nth-child(1) {
width: 366rpx;
height: 16rpx;
background: rgba(#FFDE52, 0.3);
border-radius: 40rpx;
>text {
height: 16rpx;
background: #FFDE52;
border-radius: 40rpx;
}
}
>view:nth-child(2) {
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
margin-top: 4rpx;
}
}
}
}
.tab {
display: flex;
align-items: center;
.tab-item {
width: 155rpx;
height: 58rpx;
font-weight: 400;
margin-right: 30rpx;
&.act {
background: url($imgurl+'index/checkTab.png') no-repeat 0 0 / 100% 100%;
>text {
font-weight: 400;
font-size: 28rpx;
color: #FFFFFF;
text-shadow: #121212 1rpx 0 0, #121212 0 1rpx 0, #121212 -1rpx 0 0, #121212 0 -1rpx 0;
}
}
&.unact {
background: url($imgurl+'index/uncheckTab.png') no-repeat 0 0 / 100% 100%;
>text {
font-weight: 400;
font-size: 28rpx;
color: #D6D6D6;
}
}
}
}
.guizeSc {
>view {
>image {
width: 28rpx;
height: 28rpx;
}
>text {
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
margin-left: 6rpx;
}
}
}
.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: 114rpx;
height: 164rpx;
}
.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);
>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: #ff873a;
}
.price {
padding: 6rpx 10rpx 10rpx;
font-weight: 400;
font-size: 22rpx;
color: #CCCCCC;
}
}
}
}
.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: 428rpx;
height: 128rpx;
font-family: YouSheBiaoTiHei;
font-weight: 400;
font-size: 44rpx;
color: #FFFFFF;
background: url($imgurl+'index/chouleitai.png') no-repeat 0 0 / 100% 100%;
>text {
margin-bottom: 22rpx;
}
}
.btn {
width: 122rpx;
height: 111rpx;
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;
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;
.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>