优化
This commit is contained in:
+25
-6
@@ -66,14 +66,18 @@ export function validatePdaTokenPair(accessToken, overseasAccessToken) {
|
||||
return { domestic, overseas, warehouseId }
|
||||
}
|
||||
|
||||
function userFromClaims(pair) {
|
||||
function userFromClaims(pair, saved = {}) {
|
||||
const savedWarehouseId = String(saved?.warehouseId || '')
|
||||
const sameWarehouse = savedWarehouseId === pair.warehouseId
|
||||
return {
|
||||
id: claimId(pair.domestic, 'user_id'),
|
||||
name: pair.domestic.username || '仓库作业员',
|
||||
role: PDA_ROLE,
|
||||
roles: [...pair.overseas.roles],
|
||||
warehouse: `海外仓 #${pair.warehouseId}`,
|
||||
warehouseId: pair.warehouseId
|
||||
warehouse: sameWarehouse && saved.warehouseName ? saved.warehouseName : `海外仓 #${pair.warehouseId}`,
|
||||
warehouseId: pair.warehouseId,
|
||||
warehouseCode: sameWarehouse ? (saved.warehouseCode || '') : '',
|
||||
warehouseName: sameWarehouse ? (saved.warehouseName || '') : ''
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,7 +98,8 @@ function persistSession() {
|
||||
}
|
||||
|
||||
export function signIn(account, warehouse, options = {}) {
|
||||
session.currentUser = { id: String(account.id), name: account.name, role: account.role, roles: account.roles || [], warehouse, warehouseId: account.warehouseId || null }
|
||||
session.currentUser = { id: String(account.id), name: account.name, role: account.role, roles: account.roles || [], warehouse,
|
||||
warehouseId: account.warehouseId || null, warehouseCode: account.warehouseCode || '', warehouseName: account.warehouseName || '' }
|
||||
session.token = options.token || account.token || ''
|
||||
session.domesticToken = options.domesticToken || account.domesticToken || ''
|
||||
session.refreshToken = options.refreshToken || account.refreshToken || ''
|
||||
@@ -120,7 +125,7 @@ export function signInWithTokens(tokens) {
|
||||
export function replaceTokens(tokens) {
|
||||
if (!tokens?.accessToken || !tokens?.overseasAccessToken) throw new Error('刷新响应缺少双区域访问令牌')
|
||||
const pair = validatePdaTokenPair(tokens.accessToken, tokens.overseasAccessToken)
|
||||
const user = userFromClaims(pair)
|
||||
const user = userFromClaims(pair, session.currentUser)
|
||||
const nextRefreshToken = tokens.refreshToken || session.refreshToken
|
||||
// Validate the complete replacement before mutating reactive or persisted session state.
|
||||
session.domesticToken = tokens.accessToken
|
||||
@@ -131,6 +136,20 @@ export function replaceTokens(tokens) {
|
||||
persistSession()
|
||||
}
|
||||
|
||||
export function applyWarehouseProfile(profile) {
|
||||
if (!session.currentUser) throw new Error('当前登录会话不存在')
|
||||
const warehouseId = String(profile?.warehouseId || '')
|
||||
if (!warehouseId || warehouseId !== String(session.currentUser.warehouseId)) throw new Error('仓库主档与当前登录仓库不一致')
|
||||
session.currentUser = {
|
||||
...session.currentUser,
|
||||
warehouse: profile.warehouseName || profile.warehouseCode || `海外仓 #${warehouseId}`,
|
||||
warehouseCode: String(profile.warehouseCode || ''),
|
||||
warehouseName: String(profile.warehouseName || '')
|
||||
}
|
||||
persistSession()
|
||||
return session.currentUser
|
||||
}
|
||||
|
||||
export function restoreSession() {
|
||||
if (!storageAvailable()) return false
|
||||
const saved = uni.getStorageSync(SESSION_KEY)
|
||||
@@ -141,7 +160,7 @@ export function restoreSession() {
|
||||
try {
|
||||
const pair = validatePdaTokenPair(saved.domesticToken, saved.token)
|
||||
Object.assign(session, saved, {
|
||||
currentUser: userFromClaims(pair), tenantId: claimId(pair.domestic, 'tenant_id'),
|
||||
currentUser: userFromClaims(pair, saved.currentUser), tenantId: claimId(pair.domestic, 'tenant_id'),
|
||||
apiBase: OVERSEAS_API_ROOT
|
||||
})
|
||||
return true
|
||||
|
||||
Reference in New Issue
Block a user