|
|
@@ -27,9 +27,39 @@ async function handleWechatOAuthCallback() {
|
|
|
const result = await post<{ openid: string }>('/payment/wechat/openid', { code });
|
|
|
|
|
|
if (result.openid) {
|
|
|
- localStorage.setItem('wx_openid', result.openid);
|
|
|
console.log('[App] OpenID 获取成功');
|
|
|
|
|
|
+ // 先尝试根据 openid 自动登录
|
|
|
+ try {
|
|
|
+ const userStore = useUserStore();
|
|
|
+ await userStore.loginByOpenid(result.openid);
|
|
|
+ console.log('[App] OpenID 已绑定,自动登录成功');
|
|
|
+
|
|
|
+ // 清除 URL 参数并跳转首页
|
|
|
+ searchParams.delete('code');
|
|
|
+ searchParams.delete('state');
|
|
|
+ const newSearch = searchParams.toString();
|
|
|
+ const newUrl = window.location.origin + window.location.pathname
|
|
|
+ + (newSearch ? '?' + newSearch : '');
|
|
|
+ window.history.replaceState({}, '', newUrl);
|
|
|
+ uni.hideLoading();
|
|
|
+ uni.showToast({ title: '自动登录成功', icon: 'success' });
|
|
|
+ setTimeout(() => {
|
|
|
+ uni.switchTab({ url: '/pages/index/index' });
|
|
|
+ }, 500);
|
|
|
+ return;
|
|
|
+ } catch (e: any) {
|
|
|
+ if (e?.message?.includes('未绑定') || e?.code === -1) {
|
|
|
+ // 自动登录失败(未绑定账号),继续正常流程
|
|
|
+ console.log('[App] OpenID 未绑定账号,将存储待登录');
|
|
|
+ } else {
|
|
|
+ console.error('[App] 自动登录异常:', e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 未绑定账号或自动登录失败,存储 openid 等待手机号登录绑定
|
|
|
+ localStorage.setItem('wx_openid', result.openid);
|
|
|
+
|
|
|
// 🔧 标记刚从 OAuth 回来,页面组件可据此自动触发支付
|
|
|
try { sessionStorage.setItem('wx_oauth_just_done', '1'); } catch (_) {}
|
|
|
|