feat(web-admin): 全部车辆页改为三方车辆并关闭证书强制
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
8ba55dd6f6
commit
3396e3d164
1 file changed
+18
-72
@@ -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
|
||||
|
||||
Reference in new issue
Block a user