This commit is contained in:
zlwu committed 2026-07-12 17:55:11 +08:00
1 parent c2cba3e668
commit 2142b33cfa
24 files changed
+4834 -3684

No files matched your search

+1 -1
View File
@@ -182,7 +182,7 @@
<el-tag v-else-if="row.qualificationComplete === false" type="warning" size="small">
资质不全
</el-tag>
<span v-else>—</span>
<el-tag v-else type="success" size="small">资质齐全</el-tag>
</template>
</el-table-column>
<el-table-column
+17 -2
View File
@@ -114,12 +114,18 @@
<el-table-column
prop="personnelName"
label="姓名"
min-width="100"
min-width="160"
align="center"
header-align="center"
>
<template #default="{ row }">
<el-link type="primary" @click="handleView(row)">{{ row.personnelName }}</el-link>
<div class="personnel-name-cell">
<el-link type="primary" @click="handleView(row)">{{ row.personnelName }}</el-link>
<PlPersonnelCertBadges
:personnel-type="row.personnelType"
:cert-list="row.certList"
/>
</div>
</template>
</el-table-column>
<el-table-column
@@ -357,6 +363,7 @@ import { Check, Close, Delete, Edit, Plus, RefreshLeft, Search, User } from '@el
import { personnelApi, type Personnel, type PersonnelDetail, type CertRow } from '@/api/pl'
import PlCertFormList from '@/components/business/pl-cert-form-list/index.vue'
import PlCertViewList from '@/components/business/pl-cert-view-list/index.vue'
import PlPersonnelCertBadges from '@/components/business/pl-personnel-cert-badges/index.vue'
import SystemViewDialog, {
type ViewSection
} from '@/components/business/system-view-dialog/index.vue'
@@ -824,4 +831,12 @@ onMounted(() => {
.sub-table {
margin-bottom: 8px;
}
.personnel-name-cell {
display: inline-flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 6px;
}
</style>
+35 -7
View File
@@ -113,14 +113,21 @@
<el-table-column
prop="licensePlate"
label="车牌号"
min-width="120"
min-width="340"
align="center"
header-align="center"
>
<template #default="{ row }">
<el-link type="primary" @click="handleView(row)">
{{ formatPlVehiclePlateDisplay(row.licensePlate, row.trailerNo) }}
</el-link>
<div class="vehicle-plate-cell">
<el-link type="primary" @click="handleView(row)">
{{ formatPlVehiclePlateDisplay(row.licensePlate, row.trailerNo) }}
</el-link>
<PlVehicleCertBadges
vehicle-type="self"
:cert-list="row.certList"
:trailer-no="row.trailerNo"
/>
</div>
</template>
</el-table-column>
<el-table-column label="车辆类型" min-width="90" align="center" header-align="center" v-if="isColumnVisible('vehicleType')">
@@ -216,7 +223,7 @@
/>
</el-form-item>
<el-form-item label="承运商" prop="carrierId">
<el-select v-model="formData.carrierId" placeholder="请选择承运商(选填)" clearable filterable>
<el-select v-model="formData.carrierId" placeholder="请选择承运商" filterable>
<el-option
v-for="c in carrierList"
:key="c.id"
@@ -390,6 +397,7 @@ import {
} from '@/api/pl'
import PlVehicleCertPartTabs from '@/components/business/pl-vehicle-cert-part-tabs/index.vue'
import PlVehicleCertPersonnelTabs from '@/components/business/pl-vehicle-cert-personnel-tabs/index.vue'
import PlVehicleCertBadges from '@/components/business/pl-vehicle-cert-badges/index.vue'
import type { VehiclePersonnelViewRow } from '@/components/business/pl-vehicle-personnel-view-list/index.vue'
import SystemViewDialog, {
type ViewSection
@@ -414,7 +422,11 @@ import {
PL_VEHICLE_CERT_NAME_OPTIONS,
getSelfVehicleCertMissingSuffix
} from '@/utils/pl-vehicle-cert'
import { validatePersonnelTypeRoleCompat, validatePersonnelAffiliationVehicleCompat } from '@/utils/pl-personnel-cert'
import {
mapPersonnelTypeToVehicleRole,
validatePersonnelTypeRoleCompat,
validatePersonnelAffiliationVehicleCompat
} from '@/utils/pl-personnel-cert'
import { canDeleteByCreator, filterDeletableByCreator, allRowsDeletableByCreator, CREATOR_DELETE_TIP } from '@/utils/creator-delete'
const VEHICLE_TYPE_SELF = 'self'
@@ -487,7 +499,8 @@ const formData = reactive({
const formRules = {
licensePlate: [{ required: true, message: '请输入车牌号', trigger: 'blur' }],
vehicleStatus: [{ required: true, message: '请选择车辆状态', trigger: 'change' }]
vehicleStatus: [{ required: true, message: '请选择车辆状态', trigger: 'change' }],
carrierId: [{ required: true, message: '请选择承运商', trigger: 'change' }]
}
function getStatusTagType(status: string) {
@@ -605,6 +618,7 @@ function handlePersonnelSelect(row: VehiclePersonnelRow, personnelId?: string) {
row.personnelName = ''
row.phoneNo = ''
row.age = null
row.role = ''
return
}
const person = personnelOptions.value.find(p => p.id === personnelId)
@@ -613,6 +627,11 @@ function handlePersonnelSelect(row: VehiclePersonnelRow, personnelId?: string) {
row.personnelName = person.personnelName
row.phoneNo = person.phoneNo || ''
row.age = person.age ?? null
const mappedRole = mapPersonnelTypeToVehicleRole(person.personnelType)
if (mappedRole) {
row.role = mappedRole
handleRoleChange(row, 0)
}
}
function resolvePersonnelRows(rows: VehiclePersonnelRow[]) {
@@ -1002,4 +1021,13 @@ onMounted(() => {
.sub-table {
margin-bottom: 8px;
}
.vehicle-plate-cell {
display: inline-flex;
flex-direction: row;
align-items: center;
justify-content: center;
flex-wrap: nowrap;
gap: 6px;
}
</style>
+35 -7
View File
@@ -121,14 +121,21 @@
<el-table-column
prop="licensePlate"
label="车牌号"
min-width="120"
min-width="340"
align="center"
header-align="center"
>
<template #default="{ row }">
<el-link type="primary" @click="handleView(row)">
{{ formatPlVehiclePlateDisplay(row.licensePlate, row.trailerNo) }}
</el-link>
<div class="vehicle-plate-cell">
<el-link type="primary" @click="handleView(row)">
{{ formatPlVehiclePlateDisplay(row.licensePlate, row.trailerNo) }}
</el-link>
<PlVehicleCertBadges
:vehicle-type="row.vehicleType === 'carrier' ? 'carrier' : 'self'"
:cert-list="row.certList"
:trailer-no="row.trailerNo"
/>
</div>
</template>
</el-table-column>
<el-table-column label="车辆类型" min-width="100" align="center" header-align="center" v-if="isColumnVisible('vehicleType')">
@@ -233,7 +240,7 @@
/>
</el-form-item>
<el-form-item label="承运商" prop="carrierId">
<el-select v-model="formData.carrierId" placeholder="请选择承运商" clearable filterable>
<el-select v-model="formData.carrierId" placeholder="请选择承运商" filterable>
<el-option
v-for="c in carrierList"
:key="c.id"
@@ -412,6 +419,7 @@ import {
} from '@/api/pl'
import PlVehicleCertPartTabs from '@/components/business/pl-vehicle-cert-part-tabs/index.vue'
import PlVehicleCertPersonnelTabs from '@/components/business/pl-vehicle-cert-personnel-tabs/index.vue'
import PlVehicleCertBadges from '@/components/business/pl-vehicle-cert-badges/index.vue'
import type { VehiclePersonnelViewRow } from '@/components/business/pl-vehicle-personnel-view-list/index.vue'
import SystemViewDialog, {
type ViewSection
@@ -432,7 +440,11 @@ import {
getVehicleCertMissingSuffix,
type PlVehicleCertCheckType
} from '@/utils/pl-vehicle-cert'
import { validatePersonnelTypeRoleCompat, validatePersonnelAffiliationVehicleCompat } from '@/utils/pl-personnel-cert'
import {
mapPersonnelTypeToVehicleRole,
validatePersonnelTypeRoleCompat,
validatePersonnelAffiliationVehicleCompat
} from '@/utils/pl-personnel-cert'
import { canDeleteByCreator, filterDeletableByCreator, allRowsDeletableByCreator, CREATOR_DELETE_TIP } from '@/utils/creator-delete'
type CertListItem = CertRow & { _key?: string }
@@ -506,7 +518,8 @@ const formData = reactive({
const formRules = {
licensePlate: [{ required: true, message: '请输入车牌号', trigger: 'blur' }],
vehicleType: [{ required: true, message: '请选择车辆类型', trigger: 'change' }]
vehicleType: [{ required: true, message: '请选择车辆类型', trigger: 'change' }],
carrierId: [{ required: true, message: '请选择承运商', trigger: 'change' }]
}
function getStatusTagType(status: string) {
@@ -671,6 +684,7 @@ function handlePersonnelSelect(row: VehiclePersonnelRow, personnelId?: string) {
row.personnelName = ''
row.phoneNo = ''
row.age = null
row.role = ''
return
}
const person = personnelOptions.value.find(p => p.id === personnelId)
@@ -679,6 +693,11 @@ function handlePersonnelSelect(row: VehiclePersonnelRow, personnelId?: string) {
row.personnelName = person.personnelName
row.phoneNo = person.phoneNo || ''
row.age = person.age ?? null
const mappedRole = mapPersonnelTypeToVehicleRole(person.personnelType)
if (mappedRole) {
row.role = mappedRole
handleRoleChange(row, 0)
}
}
function resolvePersonnelRows(rows: VehiclePersonnelRow[]) {
@@ -1107,4 +1126,13 @@ onMounted(() => {
.sub-table {
margin-bottom: 8px;
}
.vehicle-plate-cell {
display: inline-flex;
flex-direction: row;
align-items: center;
justify-content: center;
flex-wrap: nowrap;
gap: 6px;
}
</style>