Compare commits
10 Commits
ec974ed55c
...
prod-09-03
| Author | SHA1 | Date | |
|---|---|---|---|
| c22eeb2787 | |||
| 3033ef09df | |||
| b64912c982 | |||
| be0227c68b | |||
| b981a57ef5 | |||
| b836f3c979 | |||
| a5c88f11bb | |||
| 9b64456854 | |||
| 658c0c7db2 | |||
| 698f98bee7 |
@ -326,10 +326,17 @@ export function jumpPage(data){
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//
|
//发送确认参保
|
||||||
export function sendInsuranceEmail(){
|
export function sendInsuranceEmail(){
|
||||||
return request({
|
return request({
|
||||||
url:'/supplierAppV2/dispatchApp/user/sendInsuranceEmail',
|
url:'/supplierAppV2/dispatchApp/user/sendInsuranceEmail',
|
||||||
method:'POST',
|
method:'POST',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 判断服务商是否参保
|
||||||
|
export function isSendInsuranceEmail(){
|
||||||
|
return request({
|
||||||
|
url:'/supplierAppV2/dispatchApp/user/isSendInsuranceEmail',
|
||||||
|
method:'POST',
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -88,7 +88,8 @@
|
|||||||
<script>
|
<script>
|
||||||
import { Decimal } from 'decimal.js';
|
import { Decimal } from 'decimal.js';
|
||||||
import {myMixins} from "@/utils/myMixins"
|
import {myMixins} from "@/utils/myMixins"
|
||||||
import {notifyInvoiceList} from "@/api/mine"
|
import {notifyInvoiceList, jumpPage} from "@/api/mine"
|
||||||
|
import {Dialog} from "vant";
|
||||||
export default {
|
export default {
|
||||||
name: "invoicingNotify",
|
name: "invoicingNotify",
|
||||||
mixins:[myMixins],
|
mixins:[myMixins],
|
||||||
@ -154,7 +155,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
changeTabHandler() {
|
async changeTabHandler() {
|
||||||
this.pageNum = 1;
|
this.pageNum = 1;
|
||||||
this.notifyList = [];
|
this.notifyList = [];
|
||||||
this.checkList = [];
|
this.checkList = [];
|
||||||
@ -166,6 +167,20 @@ export default {
|
|||||||
this.status = 2;
|
this.status = 2;
|
||||||
this.dispatchAppSearchInvoiced = '';
|
this.dispatchAppSearchInvoiced = '';
|
||||||
this.pageSize = 10000
|
this.pageSize = 10000
|
||||||
|
let res = await this.getJumpHandler();
|
||||||
|
if(res?.data?.jump) {
|
||||||
|
Dialog.alert({
|
||||||
|
message: '您有暂未完成的培训,请在中道调度APP上完成培训,再进行发票上传',
|
||||||
|
confirmButtonText: '去培训',
|
||||||
|
confirmButtonColor: '#0E76F4',
|
||||||
|
showCancelButton: false,
|
||||||
|
}).then(async() => {
|
||||||
|
this.goPage('newTrainingList', { supplierId : this.supplierId })
|
||||||
|
}).catch(() => {
|
||||||
|
// on cancel
|
||||||
|
});
|
||||||
|
return false
|
||||||
|
}
|
||||||
} else if(this.active == 3) { // 已开票,需要分页
|
} else if(this.active == 3) { // 已开票,需要分页
|
||||||
this.status = '';
|
this.status = '';
|
||||||
this.dispatchAppSearchInvoiced = 1;
|
this.dispatchAppSearchInvoiced = 1;
|
||||||
@ -173,6 +188,10 @@ export default {
|
|||||||
}
|
}
|
||||||
this.getNotifyList()
|
this.getNotifyList()
|
||||||
},
|
},
|
||||||
|
async getJumpHandler() {
|
||||||
|
let res = await jumpPage();
|
||||||
|
return res
|
||||||
|
},
|
||||||
getMonth(item) {
|
getMonth(item) {
|
||||||
let str = '';
|
let str = '';
|
||||||
let startTime = new Date(item.createTime);
|
let startTime = new Date(item.createTime);
|
||||||
|
|||||||
@ -62,7 +62,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="upload_btn_wrap">
|
<div class="upload_btn_wrap">
|
||||||
<div class="btn_save" @click="createInvoiceHandler">保存</div>
|
<div class="btn_save" @click="createInvoiceHandler">保存</div>
|
||||||
<van-uploader :before-read="beforeRead" :after-read="afterRead" accept=".png,.jpg,.jpeg,.pdf,.ofd">
|
<van-uploader :before-read="beforeRead" use-before-read :after-read="afterRead" accept=".png,.jpg,.jpeg,.pdf,.ofd">
|
||||||
<div class="btn_upload">
|
<div class="btn_upload">
|
||||||
<img class="icon_upload" src="@/assets/icon_upload.png" alt="">
|
<img class="icon_upload" src="@/assets/icon_upload.png" alt="">
|
||||||
上传发票
|
上传发票
|
||||||
@ -76,13 +76,14 @@
|
|||||||
import { Decimal } from 'decimal.js';
|
import { Decimal } from 'decimal.js';
|
||||||
import { Dialog } from "vant";
|
import { Dialog } from "vant";
|
||||||
import { myMixins } from "@/utils/myMixins"
|
import { myMixins } from "@/utils/myMixins"
|
||||||
import { uploadInvoice, getBillingInfo, deleteInvoice, createBatch, jumpPage} from "@/api/mine"
|
import { uploadInvoice, getBillingInfo, deleteInvoice, createBatch} from "@/api/mine"
|
||||||
export default {
|
export default {
|
||||||
name: "uploadInvoice",
|
name: "uploadInvoice",
|
||||||
mixins:[ myMixins ],
|
mixins:[ myMixins ],
|
||||||
data(){
|
data(){
|
||||||
return {
|
return {
|
||||||
list: [],
|
list: [],
|
||||||
|
fileObj: '',
|
||||||
invoiceMoneyTotal: 0,
|
invoiceMoneyTotal: 0,
|
||||||
tableData: [],
|
tableData: [],
|
||||||
activeObj: {},
|
activeObj: {},
|
||||||
@ -132,10 +133,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async getJumpHandler() {
|
/* async getJumpHandler() {
|
||||||
let res = await jumpPage();
|
let res = await jumpPage();
|
||||||
return res
|
return res
|
||||||
},
|
},*/
|
||||||
async initData() {
|
async initData() {
|
||||||
this.list = JSON.parse(localStorage.getItem('list'));
|
this.list = JSON.parse(localStorage.getItem('list'));
|
||||||
this.batchIds = [];
|
this.batchIds = [];
|
||||||
@ -235,18 +236,12 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
async beforeRead (file) {
|
async beforeRead (file) {
|
||||||
let res = await this.getJumpHandler();
|
|
||||||
if(res?.data?.jump) {
|
|
||||||
this.$message.warning("您有没有完成的培训,请在中道调度APP上完成培训,再进行发票上传")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
const FileExt = file.name.replace(/.+\./, "");
|
const FileExt = file.name.replace(/.+\./, "");
|
||||||
if (['jpg', 'png', 'jpeg', 'pdf', 'ofd'].indexOf(FileExt.toLowerCase()) === -1) {
|
if (['jpg', 'png', 'jpeg', 'pdf', 'ofd'].indexOf(FileExt.toLowerCase()) === -1) {
|
||||||
this.$toast('请上传后缀名为jpg、jpeg、png、pdf、ofd的文件!')
|
this.$toast('请上传后缀名为jpg、jpeg、png、pdf、ofd的文件!')
|
||||||
return false;
|
return false
|
||||||
}
|
}
|
||||||
this.$set(this.activeObj, 'fileType', FileExt)
|
this.$set(this.activeObj, 'fileType', FileExt)
|
||||||
return true
|
|
||||||
},
|
},
|
||||||
async afterRead (file) {
|
async afterRead (file) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@ -63,7 +63,7 @@
|
|||||||
<div :class="{'reciceOrder':true,'webCom':!isMobile,'evaluate':isMobile}">
|
<div :class="{'reciceOrder':true,'webCom':!isMobile,'evaluate':isMobile}">
|
||||||
<div class="title">客户评价</div>
|
<div class="title">客户评价</div>
|
||||||
<div class="reciceOrderIWrap" v-if="indexData">
|
<div class="reciceOrderIWrap" v-if="indexData">
|
||||||
<circle-char ref="Doughnut1" :data="indexData && indexData.complainOrderRate" :title-text="'投诉率'" :bg-color="Number(indexData?.complainOrderRate || 0) <= 0.01 ? 'green' : 'red'"
|
<circle-char ref="Doughnut1" :data="indexData && indexData.complainOrderRate" :title-text="'投诉率'" :bg-color="Number(indexData?.complainOrderRate || 0) <= 0.1 ? 'green' : 'red'"
|
||||||
:is-store="false" @clickComplain="clickJumpHandle(7)"></circle-char>
|
:is-store="false" @clickComplain="clickJumpHandle(7)"></circle-char>
|
||||||
<circle-char ref="Doughnut2" :data="indexData && indexData.customerSatisfaction" :title-text="'平安好评率'"
|
<circle-char ref="Doughnut2" :data="indexData && indexData.customerSatisfaction" :title-text="'平安好评率'"
|
||||||
:bg-color="Number(indexData?.customerSatisfaction || 0) >= 99.4 ? 'green' : 'red'"></circle-char>
|
:bg-color="Number(indexData?.customerSatisfaction || 0) >= 99.4 ? 'green' : 'red'"></circle-char>
|
||||||
@ -91,7 +91,7 @@
|
|||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<div class="center common">
|
<div class="center common">
|
||||||
<div class="num" :class="{'numRed': Number(indexData?.polymerizationSuccessArriving) > 22, 'numGreen': Number(indexData?.polymerizationSuccessArriving) <= 22 }">{{ indexData && indexData.polymerizationSuccessArriving }}</div>
|
<div class="num" :class="{'numRed': Number(indexData?.polymerizationSuccessArriving) > 22, 'numGreen': Number(indexData?.polymerizationSuccessArriving) <= 22 }">{{ indexData && indexData.polymerizationSuccessArriving }}</div>
|
||||||
<div class="itemTitle">集合成功到达时效(分)</div>
|
<div class="itemTitle">平安聚合成功到达时效(分)</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<div class="right common">
|
<div class="right common">
|
||||||
@ -1184,13 +1184,10 @@ export default {
|
|||||||
]
|
]
|
||||||
} else if (this.active === 11) {//车辆在线情况
|
} else if (this.active === 11) {//车辆在线情况
|
||||||
this.labelList = [
|
this.labelList = [
|
||||||
{label: '日期', prop: 'date'},
|
|
||||||
{label: '案件编号', prop: 'orderCode'},
|
{label: '案件编号', prop: 'orderCode'},
|
||||||
{label: '服务内容', prop: 'serviceName'},
|
{label: '服务内容', prop: 'serviceName'},
|
||||||
{label: '聚合分类', prop: 'workOrderTypeString'},
|
{label: '聚合分类', prop: 'workOrderTypeString'},
|
||||||
{label: '聚合供应商', prop: 'supplierName'},
|
{label: '聚合信息', prop: 'rescuePersonName'},
|
||||||
{label: '聚合车辆', prop: 'driverName'},
|
|
||||||
{label: '聚合师傅手机号', prop: 'driverPhone'},
|
|
||||||
{label: '创建时间', prop: 'orderCreateTime'},
|
{label: '创建时间', prop: 'orderCreateTime'},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -1223,9 +1220,9 @@ export default {
|
|||||||
this.startTime = dayjs(new Date()).format('YYYY-MM') + '-01 00:00:00'
|
this.startTime = dayjs(new Date()).format('YYYY-MM') + '-01 00:00:00'
|
||||||
this.endTime = dayjs(new Date()).format('YYYY-MM') + '-' + this.getDayLen()+' 23:59:59'*/
|
this.endTime = dayjs(new Date()).format('YYYY-MM') + '-' + this.getDayLen()+' 23:59:59'*/
|
||||||
// test
|
// test
|
||||||
let _testDate = new Date('2024-11-01 00:00:01')
|
// let _testDate = new Date('2024-11-01 00:00:01')
|
||||||
|
|
||||||
const today = dayjs(_testDate); // 获取当前日期
|
const today = dayjs(); // 获取当前日期
|
||||||
const currentDay = today.date(); // 获取今天是几号(1-31)
|
const currentDay = today.date(); // 获取今天是几号(1-31)
|
||||||
let targetMonth = today; // 默认目标月份是当前月
|
let targetMonth = today; // 默认目标月份是当前月
|
||||||
if (currentDay === 1) {
|
if (currentDay === 1) {
|
||||||
@ -1306,8 +1303,8 @@ export default {
|
|||||||
{ 'month': '拒单量' },{ 'month': '拒单率(%)' },{ 'month': '超时接单量' },{ 'month': '超时率(%)' },{ 'month': '客户取消率(%)' }]
|
{ 'month': '拒单量' },{ 'month': '拒单率(%)' },{ 'month': '超时接单量' },{ 'month': '超时率(%)' },{ 'month': '客户取消率(%)' }]
|
||||||
let props = 'prop' //自定义字段名称
|
let props = 'prop' //自定义字段名称
|
||||||
this.detailList?.map((item,index) => {
|
this.detailList?.map((item,index) => {
|
||||||
|
let _dispatchOrderCount = Number(item.receiveOrderCount) + Number(item.refuseOrderCount)
|
||||||
item.dispatchOrderCount=this.formatCurrency1( item.dispatchOrderCount);
|
item.dispatchOrderCount=this.formatCurrency1( _dispatchOrderCount );
|
||||||
item.receiveOrderCount=this.formatCurrency1( item.receiveOrderCount);
|
item.receiveOrderCount=this.formatCurrency1( item.receiveOrderCount);
|
||||||
item.finishOrderCount=this.formatCurrency1( item.finishOrderCount);
|
item.finishOrderCount=this.formatCurrency1( item.finishOrderCount);
|
||||||
item.refuseOrderCount=this.formatCurrency1( item.refuseOrderCount);
|
item.refuseOrderCount=this.formatCurrency1( item.refuseOrderCount);
|
||||||
@ -1466,8 +1463,8 @@ export default {
|
|||||||
{label: '日', prop: 'date'},
|
{label: '日', prop: 'date'},
|
||||||
{label: '投诉量', prop: 'complainOrderCount'},
|
{label: '投诉量', prop: 'complainOrderCount'},
|
||||||
{label: '投诉率', prop: 'complainOrderRate'},
|
{label: '投诉率', prop: 'complainOrderRate'},
|
||||||
{label: '好评量', prop: 'favorableCount'},
|
/* {label: '好评量', prop: 'favorableCount'},
|
||||||
{label: '好评率', prop: 'favorableRate'},
|
{label: '好评率', prop: 'favorableRate'},*/
|
||||||
{label: '平安评价率', prop: 'pinganEvaluateRate'},
|
{label: '平安评价率', prop: 'pinganEvaluateRate'},
|
||||||
{label: '平安好评率', prop: 'pinganFavorableRate'},
|
{label: '平安好评率', prop: 'pinganFavorableRate'},
|
||||||
]
|
]
|
||||||
@ -1487,7 +1484,7 @@ export default {
|
|||||||
this.labelList = [
|
this.labelList = [
|
||||||
{label: '日', prop: 'date'},
|
{label: '日', prop: 'date'},
|
||||||
{label: '接单时效(分)', prop: 'receiving'},
|
{label: '接单时效(分)', prop: 'receiving'},
|
||||||
{label: '3分钟联系客户率', prop: 'threeMinutesReceivingRate'},
|
{label: '3分钟联系客户率', prop: 'threeMinutesContactRate'},
|
||||||
{label: '到达时效(分)', prop: 'arriving'},
|
{label: '到达时效(分)', prop: 'arriving'},
|
||||||
{label: '平安聚合成功到达时效(分)', prop: 'pinganJuheSuccessArriving'},
|
{label: '平安聚合成功到达时效(分)', prop: 'pinganJuheSuccessArriving'},
|
||||||
]
|
]
|
||||||
|
|||||||
@ -29,17 +29,24 @@
|
|||||||
<div> 三、如确认参保,请点击下方“参保”按钮,会有专人与贵司联系。</div>
|
<div> 三、如确认参保,请点击下方“参保”按钮,会有专人与贵司联系。</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="upload_btn_wrap">
|
<div class="upload_btn_wrap">
|
||||||
<div class="btn_save" @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">
|
||||||
<img class="insured" src="@/assets/insured-jianbian.png">
|
<img class="insured" src="@/assets/insured-jianbian.png">
|
||||||
<img class="insure" src="@/assets/insured.png">
|
<img class="insure" src="@/assets/insured.png">
|
||||||
<div class="con">
|
<div class="con">
|
||||||
<div class="title">请确认</div>
|
<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>
|
||||||
|
</template>
|
||||||
<div class="btnWrap">
|
<div class="btnWrap">
|
||||||
<div class="btn confirmBtn" @click="saveHandle">确认</div>
|
<div v-if="used" class="btn confirmBtn" @click="showPoup = false">确认</div>
|
||||||
|
<div v-else class="btn confirmBtn" @click="saveHandle">确认</div>
|
||||||
<div class="btn closeBtn" @click="showPoup = false">取消</div>
|
<div class="btn closeBtn" @click="showPoup = false">取消</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -50,17 +57,19 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {myMixins} from "@/utils/myMixins"
|
import {myMixins} from "@/utils/myMixins"
|
||||||
import {sendInsuranceEmail} from "@/api/mine"
|
import {sendInsuranceEmail,isSendInsuranceEmail} from "@/api/mine"
|
||||||
export default {
|
export default {
|
||||||
name: "insuredPage",
|
name: "insuredPage",
|
||||||
mixins: [myMixins],
|
mixins: [myMixins],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
showPoup: false,
|
showPoup: false,
|
||||||
|
used:false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
|
let res=await isSendInsuranceEmail()
|
||||||
|
this.used=res.data
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async saveHandle() {
|
async saveHandle() {
|
||||||
@ -120,7 +129,7 @@ export default {
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
.btn_save {
|
.btn_save {
|
||||||
background: #354D93;
|
//background: #354D93;
|
||||||
margin-right: 4px;
|
margin-right: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user