Merge branch 'release/test' of http://git.buggoglobal.com/html/pda-overseas-uniapp into release/test

This commit is contained in:
2026-09-18 16:48:46 +08:00
20 changed files with 1039 additions and 43 deletions
+48 -2
View File
@@ -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 }))
})
})
}
+3
View File
@@ -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() })
+1
View File
@@ -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 : [] }
+51
View File
@@ -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)
}