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 urlParams = new URLSearchParams(window.location.search);
|
||||||
const shopIdParam = urlParams.get('shopId') || undefined;
|
const shopIdParam = urlParams.get('shopId') || undefined;
|
||||||
|
|
||||||
if (showShopList.value) {
|
if (showShopList.value) {
|
||||||
|
// 等待 handleWxCallback 完成
|
||||||
|
await wxStore.waitForHandleWxCallbackComplete();
|
||||||
getShopListApi(wxStore.corpid).then((res) => {
|
getShopListApi(wxStore.corpid).then((res) => {
|
||||||
if (res?.code === 0 && res?.data?.length > 0) {
|
if (res?.code === 0 && res?.data?.length > 0) {
|
||||||
shopList.value = res.data;
|
shopList.value = res.data;
|
||||||
|
|
@ -95,9 +97,11 @@ function handleCheckout() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 路由更新时刷新数据
|
// 路由更新时刷新数据
|
||||||
watch(() => route.path, (newPath) => {
|
watch(() => route.path, async (newPath) => {
|
||||||
if (newPath === '/') {
|
if (newPath === '/') {
|
||||||
if (showShopList.value) {
|
if (showShopList.value) {
|
||||||
|
// 等待 handleWxCallback 完成
|
||||||
|
await wxStore.waitForHandleWxCallbackComplete();
|
||||||
getShopListApi(wxStore.corpid).then((res) => {
|
getShopListApi(wxStore.corpid).then((res) => {
|
||||||
if (res?.code === 0 && res?.data?.length > 0) {
|
if (res?.code === 0 && res?.data?.length > 0) {
|
||||||
shopList.value = res.data;
|
shopList.value = res.data;
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ export const useWxStore = defineStore("wx", () => {
|
||||||
const ab98User = ref<ab98UserDTO | null>(null);
|
const ab98User = ref<ab98UserDTO | null>(null);
|
||||||
|
|
||||||
const isFakeQyLogin = ref<boolean>(false);
|
const isFakeQyLogin = ref<boolean>(false);
|
||||||
|
// handleWxCallback 是否完成
|
||||||
|
const isHandleWxCallbackComplete = ref<boolean>(false);
|
||||||
|
|
||||||
// 设置 openid
|
// 设置 openid
|
||||||
const setOpenid = (id: string) => {
|
const setOpenid = (id: string) => {
|
||||||
|
|
@ -78,6 +80,7 @@ export const useWxStore = defineStore("wx", () => {
|
||||||
|
|
||||||
const handleWxCallback = async (params: { corpid?: string; code?: string; state?: string; }) => {
|
const handleWxCallback = async (params: { corpid?: string; code?: string; state?: string; }) => {
|
||||||
console.log('handleWxCallback:', params)
|
console.log('handleWxCallback:', params)
|
||||||
|
isHandleWxCallbackComplete.value = false; // 开始处理,标记为未完成
|
||||||
if (params.code) {
|
if (params.code) {
|
||||||
code.value = params.code
|
code.value = params.code
|
||||||
state.value = params.state || state.value
|
state.value = params.state || state.value
|
||||||
|
|
@ -134,8 +137,12 @@ export const useWxStore = defineStore("wx", () => {
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('获取 openid 失败:', 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,
|
return { code, state, openid, corpid, userid, balance, useBalance,
|
||||||
balanceLimit, isCabinetAdmin, corpidLogin, name, ab98User, qyUserId, isFakeQyLogin,
|
balanceLimit, isCabinetAdmin, corpidLogin, name, ab98User, qyUserId, isFakeQyLogin,
|
||||||
setOpenid, setBalance, handleWxCallback, setIsCabinetAdmin, refreshBalance, setAb98User,
|
isHandleWxCallbackComplete, setOpenid, setBalance, handleWxCallback, setIsCabinetAdmin,
|
||||||
fakeQyLogin }
|
refreshBalance, setAb98User, fakeQyLogin, waitForHandleWxCallbackComplete }
|
||||||
})
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue