<template>
|
|
<view class="promotion-page">
|
|
<!-- 顶部渐变导航栏 -->
|
|
<view class="nav-bar" :style="{height: navBarTotalHeight + 'px', paddingTop: statusBarHeight + 'px'}">
|
|
<view class="nav-bar-inner">
|
|
<view class="back-icon" @tap="navigateBack">
|
|
<uni-icons type="left" size="22" color="#222" />
|
|
</view>
|
|
<view class="nav-bar-title">爱简收·推客联盟</view>
|
|
<view class="nav-bar-right">
|
|
<uni-icons type="more-filled" size="22" color="#222" />
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 打钩标签区 -->
|
|
<view class="feature-tags" :style="{marginTop: navBarTotalHeight+statusBarHeight + 'px'}">
|
|
<view class="tag" v-for="(t, i) in featureTags" :key="i">
|
|
<text class="check">✓</text>
|
|
<text class="text">{{t}}</text>
|
|
</view>
|
|
</view>
|
|
<!-- 主内容区(卡片悬浮覆盖打钩区) -->
|
|
<view class="main-content">
|
|
<!-- 用户卡片 -->
|
|
<view class="user-card">
|
|
<view class="user-info-row">
|
|
<view class="avatar-box">
|
|
<view class="avatar-frame">
|
|
<image class="avatar-img" :src="userInfo.avatar" mode="aspectFill" />
|
|
<view class="avatar-badge" :class="userTypeBadgeClass">{{ userTypeText }}</view>
|
|
</view>
|
|
</view>
|
|
<view class="user-meta">
|
|
<view class="nickname">{{userInfo.name}}</view>
|
|
<view class="userid">ID: {{userInfo.intentioCode}}</view>
|
|
</view>
|
|
<view class="user-count">
|
|
推广人数
|
|
<view class="user-count-value">{{ promotionCount }}</view>
|
|
</view>
|
|
</view>
|
|
<view class="user-stats-row">
|
|
<view class="stat-block">
|
|
<view class="stat-label">可提现佣金(元)</view>
|
|
<view class="stat-value main">{{userInfo.money}}</view>
|
|
<button class="withdraw-btn" @click="goWithdraw">提现</button>
|
|
</view>
|
|
<view class="stat-divider"></view>
|
|
<view class="stat-block">
|
|
<view class="stat-label">累计提现(元)</view>
|
|
<view class="stat-value">{{userInfo.integerPrice}}</view>
|
|
<button class="record-btn" @click="goWithdrawRecord">提现记录</button>
|
|
</view>
|
|
</view>
|
|
<view class="bottom-menu-row">
|
|
<view class="menu-item" @tap="goProfitDetail">
|
|
<view class="menu-icon red">
|
|
<uni-icons type="wallet" size="32" color="#fff" />
|
|
</view>
|
|
<text class="menu-text">收益明细</text>
|
|
</view>
|
|
<view class="menu-item" @tap="goTeam">
|
|
<view class="menu-icon blue">
|
|
<uni-icons type="person" size="32" color="#fff" />
|
|
</view>
|
|
<text class="menu-text">我的团队</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 推广排行榜 -->
|
|
<view class="rank-section">
|
|
<view class="rank-title">推广排行榜</view>
|
|
<view class="rank-list">
|
|
<view class="rank-item" v-for="(item, idx) in rankList.slice(0, 5)" :key="idx">
|
|
<view class="rank-icon">
|
|
<image v-if="idx<3" :src="getRankIcon(idx+1)" class="crown" mode="aspectFit" />
|
|
<image v-else :src="getRankIcon(idx+1)" class="num-icon" mode="aspectFit" />
|
|
</view>
|
|
<image class="rank-avatar" :src="item.headImage" mode="aspectFill" />
|
|
<text class="rank-phone">{{item.nickName}}</text>
|
|
<text class="rank-amount">¥{{item.price}}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 权益说明表格 -->
|
|
<view class="rights-section">
|
|
<view class="rights-title">权益说明</view>
|
|
<image :src="indexLvxingUrl" mode="widthFix" class="rights-image" />
|
|
</view>
|
|
<!-- 联系客服二维码 -->
|
|
<view class="qrcode-section">
|
|
<view class="qrcode-title">联系客服</view>
|
|
<image class="qrcode-img" :src="qrcodeUrl" mode="aspectFit" @click="openQrcodeModal" />
|
|
<text class="qrcode-modal-benefit">添加客服可以获取更多推广福利</text>
|
|
</view>
|
|
</view>
|
|
<!-- 底部按钮区 -->
|
|
<view class="bottom-btns">
|
|
<button class="btn gray" @tap="goQrcode">我的推广码</button>
|
|
<!-- <button class="btn green" @tap="goUpgrade" v-if="status== 3">立即升级推广官</button> -->
|
|
<!-- <button class="btn gray" v-if="status==0" @tap="showProgressModal = true">查看申请进度</button> -->
|
|
<!-- 以上按钮已注释,仅保留“我的二维码”按钮 -->
|
|
</view>
|
|
<!-- 申请进度弹窗 -->
|
|
<view v-if="showProgressModal" class="progress-modal-mask">
|
|
<view class="progress-modal-box">
|
|
<view class="progress-modal-title">申请进度</view>
|
|
<!-- 步骤条 -->
|
|
<view class="progress-steps">
|
|
<view :class="['step', promotionStatus >= 0 ? 'active' : '']">
|
|
<text :class="{'active': promotionStatus >= 0}">1</text>
|
|
<span>已提交</span>
|
|
</view>
|
|
<view class="step-line"></view>
|
|
<view :class="['step', promotionStatus == 0 ? 'active' : (promotionStatus == 1 ? 'active' : (promotionStatus == 2 ? 'active' : ''))]">
|
|
<text :class="{'active': promotionStatus == 0 || promotionStatus == 1 || promotionStatus == 2}">2</text>
|
|
<span v-if="promotionStatus == 0">审核中</span>
|
|
<span v-else-if="promotionStatus == 1">审核通过</span>
|
|
<span v-else-if="promotionStatus == 2">已驳回</span>
|
|
</view>
|
|
</view>
|
|
<!-- 底部按钮区 -->
|
|
<view class="progress-modal-list">
|
|
<view class="progress-modal-item" @tap="goToFaq">
|
|
<text>在线客服</text>
|
|
<uni-icons type="right" size="22" color="#bbb" />
|
|
</view>
|
|
<view class="progress-modal-item" @tap="goToFaq">
|
|
<text>客服电话</text>
|
|
<uni-icons type="right" size="22" color="#bbb" />
|
|
</view>
|
|
</view>
|
|
<button class="progress-modal-btn" @tap="showProgressModal = false">我知道了</button>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 客服二维码放大弹窗 -->
|
|
<view v-if="showQrcodeModal" class="qrcode-modal-mask" @click="closeQrcodeModal">
|
|
<view class="qrcode-modal-content" @click.stop>
|
|
<view class="qrcode-modal-header">
|
|
<text class="qrcode-modal-title">联系客服</text>
|
|
<view class="qrcode-modal-close" @click="closeQrcodeModal">
|
|
<uni-icons type="close" size="24" color="#999"></uni-icons>
|
|
</view>
|
|
</view>
|
|
<view class="qrcode-modal-body">
|
|
<image
|
|
v-if="qrcodeUrl"
|
|
:src="qrcodeUrl"
|
|
mode="aspectFit"
|
|
class="qrcode-modal-img"
|
|
:show-menu-by-longpress="true"
|
|
@longpress="onQrcodeLongPress"
|
|
/>
|
|
<view v-else class="qrcode-placeholder">
|
|
<text>二维码加载中...</text>
|
|
</view>
|
|
<text class="qrcode-modal-tip">长按识别二维码添加客服微信</text>
|
|
<text class="qrcode-modal-benefit">添加客服可以获取更多推广福利</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import pullRefreshMixin from '@/pages/mixins/pullRefreshMixin.js'
|
|
|
|
export default {
|
|
mixins: [pullRefreshMixin],
|
|
data() {
|
|
return {
|
|
statusBarHeight: 0,
|
|
navBarHeight: 44, // px
|
|
navBarTotalHeight: 44, // px
|
|
featureTags: ['收益高', '品类全', '到账快', '城市多'],
|
|
userInfo: {
|
|
avatar: '',
|
|
name: '',
|
|
id: '',
|
|
type: '',
|
|
balance: '',
|
|
totalWithdraw: '',
|
|
},
|
|
promotionCount: 0, // 新增推广人数
|
|
tabActive: 0,
|
|
rankList: [
|
|
],
|
|
status: 0,
|
|
showProgressModal: false,
|
|
showQrcodeModal: false,
|
|
promotionStatus: null, // 0审核中 1已通过 2已驳回
|
|
rejectReason: '', // 驳回原因
|
|
}
|
|
},
|
|
computed: {
|
|
qrcodeUrl() {
|
|
console.log(getApp().globalData.configData,'getApp().globalData.configData')
|
|
const item = getApp().globalData.configData.find(i => i.keyName === 'kefu_code')
|
|
return item ? item.keyContent : ''
|
|
},
|
|
indexLvxingUrl() {
|
|
console.log(getApp().globalData.configData,'getApp().globalData.configData')
|
|
const item = getApp().globalData.configData.find(i => i.keyName === 'index_lvxing')
|
|
return item ? item.keyContent : ''
|
|
},
|
|
userTypeText() {
|
|
return this.userInfo.isTuiTypeTitle || '推广官'
|
|
},
|
|
userTypeBadgeClass() {
|
|
switch (this.userInfo.isTuiTypeTitle) {
|
|
case '推广达人':
|
|
return 'avatar-badge-expert'
|
|
case '推广大使':
|
|
return 'avatar-badge-ambassador'
|
|
default:
|
|
return 'avatar-badge-user'
|
|
}
|
|
},
|
|
},
|
|
onLoad() {
|
|
const sysInfo = uni.getSystemInfoSync()
|
|
this.statusBarHeight = sysInfo.statusBarHeight
|
|
this.navBarHeight = 44
|
|
this.navBarTotalHeight = this.statusBarHeight + this.navBarHeight
|
|
this.getUserInfoByToken()
|
|
this.getRankList()
|
|
this.getMyPromotionInfo()
|
|
this.getPromotionCount() // 新增
|
|
},
|
|
onShow(){
|
|
this.getMyPromotionInfo()
|
|
|
|
},
|
|
onPullDownRefresh() {
|
|
this.getUserInfoByToken()
|
|
uni.stopPullDownRefresh()
|
|
},
|
|
methods: {
|
|
async onRefresh() {
|
|
// 模拟刷新数据
|
|
await new Promise(resolve => setTimeout(resolve, 1000))
|
|
uni.stopPullRefresh()
|
|
},
|
|
navigateBack() {
|
|
uni.navigateBack()
|
|
},
|
|
getRankIcon(idx) {
|
|
return `/static/tui/${idx}.png`
|
|
},
|
|
goQrcode() {
|
|
uni.navigateTo({ url: '/pages/subcomponent/promo-qrcode' })
|
|
},
|
|
goUpgrade() {
|
|
uni.navigateTo({ url: '/pages/subcomponent/upgrad' })
|
|
},
|
|
getUserInfoByToken() {
|
|
this.$api('getUserByToken', {}, (res) => {
|
|
if (res && res.success && res.result) {
|
|
this.userInfo.avatar = res.result.headImage || ''
|
|
this.userInfo.name = res.result.nickName || ''
|
|
this.userInfo.id = res.result.id || ''
|
|
this.userInfo.intentioCode = res.result.intentioCode || ''
|
|
this.userInfo.money = res.result.money || ''
|
|
this.userInfo.integerPrice = res.result.integerPrice || ''
|
|
this.userInfo.isTuiTypeTitle = res.result.isTuiTypeTitle ||''
|
|
// 你可以根据实际接口补充type、balance、totalWithdraw等字段
|
|
}
|
|
})
|
|
},
|
|
goWithdrawRecord() {
|
|
uni.navigateTo({ url: '/pages/subcomponent/promotion-withdraw-record' })
|
|
},
|
|
goWithdraw() {
|
|
uni.navigateTo({ url: '/pages/subcomponent/withdraw?fromPromotion=true' })
|
|
},
|
|
goProfitDetail() {
|
|
uni.navigateTo({ url: '/pages/subcomponent/promotion-profit-detail' })
|
|
},
|
|
goTeam() {
|
|
uni.navigateTo({ url: '/pages/subcomponent/promotion-team' })
|
|
},
|
|
getRankList(){
|
|
this.$api('getRankList', {}, (res) => {
|
|
if (res && res.success && res.result) {
|
|
this.rankList = res.result.records || []
|
|
}
|
|
})
|
|
},
|
|
getMyPromotionInfo(){
|
|
this.$api('getMyPromotionInfo', {}, (res) => {
|
|
if (res && res.success && res.result) {
|
|
this.status = res.result.status
|
|
this.promotionStatus = res.result.status
|
|
this.rejectReason = res.result.rejectReason || ''
|
|
console.log(this.status,'this.status')
|
|
}else{
|
|
this.status = 3
|
|
this.promotionStatus = 3
|
|
console.log(this.status,'this.status')
|
|
}
|
|
})
|
|
},
|
|
getPromotionCount() {
|
|
this.$api && this.$api('getPromotionCount', {}, res => {
|
|
if (res && res.code === 200 && res.result && typeof res.result.result === 'number') {
|
|
this.promotionCount = res.result.result
|
|
} else {
|
|
this.promotionCount = 0
|
|
}
|
|
})
|
|
},
|
|
goToFaq() {
|
|
uni.navigateTo({ url: '/pages/subcomponent/admin_faq' })
|
|
},
|
|
|
|
// 显示客服二维码弹窗
|
|
openQrcodeModal() {
|
|
this.showQrcodeModal = true;
|
|
},
|
|
|
|
// 关闭二维码弹窗
|
|
closeQrcodeModal() {
|
|
this.showQrcodeModal = false;
|
|
},
|
|
|
|
// 处理二维码长按事件
|
|
onQrcodeLongPress() {
|
|
console.log('长按二维码');
|
|
// 在微信小程序中,show-menu-by-longpress="true" 会自动处理长按识别
|
|
// 这里可以添加一些反馈提示
|
|
uni.showToast({
|
|
title: '长按识别二维码',
|
|
icon: 'none',
|
|
duration: 1500
|
|
});
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.promotion-page {
|
|
min-height: 100vh;
|
|
background: linear-gradient(to right, #b2f08d 0%, #39e9d2 100%);
|
|
padding-bottom: calc(env(safe-area-inset-bottom) + 120rpx);
|
|
}
|
|
|
|
.nav-bar {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
z-index: 1000;
|
|
width: 100vw;
|
|
background: linear-gradient(to right, #b2f08d 0%, #39e9d2 100%);
|
|
box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.03);
|
|
.nav-bar-inner {
|
|
display: flex;
|
|
align-items: center;
|
|
height: 44px;
|
|
width: 100vw;
|
|
position: relative;
|
|
}
|
|
.back-icon {
|
|
width: 44px;
|
|
height: 44px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
}
|
|
.nav-bar-title {
|
|
flex: 1;
|
|
text-align: center;
|
|
font-size: 36rpx;
|
|
font-weight: bold;
|
|
color: #222;
|
|
letter-spacing: 2rpx;
|
|
line-height: 44px;
|
|
}
|
|
.nav-bar-right {
|
|
width: 44px;
|
|
height: 44px;
|
|
position: absolute;
|
|
right: 0;
|
|
top: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
}
|
|
|
|
.feature-tags {
|
|
// background: linear-gradient(to right, #b2f08d 0%, #39e9d2 100%);
|
|
border-radius: 32rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
padding: 0 24rpx;
|
|
height: 80rpx;
|
|
box-shadow: 0 4rpx 24rpx rgba(60, 167, 250, 0.08);
|
|
.tag {
|
|
flex: 1;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
.check {
|
|
width: 36rpx;
|
|
height: 36rpx;
|
|
background: #fff;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 28rpx;
|
|
color: #13ac47;
|
|
font-weight: bold;
|
|
margin-right: 10rpx;
|
|
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.08);
|
|
}
|
|
.text {
|
|
color: #fff;
|
|
font-size: 28rpx;
|
|
font-weight: bold;
|
|
}
|
|
}
|
|
}
|
|
|
|
.main-content {
|
|
margin-top: 20rpx;
|
|
padding-top: 88rpx;
|
|
background: linear-gradient(180deg, #eaffe6 0%, #fff 30%);
|
|
min-height: 100vh;
|
|
width: 100vw;
|
|
box-sizing: border-box;
|
|
position: relative;
|
|
z-index: 11;
|
|
border-radius: 40rpx 40rpx 0 0;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.user-card {
|
|
margin: 0 32rpx;
|
|
background: linear-gradient(to bottom, #f6fff2 0%, #fff 100%);
|
|
border-radius: 32rpx;
|
|
box-shadow: 0 8rpx 32rpx rgba(60, 167, 250, 0.12);
|
|
padding: 48rpx 36rpx 36rpx 36rpx;
|
|
border: none;
|
|
position: relative;
|
|
top: -40rpx;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
.user-info-row {
|
|
display: flex;
|
|
align-items: center;
|
|
padding-bottom: 0;
|
|
margin-bottom: 32rpx;
|
|
// background-color: #fff;
|
|
.avatar-box {
|
|
margin-right: 24rpx;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
.avatar-frame {
|
|
width: 104rpx;
|
|
height: 104rpx;
|
|
border-radius: 10rpx;
|
|
overflow: hidden;
|
|
position: relative;
|
|
background: #f2f2f2;
|
|
box-shadow: 0 4rpx 16rpx rgba(0,0,0,0.10);
|
|
.avatar-img {
|
|
width: 104rpx;
|
|
height: 80rpx;
|
|
object-fit: cover;
|
|
display: block;
|
|
}
|
|
.avatar-badge {
|
|
position: absolute;
|
|
left: 0;
|
|
bottom: 0;
|
|
width: 100%;
|
|
height: 32rpx;
|
|
line-height: 32rpx;
|
|
background: rgba(238, 238, 238, 0.95);
|
|
color: #999;
|
|
font-size: 24rpx;
|
|
text-align: center;
|
|
border-bottom-left-radius: 10rpx;
|
|
border-bottom-right-radius: 10rpx;
|
|
font-weight: 400;
|
|
letter-spacing: 2rpx;
|
|
z-index: 2;
|
|
}
|
|
.avatar-badge-user {
|
|
background: rgba(238, 238, 238, 0.95);
|
|
color: #999;
|
|
}
|
|
.avatar-badge-expert {
|
|
background: linear-gradient(90deg, #ff8917, #ffd01e);
|
|
color: #fff;
|
|
font-weight: 600;
|
|
}
|
|
.avatar-badge-ambassador {
|
|
background: linear-gradient(90deg, #b2f08d, #39e9d2);
|
|
color: #fff;
|
|
font-weight: 600;
|
|
}
|
|
}
|
|
}
|
|
.user-meta {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
.nickname {
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
color: #222;
|
|
margin-bottom: 6rpx;
|
|
}
|
|
.userid {
|
|
font-size: 24rpx;
|
|
color: #bbb;
|
|
}
|
|
}
|
|
.user-count {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
font-size: 28rpx;
|
|
color: #222;
|
|
font-weight: bold;
|
|
.user-count-value {
|
|
font-size: 36rpx;
|
|
color: #13ac47;
|
|
margin-top: 4rpx;
|
|
font-weight: bold;
|
|
}
|
|
}
|
|
}
|
|
.user-stats-row {
|
|
display: flex;
|
|
align-items: stretch;
|
|
justify-content: center;
|
|
background: #f2fff6;
|
|
border-radius: 24rpx;
|
|
margin: 0 0 8rpx 0;
|
|
padding: 32rpx 0;
|
|
box-sizing: border-box;
|
|
.stat-block {
|
|
flex: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 0 24rpx;
|
|
.stat-label {
|
|
font-size: 24rpx;
|
|
color: #bbb;
|
|
margin-bottom: 12rpx;
|
|
text-align: center;
|
|
}
|
|
.stat-value {
|
|
font-size: 40rpx;
|
|
color: #222;
|
|
font-weight: bold;
|
|
margin-bottom: 18rpx;
|
|
&.main {
|
|
color: #13ac47;
|
|
font-size: 48rpx;
|
|
}
|
|
}
|
|
.withdraw-btn, .record-btn {
|
|
width: 180rpx;
|
|
height: 56rpx;
|
|
border-radius: 28rpx;
|
|
font-size: 26rpx;
|
|
font-weight: bold;
|
|
margin-top: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
text-align: center;
|
|
box-sizing: border-box;
|
|
}
|
|
.withdraw-btn {
|
|
background: linear-gradient(90deg, #b2f08d, #39e9d2);
|
|
color: #fff;
|
|
border: none;
|
|
}
|
|
.record-btn {
|
|
background: #fff;
|
|
color: #13ac47;
|
|
border: 2rpx solid #13ac47;
|
|
&:active, &:focus {
|
|
opacity: 0.8;
|
|
}
|
|
}
|
|
}
|
|
.stat-divider {
|
|
width: 2rpx;
|
|
height: 72rpx;
|
|
background: #e0e0e0;
|
|
margin: 0 16rpx;
|
|
border-radius: 2rpx;
|
|
align-self: center;
|
|
}
|
|
}
|
|
.bottom-menu-row {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
margin: 40rpx 0 0 0;
|
|
.menu-item {
|
|
display: flex;
|
|
align-items: center;
|
|
margin: 0 40rpx;
|
|
.menu-icon {
|
|
width: 56rpx;
|
|
height: 56rpx;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-right: 12rpx;
|
|
&.red {
|
|
background: #ff7e6a;
|
|
}
|
|
&.blue {
|
|
background: #7eb6ff;
|
|
}
|
|
}
|
|
.menu-text {
|
|
font-size: 28rpx;
|
|
color: #222;
|
|
font-weight: 500;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.rank-section {
|
|
margin: 32rpx 32rpx 0 32rpx;
|
|
.rank-title {
|
|
font-size: 30rpx;
|
|
color: #222;
|
|
font-weight: bold;
|
|
text-align: center;
|
|
margin-bottom: 24rpx;
|
|
}
|
|
.rank-list {
|
|
background: #fff;
|
|
border-radius: 24rpx;
|
|
box-shadow: 0 2rpx 8rpx rgba(60, 167, 250, 0.04);
|
|
overflow: hidden;
|
|
.rank-item {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 0 44rpx;
|
|
height: 104rpx;
|
|
border-bottom: 1rpx solid #f3f3f3;
|
|
&:last-child {
|
|
border-bottom: none;
|
|
}
|
|
.rank-icon {
|
|
width: 44rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
.crown, .num-icon {
|
|
width: 36rpx;
|
|
height: 36rpx;
|
|
}
|
|
}
|
|
.rank-avatar {
|
|
width: 48rpx;
|
|
height: 48rpx;
|
|
border-radius: 50%;
|
|
margin: 0 18rpx 0 10rpx;
|
|
background: #f5f5f5;
|
|
}
|
|
.rank-phone {
|
|
flex: 1;
|
|
font-size: 28rpx;
|
|
color: #222;
|
|
font-weight: bold;
|
|
}
|
|
.rank-amount {
|
|
font-size: 30rpx;
|
|
color: #b98c4a;
|
|
font-weight: bold;
|
|
min-width: 120rpx;
|
|
text-align: right;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.rights-section {
|
|
margin: 40rpx 32rpx 0 32rpx;
|
|
.rights-title {
|
|
font-size: 30rpx;
|
|
color: #222;
|
|
font-weight: bold;
|
|
text-align: center;
|
|
margin-bottom: 24rpx;
|
|
}
|
|
.rights-image {
|
|
width: 100%;
|
|
height: auto;
|
|
}
|
|
}
|
|
|
|
.qrcode-section {
|
|
margin: 48rpx 32rpx 0 32rpx;
|
|
background: #fff;
|
|
border-radius: 32rpx;
|
|
box-shadow: 0 4rpx 24rpx rgba(60, 167, 250, 0.08);
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
padding: 32rpx 0 40rpx 0;
|
|
.qrcode-title {
|
|
font-size: 28rpx;
|
|
color: #222;
|
|
font-weight: bold;
|
|
margin-bottom: 24rpx;
|
|
}
|
|
.qrcode-img {
|
|
width: 220rpx;
|
|
height: 220rpx;
|
|
background: #fff;
|
|
border-radius: 24rpx;
|
|
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.08);
|
|
cursor: pointer;
|
|
transition: transform 0.2s ease;
|
|
|
|
&:active {
|
|
transform: scale(0.95);
|
|
}
|
|
}
|
|
}
|
|
|
|
.bottom-btns {
|
|
position: fixed;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
padding: 24rpx 32rpx calc(env(safe-area-inset-bottom) + 24rpx) 32rpx;
|
|
background: #fff;
|
|
z-index: 100;
|
|
.btn {
|
|
flex: 1;
|
|
height: 88rpx;
|
|
border-radius: 44rpx;
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
margin: 0 12rpx;
|
|
border: none;
|
|
background: linear-gradient(90deg, #b2f08d, #39e9d2);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
&.gray {
|
|
background: linear-gradient(90deg, #b2f08d, #39e9d2);
|
|
color: #fff;
|
|
}
|
|
&.green {
|
|
background: linear-gradient(90deg, #42dfc2, #9be48f);
|
|
color: #fff;
|
|
}
|
|
}
|
|
}
|
|
|
|
.bottom-menu-row {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
margin: 40rpx 0 0 0;
|
|
.menu-item {
|
|
display: flex;
|
|
align-items: center;
|
|
margin: 0 40rpx;
|
|
.menu-icon {
|
|
width: 56rpx;
|
|
height: 56rpx;
|
|
border-radius: 50%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-right: 12rpx;
|
|
&.red {
|
|
background: #ff7e6a;
|
|
}
|
|
&.blue {
|
|
background: #7eb6ff;
|
|
}
|
|
}
|
|
.menu-text {
|
|
font-size: 28rpx;
|
|
color: #222;
|
|
font-weight: 500;
|
|
}
|
|
}
|
|
}
|
|
|
|
.progress-modal-mask {
|
|
position: fixed;
|
|
left: 0; right: 0; top: 0; bottom: 0;
|
|
background: rgba(0,0,0,0.25);
|
|
z-index: 2000;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
.progress-modal-box {
|
|
width: 80vw;
|
|
max-width: 420px;
|
|
background: linear-gradient(180deg, #f3fff2 0%, #eafff6 100%);
|
|
border-radius: 32rpx;
|
|
box-shadow: 0 8rpx 32rpx rgba(60, 167, 250, 0.10);
|
|
padding: 56rpx 0 32rpx 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
}
|
|
.progress-modal-title {
|
|
font-size: 34rpx;
|
|
color: #222;
|
|
font-weight: bold;
|
|
text-align: center;
|
|
margin-bottom: 48rpx;
|
|
white-space: pre-line;
|
|
}
|
|
.progress-steps {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin: 32rpx 0 24rpx 0;
|
|
.step {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
color: #bbb;
|
|
&.active {
|
|
color: #13ac47;
|
|
font-weight: bold;
|
|
}
|
|
text {
|
|
width: 40rpx;
|
|
height: 40rpx;
|
|
border-radius: 50%;
|
|
background: #eee;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-bottom: 8rpx;
|
|
font-size: 26rpx;
|
|
&.active {
|
|
background: #13ac47;
|
|
color: #fff;
|
|
}
|
|
}
|
|
span {
|
|
font-size: 24rpx;
|
|
}
|
|
}
|
|
.step-line {
|
|
width: 60rpx;
|
|
height: 4rpx;
|
|
background: #eee;
|
|
margin: 0 12rpx;
|
|
}
|
|
}
|
|
.progress-modal-list {
|
|
width: 88%;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 18rpx;
|
|
margin-bottom: 48rpx;
|
|
}
|
|
.progress-modal-item {
|
|
border-radius: 18rpx;
|
|
height: 80rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
font-size: 30rpx;
|
|
color: #222;
|
|
padding: 0 32rpx;
|
|
box-shadow: 0 2rpx 8rpx rgba(60, 167, 250, 0.04);
|
|
}
|
|
.progress-modal-btn {
|
|
width: 88%;
|
|
height: 88rpx;
|
|
background: linear-gradient(90deg, #b2f08d, #39e9d2);
|
|
color: #222;
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
border-radius: 44rpx;
|
|
margin-top: 8rpx;
|
|
box-shadow: 0 4rpx 16rpx rgba(60, 167, 250, 0.08);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border: none;
|
|
}
|
|
|
|
// 客服二维码弹窗样式
|
|
.qrcode-modal-mask {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: rgba(0, 0, 0, 0.6);
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
z-index: 9999;
|
|
backdrop-filter: blur(5rpx);
|
|
}
|
|
|
|
.qrcode-modal-content {
|
|
background: #fff;
|
|
border-radius: 24rpx;
|
|
width: 600rpx;
|
|
max-width: 90vw;
|
|
animation: fadeInScale 0.3s ease;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.qrcode-modal-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 40rpx 40rpx 20rpx 40rpx;
|
|
border-bottom: 1rpx solid #f0f0f0;
|
|
}
|
|
|
|
.qrcode-modal-title {
|
|
font-size: 36rpx;
|
|
font-weight: bold;
|
|
color: #333;
|
|
}
|
|
|
|
.qrcode-modal-close {
|
|
padding: 10rpx;
|
|
margin: -10rpx;
|
|
}
|
|
|
|
.qrcode-modal-body {
|
|
padding: 40rpx;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
}
|
|
|
|
.qrcode-modal-img {
|
|
width: 400rpx;
|
|
height: 400rpx;
|
|
border-radius: 16rpx;
|
|
margin-bottom: 30rpx;
|
|
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.qrcode-placeholder {
|
|
width: 400rpx;
|
|
height: 400rpx;
|
|
border-radius: 16rpx;
|
|
margin-bottom: 30rpx;
|
|
background: #f5f5f5;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
|
|
text {
|
|
color: #999;
|
|
font-size: 28rpx;
|
|
}
|
|
}
|
|
|
|
.qrcode-modal-tip {
|
|
font-size: 28rpx;
|
|
color: #666;
|
|
text-align: center;
|
|
line-height: 1.4;
|
|
margin-bottom: 10rpx;
|
|
}
|
|
|
|
.qrcode-modal-benefit {
|
|
font-size: 26rpx;
|
|
color: #13ac47;
|
|
text-align: center;
|
|
font-weight: bold;
|
|
}
|
|
|
|
@keyframes fadeInScale {
|
|
from {
|
|
opacity: 0;
|
|
transform: scale(0.8);
|
|
}
|
|
to {
|
|
opacity: 1;
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
</style>
|