新增BMTR转赠:转赠页BMTR选项卡、BMTR余额/手续费接口、BMTR转赠记录
This commit is contained in:
parent
ee88485316
commit
ce8d83b510
141
api/assets.js
141
api/assets.js
|
|
@ -269,8 +269,9 @@ function buildHomeOverview(balanceData, tickerData, userData) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildTransferTips(feePercent) {
|
function buildTransferTips(feePercent, bmtrFeePercent) {
|
||||||
const percentText = toNumber(feePercent) || 10;
|
const percentText = toNumber(feePercent) || 10;
|
||||||
|
const bmtrPercentText = toNumber(bmtrFeePercent) || 10;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
points: [
|
points: [
|
||||||
|
|
@ -279,6 +280,10 @@ function buildTransferTips(feePercent) {
|
||||||
"转赠系统会扣除" + percentText + "%的手续费",
|
"转赠系统会扣除" + percentText + "%的手续费",
|
||||||
],
|
],
|
||||||
power: ["只能转赠1的整数倍", "转赠系统会扣除" + percentText + "%的手续费"],
|
power: ["只能转赠1的整数倍", "转赠系统会扣除" + percentText + "%的手续费"],
|
||||||
|
bmtr: [
|
||||||
|
"只能转赠1的整数倍",
|
||||||
|
"转赠系统会扣除" + bmtrPercentText + "%的手续费",
|
||||||
|
],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -981,6 +986,58 @@ function mapTransferRecords(list) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function mapBmtrTransferRecords(list) {
|
||||||
|
return normalizeListData(list).map(function (item) {
|
||||||
|
// 交易类型:0 支出,1 收入,2 退回
|
||||||
|
const bmtrType = Number(item && item.bmtr_type);
|
||||||
|
const isIncome = bmtrType === 1 || bmtrType === 2;
|
||||||
|
const amountValue = Math.abs(toNumber(item && item.bmtr));
|
||||||
|
const orderSn = String(pickFirstValue(item, ["order_sn", "sn"]) || "");
|
||||||
|
const tipsText = String(
|
||||||
|
pickFirstValue(item, ["bmtr_type_tips", "title"]) || "",
|
||||||
|
);
|
||||||
|
const titleText =
|
||||||
|
tipsText ||
|
||||||
|
(bmtrType === 2 ? "BMTR退回" : isIncome ? "BMTR获赠" : "BMTR转赠");
|
||||||
|
const balanceValue = pickFirstValue(item, [
|
||||||
|
"bmtr_after",
|
||||||
|
"balance",
|
||||||
|
"after_balance",
|
||||||
|
]);
|
||||||
|
const feeValue = extractTransferTitleFeeValue({ title: tipsText });
|
||||||
|
|
||||||
|
return {
|
||||||
|
id: buildRecordId(item, "bmtr-transfer"),
|
||||||
|
title: titleText,
|
||||||
|
subtitle: orderSn ? "单号 " + orderSn : tipsText,
|
||||||
|
time: String(
|
||||||
|
pickFirstValue(item, ["add_time", "create_time", "created_at", "time"]) ||
|
||||||
|
"",
|
||||||
|
),
|
||||||
|
amount: (isIncome ? "+" : "-") + formatTransferRecordNumber(amountValue),
|
||||||
|
balance:
|
||||||
|
balanceValue !== ""
|
||||||
|
? "结余 " + formatTransferRecordNumber(balanceValue) + " BMTR"
|
||||||
|
: "",
|
||||||
|
balanceLabel:
|
||||||
|
balanceValue !== ""
|
||||||
|
? "剩余BMTR:" + formatTransferRecordNumber(balanceValue)
|
||||||
|
: "本次到账BMTR",
|
||||||
|
assetLabel: "BMTR",
|
||||||
|
feeText:
|
||||||
|
feeValue !== ""
|
||||||
|
? "手续费: " + formatHomeNumber(toNumber(feeValue), 2)
|
||||||
|
: "",
|
||||||
|
directionLabel: bmtrType === 2 ? "退回" : isIncome ? "转入" : "转出",
|
||||||
|
actionSymbol: isIncome ? "+" : "-",
|
||||||
|
orderSn: orderSn,
|
||||||
|
tag: isIncome ? "收" : "赠",
|
||||||
|
tone: isIncome ? "success" : "danger",
|
||||||
|
cardTone: isIncome ? "success" : "danger",
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function mapPointsConvertRecords(list) {
|
function mapPointsConvertRecords(list) {
|
||||||
return normalizeListData(list).map(function (item) {
|
return normalizeListData(list).map(function (item) {
|
||||||
const rawTransferPointValue = pickFirstValue(item, [
|
const rawTransferPointValue = pickFirstValue(item, [
|
||||||
|
|
@ -1495,6 +1552,30 @@ async function fetchTransferFeeData(requestOptions) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function fetchTransferBmtrFeeData(requestOptions) {
|
||||||
|
return fetchPayload(
|
||||||
|
createRequestOptions(
|
||||||
|
{
|
||||||
|
url: serviceConfig.ENDPOINTS.transferBmtrFee,
|
||||||
|
},
|
||||||
|
requestOptions,
|
||||||
|
),
|
||||||
|
"BMTR手续费比例加载失败",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchTransferBmtrBalanceData(requestOptions) {
|
||||||
|
return fetchPayload(
|
||||||
|
createRequestOptions(
|
||||||
|
{
|
||||||
|
url: serviceConfig.ENDPOINTS.transferBmtrBalance,
|
||||||
|
},
|
||||||
|
requestOptions,
|
||||||
|
),
|
||||||
|
"BMTR余额加载失败",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
async function fetchWithdrawRateData(requestOptions) {
|
async function fetchWithdrawRateData(requestOptions) {
|
||||||
return fetchPayload(
|
return fetchPayload(
|
||||||
createRequestOptions(
|
createRequestOptions(
|
||||||
|
|
@ -1653,6 +1734,19 @@ async function fetchTransferLedgerData(pagination, requestOptions) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function fetchBmtrTransferLedgerData(pagination, requestOptions) {
|
||||||
|
return fetchPayload(
|
||||||
|
createRequestOptions(
|
||||||
|
{
|
||||||
|
url: serviceConfig.ENDPOINTS.transferBmtrList,
|
||||||
|
data: buildPagingRequestData({}, pagination),
|
||||||
|
},
|
||||||
|
requestOptions,
|
||||||
|
),
|
||||||
|
"BMTR转赠记录加载失败",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
async function fetchWalletFlowListData(flowType, pagination, requestOptions) {
|
async function fetchWalletFlowListData(flowType, pagination, requestOptions) {
|
||||||
return fetchPayload(
|
return fetchPayload(
|
||||||
createRequestOptions(
|
createRequestOptions(
|
||||||
|
|
@ -1879,17 +1973,26 @@ export async function fetchTransferDetail(requestOptions) {
|
||||||
const result = await Promise.all([
|
const result = await Promise.all([
|
||||||
fetchHomeBalanceData(requestOptions),
|
fetchHomeBalanceData(requestOptions),
|
||||||
fetchTransferFeeData(requestOptions),
|
fetchTransferFeeData(requestOptions),
|
||||||
|
fetchTransferBmtrBalanceData(requestOptions),
|
||||||
|
fetchTransferBmtrFeeData(requestOptions),
|
||||||
]);
|
]);
|
||||||
const balances = normalizeBalances(result[0]);
|
const balances = normalizeBalances(result[0]);
|
||||||
const feePercent = toNumber(result[1] && result[1].r) || 10;
|
const feePercent = toNumber(result[1] && result[1].r) || 10;
|
||||||
|
const bmtrFeePercent = toNumber(result[3] && result[3].r) || 10;
|
||||||
|
// 转赠数量只能为整数,余额向下取整展示,避免全部赠送时超出实际可用
|
||||||
|
const bmtrBalance = Math.floor(
|
||||||
|
toNumber(result[2] && result[2].balance),
|
||||||
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
balances: {
|
balances: {
|
||||||
points: toFixedNumber(balances.points, 0),
|
points: toFixedNumber(balances.points, 0),
|
||||||
power: toFixedNumber(balances.power, 0),
|
power: toFixedNumber(balances.power, 0),
|
||||||
|
bmtr: String(bmtrBalance),
|
||||||
},
|
},
|
||||||
feePercent: feePercent,
|
feePercent: feePercent,
|
||||||
tips: buildTransferTips(feePercent),
|
bmtrFeePercent: bmtrFeePercent,
|
||||||
|
tips: buildTransferTips(feePercent, bmtrFeePercent),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1917,7 +2020,9 @@ export async function searchTransferUser(uid, requestOptions) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function submitAssetTransfer(payload, requestOptions) {
|
export async function submitAssetTransfer(payload, requestOptions) {
|
||||||
const transferType = payload && payload.type === "power" ? "power" : "points";
|
const rawType = payload && payload.type;
|
||||||
|
const transferType =
|
||||||
|
rawType === "power" ? "power" : rawType === "bmtr" ? "bmtr" : "points";
|
||||||
const targetId = String(
|
const targetId = String(
|
||||||
payload && payload.targetId ? payload.targetId : "",
|
payload && payload.targetId ? payload.targetId : "",
|
||||||
).trim();
|
).trim();
|
||||||
|
|
@ -1931,15 +2036,21 @@ export async function submitAssetTransfer(payload, requestOptions) {
|
||||||
throw createError("请输入转赠数量");
|
throw createError("请输入转赠数量");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const submitUrl =
|
||||||
|
transferType === "power"
|
||||||
|
? serviceConfig.ENDPOINTS.transferPowerSubmit
|
||||||
|
: transferType === "bmtr"
|
||||||
|
? serviceConfig.ENDPOINTS.transferBmtrSubmit
|
||||||
|
: serviceConfig.ENDPOINTS.transferPointsSubmit;
|
||||||
|
|
||||||
const result = await Promise.all([
|
const result = await Promise.all([
|
||||||
fetchTransferFeeData(requestOptions),
|
transferType === "bmtr"
|
||||||
|
? fetchTransferBmtrFeeData(requestOptions)
|
||||||
|
: fetchTransferFeeData(requestOptions),
|
||||||
fetchPayload(
|
fetchPayload(
|
||||||
createRequestOptions(
|
createRequestOptions(
|
||||||
{
|
{
|
||||||
url:
|
url: submitUrl,
|
||||||
transferType === "power"
|
|
||||||
? serviceConfig.ENDPOINTS.transferPowerSubmit
|
|
||||||
: serviceConfig.ENDPOINTS.transferPointsSubmit,
|
|
||||||
method: "POST",
|
method: "POST",
|
||||||
data: {
|
data: {
|
||||||
uid: targetId,
|
uid: targetId,
|
||||||
|
|
@ -2224,6 +2335,20 @@ export async function fetchLedgerDetail(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (type === "bmtr-transfer") {
|
||||||
|
const data = await fetchBmtrTransferLedgerData(
|
||||||
|
pagination,
|
||||||
|
mergedRequestOptions,
|
||||||
|
);
|
||||||
|
return {
|
||||||
|
type: type,
|
||||||
|
title: "转赠记录",
|
||||||
|
subtitle: "BMTR转赠流水",
|
||||||
|
records: mapBmtrTransferRecords(data),
|
||||||
|
pagination: buildPaginationMeta(data, pagination),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
if (type === "points") {
|
if (type === "points") {
|
||||||
const data = await fetchWalletFlowListData(
|
const data = await fetchWalletFlowListData(
|
||||||
0,
|
0,
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,10 @@ const serviceConfig = {
|
||||||
transferPowerSubmit: "/api/hn/transfer/transferPower",
|
transferPowerSubmit: "/api/hn/transfer/transferPower",
|
||||||
transferPointsSubmit: "/api/hn/transfer/transferPoint",
|
transferPointsSubmit: "/api/hn/transfer/transferPoint",
|
||||||
transferLedger: "/api/hn/transfer/transferList",
|
transferLedger: "/api/hn/transfer/transferList",
|
||||||
|
transferBmtrSubmit: "/api/hn/transfer/transferBmtr",
|
||||||
|
transferBmtrFee: "/api/hn/transfer/getPropBmtr",
|
||||||
|
transferBmtrBalance: "/api/hn/transfer/getBmtrBalance",
|
||||||
|
transferBmtrList: "/api/hn/transfer/getBmtrList",
|
||||||
walletFlowList: "/api/hn/wallet_flow/getList",
|
walletFlowList: "/api/hn/wallet_flow/getList",
|
||||||
redeemRecordList: "/api/hn/redeem/redeemList",
|
redeemRecordList: "/api/hn/redeem/redeemList",
|
||||||
coinIndex: "/api/coin/index",
|
coinIndex: "/api/coin/index",
|
||||||
|
|
|
||||||
|
|
@ -185,6 +185,7 @@ export default {
|
||||||
isTransferLedger() {
|
isTransferLedger() {
|
||||||
return [
|
return [
|
||||||
"transfer",
|
"transfer",
|
||||||
|
"bmtr-transfer",
|
||||||
"points",
|
"points",
|
||||||
"power-flow",
|
"power-flow",
|
||||||
"power",
|
"power",
|
||||||
|
|
@ -221,6 +222,7 @@ export default {
|
||||||
pageMark() {
|
pageMark() {
|
||||||
const markMap = {
|
const markMap = {
|
||||||
transfer: "⇄",
|
transfer: "⇄",
|
||||||
|
"bmtr-transfer": "B",
|
||||||
power: "⚡",
|
power: "⚡",
|
||||||
bmt: "D",
|
bmt: "D",
|
||||||
"bmt-flash": "D",
|
"bmt-flash": "D",
|
||||||
|
|
@ -234,6 +236,10 @@ export default {
|
||||||
},
|
},
|
||||||
onLoad(options) {
|
onLoad(options) {
|
||||||
this.type = (options && options.type) || "transfer";
|
this.type = (options && options.type) || "transfer";
|
||||||
|
// 携带 value=bmtr 时,改请求 BMTR 转赠记录接口
|
||||||
|
if (options && options.value === "bmtr") {
|
||||||
|
this.type = "bmtr-transfer";
|
||||||
|
}
|
||||||
this.resetPagingState();
|
this.resetPagingState();
|
||||||
this.loadPage(true, 1);
|
this.loadPage(true, 1);
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
<view class="section-head">
|
<view class="section-head">
|
||||||
<image
|
<image
|
||||||
class="section-head__icon"
|
class="section-head__icon"
|
||||||
:src="pageIcon(activeTab === 'power' ? 'power' : 'points')"
|
:src="pageIcon(activeTab)"
|
||||||
mode="aspectFit"
|
mode="aspectFit"
|
||||||
></image>
|
></image>
|
||||||
<text class="section-head__title">{{ currentTabLabel }}转赠</text>
|
<text class="section-head__title">{{ currentTabLabel }}转赠</text>
|
||||||
|
|
@ -206,6 +206,10 @@ export default {
|
||||||
label: "算力转赠",
|
label: "算力转赠",
|
||||||
value: "power",
|
value: "power",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: "BMTR转赠",
|
||||||
|
value: "bmtr",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
activeTab: "points",
|
activeTab: "points",
|
||||||
targets: [],
|
targets: [],
|
||||||
|
|
@ -213,8 +217,10 @@ export default {
|
||||||
balances: {
|
balances: {
|
||||||
points: "0",
|
points: "0",
|
||||||
power: "0",
|
power: "0",
|
||||||
|
bmtr: "0",
|
||||||
},
|
},
|
||||||
feePercent: 10,
|
feePercent: 10,
|
||||||
|
bmtrFeePercent: 10,
|
||||||
tips: {
|
tips: {
|
||||||
points: [],
|
points: [],
|
||||||
power: [],
|
power: [],
|
||||||
|
|
@ -235,7 +241,16 @@ export default {
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
currentTabLabel() {
|
currentTabLabel() {
|
||||||
return this.activeTab === "power" ? "算力" : "可用积分";
|
if (this.activeTab === "power") {
|
||||||
|
return "算力";
|
||||||
|
}
|
||||||
|
if (this.activeTab === "bmtr") {
|
||||||
|
return "BMTR";
|
||||||
|
}
|
||||||
|
return "可用积分";
|
||||||
|
},
|
||||||
|
currentFeePercent() {
|
||||||
|
return this.activeTab === "bmtr" ? this.bmtrFeePercent : this.feePercent;
|
||||||
},
|
},
|
||||||
currentBalance() {
|
currentBalance() {
|
||||||
return Number(this.balances[this.activeTab] || 0);
|
return Number(this.balances[this.activeTab] || 0);
|
||||||
|
|
@ -252,14 +267,21 @@ export default {
|
||||||
if (this.activeTab === "power") {
|
if (this.activeTab === "power") {
|
||||||
return [
|
return [
|
||||||
"只能转赠1的整数倍",
|
"只能转赠1的整数倍",
|
||||||
"转赠系统会扣除" + this.feePercent + "%的手续费",
|
"转赠系统会扣除" + this.currentFeePercent + "%的手续费",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.activeTab === "bmtr") {
|
||||||
|
return [
|
||||||
|
"只能转赠1的整数倍",
|
||||||
|
"转赠系统会扣除" + this.currentFeePercent + "%的手续费",
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
"只能转赠1的整数倍",
|
"只能转赠1的整数倍",
|
||||||
"凌晨0点-凌晨01点系统维护不可赠送",
|
"凌晨0点-凌晨01点系统维护不可赠送",
|
||||||
"转赠系统会扣除" + this.feePercent + "%的手续费",
|
"转赠系统会扣除" + this.currentFeePercent + "%的手续费",
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
currentTarget() {
|
currentTarget() {
|
||||||
|
|
@ -273,7 +295,7 @@ export default {
|
||||||
},
|
},
|
||||||
receivedDisplay() {
|
receivedDisplay() {
|
||||||
const received = this.amountValue
|
const received = this.amountValue
|
||||||
? this.amountValue * (1 - this.feePercent / 100)
|
? this.amountValue * (1 - this.currentFeePercent / 100)
|
||||||
: 0;
|
: 0;
|
||||||
return this.formatAmount(received, 2);
|
return this.formatAmount(received, 2);
|
||||||
},
|
},
|
||||||
|
|
@ -291,6 +313,7 @@ export default {
|
||||||
voucher: "https://imgs.agrimedia.cn/bm-bmt/quan-icon.png",
|
voucher: "https://imgs.agrimedia.cn/bm-bmt/quan-icon.png",
|
||||||
points: "https://imgs.agrimedia.cn/bm-bmt/j.png",
|
points: "https://imgs.agrimedia.cn/bm-bmt/j.png",
|
||||||
coupon: "https://imgs.agrimedia.cn/bm-bmt/xiaofei-icon.png",
|
coupon: "https://imgs.agrimedia.cn/bm-bmt/xiaofei-icon.png",
|
||||||
|
bmtr: "https://imgs.agrimedia.cn/webimg/202607171808386371853.svg",
|
||||||
};
|
};
|
||||||
|
|
||||||
return iconMap[type] || "";
|
return iconMap[type] || "";
|
||||||
|
|
@ -327,6 +350,7 @@ export default {
|
||||||
);
|
);
|
||||||
this.balances = result.balances || this.balances;
|
this.balances = result.balances || this.balances;
|
||||||
this.feePercent = Number(result.feePercent || 10);
|
this.feePercent = Number(result.feePercent || 10);
|
||||||
|
this.bmtrFeePercent = Number(result.bmtrFeePercent || 10);
|
||||||
this.tips = result.tips || this.tips;
|
this.tips = result.tips || this.tips;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
|
|
@ -394,17 +418,14 @@ export default {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.activeTab === "points" && !Number.isInteger(this.amountValue)) {
|
if (!Number.isInteger(this.amountValue)) {
|
||||||
|
const unitMap = {
|
||||||
|
points: "积分",
|
||||||
|
power: "算力",
|
||||||
|
bmtr: "BMTR",
|
||||||
|
};
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "积分只能转赠1的整数倍",
|
title: (unitMap[this.activeTab] || "数量") + "只能转赠1的整数倍",
|
||||||
icon: "none",
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.activeTab === "power" && !Number.isInteger(this.amountValue)) {
|
|
||||||
uni.showToast({
|
|
||||||
title: "算力只能转赠1的整数倍",
|
|
||||||
icon: "none",
|
icon: "none",
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
|
|
@ -445,8 +466,9 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
openLedger() {
|
openLedger() {
|
||||||
|
const valueParam = this.activeTab === "bmtr" ? "&value=bmtr" : "";
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: "/pages/assets/ledger?type=transfer",
|
url: "/pages/assets/ledger?type=transfer" + valueParam,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -468,7 +490,8 @@ export default {
|
||||||
|
|
||||||
.mode-tabs {
|
.mode-tabs {
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 400rpx;
|
width: 620rpx;
|
||||||
|
max-width: 100%;
|
||||||
margin: 26rpx auto 0;
|
margin: 26rpx auto 0;
|
||||||
padding: 4rpx;
|
padding: 4rpx;
|
||||||
border-radius: 999rpx;
|
border-radius: 999rpx;
|
||||||
|
|
@ -482,9 +505,11 @@ export default {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
height: 60rpx;
|
height: 60rpx;
|
||||||
|
padding: 0 12rpx;
|
||||||
border-radius: 999rpx;
|
border-radius: 999rpx;
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
|
white-space: nowrap;
|
||||||
color: rgba(210, 219, 242, 0.72);
|
color: rgba(210, 219, 242, 0.72);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue