Files
lilishop-uniapp/utils/wechatAddress.js
pikachu1995@126.com d72f02f7cf feat(wechat): 集成微信原生地址导入、头像选择与昵称填写能力
- 新增微信收货地址导入功能(chooseAddress),含地区匹配与错误处理
- 个人资料页接入微信头像选择(chooseAvatar)与昵称填写(type="nickname")
- 重构收货地址添加页与管理页的UI布局,抽取公共样式 address-page.scss
- 地址页与个人页增加加载失败提示、请求防抖与保存状态反馈
- 下拉刷新改用 Promise.allSettled 避免单接口失败阻断其他数据更新
- manifest 新增 chooseAddress 隐私权限声明,版本号更新至 5.03
2026-11-04 11:09:34 +08:00

32 lines
1.4 KiB
JavaScript

export function getWechatAddressErrorType(error) {
const message = String(error?.errMsg || error?.message || '')
if (/cancel/i.test(message)) return 'cancel'
if (/requiredPrivateInfos/i.test(message)) return 'configuration'
if (/privacy|隐私/i.test(message)) return 'privacy'
if (/auth deny|auth denied|authorize no response|auth reject/i.test(message)) return 'auth'
if (/not support|not supported|not available|not a function/i.test(message)) return 'unsupported'
return 'unknown'
}
// Match each name under its parent; never guess an ID from a similarly named region.
export async function resolveWechatRegion(address, fetchRegions) {
const names = [address.provinceName, address.cityName, address.countyName, address.streetName]
const selected = []
let parentId = 0
for (let level = 0; level < 4; level++) {
const response = await fetchRegions(parentId)
if (!response?.data?.success || !Array.isArray(response.data.result)) {
throw new Error('地区加载失败')
}
const children = response.data.result
if (!children.length) return selected.length >= 3 ? selected : null
const name = String(names[level] || '').trim()
if (!name) return null
const matches = children.filter(item => String(item.name || item.localName || '').trim() === name)
if (matches.length !== 1 || !matches[0].id) return null
selected.push(matches[0])
parentId = matches[0].id
}
return selected
}