fix(user): 修复地址和购物车相关的多个问题
- 解决鸿蒙手机首次打开地图选择不显示 POI 列表,先获取当前位置传入地图 - 修正收货地址编辑接口路径,改为无 id 的 PUT /shop/shop-user-address - 防御性合并旧地址数据,避免 null 字段覆盖初始值 - 新用户注册和登录后同步更新 UserContext 状态,确保页面刷新购物车数据 - 各页面 useDidShow 内增加从 storage 同步用户状态,解决状态不同步问题 - 优化地图选择初始化逻辑,提升用户体验 - 保证购物车、商品详情和首页登录状态及时同步更新
This commit is contained in:
@@ -6,6 +6,7 @@ import { getWxOpenId } from '@/api/layout'
|
||||
import { getUserInfo } from '@/api/layout'
|
||||
import { saveStorageByLoginUser, SERVER_API_URL } from '@/utils/server'
|
||||
import { isUserDisabled } from '@/utils/auth'
|
||||
import { useUserContext } from '@/contexts/UserContext'
|
||||
import request from '@/utils/request'
|
||||
import {
|
||||
getPhoneAuthCooldownRemaining,
|
||||
@@ -108,6 +109,7 @@ const Login = () => {
|
||||
const [phoneAuthPending, setPhoneAuthPending] = useState(false)
|
||||
const [phoneAuthCooling, setPhoneAuthCooling] = useState(isPhoneAuthCoolingDown())
|
||||
const [showContent, setShowContent] = useState(false)
|
||||
const { loginUser } = useUserContext()
|
||||
const phoneAuthInFlightRef = useRef(false)
|
||||
const phoneAuthPendingRef = useRef(false)
|
||||
const phoneAuthTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)
|
||||
@@ -346,6 +348,8 @@ const Login = () => {
|
||||
}
|
||||
|
||||
saveStorageByLoginUser(token, user)
|
||||
// 同步更新 UserContext 状态,确保后续页面 isLoggedIn 为 true
|
||||
loginUser(token, user)
|
||||
|
||||
// 绑定 openid + 处理邀请关系
|
||||
await ensureWxOpenIdSaved()
|
||||
|
||||
@@ -6,6 +6,7 @@ import { TenantId } from '@/config/app'
|
||||
import { getUserInfo, getWxOpenId } from '@/api/layout'
|
||||
import { saveStorageByLoginUser } from '@/utils/server'
|
||||
import { isUserDisabled } from '@/utils/auth'
|
||||
import { useUserContext } from '@/contexts/UserContext'
|
||||
import {
|
||||
getStoredInviteParams,
|
||||
parseInviteParams,
|
||||
@@ -98,6 +99,7 @@ function isTabBarUrl(url: string) {
|
||||
const Register = () => {
|
||||
const [isAgree, setIsAgree] = useState(false)
|
||||
const [loading, setLoading] = useState(false)
|
||||
const { loginUser } = useUserContext()
|
||||
|
||||
// 短信验证码登录仅在非微信小程序端展示
|
||||
const isWeapp = useMemo(() => {
|
||||
@@ -234,6 +236,8 @@ const Register = () => {
|
||||
}
|
||||
|
||||
saveStorageByLoginUser(token, user)
|
||||
// 同步更新 UserContext 状态,确保后续页面 isLoggedIn 为 true
|
||||
loginUser(token, user)
|
||||
|
||||
// 注册/登录成功后,立即补齐 openid(JSAPI 支付必需)
|
||||
try {
|
||||
|
||||
@@ -4,12 +4,14 @@ import { View, Text, Input } from '@tarojs/components'
|
||||
import {loginBySms, sendSmsCaptcha} from "@/api/passport/login";
|
||||
import {LoginParam} from "@/api/passport/login/model";
|
||||
import {checkAndHandleInviteRelation, hasPendingInvite, parseInviteParams, saveInviteParams, trackInviteSource} from "@/utils/invite";
|
||||
import { useUserContext } from '@/contexts/UserContext'
|
||||
import './sms-login.scss'
|
||||
|
||||
const SmsLogin = () => {
|
||||
const [loading, setLoading] = useState<boolean>(false)
|
||||
const [sendingCode, setSendingCode] = useState<boolean>(false)
|
||||
const [countdown, setCountdown] = useState<number>(0)
|
||||
const { syncFromStorage } = useUserContext()
|
||||
const [formData, setFormData] = useState<LoginParam>({
|
||||
phone: '',
|
||||
code: ''
|
||||
@@ -182,6 +184,9 @@ const SmsLogin = () => {
|
||||
code: formData.code
|
||||
})
|
||||
|
||||
// loginBySms 内部已调 saveStorageByLoginUser,这里同步 UserContext 状态
|
||||
syncFromStorage()
|
||||
|
||||
// 登录成功后(可能是新注册用户),检查是否存在待处理的邀请关系并尝试绑定
|
||||
if (hasPendingInvite()) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user