小程序二维码功能

This commit is contained in:
2026-07-12 23:59:52 +08:00
parent 1bd152073a
commit f2cdc0222d
10 changed files with 658 additions and 63 deletions
@@ -1,11 +1,47 @@
import { useMemo } from 'react';
import { View, Text } from '@tarojs/components';
import Taro, { useRouter } from '@tarojs/taro';
import PageShell from '../../components/PageShell';
import SubPageHeader from '../../components/SubPageHeader';
const LAST_REDEEM_RESULT_KEY = 'lastRedeemResult';
type RedeemRecord = {
id: string;
redeemNo: string;
amount: number;
storeId: string;
storeName: string;
createdAt: string;
};
function formatMoney(amount: number) {
return amount.toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
}
export default function RedeemSuccessPage() {
const router = useRouter();
const amount = router.params.amount ?? '0';
const record = useMemo<RedeemRecord | null>(() => {
try {
const cached = Taro.getStorageSync(LAST_REDEEM_RESULT_KEY);
return cached ? (JSON.parse(String(cached)) as RedeemRecord) : null;
} catch {
return null;
}
}, []);
const amount = Number(record?.amount ?? router.params.amount ?? 0);
const storeName = record?.storeName || '门店';
const redeemNo = record?.redeemNo || '—';
const redeemedAt = record?.createdAt
? new Date(record.createdAt).toLocaleString('zh-CN')
: new Date().toLocaleString('zh-CN');
function goBenefit() {
Taro.removeStorageSync(LAST_REDEEM_RESULT_KEY);
Taro.switchTab({ url: '/pages/benefit/index' });
}
return (
<PageShell variant="sub" className="redeem-success-page">
@@ -15,13 +51,25 @@ export default function RedeemSuccessPage() {
<Text></Text>
</View>
<Text className="redeem-success-title"></Text>
<Text className="redeem-success-desc">
¥{Number(amount).toFixed(2)}
</Text>
<View
className="redeem-submit"
onClick={() => Taro.switchTab({ url: '/pages/benefit/index' })}
>
<Text className="redeem-success-amount">¥ {formatMoney(amount)}</Text>
<Text className="redeem-success-desc"> {storeName} </Text>
<View className="redeem-success-details">
<View className="redeem-success-detail-row">
<Text></Text>
<Text>{storeName}</Text>
</View>
<View className="redeem-success-detail-row">
<Text></Text>
<Text>{redeemedAt}</Text>
</View>
<View className="redeem-success-detail-row">
<Text></Text>
<Text className="redeem-success-mono">{redeemNo}</Text>
</View>
</View>
<View className="redeem-submit" onClick={goBenefit}>
<Text></Text>
</View>
<View