26 Commits

Author SHA1 Message Date
284872fa73 车辆审批需求,责任险可查看 2025-12-23 17:54:30 +08:00
703062825c 车辆审批需求,责任险可查看,保存时添加车辆状态字段 2025-12-23 17:54:26 +08:00
a7e217100e 车辆审批需求,车辆新增一个车辆状态为‘ 否-服务商停用’ 2025-12-23 17:54:21 +08:00
8677a0c99a 车辆审批需求,去除比较提交审批接口,使用原本保存接口,新增canSubmitApproval字段,默认true 2025-12-23 17:54:18 +08:00
7739f61d36 车辆审批提交,去除备注填写,直接走接口 2025-12-19 18:06:17 +08:00
66f28ad8ce 车辆审批提交,去除备注填写,直接走接口 2025-12-19 18:06:14 +08:00
e6a669e41d kpi修改 2025-12-17 22:03:32 +08:00
a84e5a3531 调度h5续保更新条件修改 2025-12-17 22:03:25 +08:00
b6fd5b5db6 报备样式修改 2025-12-17 22:03:20 +08:00
4e37efeca4 去除VConsole 2025-12-17 22:00:02 +08:00
8979dcaf98 车辆提交审批 2025-12-17 22:00:00 +08:00
f6e225ed4b CRM_25-12-09#story#7474,服务商师傅和车辆修改的审批 2025-12-17 21:57:26 +08:00
821a35b382 去除VConsole 2025-12-17 21:57:18 +08:00
2b0c6d6a36 车辆提交审批 2025-12-17 21:57:10 +08:00
073312a56b CRM_25-12-16#story#7744,调度APP报备调整 2025-12-17 21:56:34 +08:00
d493ebca97 CRM_25-12-09#story#7474,服务商师傅和车辆修改的审批--曹智龙 2025-12-17 21:56:30 +08:00
ed5a0d9478 CRM_25-12-09#story#7474,服务商师傅和车辆修改的审批--曹智龙 2025-12-17 21:56:25 +08:00
0a281ea877 Revert "CRM_25-12-09#story#7474,服务商师傅和车辆修改的审批--曹智龙"
This reverts commit 5a56d4fe1c.
2025-12-09 21:38:23 +08:00
b42db4e98f Revert "CRM_25-12-09#story#7474,服务商师傅和车辆修改的审批--曹智龙"
This reverts commit 5bc7c6b1e3.
2025-12-09 21:38:22 +08:00
b9830e80eb 潜在服务商修改 2025-12-08 13:45:22 +08:00
5bc7c6b1e3 CRM_25-12-09#story#7474,服务商师傅和车辆修改的审批--曹智龙 2025-12-08 10:11:26 +08:00
5a56d4fe1c CRM_25-12-09#story#7474,服务商师傅和车辆修改的审批--曹智龙 2025-12-08 09:57:01 +08:00
f7f9bb7fd0 换UI修改 2025-12-05 11:17:45 +08:00
05ac89814c 遗漏 2025-12-04 13:57:27 +08:00
d178be1acd CRM_25-12-09#story#7686,调度APP中救援责任险参保咨询问题优化 2025-12-04 11:38:34 +08:00
f0576476e9 CRM_25-12-09#story#7697,调度APP的车辆录入功能的漏洞 2025-12-04 11:38:34 +08:00
8 changed files with 405 additions and 28 deletions

View File

@@ -18,6 +18,15 @@ export function saveVehicle(data){
data data
}) })
} }
//提交审批车辆信息
export function saveSupplierApproval(data){
return request({
url:'/supplier/approval/saveSupplierDriverVehicleApproval',
method:'POST',
contentType:'application/json',
data
})
}
/*车辆更改状态 /supplierAppV2/dispatchApp/user/enableVehicle*/ /*车辆更改状态 /supplierAppV2/dispatchApp/user/enableVehicle*/
export function enableVehicle(data){ export function enableVehicle(data){
return request({ return request({

View File

@@ -286,10 +286,14 @@
message: "操作成功" message: "操作成功"
}).then(async () => { }).then(async () => {
this.goPage('supplierAddResult', { id : res?.data }) this.goPage('supplierAddResult', { id : res?.data })
this.clickFlag = true setTimeout(() => {
this.clickFlag = true
}, 1000)
}); });
} finally { } finally {
this.clickFlag = true setTimeout(() => {
this.clickFlag = true
}, 1000)
} }
} }
}, },

View File

@@ -11,7 +11,7 @@
@click-left="h5GoBack" @click-left="h5GoBack"
/> />
</div> </div>
<div class="addContentWrap"> <div class="addContentWrap">
<div class="itemContent"> <div class="itemContent">
<div class="titleType"> <div class="titleType">
<img class="startImg" src="@/assets/start.png" /> <img class="startImg" src="@/assets/start.png" />
@@ -20,6 +20,7 @@
<van-uploader <van-uploader
v-model="vehicleLicenseFrontList" v-model="vehicleLicenseFrontList"
:after-read="vehicleLicenseFrontHandler" :after-read="vehicleLicenseFrontHandler"
@oversize="onOversize"
:max-size="5 * 1024 * 1024" :max-size="5 * 1024 * 1024"
max-count="1" max-count="1"
:preview-size="54" :preview-size="54"
@@ -34,6 +35,7 @@
<van-uploader <van-uploader
v-model="vehicleLicenseBackList" v-model="vehicleLicenseBackList"
:after-read="vehicleLicenseBackHandler" :after-read="vehicleLicenseBackHandler"
@oversize="onOversize"
:max-size="5 * 1024 * 1024" :max-size="5 * 1024 * 1024"
max-count="1" max-count="1"
:preview-size="54" :preview-size="54"
@@ -48,6 +50,7 @@
<van-uploader <van-uploader
v-model="vehicleLicenseCarPhotoList" v-model="vehicleLicenseCarPhotoList"
:after-read="vehicleLicenseCarHandler" :after-read="vehicleLicenseCarHandler"
@oversize="onOversize"
:max-size="5 * 1024 * 1024" :max-size="5 * 1024 * 1024"
max-count="1" max-count="1"
:preview-size="54" :preview-size="54"
@@ -62,6 +65,8 @@
<van-uploader <van-uploader
v-model="vehicleFrontPhotoList" v-model="vehicleFrontPhotoList"
:after-read="vehicleFrontPhotoHandler" :after-read="vehicleFrontPhotoHandler"
@oversize="onOversize"
:max-size="5 * 1024 * 1024"
max-count="1" max-count="1"
:preview-size="54" :preview-size="54"
accept="image " accept="image "
@@ -193,22 +198,30 @@
</div> </div>
<div class="isJoin"> <div class="isJoin">
<van-radio-group v-model="vehicleStatus" :class="{ 'disabled-tree': vehicleInfoDisabled }" :disabled="vehicleInfoDisabled" @change="isVehicleChange" class="joinWrap"> <van-radio-group v-model="vehicleStatus" :class="{ 'disabled-tree': vehicleInfoDisabled }" :disabled="vehicleInfoDisabled" @change="isVehicleChange" class="joinWrap">
<van-radio :name="1" style="margin-right: 26px"> <van-radio :name="1" style="margin-right: 14px">
启用 1
<img <img
slot="icon" slot="icon"
slot-scope="props" slot-scope="props"
:src="props.checked ? activeIcon : inactiveIcon" :src="props.checked ? activeIcon : inactiveIcon"
> >
</van-radio> </van-radio>
<van-radio :name="2"> <van-radio :name="2" style="margin-right: 14px">
停用 1
<img <img
slot="icon" slot="icon"
slot-scope="props" slot-scope="props"
:src="props.checked ? activeIcon : inactiveIcon" :src="props.checked ? activeIcon : inactiveIcon"
> >
</van-radio> </van-radio>
<van-radio :name="12" disabled>
-服务商停用
<img
slot="icon"
slot-scope="props"
:src="props.checked ? activeIcon : inactiveIcon"
>
</van-radio>
</van-radio-group> </van-radio-group>
</div> </div>
</div> </div>
@@ -238,7 +251,7 @@
</van-radio-group> </van-radio-group>
</div> </div>
</div> </div>
<div class="item_content_btn"> <div class="item_content_btn" v-if="[2,3].includes(this.liabilityInsuranceAudit)">
<span @click="goContinueInsurance">续保更新</span> <span @click="goContinueInsurance">续保更新</span>
</div> </div>
<span style="color: red">如有投保未投保选不必上传交强险或者商业险等其他保单</span> <span style="color: red">如有投保未投保选不必上传交强险或者商业险等其他保单</span>
@@ -256,6 +269,7 @@
:deletable="!disabledShow" :deletable="!disabledShow"
max-count="1" max-count="1"
:preview-size="54" :preview-size="54"
@click-preview="clickPreview"
/> />
</div> </div>
<div class="lineBot"></div> <div class="lineBot"></div>
@@ -333,7 +347,30 @@
<two-common-btn class="btn" @cancelClick="h5GoBack" @submitClick="submitBtn" /> <two-common-btn class="btn" @cancelClick="h5GoBack" @submitClick="submitBtn" />
<van-calendar v-model="showDatePicker" :min-date="minDate" <van-calendar v-model="showDatePicker" :min-date="minDate"
:max-date="maxDate" type="range" @confirm="onConfirm" /> :max-date="maxDate" type="range" @confirm="onConfirm" />
</div> </div>
<van-popup ref="success" v-model="approvalDialogShow">
<div class="pop_wrap">
<div class="pop_title">车辆提交审批</div>
<div class="pop_content">
<div class="iptWrap" v-if="vehicleInfoChange">
<div>车辆和服务备注</div>
<el-input placeholder="请输入车辆和服务备注" type="textarea" show-word-limit maxlength="200"
v-model="approvalForm.serviceRemark"></el-input>
</div>
<div class="iptWrap" v-if="insuranceChange">
<div>保单备注</div>
<el-input placeholder="请输入保单备注" type="textarea" show-word-limit maxlength="200"
v-model="approvalForm.insuranceRemark"></el-input>
</div>
</div>
<div class="tip_button_wrap">
<div class="continue close" @click="closeApproval">取消</div>
<div class="continue" :class="{'loading': loading}" @click="submitApprovalHandle">提交审批</div>
</div>
</div>
</van-popup>
</div> </div>
</template> </template>
@@ -342,7 +379,8 @@
import {Dialog} from "vant"; import {Dialog} from "vant";
import {formatDate1} from "@/utils/common" import {formatDate1} from "@/utils/common"
import {myMixins} from "@/utils/myMixins" import {myMixins} from "@/utils/myMixins"
import {vehicleTypeList,saveVehicle,getInfoById,supplierServiceTree, uploadImage, ocrHandler, userOperationPermissions} from "@/api/mine" import {vehicleTypeList,saveVehicle,getInfoById,supplierServiceTree, uploadImage, ocrHandler,
userOperationPermissions,saveSupplierApproval} from "@/api/mine"
import TwoCommonBtn from "@/components/twoBtnCommon.vue" import TwoCommonBtn from "@/components/twoBtnCommon.vue"
import CellGroup from "@/components/cellGroup.vue"; import CellGroup from "@/components/cellGroup.vue";
export default { export default {
@@ -373,6 +411,7 @@ export default {
typeList:[],//车辆类型列表 typeList:[],//车辆类型列表
selectedOption:[],//车辆类型 selectedOption:[],//车辆类型
id:'',//车辆Id id:'',//车辆Id
supplierId:'',//服务商Id
serviceIds:[],//车辆服务种类, serviceIds:[],//车辆服务种类,
supplierServiceList:[], supplierServiceList:[],
oldSupplierServiceList:[], oldSupplierServiceList:[],
@@ -500,7 +539,25 @@ export default {
}, { }, {
name: '其他', name: '其他',
value: 14 value: 14
}] }],
approvalForm:{
type:2,
supplierId:'',
vehicleId:'',
serviceChange:null,
serviceRemark:'',
insuranceChange:null,
insuranceRemark:'',
vehicleOtherChange:null,
vehicleOtherRemark:'',
},
originData:{},//记录更改之前的数据
changedFields: [], // 用于存储变更过的字段
approvalDialogShow:false,
vehicleInfoChange:false,
insuranceChange:false,
loading: false,
} }
}, },
computed: { computed: {
@@ -548,13 +605,25 @@ export default {
this.setDefault(); this.setDefault();
}, },
}, },
async mounted() { async mounted() {
this.id=this.$route.params?.id this.id=this.$route.params?.id
this.approvalForm.supplierId=this.$route.params?.supplierId
await this.getSupplierServiceTree(); await this.getSupplierServiceTree();
await this.getTypeList(); await this.getTypeList();
if( this.id){ if( this.id){
await this.vehicleInfo() await this.vehicleInfo()
}else{
this.originData={
vehicleType:'',
vehicleStatus:'',
virtualVehicle:'',
serviceIds:[],
hasLiabilityInsurance:'',
insuranceCorp:'',
liabilityInsuranceStartTime:'',
liabilityInsuranceEndTime:'',
insurancePicturePhoto:''
}
} }
}, },
methods:{ methods:{
@@ -587,6 +656,10 @@ export default {
const [start, end] = date; const [start, end] = date;
this.showDatePicker = false; this.showDatePicker = false;
this.dateVal = `${this.formatDate(start)} - ${this.formatDate(end)}`; this.dateVal = `${this.formatDate(start)} - ${this.formatDate(end)}`;
console.log('this.dateVal',this.dateVal)
let timeObj = this.formatDateTimeRange(this.dateVal)
console.log('timeObj',timeObj)
}, },
formatDateTimeRange(str) { formatDateTimeRange(str) {
const [startStr, endStr] = str.split(' - ').map(s => s.trim()); const [startStr, endStr] = str.split(' - ').map(s => s.trim());
@@ -637,6 +710,9 @@ export default {
this.vehicleLicense = 5 this.vehicleLicense = 5
} }
}, },
onOversize() {
this.$toast(`文件大小不能超过5M`)
},
async vehicleLicenseFrontHandler(file) { // 上传 行驶证首页 async vehicleLicenseFrontHandler(file) { // 上传 行驶证首页
const formData = new FormData(); const formData = new FormData();
formData.append("file" , file.file); formData.append("file" , file.file);
@@ -665,6 +741,12 @@ export default {
this.vehicleFrontPhoto = res.data; this.vehicleFrontPhoto = res.data;
await this.ocrCarFrontHandler() await this.ocrCarFrontHandler()
}, },
clickPreview(){
console.log(' this.insurancePicturePhoto', this.insurancePicturePhoto)
if(this.insurancePicturePhoto && this.insurancePicturePhoto.indexOf('.pdf') !== -1){
window.open(this.insurancePicturePhoto.replace("http://", "https://"))
}
},
async insurancePictureFilesHandler(file) { async insurancePictureFilesHandler(file) {
const formData = new FormData(); const formData = new FormData();
formData.append("file" , file.file); formData.append("file" , file.file);
@@ -736,6 +818,8 @@ export default {
this.vehicleLicenseInfo.overallDimension = ''; this.vehicleLicenseInfo.overallDimension = '';
this.vehicleLicenseInfo.tractionWeight = ''; this.vehicleLicenseInfo.tractionWeight = '';
this.vehicleLicenseInfo.backPlateNo = ''; // 行驶证副页 车牌号,仅用来判断 ocr 识别是否成功 this.vehicleLicenseInfo.backPlateNo = ''; // 行驶证副页 车牌号,仅用来判断 ocr 识别是否成功
this.vehicleLicenseInfo.energySign = '';
this.vehicleLicenseInfo.marks = ''
let res = await ocrHandler({ let res = await ocrHandler({
ocrType: 3, ocrType: 3,
imageUrl: this.vehicleLicenseBack, imageUrl: this.vehicleLicenseBack,
@@ -751,6 +835,8 @@ export default {
this.vehicleLicenseInfo.overallDimension = backInfo?.externalSize; this.vehicleLicenseInfo.overallDimension = backInfo?.externalSize;
this.vehicleLicenseInfo.tractionWeight = backInfo?.TotalQuasiMass; this.vehicleLicenseInfo.tractionWeight = backInfo?.TotalQuasiMass;
this.vehicleLicenseInfo.backPlateNo = backInfo?.plateNo; this.vehicleLicenseInfo.backPlateNo = backInfo?.plateNo;
this.vehicleLicenseInfo.energySign = backInfo?.fuelType;
this.vehicleLicenseInfo.marks = backInfo?.marks
} }
console.log('this.vehicle', this.vehicleLicenseInfo) console.log('this.vehicle', this.vehicleLicenseInfo)
}, },
@@ -793,6 +879,7 @@ export default {
let result=res.data; let result=res.data;
console.log("result",result) console.log("result",result)
this.id=result.vehicleId this.id=result.vehicleId
this.approvalForm.vehicleId=this.id
this.carNum=result.plateNumber this.carNum=result.plateNumber
this.isJoin=result.hasPolymerization.code this.isJoin=result.hasPolymerization.code
this.selectedOption=result.vehicleType?.split(',').map((item)=>{ this.selectedOption=result.vehicleType?.split(',').map((item)=>{
@@ -834,6 +921,17 @@ export default {
if( result.liabilityInsuranceEndTime && result.liabilityInsuranceStartTime ) { if( result.liabilityInsuranceEndTime && result.liabilityInsuranceStartTime ) {
this.dateVal = formatDate1(result.liabilityInsuranceStartTime) + ' - ' + formatDate1(result.liabilityInsuranceEndTime) this.dateVal = formatDate1(result.liabilityInsuranceStartTime) + ' - ' + formatDate1(result.liabilityInsuranceEndTime)
} }
this.originData={
vehicleType:result.vehicleType,
vehicleStatus:result.vehicleStatus,
virtualVehicle:result.virtualVehicle,
serviceIds:result.serviceIds,
hasLiabilityInsurance:result.hasLiabilityInsurance,
insuranceCorp:result.insuranceCorp,
liabilityInsuranceStartTime:result.liabilityInsuranceStartTime,
liabilityInsuranceEndTime:result.liabilityInsuranceEndTime,
insurancePicturePhoto:result.insurancePicturePhoto
}
}, },
isChange(e){ isChange(e){
this.hasLiabilityInsurance=e this.hasLiabilityInsurance=e
@@ -851,11 +949,192 @@ export default {
isVehicleChange(e) { isVehicleChange(e) {
this.vehicleStatus=e this.vehicleStatus=e
}, },
async submitBtn(){ async submitAuditHandle(){//提交审核
if( !this.vehicleLicenseFront ) { let urls=[]
this.$toast('行驶证主页照片不能为空') this.insurancePictureFiles?.forEach(item => urls.push(item.url))
let time =this.dateVal ? this.formatDateTimeRange(this.dateVal) : ''
// let time1=time.endTime?.split(' ')
let newFormValue={
vehicleStatus:this.vehicleStatus,
virtualVehicle:this.virtualVehicle,
serviceIds:this.$refs.tree.getCheckedKeys(true) || [],
vehicleType:this.selectedOption?.join(',') || '',
hasLiabilityInsurance:this.hasLiabilityInsurance,
insuranceCorp:this.insuranceCorp,
insurancePicturePhoto:urls?.join(','),
// liabilityInsuranceStartTime:time.startTime ? time.startTime : '',
liabilityInsuranceEndTime:time.endTime ? time.endTime : '',
}
console.log('newFormValue',newFormValue)
let oldFormValue={...this.originData,}
console.log('oldFormValue',oldFormValue)
this.compareObjects(newFormValue,oldFormValue);
if( this.changedFields && this.changedFields.length>0){
const arr1Set = new Set(this.changedFields);
const change1=['vehicleStatus','virtualVehicle','vehicleType','serviceIds']
const change2=['hasLiabilityInsurance','insurancePicturePhoto','insuranceCorp','liabilityInsuranceStartTime','liabilityInsuranceEndTime']
const serviceChangeItems = change1.filter(item => arr1Set.has(item));
console.log('serviceChangeItems',serviceChangeItems)
if(serviceChangeItems?.length>0){
this.vehicleInfoChange=true
this.approvalForm.serviceChange={}
change1.forEach(key => {
this.approvalForm.serviceChange[key] = this[key];
if(key=='serviceIds'){
this.approvalForm.serviceChange[key]=this.$refs.tree.getCheckedKeys(true)
}
if(key=='vehicleType'){
this.approvalForm.serviceChange[key]=this.selectedOption?.join(',') || ''
}
});
}else {
this.vehicleInfoChange=false
this.approvalForm.serviceChange=null
}
const insuranceChangeItems = change2.filter(item => arr1Set.has(item));
console.log('insuranceChangeItems',insuranceChangeItems)
if(insuranceChangeItems?.length>0){
this.insuranceChange=true
this.approvalForm.insuranceChange={}
change2.forEach(key => {
this.approvalForm.insuranceChange[key] =this[key];
let time =this.dateVal ? this.formatDateTimeRange(this.dateVal) : ''
if(key=='liabilityInsuranceStartTime' && time && time.startTime){
this.approvalForm.insuranceChange[key]=time.startTime
}
if(key=='liabilityInsuranceEndTime' && time && time.endTime){
// let time1=time.endTime?.split(' ')
this.approvalForm.insuranceChange[key]= time.endTime
}
if(key=='insurancePicturePhoto' && this.insurancePictureFiles?.length>0){
let urls=[]
this.insurancePictureFiles?.forEach(item => urls.push(item.url))
this.approvalForm.insuranceChange[key]=urls?.join(',')
}
});
}else {
this.insuranceChange=false
this.approvalForm.insuranceChange=null
}
}
if((this.vehicleInfoChange || this.insuranceChange) && this.id){
// this.approvalDialogShow=true
this.submitApprovalHandle()
console.log('11111',this.approvalForm.serviceChange)
console.log('2222',this.approvalForm.insuranceChange)
}else {
this.approvalDialogShow=false
await this.submitBtn();
}
},
async submitApprovalHandle(){//提交审批-走接口
if(this.vehicleInfoChange){
if(!(this.selectedOption.length > 0)){
this.$toast('车辆类别不能为空')
return return
} }
let res = this.checkDisabledItems();
if(!res) {
return false
}
if( !this.virtualVehicle ) {
this.$toast('车辆属性不能为空')
return
}
if( !this.vehicleStatus ) {
this.$toast('车辆状态不能为空')
return
}
/* if(!this.approvalForm.serviceRemark){
this.$toast('车辆和服务备注不能为空')
return
}*/
}
if(this.insuranceChange){
if(this.hasLiabilityInsurance === null || this.hasLiabilityInsurance === undefined || this.hasLiabilityInsurance === '') { // 有职业责任险,就需要有保单照片
this.$toast('救援职业责任险不能为空')
return
}
if(!this.insurancePicturePhoto && this.hasLiabilityInsurance == 1) { // 有职业责任险,就需要有保单照片
this.$toast('保单照片不能为空')
return
}
if(this.selectedOption?.length==1 && this.selectedOption.includes(1)){//选择小修车时需清除原本的拖车服务类型
let data=this.oldSupplierServiceList.filter(item => item.name ==='拖车服务')
this.serviceIds = this.serviceIds.filter(item => !data[0].children.some(obj => obj.id === item));
}
if(!this.insuranceCorp && this.hasLiabilityInsurance == 1) { // 有职业责任险,就需要有保单照片
this.$toast('承保保司不能为空')
return
}
if(!this.dateVal && this.hasLiabilityInsurance == 1) { // 有职业责任险,就需要有保单照片
this.$toast('保单有效期不能为空')
return
}
/* if(!this.approvalForm.insuranceRemark){
this.$toast('保单备注不能为空')
return
}*/
}
try {
this.loading = true;
await saveSupplierApproval({...this.approvalForm})
} finally {
this.loading = false;
}
this.$toast('提交审批成功')
this.closeApproval()
setTimeout(()=>{
this.$router.back();
},2000)
},
compareObjects(newObj, oldObj) {
this.changedFields=[]
for (let key in newObj) {
if( Array.isArray(newObj[key])){
if(newObj[key]?.length != oldObj[key]?.length){
this.changedFields.push(key);
}else {
// console.log('newObj[key]',newObj[key])
if(newObj[key][0]?.id){
let flag=newObj[key].every((item, index) => item.id == oldObj[key][index]?.id);
// console.log('flag',flag)
if(!flag){
this.changedFields.push(key);
}
}else{
let flag=newObj[key].every((value, index) => value == oldObj[key][index]);
if(!flag){
this.changedFields.push(key);
}
}
}
}else{
let isEqual = (
(newObj[key] == null && oldObj[key] == 0) ||
(newObj[key] == 0 && oldObj[key] == null) ||
(newObj[key] == oldObj[key])
);
if (!isEqual) {
this.changedFields.push(key);
}
}
}
},
closeApproval(){
this.approvalForm.serviceRemark=''
this.approvalForm.insuranceRemark=''
this.approvalForm.vehicleOtherRemark=''
this.approvalDialogShow=false
this.vehicleInfoChange=false
this.insuranceChange=false
},
async submitBtn(){
if( !this.vehicleLicenseFront ) {
this.$toast('行驶证主页照片不能为空')
return
}
if( !this.vehicleLicenseBack ) { if( !this.vehicleLicenseBack ) {
this.$toast('行驶证副页照片不能为空') this.$toast('行驶证副页照片不能为空')
return return
@@ -917,6 +1196,8 @@ export default {
timeObj = this.formatDateTimeRange(this.dateVal) timeObj = this.formatDateTimeRange(this.dateVal)
} }
this.serviceIds = this.$refs.tree.getCheckedKeys(true) this.serviceIds = this.$refs.tree.getCheckedKeys(true)
console.log('1122',this.vehicleStatus)
// return
await saveVehicle({ await saveVehicle({
vehicleId:this.id ? this.id : '', vehicleId:this.id ? this.id : '',
plateNumber:this.carNum ? this.carNum :'', plateNumber:this.carNum ? this.carNum :'',
@@ -936,6 +1217,8 @@ export default {
liabilityInsuranceStartTime: this.hasLiabilityInsurance == 1 ? (timeObj?.startTime || '' ) : '', liabilityInsuranceStartTime: this.hasLiabilityInsurance == 1 ? (timeObj?.startTime || '' ) : '',
liabilityInsuranceEndTime: this.hasLiabilityInsurance == 1 ? (timeObj?.endTime || '') : '', liabilityInsuranceEndTime: this.hasLiabilityInsurance == 1 ? (timeObj?.endTime || '') : '',
virtualVehicle: this.virtualVehicle, virtualVehicle: this.virtualVehicle,
canSubmitApproval:true,
vehicleStatus:this.vehicleStatus
}) })
if(this.id){ if(this.id){
this.$toast('修改成功') this.$toast('修改成功')
@@ -1076,4 +1359,69 @@ export default {
pointer-events: none; pointer-events: none;
opacity: 0.6; opacity: 0.6;
} }
.pop_wrap {
width: 340px;
box-sizing: border-box;
padding: 10px 15px;
position: relative;
.pop_title {
font-size: 14px;
font-weight: 500;
}
.pop_content {
width: 304px;
font-size: 14px;
color: #4C5361;
margin-left: 6px;
line-height: 25px;
.iptWrap{
margin: 10px 0;
}
}
.tip_button_wrap {
display: flex;
justify-content: flex-end;
.close {
border: 1px solid #ccc;
color: black;
background-color: #FFFFFF;
}
.continue {
padding: 6px 10px;
border-radius: 4px;
}
div:last-child{
background-color: #3266be;
color: #FFFFFF;
margin-left: 8px;
margin-right: 4px;
}
}
}
.loading {
position: relative;
}
.loading::after{
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 20px;
height: 20px;
border: 2px solid #000;
border-top-color: transparent;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
0% {
transform: translate(-50%, -50%) rotate(0deg);
}
100% {
transform: translate(-50%, -50%) rotate(360deg);
}
}
</style> </style>

View File

@@ -79,7 +79,7 @@
<div class="carItem" v-for="(item,index) in vehicleList" :key="index" @click.stop="updateVehicle(item)"> <div class="carItem" v-for="(item,index) in vehicleList" :key="index" @click.stop="updateVehicle(item)">
<div class="carCode"> <div class="carCode">
<div class="codeLeft">{{item.plateNumber}} / {{item.vehicleTypeString}} <div class="codeLeft">{{item.plateNumber}} / {{item.vehicleTypeString}}
<span class="ml10" @click.stop="updateStatus(item)" :class="{'insuranceSuccess': item.vehicleStatus == 1, 'insuranceDanger': item.vehicleStatus == 2 ,'insuranceGray': !item.vehicleStatus }">{{ item.vehicleStatus == 1 ? '启用' :( item.vehicleStatus == 2 ? '停用' : '无状态') }} </span> <span class="ml10" @click.stop="updateStatus(item)" :class="{'insuranceSuccess': item.vehicleStatus == 1, 'insuranceDanger': item.vehicleStatus == 2 ,'insuranceGray': !item.vehicleStatus }">{{ item.vehicleStatus == 1 ? '启用' :( item.vehicleStatus == 2 ? '停用' : ( item.vehicleStatus == 12 ? '否-服务商停用' : '无状态')) }} </span>
</div> </div>
</div> </div>
@@ -95,6 +95,12 @@
<span class="common_cls" @click.stop="showTip(item.liabilityInsuranceAuditMsg)" :class="getClass(item.rescueInsurance)?.className">{{item.rescueInsurance}}</span> <span class="common_cls" @click.stop="showTip(item.liabilityInsuranceAuditMsg)" :class="getClass(item.rescueInsurance)?.className">{{item.rescueInsurance}}</span>
</span> </span>
</div> </div>
<div class="juhe flex-between">
<span class="zdJuhe">车辆信息</span>
<span class="flex-right" v-if="item.auditStatusStr">
<span class="common_cls" @click.stop="showTip(item.auditMsg)" :class="getClass(item.auditStatusStr)?.className">{{item.auditStatusStr}}</span>
</span>
</div>
<div class="juhe flex-between"> <div class="juhe flex-between">
<span class="zdJuhe">最近登录时间</span> <span class="zdJuhe">最近登录时间</span>
<span class="flex-right">{{item.lastLoginTime}}</span> <span class="flex-right">{{item.lastLoginTime}}</span>
@@ -326,7 +332,8 @@ export default {
this.$router.push({ this.$router.push({
name:'vehicleAdd', name:'vehicleAdd',
params:{ params:{
id:item.vehicleId id:item.vehicleId,
supplierId:item.supplierId
} }
}) })
} }

View File

@@ -1327,7 +1327,8 @@ export default {
columnObj.label = item.month // 每一列的标题的名称 columnObj.label = item.month // 每一列的标题的名称
columnObj.prop = props + index //自定义每一列标题字段名称 columnObj.prop = props + index //自定义每一列标题字段名称
this.etlLabelList.push(columnObj) this.etlLabelList.push(columnObj)
let mappings = [ 'complainOrderCount', 'complainOrderRate', 'pinganFavorableCount','pinganFavorableRate' ]; // 'pinganFavorableCount','pinganFavorableRate'
let mappings = [ 'complainOrderCount', 'complainOrderRate' ];
for (let i = 0; i < mappings.length; i++) { for (let i = 0; i < mappings.length; i++) {
this.$set(this.etlDetailList[i], columnObj.prop, item[mappings[i]]); this.$set(this.etlDetailList[i], columnObj.prop, item[mappings[i]]);
} }

View File

@@ -65,6 +65,7 @@ export default {
return { return {
showPoup: false, showPoup: false,
used:false, used:false,
saveLoading: true,
} }
}, },
async mounted() { async mounted() {
@@ -73,12 +74,19 @@ export default {
}, },
methods: { methods: {
async saveHandle() { async saveHandle() {
await sendInsuranceEmail(); if( this.saveLoading ) {
this.$toast('操作成功'); try {
this.showPoup=false this.saveLoading = false;
setTimeout(()=>{ await sendInsuranceEmail();
this.goBack() this.$toast('操作成功');
},1500) this.showPoup = false
setTimeout(() => {
this.goBack()
}, 1500)
} finally {
this.saveLoading = true;
}
}
}, },
} }
} }

View File

@@ -43,8 +43,8 @@ export default {
margin-top: 20px; margin-top: 20px;
text-align: center; text-align: center;
.report_icon { .report_icon {
width: 45px; width: 60px;
height: 45px; height: 60px;
} }
.report_title { .report_title {
color: rgba(53, 53, 53, 0.67); color: rgba(53, 53, 53, 0.67);

View File

@@ -61,7 +61,7 @@
<div class="dialog_wrap"> <div class="dialog_wrap">
<img class="add_report_bg" src="@/assets/report/add_report_bg.png" alt=""> <img class="add_report_bg" src="@/assets/report/add_report_bg.png" alt="">
<div class="report_content"> <div class="report_content">
<div class="report_title" style="margin-bottom: 10px;text-align: center;color: #000;"><span>{{currentInfo.name}}</span></div> <div class="report_title" style="margin-bottom: 10px;"><span>{{currentInfo.name}}</span></div>
<template v-if="currentInfo.component == 'time'"> <template v-if="currentInfo.component == 'time'">
<!--预约时间报备 s --> <!--预约时间报备 s -->
<div class="report_title"> <div class="report_title">
@@ -263,10 +263,10 @@
data.lat = this.lat; data.lat = this.lat;
data.lng = this.lng; data.lng = this.lng;
} }
if( !this.remark ) { /*if( !this.remark ) {
Toast('备注内容不能为空') Toast('备注内容不能为空')
return return
} }*/
this.clickFlag = false; this.clickFlag = false;
try { try {
await newOrderReporting(data) await newOrderReporting(data)