feat(web-admin): 全部车辆页改为三方车辆并关闭证书强制

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-07-25 10:56:16 +08:00
1 parent 8ba55dd6f6
commit 3396e3d164
1 file changed
+18 -72
+18 -72
View File
@@ -1,9 +1,9 @@
<!-- 全部车辆管理 -->
<!-- 三方车辆 -->
<template>
<div class="page-container">
<section class="panel">
<div class="panel-top">
<h2 class="title-bar-heading">车辆列表</h2>
<h2 class="title-bar-heading">三方车辆</h2>
</div>
<!-- 筛选区 -->
@@ -18,12 +18,6 @@
@keyup.enter="handleSearch"
/>
</el-form-item>
<el-form-item label="车辆类型">
<el-select v-model="searchForm.vehicleType" placeholder="全部" clearable>
<el-option label="自有" value="self" />
<el-option label="承运商" value="carrier" />
</el-select>
</el-form-item>
<el-form-item label="承运商">
<el-select v-model="searchForm.carrierId" placeholder="全部" clearable filterable>
<el-option
@@ -224,12 +218,6 @@
<el-form-item label="挂车号" prop="trailerNo">
<el-input v-model="formData.trailerNo" placeholder="请输入挂车号" maxlength="20" clearable />
</el-form-item>
<el-form-item label="车辆类型" prop="vehicleType">
<el-select v-model="formData.vehicleType" placeholder="请选择">
<el-option label="自有" value="self" />
<el-option label="承运商" value="carrier" />
</el-select>
</el-form-item>
<el-form-item label="载重(吨)" prop="loadCapacity">
<el-input-number
v-model="formData.loadCapacity"
@@ -342,8 +330,8 @@
upload-folder="pl/vehicle-cert"
:cert-name-options="certNameOptions"
layout="table"
:enforce-self-vehicle-required="formData.vehicleType === 'self'"
:enforce-carrier-vehicle-required="formData.vehicleType === 'carrier'"
:enforce-self-vehicle-required="false"
:enforce-carrier-vehicle-required="false"
/>
</el-form>
<template #footer>
@@ -391,9 +379,7 @@
:vehicle-id="viewDetail?.id"
:personnel-list="viewPersonnelList"
:vehicle-cert-check-type="viewVehicleCertCheckType"
:check-linked-personnel-certs="
viewDetail?.vehicleType === 'self' || viewDetail?.vehicleType === 'carrier'
"
:check-linked-personnel-certs="false"
cert-layout="table"
/>
</template>
@@ -429,15 +415,9 @@ import { pickBxList, pickBxPageResult } from '@/utils/http/bx'
import { DEFAULT_LIST_PAGE_SIZE } from '@/utils/table/tableConfig'
import { formatDateTime } from '@/utils/format'
import { formatPlVehiclePlateDisplay, normalizePlPersonnelSummaryDisplay } from '@/utils/pl-display'
import {
collectCarrierVehicleRequiredCertErrors,
collectSelfVehicleRequiredCertErrors,
ensureVehicleCertSlots,
formatRequiredCertErrors
} from '@/utils/pl-cert-slots'
import { ensureVehicleCertSlots } from '@/utils/pl-cert-slots'
import {
PL_VEHICLE_CERT_NAME_OPTIONS,
getVehicleCertMissingSuffix,
type PlVehicleCertCheckType
} from '@/utils/pl-vehicle-cert'
import {
@@ -450,6 +430,8 @@ import { canDeleteByCreator, filterDeletableByCreator, allRowsDeletableByCreator
type CertListItem = CertRow & { _key?: string }
type CertFormListRef = InstanceType<typeof PlVehicleCertPartTabs>
const VEHICLE_TYPE_LOCK = 'carrier' as const
const loading = ref(false)
const quickSearchKeyword = ref('')
const submitLoading = ref(false)
@@ -493,7 +475,7 @@ const certNameOptions = PL_VEHICLE_CERT_NAME_OPTIONS
const searchForm = reactive({
q: '',
vehicleType: '',
vehicleType: VEHICLE_TYPE_LOCK,
carrierId: '',
vehicleStatus: ''
})
@@ -508,7 +490,7 @@ const formData = reactive({
id: '',
licensePlate: '',
trailerNo: '',
vehicleType: 'self',
vehicleType: VEHICLE_TYPE_LOCK,
carrierId: '',
carrierName: '',
loadCapacity: null as number | null,
@@ -519,7 +501,6 @@ const formData = reactive({
const formRules = {
licensePlate: [{ required: true, message: '请输入车牌号', trigger: 'blur' }],
trailerNo: [{ required: true, message: '请输入挂车号', trigger: 'blur' }],
vehicleType: [{ required: true, message: '请选择车辆类型', trigger: 'change' }],
carrierId: [{ required: true, message: '请选择承运商', trigger: 'change' }]
}
@@ -559,24 +540,9 @@ const viewHeroMeta = computed(() => {
return parts.join(' · ')
})
const viewVehicleCertCheckType = computed<PlVehicleCertCheckType | undefined>(() => {
const type = viewDetail.value?.vehicleType
return type === 'self' || type === 'carrier' ? type : undefined
})
const viewVehicleCertCheckType = computed<PlVehicleCertCheckType>(() => VEHICLE_TYPE_LOCK)
const viewDialogTitle = computed(() => {
const plate = viewDetail.value?.licensePlate || '车辆详情'
const checkType = viewVehicleCertCheckType.value
if (!viewDetail.value || !checkType) return plate
return (
plate +
getVehicleCertMissingSuffix({
vehicleType: checkType,
certList: viewDetail.value.certList,
trailerNo: viewDetail.value.trailerNo
})
)
})
const viewDialogTitle = computed(() => viewDetail.value?.licensePlate || '车辆详情')
const viewSections = computed<ViewSection[]>(() => {
const d = viewDetail.value
@@ -801,19 +767,6 @@ function validateSubTables(): boolean {
}
}
if (formData.vehicleType === 'self') {
const certErrors = collectSelfVehicleRequiredCertErrors(certList.value, formData.trailerNo)
if (certErrors.length) {
ElMessage.warning(formatRequiredCertErrors(certErrors))
return false
}
} else if (formData.vehicleType === 'carrier') {
const certErrors = collectCarrierVehicleRequiredCertErrors(certList.value, formData.trailerNo)
if (certErrors.length) {
ElMessage.warning(formatRequiredCertErrors(certErrors))
return false
}
}
return true
}
@@ -822,7 +775,7 @@ async function fetchData() {
try {
const res = await vehicleApi.list({
q: quickSearchKeyword.value.trim() || searchForm.q || undefined,
vehicleType: searchForm.vehicleType || undefined,
vehicleType: VEHICLE_TYPE_LOCK,
carrierId: searchForm.carrierId || undefined,
vehicleStatus: searchForm.vehicleStatus || undefined,
page: pagination.page,
@@ -846,7 +799,7 @@ function handleSearch() {
function handleReset() {
searchForm.q = ''
searchForm.vehicleType = ''
searchForm.vehicleType = VEHICLE_TYPE_LOCK
searchForm.carrierId = ''
searchForm.vehicleStatus = ''
quickSearchKeyword.value = ''
@@ -913,7 +866,7 @@ function handleAdd() {
id: '',
licensePlate: '',
trailerNo: '',
vehicleType: 'self',
vehicleType: VEHICLE_TYPE_LOCK,
carrierId: '',
carrierName: '',
loadCapacity: null,
@@ -921,7 +874,7 @@ function handleAdd() {
remark: ''
})
resetSubTables()
certList.value = ensureVehicleCertSlots([], formData.trailerNo, formData.vehicleType as PlVehicleCertCheckType)
certList.value = ensureVehicleCertSlots([], formData.trailerNo, VEHICLE_TYPE_LOCK)
loadPersonnelOptions()
dialogVisible.value = true
}
@@ -957,7 +910,7 @@ async function handleEdit(row: Vehicle) {
id: detail.id,
licensePlate: detail.licensePlate,
trailerNo: detail.trailerNo || '',
vehicleType: detail.vehicleType,
vehicleType: VEHICLE_TYPE_LOCK,
carrierId: detail.carrierId,
carrierName: detail.carrierName,
loadCapacity: detail.loadCapacity ?? null,
@@ -980,14 +933,7 @@ async function handleEdit(row: Vehicle) {
remindDays: c.remindDays ?? 30,
attachmentUrls: c.attachmentUrls || ''
}))
certList.value =
detail.vehicleType === 'self' || detail.vehicleType === 'carrier'
? ensureVehicleCertSlots(
mappedCerts,
formData.trailerNo,
detail.vehicleType as PlVehicleCertCheckType
)
: mappedCerts
certList.value = ensureVehicleCertSlots(mappedCerts, formData.trailerNo, VEHICLE_TYPE_LOCK)
certFormListRef.value?.refreshRequiredSlots?.()
} finally {
dialogLoading.value = false