You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<!-- 充值界面 --><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'; import { WxaSubscribeTemplate } from '@/sheep/util/const';
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(WxaSubscribeTemplate.PAY_WALLET_RECHARGER_SUCCESS); // #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>
|