From b9d2648e6f82657d602a89c223dd1df2a3a6f8d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Thu, 22 Jan 2026 14:26:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(register):=20=E4=BC=98=E5=8C=96=E7=BB=8F?= =?UTF-8?q?=E9=94=80=E5=95=86=E6=B3=A8=E5=86=8C=E6=B5=81=E7=A8=8B=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E9=82=80=E8=AF=B7=E5=85=B3=E7=B3=BB=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入用户状态管理store以获取用户信息 - 重构邀请关系绑定逻辑,支持异步重试机制 - 使用Promise缓存防止重复请求 - 从localStorage和用户状态中获取tenantId和userId - 在注册成功后主动获取用户信息确保数据完整 - 注释掉开发环境API配置以避免冲突 --- .env.development | 2 +- src/views/passport/dealer/register.vue | 50 ++++++++++++++++++++------ 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/.env.development b/.env.development index fbcc74b..b8ccd8b 100644 --- a/.env.development +++ b/.env.development @@ -1,5 +1,5 @@ VITE_APP_NAME=后台管理(开发环境) -VITE_API_URL=http://127.0.0.1:9200/api +#VITE_API_URL=http://127.0.0.1:9200/api #VITE_SERVER_API_URL=http://127.0.0.1:8000/api diff --git a/src/views/passport/dealer/register.vue b/src/views/passport/dealer/register.vue index ca3feba..20fadc5 100644 --- a/src/views/passport/dealer/register.vue +++ b/src/views/passport/dealer/register.vue @@ -219,6 +219,7 @@ import { User } from '@/api/system/user/model'; import { addShopDealerReferee } from '@/api/shop/shopDealerReferee'; import { getToken } from '@/utils/token-util'; + import { useUserStore } from '@/store/modules/user'; const useForm = Form.useForm; const router = useRouter(); @@ -237,6 +238,7 @@ // 是否开启响应式布局 const themeStore = useThemeStore(); const { darkMode } = storeToRefs(themeStore); + const userStore = useUserStore(); // 配置信息 const { form } = useFormData({ @@ -342,29 +344,54 @@ }; // 建立邀请推荐关系(需要登录态;失败不影响主流程) - let bindInviterOnce = false; + let bindInviterDone = false; + let bindInviterInFlight: Promise | null = null; const tryBindInviteRelation = async () => { - if (bindInviterOnce) { + if (bindInviterDone) { return; } + if (bindInviterInFlight) { + return bindInviterInFlight; + } if (!inviterId.value) { return; } if (!getToken()) { return; } - const tenantIdStr = localStorage.getItem('TenantId'); - const userIdStr = localStorage.getItem('UserId'); - if (!userIdStr) { + const tenantId = + Number(localStorage.getItem('TenantId')) || + Number(userStore.info?.tenantId) || + Number(form.tenantId) || + undefined; + const userId = + Number(localStorage.getItem('UserId')) || + Number(userStore.info?.userId) || + 0; + if (!userId) { return; } - bindInviterOnce = true; - await addShopDealerReferee({ + bindInviterInFlight = addShopDealerReferee({ dealerId: inviterId.value, - userId: Number(userIdStr), + userId, level: 1, - tenantId: tenantIdStr ? Number(tenantIdStr) : form.tenantId - }); + tenantId + }).then( + (res) => { + bindInviterDone = true; + return res; + }, + (e) => { + // Allow retry if the add failed (e.g. user info not ready yet). + bindInviterDone = false; + throw e; + } + ); + try { + await bindInviterInFlight; + } finally { + bindInviterInFlight = null; + } }; /* 保存编辑 */ @@ -402,6 +429,9 @@ remember: !!form.remember }); + // 确保拿到 userId/tenantId(部分后端登录接口可能不返回 user 字段) + await userStore.fetchUserInfo().catch(() => void 0); + // 建立绑定关系(失败不影响主流程) try { await tryBindInviteRelation();