import { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { request } from '../lib/api'; import ProductCarousel from '../components/ProductCarousel'; import TabMainHeader from '../components/TabMainHeader'; import AppToast from '../components/AppToast'; import { getProductImages } from '../lib/product-images'; import CouponBadge from '@dukang/shared-ui/CouponBadge'; type Product = { id: string; name: string; subtitle: string; price: number; benefitDisplay: number; mainImageUrl?: string | null; carouselUrls?: string[] | null; detailImageUrls?: string[] | null; aromaType: string; status: string; }; type City = { id: string; code: string; name: string; status: string; }; const AROMA_TABS = [ { key: 'QINGXIANG', label: '清香型', open: true }, { key: 'JIANGXIANG', label: '酱香型', open: false }, { key: 'NONGXIANG', label: '浓香型', open: false }, ]; const CITY_STORAGE_KEY = 'dukang_selected_city'; export default function HomePage() { const [tab, setTab] = useState('QINGXIANG'); const [products, setProducts] = useState([]); const [cities, setCities] = useState([]); const [cityCode, setCityCode] = useState(() => localStorage.getItem(CITY_STORAGE_KEY) || '410100'); const [toast, setToast] = useState(''); useEffect(() => { request('USER_H5', '/catalog/cities').then((list) => { setCities(list); if (!list.some((c) => c.code === cityCode) && list[0]) { setCityCode(list[0].code); } }); }, []); useEffect(() => { if (!cityCode) return; localStorage.setItem(CITY_STORAGE_KEY, cityCode); request('USER_H5', `/catalog/products?cityCode=${encodeURIComponent(cityCode)}`).then(setProducts); }, [cityCode]); function showToast(message: string) { setToast(message); window.setTimeout(() => setToast(''), 2200); } function onAromaTabClick(key: string, open: boolean) { if (!open) { showToast('暂未开放'); return; } setTab(key); } const selectedCity = cities.find((c) => c.code === cityCode); const filtered = products.filter((p) => p.aromaType === tab); const onSale = tab === 'QINGXIANG'; return (
location_on
)} />
{!onSale &&
该香型暂未上线,敬请期待
} {onSale && filtered.map((p) => (

{p.name}

¥{p.price}

{p.subtitle}

立即购买
))}
); }