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

@@ -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<User>({
@@ -342,29 +344,54 @@
};
// 建立邀请推荐关系(需要登录态;失败不影响主流程)
let bindInviterOnce = false;
let bindInviterDone = false;
let bindInviterInFlight: Promise<unknown> | 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();