{formatAddress(a)}
暂无收货地址,请新增
)}DUKANG HERITAGE SERVICE
import { useCallback, useEffect, useState } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import SubPageHeader from '../components/SubPageHeader'; import { request } from '../lib/api'; import { useUserSession } from '../contexts/UserSessionContext'; import { buildAddressEditUrl, buildAddressListUrl, buildOrderConfirmUrl, hasCheckoutContext, readCheckoutContext } from '../lib/navigation'; import { usePageView } from '../lib/usePageView'; type Address = { id: string; receiverName: string; phone: string; province: string; city: string; district: string; detail: string; isDefault?: number; }; function maskPhone(phone: string) { return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2'); } function formatAddress(a: Address) { return `${a.province}${a.city}${a.district}${a.detail}`; } export default function AddressListPage() { usePageView('address_list_view'); const { profile } = useUserSession(); const [list, setList] = useState
([]); const [pendingAddress, setPendingAddress] = useState(null); const [savingOrderAddress, setSavingOrderAddress] = useState(false); const [params] = useSearchParams(); const navigate = useNavigate(); const selectMode = params.get('select') === '1'; const orderId = params.get('orderId') || ''; const productId = params.get('productId') || ''; const qty = params.get('qty') || ''; const cross = params.get('cross') === '1'; const currentAddressId = params.get('addressId') || ''; const loadList = useCallback(() => { request('USER_H5', '/user/addresses').then(setList); }, []); useEffect(() => { loadList(); }, [loadList, profile?.id]); function selectAddress(addr: Address) { if (!selectMode) return; if (orderId) { setPendingAddress(addr); return; } const qs = new URLSearchParams(); if (productId) qs.set('productId', productId); if (qty) qs.set('qty', qty); if (cross) qs.set('cross', '1'); qs.set('addressId', addr.id); navigate(`/order/confirm?${qs.toString()}`); } async function confirmOrderAddress() { if (!orderId || !pendingAddress) return; setSavingOrderAddress(true); try { await request('USER_H5', `/trade/orders/${orderId}/address`, { method: 'PUT', body: JSON.stringify({ receiverName: pendingAddress.receiverName, receiverPhone: pendingAddress.phone, receiverProvince: pendingAddress.province, receiverCity: pendingAddress.city, receiverDistrict: pendingAddress.district, receiverAddress: `${pendingAddress.province}${pendingAddress.city}${pendingAddress.district}${pendingAddress.detail}`, }), }); navigate(`/orders/${orderId}`); } catch (e) { window.alert(e instanceof Error ? e.message : '修改地址失败'); } finally { setSavingOrderAddress(false); setPendingAddress(null); } } async function setDefault(addr: Address, e: React.MouseEvent) { e.stopPropagation(); if (addr.isDefault === 1) return; await request('USER_H5', `/user/addresses/${addr.id}`, { method: 'PUT', body: JSON.stringify({ receiverName: addr.receiverName, phone: addr.phone, province: addr.province, city: addr.city, district: addr.district, detail: addr.detail, isDefault: true, }), }); loadList(); } async function removeAddress(id: string, e: React.MouseEvent) { e.stopPropagation(); if (!window.confirm('确定删除该收货地址吗?')) return; await request('USER_H5', `/user/addresses/${id}`, { method: 'DELETE' }); loadList(); } const checkoutCtx = readCheckoutContext(params); function goEdit(id: string, e: React.MouseEvent) { e.stopPropagation(); navigate(buildAddressEditUrl(id, checkoutCtx)); } function goBack() { if (orderId) { navigate(`/orders/${orderId}`); return; } if (hasCheckoutContext(checkoutCtx)) { navigate(buildOrderConfirmUrl(checkoutCtx)); return; } navigate('/mine'); } return (暂无收货地址,请新增
)}{formatAddress(a)}
DUKANG HERITAGE SERVICE
确认将订单收货地址修改为:
{pendingAddress.receiverName} {maskPhone(pendingAddress.phone)}
{formatAddress(pendingAddress)}