Files
BMS/bms-front/src/views/price/billing/components/AirBillDetail.vue
T
2026-11-03 17:30:12 +08:00

117 lines
5.8 KiB
Vue

<template>
<el-drawer
:model-value="modelValue"
:title="title"
size="840px"
append-to-body
destroy-on-close
class="air-bill-detail-drawer"
@update:model-value="$emit('update:modelValue', $event)"
>
<div v-loading="loading" class="air-bill-detail-wrap">
<el-empty v-if="!detail" description="暂无详情" />
<div v-else class="air-bill-detail">
<section class="detail-block">
<div class="sec-title">基本信息</div>
<el-descriptions class="detail-desc" :column="2" border size="small">
<el-descriptions-item label="提单号">{{ detail.billCode || '-' }}</el-descriptions-item>
<el-descriptions-item label="提单类型"><dict-tag :options="srv_air_bill_type" :value="detail.billType" /></el-descriptions-item>
<el-descriptions-item label="始发机场">{{ detail.startAirport || '-' }}</el-descriptions-item>
<el-descriptions-item label="目的机场">{{ detail.endAirport || '-' }}</el-descriptions-item>
<el-descriptions-item label="目的港">{{ detail.desPort || '-' }}</el-descriptions-item>
<el-descriptions-item label="航线名称">{{ detail.routeName || '-' }}</el-descriptions-item>
<el-descriptions-item label="航空公司">{{ detail.airCompany || '-' }}</el-descriptions-item>
<el-descriptions-item label="总件数">{{ numOrDash(detail.pieceNumber) }}</el-descriptions-item>
<el-descriptions-item label="总体积">{{ numOrDash(detail.volume) }}</el-descriptions-item>
<el-descriptions-item label="实际重量">{{ numOrDash(detail.actualWeight) }}</el-descriptions-item>
<el-descriptions-item label="实际体积">{{ numOrDash(detail.actualVolume) }}</el-descriptions-item>
<el-descriptions-item label="体积重">{{ numOrDash(detail.volumeWeight) }}</el-descriptions-item>
</el-descriptions>
</section>
<section class="detail-block">
<div class="sec-title">费用信息</div>
<el-descriptions class="detail-desc" :column="2" border size="small">
<el-descriptions-item label="报关费">{{ money(detail.baoguanFee) }}</el-descriptions-item>
<el-descriptions-item label="报关其他费用">{{ money(detail.baoguanOtherFee) }}</el-descriptions-item>
<el-descriptions-item label="仓储费">{{ money(detail.stockFee) }}</el-descriptions-item>
<el-descriptions-item label="目的港代理费">{{ money(detail.desPortAgentFee) }}</el-descriptions-item>
<el-descriptions-item label="空运其他费用">{{ money(detail.airOtherFee) }}</el-descriptions-item>
<el-descriptions-item label="其他费用">{{ money(detail.otherFee) }}</el-descriptions-item>
</el-descriptions>
</section>
<section class="detail-block">
<div class="sec-title">航班与代理</div>
<el-descriptions class="detail-desc" :column="2" border size="small">
<el-descriptions-item label="航班号">{{ detail.airNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="实际航班号">{{ detail.actualAirNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="航空公司代理">{{ detail.airCompanyAgent || '-' }}</el-descriptions-item>
<el-descriptions-item label="目的港代理编码">{{ detail.desPortAgentCode || '-' }}</el-descriptions-item>
<el-descriptions-item label="报关公司编码">{{ detail.declareCode || '-' }}</el-descriptions-item>
<el-descriptions-item label="清关编码">{{ detail.clearanceCode || '-' }}</el-descriptions-item>
<el-descriptions-item label="清关代理">{{ detail.qingguanAgent || '-' }}</el-descriptions-item>
<el-descriptions-item label="出仓仓库地址">{{ detail.stockAddr || '-' }}</el-descriptions-item>
</el-descriptions>
</section>
<section class="detail-block">
<div class="sec-title">时效信息</div>
<el-descriptions class="detail-desc" :column="2" border size="small">
<el-descriptions-item label="首程落地时间">{{ formatDateTime(detail.firstLandingTime) }}</el-descriptions-item>
<el-descriptions-item label="发货日期">{{ formatDateTime(detail.shippingDate) }}</el-descriptions-item>
<el-descriptions-item label="起飞时间">{{ formatDateTime(detail.startTime) }}</el-descriptions-item>
<el-descriptions-item label="到达时间">{{ formatDateTime(detail.arriveTime) }}</el-descriptions-item>
<el-descriptions-item label="到仓时间">{{ formatDateTime(detail.arriveStockTime) }}</el-descriptions-item>
<el-descriptions-item label="清关时间">{{ formatDateTime(detail.clearanceTime) }}</el-descriptions-item>
</el-descriptions>
</section>
</div>
</div>
</el-drawer>
</template>
<script setup name="AirBillDetail">
import { parseTime } from '@/utils/bms'
const { srv_air_bill_type } = useDict('srv_air_bill_type')
defineProps({
modelValue: { type: Boolean, default: false },
title: { type: String, default: '提单详情' },
loading: { type: Boolean, default: false },
detail: { type: Object, default: null }
})
defineEmits(['update:modelValue'])
function numOrDash(v) {
return v === null || v === undefined || v === '' ? '-' : v
}
function money(v) {
if (v === null || v === undefined || v === '') return '-'
const n = Number(v)
if (Number.isNaN(n)) return String(v)
return n.toFixed(4)
}
function formatDateTime(v) {
return v ? parseTime(v) : '-'
}
</script>
<style scoped>
.air-bill-detail-wrap {
min-height: 200px;
}
.detail-block + .detail-block {
margin-top: 16px;
}
.sec-title {
font-weight: 600;
margin-bottom: 8px;
color: var(--el-text-color-primary);
}
</style>