fix(register): 优化经销商注册流程中的邀请关系绑定逻辑
- 引入用户状态管理store以获取用户信息 - 重构邀请关系绑定逻辑,支持异步重试机制 - 使用Promise缓存防止重复请求 - 从localStorage和用户状态中获取tenantId和userId - 在注册成功后主动获取用户信息确保数据完整 - 注释掉开发环境API配置以避免冲突
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user