<!-- 充值界面 --> <template> <s-layout title="充值" class="withdraw-wrap" navbar="inner"> <view class="wallet-num-box ss-flex ss-col-center ss-row-between" :style="[ { marginTop: '-' + Number(statusBarHeight + 88) + 'rpx', paddingTop: Number(statusBarHeight + 108) + 'rpx', }, ]"> <view class=""> <view class="num-title">当前余额(元)</view> <view class="wallet-num">{{ fen2yuan(userWallet.balance) }}</view> </view> <button class="ss-reset-button log-btn" @tap="sheep.$router.go('/pages/pay/recharge-log')"> 充值记录 </button> </view> <view class="recharge-box"> <view class="recharge-card-box"> <view class="input-label ss-m-b-50">充值金额</view> <view class="input-box ss-flex border-bottom ss-p-b-20"> <view class="unit">¥</view> <uni-easyinput v-model="state.recharge_money" type="digit" placeholder="请输入充值金额" :inputBorder="false" /> </view> <view class="face-value-box ss-flex ss-flex-wrap ss-m-y-40"> <button class="ss-reset-button face-value-btn" v-for="item in state.packageList" :key="item.money" :class="[{ 'btn-active': state.recharge_money === fen2yuan(item.payPrice) }]" @tap="onCard(item.payPrice)"> <text class="face-value-title">{{ fen2yuan(item.payPrice) }}</text> <view v-if="item.bonusPrice" class="face-value-tag"> 送 {{ fen2yuan(item.bonusPrice) }} 元 </view> </button> </view> <button class="ss-reset-button save-btn ui-BG-Main-Gradient ss-m-t-60 ui-Shadow-Main" @tap="onConfirm"> 确认充值 </button> </view> </view> </s-layout> </template> <script setup> import { computed, reactive } from 'vue'; import sheep from '@/sheep'; import { onLoad } from '@dcloudio/uni-app'; import { fen2yuan } from '@/sheep/hooks/useGoods'; import PayWalletApi from '@/sheep/api/pay/wallet'; const userWallet = computed(() => sheep.$store('user').userWallet); const statusBarHeight = sheep.$platform.device.statusBarHeight * 2; const headerBg = sheep.$url.css('/static/img/shop/user/withdraw_bg.png'); const state = reactive({ recharge_money: '', // 输入的充值金额 packageList: [], }); // 点击卡片,选择充值金额 function onCard(e) { state.recharge_money = fen2yuan(e); } // 获得钱包充值套餐列表 async function getRechargeTabs() { const { code, data } = await PayWalletApi.getWalletRechargePackageList(); if (code !== 0) { return; } state.packageList = data; } // 发起支付 async function onConfirm() { const { code, data } = await PayWalletApi.createWalletRecharge({ packageId: state.packageList.find((item) => fen2yuan(item.payPrice) === state.recharge_money)?.id, payPrice: state.recharge_money * 100 }); if (code !== 0) { return; } // #ifdef MP sheep.$platform.useProvider('wechat').subscribeMessage('money_change'); // #endif sheep.$router.go('/pages/pay/index', { id: data.payOrderId, orderType: 'recharge' }); } onLoad(() => { getRechargeTabs(); }); </script> <style lang="scss" scoped> :deep() { .uni-input-input { font-family: OPPOSANS !important; } } .wallet-num-box { padding: 0 40rpx 80rpx; background: var(--ui-BG-Main) v-bind(headerBg) center/750rpx 100% no-repeat; border-radius: 0 0 5% 5%; .num-title { font-size: 26rpx; font-weight: 500; color: $white; margin-bottom: 20rpx; } .wallet-num { font-size: 60rpx; font-weight: 500; color: $white; font-family: OPPOSANS; } .log-btn { width: 170rpx; height: 60rpx; line-height: 60rpx; border: 1rpx solid $white; border-radius: 30rpx; padding: 0; font-size: 26rpx; font-weight: 500; color: $white; } } .recharge-box { position: relative; padding: 0 30rpx; margin-top: -60rpx; } .save-btn { width: 620rpx; height: 86rpx; border-radius: 44rpx; font-size: 30rpx; } .recharge-card-box { width: 690rpx; background: var(--ui-BG); border-radius: 20rpx; padding: 30rpx; box-sizing: border-box; .input-label { font-size: 30rpx; font-weight: 500; color: #333; } .unit { display: flex; align-items: center; font-size: 48rpx; font-weight: 500; } .uni-easyinput__placeholder-class { font-size: 30rpx; height: 60rpx; display: flex; align-items: center; } :deep(.uni-easyinput__content-input) { font-size: 48rpx; } .face-value-btn { width: 200rpx; height: 144rpx; border: 1px solid var(--ui-BG-Main); border-radius: 10rpx; position: relative; z-index: 1; margin-bottom: 15rpx; margin-right: 15rpx; &:nth-of-type(3n) { margin-right: 0; } .face-value-title { font-size: 36rpx; font-weight: 500; color: var(--ui-BG-Main); font-family: OPPOSANS; &::after { content: '元'; font-size: 24rpx; margin-left: 6rpx; } } .face-value-tag { position: absolute; z-index: 2; height: 40rpx; line-height: 40rpx; background: var(--ui-BG-Main); opacity: 0.8; border-radius: 10rpx 0 20rpx 0; top: 0; left: -2rpx; padding: 0 16rpx; font-size: 22rpx; color: $white; font-family: OPPOSANS; } &::before { position: absolute; content: ' '; width: 100%; height: 100%; background: var(--ui-BG-Main); opacity: 0.1; z-index: 0; left: 0; top: 0; } } .btn-active { z-index: 1; &::before { content: ''; background: var(--ui-BG-Main); opacity: 1; } .face-value-title { color: $white; position: relative; z-index: 1; font-family: OPPOSANS; } .face-value-tag { background: $white; color: var(--ui-BG-Main); font-family: OPPOSANS; } } } </style>