Compare commits

...

2 Commits

Author SHA1 Message Date
xiepeng 25680c9e26 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	src/assets/js/constant.js
2024-03-26 18:04:58 +08:00
xiepeng cfec695c81 修改车牌号、车架号、发动机号校验
图片显示
2024-03-26 18:04:04 +08:00
10 changed files with 147 additions and 76 deletions

View File

@ -110,13 +110,13 @@ export const DISPOSE_STATUS_LIST = [
];
export const TAXES_PERIOD = [
// 处理状态
// 税费周期
{ ID: "1", NAME: "12个月", NUM: "12" },
{ ID: "0", NAME: "6个月", NUM: "6" },
];
export const EXPIRE_STATUS = [
// 处理状态
// 到期状态
{ ID: "1", NAME: "未到期" },
{ ID: "0", NAME: "已到期" },
];
@ -126,3 +126,21 @@ export const MAINTENANCE_LEVEL_LIST = [
{ ID: "1", NAME: "一级维保" },
{ ID: "2", NAME: "二级维保" },
];
export const NETWORK_STATE = [
// 入网状态
{ ID: "0", NAME: "已入网" },
{ ID: "1", NAME: "未入网" },
{ ID: "2", NAME: "超时入网" },
];
export const REMINDER_STATUS = [
// 提醒状态
{ ID: "0", NAME: "开启" },
{ ID: "1", NAME: "关闭" },
];
// export const MAINTENANCE_LEVEL_LIST = [
// //维保等级
// {ID:'1',NAME:'一级维保'},
// {ID:'2',NAME:'二级维保'},
// ]

View File

@ -387,6 +387,17 @@ const rules = {
],
FRAMES_NUMBER: [
{ required: true, message: "车架号不能为空", trigger: "change" },
{ min: 17, message: "车架号不能少于17位", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (!/^[A-HJ-NPR-Z\d]{8}[X\d][A-HJ-NPR-Z\d]{3}\d{5}$/.test(value)) {
callback(new Error("车架号格式不正确"));
} else {
callback();
}
},
trigger: "blur",
},
],
OPERATING_CERTIFICATE: [
{ required: true, message: "营运证号不能为空", trigger: "blur" },
@ -434,6 +445,19 @@ const rules = {
OPERATING_CERTIFICATE_PHOTO: [
{ required: true, message: "营运证照片不能为空", trigger: "blur" },
],
ENGINE_NUMBER: [
{ required: true, message: "请输入发动机号", trigger: "blur" },
{ min: 7, max: 8, message: "请输入7-8位发动机号", trigger: "blur" },
{
pattern:
/^[A-Z0-9a-z\d]{7,8}$/,
message: "请输入正确的发动机号",
},
],
VOUCH_NUMBERLOAD: [
{ required: true, message: "请输入核定载人数", trigger: "blur" },
{ pattern: /^([1-9][0-9]*)$/, message: "请输入整数", trigger: "blur" },
]
};
const formRef = ref(null);
const form = ref({

View File

@ -69,17 +69,7 @@
</el-col>
<el-col :span="6">
<el-form-item label="归属部门" prop="BELONGING_DEPARTMENT">
<el-select
v-model="form.BELONGING_DEPARTMENT"
placeholder="请选择归属部门"
>
<el-option
v-for="item in getBelongingDepartment"
:key="item.BIANMA"
:label="item.NAME"
:value="item.NAME"
/>
</el-select>
<layout-department v-model="form.BELONGING_DEPARTMENT" />
</el-form-item>
</el-col>
<el-col :span="6">
@ -195,7 +185,7 @@
</el-select>
</el-form-item>
</el-col>
<el-divider content-position="left">检查内容</el-divider>
<el-divider content-position="left">详细信息</el-divider>
<el-col :span="6">
<el-form-item label="车辆品牌" prop="VEHICLE_BRAND">
<el-input
@ -330,7 +320,6 @@ import { ref } from "vue";
import {
layoutFnGetVehicleColor,
layoutFnGetTransportCategory,
layoutFnGetBelongingDepartment,
layoutFnGetFuelType,
layoutFnGetEmissionStandard,
layoutFnGetVehicleType,
@ -349,17 +338,22 @@ import { debounce } from "throttle-debounce";
import { useRoute, useRouter } from "vue-router";
import { addingPrefixToFile } from "@/assets/js/utils.js";
import { setUploadImg } from "@/request/api.js";
import LayoutDepartment from "@/components/department/index.vue";
const route = useRoute();
const router = useRouter();
const { OPERATING_ID } = route.query;
let plateNumber = ''
const isPlateNumberRepetition = async (rule, vehicleNumber, callback) => {
if (vehicleNumber) {
console.log("车牌号0-=0",vehicleNumber);
const vehicleCount = await findByPlateNumber({ vehicleNumber });
if (vehicleCount.pd) {
callback(new Error("车辆已存在"));
} else callback();
if(vehicleCount.pd) {
if(vehicleCount.pd.PLATE_NUMBER === plateNumber){
callback();
}else{
callback(new Error("车辆已存在"))
}
}else callback();
}
};
const isVehicleNumber = (rule, vehicleNumber, callback) => {
@ -485,7 +479,6 @@ const form = ref({
});
const getVehicleColorList = await layoutFnGetVehicleColor();
const getTransportCategoryList = await layoutFnGetTransportCategory();
const getBelongingDepartment = await layoutFnGetBelongingDepartment();
const getFuelTypeList = await layoutFnGetFuelType();
const getEmissionStandardList = await layoutFnGetEmissionStandard();
const getVehicleTypeList = await layoutFnGetVehicleType();
@ -502,6 +495,7 @@ const fnGetData = async () => {
form.value.OPERATING_CERTIFICATE_PHOTO = addingPrefixToFile(
resData.operatingcertificatephoto
);
plateNumber = form.value.PLATE_NUMBER
};
fnGetData();
const fnSubmit = debounce(

View File

@ -17,7 +17,7 @@
</el-col>
<el-col :span="6">
<el-form-item label="车辆颜色" prop="VEHICLE_COLOR">
<el-select v-model="searchForm.VEHICLE_COLOR">
<el-select v-model="searchForm.VEHICLE_COLOR" clearable>
<el-option
v-for="item in troubleshootingCycleList"
:key="item.BIANMA"
@ -47,20 +47,19 @@
<el-col :span="6">
<el-form-item label="入网状态" prop="NETWORK_STATUS">
<el-select v-model="searchForm.NETWORK_STATUS">
<el-select v-model="searchForm.NETWORK_STATUS" clearable>
<el-option
v-for="item in networkStatusLevelList"
:key="item.BIANMA"
v-for="item in NETWORK_STATE"
:key="item.ID"
:label="item.NAME"
:value="item.NAME"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<!-- <el-col :span="6">
<el-form-item label="主动安全" prop="ACTIVE_SAFETY">
<el-select v-model="searchForm.ACTIVE_SAFETY">
<el-select v-model="searchForm.ACTIVE_SAFETY" clearable>
<el-option
v-for="item in activeSafety"
:key="item.BIANMA"
@ -69,18 +68,16 @@
/>
</el-select>
</el-form-item>
</el-col>
</el-col>-->
<el-col :span="10">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer"></el-button>
</el-form-item>
</el-col>
<el-col :span="30">
<el-form-item label-width="10px" class="end">
<el-button>导出</el-button>
<el-button @click="fnExport"></el-button>
</el-form-item>
</el-col>
</el-row>
@ -88,7 +85,9 @@
</el-card>
<layout-card>
<layout-table
ref="tableRef"
v-model:pagination="pagination"
row-key="OPERATING_ID"
:data="list"
@get-data="fnGetDataTransfer"
>
@ -128,19 +127,7 @@
>
查看
</el-button>
<el-button
type="primary"
text
link
@click="
router.push({
path: '/enterprise_management/basics_info_management/operation_vehicle/view',
query: { OPERATING_ID: row.OPERATING_ID },
})
"
>
画像
</el-button>
<el-button
type="primary"
text
@ -188,8 +175,6 @@ import { serialNumber } from "@/assets/js/utils.js";
import useListData from "@/assets/js/useListData.js";
import {
layoutFnGetVehicleColor,
layoutFnGetNetworkStatus,
layoutFnGetActiveSafety,
} from "@/assets/js/operation_vehicle.js";
import {
getOperationVehicleList,
@ -199,13 +184,12 @@ import { useRouter } from "vue-router";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import { debounce } from "throttle-debounce";
import { ElMessage, ElMessageBox } from "element-plus";
import { NETWORK_STATE } from "@/assets/js/constant.js";
const router = useRouter();
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef} =
useListData(getOperationVehicleList, {});
const troubleshootingCycleList = await layoutFnGetVehicleColor();
const networkStatusLevelList = await layoutFnGetNetworkStatus();
const activeSafety = await layoutFnGetActiveSafety();
const fnGetDataTransfer = () => {
fnGetData({
DEPTIDS: searchForm.value.DEPTIDS?.join(","),
@ -228,6 +212,19 @@ const fnDelete = debounce(
{ atBegin: true }
);
const fnExport = async () => {
const selectionData = tableRef.value.getSelectionRows();
await ElMessageBox.confirm("确定要导出到excel吗", { type: "warning" });
const DATA_IDS = selectionData.map((item) => item.OPERATING_ID).join(",");
window.location.href =
import.meta.env[import.meta.env.DEV ? "VITE_PROXY" : "VITE_BASE_URL"] +
"/operationunit/excel?" +
"&KEYWORDS=" +
(searchForm.value.KEYWORDS || "") +
"&DATA_IDS=" +
DATA_IDS;
};
const buttonJurisdiction = await useButtonJurisdiction("operation");
</script>
<style scoped></style>

View File

@ -1,8 +1,11 @@
<template>
<layout-card>
<div id="printContainer">
<el-divider content-position="left">车辆档案</el-divider>
<el-divider content-position="left">基本信息</el-divider>
<el-descriptions border>
<el-descriptions-item label="编号">
{{ info.GOODSSELFNUMBER }}
</el-descriptions-item>
<el-descriptions-item label="车牌号">
{{ info.PLATE_NUMBER }}
</el-descriptions-item>
@ -18,8 +21,11 @@
<el-descriptions-item label="营运证号">
{{ info.OPERATING_CERTIFICATE }}
</el-descriptions-item>
<el-descriptions-item label="运输类别">
{{ info.TRANSPORT_TYPE }}
<el-descriptions-item label="归属部门">
{{ info.BELONGING_DEPARTMENT }}
</el-descriptions-item>
<el-descriptions-item label="车辆类型">
{{ info.VEHICLE_TYPE }}
</el-descriptions-item>
<el-descriptions-item label="初登日期">
{{ info.FIRSTSHOW_DATE }}
@ -36,9 +42,6 @@
<el-descriptions-item label="车主电话">
{{ info.VEHICLEOWNER_NUMBER }}
</el-descriptions-item>
<el-descriptions-item label="归属地区">
{{ info.HOME_TERRITORY }}
</el-descriptions-item>
<el-descriptions-item label="车主住址">
{{ info.VEHICLEOWNER_ADDRESS }}
</el-descriptions-item>
@ -54,6 +57,12 @@
<el-descriptions-item label="实际住址">
{{ info.PHYSICAL_ADDRESS }}
</el-descriptions-item>
<el-descriptions-item label="车载设备">
{{ info.VEHICLE_EQUIPMENT }}
</el-descriptions-item>
<el-descriptions-item label="运输类别">
{{ info.TRANSPORT_TYPE }}
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">详细信息</el-divider>
<el-descriptions border>
@ -78,8 +87,8 @@
<el-descriptions-item label="准牵引质量">
{{ info.RACTIONMASS_QUALITY }}
</el-descriptions-item>
<el-descriptions-item label="运输类别">
{{ info.TRANSPORT_TYPE }}
<el-descriptions-item label="核定载人数">
{{ info.VOUCH_NUMBERLOAD }}
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="1" border>
@ -149,6 +158,7 @@ const info = ref({});
const fnGetData = async () => {
if (!OPERATING_ID) return;
const resData = await findByIdOperatingVehicleInfo({ OPERATING_ID });
console.log("-=-=-=-",resData);
info.value = resData.pd;
info.value.HEADSTOCK_PHOTO = addingPrefixToFile(resData.headstockphoto);
info.value.DRIVINGLICENSE_PHOTO = addingPrefixToFile(

View File

@ -308,7 +308,7 @@ const freightVehicleList = await getAssignedFreightTrailerList();
const assignedWayList = await layoutFnGetAssignedWay();
const operationList = await getAssignedOperationVehicleList();
console.log("筛选后的挂车车辆",freightVehicleList);
const rules = {
ASSIGNED_VEHICLE_MODEL: [
{ required: true, message: "过户车型不能为空", trigger: "change" },
@ -341,6 +341,12 @@ const rules = {
message: "请输入正确的手机号码",
},
],
NOW_OWNERS: [
{ required: true, message: "请输入现车主/业主", trigger: "blur" },
],
NOW_PLATE_NUMBER: [
{ required: true, message: "请输入现车牌号", trigger: "blur" },
]
};
const formRef = ref(null);
const form = ref({
@ -454,7 +460,6 @@ const fnGetVehicleInfo = async () => {
const FREIGHTTRAILER_ID =
form.value.FREIGHTVEHICLELIST[i].FREIGHTTRAILER_ID;
const resData = await getFreightTrailerView({ FREIGHTTRAILER_ID });
console.log("选中的货运挂车信息", resData);
info.value = resData.pd;
form.value.VEHICLE.PLATE_NUMBER = info.value.PLATE_NUMBER;
form.value.VEHICLE.RAW_OWNERS = info.value.CAR_OWNERS;

View File

@ -112,9 +112,6 @@
<el-tag v-else-if="row.DUE_DATE_TYPE === 2">即将到期</el-tag>
</template>
</el-table-column>
<el-table-column prop="ARCHIVES_TYPE" label="档案状态" width="150" />
<el-table-column prop="CREATTIME" label="创建时间" width="150" />
<el-table-column prop="OPERATTIME" label="修改时间" width="150" />
<el-table-column label="操作" width="250">
<template #default="{ row }">
<el-button

View File

@ -70,7 +70,7 @@
<el-col :span="6">
<el-form-item label="所属省份" prop="PROVINCE">
<el-input
v-model="form.Trailer.PROVINCE"
v-model="form.PROVINCE"
placeholder="--"
disabled
/>
@ -153,7 +153,13 @@
</el-col>
<el-col :span="6">
<el-form-item label="到期日期" prop="EXPIRE_DATE">
<el-input v-model="form.EXPIRE_DATE" disabled />
<el-date-picker
v-model="form.EXPIRE_DATE"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="date"
disabled
/>
</el-form-item>
</el-col>
</el-row>
@ -169,7 +175,13 @@
</el-col>
<el-col :span="6">
<el-form-item label="提醒日期" prop="REMINDER_DATA">
<el-input v-model="form.REMINDER_DATA" disabled />
<el-date-picker
v-model="form.REMINDER_DATA"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="date"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
@ -226,7 +238,6 @@ import { addingPrefixToFile } from "@/assets/js/utils.js";
import { TAXES_PERIOD } from "@/assets/js/constant.js";
const router = useRouter();
const choiceTrailerList = await getChoiceTrailerList();
console.log("筛选后的挂车车辆信息",choiceTrailerList);
const rules = {
TRAILER_VEHICLE: [
{ required: true, message: "挂车车辆不能为空", trigger: "blur" },
@ -339,6 +350,9 @@ const fnGetTrailerInfo = async () => {
const FREIGHTTRAILER_ID = form.value.FREIGHTTRAILER_ID;
form.value.FREIGHTTRAILER_ID = FREIGHTTRAILER_ID;
const resData = await getFreightTrailerView({ FREIGHTTRAILER_ID });
form.value.PROVINCE = resData.pd.PROVINCE
form.value.CITY = resData.pd.CITY
form.value.COUNTY = resData.pd.COUNTY
form.value.PLATE_NUMBER = resData.pd.PLATE_NUMBER;
form.value.FRAMES_NUMBER = resData.pd.VIN;
form.value.VEHICLE_TYPE = resData.pd.TRAILER_TYPE;

View File

@ -143,7 +143,13 @@
</el-col>
<el-col :span="6">
<el-form-item label="到期日期" prop="EXPIRE_DATE">
<el-input v-model="form.EXPIRE_DATE" disabled />
<el-date-picker
v-model="form.EXPIRE_DATE"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="date"
disabled
/>
</el-form-item>
</el-col>
</el-row>
@ -159,7 +165,13 @@
</el-col>
<el-col :span="6">
<el-form-item label="提醒日期" prop="REMINDER_DATA">
<el-input v-model="form.REMINDER_DATA" disabled />
<el-date-picker
v-model="form.REMINDER_DATA"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="date"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">

View File

@ -47,6 +47,7 @@
<el-select
v-model="searchForm.EXPIRE_STATUS"
placeholder="请选择到期状态"
clearable
>
<el-option
v-for="item in EXPIRE_STATUS"
@ -62,12 +63,13 @@
<el-select
v-model="searchForm.REMINDER_STATUS"
placeholder="请选择提醒状态"
clearable
>
<el-option
v-for="item in remindStatusList"
:key="item.BIANMA"
v-for="item in REMINDER_STATUS"
:key="item.ID"
:label="item.NAME"
:value="item.NAME"
:value="item.ID"
/>
</el-select>
</el-form-item>
@ -186,9 +188,6 @@
<script setup>
import { serialNumber } from "@/assets/js/utils.js";
import useListData from "@/assets/js/useListData.js";
import {
layoutFnGetRemindStatus,
} from "@/assets/js/taxation_manage.js";
import {
getTaxationManageList,
setTaxatonManageDelete,
@ -197,10 +196,11 @@ import { useRouter } from "vue-router";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import { debounce } from "throttle-debounce";
import { ElMessage, ElMessageBox } from "element-plus";
import { EXPIRE_STATUS, REMINDER_STATUS } from "@/assets/js/constant.js";
const router = useRouter();
const remindStatusList = await layoutFnGetRemindStatus();
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getTaxationManageList, {});
console.log("-=-=--=-==--==-=--==-",getTaxationManageList());
const fnGetDataTransfer = () => {
fnGetData({
DEPTIDS: searchForm.value.DEPTIDS?.join(","),