This commit is contained in:
薇薇安 2026-01-23 19:46:43 +08:00
parent 2ee6e7a009
commit 7a64ff44c2
2 changed files with 38 additions and 3 deletions

View File

@ -61,8 +61,33 @@ const withAuthHeaders = (headers = {}) => {
return { ...headers, Authorization: `Bearer ${token}` };
};
const withAccountHeaders = (headers = {}) => {
const aid = getCurrentAccountId();
// 全局变量,用于存储当前的 accountId从 Redux store 同步)
let currentAccountIdFromStore = null;
// 设置当前 accountId由 Redux store 调用)
export const setCurrentAccountIdFromStore = (accountId) => {
currentAccountIdFromStore = accountId;
// 同时更新 localStorage 保持同步
if (accountId) {
setCurrentAccountId(accountId);
}
};
const withAccountHeaders = (headers = {}, accountIdOverride = null) => {
// 优先使用传入的参数,其次使用 Redux store 的值,最后从 localStorage 读取
let aid;
if (accountIdOverride !== null) {
aid = accountIdOverride;
} else if (currentAccountIdFromStore !== null) {
aid = currentAccountIdFromStore;
} else {
// 从 localStorage 读取(兜底)
aid = getCurrentAccountId();
// 如果从 localStorage 读取到了值,同步到全局变量(避免下次再读 localStorage
if (aid) {
currentAccountIdFromStore = aid;
}
}
return withAuthHeaders({ ...headers, 'X-Account-Id': String(aid) });
};

View File

@ -1,4 +1,5 @@
import { createSlice } from '@reduxjs/toolkit'
import { setCurrentAccountIdFromStore } from '../services/api'
const VIEWING_USER_ID_KEY = 'ats_viewing_user_id'
const ACCOUNT_ID_STORAGE_KEY = 'ats_account_id'
@ -27,10 +28,14 @@ const getInitialAccountId = () => {
}
}
const initialAccountId = getInitialAccountId()
// 初始化时同步到 api.js
setCurrentAccountIdFromStore(initialAccountId)
const initialState = {
currentUser: null, // 当前登录用户
viewingUserId: getInitialViewingUserId(), // 管理员查看的用户ID
accountId: getInitialAccountId(), // 当前选中的账号ID
accountId: initialAccountId, // 当前选中的账号ID
accounts: [], // 当前用户的账号列表
users: [], // 用户列表(管理员可见)
}
@ -62,6 +67,8 @@ const appSlice = createSlice({
setAccountId: (state, action) => {
const accountId = action.payload
state.accountId = accountId
// 同步到 api.js 的全局变量,确保 API 请求使用最新的 accountId
setCurrentAccountIdFromStore(accountId)
if (accountId) {
try {
localStorage.setItem(ACCOUNT_ID_STORAGE_KEY, String(accountId))
@ -110,6 +117,8 @@ const appSlice = createSlice({
const nextAccountId = parseInt(String(firstAccount.id || ''), 10)
if (Number.isFinite(nextAccountId) && nextAccountId > 0) {
state.accountId = nextAccountId
// 同步到 api.js 的全局变量
setCurrentAccountIdFromStore(nextAccountId)
try {
localStorage.setItem(ACCOUNT_ID_STORAGE_KEY, String(nextAccountId))
} catch (e) {
@ -125,6 +134,7 @@ const appSlice = createSlice({
} else {
// 如果没有账号,清空 accountId
state.accountId = null
setCurrentAccountIdFromStore(null)
try {
localStorage.removeItem(ACCOUNT_ID_STORAGE_KEY)
} catch (e) {