update:优化金币

This commit is contained in:
2026-08-20 16:10:17 +08:00
parent 42cfb5c3d8
commit 45957d04b1
14 changed files with 247 additions and 39 deletions
+50 -6
View File
@@ -15,6 +15,8 @@ const coinSummary = ref({
cumulative: 0,
available: 0,
});
const selectedStoreId = ref("");
const selectedStoreName = ref("");
const rewardProducts = ref([]);
const productPage = ref(0);
const productTotal = ref(0);
@@ -23,7 +25,7 @@ const productNoMore = ref(false);
const loadCoinSummary = async () => {
try {
const result = await getMyGoldAPI();
const result = await getMyGoldAPI(selectedStoreId.value);
coinSummary.value = {
cumulative: Number(result?.totalGold) || 0,
available: Number(result?.usableGold) || 0,
@@ -86,10 +88,37 @@ const menuRoutes = {
rules: "/pages/coin/rules",
earningRecords: "/pages/coin/earning-records",
exchangeRecords: "/pages/coin/exchange-records",
nearbyStores: "/pages/coin/nearby-stores",
};
const buildStorePageUrl = (path, extraQuery = "") => {
const query = [
`storeId=${encodeURIComponent(selectedStoreId.value)}`,
`storeName=${encodeURIComponent(selectedStoreName.value)}`,
extraQuery,
]
.filter(Boolean)
.join("&");
return `${path}?${query}`;
};
const decodeRouteText = (value = "") => {
const text = String(value);
try {
return decodeURIComponent(text.replace(/\+/g, " "));
} catch (error) {
console.error("门店名称解码失败", error);
return text;
}
};
const onMenuSelect = (menu) => {
if (menu.key === "nearbyStores") {
uni.redirectTo({
url: "/pages/coin/nearby-stores",
});
return;
}
const url = menuRoutes[menu.key];
if (!url) {
uni.showToast({
@@ -98,16 +127,31 @@ const onMenuSelect = (menu) => {
});
return;
}
uni.navigateTo({ url });
uni.navigateTo({
url: buildStorePageUrl(url),
});
};
const toProductDetail = (product) => {
uni.navigateTo({
url: `/pages/coin/product-detail?id=${product.id}`,
url: buildStorePageUrl(
"/pages/coin/product-detail",
`id=${encodeURIComponent(product.id)}`
),
});
};
onLoad(() => {
onLoad((options = {}) => {
const storeId = String(options.storeId || "");
if (!/^\d+$/.test(storeId) || Number(storeId) <= 0) {
uni.redirectTo({
url: "/pages/coin/nearby-stores",
});
return;
}
selectedStoreId.value = storeId;
selectedStoreName.value = decodeRouteText(options.storeName);
loadCoinSummary();
loadProducts({ reset: true });
});
@@ -116,7 +160,7 @@ onLoad(() => {
<template>
<Container :bgType="6" :isHome="true" @scrolltolower="loadProducts">
<template #header>
<CoinHeader title="我的金币" />
<CoinHeader title="我的金币" :subtitle="selectedStoreName" />
</template>
<view class="coin-page">
<CoinBalancePanel