feat(user): 使用微信原生 Picker 替换所在地选择弹层

- 删除 NutUI Address 相关导入、状态及地区数据转换逻辑
- 新增派生 regionValue 用于绑定微信原生 Picker 的 value
- 将 handleRegionChange 调整为处理微信 Picker 的事件
- 将所在地选择 UI 修改为微信原生 Picker 包裹的视图结构
- 地图定位失败使用弹窗提示,引导用户手动选择或重试
- 移除手动打开地区选择器的函数及 NutUI 组件
- 保留 RegionData 用于文本智能识别解析
- 编译通过,提升在无地图或无权限环境下的地区选择稳定性
This commit is contained in:
2026-07-12 23:19:18 +08:00
parent be130408de
commit 70ad1d030f
2 changed files with 51 additions and 58 deletions

View File

@@ -24,3 +24,19 @@
- chooseGeoLocation 兜底:去掉 regionLocked 分支,地图失败「手动选择」始终打开地区选择器。
编译验证:`taro build --type weapp` 通过。
(未做:手动改地区时不自动清除旧经纬度,避免误删数据;如需坐标随地区失效可再加。)
## 所在地区选择器NutUI Address → 微信原生 Picker mode='region'
参考 weiyu-taro 项目(同为 Taro 商城,`src/pages/user/address-edit.tsx` 用原生 `<Picker mode='region'>` 选省市区),将 xinlong 的所在地区从 NutUI `<Address>` 弹层改为微信原生 Picker与 weiyu-taro 对齐。
改动 `src/pages/user/address-edit.tsx`
- 删除 `import {Address} from '@nutui/nutui-react-taro'`、状态 `regionPickerVisible`/`regionOptions`、以及把 regions-data.json 转 NutUI options 的 useEffect。
- 新增派生 `regionValue = [province, city, region].map(v=>String(v||''))`3 元素数组,供原生 Picker value 绑定)。
- `handleRegionChange` 由 NutUI `(value:string[])` 改为原生 `(e:any)``e.detail.value`,手动改后 `setRegionLocked(false)`
- 「所在地区」行用 `<Picker mode='region' value={regionValue} onChange={handleRegionChange}>` 包裹。
- 删除底部 `<Address>` 组件与 `openRegionPicker` 函数。
- 地图失败兜底:原生 Picker 无法用代码调起,改为弹 modal 引导「重试」(chooseLocation({})) / 「手动填写」(toast 提示去下方手动选);未获定位权限时 toast 引导手动选。
优势:零依赖、零数据准备、系统级选择器永远可用(不联网/不依赖权限/不依赖组件库),是地图不可用最稳的兜底。
编译验证:`taro build --type weapp` 通过。
RegionData 仍被 parseRegion/parseAddressText文本智能识别使用import 保留。