fix(wx): 确保微信回调处理完成后再获取店铺列表
添加 isHandleWxCallbackComplete 状态和 waitForHandleWxCallbackComplete 方法 在 ProductList.vue 中等待微信回调处理完成后再获取店铺列表
This commit is contained in:
parent
9d8af77253
commit
1818e01b57
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
})
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue