Compare commits

..

3 Commits

10 changed files with 83 additions and 224 deletions

View File

@@ -23,7 +23,7 @@ export function toDoAudit(data){
data
})
}
//
// 工单详情
export function getOrderDetail(data){
return request({
url:'/supplierAppV2/dispatchApp/order/getOrderDetail',
@@ -177,23 +177,3 @@ export function getNewVersion(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
})
}
//擦亮
//二手拖车信息擦亮
export function usedCarPolish(data){
return request({
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.eyJzdWIiOiJTSEhQWEIiLCJ1c2VySWQiOjU0NzI2LCJuYW1lIjoiI-a1i-ivleWwj-eZveeZvSIsInVzZXJOYW1lIjoiU0hIUFhCIiwic3VwcGxpZXJJZCI6MTAwMDE2NSwiZXhwIjoxNzQ0NTEwNzkwfQ.JPk0OA7slYJN3FIi_uhW4Y0CiWRvl6R1dK8MRTbyhD8'
// if(!(reqUrl=='/supplier/supplierTraining/trainingTask' || reqUrl=='/supplier/supplierTraining/normalList' || reqUrl=='/supplier/supplierTraining/trainingList')){
if ((reqUrl=='/supplier/supplierTraining/trainingList' || reqUrl=='/supplier/supplierTraining/normalList') && config?.params?.type==1){
if (reqUrl=='/supplier/supplierTraining/trainingList' && config?.params?.type==1){
console.log('司机app使用该请求不挂token')
} else {
if(token) {

View File

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

View File

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

View File

@@ -1,6 +1,5 @@
<template>
<div class="wrap">
<div class="error_bar" v-if="errorMsg">{{ errorMsg }}</div>
<div class="top_banner">
<img src="@/assets/supplier/topBg.png" alt="">
</div>
@@ -135,7 +134,6 @@
data() {
return {
clickFlag: true,
errorMsg: '',
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: '邮箱格式不正确' }],
id:'', //车辆Id
@@ -233,11 +231,7 @@
this.idBackPhoto = _data?.idCardBackUrl;
this.companyPhoto = _data?.businessLicense;
this.licensePhoto = _data?.accountUrl;
this.wechatId = _data?.wechatId;
this.form.person = _data.legalName;
if( _data.failReason ) {
this.showError(_data.failReason)
}
this.wechatId = _data?.wechatId
if(this.idFrontPhoto) {
this.idFrontPhotoList = [{ url : this.idFrontPhoto }];
}
@@ -258,54 +252,44 @@
// this.form.serviceAreaCode = _data?.serviceAreaCode.split(',').map(item => Number(item));
}
},
showError(msg) {
this.errorMsg = msg;
},
async applyAdd() {
this.errorMsg = '';
if( !this.idFrontPhoto ) {
this.showError('法人身份证人像页未上传')
this.$toast('法人身份证人像页未上传')
return
}
if( !this.idBackPhoto ) {
this.showError('法人身份证国徽页未上传')
this.$toast('法人身份证国徽页未上传')
return
}
if( !this.companyPhoto ) {
this.showError('营业执照未上传')
this.$toast('营业执照未上传')
return
}
if(this.form.person != this.form.legalName){
this.showError('身份证法人姓名和营业执照法人不一致')
this.$toast('身份证法人姓名和营业执照法人不一致')
return
}
if( !this.licensePhoto ) {
this.showError('开户许可证未上传')
return
}
if( !(this.$refs.tree.getCheckedKeys().length > 0) ) {
this.showError('服务能力不能为空')
this.$toast('开户许可证未上传')
return
}
if( !(this.form.serviceAreaCode.length > 0) ) {
this.showError('服务区域不能为空')
return
}
if( !this.qrCode && !this.id) {
await this.QrCodeHandler();
this.showError('请先添加下方企微再申请')
this.$toast('服务区域不能为空')
return
}
// this.wechatId='wmOTNXBwAABrvKkE_Fh8ZN8Xm2S9v2wQ'
if(!this.wechatId) {
await this.QrCodeResult();
if( !this.wechatId ) {
this.showError('请先添加企微再申请')
this.$toast('请先添加企微再申请')
return
}
}
if( this.$refs.tree.getCheckedKeys().length > 0 ) {
await this.saveHandler()
} else {
this.$toast('服务能力不能为空')
return
}
},
async QrCodeResult() { //获取添加企微结果
@@ -346,8 +330,6 @@
this.clickFlag = true
}, 1000)
});
} catch (e) {
this.showError(e)
} finally {
setTimeout(() => {
this.clickFlag = true
@@ -446,7 +428,7 @@
this.form.accountInfoDTO.companyType=res?.data?.type
// 营业执照法人名称
this.form.person = res?.data?.person
// await this.QrCodeHandler();
await this.QrCodeHandler();
},
async licensePhotoHandler(file){// 开户许可证
const formData = new FormData();
@@ -460,8 +442,8 @@
ocrType: 15,
imageUrl: this.licensePhoto,
})
this.form.accountInfoDTO.accountNumber=res?.data?.accountNumber || ''
this.form.accountInfoDTO.accountName = res?.data?.accountBank || ''
this.form.accountInfoDTO.accountNumber=res?.data?.accountNumber
this.form.accountInfoDTO.accountName = res?.data?.accountBank
},
},
computed: {
@@ -481,17 +463,6 @@
padding-bottom: 100px;
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 {
width: 100%;
img {

View File

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

View File

@@ -263,7 +263,6 @@ import {
getDriverName,getDriverStatisticsKpi,
getRecentSupplierKpi,
} from "@/api/kpi.js"
import { getUserBO } from "@/api/order"
// querySupplierDriverStatisticsScore
import {myMixins} from "@/utils/myMixins"
import CircleChar from "@/views/kpi/components/circleChar.vue";
@@ -331,10 +330,6 @@ export default {
showScoreChart:true,
continueMonthKpi:[],
isBtn:false,//是否有信息变更申请按钮权限
source: 'App',
currentSupplierId: '',
userId: '',
enterTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
}
},
created() {
@@ -343,41 +338,13 @@ export default {
this.isZd = urlParams?.get('isZd') || ''
this.supplierId = urlParams?.get('supplierId') || ''
this.isBtn= Number(urlParams?.get('isBtn'))
this.source = urlParams?.get('source') || 'App'
},
async mounted() {
await this.checkMobile();
await this.initDate();
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: {
async getUserInfo() {
let res = await getUserBO();
this.userId = res.data.id;
this.currentSupplierId = res.data.supplierId
console.log('getUserBO', res)
},
applicateHandle() {
if (window.parent) {
const hasListener = window.parent.dispatchEvent(new Event('checkCloseDialog'));

View File

@@ -13,20 +13,23 @@
</div>
<div class="contentWrap">
<div>
为降低日常救援工作中的不可预期的车损赔付带来的运营风险和资金压力减少由此衍生而来的投诉顺应行业服务标准不断增长的局势中道救援自有车辆已全部投保了救援职业责任险
为降低日常救援工作中的不可预期的车损赔付带来的运营风险和资金压力减少由此衍生而来的可能投诉顺应行业服务标准不断增长的局势中道救援自有车辆已全部投保了救援职业责任险
</div>
<div>
通过交流了解我们的合作服务商日常运营中会遇到责任险或者货物险的投保理赔的问题为此我们与保司沟通协调特为与中道救援合作紧密的服务商提供救援职业责任险参保渠道解决大家的实际困难实现共同进步
通过日常的交流了解此险种对于服务商而言投保相对较很多服务商在无投保渠道的情况下选择了对于我们救援场景保障能力稍弱不太匹配的货物险从而从形成了现在很多救援车无保障或者特殊场景货物险理赔难的局面
</div>
<div>
为此中道救援经过与保司沟通协调特为与中道救援合作紧密的服务商提供救援职业责任险参保渠道提升服务商服务能力降低运营风险实现共同进步
</div>
<div>救援职业责任险简介</div>
<div> 1保额有50万和100万两套方案可选</div>
<div> 1综合保额100万元其中救援责任50万元物流责任50万元可全方位覆盖我们日常的经营活动</div>
<div> 2保费支付可采用救援服务费抵扣的方式降低资金压力</div>
<div> 3其他详情如需了解请与辖区区域经理联系</div>
<div> 如有好的建议需要交流请与18621558505曲仁杰联系</div>
<div> 有参保需要请点击下方参保按钮我们会与您联系</div>
<div> 3详细保险条款保费和其他问题如需了解请与辖区区域经理联系</div>
<div> 其他意见建议如需交流请与18621558505曲仁杰联系</div>
<div> 确认参保请点击下方参保按钮会有专人与贵司联系</div>
</div>
<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 class="poupCommon" v-if="showPoup">
<div class="showPoupContainer">
@@ -34,10 +37,12 @@
<img class="insure" src="@/assets/insured.png">
<div class="con">
<template v-if="used">
<div class="title">咨询已收到我们会与您联系</div>
<div class="title">您已成功申请参保请等待</div>
<div class="title">专人与贵司联系</div>
</template>
<template v-else>
<div class="title">请确认咨询</div>
<div class="title">请确认</div>
<div class="title">是否参保救援职业责任险</div>
</template>
<div class="btnWrap">
<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" />
<el-input
@blur="getList"
placeholder="牌照|车辆类型|落板|排放|品牌|描述|底座|刹车|自营"
placeholder="请输入"
v-model.trim="topSearch">
<img slot="suffix" class="search" src="@/assets/secondHandCar/search.png"/>
</el-input>
@@ -99,11 +99,6 @@
></i>
</template>
</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 class="contentWrap" v-show="!show">
<van-pull-refresh v-model="isLoading" @refresh="onRefresh" style="min-height:85vh">
@@ -228,7 +223,6 @@ export default {
showDatePicker: false,
areaShow:false,
isClearing:false,
wantSource: 0,
minDate: new Date(1970, 0, 1), // 设置最小可选日期1970年1月1日
maxDate: new Date(2099, 11, 31) // 设置最大可选日期2099年12月31日
}
@@ -273,10 +267,6 @@ export default {
this.setSearchVal();
this.getList()
},
wantSource(){
this.setSearchVal();
this.getList()
},
},
mounted() {
this.getSearchVal();
@@ -291,9 +281,6 @@ export default {
});
},
methods:{
toggleWantSource(){
this.wantSource = this.wantSource === 1 ? 0 : 1;
},
confirmHandle(val){
if(val[0].name.includes('市')){
this.areaName=val[0].name
@@ -369,7 +356,6 @@ export default {
sessionStorage.setItem('dateVal',this.dateVal);
sessionStorage.setItem('brandModel',this.brandModel);
sessionStorage.setItem('underpanBrand',this.underpanBrand);
sessionStorage.setItem('wantSource',String(this.wantSource));
},
getSearchVal(){
this.activeTab = Number(sessionStorage.getItem('indexActiveTab')) || 0;
@@ -385,7 +371,6 @@ export default {
this.dateVal=sessionStorage.getItem('dateVal') || '';
this.brandModel=sessionStorage.getItem('brandModel') || '';
this.underpanBrand=sessionStorage.getItem('underpanBrand') || '';
this.wantSource=Number(sessionStorage.getItem('wantSource')) || 0;
},
goMine(){//我的发布
this.$router.push({ name: "mineRelease"})
@@ -449,7 +434,6 @@ export default {
endTime:this.endTime,
brandModel:this.brandModel,
underpanBrand:this.underpanBrand,
wantSource:this.wantSource,
})
this.total=res.total
if(this.pageNum == 1){// 第一页直接赋值
@@ -542,9 +526,6 @@ export default {
border-radius: 20px;
border: 2px solid #264B94;
}
::v-deep .el-input__inner::placeholder{
font-size: 10px;
}
::v-deep .el-input__suffix{
top: 12px;
right: 10px;
@@ -641,22 +622,6 @@ export default {
.has-price{
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{
width: 100%;