BUG 优化

dev
xiepeng 2024-04-11 18:29:01 +08:00
parent d51784a22d
commit a9ae574aff
5 changed files with 714 additions and 3 deletions

View File

@ -14,3 +14,11 @@ export const getUserPersonTypeListAll = (params) =>
export const dateteSecurityAllWaybillre = (params) => export const dateteSecurityAllWaybillre = (params) =>
post("/waybillregistration/deleteAll", params); // 批量删除 post("/waybillregistration/deleteAll", params); // 批量删除
export const getSafetyWaybillreInfo = (params) =>
post("/waybillregistration/goEdit", params); // 获取运单信息
export const getPrincipalContactList = (params) =>
post("/waybillregistration/getPrincipalContactList", params); // 委托方的联系人列表
export const editSafetyWaybillreInfo = (params) =>
upload("/waybillregistration/edit", params); // 修改运单信息

View File

@ -18,8 +18,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="调度人" prop="USER_IDS"> <el-form-item label="调度人" prop="DISPATCHER">
<el-select v-model="data.form.USER_IDS" multiple> <el-select v-model="data.form.DISPATCHER" multiple>
<el-option <el-option
v-for="item in data.userList" v-for="item in data.userList"
:key="item.USER_ID" :key="item.USER_ID"
@ -360,6 +360,9 @@ const rules = {
DESTINATIONADDRESS: [ DESTINATIONADDRESS: [
{ required: true, message: "请输入目的地址", trigger: "blur" }, { required: true, message: "请输入目的地址", trigger: "blur" },
], ],
PRACTITIONER: [
{ required: true, message: "请选择从业人员", trigger: "change" },
],
}; };
const data = reactive({ const data = reactive({

View File

@ -0,0 +1,687 @@
<template>
<layout-card>
<el-form
ref="formRef"
:model="data.form"
:rules="rules"
label-width="175px"
>
<!-- 承运信息 -->
<el-divider content-position="left">承运信息</el-divider>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item prop="DEPARTMENT_ID" label="部门">
<layout-department
v-model="data.form.DEPARTMENT_ID"
@update:model-value="fnDepartmentChange"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="调度人" prop="DISPATCHER">
<el-select v-model="data.form.DISPATCHER" multiple>
<el-option
v-for="item in data.userList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="运单编号" prop="WAYBILLNUMBER">
<el-input
v-model="data.form.WAYBILLNUMBER"
placeholder="请输入运单编号"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="承运日期" prop="SHIPPINGDATE">
<el-date-picker
v-model="data.form.SHIPPINGDATE"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择时间"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="运输车辆" prop="TRANSPORTVEHICLE">
<el-select
v-model="data.form.TRANSPORTVEHICLE"
placeholder="请选择运输车辆"
clearable
>
<el-option
v-for="item in data.OperationVehicle"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="从业人员" prop="PRACTITIONER">
<el-select
v-model="data.form.PRACTITIONER"
placeholder="请选择从业人员"
clearable
>
<el-option
v-for="item in data.userTypeList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="货运挂车" prop="TRUCKCART">
<el-select
v-model="data.form.TRUCKCART"
placeholder="请选择货运挂车"
clearable
>
<el-option
v-for="item in data.OperationTruck"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- 客户信息 -->
<el-divider content-position="left">客户信息</el-divider>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="委托方" prop="CLIENT">
<el-select
v-model="data.form.CLIENT"
placeholder="请选择委托方"
@update:model-value="fnClientChange"
>
>
<el-option
v-for="item in data.clientOptionsList"
:key="item.CUSTOMERNAME_ID"
:label="item.CUSTOMERNAME"
:value="item.CUSTOMERNAME_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系人" prop="CLIENTCONTACTPERSON">
<el-select
v-model="data.form.CLIENTCONTACTPERSON"
placeholder="请选择委联系人"
clearable
@change="changeCLIENTCONTACTPERSON"
>
<el-option
v-for="contact in data.clientOptions"
:key="contact.CONTACT"
:label="contact.CONTACT"
:value="contact.CONTACT_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系电话" prop="CLIENTCONTACTPHONE">
<el-input
v-model="data.form.CLIENTCONTACTPHONE"
placeholder="请输入联系电话"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="确认方" prop="CONFIRMER">
<el-select
v-model="data.form.CONFIRMER"
placeholder="请选择确认方"
clearable
@update:model-value="fnConfirmerChange"
>
<el-option
v-for="item in data.confirmerOptionsList"
:key="item.CUSTOMERNAME_ID"
:label="item.CUSTOMERNAME"
:value="item.CUSTOMERNAME_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系人" prop="CONFIRMINGPERSON">
<el-select
v-model="data.form.CONFIRMINGPERSON"
placeholder="请选择确认方联系人"
clearable
@change="changeCONFIRMINGPERSON"
>
<el-option
v-for="contact in data.confirmerOptions"
:key="contact.CONTACT_ID"
:label="contact.CONTACT"
:value="contact.CONTACT_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系电话" prop="CONFIRMINGPHONE">
<el-input
v-model="data.form.CONFIRMINGPHONE"
placeholder="请输入联系电话"
clearable
/>
</el-form-item>
</el-col>
</el-row>
<!-- 地点信息 -->
<el-divider content-position="left">地点信息</el-divider>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="起运地点" prop="ORIGIN">
<el-select
v-model="data.form.ORIGIN"
placeholder="请选择起运地点"
clearable
@update:model-value="fnShipmentAddrChange"
>
<el-option
v-for="item in data.StartOptionsList"
:key="item.LOCATIONNAME_ID"
:label="item.LOCATIONNAME"
:value="item.LOCATIONNAME_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="起运地址" prop="SHIPPINGADDRESS">
<el-select
v-model="data.form.SHIPPINGADDRESS"
placeholder="请选择起运地址"
clearable
@change="changeSHIPPINGADDRESS"
>
<el-option
v-for="item in data.StartOptions"
:key="item.ADDRESSDETAILS_ID"
:label="item.ADDRESSDETAILS"
:value="item.ADDRESSDETAILS_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="行政区域" prop="STARTADMINISTRATIVEAREA">
<el-input
v-model="data.form.STARTADMINISTRATIVEAREA"
placeholder="请输入行政区域"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="目的地点" prop="DESTINATION">
<el-select
v-model="data.form.DESTINATION"
placeholder="请选择目的地点"
clearable
@update:model-value="fnGogalAddrChange"
>
<el-option
v-for="item in data.EndOptionsList"
:key="item.LOCATIONNAME_ID"
:label="item.LOCATIONNAME"
:value="item.LOCATIONNAME_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="目的地址" prop="DESTINATIONADDRESS">
<el-select
v-model="data.form.DESTINATIONADDRESS"
placeholder="请选择起运地址"
clearable
@change="changeDESTINATIONADDRESS"
>
<el-option
v-for="item in data.EndOptions"
:key="item.ADDRESSDETAILS_ID"
:label="item.ADDRESSDETAILS"
:value="item.ADDRESSDETAILS_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="行政区域" prop="ENDDMINISTRATIVEAREA">
<el-input
v-model="data.form.ENDDMINISTRATIVEAREA"
placeholder="请输入行政区域"
clearable
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="tc mt-10">
<el-button type="primary" @click="fnSubmit"></el-button>
</div>
</layout-card>
</template>
<script setup>
import {
getSafetyWaybillreInfo,
editSafetyWaybillreInfo,
getUserPersonTypeListAll,
} from "@/request/waybill_registration.js";
import { onMounted, reactive, ref, watchEffect } from "vue";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { ElMessage } from "element-plus";
import LayoutDepartment from "@/components/department/index.vue";
import { getUserListAll } from "@/request/data_dictionary.js";
import { getTrafficCustomerSelectList } from "@/request/customer_management.js";
import { getTrafficLocationSelectList } from "@/request/location_management.js";
import { getOperationVehicleList } from "@/request/operation_vehicle.js";
import { useRoute, useRouter } from "vue-router";
import { getFreightTrailerList } from "@/request/enterprise_management.js";
const formRef = ref(null);
const route = useRoute();
const WAYBILLREGISTRATION_ID = route.query.WAYBILLREGISTRATION_ID;
const rules = {
CORPINFO_ID: [
{ required: true, message: "请输入运输企业名称", trigger: "blur" },
],
DISPATCHER: [
{ required: true, message: "请输入调度人姓名", trigger: "blur" },
],
SHIPPINGDATE: [
{ required: true, message: "请选择承运日期", trigger: "change" },
],
WAYBILLNUMBER: [
{ required: true, message: "请输入运单编号", trigger: "blur" },
/* { min: 7, message: "7", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (!/^[A-Za-z0-9]+$/.test(value)) {
callback(new Error("运单编号只能包含大小写英文字符和数字"));
} else {
callback();
}
},
trigger: "blur",
}, */
],
TRANSPORTVEHICLE: [
{ required: true, message: "请选择运营车辆", trigger: "change" },
],
CLIENT: [{ required: true, message: "请选择委托方名称", trigger: "change" }],
CLIENTCONTACTPERSON: [
{ required: true, message: "请输入联系人姓名", trigger: "blur" },
],
CLIENTCONTACTPHONE: [
{ required: true, message: "请输入联系电话", trigger: "blur" },
{ min: 11, message: "号码格式错误", trigger: "blur" },
],
CONFIRMINGPHONE: [
{ required: true, message: "请输入联系电话", trigger: "blur" },
{ min: 11, message: "号码格式错误", trigger: "blur" },
],
CONFIRMER: [
{ required: true, message: "请选择确认方名称", trigger: "change" },
],
CONFIRMINGPERSON: [
{ required: true, message: "请选择确认方联系人", trigger: "change" },
],
ORIGIN: [{ required: true, message: "请选择起运地点", trigger: "change" }],
SHIPPINGADDRESS: [
{ required: true, message: "请输入起运地址", trigger: "blur" },
],
DESTINATION: [
{ required: true, message: "请选择目的地点", trigger: "change" },
],
DESTINATIONADDRESS: [
{ required: true, message: "请输入目的地址", trigger: "blur" },
],
PRACTITIONER: [
{ required: true, message: "请选择从业人员", trigger: "change" },
],
};
const data = reactive({
form: {
CORPINFO_ID: "",
DISPATCHER: [],
DEPARTMENT_ID: "",
POST_ID: "",
USER_ID: "",
SHIPPINGDATE: "",
IDENTITYID: "",
TRUCKCART: "",
EMPLOYEEPHONE: "",
PRACTITIONER: "",
TRANSPORTVEHICLE: "",
CLIENT: "",
CLIENTCONTACTPERSON: "",
CLIENTCONTACTPHONE: "",
CONFIRMER: "",
CONFIRMINGPERSON: "",
CONFIRMINGPHONE: "",
ORIGIN: "",
SHIPPINGADDRESS: "",
STARTADMINISTRATIVEAREA: "",
DESTINATION: "",
DESTINATIONADDRESS: "",
ENDDMINISTRATIVEAREA: "",
WAYBILLNUMBER: "",
},
clientOptions: [], //
confirmerOptions: [], //
StartOptions: [], //
EndOptions: [], //
OperationVehicle: [], //
StartOptionsList: [],
EndOptionsList: [],
clientOptionsList: [],
confirmerOptionsList: [],
USER: [],
});
const router = useRouter();
const fnGetData = async () => {
if (!WAYBILLREGISTRATION_ID) return;
const resData = await getSafetyWaybillreInfo({ WAYBILLREGISTRATION_ID });
data.form = resData.pd;
data.form.DISPATCHER = data.form.DISPATCHER.split(",");
data.form.CLIENTCONTACTPERSON = data.form.ENTRUST_PERSON; //
data.form.CONFIRMINGPERSON = data.form.CONFIRM_PERSON; //
data.form.SHIPPINGADDRESS = data.form.SHIPPING_ADDR; //
data.form.DESTINATIONADDRESS = data.form.DESTINATION_ADDR; //
data.userList = data.form.names; //
};
fnGetData();
const fnClientChange = () => {
data.form.CLIENTCONTACTPERSON = "";
data.form.CLIENTCONTACTPHONE = "";
data.clientOptions = [];
};
const fnConfirmerChange = () => {
data.form.CONFIRMINGPERSON = "";
data.form.CONFIRMINGPHONE = "";
data.confirmerOptions = [];
}
const fnShipmentAddrChange = () => {
data.form.SHIPPINGADDRESS = "";
data.form.STARTADMINISTRATIVEAREA = "";
data.StartOptions = [];
}
const fnGogalAddrChange = () => {
data.form.DESTINATIONADDRESS = "";
data.form.ENDDMINISTRATIVEAREA = "";
data.EndOptions = [];
}
const fnClientUserChange = async () => {
const selectedClient = data.clientOptionsList.find(
(item) => item.CUSTOMERNAME_ID === data.form.CLIENT
);
data.clientOptions = selectedClient ? selectedClient.CONTACTS : [];
};
const fnClientConfirmedChange = async () => {
const selectedClient = data.confirmerOptionsList.find(
(item) => item.CUSTOMERNAME_ID === data.form.CONFIRMER
);
data.confirmerOptions = selectedClient ? selectedClient.CONTACTS : [];
};
const fnClientShipmentAddr = async () => {
const selectedLocation = data.StartOptionsList.find(
(location) => location.LOCATIONNAME_ID === data.form.ORIGIN
);
//
data.StartOptions = selectedLocation ? selectedLocation.LOCATION : [];
};
const fnGoalAddrChange = async () => {
const selectedDestination = data.EndOptionsList.find(
(location) => location.LOCATIONNAME_ID === data.form.DESTINATION
);
//
data.EndOptions = selectedDestination ? selectedDestination.LOCATION : [];
};
const changeCLIENTCONTACTPERSON = (contactPersonId) => {
const selectedContact = data.clientOptions.find(
(item) => item.CONTACT_ID === contactPersonId
);
data.form.CLIENTCONTACTPHONE = selectedContact
? selectedContact.CONTACTPHONE
: "";
};
const changeCONFIRMINGPERSON = (contactPersonId) => {
//
const selectedContact = data.confirmerOptions.find(
(item) => item.CONTACT_ID === contactPersonId
);
//
data.form.CONFIRMINGPHONE = selectedContact
? selectedContact.CONTACTPHONE
: "";
};
const fnGetUnitsList = async () => {
const resData = await getUserPersonTypeListAll({});
data.userTypeList = resData.userList;
};
fnGetUnitsList();
const fnVehicle = async () => {
const res = await getOperationVehicleList();
const varList = res.varList || [];
data.OperationVehicle = varList.map((item) => item.PLATE_NUMBER);
};
const fnTruck = async () => {
const res = await getFreightTrailerList();
const varList = res.varList || [];
data.OperationTruck = varList.map((item) => item.PLATE_NUMBER);
};
const fnCustomerType = async () => {
const res = await getTrafficCustomerSelectList();
const varList = res.varList;
const clientMap = new Map();
varList.forEach((item) => {
if (item.CUSTOMERTYPE === "1") {
if (!clientMap.has(item.CUSTOMERNAME)) {
clientMap.set(item.CUSTOMERNAME, {
CUSTOMERNAME: item.CUSTOMERNAME,
CUSTOMERNAME_ID: item.CUSTOMERNAME_ID,
CONTACTS: [],
});
}
// CUSTOMERNAME
clientMap.get(item.CUSTOMERNAME).CONTACTS.push({
CONTACT: item.CONTACT,
CONTACT_ID: item.CONTACT_ID,
CONTACTPHONE: item.CONTACTPHONE,
});
}
});
data.clientOptionsList = [...clientMap.values()];
const confirmerMap = new Map();
varList.forEach((item) => {
if (item.CUSTOMERTYPE === "2") {
if (!confirmerMap.has(item.CUSTOMERNAME)) {
confirmerMap.set(item.CUSTOMERNAME, {
CUSTOMERNAME: item.CUSTOMERNAME,
CUSTOMERNAME_ID: item.CUSTOMERNAME_ID,
CONTACTS: [],
});
}
// CUSTOMERNAME
confirmerMap.get(item.CUSTOMERNAME).CONTACTS.push({
CONTACT: item.CONTACT,
CONTACT_ID: item.CONTACT_ID,
CONTACTPHONE: item.CONTACTPHONE,
});
}
});
data.confirmerOptionsList = [...confirmerMap.values()];
};
fnCustomerType();
const fnLocation = async () => {
const res = await getTrafficLocationSelectList();
const varList = res.varList || [];
const StartOptionstMap = new Map();
varList.forEach((item) => {
if (item.LOCATIONTYPE === "1") {
if (!StartOptionstMap.has(item.LOCATIONNAME)) {
StartOptionstMap.set(item.LOCATIONNAME, {
LOCATIONNAME: item.LOCATIONNAME,
LOCATIONNAME_ID: item.LOCATIONNAME_ID,
LOCATION: [],
});
}
// CUSTOMERNAME
StartOptionstMap.get(item.LOCATIONNAME).LOCATION.push({
ADDRESSDETAILS: item.ADDRESSDETAILS,
ADDRESSDETAILS_ID: item.ADDRESSDETAILS_ID,
ADMINISTRATIVEREGIONS: item.ADMINISTRATIVEREGIONS,
});
}
});
data.StartOptionsList = [...StartOptionstMap.values()];
const EndOptionsMap = new Map();
varList.forEach((item) => {
if (item.LOCATIONTYPE === "2") {
if (!EndOptionsMap.has(item.LOCATIONNAME)) {
EndOptionsMap.set(item.LOCATIONNAME, {
LOCATIONNAME: item.LOCATIONNAME,
LOCATIONNAME_ID: item.LOCATIONNAME_ID,
LOCATION: [],
});
}
// CUSTOMERNAME
EndOptionsMap.get(item.LOCATIONNAME).LOCATION.push({
ADDRESSDETAILS: item.ADDRESSDETAILS,
ADDRESSDETAILS_ID: item.ADDRESSDETAILS_ID,
ADMINISTRATIVEREGIONS: item.ADMINISTRATIVEREGIONS,
});
}
});
data.EndOptionsList = [...EndOptionsMap.values()];
};
const changeSHIPPINGADDRESS = (addressDetailsId) => {
//
const matchingAddress = data.StartOptionsList.flatMap(
(item) => item.LOCATION
).find((address) => address.ADDRESSDETAILS_ID === addressDetailsId);
//
data.form.STARTADMINISTRATIVEAREA = matchingAddress
? matchingAddress.ADMINISTRATIVEREGIONS
: "";
};
const changeDESTINATIONADDRESS = (destinationAddressId) => {
//
const matchingAddress = data.EndOptionsList.flatMap(
(item) => item.LOCATION
).find((address) => address.ADDRESSDETAILS_ID === destinationAddressId);
//
data.form.ENDDMINISTRATIVEAREA = matchingAddress
? matchingAddress.ADMINISTRATIVEREGIONS
: "";
};
const fnDepartmentChange = async () => {
data.userList = [];
data.form.USER_ID = "";
data.form.DISPATCHER = "";
await fnGetUser(data.form.DEPARTMENT_ID);
};
const fnGetUser = async (DEPARTMENT_ID) => {
const resData = await getUserListAll({ DEPARTMENT_ID });
data.userList = resData.userList;
};
watchEffect(() => {
if (data.form.CLIENT) fnClientUserChange();
if (data.form.CONFIRMER) fnClientConfirmedChange();
if (data.form.ORIGIN) fnClientShipmentAddr();
if (data.form.DESTINATION) fnGoalAddrChange();
});
onMounted(async () => {
await fnCustomerType();
await fnLocation();
await fnVehicle();
await fnTruck();
});
const fnSubmit = async () => {
await useFormValidate(formRef);
const formData = new FormData();
Object.keys(data.form).forEach((key) => {
formData.append(key, data.form[key]);
});
await editSafetyWaybillreInfo(formData);
ElMessage.success("修改成功");
await router.push("/electronic_waybill_management/waybill_registration");
Object.keys(data.form).forEach((key) => {
if (Array.isArray(data.form[key])) {
data.form[key] = [];
} else {
data.form[key] = "";
}
});
};
</script>
<style scoped lang="scss">
.flexBox {
display: flex;
align-items: flex-end;
.addBtn {
margin-left: 12px;
}
}
</style>

View File

@ -67,6 +67,19 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" width="120"> <el-table-column label="操作" width="120">
<template #default="{ row }"> <template #default="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/electronic_waybill_management/waybill_registration/edit',
query: { WAYBILLREGISTRATION_ID: row.WAYBILLREGISTRATION_ID },
})
"
>
修改
</el-button>
<el-button <el-button
type="danger" type="danger"
text text

View File

@ -209,7 +209,7 @@ const fnSubmit = async () => {
type: "success", type: "success",
duration: 3000, duration: 3000,
}); });
router.push("/safety_production_related/security_notice"); router.back();
}; };
const fnSelectPersonSubmit = (selectionData) => { const fnSelectPersonSubmit = (selectionData) => {