Compare commits

..

4 Commits

Author SHA1 Message Date
yankang 85656c48b8 修复inset兼容问题 2026-08-14 14:18:19 +08:00
yankang 202e510bb0 Merge remote-tracking branch 'origin/main' into dev_yk 2026-08-14 13:30:07 +08:00
whitechiina ccea45224f updata 2026-08-14 13:21:33 +08:00
whitechiina 6918f6ca90 闪兑 2026-08-13 11:17:54 +08:00
17 changed files with 1066 additions and 656 deletions

View File

@ -1859,6 +1859,18 @@ async function fetchTransferBmtrBalanceData(requestOptions) {
);
}
async function fetchBmtrExchangePercentData(requestOptions) {
return fetchPayload(
createRequestOptions(
{
url: serviceConfig.ENDPOINTS.bmtrExchangePercent,
},
requestOptions,
),
"BMTR兑换手续费比例加载失败",
);
}
async function fetchWithdrawRateData(requestOptions) {
return fetchPayload(
createRequestOptions(
@ -1881,6 +1893,7 @@ function resolvePercentRate(data) {
"feeRate",
"withdraw_rate",
"withdrawRate",
"percent",
"prop",
"value",
"num",
@ -2509,9 +2522,18 @@ export async function fetchBmtFlashExchangeDetail(requestOptions) {
const result = await Promise.all([
fetchPriceData(requestOptions),
fetchHomeBalanceData(requestOptions),
fetchUserData(requestOptions).catch(function () {
return null;
}),
fetchBmtrExchangePercentData(requestOptions).catch(function () {
return null;
}),
]);
const ticker = normalizeTicker(result[0]);
const balances = normalizeBalances(result[1]);
const bmtr = pickFirstValue(result[2], ["bmtr"]);
const bmtrPercent = result[3] ? resolvePercentRate(result[3]) : "";
const bmtrRatio = result[3] ? pickFirstValue(result[3], ["bl"]) : "";
setHomeTickerCache(ticker);
@ -2522,7 +2544,10 @@ export async function fetchBmtFlashExchangeDetail(requestOptions) {
coupon: toFixedNumber(balances.coupon, 2),
voucher: toFixedNumber(balances.voucher, 2),
brokerage_price: toFixedNumber(balances.balance, 2),
bmtr: toFixedNumber(bmtr, 4),
},
bmtrPercent: bmtrPercent || "",
bmtrRatio: bmtrRatio === "" ? "" : String(bmtrRatio),
tips: [
"BMT闪兑 = 输入数量 ÷ BMT实时价格",
"BMT闪兑时所需的抵用券、消费券、余额。必须大于10的倍数。",
@ -2532,10 +2557,13 @@ export async function fetchBmtFlashExchangeDetail(requestOptions) {
}
export async function submitAssetBmtFlashExchange(payload, requestOptions) {
const rawMode = payload && payload.mode;
const mode =
payload && payload.mode === "coupon"
rawMode === "bmtr"
? "bmtr"
: rawMode === "coupon"
? "coupon"
: payload && payload.mode === "balance"
: rawMode === "balance"
? "balance"
: "voucher";
const amount = toNumber(payload && payload.amount);
@ -2544,13 +2572,24 @@ export async function submitAssetBmtFlashExchange(payload, requestOptions) {
throw createError("请输入闪兑数量");
}
if (mode === "bmtr" && amount < 0.01) {
throw createError("BMTR闪兑最小数量为0.01");
}
await fetchPayload(
createRequestOptions(
{
url: serviceConfig.ENDPOINTS.bmtFlashExchangeSubmit,
method: "POST",
data: {
type: mode === "coupon" ? 1 : mode === "balance" ? 2 : 0,
type:
mode === "coupon"
? 1
: mode === "balance"
? 2
: mode === "bmtr"
? 3
: 0,
number: String(amount),
},
},

View File

@ -0,0 +1,270 @@
<template>
<view v-if="visible" class="popup-mask" @touchmove.stop.prevent="noop">
<view class="popup-mask__backdrop" @click="handleMaskClick"></view>
<view class="popup-panel" :class="['popup-panel--' + status, panelClass]">
<view class="popup-panel__head">
<text class="popup-panel__title">{{ title }}</text>
<view v-if="showClose" class="popup-panel__close" @click="$emit('cancel')">
<image class="popup-panel__close-image" src="https://imgs.agrimedia.cn/bm-bmt/bmt-close.png" mode="aspectFit">
</image>
</view>
</view>
<view v-if="showStatusBlock" class="popup-panel__status">
<image class="popup-panel__status-image" :src="statusIcon" mode="aspectFit"></image>
<text v-if="message" class="popup-panel__status-text asset-number-font">{{
message
}}</text>
</view>
<text v-else-if="message" class="popup-panel__message asset-number-font">{{
message
}}</text>
<text v-if="description" class="popup-panel__description asset-number-font">{{
description
}}</text>
<view v-if="$slots.default" class="popup-panel__body">
<slot />
</view>
<view class="popup-panel__footer" :class="{ 'popup-panel__footer--single': !showCancel }">
<view v-if="showCancel" class="popup-panel__btn popup-panel__btn--ghost" style="height: 64rpx"
@click="$emit('cancel')">
{{ cancelText }}
</view>
<view class="popup-panel__btn popup-panel__btn--primary" style="height: 64rpx" @click="$emit('confirm')">
{{ confirmText }}
</view>
</view>
</view>
</view>
</template>
<script>
export default {
props: {
visible: {
type: Boolean,
default: false,
},
title: {
type: String,
default: "提示",
},
message: {
type: String,
default: "",
},
description: {
type: String,
default: "",
},
confirmText: {
type: String,
default: "确认",
},
cancelText: {
type: String,
default: "取消",
},
showCancel: {
type: Boolean,
default: true,
},
showClose: {
type: Boolean,
default: true,
},
closeOnMask: {
type: Boolean,
default: true,
},
status: {
type: String,
default: "default",
},
panelClass: {
type: String,
default: "",
},
},
computed: {
showStatusBlock() {
return this.status === "success" || this.status === "error";
},
statusIcon() {
if (this.status === "success") {
return "https://imgs.agrimedia.cn/bm-bmt/success.png";
}
if (this.status === "error") {
return "https://imgs.agrimedia.cn/bm-bmt/fail.png";
}
return "";
},
},
methods: {
noop() { },
handleMaskClick() {
if (this.closeOnMask) {
this.$emit("cancel");
}
},
},
};
</script>
<style lang="scss" scoped>
@import "../../styles/tokens.scss";
.popup-mask {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
inset: 0;
z-index: 80;
display: flex;
align-items: center;
justify-content: center;
padding: 24rpx;
}
.popup-mask__backdrop {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
inset: 0;
background: rgba(5, 10, 22, 0.72);
}
.popup-panel {
position: relative;
width: 100%;
max-width: 600rpx;
padding: 30rpx 28rpx 32rpx;
border-radius: 28rpx;
border: 1px solid rgba(142, 157, 206, 0.14);
background: #2a2f4d;
box-shadow: 0 30rpx 70rpx rgba(0, 0, 0, 0.28);
}
.popup-panel__head {
position: relative;
display: flex;
align-items: center;
justify-content: center;
min-height: 44rpx;
}
.popup-panel__title {
display: block;
width: 100%;
padding: 0 56rpx;
font-size: 32rpx;
font-weight: 500;
text-align: center;
color: #ffffff;
}
.popup-panel__close {
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
display: flex;
align-items: center;
justify-content: center;
width: 44rpx;
height: 44rpx;
}
.popup-panel__close-image {
width: 28rpx;
height: 28rpx;
}
.popup-panel__message {
display: block;
margin-top: 34rpx;
font-size: 30rpx;
line-height: 1.8;
color: #edf2ff;
}
.popup-panel__status {
display: flex;
align-items: center;
justify-content: center;
margin-top: 46rpx;
}
.popup-panel__status-image {
width: 54rpx;
height: 54rpx;
flex-shrink: 0;
}
.popup-panel__status-text {
margin-left: 18rpx;
font-size: 24rpx;
font-weight: 600;
color: #edf2ff;
}
.popup-panel__description {
display: block;
margin-top: 34rpx;
font-size: 26rpx;
line-height: 1.7;
text-align: center;
color: rgba(201, 209, 233, 0.86);
}
.popup-panel__body {
margin-top: 22rpx;
font-size: 28rpx;
}
.popup-panel__footer {
display: flex;
align-items: center;
gap: 18rpx;
margin-top: 40rpx;
}
.popup-panel__footer--single {
justify-content: center;
}
.popup-panel__btn {
display: flex;
align-items: center;
justify-content: center;
flex: 1;
height: 64rpx;
border-radius: 12rpx;
font-size: 28rpx;
font-weight: 700;
}
.popup-panel__footer--single .popup-panel__btn {
flex: 0 0 232rpx;
}
.popup-panel__btn--ghost {
border: 1px solid rgba(157, 173, 221, 0.44);
background: rgba(77, 89, 129, 0.28);
color: #ffffff;
}
.popup-panel__btn--primary {
background: #02ABF1;
color: #ffffff;
}
</style>

View File

@ -18,6 +18,7 @@ const serviceConfig = {
spreadCommission: "/api/spread/commission",
powerExchangeSubmit: "/api/hn/redeem/power",
bmtFlashExchangeSubmit: "/api/hn/redeem/justRedeem",
bmtrExchangePercent: "/api/hn/redeem/getBmtrPercent",
powerExchangeMuit: "/api/hn/redeem/getMuit",
bmtRedeemPowerRate: "/api/hn/redeem/getRedeemPowerRate",
bmtExchangeSubmit: "/api/hn/redeem/redeem_bmt",

View File

@ -77,7 +77,7 @@
"devServer" : {
"proxy" : {
"/api" : {
"target" : "https__UNI__B250220",
"target" : "https://tpoint.agrimedia.cn",
"changeOrigin" : true,
"secure" : false
}

View File

@ -7,15 +7,11 @@
<view class="hero-card__content">
<view class="hero-card__coin-row">
<view class="hero-card__coin">
<image
class="hero-card__coin-image"
:src="pageIcon('bmt')"
mode="aspectFit"
></image>
<image class="hero-card__coin-image" :src="pageIcon('bmt')" mode="aspectFit"></image>
</view>
<text class="hero-card__coin-text">BMT</text>
</view>
<text class="hero-card__label">可用1BMT:</text>
<text class="hero-card__label">可用BMT:</text>
<text class="hero-card__value asset-number-font">{{ displayBmt }}</text>
</view>
</view>
@ -23,11 +19,7 @@
<view class="panel-card info-card">
<view class="info-row">
<view class="info-row__left">
<image
class="info-row__icon"
:src="pageIcon('voucher')"
mode="aspectFit"
></image>
<image class="info-row__icon" :src="pageIcon('voucher')" mode="aspectFit"></image>
<text class="info-row__label">我的算力</text>
</view>
<text class="info-row__value asset-number-font">{{ displayVoucher }}</text>
@ -35,11 +27,7 @@
<view class="info-row">
<view class="info-row__left">
<image
class="info-row__icon"
:src="pageIcon('coupon')"
mode="aspectFit"
></image>
<image class="info-row__icon" :src="pageIcon('coupon')" mode="aspectFit"></image>
<text class="info-row__label">可用积分</text>
</view>
<text class="info-row__value asset-number-font">{{ displayCoupon }}</text>
@ -47,11 +35,8 @@
<view class="info-row info-row--last">
<view class="info-row__left">
<image
class="info-row__icon"
src="https://imgs.agrimedia.cn/bm-bmt/b.png"
mode="aspectFit"
></image>
<image class="info-row__icon" src="https://imgs.agrimedia.cn/bm-bmt/b.png" mode="aspectFit">
</image>
<text class="info-row__label">BMT实时价格</text>
</view>
<view class="info-row__price">
@ -69,22 +54,14 @@
<view class="panel-card form-card">
<view class="form-card__title">
<image
class="form-card__title-icon"
src="https://imgs.agrimedia.cn/bm-bmt/b.png"
mode="aspectFit"
></image>
<image class="form-card__title-icon" src="https://imgs.agrimedia.cn/bm-bmt/b.png" mode="aspectFit">
</image>
<text class="form-card__title-text">BMT兑换</text>
</view>
<view class="form-input">
<decimal-input
v-model="form.points"
class="form-input__field asset-number-font"
:digit="0"
placeholder="请输入积分数量"
placeholder-style="color: rgba(177, 187, 214, 0.42);"
/>
<decimal-input v-model="form.points" class="form-input__field asset-number-font" :digit="0"
placeholder="请输入积分数量" placeholder-style="color: rgba(177, 187, 214, 0.42);" />
<text class="form-input__suffix">可用积分</text>
</view>
@ -97,9 +74,7 @@
</view>
<view class="preview-card__row">
<view class="preview-card__left">
<text class="preview-card__label" style="color: #fff"
>消耗算力</text
>
<text class="preview-card__label" style="color: #fff">消耗算力</text>
</view>
<text class="preview-card__value preview-card__value--light asset-number-font">{{
powerCost
@ -109,11 +84,7 @@
<view class="tips-block">
<text class="tips-block__title">兑换说明</text>
<view
v-for="(tip, index) in normalizedTips"
:key="tip"
class="tips-block__item"
>
<view v-for="(tip, index) in normalizedTips" :key="tip" class="tips-block__item">
<text class="tips-block__index asset-number-font">{{ index + 1 }}.</text>
<text class="tips-block__text asset-number-font">{{ tip }}</text>
</view>
@ -121,22 +92,15 @@
</view>
<view class="action-wrap">
<view class="action-button" @click="confirmVisible = true"
>确认兑换</view
>
<view class="action-button" @touchend.stop.prevent="openConfirm" @tap.stop="openConfirm"
@click.stop="openConfirm">确认兑换</view>
<view class="action-link" @click="openLedger">兑换记录</view>
</view>
</view>
<asset-confirm-popup
:visible="confirmVisible"
title="兑换提示"
:message="
<confirm-popup :visible="confirmVisible" title="兑换提示" :message="
'确认使用 ' + formatAmount(pointsValue, 0) + ' 积分兑换 BMT 吗?'
"
@cancel="confirmVisible = false"
@confirm="submit"
>
" @cancel="confirmVisible = false" @confirm="submit">
<view class="popup-line">
<text class="meta-pair__label">预估兑换BMT</text>
<text class="meta-pair__value asset-number-font">{{ estimateBmt }}</text>
@ -149,12 +113,12 @@
<text class="meta-pair__label">消耗算力</text>
<text class="meta-pair__value asset-number-font">{{ powerCost }}</text>
</view>
</asset-confirm-popup>
</confirm-popup>
</view>
</template>
<script>
import AssetConfirmPopup from "../../components/asset-confirm-popup.vue";
import ConfirmPopup from "../../components/confirm-popup/confirm-popup.vue";
import AssetPageShell from "../../components/asset-page-shell.vue";
import DecimalInput from "../../components/DecimalInput/DecimalInput.vue";
import {
@ -164,7 +128,7 @@ import {
export default {
components: {
AssetConfirmPopup,
ConfirmPopup,
AssetPageShell,
DecimalInput,
},
@ -293,12 +257,12 @@ export default {
async loadPage(showLoading) {
try {
this.detail = await fetchBmtExchangeDetail(
showLoading
? {
showLoading ?
{
showLoading: true,
loadingText: "加载中",
}
: null,
} :
null,
);
} catch (error) {
uni.showToast({
@ -307,6 +271,13 @@ export default {
});
}
},
openConfirm() {
if (this.submitting || this.confirmVisible) {
return;
}
this.confirmVisible = true;
},
async submit() {
if (this.submitting) {
return;
@ -396,7 +367,7 @@ export default {
}
.bmt-scroll {
padding: 8rpx 20rpx;
padding: 8rpx 20rpx calc(env(safe-area-inset-bottom) + 36rpx);
}
.panel-card,
@ -410,8 +381,7 @@ export default {
min-height: 240rpx;
padding: 24rpx 28rpx;
overflow: hidden;
background: #20263e url("https://imgs.agrimedia.cn/bm-bmt/bmt2-header.png")
no-repeat center top / 100% 240rpx;
background: #20263e url("https://imgs.agrimedia.cn/bm-bmt/bmt2-header.png") no-repeat center top / 100% 240rpx;
}
.hero-card__content {
@ -666,10 +636,14 @@ export default {
}
.action-wrap {
position: relative;
z-index: 30;
padding: 36rpx 22rpx 0;
}
.action-button {
position: relative;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
@ -681,6 +655,8 @@ export default {
font-size: 30rpx;
font-weight: 700;
color: #ffffff;
cursor: pointer;
touch-action: manipulation;
}
.action-link {

View File

@ -18,6 +18,13 @@
<text class="hero-card__label">可用BMT数量:</text>
<text class="hero-card__value asset-number-font">{{ displayBmt }}</text>
</view>
<view class="hero-card__price">
<text class="hero-card__price-label">BMT实时价格</text>
<view class="hero-card__price-row">
<text class="hero-card__price-value asset-number-font">{{ displayPrice }}</text>
<text class="hero-card__price-unit">BMT/CNY</text>
</view>
</view>
</view>
<view class="panel-card info-card">
@ -61,18 +68,15 @@
<view class="info-row__left">
<image
class="info-row__icon"
:src="pageIcon('bmt')"
:src="pageIcon('bmtr')"
mode="aspectFit"
></image>
<text class="info-row__label">BMT实时价格</text>
</view>
<view class="info-row__price">
<text class="info-row__value asset-number-font">{{ displayPrice }}</text>
<text class="info-row__unit">BMT/CNY</text>
<text class="info-row__label">BMTR数量</text>
</view>
<text class="info-row__value asset-number-font">{{ displayBmtr }}</text>
</view>
<view class="info-card__estimate">
<view v-if="!isBmtrMode" class="info-card__estimate">
<text>全部闪兑预估可得</text>
<text class="info-card__estimate-value asset-number-font">{{ allEstimateBmt }}</text>
<text>BMT</text>
@ -175,10 +179,13 @@ export default {
{ label: "抵用券闪兑", value: "voucher" },
{ label: "消费券闪兑", value: "coupon" },
{ label: "余额闪兑", value: "balance" },
{ label: "BMTR闪兑", value: "bmtr" },
],
detail: {
ticker: {},
balances: {},
bmtrPercent: "",
bmtrRatio: "",
tips: [],
},
hasShown: false,
@ -216,6 +223,10 @@ export default {
return Number(this.form.amount || 0);
},
currentModeLabel() {
if (this.form.mode === "bmtr") {
return "BMTR";
}
if (this.form.mode === "coupon") {
return "消费券";
}
@ -227,6 +238,10 @@ export default {
return "抵用券";
},
currentModeBalance() {
if (this.form.mode === "bmtr") {
return Number(this.detail.balances.bmtr || 0);
}
if (this.form.mode === "coupon") {
return Number(this.detail.balances.coupon || 0);
}
@ -240,14 +255,68 @@ export default {
priceNumber() {
return Number(this.detail.ticker.close || this.detail.ticker.cnyPrice || 0);
},
isBmtrMode() {
return this.form.mode === "bmtr";
},
bmtrPercentNumber() {
const percent = Number(this.detail.bmtrPercent);
return Number.isFinite(percent) && percent > 0 ? percent : 0;
},
hasBmtrPercent() {
return this.bmtrPercentNumber > 0;
},
bmtrRatioNumber() {
const ratio = Number(this.detail.bmtrRatio);
return Number.isFinite(ratio) && ratio > 0 ? ratio : 0;
},
hasBmtrRatio() {
return this.bmtrRatioNumber > 0;
},
bmtrExchangeRate() {
return Math.max(0, (100 - this.bmtrPercentNumber) / 100);
},
displayBmtrRatio() {
if (!this.hasBmtrRatio) {
return "--";
}
return String(this.detail.bmtrRatio);
},
displayBmtrPercent() {
if (!this.hasBmtrPercent) {
return "--";
}
const value = this.bmtrPercentNumber;
return Number.isInteger(value) ? String(value) : String(value);
},
estimateBmt() {
if (!this.amountValue || !this.priceNumber) {
if (!this.amountValue) {
return "0";
}
if (this.isBmtrMode) {
if (!this.hasBmtrPercent || !this.hasBmtrRatio) {
return "--";
}
return this.formatAmount(
this.amountValue * this.bmtrRatioNumber * this.bmtrExchangeRate,
2,
);
}
if (!this.priceNumber) {
return "0";
}
return this.formatAmount(this.amountValue / this.priceNumber, 2);
},
allEstimateBmt() {
if (this.isBmtrMode) {
return "0";
}
if (!this.priceNumber) {
return "0";
}
@ -271,19 +340,36 @@ export default {
displayCoupon() {
return this.formatAmount(this.detail.balances.coupon, 2);
},
displayBmtr() {
return this.formatAmount(this.detail.balances.bmtr, 4);
},
displayPrice() {
return this.priceNumber ? this.priceNumber : "0.00";
},
displayInputAmount() {
return this.formatAmount(this.amountValue, this.isBmtrMode ? 2 : 0);
},
normalizedTips() {
if (this.detail.tips && this.detail.tips.length) {
return this.detail.tips;
}
return [
const tips =
this.detail.tips && this.detail.tips.length
? this.detail.tips
: [
"BMT闪兑 = 输入数量 ÷ BMT实时价格",
"BMT闪兑时所需的抵用券、消费券、余额。必须大于10的倍数。",
"闪兑成功后数量将直接结算到可用BMT。",
];
if (!this.isBmtrMode) {
return tips;
}
return tips.concat([
"BMTR兑换BMT1:" +
this.displayBmtrRatio +
"兑换,按兑换数量扣除" +
this.displayBmtrPercent +
"%手续费兑换最小数量必须是10的倍数",
]);
},
},
methods: {
@ -297,6 +383,7 @@ export default {
voucher: "https://imgs.agrimedia.cn/bm-bmt/quan-icon-g%20%281%29.png",
points: "https://imgs.agrimedia.cn/bm-bmt/j.png",
coupon: "https://imgs.agrimedia.cn/bm-bmt/xiaofei-icon-o.png",
bmtr: "https://imgs.agrimedia.cn/webimg/202607171808386371853.svg",
};
return iconMap[type] || "";
@ -375,7 +462,16 @@ export default {
return;
}
if (this.amountValue < 10) {
if (this.isBmtrMode && this.amountValue < 0.01) {
this.openResultDialog(
"error",
"闪兑失败!",
"BMTR闪兑最小数量为0.01。",
);
return;
}
if (!this.isBmtrMode && this.amountValue < 10) {
this.openResultDialog(
"error",
"闪兑失败!",
@ -397,7 +493,7 @@ export default {
title: "确认闪兑",
message:
"确认使用" +
this.formatAmount(this.amountValue, 0) +
this.displayInputAmount +
this.currentModeLabel +
"闪兑BMT?",
description: "预估可得 " + this.estimateBmt + " BMT",
@ -491,6 +587,7 @@ export default {
z-index: 1;
display: flex;
flex-direction: column;
max-width: 360rpx;
}
.hero-card__coin-row {
@ -532,6 +629,43 @@ export default {
font-weight: 800;
line-height: 1.1;
color: #ffffff;
word-break: break-all;
}
.hero-card__price {
position: absolute;
right: 36rpx;
top: 104rpx;
z-index: 2;
min-width: 220rpx;
padding: 18rpx 22rpx;
border-radius: 10rpx;
background: rgba(28, 35, 61, 0.82);
box-shadow: 0 14rpx 30rpx rgba(6, 10, 24, 0.24);
}
.hero-card__price-label {
display: block;
font-size: 26rpx;
color: rgba(225, 232, 255, 0.86);
}
.hero-card__price-row {
display: flex;
align-items: baseline;
margin-top: 12rpx;
}
.hero-card__price-value {
font-size: 34rpx;
font-weight: 800;
color: #ffffff;
}
.hero-card__price-unit {
margin-left: 10rpx;
font-size: 20rpx;
color: rgba(225, 232, 255, 0.72);
}
.panel-card {
@ -581,17 +715,6 @@ export default {
color: #ffffff;
}
.info-row__price {
display: flex;
align-items: baseline;
}
.info-row__unit {
margin-left: 10rpx;
font-size: 22rpx;
color: rgba(184, 193, 218, 0.88);
}
.info-card__estimate {
display: flex;
align-items: baseline;
@ -633,7 +756,7 @@ export default {
.mode-tabs {
display: flex;
width: 600rpx;
width: 100%;
margin: 26rpx auto 0;
padding: 4rpx;
border-radius: 999rpx;
@ -648,8 +771,9 @@ export default {
flex: 1;
height: 60rpx;
border-radius: 999rpx;
font-size: 28rpx;
font-size: 24rpx;
font-weight: 600;
white-space: nowrap;
color: rgba(210, 219, 242, 0.72);
}

View File

@ -136,8 +136,8 @@
</view>
<view class="action-wrap">
<view class="action-button" @click="openConfirmDialog">确认兑换</view>
<view class="action-link" @click="openLedger">兑换记录</view>
<view class="action-button" @tap="openConfirmDialog">确认兑换</view>
<view class="action-link" @tap="openLedger">兑换记录</view>
</view>
</view>

View File

@ -1,2 +1,2 @@
<!DOCTYPE html><html lang=zh-CN><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><title>白马交易所</title><script>var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/bmt/static/index.883130ca.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/bmt/static/js/chunk-vendors.a58c62f3.js></script><script src=/bmt/static/js/index.c4c7e156.js></script></body></html>
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/bmt/static/index.883130ca.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/bmt/static/js/chunk-vendors.a58c62f3.js></script><script src=/bmt/static/js/index.75c16dcc.js></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long