import {useEffect} from "react"; import Taro from '@tarojs/taro' const WxAddress = () => { /** * 从微信API获取用户收货地址 * 调用微信原生地址选择界面,获取成功后跳转到“新增收货地址”页面,让用户选择定位后再保存 */ const getWeChatAddress = () => { Taro.chooseAddress() .then(async res => { // 仅填充微信地址信息,不要用“当前定位”覆盖经纬度(会造成经纬度与地址不匹配)。 // 选择后跳转到“新增/编辑收货地址”页面,让用户手动选择地图定位后再保存。 const addressDraft = { name: res.userName, phone: res.telNumber, country: res.nationalCode || '中国', province: res.provinceName, city: res.cityName, region: res.countyName, address: res.detailInfo, isDefault: false, } Taro.setStorageSync('WxAddressDraft', addressDraft) // 用 redirectTo 替换当前页面,避免保存后 navigateBack 回到空白的 wxAddress 页面。 await Taro.redirectTo({ url: '/user/address/add?fromWx=1&skipDefaultCheck=1' }) }) .catch(err => { console.error('获取微信地址失败:', err) // 用户取消选择地址:直接返回上一页 if (String(err?.errMsg || '').includes('cancel')) { setTimeout(() => Taro.navigateBack(), 200) return } // 处理用户拒绝授权的情况 if (String(err?.errMsg || '').includes('auth deny')) { Taro.showModal({ title: '授权失败', content: '请在设置中允许获取地址权限', showCancel: false }) setTimeout(() => Taro.navigateBack(), 300) return } Taro.showToast({ title: '获取微信地址失败', icon: 'none' }) setTimeout(() => Taro.navigateBack(), 300) }) } useEffect(() => { getWeChatAddress() }, []); return ( <> ); }; export default WxAddress;