feat(pda): connect overseas inbound receiving

This commit is contained in:
2026-08-24 15:25:36 +08:00
parent 6de0884205
commit 690d3086d4
8 changed files with 166 additions and 35 deletions
+19 -2
View File
@@ -3,7 +3,7 @@ import { OVERSEAS_API_ROOT } from '@/config/runtime.js'
const SESSION_KEY = 'overseas-pda-auth-session'
export const session = reactive({ currentUser: null, token: '', refreshToken: '', tenantId: '', apiBase: OVERSEAS_API_ROOT })
export const session = reactive({ currentUser: null, token: '', domesticToken: '', refreshToken: '', tenantId: '', apiBase: OVERSEAS_API_ROOT })
function decodeBase64Url(value) {
const normalized = value.replace(/-/g, '+').replace(/_/g, '/')
@@ -32,6 +32,7 @@ function persistSession() {
uni.setStorageSync(SESSION_KEY, {
currentUser: session.currentUser,
token: session.token,
domesticToken: session.domesticToken,
refreshToken: session.refreshToken,
tenantId: session.tenantId,
apiBase: session.apiBase
@@ -41,6 +42,7 @@ 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.token = options.token || account.token || ''
session.domesticToken = options.domesticToken || account.domesticToken || ''
session.refreshToken = options.refreshToken || account.refreshToken || ''
session.tenantId = options.tenantId || account.tenantId || ''
session.apiBase = options.apiBase || account.apiBase || OVERSEAS_API_ROOT
@@ -50,21 +52,35 @@ export function signIn(account, warehouse, options = {}) {
export function signInWithTokens(tokens) {
if (!tokens?.accessToken) throw new Error('登录响应缺少 accessToken')
if (!tokens?.overseasAccessToken) throw new Error('登录响应缺少 overseasAccessToken')
const claims = decodeAccessToken(tokens.accessToken)
const overseasClaims = decodeAccessToken(tokens.overseasAccessToken)
if (claims.app_code !== 'PLATFORM') throw new Error('当前账号不属于平台作业端')
if (claims.exp && claims.exp * 1000 <= Date.now()) throw new Error('登录状态已过期')
if (overseasClaims.exp && overseasClaims.exp * 1000 <= Date.now()) throw new Error('海外作业令牌已过期')
return signIn({
id: claims.user_id ?? '',
name: claims.username || '仓库作业员',
role: Array.isArray(claims.roles) ? claims.roles.join('、') : '',
roles: claims.roles || []
}, '', {
token: tokens.accessToken,
token: tokens.overseasAccessToken,
domesticToken: tokens.accessToken,
refreshToken: tokens.refreshToken || '',
tenantId: claims.tenant_id == null ? '' : String(claims.tenant_id)
})
}
export function replaceTokens(tokens) {
if (!tokens?.accessToken || !tokens?.overseasAccessToken) throw new Error('刷新响应缺少双区域访问令牌')
decodeAccessToken(tokens.accessToken)
decodeAccessToken(tokens.overseasAccessToken)
session.domesticToken = tokens.accessToken
session.token = tokens.overseasAccessToken
session.refreshToken = tokens.refreshToken || session.refreshToken
persistSession()
}
export function restoreSession() {
if (!storageAvailable()) return false
const saved = uni.getStorageSync(SESSION_KEY)
@@ -82,6 +98,7 @@ export function restoreSession() {
export function signOut() {
session.currentUser = null
session.token = ''
session.domesticToken = ''
session.refreshToken = ''
session.tenantId = ''
session.apiBase = OVERSEAS_API_ROOT