优化
This commit is contained in:
@@ -1,2 +1,5 @@
|
|||||||
VITE_AUTH_API_BASE_URL=/api
|
VITE_AUTH_API_BASE_URL=/api
|
||||||
VITE_OVERSEAS_API_BASE_URL=/api/overseas
|
VITE_OVERSEAS_API_BASE_URL=/api/overseas
|
||||||
|
# 仅开发服务器自动预填;请在不提交的 .env.local 中填写真实开发账号。
|
||||||
|
VITE_PDA_DEV_USERNAME=
|
||||||
|
VITE_PDA_DEV_PASSWORD=
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ npm test
|
|||||||
npm run dev:h5
|
npm run dev:h5
|
||||||
```
|
```
|
||||||
|
|
||||||
|
开发环境可在不提交的 `.env.local` 中配置 `VITE_PDA_DEV_USERNAME`、`VITE_PDA_DEV_PASSWORD`,登录页会自动预填;生产 App 构建始终忽略这两个值,账号必须具备 `WAREHOUSE_PICKER`、`lastleg:pda:operate` 和有效海外仓绑定。
|
||||||
|
|
||||||
生产编译:
|
生产编译:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
const runtimeEnvironment = import.meta.env || {}
|
const runtimeEnvironment = import.meta.env || {}
|
||||||
const configuredAuthApiRoot = runtimeEnvironment.VITE_AUTH_API_BASE_URL || ''
|
const configuredAuthApiRoot = runtimeEnvironment.VITE_AUTH_API_BASE_URL || ''
|
||||||
const configuredOverseasApiRoot = runtimeEnvironment.VITE_OVERSEAS_API_BASE_URL || ''
|
const configuredOverseasApiRoot = runtimeEnvironment.VITE_OVERSEAS_API_BASE_URL || ''
|
||||||
|
const development = Boolean(runtimeEnvironment.DEV)
|
||||||
|
|
||||||
export const API_ROOT = String(configuredAuthApiRoot || '/api').replace(/\/$/, '')
|
export const API_ROOT = String(configuredAuthApiRoot || '/api').replace(/\/$/, '')
|
||||||
export const OVERSEAS_API_ROOT = String(configuredOverseasApiRoot || '/api/overseas').replace(/\/$/, '')
|
export const OVERSEAS_API_ROOT = String(configuredOverseasApiRoot || '/api/overseas').replace(/\/$/, '')
|
||||||
|
export const DEV_LOGIN = Object.freeze({
|
||||||
|
username: development ? String(runtimeEnvironment.VITE_PDA_DEV_USERNAME || '') : '',
|
||||||
|
password: development ? String(runtimeEnvironment.VITE_PDA_DEV_PASSWORD || '') : ''
|
||||||
|
})
|
||||||
|
|||||||
@@ -15,10 +15,11 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { login as loginRequest } from '@/api/auth.js'
|
import { login as loginRequest } from '@/api/auth.js'
|
||||||
|
import { DEV_LOGIN } from '@/config/runtime.js'
|
||||||
import { session, restoreSession, signInWithTokens } from '@/stores/session.js'
|
import { session, restoreSession, signInWithTokens } from '@/stores/session.js'
|
||||||
import { requireOnline } from '@/utils/network.js'
|
import { requireOnline } from '@/utils/network.js'
|
||||||
export default {
|
export default {
|
||||||
data() { return { form: { userId: '', password: '' }, error: '', submitting: false } },
|
data() { return { form: { userId: DEV_LOGIN.username, password: DEV_LOGIN.password }, error: '', submitting: false } },
|
||||||
onLoad() { if (session.currentUser || restoreSession()) uni.reLaunch({ url: '/pages/home/home' }) },
|
onLoad() { if (session.currentUser || restoreSession()) uni.reLaunch({ url: '/pages/home/home' }) },
|
||||||
methods: {
|
methods: {
|
||||||
async login() {
|
async login() {
|
||||||
|
|||||||
@@ -26,12 +26,14 @@ test('overseas workbench contains only confirmed inbound and in-warehouse domain
|
|||||||
})
|
})
|
||||||
|
|
||||||
test('login has no committed demo credentials and inbound operation implements the locked container flow', async () => {
|
test('login has no committed demo credentials and inbound operation implements the locked container flow', async () => {
|
||||||
const [login, operation, inbound, adapter, overseas] = await Promise.all([
|
const [login, runtime, operation, inbound, adapter, overseas] = await Promise.all([
|
||||||
read('../src/pages/login/login.vue'), read('../src/pages/operation/operation.vue'),
|
read('../src/pages/login/login.vue'), read('../src/config/runtime.js'),
|
||||||
read('../src/api/inbound.js'), read('../src/api/receiving-adapter.js'), read('../src/api/overseas.js')
|
read('../src/pages/operation/operation.vue'), read('../src/api/inbound.js'), read('../src/api/receiving-adapter.js'), read('../src/api/overseas.js')
|
||||||
])
|
])
|
||||||
assert.match(login, /柏悦物流海外版/)
|
assert.match(login, /柏悦物流海外版/)
|
||||||
assert.doesNotMatch(login, /ChangeMe|platform_admin/)
|
assert.doesNotMatch(login, /ChangeMe|platform_admin/)
|
||||||
|
assert.match(login, /DEV_LOGIN\.username|DEV_LOGIN\.password/)
|
||||||
|
assert.match(runtime, /runtimeEnvironment\.DEV|VITE_PDA_DEV_USERNAME|VITE_PDA_DEV_PASSWORD/)
|
||||||
assert.match(operation, /startScanBroadcast/)
|
assert.match(operation, /startScanBroadcast/)
|
||||||
for (const action of ['prepareReceivingContainer', 'getCurrentReceiving', 'resolveCurrentSku', 'resolveCurrentCarton', 'resolveCurrentPallet', 'receiveCurrentBulk', 'receiveCurrentCarton', 'completeCurrentReceiving']) assert.match(operation, new RegExp(action))
|
for (const action of ['prepareReceivingContainer', 'getCurrentReceiving', 'resolveCurrentSku', 'resolveCurrentCarton', 'resolveCurrentPallet', 'receiveCurrentBulk', 'receiveCurrentCarton', 'completeCurrentReceiving']) assert.match(operation, new RegExp(action))
|
||||||
for (const path of ['/candidates', '/prepare', '/unload-photos/files', '/sign', '/skus/resolve', '/cartons/resolve', '/pallets/resolve', '/receipts/bulk', '/receipts/carton', '/complete']) assert.match(inbound, new RegExp(path.replaceAll('/', '\\/')))
|
for (const path of ['/candidates', '/prepare', '/unload-photos/files', '/sign', '/skus/resolve', '/cartons/resolve', '/pallets/resolve', '/receipts/bulk', '/receipts/carton', '/complete']) assert.match(inbound, new RegExp(path.replaceAll('/', '\\/')))
|
||||||
|
|||||||
Reference in New Issue
Block a user