v3.5.3版本更新1
CI / verify (pull_request) Has been cancelled

This commit is contained in:
2026-08-20 18:54:15 +08:00
parent ee493823bf
commit fc2e5b65de
65 changed files with 2297 additions and 875 deletions
+9 -13
View File
@@ -2,6 +2,7 @@ import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import type { RedeemPhoneDirectPrepareResult } from '@dukang/shared-types';
import { request } from '../lib/api';
import { toastError, toastSuccess } from '../lib/toast';
import { useStorePageView } from '../lib/usePageView';
function formatAmount(n: number) {
@@ -17,7 +18,6 @@ export default function PhoneRedeemPage() {
const [prepared, setPrepared] = useState<RedeemPhoneDirectPrepareResult | null>(null);
const [storeName, setStoreName] = useState('');
const [storeClosed, setStoreClosed] = useState(false);
const [msg, setMsg] = useState('');
const [loading, setLoading] = useState(false);
const [confirmCooldown, setConfirmCooldown] = useState(0);
const [showOpenModal, setShowOpenModal] = useState(false);
@@ -41,11 +41,10 @@ export default function PhoneRedeemPage() {
async function prepareDirectRedeem() {
const value = Number(amount);
if (!Number.isFinite(value) || value <= 0) {
setMsg('请输入有效核销金额');
toastError('请输入有效核销金额');
return;
}
setLoading(true);
setMsg('');
try {
const result = await request<RedeemPhoneDirectPrepareResult>('SHOP_H5', '/shop/redeem/phone/prepare-direct', {
method: 'POST',
@@ -54,10 +53,10 @@ export default function PhoneRedeemPage() {
setPrepared(result);
setConfirmCode('');
setConfirmCooldown(60);
setMsg(`验证码已发送至 ${result.maskedPhone},验证成功后将直接核销`);
toastSuccess(`验证码已发送至 ${result.maskedPhone},验证成功后将直接核销`);
} catch (e) {
setPrepared(null);
setMsg(e instanceof Error ? e.message : '发送验证码失败');
toastError(e instanceof Error ? e.message : '发送验证码失败');
} finally {
setLoading(false);
}
@@ -65,7 +64,7 @@ export default function PhoneRedeemPage() {
async function sendConfirmSms() {
if (!/^1\d{10}$/.test(phone.trim())) {
setMsg('请输入正确的手机号');
toastError('请输入正确的手机号');
return;
}
if (storeClosed) {
@@ -88,7 +87,7 @@ export default function PhoneRedeemPage() {
await prepareDirectRedeem();
} catch (e) {
setShowOpenModal(false);
setMsg(e instanceof Error ? e.message : '开启营业失败');
toastError(e instanceof Error ? e.message : '开启营业失败');
} finally {
setOpening(false);
}
@@ -96,15 +95,14 @@ export default function PhoneRedeemPage() {
async function confirmRedeem() {
if (!prepared) {
setMsg('请先发送核销验证码');
toastError('请先发送核销验证码');
return;
}
if (!confirmCode.trim()) {
setMsg('请输入确认验证码');
toastError('请输入确认验证码');
return;
}
setLoading(true);
setMsg('');
try {
const result = await request<Record<string, unknown>>('SHOP_H5', '/shop/redeem/phone/confirm', {
method: 'POST',
@@ -118,7 +116,7 @@ export default function PhoneRedeemPage() {
state: { result, storeName, user: prepared.user },
});
} catch (e) {
setMsg(e instanceof Error ? e.message : '核销失败');
toastError(e instanceof Error ? e.message : '核销失败');
} finally {
setLoading(false);
}
@@ -225,8 +223,6 @@ export default function PhoneRedeemPage() {
>
{loading ? '正在核销…' : `确认核销 ¥${formatAmount(amountValue || 0)}`}
</button>
{msg && <p className="shop-redeem-error">{msg}</p>}
</div>
</section>
</main>