fix(register): 优化经销商注册流程中的邀请关系绑定逻辑

- 引入用户状态管理store以获取用户信息
- 重构邀请关系绑定逻辑,支持异步重试机制
- 使用Promise缓存防止重复请求
- 从localStorage和用户状态中获取tenantId和userId
- 在注册成功后主动获取用户信息确保数据完整
- 注释掉开发环境API配置以避免冲突
This commit is contained in:
2026-01-22 14:26:09 +08:00
parent 49c8d40e75
commit b9d2648e6f
2 changed files with 41 additions and 11 deletions

View File

@@ -1,5 +1,5 @@
VITE_APP_NAME=后台管理(开发环境) 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 #VITE_SERVER_API_URL=http://127.0.0.1:8000/api

View File

@@ -219,6 +219,7 @@
import { User } from '@/api/system/user/model'; import { User } from '@/api/system/user/model';
import { addShopDealerReferee } from '@/api/shop/shopDealerReferee'; import { addShopDealerReferee } from '@/api/shop/shopDealerReferee';
import { getToken } from '@/utils/token-util'; import { getToken } from '@/utils/token-util';
import { useUserStore } from '@/store/modules/user';
const useForm = Form.useForm; const useForm = Form.useForm;
const router = useRouter(); const router = useRouter();
@@ -237,6 +238,7 @@
// 是否开启响应式布局 // 是否开启响应式布局
const themeStore = useThemeStore(); const themeStore = useThemeStore();
const { darkMode } = storeToRefs(themeStore); const { darkMode } = storeToRefs(themeStore);
const userStore = useUserStore();
// 配置信息 // 配置信息
const { form } = useFormData<User>({ const { form } = useFormData<User>({
@@ -342,29 +344,54 @@
}; };
// 建立邀请推荐关系(需要登录态;失败不影响主流程) // 建立邀请推荐关系(需要登录态;失败不影响主流程)
let bindInviterOnce = false; let bindInviterDone = false;
let bindInviterInFlight: Promise<unknown> | null = null;
const tryBindInviteRelation = async () => { const tryBindInviteRelation = async () => {
if (bindInviterOnce) { if (bindInviterDone) {
return; return;
} }
if (bindInviterInFlight) {
return bindInviterInFlight;
}
if (!inviterId.value) { if (!inviterId.value) {
return; return;
} }
if (!getToken()) { if (!getToken()) {
return; return;
} }
const tenantIdStr = localStorage.getItem('TenantId'); const tenantId =
const userIdStr = localStorage.getItem('UserId'); Number(localStorage.getItem('TenantId')) ||
if (!userIdStr) { Number(userStore.info?.tenantId) ||
Number(form.tenantId) ||
undefined;
const userId =
Number(localStorage.getItem('UserId')) ||
Number(userStore.info?.userId) ||
0;
if (!userId) {
return; return;
} }
bindInviterOnce = true; bindInviterInFlight = addShopDealerReferee({
await addShopDealerReferee({
dealerId: inviterId.value, dealerId: inviterId.value,
userId: Number(userIdStr), userId,
level: 1, 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 remember: !!form.remember
}); });
// 确保拿到 userId/tenantId部分后端登录接口可能不返回 user 字段)
await userStore.fetchUserInfo().catch(() => void 0);
// 建立绑定关系(失败不影响主流程) // 建立绑定关系(失败不影响主流程)
try { try {
await tryBindInviteRelation(); await tryBindInviteRelation();