优化
This commit is contained in:
+2
-12
@@ -3,7 +3,7 @@ import { RECEIVING_PHOTO_ROLES } from '../api/receiving-adapter.js'
|
||||
|
||||
export const receiving = reactive({
|
||||
candidates: [], selected: null, current: null, photoSlots: [null, null, null],
|
||||
selectedInboundCode: '', resolvedCarton: null, resolvedSku: null, resolvedPallet: null,
|
||||
resolvedCarton: null, resolvedPallet: null,
|
||||
activeScanTarget: 'container', lastReceipt: null
|
||||
})
|
||||
|
||||
@@ -23,17 +23,9 @@ export function receivingProgress(session = receiving.current) {
|
||||
return { total, received, pending: Math.max(0, Number(session?.pendingPackages ?? total - received)), percent: total ? Math.min(100, Math.round(received / total * 100)) : 0 }
|
||||
}
|
||||
|
||||
export function selectedInbound(session = receiving.current) {
|
||||
return (session?.inbounds || []).find((item) => item.inboundCode === receiving.selectedInboundCode) || null
|
||||
}
|
||||
|
||||
export function setCurrentReceiving(value) {
|
||||
receiving.current = value || null
|
||||
receiving.selected = value || null
|
||||
const chosen = selectedInbound(value)
|
||||
if (!chosen || Number(chosen.pendingPackages || 0) <= 0) {
|
||||
receiving.selectedInboundCode = (value?.inbounds || []).find((item) => Number(item.pendingPackages || 0) > 0)?.inboundCode || value?.inbounds?.[0]?.inboundCode || ''
|
||||
}
|
||||
receiving.photoSlots = RECEIVING_PHOTO_ROLES.map((role) => {
|
||||
const photo = (value?.photos || []).find((item) => item.role === role)
|
||||
return photo ? { ...photo, fileId: String(photo.fileId), role, uploaded: true, status: 'success' } : null
|
||||
@@ -44,11 +36,9 @@ export function resetReceivingDraft({ keepCurrent = false } = {}) {
|
||||
receiving.selected = keepCurrent ? receiving.current : null
|
||||
if (!keepCurrent) receiving.current = null
|
||||
receiving.photoSlots = [null, null, null]
|
||||
receiving.selectedInboundCode = ''
|
||||
receiving.resolvedCarton = null
|
||||
receiving.resolvedSku = null
|
||||
receiving.resolvedPallet = null
|
||||
receiving.activeScanTarget = keepCurrent ? 'pallet' : 'container'
|
||||
receiving.activeScanTarget = keepCurrent ? 'carton' : 'container'
|
||||
receiving.lastReceipt = null
|
||||
idempotencyKeys.clear()
|
||||
}
|
||||
|
||||
+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