fix(wx): 确保微信回调处理完成后再获取店铺列表

添加 isHandleWxCallbackComplete 状态和 waitForHandleWxCallbackComplete 方法
在 ProductList.vue 中等待微信回调处理完成后再获取店铺列表
This commit is contained in:
dzq 2025-09-19 16:29:26 +08:00
parent 9d8af77253
commit 1818e01b57
2 changed files with 28 additions and 4 deletions

View File

@ -61,11 +61,13 @@ function handleShopSelect(selectedShopId: number) {
//
onMounted(() => {
onMounted(async () => {
const urlParams = new URLSearchParams(window.location.search);
const shopIdParam = urlParams.get('shopId') || undefined;
if (showShopList.value) {
// handleWxCallback
await wxStore.waitForHandleWxCallbackComplete();
getShopListApi(wxStore.corpid).then((res) => {
if (res?.code === 0 && res?.data?.length > 0) {
shopList.value = res.data;
@ -95,9 +97,11 @@ function handleCheckout() {
}
//
watch(() => route.path, (newPath) => {
watch(() => route.path, async (newPath) => {
if (newPath === '/') {
if (showShopList.value) {
// handleWxCallback
await wxStore.waitForHandleWxCallbackComplete();
getShopListApi(wxStore.corpid).then((res) => {
if (res?.code === 0 && res?.data?.length > 0) {
shopList.value = res.data;

View File

@ -33,6 +33,8 @@ export const useWxStore = defineStore("wx", () => {
const ab98User = ref<ab98UserDTO | null>(null);
const isFakeQyLogin = ref<boolean>(false);
// handleWxCallback 是否完成
const isHandleWxCallbackComplete = ref<boolean>(false);
// 设置 openid
const setOpenid = (id: string) => {
@ -78,6 +80,7 @@ export const useWxStore = defineStore("wx", () => {
const handleWxCallback = async (params: { corpid?: string; code?: string; state?: string; }) => {
console.log('handleWxCallback:', params)
isHandleWxCallbackComplete.value = false; // 开始处理,标记为未完成
if (params.code) {
code.value = params.code
state.value = params.state || state.value
@ -134,8 +137,12 @@ export const useWxStore = defineStore("wx", () => {
}
} catch (err) {
console.error('获取 openid 失败:', err)
} finally {
isHandleWxCallbackComplete.value = true; // 处理完成,标记为已完成
}
} else {
isHandleWxCallbackComplete.value = true; // 没有code参数直接标记为已完成
}
}
@ -155,11 +162,24 @@ export const useWxStore = defineStore("wx", () => {
}
}
// 检测 handleWxCallback 是否完成的异步函数
const waitForHandleWxCallbackComplete = async (timeout = 30000): Promise<boolean> => {
const startTime = Date.now();
while (!isHandleWxCallbackComplete.value) {
if (Date.now() - startTime > timeout) {
console.warn('等待 handleWxCallback 完成超时');
return false;
}
await new Promise(resolve => setTimeout(resolve, 100)); // 每100ms检查一次
}
return true;
}
return { code, state, openid, corpid, userid, balance, useBalance,
balanceLimit, isCabinetAdmin, corpidLogin, name, ab98User, qyUserId, isFakeQyLogin,
setOpenid, setBalance, handleWxCallback, setIsCabinetAdmin, refreshBalance, setAb98User,
fakeQyLogin }
isHandleWxCallbackComplete, setOpenid, setBalance, handleWxCallback, setIsCabinetAdmin,
refreshBalance, setAb98User, fakeQyLogin, waitForHandleWxCallbackComplete }
})
/**