优化
This commit is contained in:
+48
-2
@@ -42,6 +42,13 @@ async function tokenAfterUnauthorized(failedToken) {
|
||||
|
||||
function overseasUrl(path) {
|
||||
const base = String(session.apiBase || '').replace(/\/$/, '')
|
||||
const nativeRuntime = typeof plus !== 'undefined'
|
||||
|| (typeof location !== 'undefined' && location.protocol === 'file:')
|
||||
if (nativeRuntime && !/^https?:\/\//i.test(base)) {
|
||||
const error = new Error('海外服务地址未配置:App 必须设置绝对 HTTP(S) 地址 VITE_OVERSEAS_API_BASE_URL')
|
||||
error.code = 'PDA_OVERSEAS_API_BASE_REQUIRED'
|
||||
throw error
|
||||
}
|
||||
const value = `/${String(path || '').replace(/^\/+/, '')}`
|
||||
const normalized = /\/(?:api|overseas-api)$/.test(base)
|
||||
? value.replace(/^\/api(?=\/)/, '')
|
||||
@@ -79,14 +86,53 @@ export async function overseasRequest(method, path, data, retry = true) {
|
||||
}
|
||||
|
||||
function rawUpload(path, filePath, name, token) {
|
||||
const browserFile = typeof Blob !== 'undefined' && filePath instanceof Blob
|
||||
if (!browserFile && !String(filePath || '').trim()) {
|
||||
const error = new Error('未获取到可上传的照片路径,请重新拍摄')
|
||||
error.code = 'PDA_UPLOAD_FILE_PATH_REQUIRED'
|
||||
return Promise.reject(error)
|
||||
}
|
||||
let url
|
||||
try { url = overseasUrl(path) } catch (error) { return Promise.reject(error) }
|
||||
const h5Runtime = typeof window !== 'undefined' && typeof plus === 'undefined'
|
||||
if (h5Runtime && browserFile) return new Promise((resolve, reject) => {
|
||||
uni.uploadFile({
|
||||
url, files: [{ name, file: filePath }],
|
||||
header: { Authorization: `Bearer ${token}` },
|
||||
success: resolve,
|
||||
fail: (cause) => reject(Object.assign(new Error(cause.errMsg || '海外作业文件上传失败'), { network: true, uploadUrl: url }))
|
||||
})
|
||||
})
|
||||
if (h5Runtime && /^blob:/i.test(filePath)) {
|
||||
const selectedFile = fetch(filePath).then((source) => {
|
||||
if (!source.ok) throw new Error('无法读取已选择的照片')
|
||||
return source.blob()
|
||||
})
|
||||
return selectedFile.then(async (blob) => {
|
||||
const form = new FormData()
|
||||
const suffix = String(blob.type || '').split('/')[1] || 'jpg'
|
||||
form.append(name, blob, blob.name || `pda-photo.${suffix}`)
|
||||
if (typeof XMLHttpRequest !== 'undefined') return new Promise((resolve, reject) => {
|
||||
const request = new XMLHttpRequest()
|
||||
request.open('POST', url)
|
||||
request.setRequestHeader('Authorization', `Bearer ${token}`)
|
||||
request.onload = () => resolve({ statusCode: request.status, data: request.responseText, header: {} })
|
||||
request.onerror = () => reject(new Error('海外作业文件上传失败'))
|
||||
request.send(form)
|
||||
})
|
||||
const response = await fetch(url, { method: 'POST', headers: { Authorization: `Bearer ${token}` }, body: form })
|
||||
return { statusCode: response.status, data: await response.text(), header: Object.fromEntries(response.headers.entries()) }
|
||||
})
|
||||
.catch((cause) => { throw Object.assign(new Error(cause.message || '海外作业文件上传失败'), { network: true, uploadUrl: url }) })
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
uni.uploadFile({
|
||||
url: overseasUrl(path),
|
||||
url,
|
||||
filePath,
|
||||
name,
|
||||
header: { Authorization: `Bearer ${token}` },
|
||||
success: resolve,
|
||||
fail: (cause) => reject(Object.assign(new Error(cause.errMsg || '海外作业文件上传失败'), { network: true }))
|
||||
fail: (cause) => reject(Object.assign(new Error(cause.errMsg || '海外作业文件上传失败'), { network: true, uploadUrl: url }))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import { overseasRequest } from './overseas.js'
|
||||
|
||||
const BASE = '/pda/v1/last-leg/pallet-operations'
|
||||
export const findRelabelSources = (relabelNo) => overseasRequest('POST', `${BASE}/relabel-sources`, { relabelNo })
|
||||
export const createRelabelPallet = (payload) => overseasRequest('POST', `${BASE}/relabel-pallet-label`, payload)
|
||||
export const bindRelabelPallet = (payload) => overseasRequest('POST', `${BASE}/relabel-disassemble`, payload)
|
||||
|
||||
export function resolvePallet(code) {
|
||||
return overseasRequest('POST', `${BASE}/pallets/resolve`, { code: String(code || '').trim() })
|
||||
|
||||
@@ -2,6 +2,7 @@ import { overseasRequest, overseasUpload, overseasDownload } from './overseas.js
|
||||
|
||||
const BASE = '/pda/v1/last-leg/relabel-tasks'
|
||||
const encoded = (value) => encodeURIComponent(String(value || '').trim())
|
||||
export const scanRelabelSku = async (no, payload) => normalizeRelabel(await overseasRequest('POST', `${BASE}/${encoded(no)}/skus/scan`, payload))
|
||||
|
||||
function asList(value) { return Array.isArray(value) ? value : [] }
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
import { overseasDownload, overseasRequest, overseasUpload } from './overseas.js'
|
||||
|
||||
const BASE = '/pda/v1/last-leg/warehouse-transfers'
|
||||
const encoded = (value) => encodeURIComponent(String(value || '').trim())
|
||||
|
||||
export async function listWarehouseTransferCandidates() {
|
||||
const value = await overseasRequest('GET', `${BASE}/candidates`)
|
||||
return Array.isArray(value) ? value : (Array.isArray(value?.records) ? value.records : [])
|
||||
}
|
||||
|
||||
export function getWarehouseTransferDetail(transferNo) {
|
||||
return overseasRequest('GET', `${BASE}/${encoded(transferNo)}`)
|
||||
}
|
||||
|
||||
export function palletizeWarehouseTransfer(transferNo, payload) {
|
||||
return overseasRequest('POST', `${BASE}/${encoded(transferNo)}/palletize`, payload)
|
||||
}
|
||||
|
||||
export function saveWarehouseTransferPalletDraft(transferNo, payload) {
|
||||
return overseasRequest('POST', `${BASE}/${encoded(transferNo)}/pallets/drafts`, payload)
|
||||
}
|
||||
|
||||
export function generateWarehouseTransferPallet(transferNo, palletId, payload) {
|
||||
return overseasRequest('POST', `${BASE}/${encoded(transferNo)}/pallets/${encoded(palletId)}/generate`, payload)
|
||||
}
|
||||
|
||||
export function bindWarehouseTransferPallet(transferNo, palletId, payload) {
|
||||
return overseasRequest('POST', `${BASE}/${encoded(transferNo)}/pallets/${encoded(palletId)}/bind`, payload)
|
||||
}
|
||||
|
||||
export function deleteWarehouseTransferPallet(transferNo, palletId) {
|
||||
return overseasRequest('DELETE', `${BASE}/${encoded(transferNo)}/pallets/${encoded(palletId)}`)
|
||||
}
|
||||
|
||||
export function uploadWarehouseTransferMeasurementPhoto(transferNo, filePath) {
|
||||
return overseasUpload(`${BASE}/${encoded(transferNo)}/measurement-photos/files`, filePath)
|
||||
}
|
||||
|
||||
export function listWarehouseTransferMeasurementPhotos(transferNo) {
|
||||
return overseasRequest('GET', `${BASE}/${encoded(transferNo)}/measurement-photos/files`)
|
||||
}
|
||||
|
||||
export function downloadWarehouseTransferMeasurementPhoto(transferNo, fileId) {
|
||||
return overseasDownload(`${BASE}/${encoded(transferNo)}/measurement-photos/files/${encoded(fileId)}/download`)
|
||||
}
|
||||
|
||||
export function downloadWarehouseTransferPalletLabel(labelDownloadPath) {
|
||||
const path = String(labelDownloadPath || '').trim()
|
||||
if (!path) return Promise.reject(new Error('服务端未返回托盘标签下载地址'))
|
||||
return overseasDownload(path)
|
||||
}
|
||||
Reference in New Issue
Block a user