125 lines
3.5 KiB
JavaScript
125 lines
3.5 KiB
JavaScript
/**
|
||
* 运输模块 API(/transport/*)
|
||
* 协议与报销侧 bx HTTP 一致:有信封时 code===0;直出 { list, total } 亦可。
|
||
*/
|
||
import { request, parseResponseJson } from '@/utils/request'
|
||
|
||
function unwrap(res) {
|
||
const body = parseResponseJson(res)
|
||
if (!body || typeof body !== 'object') {
|
||
throw new Error('接口响应异常')
|
||
}
|
||
if (body.code != null && body.code !== 0) {
|
||
throw new Error(body.msg || body.message || '请求失败')
|
||
}
|
||
return body.data != null ? body.data : body
|
||
}
|
||
|
||
async function get(url, params = {}) {
|
||
const res = await request({ url, method: 'GET', data: params, params })
|
||
return unwrap(res)
|
||
}
|
||
|
||
async function post(url, data = {}) {
|
||
const res = await request({ url, method: 'POST', data })
|
||
return unwrap(res)
|
||
}
|
||
|
||
async function patch(url, data = {}) {
|
||
const res = await request({ url, method: 'PATCH', data })
|
||
return unwrap(res)
|
||
}
|
||
|
||
function pageParams(query = {}) {
|
||
const { pageNum, page, pageSize, ...rest } = query
|
||
const params = {
|
||
page: pageNum ?? page ?? 1,
|
||
pageSize: pageSize ?? 20
|
||
}
|
||
Object.keys(rest).forEach((k) => {
|
||
if (rest[k] != null && rest[k] !== '') params[k] = rest[k]
|
||
})
|
||
return params
|
||
}
|
||
|
||
function normalizeList(data) {
|
||
if (Array.isArray(data)) return { rows: data, total: data.length }
|
||
const d = data || {}
|
||
return {
|
||
rows: d.rows || d.list || [],
|
||
total: d.total ?? 0
|
||
}
|
||
}
|
||
|
||
// ── 运输计划 ──
|
||
|
||
export async function listPlans(query = {}) {
|
||
return normalizeList(await get('/transport/plan/', pageParams(query)))
|
||
}
|
||
|
||
export async function getPlan(id) {
|
||
return get(`/transport/plan/${String(id)}`)
|
||
}
|
||
|
||
export async function getPlanArrangeInfo(id) {
|
||
return get(`/transport/plan/${String(id)}/arrange-info`)
|
||
}
|
||
|
||
export async function updateProductCerts(id, products) {
|
||
return patch(`/transport/plan/${String(id)}/product-certs`, { products })
|
||
}
|
||
|
||
export async function setHazardCertReady(id, ready) {
|
||
return patch(`/transport/plan/${String(id)}/hazard-cert-ready`, { ready: !!ready })
|
||
}
|
||
|
||
export async function archivePlan(id, body) {
|
||
return post(`/transport/plan/${String(id)}/archive`, body || {})
|
||
}
|
||
|
||
export async function arrangeTransport(planId, data) {
|
||
return post(`/transport/order/arrange/${String(planId)}`, data)
|
||
}
|
||
|
||
// ── 车辆 / 驾押(安排运输选人)──
|
||
|
||
export async function listVehicles(query = {}) {
|
||
return normalizeList(await get('/transport/vehicle', pageParams(query)))
|
||
}
|
||
|
||
export async function listPersonnel(query = {}) {
|
||
return normalizeList(await get('/transport/personnel', pageParams(query)))
|
||
}
|
||
|
||
// ── 运费结算 ──
|
||
|
||
export async function listFreight(query = {}) {
|
||
return normalizeList(await get('/transport/freight/', pageParams(query)))
|
||
}
|
||
|
||
export async function getFreight(id) {
|
||
return get(`/transport/freight/${String(id)}`)
|
||
}
|
||
|
||
export async function listUnsettledPlans(query = {}) {
|
||
return normalizeList(await get('/transport/freight/unsettled-plans', pageParams(query)))
|
||
}
|
||
|
||
export async function createFreight(data) {
|
||
return post('/transport/freight/', data)
|
||
}
|
||
|
||
/** 提交审批(需审批人 ID,复杂选人建议 Web;小程序可传已选 ID) */
|
||
export async function submitFreightApproval(id, data) {
|
||
return post(`/transport/freight/${String(id)}/submit-approval`, data)
|
||
}
|
||
|
||
export async function processFreightApproval(approvalId, data) {
|
||
return post(`/transport/freight/approval/${String(approvalId)}`, data)
|
||
}
|
||
|
||
export async function getFreightApprovalFlow(id) {
|
||
const data = await get(`/transport/freight/${String(id)}/approval-flow`)
|
||
return Array.isArray(data) ? data : []
|
||
}
|