用户端调整
2.首页商品详情增加点击区域 3.浓香型 酱香型 点击增加提示:暂未开放 5.首页餐券2字更换为“好客权益” 6.门店页面地址筛选功能 (三级菜单,省市区) 7.好客权益:去使用点击交互调整为核销页面,单张好客权益点击核销页面带参数和金额 7.核销金额限制为可用余额最大数,不是500 9.收货地址电话号码增加校验,长度限制,地址或者未填提示,地区调整为省市区三级菜单 10.微信授权位置调整在手机验证码下侧
This commit is contained in:
@@ -3,10 +3,19 @@ import { Link, useNavigate } from 'react-router-dom';
|
||||
import AppImage from '@dukang/shared-ui/AppImage';
|
||||
import { request } from '../lib/api';
|
||||
import TabMainHeader from '../components/TabMainHeader';
|
||||
import RegionPicker from '../components/RegionPicker';
|
||||
import {
|
||||
DEFAULT_REGION,
|
||||
formatRegion,
|
||||
REGION_ALL,
|
||||
type RegionSelection,
|
||||
} from '../lib/region-data';
|
||||
|
||||
type StoreItem = {
|
||||
id: string;
|
||||
name: string;
|
||||
province?: string;
|
||||
cityName?: string;
|
||||
district: string;
|
||||
address: string;
|
||||
coverUrl?: string | null;
|
||||
@@ -37,6 +46,8 @@ export default function StoreListPage() {
|
||||
const [stores, setStores] = useState<StoreItem[]>([]);
|
||||
const [categoryTab, setCategoryTab] = useState<string>('全部');
|
||||
const [keyword, setKeyword] = useState('');
|
||||
const [region, setRegion] = useState<RegionSelection>(DEFAULT_REGION);
|
||||
const [regionPickerOpen, setRegionPickerOpen] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
request<StoreItem[]>('USER_H5', '/stores?cityCode=410100').then(setStores);
|
||||
@@ -47,6 +58,14 @@ export default function StoreListPage() {
|
||||
if (categoryTab !== '全部') {
|
||||
list = list.filter((s) => s.category?.name === categoryTab);
|
||||
}
|
||||
list = list.filter((s) => {
|
||||
const province = s.province ?? '河南省';
|
||||
const city = s.cityName ?? '郑州市';
|
||||
if (region.province !== REGION_ALL && province !== region.province) return false;
|
||||
if (region.city !== REGION_ALL && city !== region.city) return false;
|
||||
if (region.district !== REGION_ALL && s.district !== region.district) return false;
|
||||
return true;
|
||||
});
|
||||
const q = keyword.trim().toLowerCase();
|
||||
if (q) {
|
||||
list = list.filter(
|
||||
@@ -57,7 +76,9 @@ export default function StoreListPage() {
|
||||
);
|
||||
}
|
||||
return list;
|
||||
}, [stores, categoryTab, keyword]);
|
||||
}, [stores, categoryTab, keyword, region]);
|
||||
|
||||
const regionLabel = formatRegion(region.province, region.city, region.district);
|
||||
|
||||
return (
|
||||
<div className="page store-page">
|
||||
@@ -65,9 +86,13 @@ export default function StoreListPage() {
|
||||
<TabMainHeader title="门店" />
|
||||
|
||||
<div className="store-toolbar">
|
||||
<button type="button" className="store-location">
|
||||
<button
|
||||
type="button"
|
||||
className="store-location"
|
||||
onClick={() => setRegionPickerOpen(true)}
|
||||
>
|
||||
<span className="material-symbols-outlined">location_on</span>
|
||||
<span>郑州市 · 金水区</span>
|
||||
<span>{regionLabel}</span>
|
||||
<span className="material-symbols-outlined store-location-arrow">expand_more</span>
|
||||
</button>
|
||||
<div className="store-search">
|
||||
@@ -153,6 +178,16 @@ export default function StoreListPage() {
|
||||
<p className="store-list-end">没有更多门店了</p>
|
||||
)}
|
||||
</main>
|
||||
|
||||
<RegionPicker
|
||||
open={regionPickerOpen}
|
||||
value={region}
|
||||
onClose={() => setRegionPickerOpen(false)}
|
||||
onConfirm={(next) => {
|
||||
setRegion(next);
|
||||
setRegionPickerOpen(false);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user