diff --git a/src/user/address/add.tsx b/src/user/address/add.tsx index 2b5234a..3554724 100644 --- a/src/user/address/add.tsx +++ b/src/user/address/add.tsx @@ -250,16 +250,6 @@ const AddUserAddress = () => { } setSelectedLocation(next) - // 将地图选点的地址同步到“收货地址”,减少用户重复输入 - const nextDetailAddress = (() => { - const addr = String(res.address || '').trim() - const name = String(res.name || '').trim() - if (!addr && !name) return '' - if (!addr) return name - if (!name) return addr - return addr.includes(name) ? addr : `${addr} ${name}` - })() - // 尝试从地图返回的 address 文本解析省市区(best-effort) const regionResult = res?.provinceName || res?.cityName || res?.adName ? { @@ -269,6 +259,29 @@ const AddUserAddress = () => { } : parseRegion(String(res.address || '')) + // 将地图选点的地址同步到“收货地址”(不额外拼接省市区字段,省市区由独立字段保存) + const nextDetailAddress = (() => { + const rawAddr = String(res.address || '').trim() + const name = String(res.name || '').trim() + + const province = String(regionResult?.province || '').trim() + const city = String(regionResult?.city || '').trim() + const region = String(regionResult?.region || '').trim() + + // 选择定位返回的 address 往往包含省市区,这里尽量剥离掉,避免和表单的省市区字段重复 + let detail = rawAddr + for (const part of [province, city, region]) { + if (part) detail = detail.replace(part, '') + } + detail = detail.replace(/[,,]+/g, ' ').replace(/\s+/g, ' ').trim() + + const base = detail || rawAddr + if (!base && !name) return '' + if (!base) return name + if (!name) return base + return base.includes(name) ? base : `${base} ${name}` + })() + setFormData(prev => ({ ...prev, lng: next.lng, @@ -295,9 +308,11 @@ const AddUserAddress = () => { try { const initLat = selectedLocation?.lat ? Number(selectedLocation.lat) : undefined const initLng = selectedLocation?.lng ? Number(selectedLocation.lng) : undefined + const latitude = typeof initLat === 'number' && Number.isFinite(initLat) ? initLat : undefined + const longitude = typeof initLng === 'number' && Number.isFinite(initLng) ? initLng : undefined const res = await Taro.chooseLocation({ - latitude: Number.isFinite(initLat as number) ? (initLat as number) : undefined, - longitude: Number.isFinite(initLng as number) ? (initLng as number) : undefined + latitude, + longitude }) applyChosenLocation(res) } catch (e: any) { @@ -452,7 +467,43 @@ const AddUserAddress = () => { - + + + + + + + + +
setVisible(true)}> + + +
+
+ +