diff --git a/src/pages/product/ProductList.vue b/src/pages/product/ProductList.vue index 31c5534..f2236ab 100644 --- a/src/pages/product/ProductList.vue +++ b/src/pages/product/ProductList.vue @@ -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; diff --git a/src/pinia/stores/wx.ts b/src/pinia/stores/wx.ts index 3ef2bc7..a205709 100644 --- a/src/pinia/stores/wx.ts +++ b/src/pinia/stores/wx.ts @@ -33,6 +33,8 @@ export const useWxStore = defineStore("wx", () => { const ab98User = ref(null); const isFakeQyLogin = ref(false); + // handleWxCallback 是否完成 + const isHandleWxCallbackComplete = ref(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 => { + 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 } }) /**