# 2026-07-12

## address-edit 地图选点「打开地图失败」修复

客户反馈部分手机无法通过选择地图填写地址/所在区，提示「打开地图失败，请重试」。
根因（按概率）：①微信隐私授权未处理（新版基础库强制，最契合「部分手机」）；②chooseLocation 传 undefined 经纬度；③权限流程不完整；④失败无兜底。

已修复 `src/pages/user/address-edit.tsx`（四层）：
1. 调 chooseLocation 前 `ensurePrivacyAuthorized()`（wx.getPrivacySetting/requirePrivacyAuthorize，旧基础库无接口则放行）。
2. 仅当 lat/lng 为有效数字时才传给 chooseLocation，否则 `chooseLocation({})`。
3. `ensureLocationPermission()`：getSetting 预检 + authorize 申请 + openSetting 引导并回读确认。
4. 失败兜底：弹窗「手动选择」（打开所在地区选择器）/「再试一次」(chooseLocation({}))；regionLocked 时不再误开选择器。

注意：项目本地 `tsc --noEmit` / `npm run type-check` 在本机因 Taro 类型入口缺失（`@tarojs/taro` 不在 @types）会报错，与本次改动无关；以 `taro build --type weapp` 为准。
另：如仍偶发，需确认微信公众平台后台已配置《隐私保护指引》并发布。

## 跟进：放宽所在地区锁定，始终可手动选择

用户要求「万一地图不可用也能手动选所在地区、填地址提交」。分析发现该路径原本已通（所在地区行→NutUI Address 选择器、详细地址 Input、save 不强制经纬度）。
唯一拦截点：`regionLocked` 在地图选点/编辑带坐标地址后置 true，导致「所在地区」行与 handleRegionChange 被拦。
已放宽（仍保留 regionLocked 用于「识别」文本不覆盖地图地区）：
- openRegionPicker：去掉 regionLocked 拦截，始终打开选择器。
- handleRegionChange：去掉拦截，手动改后 setRegionLocked(false)。
- 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 保留。
