This commit is contained in:
Mrx
2026-06-04 18:04:21 +08:00
parent c9102f2d51
commit 483fdec6a2
26 changed files with 1282 additions and 193 deletions

66
src/ui/CQCXG3Y6B.vue Normal file
View File

@@ -0,0 +1,66 @@
<script setup>
import { computed } from 'vue'
import { useRiskNotifier } from '@/composables/useRiskNotifier'
import { formatDateZh, formatMileageKm } from '@/utils/vehicleReportBlockMaps'
import { useVehiclePayload } from '@/composables/useVehiclePayload'
const props = defineProps({
data: Object,
params: Object,
apiId: { type: String, default: '' },
index: { type: Number, default: 0 },
notifyRiskStatus: { type: Function, default: () => {} },
})
const { obj, params } = useVehiclePayload(props)
const records = computed(() => (Array.isArray(obj.value.record) ? obj.value.record : []))
const hasData = computed(() => Object.keys(obj.value).length > 0)
const vin = computed(() => (records.value[0]?.vin) || params.value.vin_code || '')
const lastRecord = computed(() => (records.value.length ? records.value[records.value.length - 1] : null))
const riskScore = computed(() => 95)
useRiskNotifier(props, riskScore)
</script>
<template>
<div class="card space-y-3">
<div class="bg-gradient-to-br from-sky-50 to-blue-50 rounded-lg p-4 border border-sky-100">
<h3 class="text-lg font-bold">车辆维保简版查询</h3>
<p class="text-sm text-gray-600 mt-1">按时间轴展示维保与材料明细</p>
</div>
<template v-if="hasData">
<div class="bg-gray-50 rounded-lg p-4 border text-sm">
<div class="font-mono">VIN{{ vin || '-' }}</div>
<div class="text-gray-600 mt-1">维保 {{ records.length }}
<span v-if="lastRecord"> · 最近 {{ formatDateZh(lastRecord.lastTime) }} · {{ formatMileageKm(lastRecord.mileage) }}</span>
</div>
</div>
<div v-if="records.length" class="space-y-3">
<div v-for="(item, idx) in records" :key="idx" class="bg-white rounded-lg p-4 border border-gray-200">
<div class="flex justify-between font-medium">
<span>{{ formatDateZh(item.lastTime) }}</span>
<span class="text-blue-600">{{ formatMileageKm(item.mileage) }}</span>
</div>
<p class="text-sm text-gray-500 mt-1">{{ item.repairType || '维保' }} · VIN {{ item.vin || vin || '-' }}</p>
<div v-if="item.details?.length" class="mt-2 text-sm">
<div class="text-xs text-gray-500 mb-1">维修项目</div>
<div v-for="(det, di) in item.details" :key="di" class="py-1">
<span v-if="det.type" class="text-xs bg-blue-50 text-blue-700 px-1 rounded mr-1">{{ det.type }}</span>{{ det.content }}
</div>
</div>
<div v-if="item.materials?.length" class="mt-2 text-sm">
<div class="text-xs text-gray-500 mb-1">使用材料</div>
<div v-for="(m, mi) in item.materials" :key="mi" class="py-1">
<span v-if="m.type" class="text-xs bg-gray-100 px-1 rounded mr-1">{{ m.type }}</span>{{ m.content }}
</div>
</div>
</div>
</div>
<div v-else class="text-center text-gray-500 py-6">暂无维保记录</div>
</template>
<div v-else class="text-center py-10 text-gray-500">暂无维保数据</div>
</div>
</template>