Files
tyc-uniapp_V2/src/components/report/VehicleReportShell.vue
2026-05-21 14:51:06 +08:00

165 lines
3.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script setup>
import { computed } from 'vue'
import { getVehicleModuleTitle } from '@/config/vehicleReportRegistry'
import VehicleReportBlock from './VehicleReportBlock.vue'
const props = defineProps({
productName: { type: String, default: '' },
queryParams: { type: Object, default: () => ({}) },
rows: { type: Array, default: () => [] },
/** 示例 / 正式 */
mode: { type: String, default: 'example' },
})
const modeText = computed(() => (props.mode === 'detail' ? '查询报告' : '示例报告'))
const paramLines = computed(() => {
const p = props.queryParams
if (!p || typeof p !== 'object')
return []
return Object.entries(p).map(([k, v]) => `${k}${String(v ?? '')}`)
})
function blockTitle(row) {
return getVehicleModuleTitle(row.apiId, row.featureName)
}
</script>
<template>
<view class="shell">
<view class="head-card">
<view class="head-title">
{{ props.productName || '报告' }}
</view>
<view class="head-badge">
免责声明
</view>
<view class="head-sub">
本平台所提供车辆信息报告仅作个人参考使用不构成任何投资交易及法律依据数据来源于正规合规接口仅供自查比对严禁用于商用倒卖及其他违规用途因用户私自滥用数据造成的一切后果均由使用者自行承担本平台不承担任何法律责任
</view>
</view>
<!-- <view v-if="paramLines.length" class="card params-card">
<view class="section-head">
<view class="accent" />
<text class="section-t">查询条件</text>
</view>
<view v-for="(line, idx) in paramLines" :key="idx" class="param-line">
{{ line }}
</view>
</view> -->
<view v-for="(row, idx) in props.rows" :key="`${row.apiId}-${idx}`" class="card block-card">
<view class="block-head">
<text class="block-title">{{ blockTitle(row) }}</text>
<text v-if="row.apiId && row.apiId !== '__UNLABELED__'" class="block-id">{{ row.apiId }}</text>
</view>
<VehicleReportBlock
:block-title="blockTitle(row)"
:api-id="row.apiId"
:payload="row.payload"
:query-params="props.queryParams"
/>
</view>
</view>
</template>
<style scoped lang="scss">
.shell {
width: 100%;
}
.head-card {
background: #fff;
border-radius: 16rpx;
padding: 28rpx 24rpx;
margin-bottom: 20rpx;
box-shadow: 0 0 24rpx rgba(63, 63, 63, 0.06);
}
.head-title {
font-size: 32rpx;
font-weight: 700;
color: #1d2129;
text-align: center;
padding-bottom: 12rpx;
border-bottom: 1rpx solid #e5e6eb;
}
.head-badge {
margin-top: 12rpx;
text-align: center;
font-size: 24rpx;
color: #1768ff;
font-weight: 600;
}
.head-sub {
margin-top: 12rpx;
text-align: center;
font-size: 22rpx;
color: #86909c;
line-height: 1.45;
}
.card {
background: #fff;
border-radius: 16rpx;
padding: 24rpx;
margin-bottom: 20rpx;
box-shadow: 0 0 24rpx rgba(63, 63, 63, 0.06);
}
.section-head {
display: flex;
align-items: center;
margin-bottom: 16rpx;
}
.accent {
width: 6rpx;
height: 28rpx;
border-radius: 4rpx;
background: linear-gradient(180deg, #1768ff 0%, #1556d6 100%);
margin-right: 12rpx;
}
.section-t {
font-size: 28rpx;
font-weight: 600;
color: #1d2129;
}
.param-line {
font-size: 24rpx;
color: #4e5969;
line-height: 1.55;
padding: 6rpx 0;
}
.block-head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 16rpx;
margin-bottom: 16rpx;
padding-bottom: 12rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.block-title {
flex: 1;
font-size: 28rpx;
font-weight: 600;
color: #1d2129;
}
.block-id {
font-size: 20rpx;
color: #86909c;
font-family: ui-monospace, monospace;
flex-shrink: 0;
}
</style>