pda操作
This commit is contained in:
+14
-5
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<view v-if="user" class="page-shell portal-page home-page">
|
||||
<PortalHeader ref="portalHeader" :title="user.warehouse ? `首页 · ${user.warehouse}` : '首页'" :user="user" menu :warehouses="warehouses" :selected-warehouse-id="user.warehouseId" :warehouse-loading="warehouseLoading" :warehouse-error="warehouseError" @warehouse-select="changeWarehouse" @menu-change="menuOpen = $event" />
|
||||
<PortalHeader ref="portalHeader" :title="user.warehouse ? `首页 · ${user.warehouse}` : '首页'" :user="user" :menu="!isBoundOperator" :warehouses="warehouses" :selected-warehouse-id="user.warehouseId" :warehouse-loading="warehouseLoading" :warehouse-error="warehouseError" @warehouse-select="changeWarehouse" @menu-change="menuOpen = $event" />
|
||||
<view class="home-menu">
|
||||
<view v-for="group in groups" :key="group.key" class="home-group" :class="{ 'home-group-disabled': !group.available }">
|
||||
<view class="home-group-title"><view class="home-group-mark" :class="`home-group-mark-${group.key}`"></view><text>{{ group.name }}</text></view>
|
||||
@@ -21,7 +21,7 @@
|
||||
import PortalHeader from '@/components/PortalHeader.vue'
|
||||
import { MODULES } from '@/data/demo-data.js'
|
||||
import { listPdaWarehouses } from '@/api/pda-loading.js'
|
||||
import { session, requireSession, selectWarehouse } from '@/stores/session.js'
|
||||
import { session, requireSession, selectWarehouse, isDomesticPdaOperator } from '@/stores/session.js'
|
||||
|
||||
const ICON_TYPES = {
|
||||
'一件代发清点组托': 'download',
|
||||
@@ -42,6 +42,7 @@
|
||||
export default {
|
||||
components: { PortalHeader },
|
||||
data() { return { user: session.currentUser, groups: HOME_GROUPS, menuOpen: false, warehouses: [], warehouseLoading: false, warehouseError: '' } },
|
||||
computed: { isBoundOperator() { return isDomesticPdaOperator(this.user) } },
|
||||
onShow() { if (!requireSession()) return; this.user = session.currentUser; this.loadWarehouses() },
|
||||
onBackPress() {
|
||||
if (!this.menuOpen) return false
|
||||
@@ -53,13 +54,21 @@
|
||||
if (this.warehouseLoading) return
|
||||
this.warehouseLoading = true; this.warehouseError = ''
|
||||
try {
|
||||
this.warehouses = await listPdaWarehouses()
|
||||
if (!this.user.warehouseId) this.$nextTick(() => this.$refs.portalHeader.openMenu())
|
||||
const warehouses = await listPdaWarehouses()
|
||||
if (this.isBoundOperator) {
|
||||
const bound = warehouses.find((warehouse) => String(warehouse.id) === String(this.user.domesticWarehouseId || ''))
|
||||
if (!bound) throw new Error('账号绑定的作业仓库不存在或已停用,请联系管理员')
|
||||
this.user = selectWarehouse(bound)
|
||||
this.warehouses = [bound]
|
||||
} else {
|
||||
this.warehouses = warehouses
|
||||
if (!this.user.warehouseId) this.$nextTick(() => this.$refs.portalHeader.openMenu())
|
||||
}
|
||||
} catch (error) {
|
||||
this.warehouseError = error.message || '仓库加载失败,请稍后重试'
|
||||
} finally { this.warehouseLoading = false }
|
||||
},
|
||||
changeWarehouse(warehouse) { this.user = selectWarehouse(warehouse) },
|
||||
changeWarehouse(warehouse) { if (this.isBoundOperator) return; this.user = selectWarehouse(warehouse) },
|
||||
openOperation(operation) {
|
||||
if (!operation.available) return
|
||||
if (!this.user.warehouseId) { this.$refs.portalHeader.openMenu(); return }
|
||||
|
||||
+15
-5
@@ -10,6 +10,10 @@ const LOGIN_PREFERENCE_KEY = 'pda-login-account-preference'
|
||||
|
||||
export const session = reactive({ currentUser: null, token: '', refreshToken: '', tenantId: '', apiBase: PLATFORM_API_ROOT })
|
||||
|
||||
export function isDomesticPdaOperator(user = session.currentUser) {
|
||||
return Array.isArray(user?.roles) && user.roles.includes('CN_FIRSTLEG_PDA_OPERATOR')
|
||||
}
|
||||
|
||||
export function isAccessTokenExpiring(token = session.token, skewSeconds = 30) {
|
||||
try {
|
||||
const expiresAt = Number(decodeAccessToken(token).exp || 0) * 1000
|
||||
@@ -49,7 +53,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.currentUser = { id: String(account.id), name: account.name, role: account.role, roles: account.roles || [], warehouse, warehouseId: account.warehouseId || null, domesticWarehouseId: account.domesticWarehouseId || null, warehouseBound: Boolean(account.domesticWarehouseId) }
|
||||
session.token = options.token || account.token || ''
|
||||
session.refreshToken = options.refreshToken || account.refreshToken || ''
|
||||
session.tenantId = options.tenantId || account.tenantId || ''
|
||||
@@ -69,8 +73,9 @@ export function signInWithTokens(tokens) {
|
||||
return signIn({
|
||||
id: claims.user_id ?? '',
|
||||
name: claims.username || '仓库作业员',
|
||||
role: Array.isArray(claims.roles) ? claims.roles.join('、') : '',
|
||||
roles: claims.roles || []
|
||||
role: Array.isArray(claims.roles || tokens.roles) ? (claims.roles || tokens.roles).join('、') : '',
|
||||
roles: claims.roles || tokens.roles || [],
|
||||
domesticWarehouseId: claims.domestic_warehouse_id || tokens.domesticWarehouseId || null
|
||||
}, '', {
|
||||
token: tokens.accessToken,
|
||||
refreshToken: tokens.refreshToken || '',
|
||||
@@ -82,6 +87,7 @@ export function selectWarehouse(warehouse) {
|
||||
if (!session.currentUser) throw new Error('请先登录')
|
||||
if (!warehouse?.id || !warehouse?.warehouseName) throw new Error('请选择有效的作业仓库')
|
||||
const warehouseId = String(warehouse.id)
|
||||
if (isDomesticPdaOperator() && String(session.currentUser.domesticWarehouseId || '') !== warehouseId) throw new Error('当前账号已绑定固定作业仓库,不能切换')
|
||||
if (String(session.currentUser.warehouseId || '') !== warehouseId) resetPickingSession()
|
||||
session.currentUser = {
|
||||
...session.currentUser,
|
||||
@@ -105,7 +111,9 @@ export function updateTokenPair(tokens) {
|
||||
id: String(claims.user_id ?? previousUser.id ?? ''),
|
||||
name: claims.username || previousUser.name || '仓库作业员',
|
||||
role: Array.isArray(claims.roles) ? claims.roles.join('、') : (previousUser.role || ''),
|
||||
roles: claims.roles || previousUser.roles || []
|
||||
roles: claims.roles || previousUser.roles || [],
|
||||
domesticWarehouseId: claims.domestic_warehouse_id || previousUser.domesticWarehouseId || null,
|
||||
warehouseBound: Boolean(claims.domestic_warehouse_id || previousUser.domesticWarehouseId)
|
||||
}
|
||||
session.token = tokens.accessToken
|
||||
session.refreshToken = tokens.refreshToken
|
||||
@@ -129,7 +137,9 @@ export function restoreSession() {
|
||||
id: String(claims.user_id ?? savedUser.id ?? ''),
|
||||
name: claims.username || savedUser.name || '仓库作业员',
|
||||
role: Array.isArray(claims.roles) ? claims.roles.join('、') : (savedUser.role || ''),
|
||||
roles: claims.roles || savedUser.roles || []
|
||||
roles: claims.roles || savedUser.roles || [],
|
||||
domesticWarehouseId: claims.domestic_warehouse_id || savedUser.domesticWarehouseId || null,
|
||||
warehouseBound: Boolean(claims.domestic_warehouse_id || savedUser.domesticWarehouseId)
|
||||
},
|
||||
tenantId: claims.tenant_id == null ? (saved.tenantId || '') : String(claims.tenant_id),
|
||||
apiBase: saved.apiBase || PLATFORM_API_ROOT
|
||||
|
||||
@@ -6,6 +6,7 @@ const EXACT_INTEGER_CLAIMS = [
|
||||
'operator_tenant_id',
|
||||
'membership_id',
|
||||
'overseas_warehouse_id',
|
||||
'domestic_warehouse_id',
|
||||
'actor_user_id',
|
||||
'actor_membership_id'
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user