|
|
- <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>
- </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">联系运营商\n升级解锁更多权益</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: '',
- },
- tabActive: 0,
- rankList: [
- ],
- status: 0,
- showProgressModal: false,
- showQrcodeModal: false
- }
- },
- 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()
- },
- 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) {
- if (res.result.status == 0) {
- this.status = res.result.status
- console.log(this.status,'this.status')
- }
- }else{
- this.status = 3
- console.log(this.status,'this.status')
- }
- })
- },
- 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 {
- font-size: 30rpx;
- color: #222;
- font-weight: bold;
- text-align: right;
- min-width: 120rpx;
- margin-left: 16rpx;
- align-self: center;
- }
- }
- .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-modal-list {
- width: 88%;
- display: flex;
- flex-direction: column;
- gap: 18rpx;
- margin-bottom: 48rpx;
- }
- .progress-modal-item {
- // background: #fff;
- 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>
|