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 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;

View File

@ -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 }
}) })
/** /**