Compare commits

...

35 Commits

Author SHA1 Message Date
c55f6b4045 CRM_26-04-22#story#8495,潜在供应商H5页面提交信息,信息审核,提交补充信息与退回理由的优化与修复(跳转详情修改2) 2026-05-15 14:20:58 +08:00
0b4127a0e2 CRM_26-04-22#story#8495,潜在供应商H5页面提交信息,信息审核,提交补充信息与退回理由的优化与修复(跳转详情修改--修改跳转) 2026-05-15 13:47:35 +08:00
2970dca3e0 审核数据,接口放出 2026-05-13 16:27:05 +08:00
15d5c4694e 审核数据问题查找修改 2026-05-13 16:24:43 +08:00
1f7ce0da6d CRM_26-04-22#story#8495,潜在供应商H5页面提交信息,信息审核,提交补充信息与退回理由的优化与修复(跳转详情修改) 2026-05-12 16:58:44 +08:00
2bd56d8a9e 审核数据问题修复 2026-05-12 14:26:12 +08:00
0b388414c9 CRM_26-05-13#story#8629,潜在服务商信息录入H5优化,数量显示问题优化 2026-05-11 13:58:08 +08:00
b0b1abca01 CRM_26-05-13#story#8629#潜在服务商信息录入H5优化 2026-05-09 10:20:19 +08:00
4fdcd3e72e 工单对账,记账接口恢复 2026-05-07 16:02:35 +08:00
424ef98798 CRM_26-04-29#story#8528,供应商记账模块调整—徐力雯 2026-04-27 15:04:17 +08:00
37aeba20da CRM_26-04-22#story#8495,潜在供应商H5页面提交信息,信息审核,提交补充信息与退回理由的优化与修复 2026-04-15 14:22:38 +08:00
a9382c11a4 CRM_26-04-22#story#8495,潜在供应商H5页面提交信息,信息审核,提交补充信息与退回理由的优化与修复 2026-04-15 14:22:37 +08:00
4b94c614ad 司机app的普通材料接口不挂token 2026-04-13 16:32:33 +08:00
b39ae0bdf1 CRM_26-03-31#story#8426,调度APP的“参保救援职业责任险”链接中的文本更新的需求(咨询修改) 2026-04-13 11:25:47 +08:00
709f125c42 司机app的普通材料接口不挂token 2026-04-10 13:46:26 +08:00
a0c1a2700a CRM_26-03-31#story#8426,调度APP的“参保救援职业责任险”链接中的文本更新的需求 2026-04-01 13:31:33 +08:00
8c25f5a195 工单详情,‘查看照片’按钮添加显示逻辑 2026-03-31 09:25:10 +08:00
ee50c3ba19 CRM_26-03-31#story#8372,服务商KPI看板设置埋点及支持数据导出需求--中心组 2026-03-26 16:10:26 +08:00
1477f94774 CRM_26-03-31#story#8372,服务商KPI看板设置埋点及支持数据导出需求--中心组222 2026-03-26 15:31:11 +08:00
35fd987f00 CRM_26-03-31#story#8372,服务商KPI看板设置埋点及支持数据导出需求--中心组 2026-03-26 15:23:58 +08:00
b6491a21d1 CRM_26-03-31#story#8372,服务商KPI看板设置埋点及支持数据导出需求--中心组(log) 2026-03-26 14:54:14 +08:00
030417ba9c CRM_26-03-31#story#8372,服务商KPI看板设置埋点及支持数据导出需求--中心组 2026-03-26 14:34:41 +08:00
c05bdb361b CRM_26-03-31#story#8372,服务商KPI看板设置埋点及支持数据导出需求--中心组 2026-03-26 11:50:08 +08:00
e288d1e180 工单详情,‘生成司机信息’问题修复,VConsole去除 2026-03-18 10:01:35 +08:00
a48e73bdb5 工单详情,‘生成司机信息’问题修复 2026-03-18 09:37:09 +08:00
56a8ba66b7 工单详情,‘生成司机信息’问题修复 2026-03-18 09:30:25 +08:00
8c62b8e704 工单详情,‘生成司机信息’问题修复 2026-03-18 09:22:33 +08:00
f1a3f7b45b 工单详情,‘生成司机信息’格式更改 2026-03-17 11:25:07 +08:00
e7344a1f16 工单详情,‘生成司机信息’操作车牌号字段更换 2026-03-17 09:47:26 +08:00
75dd0b9740 车架号添加 2026-03-11 17:13:18 +08:00
aa5b724bed CRM_26-03-10#story#8237,调度app新增未开票批次提醒—徐力雯 2026-03-09 11:15:49 +08:00
ca99e068cf CRM_26-03-10#story#8252,二手拖车系统查询和导表功能优化 2026-03-05 11:32:27 +08:00
aafd7ffdb5 CRM_26-03-03#story#8210,调度app和司机app客户姓名调整(后期补需求 去除log,补Number) 2026-03-04 13:21:26 +08:00
112f42669c CRM_26-03-03#story#8210,调度app和司机app客户姓名调整(后期补需求 log测试) 2026-03-04 13:13:11 +08:00
9bf8e1253d CRM_26-03-03#story#8210,调度app和司机app客户姓名调整(后期补需求) 2026-03-04 11:53:39 +08:00
15 changed files with 465 additions and 125 deletions

View File

@@ -133,6 +133,15 @@ export function getContactQrCodeResult(data){
}) })
} }
// 添加企微
export function updateWechatId(data){
return request({
url:'/supplier/potential/updateWechatId',
method:'POST',
data
})
}
//司机列表 //司机列表
export function driverList(data){ export function driverList(data){
return request({ return request({

View File

@@ -23,7 +23,7 @@ export function toDoAudit(data){
data data
}) })
} }
// 工单详情 //
export function getOrderDetail(data){ export function getOrderDetail(data){
return request({ return request({
url:'/supplierAppV2/dispatchApp/order/getOrderDetail', url:'/supplierAppV2/dispatchApp/order/getOrderDetail',
@@ -177,3 +177,23 @@ export function getNewVersion(key){
params: key params: key
}) })
} }
export function getLog(data){
// 添加log
return request({
url: '/ureport/pageView/save',
method:'POST',
contentType:'application/json',
data
})
}
//获取最新版本
export function getUserBO(){
return request({
url: '/base/user/getUserBO',
method:'POST',
})
}

View File

@@ -54,7 +54,7 @@ export function userFeedback(data){
data data
}) })
} }
//二手拖车信息擦亮 //擦亮
export function usedCarPolish(data){ export function usedCarPolish(data){
return request({ return request({
url: `/toc-user/car-app/usedCarPolish/${data}`, url: `/toc-user/car-app/usedCarPolish/${data}`,

View File

@@ -29,7 +29,7 @@ service.interceptors.request.use(
// let token='eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBTkNIQU5HIiwidXNlcklkIjo0NTY3MSwibmFtZSI6IuWuieeVhSIsInVzZXJOYW1lIjoiQU5DSEFORyIsInN1cHBsaWVySWQiOjExMjgsImlzWmQiOjAsImV4cCI6MTc1NTQyMjUyNX0.xzDZhaANJFnbeViIHJA0SEtOyTv7Ja3rKmXqRKRuFkc' // let token='eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBTkNIQU5HIiwidXNlcklkIjo0NTY3MSwibmFtZSI6IuWuieeVhSIsInVzZXJOYW1lIjoiQU5DSEFORyIsInN1cHBsaWVySWQiOjExMjgsImlzWmQiOjAsImV4cCI6MTc1NTQyMjUyNX0.xzDZhaANJFnbeViIHJA0SEtOyTv7Ja3rKmXqRKRuFkc'
// let token='eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJTSEhQWEIiLCJ1c2VySWQiOjU0NzI2LCJuYW1lIjoiI-a1i-ivleWwj-eZveeZvSIsInVzZXJOYW1lIjoiU0hIUFhCIiwic3VwcGxpZXJJZCI6MTAwMDE2NSwiZXhwIjoxNzQ0NTEwNzkwfQ.JPk0OA7slYJN3FIi_uhW4Y0CiWRvl6R1dK8MRTbyhD8' // let token='eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJTSEhQWEIiLCJ1c2VySWQiOjU0NzI2LCJuYW1lIjoiI-a1i-ivleWwj-eZveeZvSIsInVzZXJOYW1lIjoiU0hIUFhCIiwic3VwcGxpZXJJZCI6MTAwMDE2NSwiZXhwIjoxNzQ0NTEwNzkwfQ.JPk0OA7slYJN3FIi_uhW4Y0CiWRvl6R1dK8MRTbyhD8'
// if(!(reqUrl=='/supplier/supplierTraining/trainingTask' || reqUrl=='/supplier/supplierTraining/normalList' || reqUrl=='/supplier/supplierTraining/trainingList')){ // if(!(reqUrl=='/supplier/supplierTraining/trainingTask' || reqUrl=='/supplier/supplierTraining/normalList' || reqUrl=='/supplier/supplierTraining/trainingList')){
if (reqUrl=='/supplier/supplierTraining/trainingList' && config?.params?.type==1){ if ((reqUrl=='/supplier/supplierTraining/trainingList' || reqUrl=='/supplier/supplierTraining/normalList') && config?.params?.type==1){
console.log('司机app使用该请求不挂token') console.log('司机app使用该请求不挂token')
} else { } else {
if(token) { if(token) {

View File

@@ -1,3 +1,6 @@
import { getLog } from "@/api/order"
let _setLogTimer = null
export const myMixins = { export const myMixins = {
data() { data() {
@@ -5,6 +8,11 @@ export const myMixins = {
} }
}, },
methods: { methods: {
setLogHandler(data) {
if (_setLogTimer) return
_setLogTimer = setTimeout(() => { _setLogTimer = null }, 1000)
getLog(data)
},
showFun() { showFun() {
if( localStorage.getItem('infoVerify') == 8 || localStorage.getItem('infoVerify') == 12 ) { if( localStorage.getItem('infoVerify') == 8 || localStorage.getItem('infoVerify') == 12 ) {
return false return false

View File

@@ -154,7 +154,7 @@ export default {
this.isLoading = false this.isLoading = false
}, },
initShow(){ initShow(){
this.keyword= '', this.keyword= ''
this.getNormalList() this.getNormalList()
} }
} }

View File

@@ -153,12 +153,17 @@ export default {
if (this.notifyList.length >= this.total) { if (this.notifyList.length >= this.total) {
this.finished = true; this.finished = true;
} }
} else {
// 未开票不需要分页,直接标记加载完成
this.loading = false;
this.finished = true;
} }
}, },
async changeTabHandler() { async changeTabHandler() {
this.pageNum = 1; this.pageNum = 1;
this.notifyList = []; this.notifyList = [];
this.checkList = []; this.checkList = [];
this.finished = false;
if (this.active == 1) { // 全部, 需要分页 if (this.active == 1) { // 全部, 需要分页
this.status = ''; this.status = '';
this.dispatchAppSearchInvoiced = ''; this.dispatchAppSearchInvoiced = '';

View File

@@ -1,5 +1,6 @@
<template> <template>
<div class="wrap"> <div class="wrap">
<div class="error_bar" v-if="errorMsg">{{ errorMsg }}</div>
<div class="top_banner"> <div class="top_banner">
<img src="@/assets/supplier/topBg.png" alt=""> <img src="@/assets/supplier/topBg.png" alt="">
</div> </div>
@@ -84,8 +85,8 @@
</el-tree> </el-tree>
</template> </template>
</van-field> </van-field>
<van-field :border="true" v-model="form.trailCount" name="trailCount" label="拖车数量" placeholder="请输入" /> <van-field :border="true" v-model="form.trailCount" type="digit" class="required" name="trailCount" label="拖车数量" placeholder="请输入" :rules="countVerify" />
<van-field :border="true" v-model="form.minorCount" name="minorCount" label="抢修车数量" placeholder="请输入" /> <van-field :border="true" v-model="form.minorCount" type="digit" class="required" name="minorCount" label="抢修车数量" placeholder="请输入" :rules="countVerify" />
<van-field :border="true" class="required" label="服务区域" placeholder="请选择"> <van-field :border="true" class="required" label="服务区域" placeholder="请选择">
<template #input> <template #input>
<el-cascader <el-cascader
@@ -99,12 +100,12 @@
clearable></el-cascader> clearable></el-cascader>
</template> </template>
</van-field> </van-field>
<div class="wei_code_wrap" v-if="form.name && !id"> <!-- <div class="wei_code_wrap" v-if="form.name && !id">
<div class="wei_title">请先添加企业微信保证申请流程正常进行</div> <div class="wei_title">请先添加企业微信保证申请流程正常进行</div>
<div class="wei_code_bg"> <div class="wei_code_bg">
<img v-if="qrCodeUrl" :src="qrCodeUrl" alt="企业微信二维码" /> <img v-if="qrCodeUrl" :src="qrCodeUrl" alt="企业微信二维码" />
</div> </div>
</div> </div>-->
</div> </div>
</div> </div>
</div> </div>
@@ -134,8 +135,10 @@
data() { data() {
return { return {
clickFlag: true, clickFlag: true,
errorMsg: '',
phoneVerify: [{ required: true, message: '请输入联系电话' }, { validator: value => { return /^1[3456789]\d{9}$/.test(value) }, message: '联系电话格式不正确' }], phoneVerify: [{ required: true, message: '请输入联系电话' }, { validator: value => { return /^1[3456789]\d{9}$/.test(value) }, message: '联系电话格式不正确' }],
emailVerify: [{ required: true, message: '请输入邮箱' }, { validator: value => { return /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/.test(value) }, message: '邮箱格式不正确' }], emailVerify: [{ required: true, message: '请输入邮箱' }, { validator: value => { return /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/.test(value) }, message: '邮箱格式不正确' }],
countVerify: [{ required: true, message: '请输入数量' }, { validator: value => /^\d+$/.test(value) && Number(value) >= 0, message: '请输入大于等于0的整数' }],
id:'', //车辆Id id:'', //车辆Id
idBackPhotoList: [], idBackPhotoList: [],
idBackPhoto: '', idBackPhoto: '',
@@ -200,7 +203,14 @@
}, },
async mounted() { async mounted() {
const urlParams = new URLSearchParams(window.location.search); const urlParams = new URLSearchParams(window.location.search);
const lastRoute = localStorage.getItem('lastRoute');
this.id = this.$route.query.id || urlParams.get('id'); this.id = this.$route.query.id || urlParams.get('id');
if (lastRoute && !this.id) {
const { name, query } = JSON.parse(lastRoute);
this.$router.replace({ name, query });
return;
}
await this.getAreaTree(); await this.getAreaTree();
if(this.id) { if(this.id) {
await this.getInfoHandler(); await this.getInfoHandler();
@@ -219,7 +229,6 @@
}); });
this.configId = res?.configId; this.configId = res?.configId;
this.qrCode = res?.qrCode this.qrCode = res?.qrCode
console.log('idid', res);
}, },
async getInfoHandler() { async getInfoHandler() {
let res = await getSupplierInfo({ let res = await getSupplierInfo({
@@ -231,7 +240,11 @@
this.idBackPhoto = _data?.idCardBackUrl; this.idBackPhoto = _data?.idCardBackUrl;
this.companyPhoto = _data?.businessLicense; this.companyPhoto = _data?.businessLicense;
this.licensePhoto = _data?.accountUrl; this.licensePhoto = _data?.accountUrl;
this.wechatId = _data?.wechatId this.wechatId = _data?.wechatId;
this.form.person = _data.legalName;
if( _data.failReason ) {
this.showError(_data.failReason)
}
if(this.idFrontPhoto) { if(this.idFrontPhoto) {
this.idFrontPhotoList = [{ url : this.idFrontPhoto }]; this.idFrontPhotoList = [{ url : this.idFrontPhoto }];
} }
@@ -249,54 +262,49 @@
} }
if(_data?.serviceAreaCode) { if(_data?.serviceAreaCode) {
this.$set(this.form, 'serviceAreaCode', _data?.serviceAreaCode.split(',').map(item => Number(item))); this.$set(this.form, 'serviceAreaCode', _data?.serviceAreaCode.split(',').map(item => Number(item)));
// this.form.serviceAreaCode = _data?.serviceAreaCode.split(',').map(item => Number(item));
} }
}, },
showError(msg) {
this.errorMsg = msg;
},
async applyAdd() { async applyAdd() {
this.errorMsg = '';
if( !this.idFrontPhoto ) { if( !this.idFrontPhoto ) {
this.$toast('法人身份证人像页未上传') this.showError('法人身份证人像页未上传')
return return
} }
if( !this.idBackPhoto ) { if( !this.idBackPhoto ) {
this.$toast('法人身份证国徽页未上传') this.showError('法人身份证国徽页未上传')
return return
} }
if( !this.companyPhoto ) { if( !this.companyPhoto ) {
this.$toast('营业执照未上传') this.showError('营业执照未上传')
return return
} }
if(this.form.person != this.form.legalName){ if(this.form.person != this.form.legalName){
this.$toast('身份证法人姓名和营业执照法人不一致') this.showError('身份证法人姓名和营业执照法人不一致')
return return
} }
if( !this.licensePhoto ) { if( !this.licensePhoto ) {
this.$toast('开户许可证未上传') this.showError('开户许可证未上传')
return
}
if( !(this.$refs.tree.getCheckedKeys().length > 0) ) {
this.showError('服务能力不能为空')
return return
} }
if( !(this.form.serviceAreaCode.length > 0) ) { if( !(this.form.serviceAreaCode.length > 0) ) {
this.$toast('服务区域不能为空') this.showError('服务区域不能为空')
return return
} }
// this.wechatId='wmOTNXBwAABrvKkE_Fh8ZN8Xm2S9v2wQ'
if(!this.wechatId) {
await this.QrCodeResult();
if( !this.wechatId ) {
this.$toast('请先添加企微再申请')
return
}
}
if( this.$refs.tree.getCheckedKeys().length > 0 ) { if( this.$refs.tree.getCheckedKeys().length > 0 ) {
await this.saveHandler() await this.saveHandler()
} else {
this.$toast('服务能力不能为空')
return
} }
}, },
async QrCodeResult() { //获取添加企微结果 async QrCodeResult() { //获取添加企微结果
let res = await getContactQrCodeResult({ let res = await getContactQrCodeResult({
configId: this.configId configId: this.configId
}); });
console.log('resres', res)
this.wechatId = res?.data?.wechatId this.wechatId = res?.data?.wechatId
}, },
async saveHandler() { async saveHandler() {
@@ -319,17 +327,38 @@
accountUrl:this.licensePhoto, accountUrl:this.licensePhoto,
service: this.$refs.tree.getCheckedKeys().join(',') , service: this.$refs.tree.getCheckedKeys().join(',') ,
serviceAreaCode: checkArr.join(','), serviceAreaCode: checkArr.join(','),
wechatId: this.wechatId,
});
Dialog.alert({
title: '提示',
message: "操作成功"
}).then(async () => {
this.goPage('supplierAddResult', { id : res?.data })
setTimeout(() => {
this.clickFlag = true
}, 1000)
}); });
console.log('rererere', res)
if( res?.noToast ) { // 服务商已存在
this.showError('当前服务商已存在')
if( res?.code != 0 ) {
Dialog.alert({
title: '提示',
message: "该服务商已存在,查看信息"
}).then(async () => {
const target = { name: 'supplierAddResult', query: { id: res?.code } };
localStorage.setItem('lastRoute', JSON.stringify(target));
this.goPage('supplierAddResult', { id : res?.code })
setTimeout(() => {
this.clickFlag = true
}, 1000)
});
}
} else {
Dialog.alert({
title: '提示',
message: "操作成功"
}).then(async () => {
const target = { name: 'supplierAddResult', query: { id: res?.data } };
localStorage.setItem('lastRoute', JSON.stringify(target));
this.goPage('supplierAddResult', { id : res?.data })
setTimeout(() => {
this.clickFlag = true
}, 1000)
});
}
} catch (e) {
this.showError(e)
} finally { } finally {
setTimeout(() => { setTimeout(() => {
this.clickFlag = true this.clickFlag = true
@@ -428,7 +457,7 @@
this.form.accountInfoDTO.companyType=res?.data?.type this.form.accountInfoDTO.companyType=res?.data?.type
// 营业执照法人名称 // 营业执照法人名称
this.form.person = res?.data?.person this.form.person = res?.data?.person
await this.QrCodeHandler(); // await this.QrCodeHandler();
}, },
async licensePhotoHandler(file){// 开户许可证 async licensePhotoHandler(file){// 开户许可证
const formData = new FormData(); const formData = new FormData();
@@ -442,8 +471,8 @@
ocrType: 15, ocrType: 15,
imageUrl: this.licensePhoto, imageUrl: this.licensePhoto,
}) })
this.form.accountInfoDTO.accountNumber=res?.data?.accountNumber this.form.accountInfoDTO.accountNumber=res?.data?.accountNumber || ''
this.form.accountInfoDTO.accountName = res?.data?.accountBank this.form.accountInfoDTO.accountName = res?.data?.accountBank || ''
}, },
}, },
computed: { computed: {
@@ -463,6 +492,17 @@
padding-bottom: 100px; padding-bottom: 100px;
overflow-y: auto; overflow-y: auto;
} }
.error_bar {
position: sticky;
top: 0;
z-index: 9999;
background-color: #e53935;
color: #ffffff;
font-size: 14px;
padding: 10px 16px;
text-align: center;
line-height: 1.5;
}
.top_banner { .top_banner {
width: 100%; width: 100%;
img { img {

View File

@@ -5,6 +5,12 @@
<img class="wait_icon" src="@/assets/supplier/successIcon.png" alt=""> <img class="wait_icon" src="@/assets/supplier/successIcon.png" alt="">
<div class="info-tip">信息录入完成请等待审核结果</div> <div class="info-tip">信息录入完成请等待审核结果</div>
</div> </div>
<div class="wei_code_wrap" v-if="name && id">
<div class="wei_title">请先添加企业微信保证申请流程正常进行</div>
<div class="wei_code_bg">
<img v-if="qrCodeUrl" :src="qrCodeUrl" alt="企业微信二维码" />
</div>
</div>
<div class="btn_wrap"> <div class="btn_wrap">
<div class="btn" @click="searchInfo">信息查看</div> <div class="btn" @click="searchInfo">信息查看</div>
</div> </div>
@@ -12,22 +18,83 @@
</template> </template>
<script> <script>
import QRCode from 'qrcode'
import {getOrCodeInfo, getContactQrCodeResult, updateWechatId, getSupplierInfo} from "@/api/mine"
import {myMixins} from "@/utils/myMixins" import {myMixins} from "@/utils/myMixins"
import {Toast} from "vant";
export default { export default {
name: "supplierAddResult", name: "supplierAddResult",
mixins:[myMixins], mixins:[myMixins],
data() { data() {
return { return {
id: '', id: '',
name: '',
qrCodeUrl: '',
qrCode: '',
configId: '',
wechatId: '',
} }
}, },
async mounted() { async mounted() {
const urlParams = new URLSearchParams(window.location.search); const urlParams = new URLSearchParams(window.location.search);
this.id = this.$route.query.id || urlParams.get('id'); this.id = this.$route.query.id || urlParams.get('id');
await this.getInfoHandler();
if (this.name && this.id) {
await this.QrCodeHandler();
}
}, },
methods: { methods: {
searchInfo() { async getInfoHandler() {
this.goPage('supplierInfo', { id : this.id }) let res = await getSupplierInfo({
id: this.id
});
console.log('66666', res)
let _data = res?.data
this.wechatId = _data?.wechatId;
this.name = _data?.name;
},
async QrCodeHandler() {
await this.QrCodeInfo();
await this.getQrCode();
},
async QrCodeInfo() {
let res = await getOrCodeInfo({ name: this.name });
this.configId = res?.configId;
this.qrCode = res?.qrCode;
},
async getQrCode() {
try {
this.qrCodeUrl = await QRCode.toDataURL(this.qrCode, {
width: 150,
margin: 2,
color: { dark: '#000000', light: '#FFFFFF' },
});
} catch (error) {
console.error('生成二维码失败:', error);
}
},
async QrCodeResult() {
let res = await getContactQrCodeResult({ configId: this.configId });
this.wechatId = res?.data?.wechatId;
},
async updateWechat() {
await updateWechatId({
wechatId: this.wechatId,
id: this.id
})
},
async searchInfo() {
if (!this.wechatId ) {
await this.QrCodeResult();
}
if (!this.wechatId) {
Toast('请先添加企微再查看信息');
return;
}
if(this.wechatId) {
await this.updateWechat()
this.goPage('supplierInfo', { id: this.id })
}
} }
} }
} }
@@ -80,4 +147,23 @@
line-height: 46px; line-height: 46px;
} }
} }
.wei_code_wrap {
margin-top: 10px;
.wei_title {
font-size: 15px;
color: #FF553B;
text-align: center;
}
.wei_code_bg {
width: 163px;
height: 173px;
background-image: url("~@/assets/supplier/weiCodeBg.png");
background-size: 100% 100%;
margin: 8px auto;
display: flex;
align-items: center;
justify-content: center;
}
}
</style> </style>

View File

@@ -87,11 +87,11 @@
</div> </div>
<div class="info_item"> <div class="info_item">
<div class="label">拖车数量</div> <div class="label">拖车数量</div>
<div class="content">{{supplierInfo?.trailCount || ''}}</div> <div class="content">{{supplierInfo.trailCount>=0 ? supplierInfo.trailCount : ''}}</div>
</div> </div>
<div class="info_item"> <div class="info_item">
<div class="label">抢修车数量</div> <div class="label">抢修车数量</div>
<div class="content">{{supplierInfo?.minorCount || ''}}</div> <div class="content">{{supplierInfo.minorCount >= 0 ? supplierInfo.minorCount : ''}}</div>
</div> </div>
<div class="info_item"> <div class="info_item">
<div class="label">服务区域</div> <div class="label">服务区域</div>

View File

@@ -1,41 +1,57 @@
<template> <template>
<div class="wrap"> <div class="wrap">
<div class="baseInfo common" :style="{'height':orderDetailInfo.contractParentId == 110 ? '300px' : '240px'}"> <div class="baseInfo common">
<div class="title">基本信息:</div> <div class="title">基本信息:</div>
<div class="line"></div> <div class="line"></div>
<div class="infoWrap fontColor"> <div class="infoWrap fontColor">
<div class="leftTitle"> <div class="infoRow">
<div class="leftItem">工单编号:</div> <span class="leftItem">工单编号:</span>
<div class="leftItem">合同:</div> <span class="rightItem" style="display: flex;align-items: center;">
<template v-if="orderDetailInfo.contractParentId == 110">
<div class="leftItem">机构名称:</div>
<div class="leftItem">销售人员:</div>
<div class="leftItem">司机号码:</div>
</template>
<div class="leftItem">结算方式:</div>
<div class="leftItem">客户姓名:</div>
<div class="leftItem">客户电话:</div>
<div class="leftItem">车牌号:</div>
<div class="leftItem">车型品牌:</div>
</div>
<div class="rightContent">
<div class="rightItem" style="display: flex;align-items: center;">
<span id="copyText">{{orderDetailInfo.orderCode}}</span> <span id="copyText">{{orderDetailInfo.orderCode}}</span>
<img @click="copyText" src="@/assets/copy.png" style="width: 35px;height: 15px;margin-left: 10px"/> <img @click="copyText" src="@/assets/copy.png" style="width: 35px;height: 15px;margin-left: 10px"/>
</span>
</div>
<div class="infoRow" v-if="!([7,9,11,12].includes(Number(queryType)))">
<span class="leftItem">合同:</span>
<span class="rightItem">{{ orderDetailInfo.contractName }}</span>
</div>
<template v-if="orderDetailInfo.contractParentId == 110">
<div class="infoRow">
<span class="leftItem">机构名称:</span>
<span class="rightItem">{{ orderDetailInfo.organizeName }}</span>
</div> </div>
<div class="rightItem">{{ orderDetailInfo.contractName }}</div> <div class="infoRow">
<template v-if="orderDetailInfo.contractParentId == 110"> <span class="leftItem">销售人员:</span>
<div class="rightItem">{{ orderDetailInfo.organizeName }}</div> <span class="rightItem">{{ orderDetailInfo.saleName }}</span>
<div class="rightItem">{{ orderDetailInfo.saleName }}</div> </div>
<div class="rightItem">{{ orderDetailInfo.driverPhone ? orderDetailInfo.driverPhone : ' '}}</div> <div class="infoRow">
</template> <span class="leftItem">司机号码:</span>
<div class="rightItem">{{ orderDetailInfo.contractSettleType?.label }}</div> <span class="rightItem">{{ orderDetailInfo.driverPhone ? orderDetailInfo.driverPhone : ' '}}</span>
<div class="rightItem">{{ maskName(orderDetailInfo.userName) }}</div> </div>
<div class="rightItem">{{ maskPhone(orderDetailInfo.userPhone) }}</div> </template>
<div class="rightItem">{{ orderDetailInfo.plateNumber }}</div> <div class="infoRow">
<!-- <div class="rightItem" >理想智动LXA6500SHEVM理想智动LXA6500SHEVM</div>--> <span class="leftItem">结算方式:</span>
<div class="rightItem" >{{orderDetailInfo.model}}{{ orderDetailInfo.brand }}</div> <span class="rightItem">{{ orderDetailInfo.contractSettleType?.label }}</span>
</div>
<div class="infoRow">
<span class="leftItem">客户姓名:</span>
<span class="rightItem">{{ [7,9,11,12].includes(Number(queryType)) ? maskName(orderDetailInfo.userName) : orderDetailInfo.userName }}</span>
</div>
<div class="infoRow">
<span class="leftItem">客户电话:</span>
<span class="rightItem">{{ maskPhone(orderDetailInfo.userPhone) }}</span>
</div>
<div class="infoRow">
<span class="leftItem">车牌号:</span>
<span class="rightItem">{{ [7,9,11,12].includes(Number(queryType)) ? maskPlate(orderDetailInfo.plateNumber) : orderDetailInfo.plateNumber }}</span>
</div>
<div class="infoRow">
<span class="leftItem">车型品牌:</span>
<span class="rightItem">{{orderDetailInfo.model}}{{ orderDetailInfo.brand }}</span>
</div>
<div class="infoRow" v-if="!([7,9,11,12].includes(Number(queryType)))">
<span class="leftItem">车架号:</span>
<span class="rightItem">{{orderDetailInfo.vinNo}}</span>
</div> </div>
</div> </div>
</div> </div>
@@ -77,7 +93,7 @@
<span v-if="orderDetailInfo.driverName && orderDetailInfo.proprietary?.code==1" class="driverPoiBtn" @click="noMultipleClicks(createDriverInfo)">生成司机信息</span> <span v-if="orderDetailInfo.driverName && orderDetailInfo.proprietary?.code==1" class="driverPoiBtn" @click="noMultipleClicks(createDriverInfo)">生成司机信息</span>
</span> </span>
</div> </div>
<div class="item" v-if="queryType == 9 || queryType ==11 || queryType ==12"> <div class="item" v-if="queryType == 9 || queryType ==11 || queryType ==12 || queryType ==5">
<span class="leftTitle fontColor">工单照片:</span><span class="rightContent"> <span class="leftTitle fontColor">工单照片:</span><span class="rightContent">
<span class="driverPoiBtn" @click="checkPhoto">查看照片</span> <span class="driverPoiBtn" @click="checkPhoto">查看照片</span>
</span> </span>
@@ -153,7 +169,7 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
this.initMap(); this.initMap();
}); });
console.log('queryType', this.queryType)
}, },
methods:{ methods:{
async getConfigByCodeHandler() { async getConfigByCodeHandler() {
@@ -168,19 +184,15 @@ export default {
}) })
if(result.data){ if(result.data){
// console.log('--result--',result.data) // console.log('--result--',result.data)
let params={ let params=`姓名:${this.orderDetailInfo.driverName}\n身份证${result.data.identityCardNumber}\n车牌${this.orderDetailInfo.vehiclePlateNumber}\n手机${this.orderDetailInfo.driverPhone}`
'姓名:':this.orderDetailInfo.driverName, // console.log('params',params)
'身份证:':result.data.identityCardNumber, let data = {"action":"copyToClipboard","params":params}
'车牌:':this.orderDetailInfo.plateNumber,
'手机:':this.orderDetailInfo.driverPhone,
}
let data = {"action":"copyToClipboard","params":JSON.stringify(params)}
var u = navigator.userAgent; var u = navigator.userAgent;
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
if(isiOS){ if(isiOS){
window.webkit.messageHandlers.nativeObject.postMessage(data); window.webkit.messageHandlers.nativeObject.postMessage(data);
}else { }else {
window.android.copyToClipboard(JSON.stringify(params)); window.android.copyToClipboard(params);
} }
}else { }else {
this.$toast('未获取到司机信息') this.$toast('未获取到司机信息')
@@ -276,6 +288,11 @@ export default {
if (str.length <= 7) return str; if (str.length <= 7) return str;
return str.slice(0, 3) + '*'.repeat(str.length - 7) + str.slice(-4); return str.slice(0, 3) + '*'.repeat(str.length - 7) + str.slice(-4);
}, },
maskPlate(plate) {
if (!plate) return '';
if (plate.length <= 2) return plate;
return plate.slice(0, 1) + '*'.repeat(plate.length - 2) + plate.slice(-1);
},
async getDriverPoi(){ async getDriverPoi(){
let res=await showVehiclePositionInfo({ let res=await showVehiclePositionInfo({
userOrderId:this.userOrderId, userOrderId:this.userOrderId,
@@ -332,21 +349,25 @@ export default {
} }
.baseInfo{ .baseInfo{
width: 100%; width: 100%;
//@include wh(100%,260px);
margin-bottom: 12px; margin-bottom: 12px;
.infoWrap{ .infoWrap{
display: flex; .infoRow{
.leftTitle{ display: flex;
margin-left: 5px; align-items: center;
margin-right: 6px; min-height: 24px;
@include wh(60px,189px); .leftItem{
opacity: .5; width: 60px;
} flex-shrink: 0;
.rightContent{ margin-left: 5px;
height: 189px; margin-right: 6px;
width: calc(100% - 60px); opacity: .5;
}
.rightItem{ .rightItem{
height: 24px; flex: 1;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
} }
} }

View File

@@ -263,6 +263,7 @@ import {
getDriverName,getDriverStatisticsKpi, getDriverName,getDriverStatisticsKpi,
getRecentSupplierKpi, getRecentSupplierKpi,
} from "@/api/kpi.js" } from "@/api/kpi.js"
import { getUserBO } from "@/api/order"
// querySupplierDriverStatisticsScore // querySupplierDriverStatisticsScore
import {myMixins} from "@/utils/myMixins" import {myMixins} from "@/utils/myMixins"
import CircleChar from "@/views/kpi/components/circleChar.vue"; import CircleChar from "@/views/kpi/components/circleChar.vue";
@@ -330,6 +331,10 @@ export default {
showScoreChart:true, showScoreChart:true,
continueMonthKpi:[], continueMonthKpi:[],
isBtn:false,//是否有信息变更申请按钮权限 isBtn:false,//是否有信息变更申请按钮权限
source: 'App',
currentSupplierId: '',
userId: '',
enterTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
} }
}, },
created() { created() {
@@ -338,13 +343,41 @@ export default {
this.isZd = urlParams?.get('isZd') || '' this.isZd = urlParams?.get('isZd') || ''
this.supplierId = urlParams?.get('supplierId') || '' this.supplierId = urlParams?.get('supplierId') || ''
this.isBtn= Number(urlParams?.get('isBtn')) this.isBtn= Number(urlParams?.get('isBtn'))
this.source = urlParams?.get('source') || 'App'
}, },
async mounted() { async mounted() {
await this.checkMobile(); await this.checkMobile();
await this.initDate(); await this.initDate();
await this.selectSupplierNameHandle(); await this.selectSupplierNameHandle();
await this.getUserInfo();
document.addEventListener('visibilitychange', async ( ) => {
let state = document.visibilityState
if (state == 'hidden') { // 用户离开了
if( this.source == 'App' ) {
this.setLogHandler({
supplierId: this.currentSupplierId, // 服务商 id
userId: this.userId, // userId
source: '服务商KPI',
event: this.source, // 区分 App 还是 system
openTime: this.enterTime, // log 时间,其中 阅读时长是由 enter 和 leave 的时间计算而来
leaveTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
});
}
}
if (state == 'visible') {
this.enterTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
}
});
}, },
methods: { methods: {
async getUserInfo() {
let res = await getUserBO();
this.userId = res.data.id;
this.currentSupplierId = res.data.supplierId
console.log('getUserBO', res)
},
applicateHandle() { applicateHandle() {
if (window.parent) { if (window.parent) {
const hasListener = window.parent.dispatchEvent(new Event('checkCloseDialog')); const hasListener = window.parent.dispatchEvent(new Event('checkCloseDialog'));

View File

@@ -13,23 +13,20 @@
</div> </div>
<div class="contentWrap"> <div class="contentWrap">
<div> <div>
为降低日常救援工作中的不可预期的车损赔付带来的运营风险和资金压力减少由此衍生而来的可能投诉顺应行业服务标准不断增长的局势中道救援自有车辆已全部投保了救援职业责任险 为降低日常救援工作中的不可预期的车损赔付带来的运营风险和资金压力减少由此衍生而来的投诉顺应行业服务标准不断增长的局势中道救援自有车辆已全部投保了救援职业责任险
</div> </div>
<div> <div>
通过日常的交流了解此险种对于服务商而言投保相对较很多服务商在无投保渠道的情况下选择了对于我们救援场景保障能力稍弱不太匹配的货物险从而从形成了现在很多救援车无保障或者特殊场景货物险理赔难的局面 通过交流了解我们的合作服务商日常运营中会遇到责任险或者货物险的投保难理赔难的问题为此我们与保司沟通协调特为与中道救援合作紧密的服务商提供救援职业责任险参保渠道解决大家的实际困难实现共同进步
</div>
<div>
为此中道救援经过与保司沟通协调特为与中道救援合作紧密的服务商提供救援职业责任险参保渠道提升服务商服务能力降低运营风险实现共同进步
</div> </div>
<div>救援职业责任险简介</div> <div>救援职业责任险简介</div>
<div> 1综合保额100万元其中救援责任50万元物流责任50万元可全方位覆盖我们日常的经营活动</div> <div> 1保额有50万和100万两套方案可选</div>
<div> 2保费支付可采用救援服务费抵扣的方式降低资金压力</div> <div> 2保费支付可采用救援服务费抵扣的方式降低资金压力</div>
<div> 3详细保险条款保费和其他问题如需了解请与辖区区域经理联系</div> <div> 3其他详情如需了解请与辖区区域经理联系</div>
<div> 其他意见建议如需交流请与18621558505曲仁杰联系</div> <div> 如有好的建议需要交流请与18621558505曲仁杰联系</div>
<div> 确认参保请点击下方参保按钮会有专人与贵司联系</div> <div> 有参保需要请点击下方参保按钮我们会与您联系</div>
</div> </div>
<div class="upload_btn_wrap"> <div class="upload_btn_wrap">
<div class="btn_save" :style="{'backgroundColor':used ? '#cccccc' : '#354D93'}" @click="showPoup = true">参保</div> <div class="btn_save" :style="{'backgroundColor':used ? '#cccccc' : '#354D93'}" @click="showPoup = true">我想咨询</div>
</div> </div>
<div class="poupCommon" v-if="showPoup"> <div class="poupCommon" v-if="showPoup">
<div class="showPoupContainer"> <div class="showPoupContainer">
@@ -37,12 +34,10 @@
<img class="insure" src="@/assets/insured.png"> <img class="insure" src="@/assets/insured.png">
<div class="con"> <div class="con">
<template v-if="used"> <template v-if="used">
<div class="title">您已成功申请参保请等待</div> <div class="title">咨询已收到我们会与您联系</div>
<div class="title">专人与贵司联系</div>
</template> </template>
<template v-else> <template v-else>
<div class="title">请确认</div> <div class="title">请确认咨询</div>
<div class="title">是否参保救援职业责任险</div>
</template> </template>
<div class="btnWrap"> <div class="btnWrap">
<div v-if="used" class="btn confirmBtn" @click="showPoup = false">确认</div> <div v-if="used" class="btn confirmBtn" @click="showPoup = false">确认</div>

View File

@@ -16,7 +16,7 @@
<img class="mine" src="@/assets/secondHandCar/mine.png" @click="goMine" /> <img class="mine" src="@/assets/secondHandCar/mine.png" @click="goMine" />
<el-input <el-input
@blur="getList" @blur="getList"
placeholder="请输入" placeholder="牌照|车辆类型|落板|排放|品牌|描述|底座|刹车|自营"
v-model.trim="topSearch"> v-model.trim="topSearch">
<img slot="suffix" class="search" src="@/assets/secondHandCar/search.png"/> <img slot="suffix" class="search" src="@/assets/secondHandCar/search.png"/>
</el-input> </el-input>
@@ -99,6 +99,11 @@
></i> ></i>
</template> </template>
</el-input> </el-input>
<div class="customSel wantSourceSel" @click.stop="toggleWantSource">
<img v-if="wantSource === 1" class="checkIcon" src="@/assets/secondHandCar/checked.png" />
<img v-else class="checkIcon" src="@/assets/secondHandCar/uncheck.png" />
<span :class="{'has-price': wantSource === 1}">想要的车源</span>
</div>
</div> </div>
<div class="contentWrap" v-show="!show"> <div class="contentWrap" v-show="!show">
<van-pull-refresh v-model="isLoading" @refresh="onRefresh" style="min-height:85vh"> <van-pull-refresh v-model="isLoading" @refresh="onRefresh" style="min-height:85vh">
@@ -223,6 +228,7 @@ export default {
showDatePicker: false, showDatePicker: false,
areaShow:false, areaShow:false,
isClearing:false, isClearing:false,
wantSource: 0,
minDate: new Date(1970, 0, 1), // 设置最小可选日期1970年1月1日 minDate: new Date(1970, 0, 1), // 设置最小可选日期1970年1月1日
maxDate: new Date(2099, 11, 31) // 设置最大可选日期2099年12月31日 maxDate: new Date(2099, 11, 31) // 设置最大可选日期2099年12月31日
} }
@@ -267,6 +273,10 @@ export default {
this.setSearchVal(); this.setSearchVal();
this.getList() this.getList()
}, },
wantSource(){
this.setSearchVal();
this.getList()
},
}, },
mounted() { mounted() {
this.getSearchVal(); this.getSearchVal();
@@ -281,6 +291,9 @@ export default {
}); });
}, },
methods:{ methods:{
toggleWantSource(){
this.wantSource = this.wantSource === 1 ? 0 : 1;
},
confirmHandle(val){ confirmHandle(val){
if(val[0].name.includes('市')){ if(val[0].name.includes('市')){
this.areaName=val[0].name this.areaName=val[0].name
@@ -356,6 +369,7 @@ export default {
sessionStorage.setItem('dateVal',this.dateVal); sessionStorage.setItem('dateVal',this.dateVal);
sessionStorage.setItem('brandModel',this.brandModel); sessionStorage.setItem('brandModel',this.brandModel);
sessionStorage.setItem('underpanBrand',this.underpanBrand); sessionStorage.setItem('underpanBrand',this.underpanBrand);
sessionStorage.setItem('wantSource',String(this.wantSource));
}, },
getSearchVal(){ getSearchVal(){
this.activeTab = Number(sessionStorage.getItem('indexActiveTab')) || 0; this.activeTab = Number(sessionStorage.getItem('indexActiveTab')) || 0;
@@ -371,6 +385,7 @@ export default {
this.dateVal=sessionStorage.getItem('dateVal') || ''; this.dateVal=sessionStorage.getItem('dateVal') || '';
this.brandModel=sessionStorage.getItem('brandModel') || ''; this.brandModel=sessionStorage.getItem('brandModel') || '';
this.underpanBrand=sessionStorage.getItem('underpanBrand') || ''; this.underpanBrand=sessionStorage.getItem('underpanBrand') || '';
this.wantSource=Number(sessionStorage.getItem('wantSource')) || 0;
}, },
goMine(){//我的发布 goMine(){//我的发布
this.$router.push({ name: "mineRelease"}) this.$router.push({ name: "mineRelease"})
@@ -434,6 +449,7 @@ export default {
endTime:this.endTime, endTime:this.endTime,
brandModel:this.brandModel, brandModel:this.brandModel,
underpanBrand:this.underpanBrand, underpanBrand:this.underpanBrand,
wantSource:this.wantSource,
}) })
this.total=res.total this.total=res.total
if(this.pageNum == 1){// 第一页直接赋值 if(this.pageNum == 1){// 第一页直接赋值
@@ -526,6 +542,9 @@ export default {
border-radius: 20px; border-radius: 20px;
border: 2px solid #264B94; border: 2px solid #264B94;
} }
::v-deep .el-input__inner::placeholder{
font-size: 10px;
}
::v-deep .el-input__suffix{ ::v-deep .el-input__suffix{
top: 12px; top: 12px;
right: 10px; right: 10px;
@@ -622,6 +641,22 @@ export default {
.has-price{ .has-price{
color: #007BE9 !important; color: #007BE9 !important;
} }
.wantSourceSel{
display: flex;
align-items: center;
justify-content: center;
gap: 3px;
width: 68px;
cursor: pointer;
.checkIcon{
width: 13px;
height: 13px;
}
span{
font-size: 10px;
color: #323233;
}
}
} }
.contentWrap{ .contentWrap{
width: 100%; width: 100%;

View File

@@ -54,6 +54,11 @@
<span <span
class="content">{{ orderInfo.carClothingToolAmount }}</span> class="content">{{ orderInfo.carClothingToolAmount }}</span>
</div> </div>
<div class="item">
<span class="titleLeft">免拖</span>
<span
class="content">{{ orderInfo.customerDistanceLimit }} {{orderInfo.hedgingMileage && orderInfo.hedgingMileage > 0 ? '(超限对冲,只结免拖)' : ''}}</span>
</div>
<div class="item"> <div class="item">
<span class="titleLeft">换电瓶费用</span> <span class="titleLeft">换电瓶费用</span>
<span <span
@@ -72,35 +77,35 @@
<div class="inpInfo"> <div class="inpInfo">
<div class="titleContent"> <div class="titleContent">
<div class="flex-between" v-show="abState"> <div class="flex-between" v-show="abState">
<div> 到事发地距离:</div> <div><span style="color: red;">*</span> 到事发地距离:</div>
<div class="halfOpcity"><input @input="validateIntegerInput" class="ipt" type="number" v-model="form.supplierSettleMileageAb"/>公里</div> <div class="halfOpcity"><input @input="validateIntegerInput" class="ipt" type="number" v-model="form.supplierSettleMileageAb"/>公里</div>
</div> </div>
<div class="flex-between" v-show="bcState"> <div class="flex-between" v-show="bcState">
<div> 拖车里程:</div> <div><span style="color: red;">*</span> 拖车里程:</div>
<div class="halfOpcity"><input class="ipt" type="number" v-model="form.supplierSettleMileageBc"/>公里</div> <div class="halfOpcity"><input class="ipt" type="number" v-model="form.supplierSettleMileageBc"/>公里</div>
</div> </div>
<div class="flex-between" v-show="caState"> <div class="flex-between" v-show="caState">
<div>返程里程:</div> <div><span style="color: red;">*</span>返程里程:</div>
<div class="halfOpcity"><input class="ipt" type="number" v-model="form.supplierSettleMileageCa"/>公里</div> <div class="halfOpcity"><input class="ipt" type="number" v-model="form.supplierSettleMileageCa"/>公里</div>
</div> </div>
<div class="flex-between" v-show="bridgeAbState"> <div class="flex-between" v-show="bridgeAbState">
<div>ab路桥费:</div> <div><span v-show="!isUnsuccessfulSettle" style="color: red;">*</span>ab路桥费:</div>
<div class="halfOpcity"><input class="ipt" @input="validateIntegerInput" :disabled="isUnsuccessfulSettle" type="number" v-model="form.supplierBridgeAmountAb"/></div> <div class="halfOpcity"><input class="ipt" @input="validateIntegerInput" :disabled="isUnsuccessfulSettle" type="number" v-model="form.supplierBridgeAmountAb"/></div>
</div> </div>
<div class="flex-between" v-show="bridgeBcState"> <div class="flex-between" v-show="bridgeBcState">
<div>bc路桥费:</div> <div><span v-show="!isUnsuccessfulSettle" style="color: red;">*</span>bc路桥费:</div>
<div class="halfOpcity"><input class="ipt" @input="validateIntegerInput" :disabled="isUnsuccessfulSettle" type="number" v-model="form.supplierBridgeAmountBc"/></div> <div class="halfOpcity"><input class="ipt" @input="validateIntegerInput" :disabled="isUnsuccessfulSettle" type="number" v-model="form.supplierBridgeAmountBc"/></div>
</div> </div>
<div class="flex-between" v-show="bridgeCaState"> <div class="flex-between" v-show="bridgeCaState">
<div>ca路桥费:</div> <div><span v-show="!isUnsuccessfulSettle" style="color: red;">*</span>ca路桥费:</div>
<div class="halfOpcity"><input class="ipt" @input="validateIntegerInput" :disabled="isUnsuccessfulSettle" type="number" v-model="form.supplierBridgeAmountCa"/></div> <div class="halfOpcity"><input class="ipt" @input="validateIntegerInput" :disabled="isUnsuccessfulSettle" type="number" v-model="form.supplierBridgeAmountCa"/></div>
</div> </div>
<div class="flex-between" v-show="waitAmountState"> <div class="flex-between" v-show="waitAmountState">
<div>等候费:</div> <div><span style="color: red;">*</span>等候费:</div>
<div class="halfOpcity inputContent"><input class="ipt" @input="validateIntegerInput" type="number" v-model="form.supplierWaitAmount"/></div> <div class="halfOpcity inputContent"><input class="ipt" @input="validateIntegerInput" type="number" v-model="form.supplierWaitAmount"/></div>
</div> </div>
<div class="flex-between" v-show="tyreAmountState"> <div class="flex-between" v-show="tyreAmountState">
<div>小轮个数:</div> <div><span v-show="!isUnsuccessfulSettle" style="color: red;">*</span>小轮个数:</div>
<div class="halfOpcity inputContent"><input class="ipt" @input="validateIntegerInput" :disabled="isUnsuccessfulSettle" type="number" v-model="form.tyreNumber"/></div> <div class="halfOpcity inputContent"><input class="ipt" @input="validateIntegerInput" :disabled="isUnsuccessfulSettle" type="number" v-model="form.tyreNumber"/></div>
</div> </div>
<div class="flex-between" v-show="tyreAmountState"> <div class="flex-between" v-show="tyreAmountState">
@@ -108,11 +113,11 @@
<div class="halfOpcity inputContent"><input @input="validateIntegerInput" disabled type="number" v-model="form.supplierTyreAmount"/></div> <div class="halfOpcity inputContent"><input @input="validateIntegerInput" disabled type="number" v-model="form.supplierTyreAmount"/></div>
</div> </div>
<div class="flex-between" v-show="dilemmaAmountState && basePriceDisabled"> <div class="flex-between" v-show="dilemmaAmountState && basePriceDisabled">
<div>困境费:</div> <div><span style="color: red;">*</span>困境费:</div>
<div class="halfOpcity inputContent"><input class="ipt" @input="validateIntegerInput" type="number" v-model="form.supplierDilemmaAmount"/></div> <div class="halfOpcity inputContent"><input class="ipt" @input="validateIntegerInput" type="number" v-model="form.supplierDilemmaAmount"/></div>
</div> </div>
<div class="flex-between" v-show="basementFeeState"> <div class="flex-between" v-show="basementFeeState">
<div>地库费:</div> <div><span v-show="isBasementSettle && !isUnsuccessfulSettle" style="color: red;">*</span>地库费:</div>
<div class="halfOpcity inputContent"><input @input="validateIntegerInput" class="ipt" type="number" v-model="form.supplierBasementFee" :disabled="!isBasementSettle || isUnsuccessfulSettle" /></div> <div class="halfOpcity inputContent"><input @input="validateIntegerInput" class="ipt" type="number" v-model="form.supplierBasementFee" :disabled="!isBasementSettle || isUnsuccessfulSettle" /></div>
</div> </div>
<div class="flex-between"> <div class="flex-between">
@@ -120,7 +125,7 @@
<div class="halfOpcity inputContent"><input type="number" class="ipt" v-model="form.supplierCustomerAmount"/></div> <div class="halfOpcity inputContent"><input type="number" class="ipt" v-model="form.supplierCustomerAmount"/></div>
</div> </div>
<div class="flex-between bgDisable" :class=" { 'flex-between': true, 'bgDisable' : basePriceDisabled } "> <div class="flex-between bgDisable" :class=" { 'flex-between': true, 'bgDisable' : basePriceDisabled } ">
<div>基本费用:</div> <div><span v-show="!basePriceDisabled && !isBasementSettle" style="color: red;">*</span>基本费用:</div>
<div class="halfOpcity inputContent "><input class="disable" type="number" :readonly="basePriceDisabled || isBasementSettle" <div class="halfOpcity inputContent "><input class="disable" type="number" :readonly="basePriceDisabled || isBasementSettle"
v-model="form.supplierBasePrice"/><span></span></div> v-model="form.supplierBasePrice"/><span></span></div>
</div> </div>
@@ -657,6 +662,49 @@ export default {
this.goback() this.goback()
}, },
async save() { async save() {
const isBlank = (v) => v === '' || v === null || v === undefined || parseFloat(v) < 0
if (this.abState && isBlank(this.form.supplierSettleMileageAb)) {
this.$toast('请填写到事发地距离'); return;
}
if (this.bcState && isBlank(this.form.supplierSettleMileageBc)) {
this.$toast('请填写拖车里程'); return;
}
if (this.caState && isBlank(this.form.supplierSettleMileageCa)) {
this.$toast('请填写返程里程'); return;
}
if (this.bridgeAbState && !this.isUnsuccessfulSettle && isBlank(this.form.supplierBridgeAmountAb)) {
this.$toast('请填写ab路桥费'); return;
}
if (this.bridgeBcState && !this.isUnsuccessfulSettle && isBlank(this.form.supplierBridgeAmountBc)) {
this.$toast('请填写bc路桥费'); return;
}
if (this.bridgeCaState && !this.isUnsuccessfulSettle && isBlank(this.form.supplierBridgeAmountCa)) {
this.$toast('请填写ca路桥费'); return;
}
if (this.waitAmountState && isBlank(this.form.supplierWaitAmount)) {
this.$toast('请填写等候费'); return;
}
if (!this.auditFormShow && this.tyreAmountState && !this.isUnsuccessfulSettle && isBlank(this.form.tyreNumber)) {
this.$toast('请填写小轮个数'); return;
}
if (this.dilemmaAmountState && this.basePriceDisabled && isBlank(this.form.supplierDilemmaAmount)) {
this.$toast('请填写困境费'); return;
}
if (this.basementFeeState && this.isBasementSettle && !this.isUnsuccessfulSettle && isBlank(this.form.supplierBasementFee)) {
this.$toast('请填写地库费'); return;
}
if (!this.basePriceDisabled && !this.isBasementSettle && isBlank(this.form.supplierBasePrice)) {
this.$toast('请填写基本费用'); return;
}
if (
this.orderInfo.customerDistanceLimit &&
parseFloat(this.form.supplierSettleMileageBc) > parseFloat(this.orderInfo.customerDistanceLimit)
) {
if (!this.form.supplierCustomerAmount || parseFloat(this.form.supplierCustomerAmount) == 0) {
this.$toast('拖车里程超出免拖范围,请填写收取客户金额');
return;
}
}
if (this.form.supplierOtherAmount > 0) { if (this.form.supplierOtherAmount > 0) {
if (this.form.supplierOtherAmountRemark == '') { if (this.form.supplierOtherAmountRemark == '') {
this.$toast('请填写其他费用说明'); this.$toast('请填写其他费用说明');
@@ -694,6 +742,7 @@ export default {
await this.compute(); await this.compute();
const formData = new FormData(); const formData = new FormData();
let obj = this.form; let obj = this.form;
console.log('obj',obj)
Object.keys(obj).forEach((key) => { Object.keys(obj).forEach((key) => {
formData.append(key, obj[key]); formData.append(key, obj[key]);
}); });
@@ -725,6 +774,45 @@ export default {
this.$toast('已进入后续流程,不允许操作'); this.$toast('已进入后续流程,不允许操作');
return; return;
} }
const isBlank = (v) => v === '' || v === null || v === undefined || parseFloat(v) < 0
if (this.abState && isBlank(this.form.supplierSettleMileageAb)) {
this.$toast('请填写到事发地距离'); return;
}
if (this.bcState && isBlank(this.form.supplierSettleMileageBc)) {
this.$toast('请填写拖车里程'); return;
}
if (this.caState && isBlank(this.form.supplierSettleMileageCa)) {
this.$toast('请填写返程里程'); return;
}
if (this.bridgeAbState && !this.isUnsuccessfulSettle && isBlank(this.form.supplierBridgeAmountAb)) {
this.$toast('请填写ab路桥费'); return;
}
if (this.bridgeBcState && !this.isUnsuccessfulSettle && isBlank(this.form.supplierBridgeAmountBc)) {
this.$toast('请填写bc路桥费'); return;
}
if (this.bridgeCaState && !this.isUnsuccessfulSettle && isBlank(this.form.supplierBridgeAmountCa)) {
this.$toast('请填写ca路桥费'); return;
}
if (this.waitAmountState && isBlank(this.form.supplierWaitAmount)) {
this.$toast('请填写等候费'); return;
}
if (this.dilemmaAmountState && this.basePriceDisabled && isBlank(this.form.supplierDilemmaAmount)) {
this.$toast('请填写困境费'); return;
}
if (this.basementFeeState && this.isBasementSettle && !this.isUnsuccessfulSettle && isBlank(this.form.supplierBasementFee)) {
this.$toast('请填写地库费'); return;
}
if (!this.basePriceDisabled && !this.isBasementSettle && isBlank(this.form.supplierBasePrice)) {
this.$toast('请填写基本费用'); return;
}
if (
this.orderInfo.customerDistanceLimit &&
parseFloat(this.form.supplierSettleMileageBc) > parseFloat(this.orderInfo.customerDistanceLimit)
) {
if (!this.form.supplierCustomerAmount || parseFloat(this.form.supplierCustomerAmount) == 0) {
this.$toast('拖车里程超出免拖范围,请填写收取客户金额'); return;
}
}
this.loading1 = true; this.loading1 = true;
this.form.supplierExtraPrice = this.form.extraPrice || 0 this.form.supplierExtraPrice = this.form.extraPrice || 0
this.form.supplierBasePrice = this.form.basePrice || 0 this.form.supplierBasePrice = this.form.basePrice || 0
@@ -942,7 +1030,7 @@ img {
} }
.baseInfo { .baseInfo {
@include wh(100%, 344px); width: 100%;
} }