This commit is contained in:
2026-07-27 17:19:36 +08:00
parent e50d1b8fda
commit 1c7532e0de
132 changed files with 7066 additions and 1241 deletions
+127 -18
View File
@@ -114,7 +114,7 @@
ref="driverForm"
:model="driverForm"
:rules="formRules"
label-position="top"
label-position="right"
:disabled="readonly"
class="driver-form"
>
@@ -156,13 +156,22 @@
<el-col :span="4">
<el-form-item label="学历" prop="education">
<el-select v-model="driverForm.education" clearable filterable>
<el-option v-for="item in educationOptions" :key="item" :label="item" :value="item" />
<el-option
v-for="item in educationOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="住址" prop="addressRegion">
<el-input v-model="driverForm.addressRegion" maxlength="100" placeholder="省 / 市 / 区" />
<el-input
v-model="driverForm.addressRegion"
maxlength="100"
placeholder="省 / 市 / 区"
/>
</el-form-item>
</el-col>
<el-col :span="8">
@@ -223,8 +232,19 @@
<el-row :gutter="18">
<el-col :span="6">
<el-form-item label="准驾车型" prop="drivingType">
<el-select v-model="driverForm.drivingType" clearable filterable allow-create default-first-option>
<el-option v-for="item in drivingTypeOptions" :key="item" :label="item" :value="item" />
<el-select
v-model="driverForm.drivingType"
clearable
filterable
allow-create
default-first-option
>
<el-option
v-for="item in drivingTypeOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
@@ -254,7 +274,11 @@
</el-col>
<el-col :span="4">
<el-form-item label="长期有效" prop="drivingLicenseLongTerm">
<el-checkbox v-model="driverForm.drivingLicenseLongTerm" :true-label="1" :false-label="0">
<el-checkbox
v-model="driverForm.drivingLicenseLongTerm"
:true-label="1"
:false-label="0"
>
</el-checkbox>
</el-form-item>
@@ -287,7 +311,13 @@
<el-row :gutter="18">
<el-col :span="6">
<el-form-item label="从业资格证类型" prop="qualificationType">
<el-select v-model="driverForm.qualificationType" clearable filterable allow-create default-first-option>
<el-select
v-model="driverForm.qualificationType"
clearable
filterable
allow-create
default-first-option
>
<el-option label="道路运输从业资格证" value="道路运输从业资格证" />
<el-option label="危险货物运输从业资格证" value="危险货物运输从业资格证" />
</el-select>
@@ -295,7 +325,11 @@
</el-col>
<el-col :span="6">
<el-form-item label="资格证号" prop="qualificationNo">
<el-input v-model="driverForm.qualificationNo" maxlength="50" placeholder="默认身份证号" />
<el-input
v-model="driverForm.qualificationNo"
maxlength="50"
placeholder="默认身份证号"
/>
</el-form-item>
</el-col>
<el-col :span="6">
@@ -310,7 +344,11 @@
</el-col>
<el-col :span="4">
<el-form-item label="长期有效" prop="qualificationLongTerm">
<el-checkbox v-model="driverForm.qualificationLongTerm" :true-label="1" :false-label="0">
<el-checkbox
v-model="driverForm.qualificationLongTerm"
:true-label="1"
:false-label="0"
>
</el-checkbox>
</el-form-item>
@@ -366,19 +404,42 @@
</el-col>
<el-col :span="6">
<el-form-item label="与联系人关系" prop="contactRelation">
<el-select v-model="driverForm.contactRelation" clearable filterable allow-create default-first-option>
<el-option v-for="item in relationOptions" :key="item" :label="item" :value="item" />
<el-select
v-model="driverForm.contactRelation"
clearable
filterable
allow-create
default-first-option
>
<el-option
v-for="item in relationOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="所属组织" prop="organizationName">
<el-input v-model="driverForm.organizationName" maxlength="50" />
<el-cascader
v-model="driverForm.organizationName"
:options="deptCascaderOptions"
:props="deptCascaderProps"
clearable
filterable
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input v-model="driverForm.remark" type="textarea" maxlength="200" show-word-limit />
<el-input
v-model="driverForm.remark"
type="textarea"
maxlength="200"
show-word-limit
/>
</el-form-item>
</el-col>
</el-row>
@@ -397,7 +458,15 @@
import { mapGetters } from 'vuex';
import NProgress from 'nprogress';
import { option } from '@/option/transportCapacity/driver';
import { getList, getDetail, submit, remove, changeStatus, getExpiryStat } from '@/api/transportCapacity/driver';
import {
getList,
getDetail,
submit,
remove,
changeStatus,
getExpiryStat,
} from '@/api/transportCapacity/driver';
import { getDeptTree } from '@/api/system/dept';
import { exportBlob } from '@/api/common';
import { getToken } from '@/utils/auth';
import { downloadXls } from '@/utils/util';
@@ -528,16 +597,30 @@ export default {
educationOptions: ['初中', '高中', '中专', '大专', '本科', '硕士及以上'],
drivingTypeOptions: ['A1', 'A2', 'A3', 'B1', 'B2', 'C1', 'C2'],
relationOptions: ['父母', '配偶', '子女', '兄弟姐妹', '朋友', '同事'],
deptCascaderOptions: [],
deptCascaderProps: {
label: 'label',
value: 'value',
children: 'children',
checkStrictly: true,
emitPath: false,
},
formRules: {
driverName: [{ required: true, message: '请输入司机姓名', trigger: 'blur' }],
idCardNo: [{ required: true, message: '请输入身份证号', trigger: 'blur' }],
drivingType: [{ required: true, message: '请选择准驾车型', trigger: 'change' }],
drivingLicenseEndDate: [{ validator: this.validateDrivingLicenseEndDate, trigger: 'change' }],
drivingLicenseEndDate: [
{ validator: this.validateDrivingLicenseEndDate, trigger: 'change' },
],
driverType: [{ required: true, message: '请选择司机类型', trigger: 'change' }],
mobile: [{ required: true, message: '请输入手机号', trigger: 'blur' }],
emergencyContactName: [{ required: true, message: '请输入紧急联系人姓名', trigger: 'blur' }],
emergencyContactMobile: [{ required: true, message: '请输入紧急联系人手机号', trigger: 'blur' }],
organizationName: [{ required: true, message: '请输入所属组织', trigger: 'blur' }],
emergencyContactName: [
{ required: true, message: '请输入紧急联系人姓名', trigger: 'blur' },
],
emergencyContactMobile: [
{ required: true, message: '请输入紧急联系人手机号', trigger: 'blur' },
],
organizationName: [{ required: true, message: '请选择所属组织', trigger: 'change' }],
idCardFront: [{ required: true, message: '请上传身份证正面照', trigger: 'change' }],
idCardBack: [{ required: true, message: '请上传身份证反面照', trigger: 'change' }],
drivingLicenseFront: [{ required: true, message: '请上传驾驶证主页', trigger: 'change' }],
@@ -567,10 +650,33 @@ export default {
return this.driverForm.id ? '修改司机' : '新增司机';
},
},
created() {
this.initDeptTree();
},
methods: {
hasPermission(code) {
return this.isAdmin || this.permission?.[code] === true;
},
initDeptTree() {
getDeptTree(this.userInfo.tenantId).then(res => {
this.deptCascaderOptions = this.formatDeptCascaderOptions(res.data.data || []);
const column = this.findColumn(this.option.column, 'organizationName');
column.dicData = this.deptCascaderOptions;
});
},
formatDeptCascaderOptions(tree = []) {
return tree.map(item => {
const label = item.title || item.deptName || item.name;
const option = {
label,
value: label,
};
if (item.children && item.children.length) {
option.children = this.formatDeptCascaderOptions(item.children);
}
return option;
});
},
validateDrivingLicenseEndDate(rule, value, callback) {
if (this.driverForm.drivingLicenseLongTerm !== 1 && !value) {
callback(new Error('请选择驾驶证有效期止'));
@@ -720,6 +826,9 @@ export default {
...params,
...this.searchForm,
};
if (Array.isArray(query.organizationName)) {
query.organizationName = query.organizationName[query.organizationName.length - 1] || '';
}
if (includeExpire && this.query.expireStatus) {
query.expireStatus = this.query.expireStatus;
}
+196 -34
View File
@@ -2,13 +2,31 @@
<basic-container class="transport-ship-page">
<div class="ship-toolbar">
<div class="ship-toolbar__actions">
<el-button type="primary" icon="el-icon-plus" plain v-if="hasPermission('transport_ship_add')" @click="openShip()">
<el-button
type="primary"
icon="el-icon-plus"
plain
v-if="hasPermission('transport_ship_add')"
@click="openShip()"
>
新增
</el-button>
<el-button type="primary" icon="el-icon-download" plain v-if="hasPermission('transport_ship_export')" @click="handleExport">
<el-button
type="primary"
icon="el-icon-download"
plain
v-if="hasPermission('transport_ship_export')"
@click="handleExport"
>
导出
</el-button>
<el-button type="danger" icon="el-icon-delete" plain v-if="hasPermission('transport_ship_delete')" @click="handleDelete">
<el-button
type="danger"
icon="el-icon-delete"
plain
v-if="hasPermission('transport_ship_delete')"
@click="handleDelete"
>
批量删除
</el-button>
</div>
@@ -56,7 +74,11 @@
</span>
</template>
<template #businessTransportCertEndDate="{ row }">
<span :class="getDateClass(row, 'businessTransportCertEndDate', 'businessTransportCertLongTerm')">
<span
:class="
getDateClass(row, 'businessTransportCertEndDate', 'businessTransportCertLongTerm')
"
>
{{ formatEndDate(row.businessTransportCertEndDate, row.businessTransportCertLongTerm) }}
</span>
</template>
@@ -66,10 +88,22 @@
</span>
</template>
<template #menu="{ row }">
<el-button type="primary" text icon="el-icon-edit" v-if="hasPermission('transport_ship_edit')" @click="openShip(row)">
<el-button
type="primary"
text
icon="el-icon-edit"
v-if="hasPermission('transport_ship_edit')"
@click="openShip(row)"
>
修改
</el-button>
<el-button type="primary" text icon="el-icon-view" v-if="hasPermission('transport_ship_view')" @click="openShip(row, true)">
<el-button
type="primary"
text
icon="el-icon-view"
v-if="hasPermission('transport_ship_view')"
@click="openShip(row, true)"
>
综合台账
</el-button>
<el-button
@@ -84,8 +118,22 @@
</template>
</avue-crud>
<el-dialog :title="dialogTitle" append-to-body v-model="shipBox" width="92%" top="4vh" @closed="resetShip">
<el-form ref="shipForm" :model="shipForm" :rules="formRules" label-position="top" :disabled="readonly" class="ship-form">
<el-dialog
:title="dialogTitle"
append-to-body
v-model="shipBox"
width="92%"
top="4vh"
@closed="resetShip"
>
<el-form
ref="shipForm"
:model="shipForm"
:rules="formRules"
label-position="right"
:disabled="readonly"
class="ship-form"
>
<div class="section-title">基础船舶信息</div>
<el-row :gutter="18">
<el-col :span="6">
@@ -95,7 +143,14 @@
</el-col>
<el-col :span="6">
<el-form-item label="船舶识别号" prop="shipIdentifierNo">
<el-input v-model="shipForm.shipIdentifierNo" maxlength="50" show-word-limit @input="shipForm.shipIdentifierNo = String(shipForm.shipIdentifierNo || '').toUpperCase()" />
<el-input
v-model="shipForm.shipIdentifierNo"
maxlength="50"
show-word-limit
@input="
shipForm.shipIdentifierNo = String(shipForm.shipIdentifierNo || '').toUpperCase()
"
/>
</el-form-item>
</el-col>
<el-col :span="6">
@@ -111,7 +166,12 @@
<el-col :span="6">
<el-form-item label="船舶类型" prop="shipType">
<el-select v-model="shipForm.shipType" filterable allow-create default-first-option>
<el-option v-for="item in shipTypeOptions" :key="item" :label="item" :value="item" />
<el-option
v-for="item in shipTypeOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
@@ -134,16 +194,34 @@
<el-row :gutter="18">
<el-col :span="8">
<el-form-item label="国籍证有效期至" prop="nationalityCertEndDate">
<el-date-picker v-model="shipForm.nationalityCertEndDate" type="date" value-format="YYYY-MM-DD" :disabled="shipForm.nationalityCertLongTerm === 1" />
<el-date-picker
v-model="shipForm.nationalityCertEndDate"
type="date"
value-format="YYYY-MM-DD"
:disabled="shipForm.nationalityCertLongTerm === 1"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="长期有效" prop="nationalityCertLongTerm">
<el-checkbox v-model="shipForm.nationalityCertLongTerm" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox
v-model="shipForm.nationalityCertLongTerm"
:true-label="1"
:false-label="0"
></el-checkbox
>
</el-form-item>
</el-col>
<el-col :span="12">
<image-upload-field label="国籍证图片" prop="nationalityCertImage" :value="shipForm.nationalityCertImage" :readonly="readonly" :headers="uploadHeaders" large @success="url => setImage('nationalityCertImage', url)" />
<image-upload-field
label="国籍证图片"
prop="nationalityCertImage"
:value="shipForm.nationalityCertImage"
:readonly="readonly"
:headers="uploadHeaders"
large
@success="url => setImage('nationalityCertImage', url)"
/>
</el-col>
</el-row>
@@ -151,16 +229,34 @@
<el-row :gutter="18">
<el-col :span="8">
<el-form-item label="最低安全配员证书有效期至" prop="safeManningCertEndDate">
<el-date-picker v-model="shipForm.safeManningCertEndDate" type="date" value-format="YYYY-MM-DD" :disabled="shipForm.safeManningCertLongTerm === 1" />
<el-date-picker
v-model="shipForm.safeManningCertEndDate"
type="date"
value-format="YYYY-MM-DD"
:disabled="shipForm.safeManningCertLongTerm === 1"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="长期有效" prop="safeManningCertLongTerm">
<el-checkbox v-model="shipForm.safeManningCertLongTerm" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox
v-model="shipForm.safeManningCertLongTerm"
:true-label="1"
:false-label="0"
></el-checkbox
>
</el-form-item>
</el-col>
<el-col :span="12">
<image-upload-field label="最低安全配员证书图片" prop="safeManningCertImage" :value="shipForm.safeManningCertImage" :readonly="readonly" :headers="uploadHeaders" large @success="url => setImage('safeManningCertImage', url)" />
<image-upload-field
label="最低安全配员证书图片"
prop="safeManningCertImage"
:value="shipForm.safeManningCertImage"
:readonly="readonly"
:headers="uploadHeaders"
large
@success="url => setImage('safeManningCertImage', url)"
/>
</el-col>
</el-row>
@@ -168,16 +264,34 @@
<el-row :gutter="18">
<el-col :span="8">
<el-form-item label="营业运输证有效期至" prop="businessTransportCertEndDate">
<el-date-picker v-model="shipForm.businessTransportCertEndDate" type="date" value-format="YYYY-MM-DD" :disabled="shipForm.businessTransportCertLongTerm === 1" />
<el-date-picker
v-model="shipForm.businessTransportCertEndDate"
type="date"
value-format="YYYY-MM-DD"
:disabled="shipForm.businessTransportCertLongTerm === 1"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="长期有效" prop="businessTransportCertLongTerm">
<el-checkbox v-model="shipForm.businessTransportCertLongTerm" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox
v-model="shipForm.businessTransportCertLongTerm"
:true-label="1"
:false-label="0"
></el-checkbox
>
</el-form-item>
</el-col>
<el-col :span="12">
<image-upload-field label="营业运输证图片" prop="businessTransportCertImage" :value="shipForm.businessTransportCertImage" :readonly="readonly" :headers="uploadHeaders" large @success="url => setImage('businessTransportCertImage', url)" />
<image-upload-field
label="营业运输证图片"
prop="businessTransportCertImage"
:value="shipForm.businessTransportCertImage"
:readonly="readonly"
:headers="uploadHeaders"
large
@success="url => setImage('businessTransportCertImage', url)"
/>
</el-col>
</el-row>
@@ -185,22 +299,39 @@
<el-row :gutter="18">
<el-col :span="8">
<el-form-item label="承租有效期至" prop="leaseEndDate">
<el-date-picker v-model="shipForm.leaseEndDate" type="date" value-format="YYYY-MM-DD" :disabled="shipForm.leaseLongTerm === 1" />
<el-date-picker
v-model="shipForm.leaseEndDate"
type="date"
value-format="YYYY-MM-DD"
:disabled="shipForm.leaseLongTerm === 1"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="长期有效" prop="leaseLongTerm">
<el-checkbox v-model="shipForm.leaseLongTerm" :true-label="1" :false-label="0"></el-checkbox>
<el-checkbox v-model="shipForm.leaseLongTerm" :true-label="1" :false-label="0"
></el-checkbox
>
</el-form-item>
</el-col>
<el-col :span="12">
<image-upload-field label="承租合同图片" prop="leaseContractImage" :value="shipForm.leaseContractImage" :readonly="readonly" :headers="uploadHeaders" large @success="url => setImage('leaseContractImage', url)" />
<image-upload-field
label="承租合同图片"
prop="leaseContractImage"
:value="shipForm.leaseContractImage"
:readonly="readonly"
:headers="uploadHeaders"
large
@success="url => setImage('leaseContractImage', url)"
/>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="shipBox = false">取消</el-button>
<el-button type="primary" v-if="!readonly" :loading="submitLoading" @click="handleSubmit">确定</el-button>
<el-button type="primary" v-if="!readonly" :loading="submitLoading" @click="handleSubmit"
>确定</el-button
>
</template>
</el-dialog>
</basic-container>
@@ -210,7 +341,14 @@
import { mapGetters } from 'vuex';
import NProgress from 'nprogress';
import { option } from '@/option/transportCapacity/transport-ship';
import { getList, getDetail, submit, remove, changeStatus, getExpiryStat } from '@/api/transportCapacity/transport-ship';
import {
getList,
getDetail,
submit,
remove,
changeStatus,
getExpiryStat,
} from '@/api/transportCapacity/transport-ship';
import { exportBlob } from '@/api/common';
import { getToken } from '@/utils/auth';
import { downloadXls } from '@/utils/util';
@@ -313,9 +451,15 @@ export default {
shipIdentifierNo: [{ required: true, message: '请输入船舶识别号', trigger: 'blur' }],
organizationName: [{ required: true, message: '请输入所属组织', trigger: 'blur' }],
shipType: [{ required: true, message: '请选择船舶类型', trigger: 'change' }],
nationalityCertEndDate: [{ validator: this.validateNationalityCertEndDate, trigger: 'change' }],
safeManningCertEndDate: [{ validator: this.validateSafeManningCertEndDate, trigger: 'change' }],
businessTransportCertEndDate: [{ validator: this.validateBusinessTransportCertEndDate, trigger: 'change' }],
nationalityCertEndDate: [
{ validator: this.validateNationalityCertEndDate, trigger: 'change' },
],
safeManningCertEndDate: [
{ validator: this.validateSafeManningCertEndDate, trigger: 'change' },
],
businessTransportCertEndDate: [
{ validator: this.validateBusinessTransportCertEndDate, trigger: 'change' },
],
remark: [{ max: 200, message: '备注最多200字', trigger: 'blur' }],
},
};
@@ -344,15 +488,18 @@ export default {
return this.isAdmin || this.permission?.[code] === true;
},
validateNationalityCertEndDate(rule, value, callback) {
if (this.shipForm.nationalityCertLongTerm !== 1 && !value) return callback(new Error('请选择国籍证有效期至'));
if (this.shipForm.nationalityCertLongTerm !== 1 && !value)
return callback(new Error('请选择国籍证有效期至'));
callback();
},
validateSafeManningCertEndDate(rule, value, callback) {
if (this.shipForm.safeManningCertLongTerm !== 1 && !value) return callback(new Error('请选择最低安全配员证书有效期至'));
if (this.shipForm.safeManningCertLongTerm !== 1 && !value)
return callback(new Error('请选择最低安全配员证书有效期至'));
callback();
},
validateBusinessTransportCertEndDate(rule, value, callback) {
if (this.shipForm.businessTransportCertLongTerm !== 1 && !value) return callback(new Error('请选择营业运输证有效期至'));
if (this.shipForm.businessTransportCertLongTerm !== 1 && !value)
return callback(new Error('请选择营业运输证有效期至'));
callback();
},
openShip(row, readonly = false) {
@@ -395,7 +542,11 @@ export default {
handleStatus(row) {
const status = row.status === 1 ? 2 : 1;
const text = status === 1 ? '启用' : '停用';
this.$confirm(`是否${text}该船舶?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
this.$confirm(`是否${text}该船舶?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
changeStatus(row.id, status).then(() => {
this.$message.success('操作成功');
this.onLoad(this.page);
@@ -407,7 +558,11 @@ export default {
this.$message.warning('请选择至少一条数据');
return;
}
this.$confirm('是否删除选中的船舶数据?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
this.$confirm('是否删除选中的船舶数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
remove(this.ids).then(() => {
this.$message.success('操作成功');
this.onLoad(this.page);
@@ -476,9 +631,16 @@ export default {
return query;
},
handleExport() {
this.$confirm('是否导出船舶数据?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => {
this.$confirm('是否导出船舶数据?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
NProgress.start();
exportBlob('/blade-transport/transport-ship/export-transport-ship', this.buildExportParams())
exportBlob(
'/blade-transport/transport-ship/export-transport-ship',
this.buildExportParams()
)
.then(res => {
downloadXls(res.data, `船舶管理${this.$dayjs().format('YYYY-MM-DD HH:mm:ss')}.xlsx`);
})
+124 -24
View File
@@ -27,7 +27,11 @@
>批量删除
</el-button>
</div>
<el-radio-group v-model="query.expireStatus" class="vehicle-stat" @change="handleExpireChange">
<el-radio-group
v-model="query.expireStatus"
class="vehicle-stat"
@change="handleExpireChange"
>
<el-radio-button label="">全部{{ expiryStat.total }}</el-radio-button>
<el-radio-button label="within30">30天内到期{{ expiryStat.within30 }}</el-radio-button>
<el-radio-button label="expired">已到期{{ expiryStat.expired }}</el-radio-button>
@@ -119,7 +123,7 @@
ref="vehicleForm"
:model="vehicleForm"
:rules="formRules"
label-position="top"
label-position="right"
:disabled="readonly"
class="vehicle-form"
>
@@ -142,33 +146,68 @@
</el-col>
<el-col :span="6">
<el-form-item label="车辆类型" prop="vehicleType">
<el-select v-model="vehicleForm.vehicleType" filterable allow-create default-first-option>
<el-option v-for="item in vehicleTypeOptions" :key="item" :label="item" :value="item" />
<el-select
v-model="vehicleForm.vehicleType"
filterable
allow-create
default-first-option
>
<el-option
v-for="item in vehicleTypeOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="业务关系" prop="businessRelation">
<el-select v-model="vehicleForm.businessRelation">
<el-option v-for="item in businessRelationOptions" :key="item" :label="item" :value="item" />
<el-option
v-for="item in businessRelationOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="能源类型" prop="energyType">
<el-select v-model="vehicleForm.energyType" filterable allow-create default-first-option>
<el-option v-for="item in energyTypeOptions" :key="item" :label="item" :value="item" />
<el-select
v-model="vehicleForm.energyType"
filterable
allow-create
default-first-option
>
<el-option
v-for="item in energyTypeOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="核定载质量(KG)" prop="approvedLoadKg">
<el-input-number v-model="vehicleForm.approvedLoadKg" :min="0" :precision="0" controls-position="right" />
<el-input-number
v-model="vehicleForm.approvedLoadKg"
:min="0"
:precision="0"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="准牵引总质量(KG)" prop="tractionMassKg">
<el-input-number v-model="vehicleForm.tractionMassKg" :min="0" :precision="0" controls-position="right" />
<el-input-number
v-model="vehicleForm.tractionMassKg"
:min="0"
:precision="0"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :span="6">
@@ -181,17 +220,32 @@
</el-col>
<el-col :span="6">
<el-form-item label="外廓长度(mm)" prop="outerLength">
<el-input-number v-model="vehicleForm.outerLength" :min="0" :precision="0" controls-position="right" />
<el-input-number
v-model="vehicleForm.outerLength"
:min="0"
:precision="0"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="外廓宽度(mm)" prop="outerWidth">
<el-input-number v-model="vehicleForm.outerWidth" :min="0" :precision="0" controls-position="right" />
<el-input-number
v-model="vehicleForm.outerWidth"
:min="0"
:precision="0"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="外廓高度(mm)" prop="outerHeight">
<el-input-number v-model="vehicleForm.outerHeight" :min="0" :precision="0" controls-position="right" />
<el-input-number
v-model="vehicleForm.outerHeight"
:min="0"
:precision="0"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :span="6">
@@ -211,7 +265,11 @@
</el-col>
<el-col :span="4">
<el-form-item label="长期有效" prop="compulsoryScrapLongTerm">
<el-checkbox v-model="vehicleForm.compulsoryScrapLongTerm" :true-label="1" :false-label="0">
<el-checkbox
v-model="vehicleForm.compulsoryScrapLongTerm"
:true-label="1"
:false-label="0"
>
</el-checkbox>
</el-form-item>
@@ -228,7 +286,12 @@
<el-col :span="10">
<el-form-item label="行驶证有效期" prop="drivingLicenseEndDate">
<div class="date-range">
<el-date-picker v-model="vehicleForm.drivingLicenseStartDate" type="date" value-format="YYYY-MM-DD" placeholder="起" />
<el-date-picker
v-model="vehicleForm.drivingLicenseStartDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="起"
/>
<el-date-picker
v-model="vehicleForm.drivingLicenseEndDate"
type="date"
@@ -241,7 +304,11 @@
</el-col>
<el-col :span="4">
<el-form-item label="长期有效" prop="drivingLicenseLongTerm">
<el-checkbox v-model="vehicleForm.drivingLicenseLongTerm" :true-label="1" :false-label="0">
<el-checkbox
v-model="vehicleForm.drivingLicenseLongTerm"
:true-label="1"
:false-label="0"
>
</el-checkbox>
</el-form-item>
@@ -269,7 +336,12 @@
<el-col :span="10">
<el-form-item label="道路运输证有效期" prop="roadTransportCertEndDate">
<div class="date-range">
<el-date-picker v-model="vehicleForm.roadTransportCertStartDate" type="date" value-format="YYYY-MM-DD" placeholder="起" />
<el-date-picker
v-model="vehicleForm.roadTransportCertStartDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="起"
/>
<el-date-picker
v-model="vehicleForm.roadTransportCertEndDate"
type="date"
@@ -282,7 +354,11 @@
</el-col>
<el-col :span="4">
<el-form-item label="长期有效" prop="roadTransportCertLongTerm">
<el-checkbox v-model="vehicleForm.roadTransportCertLongTerm" :true-label="1" :false-label="0">
<el-checkbox
v-model="vehicleForm.roadTransportCertLongTerm"
:true-label="1"
:false-label="0"
>
</el-checkbox>
</el-form-item>
@@ -299,7 +375,11 @@
</el-col>
<el-col :span="4">
<el-form-item label="年审长期有效" prop="annualReviewLongTerm">
<el-checkbox v-model="vehicleForm.annualReviewLongTerm" :true-label="1" :false-label="0">
<el-checkbox
v-model="vehicleForm.annualReviewLongTerm"
:true-label="1"
:false-label="0"
>
</el-checkbox>
</el-form-item>
@@ -326,12 +406,21 @@
</el-col>
<el-col :span="6">
<el-form-item label="机动车登记日期" prop="registrationDate">
<el-date-picker v-model="vehicleForm.registrationDate" type="date" value-format="YYYY-MM-DD" />
<el-date-picker
v-model="vehicleForm.registrationDate"
type="date"
value-format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input v-model="vehicleForm.remark" type="textarea" maxlength="200" show-word-limit />
<el-input
v-model="vehicleForm.remark"
type="textarea"
maxlength="200"
show-word-limit
/>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -499,16 +588,24 @@ export default {
organizationName: [{ required: true, message: '请输入所属组织', trigger: 'blur' }],
plateNo: [
{ required: true, message: '请输入车牌号', trigger: 'blur' },
{ pattern: /^[\u4e00-\u9fa5][A-Z][A-Z0-9挂学警港澳]{5,6}$/, message: '请输入标准车牌号', trigger: 'blur' },
{
pattern: /^[\u4e00-\u9fa5][A-Z][A-Z0-9挂学警港澳]{5,6}$/,
message: '请输入标准车牌号',
trigger: 'blur',
},
],
vehicleType: [{ required: true, message: '请选择车辆类型', trigger: 'change' }],
approvedLoadKg: [{ required: true, message: '请输入核定载质量', trigger: 'blur' }],
businessRelation: [{ required: true, message: '请选择业务关系', trigger: 'change' }],
energyType: [{ required: true, message: '请选择能源类型', trigger: 'change' }],
drivingLicenseNo: [{ required: true, message: '请输入行驶证档案编号', trigger: 'blur' }],
drivingLicenseEndDate: [{ validator: this.validateDrivingLicenseEndDate, trigger: 'change' }],
drivingLicenseEndDate: [
{ validator: this.validateDrivingLicenseEndDate, trigger: 'change' },
],
roadTransportCertNo: [{ required: true, message: '请输入道路运输证号', trigger: 'blur' }],
roadTransportCertEndDate: [{ validator: this.validateRoadTransportCertEndDate, trigger: 'change' }],
roadTransportCertEndDate: [
{ validator: this.validateRoadTransportCertEndDate, trigger: 'change' },
],
annualReviewEndDate: [{ validator: this.validateAnnualReviewEndDate, trigger: 'change' }],
registrationNo: [{ required: true, message: '请输入机动车登记编号', trigger: 'blur' }],
remark: [{ max: 200, message: '备注最多200字', trigger: 'blur' }],
@@ -708,7 +805,10 @@ export default {
type: 'warning',
}).then(() => {
NProgress.start();
exportBlob('/blade-transport/transport-vehicle/export-transport-vehicle', this.buildExportParams())
exportBlob(
'/blade-transport/transport-vehicle/export-transport-vehicle',
this.buildExportParams()
)
.then(res => {
downloadXls(res.data, `车辆管理${this.$dayjs().format('YYYY-MM-DD HH:mm:ss')}.xlsx`);
})