From cd8b52bdf89a4d1101f72e0ece9f4df22a3d3f7a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 15 十月 2026 16:03:32 +0800
Subject: [PATCH] feat(mdm): 物料列表隐藏辅单位与销售价列

---
 src/store/auth.ts |   51 +++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/src/store/auth.ts b/src/store/auth.ts
index 3643cf0..c2b1dd6 100644
--- a/src/store/auth.ts
+++ b/src/store/auth.ts
@@ -21,6 +21,7 @@
   socialLogin,
 } from '#/api';
 import { $t } from '#/locales';
+import { automaticApproval, loadAuditPolicy } from '#/store/audit-policy';
 
 export const useAuthStore = defineStore('auth', () => {
   const accessStore = useAccessStore();
@@ -28,6 +29,8 @@
   const router = useRouter();
 
   const loginLoading = ref(false);
+  let sessionVersion = 0;
+  let logoutTask: Promise<void> | null = null;
 
   /**
    * 寮傛澶勭悊鐧诲綍鎿嶄綔
@@ -43,6 +46,7 @@
   ) {
     // 寮傛澶勭悊鐢ㄦ埛鐧诲綍鎿嶄綔骞惰幏鍙� accessToken
     let userInfo: null | UserInfo = null;
+    const version = ++sessionVersion;
     try {
       let loginResult: AuthApi.LoginResult;
       loginLoading.value = true;
@@ -64,6 +68,7 @@
         }
       }
       const { accessToken, refreshToken } = loginResult;
+      if (version !== sessionVersion) return { userInfo: null };
 
       // 濡傛灉鎴愬姛鑾峰彇鍒� accessToken
       if (accessToken) {
@@ -77,6 +82,7 @@
         //   // getAccessCodesApi(),
         // ]);
         const fetchUserInfoResult = await fetchUserInfo();
+        if (version !== sessionVersion) return { userInfo: null };
 
         userInfo = fetchUserInfoResult.user;
 
@@ -97,8 +103,11 @@
           });
         }
       }
+    } catch (error) {
+      if (version === sessionVersion) throw error;
+      return { userInfo: null };
     } finally {
-      loginLoading.value = false;
+      if (version === sessionVersion) loginLoading.value = false;
     }
 
     return {
@@ -106,16 +115,28 @@
     };
   }
 
-  async function logout(redirect: boolean = true) {
+  function logout(redirect: boolean = true): Promise<void> {
+    if (logoutTask) return logoutTask;
+    const accessToken = accessStore.accessToken;
+    const tenant = { tenantId: accessStore.tenantId, visitTenantId: accessStore.visitTenantId };
+    const fullPath = router.currentRoute.value.fullPath;
+    ++sessionVersion;
+    // 鏈嶅姟鍣ㄦ敞閿�鐙珛鎵ц锛屾湰鍦版竻鐞嗕笌璺宠浆涓嶇瓑寰呯綉缁溿��
+    // 浣跨敤閫�鍑哄墠鐨� token 鍜岀鎴峰揩鐓э紝閬垮厤娓呯悊鍚庝涪澶辨敞閿�涓婁笅鏂囥��
+    if (accessToken) void logoutApi(accessToken, tenant).catch(() => {});
+    logoutTask = clearSessionAndNavigate(redirect, fullPath).finally(() => { logoutTask = null; });
+    return logoutTask;
+  }
+
+  async function clearSessionAndNavigate(redirect: boolean, fullPath: string) {
     try {
-      const accessToken = accessStore.accessToken as string;
-      if (accessToken) {
-        await logoutApi(accessToken);
-      }
-    } catch {
-      // 涓嶅仛浠讳綍澶勭悊
+      resetAllStores();
+    } catch (error) {
+      console.error('Failed to reset business stores during logout', error);
     }
-    resetAllStores();
+    // 璁よ瘉娓呯悊涓嶈兘渚濊禆涓氬姟 store 鐨勯噸缃粨鏋溿��
+    accessStore.$reset();
+    userStore.$reset();
     accessStore.setLoginExpired(false);
 
     // 鍥炵櫥褰曢〉甯︿笂褰撳墠璺敱鍦板潃
@@ -123,17 +144,26 @@
       path: LOGIN_PATH,
       query: redirect
         ? {
-            redirect: encodeURIComponent(router.currentRoute.value.fullPath),
+            redirect: encodeURIComponent(fullPath),
           }
         : {},
     });
   }
 
   async function fetchUserInfo() {
+    const version = sessionVersion;
+    const accessToken = accessStore.accessToken;
     // 鍔犺浇
     // eslint-disable-next-line no-useless-assignment
     let authPermissionInfo: AuthPermissionInfo | null = null;
     authPermissionInfo = await getAuthPermissionInfoApi();
+    if (version !== sessionVersion || accessToken !== accessStore.accessToken) {
+      throw new Error('鐧诲綍鐘舵�佸凡鍙樺寲锛屽拷鐣ユ棫浼氳瘽鐨勭敤鎴蜂俊鎭�');
+    }
+    await loadAuditPolicy();
+    if (version !== sessionVersion || accessToken !== accessStore.accessToken) {
+      throw new Error('鐧诲綍鐘舵�佸凡鍙樺寲锛屽拷鐣ユ棫浼氳瘽鐨勭敤鎴蜂俊鎭�');
+    }
     // userStore
     userStore.setUserInfo(authPermissionInfo.user);
     userStore.setUserRoles(authPermissionInfo.roles);
@@ -145,6 +175,7 @@
 
   function $reset() {
     loginLoading.value = false;
+    automaticApproval.value = false;
   }
 
   return {

--
Gitblit v1.9.3