feat(overseas-pda): prefer business identifiers

This commit is contained in:
2026-08-30 17:38:15 +08:00
parent 4810b44452
commit 49aad23098
7 changed files with 89 additions and 11 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
<template><view v-if="user" class="page-shell portal-page"><PortalHeader title="作业记录" :user="user" /><view class="portal-content"><view class="summary-card"><view><text class="summary-number">0</text><text class="summary-label">今日完成</text></view><view><text class="summary-number pending-color">0</text><text class="summary-label">进行中</text></view></view><text class="group-title">最近作业</text><view class="history-empty"><text class="history-empty-icon">▤</text><text class="history-empty-title">暂无海外仓作业记录</text><text class="history-empty-desc">接入海外仓真实任务后,完成记录会显示在这里</text></view></view></view></template>
<template><view v-if="user" class="page-shell portal-page"><PortalHeader title="作业记录" :user="user" /><view class="portal-content"><view class="summary-card"><view><text class="summary-number">0</text><text class="summary-label">今日完成</text></view><view><text class="summary-number pending-color">0</text><text class="summary-label">进行中</text></view></view><text class="group-title">最近作业</text><view class="history-empty"><text class="history-empty-icon">▤</text><text class="history-empty-title">暂无海外仓作业记录</text><text class="history-empty-desc">当前暂无可查看的作业记录</text></view></view></view></template>
<script>
import PortalHeader from '@/components/PortalHeader.vue'; import { session, requireSession } from '@/stores/session.js'
export default { components: { PortalHeader }, data() { return { user: session.currentUser } }, onShow() { if (!requireSession()) return; this.user = session.currentUser } }
+1 -4
View File
@@ -47,10 +47,7 @@
return name && !/^[a-z0-9._-]+$/i.test(name) ? name : '仓库作业员'
},
warehouseLabel() {
if (this.user?.warehouseName) return this.user.warehouseCode ? `${this.user.warehouseName} · ${this.user.warehouseCode}` : this.user.warehouseName
const warehouseId = String(this.user?.warehouseId || '')
if (warehouseId) return `当前作业仓 · ${warehouseId.slice(-6)}`
return this.user?.warehouse || '仓库由当前账号自动绑定'
return String(this.user?.warehouseName || '').trim() || '海外仓未关联'
},
greeting() {
const hour = new Date().getHours()
+1 -1
View File
@@ -100,7 +100,7 @@
<template v-else>
<view class="receiving-heading"><view><text class="receiving-title">{{ operationName }}</text><text class="receiving-subtitle">当前功能暂未开放</text></view></view>
<view class="blocked-card"><uni-icons type="locked" color="#8090a3" size="36" /><text class="blocked-title">功能暂未开放</text><text>现有平台、客户或内部接口不能由仓库作业员直接调用。扫码不会提交,也不会产生模拟成功结果。</text></view>
<view class="blocked-card"><uni-icons type="locked" color="#8090a3" size="36" /><text class="blocked-title">功能暂未开放</text><text>当前作业暂未开放,扫码不会提交,请返回工作台选择可用功能。</text></view>
</template>
</view>
<view v-if="toast.visible" class="app-toast" :class="toast.type" role="status">{{ toast.message }}</view>
+3 -2
View File
@@ -2,7 +2,7 @@
<view v-if="user" class="page-shell portal-page">
<PortalHeader title="个人中心" :user="user" :show-profile="false" />
<view class="portal-content profile-content">
<view class="profile-card"><view class="profile-avatar">{{ avatar }}</view><view><text class="profile-name">{{ displayName }}</text><text class="profile-role">{{ user.role }} · {{ user.id }}</text></view></view>
<view class="profile-card"><view class="profile-avatar">{{ avatar }}</view><view><text class="profile-name">{{ displayName }}</text><text class="profile-role">{{ roleLabel }}</text></view></view>
<view class="profile-list">
<view class="profile-row"><text>作业仓库</text><text class="profile-value">{{ warehouseDisplay }}</text></view>
<view class="profile-row"><text>当前班次</text><text class="profile-value">以海外仓排班为准</text></view>
@@ -30,7 +30,8 @@
computed: {
displayName() { const name = String(this.user?.name || ''); return name && !/^[a-z0-9._-]+$/i.test(name) ? name : '仓库作业员' },
avatar() { return this.displayName.slice(0, 1).toUpperCase() },
warehouseDisplay() { return this.user?.warehouseName ? (this.user.warehouseCode ? `${this.user.warehouseName} · ${this.user.warehouseCode}` : this.user.warehouseName) : (this.user?.warehouse || '正在读取仓库主档') },
roleLabel() { return '海外仓作业员' },
warehouseDisplay() { return String(this.user?.warehouseName || '').trim() || '海外仓未关联' },
languageLabel() { return LOCALE_OPTIONS.find((item) => item.value === this.locale)?.label || 'English' }
},
onShow() { if (!requireSession()) return; this.user = session.currentUser; this.loadAppVersion(); this.loadWarehouseProfile() },
+2 -2
View File
@@ -74,7 +74,7 @@ function userFromClaims(pair, saved = {}) {
name: pair.domestic.username || '仓库作业员',
role: PDA_ROLE,
roles: [...pair.overseas.roles],
warehouse: sameWarehouse && saved.warehouseName ? saved.warehouseName : `海外仓 #${pair.warehouseId}`,
warehouse: sameWarehouse && saved.warehouseName ? saved.warehouseName : '',
warehouseId: pair.warehouseId,
warehouseCode: sameWarehouse ? (saved.warehouseCode || '') : '',
warehouseName: sameWarehouse ? (saved.warehouseName || '') : ''
@@ -142,7 +142,7 @@ export function applyWarehouseProfile(profile) {
if (!warehouseId || warehouseId !== String(session.currentUser.warehouseId)) throw new Error('仓库主档与当前登录仓库不一致')
session.currentUser = {
...session.currentUser,
warehouse: profile.warehouseName || profile.warehouseCode || `海外仓 #${warehouseId}`,
warehouse: profile.warehouseName || '',
warehouseCode: String(profile.warehouseCode || ''),
warehouseName: String(profile.warehouseName || '')
}