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