/** * 运输模块 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 : [] }