f
This commit is contained in:
73
src/utils/vehiclePayload.js
Normal file
73
src/utils/vehiclePayload.js
Normal file
@@ -0,0 +1,73 @@
|
||||
/**
|
||||
* 解包车辆报告业务体:兼容 BaseReport 传入的 data 仍带一层 { apiID, data } 或 JSON 字符串
|
||||
*/
|
||||
export function unwrapVehiclePayload(raw, depth = 0) {
|
||||
if (raw == null || depth > 5)
|
||||
return raw
|
||||
|
||||
if (typeof raw === 'string') {
|
||||
const s = raw.trim()
|
||||
if (!s)
|
||||
return null
|
||||
try {
|
||||
return unwrapVehiclePayload(JSON.parse(s), depth + 1)
|
||||
}
|
||||
catch {
|
||||
return raw
|
||||
}
|
||||
}
|
||||
|
||||
if (Array.isArray(raw))
|
||||
return raw
|
||||
|
||||
if (typeof raw !== 'object')
|
||||
return raw
|
||||
|
||||
const hasApiWrapper = ('apiID' in raw || 'apiId' in raw) && 'data' in raw
|
||||
if (hasApiWrapper)
|
||||
return unwrapVehiclePayload(raw.data ?? raw, depth + 1)
|
||||
|
||||
if (typeof raw.data === 'string' || (raw.data && typeof raw.data === 'object' && !Array.isArray(raw.data))) {
|
||||
const inner = raw.data
|
||||
const onlyDataKey = Object.keys(raw).length <= 2 && 'data' in raw
|
||||
if (onlyDataKey || (typeof inner === 'object' && inner && !Array.isArray(inner) && Object.keys(inner).length > 0 && !('list' in raw) && !('vehicleCount' in raw) && !('carNum' in raw)))
|
||||
return unwrapVehiclePayload(inner, depth + 1)
|
||||
}
|
||||
|
||||
return raw
|
||||
}
|
||||
|
||||
/** 解析为数组:直连数组、list、record、retdata 等 */
|
||||
export function payloadAsArray(raw) {
|
||||
const p = unwrapVehiclePayload(raw)
|
||||
if (!p)
|
||||
return []
|
||||
if (Array.isArray(p))
|
||||
return p
|
||||
if (typeof p !== 'object')
|
||||
return []
|
||||
if (Array.isArray(p.list))
|
||||
return p.list
|
||||
if (Array.isArray(p.record))
|
||||
return p.record
|
||||
if (Array.isArray(p.retdata))
|
||||
return p.retdata
|
||||
if (typeof p.data === 'string') {
|
||||
try {
|
||||
const parsed = JSON.parse(p.data)
|
||||
return Array.isArray(parsed) ? parsed : []
|
||||
}
|
||||
catch {
|
||||
return []
|
||||
}
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
||||
/** 解析为对象 */
|
||||
export function payloadAsObject(raw) {
|
||||
const p = unwrapVehiclePayload(raw)
|
||||
if (!p || typeof p !== 'object' || Array.isArray(p))
|
||||
return {}
|
||||
return p
|
||||
}
|
||||
73
src/utils/vehicleReportBlockMaps.js
Normal file
73
src/utils/vehicleReportBlockMaps.js
Normal file
@@ -0,0 +1,73 @@
|
||||
/** 车辆报告共用车牌颜色、车辆类型、日期里程文案 */
|
||||
|
||||
export const PLATE_COLOR_LABELS = {
|
||||
0: '蓝色',
|
||||
1: '黄色',
|
||||
2: '黑色',
|
||||
3: '白色',
|
||||
4: '渐变绿',
|
||||
5: '黄绿双拼',
|
||||
6: '蓝白渐变',
|
||||
7: '临牌',
|
||||
11: '绿色',
|
||||
12: '红色',
|
||||
}
|
||||
|
||||
export function plateColorLabel(c) {
|
||||
const n = Number(c)
|
||||
if (Number.isNaN(n))
|
||||
return '—'
|
||||
return PLATE_COLOR_LABELS[n] ?? '其他'
|
||||
}
|
||||
|
||||
const VEHICLE_TYPE_LABELS = {
|
||||
1: '一型客车',
|
||||
2: '二型客车',
|
||||
3: '三型客车',
|
||||
4: '四型客车',
|
||||
11: '一型货车',
|
||||
12: '二型货车',
|
||||
13: '三型货车',
|
||||
14: '四型货车',
|
||||
15: '五型货车',
|
||||
16: '六型货车',
|
||||
21: '一型专项作业车',
|
||||
22: '二型专项作业车',
|
||||
23: '三型专项作业车',
|
||||
24: '四型专项作业车',
|
||||
25: '五型专项作业车',
|
||||
26: '六型专项作业车',
|
||||
}
|
||||
|
||||
export function vehicleTypeLabel(t) {
|
||||
if (t == null || t === '')
|
||||
return '—'
|
||||
const n = Number(t)
|
||||
if (!Number.isNaN(n) && VEHICLE_TYPE_LABELS[n])
|
||||
return VEHICLE_TYPE_LABELS[n]
|
||||
return String(t)
|
||||
}
|
||||
|
||||
export function formatDateZh(val) {
|
||||
if (!val)
|
||||
return '-'
|
||||
const m = String(val).match(/^(\d{4})-(\d{2})-(\d{2})/)
|
||||
if (m)
|
||||
return `${m[1]}年${m[2]}月${m[3]}日`
|
||||
return String(val)
|
||||
}
|
||||
|
||||
export function formatMileageKm(val) {
|
||||
if (val !== 0 && !val)
|
||||
return '-'
|
||||
const num = Number(val)
|
||||
if (Number.isNaN(num))
|
||||
return `${val} km`
|
||||
return `${num.toLocaleString()} km`
|
||||
}
|
||||
|
||||
export function maskName(name) {
|
||||
if (!name)
|
||||
return '-'
|
||||
return name.length > 1 ? `${name[0]}${'*'.repeat(name.length - 1)}` : '*'
|
||||
}
|
||||
44
src/utils/vehicleReportNormalize.js
Normal file
44
src/utils/vehicleReportNormalize.js
Normal file
@@ -0,0 +1,44 @@
|
||||
import { unwrapVehiclePayload } from './vehiclePayload'
|
||||
|
||||
/**
|
||||
* 规范 query_data 单项,供 BaseReport 使用:{ data: { apiID, data: 业务体 } }
|
||||
*/
|
||||
export function normalizeVehicleReportItem(item) {
|
||||
if (!item || typeof item !== 'object')
|
||||
return item
|
||||
|
||||
const outer = item.data
|
||||
if (outer == null)
|
||||
return item
|
||||
|
||||
let apiID = ''
|
||||
let payload = outer
|
||||
|
||||
if (typeof outer === 'object' && !Array.isArray(outer)) {
|
||||
apiID = String(outer.apiID ?? outer.apiId ?? '')
|
||||
if ('data' in outer)
|
||||
payload = outer.data
|
||||
}
|
||||
|
||||
payload = unwrapVehiclePayload(payload)
|
||||
|
||||
if (!apiID && payload && typeof payload === 'object' && !Array.isArray(payload)) {
|
||||
apiID = String(payload.apiID ?? payload.apiId ?? '')
|
||||
if (apiID && 'data' in payload)
|
||||
payload = unwrapVehiclePayload(payload.data)
|
||||
}
|
||||
|
||||
return {
|
||||
...item,
|
||||
data: {
|
||||
apiID: apiID || '',
|
||||
data: payload,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export function normalizeVehicleReportData(items) {
|
||||
if (!Array.isArray(items))
|
||||
return []
|
||||
return items.map(normalizeVehicleReportItem)
|
||||
}
|
||||
Reference in New Issue
Block a user