3 Commits

19 changed files with 7265 additions and 1726 deletions

113
package-lock.json generated
View File

@ -1713,9 +1713,9 @@
}
},
"@vant/icons": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/@vant/icons/-/icons-3.0.2.tgz",
"integrity": "sha512-4OlRVMd0uiDtD9hgSISZW8hB95vU0fFtc41tQchRIyiXkR0tS+DydZOLb8/bQkithrNWhW7Uud38MbKjlJ9lJw=="
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/@vant/icons/-/icons-1.8.0.tgz",
"integrity": "sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg=="
},
"@vant/popperjs": {
"version": "1.3.0",
@ -2030,49 +2030,6 @@
"webpack-merge": "^5.7.3",
"webpack-virtual-modules": "^0.4.2",
"whatwg-fetch": "^3.6.2"
},
"dependencies": {
"@vue/vue-loader-v15": {
"version": "npm:vue-loader@15.11.1",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz",
"integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==",
"dev": true,
"requires": {
"@vue/component-compiler-utils": "^3.1.0",
"hash-sum": "^1.0.2",
"loader-utils": "^1.1.0",
"vue-hot-reload-api": "^2.3.0",
"vue-style-loader": "^4.1.0"
},
"dependencies": {
"hash-sum": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
"integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
"dev": true
}
}
},
"json5": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
"requires": {
"minimist": "^1.2.0"
}
},
"loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^1.0.1"
}
}
}
},
"@vue/cli-shared-utils": {
@ -2237,6 +2194,47 @@
}
}
},
"@vue/vue-loader-v15": {
"version": "npm:vue-loader@15.11.1",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz",
"integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==",
"dev": true,
"requires": {
"@vue/component-compiler-utils": "^3.1.0",
"hash-sum": "^1.0.2",
"loader-utils": "^1.1.0",
"vue-hot-reload-api": "^2.3.0",
"vue-style-loader": "^4.1.0"
},
"dependencies": {
"hash-sum": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
"integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
"dev": true
},
"json5": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
"requires": {
"minimist": "^1.2.0"
}
},
"loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^1.0.1"
}
}
}
},
"@vue/web-component-wrapper": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
@ -3544,16 +3542,10 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
},
"dayjs": {
"version": "1.11.13",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
},
"de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
"integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
"dev": true
"integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="
},
"debug": {
"version": "4.3.4",
@ -4888,8 +4880,7 @@
"he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
},
"highlight.js": {
"version": "10.7.3",
@ -5517,8 +5508,7 @@
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"lodash.debounce": {
"version": "4.0.8",
@ -8035,12 +8025,12 @@
}
},
"vant": {
"version": "2.13.2",
"resolved": "https://registry.npmjs.org/vant/-/vant-2.13.2.tgz",
"integrity": "sha512-anZbbLqXCq+rUJk10D67mn+V/1/i9tfOTdoR+64B0e+0BzV3KFgpHBF76noLa+yX9i/L+8DeL560WMk0GEN38g==",
"version": "2.12.54",
"resolved": "https://registry.npmjs.org/vant/-/vant-2.12.54.tgz",
"integrity": "sha512-t7DCiLxNosDrg0Jm5EY9p0A5cAMo5OadmizbYtPEc0ru+OJKEa3kcfxtKIK5on7ZPqoOkyYJt8e6BQ1VDMPsrg==",
"requires": {
"@babel/runtime": "7.x",
"@vant/icons": "^3.0.2",
"@vant/icons": "^1.7.1",
"@vant/popperjs": "^1.1.0",
"@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
"vue-lazyload": "1.2.3"
@ -8255,7 +8245,6 @@
"version": "2.7.14",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz",
"integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==",
"dev": true,
"requires": {
"de-indent": "^1.0.2",
"he": "^1.2.0"

View File

@ -18,7 +18,7 @@
"qs": "^6.11.2",
"sass": "^1.65.1",
"sass-loader": "^13.3.2",
"vant": "^2.13.2",
"vant": "^2.12.54",
"vue": "^2.6.14",
"vue-router": "^3.0.7",
"vuex": "^3.6.2",

View File

@ -3,7 +3,6 @@
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- <meta name="viewport" content="width=device-width, initial-scale=1.0">-->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover,user-scalable=no">
<meta name="format-detection" content="telephone=yes"/>
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
@ -30,16 +29,16 @@
}
</script>
<script src="https://webapi.amap.com/maps?v=1.4.15&key=2560bbf04daef66c810c5e6a97e8c508&plugin=AMap.Polyline"></script>
<!-- <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>-->
<script>
// VConsole 默认会挂载到 `window.VConsole` 上
// let vConsole = new window.VConsole();
(function (doc, win) {
console.log("==window.location.pathname===",window.location.pathname)
let docEl = doc.documentElement
let resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
recalc = function () {
var clientWidth = docEl.clientWidth;
// console.log("clientWidth",clientWidth)
if (!clientWidth) return;
if (clientWidth < 400) {
clientWidth = 400;
@ -49,20 +48,13 @@
if (!doc.addEventListener) return;
var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
if (isMobile) {// 是移动端不变
// console.log("是移动端不变")
}else{
if(window.location.pathname=='/h5/supplier/dispatch/kpiIndex'){
// console.log("执行了执行了")
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
}
/*else{
console.log("走着了这种饿 ")
}*/
}
// console.log("isMobile",isMobile)
})(document, window);
</script>
</body>
</html>

View File

@ -132,7 +132,7 @@ export function deleteImage(data){
})
}
//新增记账图片 form-data
/*export function insertRecordPicture(data){
export function insertRecordPicture(data){
return request({
url:'/supplierAppV2/dispatchApp/accountRecord/insertRecordPicture',
method:'POST',
@ -142,7 +142,7 @@ export function deleteImage(data){
// 'Content-Type': 'multipart/form-data',
// },
})
}*/
}
//开票通知列表
export function notifyInvoiceList(data){
@ -162,7 +162,7 @@ export function notifyInvoiceDetail(data){
data
})
}
// 调度app获取新签列表
// /supplier/supplierTrainingMaterials/pageList 获取培训材料列表
export function pageList(data){
return request({
url:'/supplierAppV2/dispatchApp/user/supplierTrainingMaterialsPageList',
@ -171,31 +171,6 @@ export function pageList(data){
data
})
}
// 司机app获取新签列表
export function driverTrainList(key){
return request({
url:'/supplier/supplierTraining/trainingTask',
method:'GET',
params:key
})
}
//获取普通材料
export function getNormalList(key) {
return request({
url: '/supplier/supplierTraining/normalList',
method: 'GET',
params:key
});
}
//获取培训材料
export function getTrainingList(key) {
return request({
url: '/supplier/supplierTraining/trainingList',
method: 'GET',
params:key
});
}
//用户操作权限
export function userOperationPermissions(){
return request({

View File

@ -131,14 +131,6 @@ const routes = [
path: '/trainDocment',
name: 'trainDocment',
component:()=>import('@/views/documentView/trainDocment.vue'),
meta: {
title:'培训文档',
}
},
{
path: '/diverTrainDocment',
name: 'diverTrainDocment',
component:()=>import('@/views/documentView/diverTrainDocment.vue'),
meta: {
title:'培训文档'
}
@ -188,15 +180,7 @@ const routes = [
name: 'newTrainingList',
component:()=>import('@/views/newcomerTraining/newTrainingList.vue'),
meta: {
title:'新服务商培训'
}
},
{
path: '/driverTrainingList',
name: 'driverTrainingList',
component:()=>import('@/views/newcomerTraining/driverTrainingList.vue'),
meta: {
title:'新师傅培训'
title:'新培训'
}
},
{

View File

@ -1,9 +1,8 @@
@import "@/styles/mixin.scss";
.wrap{
@include wh(100%,100%);
background-color: #F4F5F7;
overflow-y: auto;
}
.navBar{
margin-bottom: 46px;
@ -14,44 +13,16 @@
@include wh(17px, 17px);
}
}
.tab_wrap {
@include fontWeightSize(bold, 12px);
display: flex;
justify-content: space-around;
padding: 5px 0 5px 0;
@include colorOpa(#737373,0.7);
div {
padding-top: 8px;
}
.active {
color: #3678FF;
position: relative;
}
.active:after {
content: '';
display: block;
@include wh(50px,2px);
background: linear-gradient(270deg, #33A3FF 0%, #176AFE 100%);
border-radius: 2px;
position: absolute;
margin-top: 3px;
left: 50%;
transform: translateX(-50%);
}
}
.contentWrap{
@include sizingPadding(0,8px);
overflow-y: auto;
width: 100%;
height: calc(100% - 100px);
margin-top: 10px;
margin-top: 20px;
.itemWrap{
margin-bottom: 16px;
width: 100%;
//@include wh(100%, 300px);
@include wh(100%, 300px);
background: #FFFFFF;
box-shadow: 0px 2px 10px 0px rgba(216, 216, 216, 0.5);
@include sizingPadRadius(6px ,0,6px);
@include sizingPadRadius(6px ,0,3px);
@include flexAround;
@include fontWeightSize(400, 12px);
.flexBetween{
@ -60,16 +31,18 @@
.common{
margin: 0 15px ;
}
.time{
color: rgba(0,0,0,0.7);
margin-top: 5px;
}
.imgWrap{
@include wh(100%,200px);
position: relative;
margin: 6px 0;
img{
@include wh(100%,100%);
@include wh(100%,200px);
}
.name{
position: absolute;
left: 30px;
bottom: 30px;
@include fontWeightSize(bold,14px);
color: #FFFFFF;
}
}
.left{

View File

@ -1,103 +0,0 @@
@import "@/styles/mixin.scss";
::v-deep .van-nav-bar__content{
background-color: #3A3A3A !important;
}
.wrap{
@include wh(100%,100%);
background-color: #F4F5F7;
}
.navBar{
margin-bottom: 46px;
}
.search{
color: #AAADB3 !important;
font-weight: bolder;
margin-right: 10px;
}
.navLeft{
display: flex;
flex-direction: column;
color: #9C9C9C;
font-size: 8px;
.icon{
font-size: 10px;
font-weight: bold;
margin-right: 5px;
margin-top: 5px;
}
}
.statisticContainer{
box-sizing: border-box;
padding: 8px;
}
.statisticWrap{
@include wh(100%,100px);
background: #FFFFFF;
box-sizing: border-box;
padding: 8px 8px 15px;
border-radius: 8px;
border: 1px solid #c7c1c1;
display: flex;
flex-direction: column;
justify-content: space-between;
.line1{
display: flex;
justify-content: space-between;
span:first-child{
font-weight: bolder;
}
span:last-child{
opacity: .7;
//font-size: 12px;
}
}
.numWrap{
display: flex;
justify-content: space-around;
div{
display: flex;
flex-direction: column;
align-items: center;
font-size: 14px;
font-weight: 500;
span:first-child{
margin-bottom: 3px;
font-size: 18px;
}
}
}
}
.rightWrap {
@include flexCenter;
.img2 {
@include wh(17px, 17px);
}
}
.driver_tab_wrap {
font-size: 12px;
display: flex;
justify-content: space-around;
padding: 5px 0 5px 0;
div {
padding-top: 8px;
}
.active {
position: relative;
}
.active:after {
content: '';
display: block;
@include wh(100px,2px);
background-color: #E8A524;
border-radius: 2px;
position: absolute;
margin-top: 3px;
left: 50%;
transform: translateX(-50%);
}
}
.empty{
margin-top: 14px;
}

View File

@ -16,20 +16,18 @@ localStorage.setItem('token', token);
service.interceptors.request.use(
config => {
let reqUrl=config.url
// console.log("reqUrl",reqUrl)
config.data = config.contentType ? config.data : qs.stringify(config.data)
config.headers['Content-Type'] = config.contentType || 'application/x-www-form-urlencoded'
let token = localStorage.getItem('token');
// alert(token);
// let token='4099761587129c46b03c9316c9e866c9'
// let token='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzb25nIiwiYXVkIjpbInN1cHBsaWVyLWFwcCJdLCJuYmYiOjE3MTI0NTQ5NTMsInVzZXJfaW5mbyI6eyJ1c2VySWQiOjU0NjU0LCJwaG9uZSI6IjE3NjMwMDM1NjU4IiwibmFtZSI6InNvbmciLCJzdXBwbGllck5hbWUiOiJDLeS4iua1t-a1i-ivleacjeWKoeWVhiIsInN1cHBsaWVySWQiOjMzMDQxLCJzdXBwbGllclR5cGUiOjIsInVzZXJuYW1lIjoic29uZyIsInVzZXJUeXBlIjoicmVzY3VlQXBwIiwiZGV2aWNlSWQiOiIyMmI0OWNhMjBmOWI4MzMwZDk4NzIxNzNmMzllYTY4YmMiLCJhdXRob3JpdGllcyI6W119LCJzY29wZSI6WyJhbGwiXSwiaXNzIjoiaHR0cHM6Ly9zaW5vYXNzaXN0LmNvbSIsImV4cCI6MTcxMjU0MTM1MywiaWF0IjoxNzEyNDU0OTUzfQ.sPU9_OD_TOWcTwqmlawEGyo4mCPrEaRYw2R02gnvYJw'
// console.log("tokentokentoken",token)
if (reqUrl.includes("/driverApp")) {
// console.log("司机app")
config.headers['token'] = `${token}`;
} else if(reqUrl.includes("/supplierApp") || reqUrl.includes("/supplierKPI") || reqUrl.includes('/supplier/select')){
// console.log("调度app服务商kpi")
config.headers['Authorization'] = `${token}`;
} else {
config.headers['token'] = `${token}`;
console.log("调度app")
config.headers['Authorization'] = `${token}`;
}
return config
},

View File

@ -34,27 +34,20 @@ export const myMixins = {
window.android.sendMessage("goBack");
}
},
goH5Detail(item,type){//h5传参到app文档资料培训文档
// console.log("type",type)
goH5Detail(item){//h5传参到app文档资料培训文档
let data = {
"action": "goTraining",
"params": {
"id":type == '培训文档' ? Number(1000000+item.id) : item.id,
"id": item.id,
}
};
let u = navigator.userAgent;
let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
if(isiOS){
// console.log("data",data)
window.webkit.messageHandlers.nativeObject.postMessage(data);
}else {
if(type == '培训文档'){
window.android.sendMessage("articleId=" +'q'+ item.id);
}else {
window.android.sendMessage("articleId=" + item.id);
}
}
},
h5GoBack(){
this.$router.back();

View File

@ -1,175 +0,0 @@
<template>
<div class="wrap">
<div class="navBar">
<van-nav-bar
:border="false"
:fixed="true"
:safe-area-inset-top="true"
>
<template slot="title">
<van-field
v-model="keyword"
placeholder="名称/关键词/简介"
>
</van-field>
</template>
<template slot="left">
<div class="navLeft" @click="goBack">
<van-icon class="icon" name="arrow-left" />
<div>返回</div>
</div>
</template>
<template slot="right">
<van-icon class="search" name="search" size="20" @click="getTrainingList"/>
</template>
</van-nav-bar>
</div>
<div class="statisticContainer">
<div class="statisticWrap">
<div class="line1">
<span>培训统计</span>
<span>更新时间{{time}}</span>
</div>
<div class="numWrap">
<div>
<span>{{ numInfo?.totalNum }}</span>
<span>文章总数</span>
</div>
<div>
<span>{{ numInfo?.readNum }}</span><span>已培训数量</span>
</div>
<div>
<span>{{ numInfo?.notReadNum }}</span> <span>未培训数量</span>
</div>
</div>
</div>
</div>
<div class="driver_tab_wrap">
<div v-for="(item, index) in tabArr" :key="index" :class="{'active' : activeIndex == index}"
@click="changeTab(index)">
{{ item.name }}
</div>
</div>
<div class="contentWrap" v-show="!showEmpty">
<van-pull-refresh v-model="isLoading" @refresh="onRefresh" style="min-height:85vh">
<div class="itemWrap" v-for="(item,index) in pageList" :key="index" @click="goH5Detail(item,'培训文档')">
<div class="info flexBetween common">
<div class="title">{{ item.name }}<span v-if="item.mustRead===1" class="read">必读</span></div>
</div>
<div class="imgWrap">
<img :src="item.themePicture">
</div>
<div class="num common">{{ item.synopsis }}</div>
<div class="info flexBetween common" >
<div class="time">{{ item.pushTime }}</div>
<span style="color: red;font-size: 14px;margin-right: 8px" :class="item.alreadyRead===1 ? 'alRead' : ''">{{ item.alreadyRead===1 ? '已处理' : '未处理' }}</span>
</div>
</div>
</van-pull-refresh>
</div>
<div class="empty" v-show="showEmpty">
<img src="@/assets/empty.png" />
</div>
</div>
</template>
<script>
import {myMixins} from "@/utils/myMixins"
import {getTrainingList} from "@/api/mine"
import {timeFormat} from "@/utils/common";
export default {
name: "diverTrainDocment",
computed: {
},
mixins:[myMixins],
data(){
return{
tabArr: [{name: '车型技术参数', status: 1}, {name: '中道服务规范', status:2},{name: '中道小课堂', status: 3}],
activeIndex: 0,
pageList:[],
totalList:[],
numInfo:'',
keyword:'',
show:false,
showEmpty:false,
isLoading:false,
driverId:'',
time:'',
}
},
mounted() {
const urlParams = new URLSearchParams(window.location.search);
this.driverId = urlParams.get('driverId');
this.time=timeFormat(Date.now())
this.getTrainingList();
document.addEventListener('visibilitychange', async ( ) => {
let state = document.visibilityState
if (state == 'hidden') { // 用户离开了
}
if (state == 'visible') {
this.getTrainingList();
}
});
},
methods:{
onRefresh() {
this.getTrainingList()
setTimeout(() => {
this.$toast('刷新成功');
this.isLoading = false;
}, 1000);
},
async changeTab(index) {
this.activeIndex = index
await this.getTrainingList()
},
async getTrainingList(){
let res= await getTrainingList({
type:1,
id:this.driverId,
text:this.keyword || '',
})
this.totalList=[]
this.pageList=[]
this.numInfo=res.data
this.totalList=res.data.list
let result=[]
if(this.activeIndex === 0){
result=this.totalList?.filter(q => q.title === '车型技术参数');
}else if(this.activeIndex === 1){
result=this.totalList?.filter(q => q.title === '中道服务规范');
}else if(this.activeIndex === 2){
result=this.totalList?.filter(q => q.title === '中道小课堂');
}
if(result){
this.pageList=result[0].materials
this.time=timeFormat(Date.now())
}
if(this.pageList?.length === 0){
this.showEmpty = true
}else {
this.showEmpty = false
}
},
}
}
</script>
<style scoped lang="scss">
@import "@/styles/common.scss";
@import "@/styles/mixin.scss";
@import "@/styles/docment.scss";
@import "@/styles/driverDocment.scss";
.read{
padding: 2px 8px;
border-radius: 5px;
border: 1px solid red;
color: red;
font-size: 8px;
}
.alRead{
color: #cccccc !important;
}
.contentWrap{
height: calc(100% - 180px) !important;
}
</style>

View File

@ -1,11 +1,9 @@
<template>
<div class="wrap">
<template v-if="supplierId">
<div class="navBar">
<van-nav-bar
left-arrow
left-arrow-color="#FFFFFF"
class="supplier"
:border="false"
:fixed="true"
:safe-area-inset-top="true"
@ -13,7 +11,7 @@
>
<template slot="title">
<div v-show="!show">文档资料</div>
<van-field v-model="keyword" placeholder="请输入关键词" v-show="show" @input="getNormalList"/>
<van-field v-model="keyword" placeholder="请输入关键词" v-show="show" @input="getList"/>
</template>
<template slot="right">
<div class="rightWrap" @click="show = !show">
@ -23,37 +21,8 @@
</template>
</van-nav-bar>
</div>
</template>
<template v-if="driverId">
<div class="navBar">
<van-nav-bar
:border="false"
:fixed="true"
:safe-area-inset-top="true"
>
<template slot="title">
<van-field
v-model="keyword"
placeholder="名称/关键词/简介"
>
<!-- <template #button>
<van-icon class="search" name="search" size="20" @click="getTrainingList"/>
</template>-->
</van-field>
</template>
<template slot="left">
<div class="navLeft" @click="goBack">
<van-icon class="icon" name="arrow-left" />
<div>返回</div>
</div>
</template>
<template slot="right">
<van-icon class="search" name="search" size="20" @click="getNormalList"/>
</template>
</van-nav-bar>
</div>
</template>
<div :class="supplierId ? 'tab_wrap' : 'driver_tab_wrap'">
<div class="tab_wrap">
<div v-for="(item, index) in tabArr" :key="index" :class="{'active' : activeIndex == index}"
@click="changeTab(index)">
{{ item.name }}
@ -61,15 +30,23 @@
</div>
<div class="contentWrap" v-show="!showEmpty">
<van-pull-refresh v-model="isLoading" @refresh="onRefresh" style="min-height:85vh">
<div class="itemWrap" v-for="(item,index) in pageList" :key="index" @click="goH5Detail(item,'文档资料')">
<div class="itemWrap" v-for="(item,index) in pageList" :key="index" @click="goH5Detail(item)">
<div class="info flexBetween common">
<div class="title">{{ item.name }}</div>
<div class="title">{{ item.pushUser }}</div>
<div class="time">{{ item.pushTime }}</div>
</div>
<div class="imgWrap">
<img :src="item.themePicture">
<div class="name">{{item.name}}</div>
</div>
<div class="num common">{{ item.synopsis }}</div>
<div class="time common">{{ item.pushTime }}</div>
<div class="doc flexBetween common">
<div class="left">{{ item.docType?.label }}</div>
<div class="right">
<span style="color: red;font-size: 14px;margin-right: 8px">{{ item.listShowButton==null ? '已处理' : '未处理' }}</span>
<span style="opacity: .9;color: #ccc">阅读 {{item.readCount}}</span>
</div>
</div>
</div>
</van-pull-refresh>
</div>
@ -81,33 +58,30 @@
<script>
import {myMixins} from "@/utils/myMixins"
import {getNormalList} from "@/api/mine";
import {pageList} from "@/api/mine";
export default {
name: "docmentList",
name: "trainDocment",
mixins:[myMixins],
data(){
return{
tabArr: [{name: '车型技术参数', status: 1}, {name: '中道服务规范', status:2},{name: '中道小课堂', status: 3}, {name: '新手入列', status: 4},],
tabArr: [{name: '中道制度', status: 1}, {name: '技术参数', status: 2},],
activeIndex: 0,
pageList:[],
totalList:[],
pageNum:1,
pageSize:10,
keyword:'',
trainingType:1,
isLoading:false,
show:false,
showEmpty:false,
supplierId:'',
driverId:'',
showEmpty:false
}
},
mounted() {
const urlParams = new URLSearchParams(window.location.search);
this.supplierId = urlParams.get('supplierId');
this.driverId = urlParams.get('driverId');
this.getNormalList()
this.getList()
},
methods:{
onRefresh() {
this.getNormalList()
this.getList()
setTimeout(() => {
this.$toast('刷新成功');
this.isLoading = false;
@ -115,41 +89,32 @@ export default {
},
async changeTab(index) {
this.activeIndex = index
await this.getNormalList()
},
async getNormalList(){
let res= await getNormalList({
type:this.supplierId ? 2 : 1,
// type:2,
id: this.supplierId ? this.supplierId : this.driverId,
// id:this.supplierId,//33041,
text:this.keyword || '',
})
this.totalList=[]
this.pageList=[]
this.totalList=res.data.list
let result=[]
this.pageNum = 1
this.pageList = [];
if(this.activeIndex === 0){
result=this.totalList?.filter(q => q.title === '车型技术参数');
}else if(this.activeIndex === 1){
result=this.totalList?.filter(q => q.title === '中道服务规范');
}else if(this.activeIndex === 2){
result=this.totalList?.filter(q => q.title === '中道小课堂');
}else if(this.activeIndex === 3){
result=this.totalList?.filter(q => q.title === '新手入列');
this.trainingType =1
}else{
this.trainingType=2
}
if(result){
this.pageList=result[0].materials
}
if(this.pageList?.length === 0){
await this.getList()
},
async getList(){
let res= await pageList({
pageNum:this.pageNum,
pageSize:this.pageSize,
docType:2,
trainingType:this.trainingType,
keyword:this.keyword || ''
})
this.pageList=res.data;
if(res.data.length === 0){
this.showEmpty = true
}else {
this.showEmpty = false
}
},
} },
initShow(){
this.keyword= '',
this.getNormalList()
this.getList()
}
}
}
@ -159,8 +124,29 @@ export default {
@import "@/styles/common.scss";
@import "@/styles/mixin.scss";
@import "@/styles/docment.scss";
@import "@/styles/driverDocment.scss";
.supplier ::v-deep .van-nav-bar__content{
background-color: #2C395F !important;
.tab_wrap {
@include fontWeightSize(bolder, 15px);
display: flex;
justify-content: space-around;
padding: 5px 0 5px 0;
@include colorOpa(#737373,0.7);
div {
padding-top: 8px;
}
.active {
color: #3678FF;
position: relative;
}
.active:after {
content: '';
display: block;
@include wh(50px,3px);
background: linear-gradient(270deg, #33A3FF 0%, #176AFE 100%);
border-radius: 2px;
position: absolute;
margin-top: 3px;
left: 50%;
transform: translateX(-50%);
}
}
</style>

View File

@ -11,7 +11,7 @@
>
<template slot="title">
<div v-show="!show">培训文档</div>
<van-field v-model="keyword" placeholder="请输入关键词" v-show="show" @input="getTrainingList"/>
<van-field v-model="keyword" placeholder="请输入关键词" v-show="show" @input="getList"/>
</template>
<template slot="right">
<div class="rightWrap" @click="show = !show">
@ -21,26 +21,25 @@
</template>
</van-nav-bar>
</div>
<div class="tab_wrap">
<div v-for="(item, index) in tabArr" :key="index" :class="{'active' : activeIndex == index}"
@click="changeTab(index)">
{{ item.name }}
</div>
</div>
<div class="contentWrap" v-show="!showEmpty">
<van-pull-refresh v-model="isLoading" @refresh="onRefresh" style="min-height:85vh">
<div class="itemWrap" v-for="(item,index) in pageList" :key="index" @click="goH5Detail(item,'培训文档')">
<div class="itemWrap" v-for="(item,index) in pageList" :key="index" @click="goH5Detail(item)">
<div class="info flexBetween common">
<div class="title">{{ item.name }}<span v-if="item.mustRead===1" class="read">必读</span></div>
<!-- <div class="time">{{ item.pushTime }}</div>-->
<div class="title">{{ item.pushUser }}</div>
<div class="time">{{ item.pushTime }}</div>
</div>
<div class="imgWrap">
<img :src="item.themePicture">
<div class="name">{{item.name}}</div>
</div>
<div class="num common">{{ item.synopsis }}</div>
<div class="info flexBetween common" >
<div class="time">{{ item.pushTime }}</div>
<span style="color: red;font-size: 14px;margin-right: 8px" :class="item.alreadyRead===1 ? 'alRead' : ''">{{ item.alreadyRead===1 ? '已处理' : '未处理' }}</span>
<div class="doc flexBetween common">
<div class="left">{{ item.docType?.label }}</div>
<div class="right">
<span style="color: red;font-size: 14px;margin-right: 8px">{{ item.listShowButton==null ? '已处理' : '未处理' }}</span>
<span style="opacity: .9;color: #ccc">阅读 {{item.readCount}}</span>
</div>
</div>
</div>
</van-pull-refresh>
@ -53,7 +52,7 @@
<script>
import {myMixins} from "@/utils/myMixins"
import {getTrainingList} from "@/api/mine"
import {pageList} from "@/api/mine"
export default {
name: "trainDocment",
computed: {
@ -61,65 +60,35 @@ export default {
mixins:[myMixins],
data(){
return{
tabArr: [{name: '车型技术参数', status: 1}, {name: '中道服务规范', status:2},{name: '中道小课堂', status: 3}],
activeIndex: 0,
pageNum:1,
pageSize:10,
pageList:[],
totalList:[],
keyword:'',
show:false,
showEmpty:false,
isLoading:false,
supplierId:'',
}
},
mounted() {
const urlParams = new URLSearchParams(window.location.search);
this.supplierId = urlParams.get('supplierId');
this.getTrainingList();
document.addEventListener('visibilitychange', async ( ) => {
let state = document.visibilityState
if (state == 'hidden') { // 用户离开了
}
if (state == 'visible') {
this.getTrainingList();
}
});
this.getList();
},
methods:{
onRefresh() {
this.getTrainingList()
this.getList()
setTimeout(() => {
this.$toast('刷新成功');
this.isLoading = false;
}, 1000);
},
async changeTab(index) {
this.activeIndex = index
await this.getTrainingList()
},
async getTrainingList(){
let res= await getTrainingList({
type:2,
id: this.supplierId,
text:this.keyword || '',
async getList(){
let res= await pageList({
pageNum:this.pageNum,
pageSize:this.pageSize,
docType:1,
keyword:this.keyword || ''
})
this.totalList=[]
this.pageList=[]
this.totalList=res.data.list
let result=[]
if(this.activeIndex === 0){
result=this.totalList?.filter(q => q.title === '车型技术参数');
}else if(this.activeIndex === 1){
result=this.totalList?.filter(q => q.title === '中道服务规范');
}else if(this.activeIndex === 2){
result=this.totalList?.filter(q => q.title === '中道小课堂');
}
if(result){
this.pageList=result[0].materials
}
if(this.pageList?.length === 0){
this.pageList=res.data;
if(res.data.length === 0){
this.showEmpty = true
}else {
this.showEmpty = false
@ -127,7 +96,7 @@ export default {
},
initShow(){
this.keyword= '',
this.getTrainingList()
this.getList()
}
}
}
@ -136,14 +105,4 @@ export default {
@import "@/styles/common.scss";
@import "@/styles/mixin.scss";
@import "@/styles/docment.scss";
.read{
padding: 2px 8px;
border-radius: 5px;
border: 1px solid red;
color: red;
font-size: 8px;
}
.alRead{
color: #cccccc !important;
}
</style>

View File

@ -16,26 +16,13 @@
<img class="startImg" src="@/assets/start.png" />
<span>身份证正面</span>
</div>
<!-- <van-image @click="handlePreview" @remove="handleRemove" style="width: 54px;height: 54px;" class="camerImg" v-if="identityCardFront" :src="identityCardFront" />-->
<!-- <el-upload-->
<!-- v-else-->
<!-- :action="baseURL + '/order/uploadImage'"-->
<!-- :headers='authorization'-->
<!-- accept=".png,.jpg,.jpeg,.zip,.rar,.xlsx,.xsavels,.pdf,.PDF,.doc,.docx"-->
<!-- :on-success="changeHandle"-->
<!-- :before-upload="checkImgType"-->
<!-- class="upload-demo"-->
<!-- :show-file-list="false"-->
<!-- >-->
<!-- <van-icon slot="default" name="plus" style="font-size: 54px" />-->
<!-- </el-upload>-->
<van-uploader
v-model="identityCardFrontList"
:after-read="identityCardFrontHandler"
:max-count="1"
:preview-size="54"
:max-size="5 * 1024 * 1024"
accept="image/*"
max-count="1"
:preview-size="54"
accept="image "
/>
</div>
<div class="lineBot"></div>
@ -152,15 +139,11 @@ import {saveDriver, uploadImage, ocrHandler} from "@/api/mine"
import TwoCommonBtn from "@/components/twoBtnCommon.vue"
import CellGroup from "@/components/cellGroup.vue"
import {formatDate1} from "@/utils/common"
// import {ImagePreview} from "vant";
export default {
name: "driverAdd",
mixins:[myMixins],
data(){
return{
// baseURL:'',
// licenseOcrInfo:'',
id:'',
driverName:"",
driverPhone:"",
@ -186,22 +169,9 @@ export default {
idCardAuthority:'',
idCardValidStartTime:'',
idCardValidEndTime:'',
// authorization:{Authorization: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzb25nIiwiYXVkIjpbInN1cHBsaWVyLWFwcCJdLCJuYmYiOjE3MjY4MDk4MTQsInVzZXJfaW5mbyI6eyJ1c2VySWQiOjU0NjU0LCJwaG9uZSI6IjE3NjMwMDM1NjU4IiwibmFtZSI6InNvbmciLCJzdXBwbGllck5hbWUiOiLkuIrmtbfmtYvor5XkvpvlupTllYYiLCJzdXBwbGllcklkIjozMzA0MSwic3VwcGxpZXJUeXBlIjoyLCJ1c2VybmFtZSI6InNvbmciLCJ1c2VyVHlwZSI6InJlc2N1ZUFwcCIsImRldmljZUlkIjoiMTkwZTM1ZjdlMTRhYzdjMDAwNyIsImF1dGhvcml0aWVzIjpbXX0sInNjb3BlIjpbImFsbCJdLCJpc3MiOiJodHRwczovL3Npbm9hc3Npc3QuY29tIiwiZXhwIjoxNzI2ODk2MjE0LCJpYXQiOjE3MjY4MDk4MTR9.5KTAMXZf8ll6HS4Z49YJQ1HiRvHr79Q1goDAGEtsBmY'},
// authorization:{Authorization:''},
}
},
mounted() {
/* if (window.location.href.includes('www.sinoassist.com')) {
this.baseURL = 'https://api.sinoassist.com'
} else if (window.location.href.includes('ccreview.sino-assist.com')) {
this.baseURL = 'https://api.sinoassist.com'
} else {
this.baseURL = 'https://api1.sino-assist.com'
// this.baseURL = 'http://localhost:8080'
}
let token=localStorage.getItem('token')
this.authorization.Authorization=token;*/
this.id = this.$route.params?.id;
this.driverName = this.$route.params?.name;
this.driverPhone = this.$route.params?.phone;
@ -245,41 +215,6 @@ export default {
isUse(e){
this.states=e
},
/* checkImgType(file) {
const FileExt = file.name.replace(/.+\./, "");
const isLt5M = file.size / 1024 / 1024 < 5;
const whiteList = ['png', 'jpeg', 'jpg'];
if (whiteList.indexOf(FileExt.toLowerCase()) === -1) {
this.$message.error("请上传正确的文件格式:" + whiteList.join('、'))
return false
}
if (!isLt5M) {
this.$message.error('上传图片大小不能超过 5MB!');
return false
}
},
handleRemove() {
this.identityCardFront = ''
},
handlePreview() {
ImagePreview({
images: this.identityCardFront,
startPosition: 1,
closeable: true,
});
},
async changeHandle(response) {
if (response.success === true) {
this.$toast('上传成功')
// this.form.identityCardFront = response.data;
// await this.ocrFrontHandler()
this.identityCardFront = response.data;
console.log("this.identityCardFront",this.identityCardFront)
await this.idCardOcrHandler();
} else {
this.$toast('上传失败')
}
},*/
async identityCardFrontHandler(file) { // 上传身份证正面照片
const formData = new FormData();
formData.append("file" , file.file);

View File

@ -42,7 +42,7 @@
<div class="metersWrap">
<div class="item" >
<div class="leftKiloMeters">小轮个数</div>
<div class="rightInput"><input type="number" v-model="form.tyreNumber" @input="handleInput"/></div>
<div class="rightInput"><input type="number" v-model="form.tyreNumber"/></div>
</div>
<div class="item">
<div class="leftKiloMeters">等候费</div>
@ -82,7 +82,7 @@ export default {
bridgeAmountAb:'',
bridgeAmountBc:'',
bridgeAmountCa:'',
tyreNumber:0,
tyreNumber:'',
waitAmount:'',
dilemmaFee:'',
customerAmount:'',
@ -98,15 +98,6 @@ export default {
await this.getDetail()
},
methods:{
handleInput(event) {
const newValue = parseInt(event.target.value, 10);
if (!isNaN(newValue) && newValue >= 0 && newValue <= 4) {
this.form.tyreNumber = newValue;
} else {
this.$toast('请输入0到4之间的数字')
this.form.tyreNumber = null; // 或者上一个有效值
}
},
submit() {
this.updatSettlement()
},

View File

@ -1,308 +0,0 @@
<template>
<div class="wrap" :style="{ 'overflow-y': showPoup ? 'hidden' : 'auto' }">
<div class="navBar">
<van-nav-bar title="师傅培训" :border="false" :fixed="true" :safe-area-inset-top="true">
<template slot="left" v-if="isFinished">
<van-icon name="checked" color="#37ec37" size="20"/>
</template>
</van-nav-bar>
</div>
<div class="contentWrap" v-show="!showEmpty">
<van-pull-refresh v-model="isLoading" @refresh="onRefresh" style="min-height:85vh">
<div class="itemWrap" v-for="(item,index) in pageList" :key="index" @click="goH5Detail(item,'培训文档')">
<div class="info flexBetween common">
<div class="title">{{ item.name }}</div>
<!-- <div class="time">{{ item.pushTime }}</div>-->
</div>
<div class="imgWrap"><img :src="item.themePicture"></div>
<div class="num common">{{ item.synopsis }}</div>
<div class="info flexBetween common">
<div class="time">{{ item.pushTime }}</div>
<template v-if="item.alreadyRead === 1">
<div class="status" style="color: #cccccc">已处理</div>
</template>
<template v-else>
<div class="status" >未处理</div>
</template>
</div>
</div>
</van-pull-refresh>
</div>
<div class="empty" v-show="showEmpty">
<img src="@/assets/empty.png" />
</div>
<div class="poupCommon" v-if="showPoup">
<div class="container showPoupContainer">
<div class="con">
<div class="title">培训提醒</div>
<div class="content">欢迎使用中道司机APP请您先完成培训阅读文章并问答相应问题完成后即可正常使用APP祝您使用愉快!</div>
<div class="line"></div>
<div class="btnWrap">
<div class="nextBtn" @click="showPoup = false">确定</div>
</div>
</div>
</div>
</div>
<div class="poupCommon" v-if="isFinished">
<div class="container finishContainer">
<div class="con">
<div class="title">提示</div>
<div class="content">恭喜您您已经全部完成培训现在您可以正常使用我们的app请前往体验</div>
<div class="line"></div>
<div class="btnWrap">
<div class="nextBtn" @click="goApp">前往</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {myMixins} from "@/utils/myMixins"
import {driverTrainList} from "@/api/mine"
export default {
name: "driverTrainingList",
computed: {
},
mixins:[myMixins],
data(){
return{
pageList:[],
show:false,
showEmpty:false,
isLoading:false,
showPoup:true,//进入弹框
isFinished:false,
driverId:'',
}
},
mounted() {
const urlParams = new URLSearchParams(window.location.search);
this.driverId = urlParams.get('driverId');
this.getList();
document.addEventListener('visibilitychange', async ( ) => {
let state = document.visibilityState
if (state == 'hidden') { // 用户离开了
}
if (state == 'visible') {
this.getList();
}
});
},
methods:{
onRefresh() {
this.getList()
setTimeout(() => {
this.$toast('刷新成功');
this.isLoading = false;
}, 1000);
},
async getList(){
let res= await driverTrainList({
driverId:this.driverId,//79639
})
this.pageList=res.data?.list;
if(res.data.assessState == 0){
this.isFinished=false
}else {
this.isFinished=true //是否完成
}
if(this.pageList?.length === 0){
this.showEmpty = true
}else {
this.showEmpty = false
}
},
goApp(){
let data = {"action":"goBack","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.sendMessage("goBack");
}
},
}
}
</script>
<style scoped lang="scss">
@import "@/styles/common.scss";
@import "@/styles/mixin.scss";
@import "@/styles/docment.scss";
@import "@/styles/driverDocment.scss";
.contentWrap{
height: calc(100% - 50px) !important;
}
.status{
color: red;
font-size: 14px;
margin-right: 8px;
text-align: right
}
.wrap{
position: relative;
overflow-y: hidden;
}
.poupCommon{
width: 100%;
height: 100%;
background-color: rgba(0,0,0,.7);
position: absolute;
top: 0;
left: 0;
.showPoupContainer{
height: 310px;
background-size: 320px 310px;
.content{
margin-bottom: 20px;
}
.btnWrap{
margin-top: 6px;
}
}
.finishContainer{
height: 260px;
background-size: 320px 260px;
.con{
top: 80px !important;
}
}
.container{
width: 320px;
background-image: url("@/assets/trainBg.png");
background-repeat: no-repeat;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
.con{
position: absolute;
top: 100px;
left: 20px;
}
}
.title{
font-weight: bold;
font-size: 19px;
color: #3364B7;
line-height: 26px;
width: 70%;
margin-left: 35px;
text-align: center;
}
.content{
width: 70%;
height: 92px;
font-size: 14px;
color: #4C5361;
line-height: 23px;
text-align: justify;
margin-top: 8px;
margin-left: 35px;
}
.line{
width: 285px;
height: 1px;
border-bottom: 1px solid #F1F2F5;
}
.btnWrap{
width: 92%;
font-weight: bold;
font-size: 13px;
display: flex;
justify-content: space-around;
height: 40px;
line-height: 40px;
.closeBtn{
color: #999B9F;
}
.line{
width: 1px;
height: 48px;
border-right: 1px solid #F1F2F5;
}
.nextBtn{
color: #3364B7;
}
}
}
//.poupWrap{
// width: 100%;
// height: 100%;
// background-color: rgba(0,0,0,.7);
// position: absolute;
// top: 0;
// left: 0;
// .container{
// width: 320px;
// height: 310px;
// background-image: url("@/assets/trainBg.png");
// background-size: 320px 310px;
// background-repeat: no-repeat;
// position: absolute;
// top: 0;
// bottom: 0;
// left: 0;
// right: 0;
// margin: auto;
// .con{
// position: absolute;
// top: 100px;
// left: 20px;
// }
//
// }
// .title{
// font-weight: bold;
// font-size: 19px;
// color: #3364B7;
// line-height: 26px;
// width: 70%;
// margin-left: 35px;
// text-align: center;
// }
// .content{
// width: 70%;
// height: 92px;
// font-size: 14px;
// color: #4C5361;
// line-height: 23px;
// text-align: justify;
// margin-top: 8px;
// margin-bottom: 20px;
// margin-left: 35px;
// }
// .line{
// width: 285px;
// height: 1px;
// border-bottom: 1px solid #F1F2F5;
// }
// .btnWrap{
// width: 92%;
// font-weight: bold;
// font-size: 13px;
// display: flex;
// justify-content: space-around;
// margin-top: 6px;
// height: 40px;
// line-height: 40px;
// .closeBtn{
// color: #999B9F;
// }
// .line{
// width: 1px;
// height: 48px;
// border-right: 1px solid #F1F2F5;
// }
// .nextBtn{
// color: #3364B7;
// }
// }
//}
</style>

View File

@ -1,7 +1,7 @@
<template>
<div class="wrap" :style="{ 'overflow-y': showPoup ? 'hidden' : 'auto' }">
<div class="navBar">
<van-nav-bar title="培训" :border="false" :fixed="true" :safe-area-inset-top="true">
<van-nav-bar title="新人培训" :border="false" :fixed="true" :safe-area-inset-top="true">
<template slot="left" v-if="isFinished">
<van-icon name="checked" color="#37ec37" size="20"/>
</template>
@ -9,23 +9,19 @@
</div>
<div class="contentWrap" v-show="!showEmpty">
<van-pull-refresh v-model="isLoading" @refresh="onRefresh" style="min-height:85vh">
<div class="itemWrap" v-for="(item,index) in pageList" :key="index" @click="goH5Detail(item,'培训文档')">
<div class="itemWrap" v-for="(item,index) in pageList" :key="index" @click="goH5Detail(item)">
<div class="info flexBetween common">
<div class="title">{{ item.name }}</div>
<!-- <div class="time">{{ item.updateTime }}</div>-->
<div class="title">{{ item.pushUser }}</div>
<div class="time">{{ item.pushTime }}</div>
</div>
<div class="imgWrap"><img :src="item.themePicture"></div>
<div class="num common">{{ item.synopsis }}</div>
<div class="info flexBetween common" >
<div class="time">{{ item.pushTime }}</div>
<span style="color: red;font-size: 14px;margin-right: 8px" :class="item.alreadyRead===1 ? 'alRead' : ''">{{ item.alreadyRead===1 ? '已处理' : '未处理' }}</span>
</div>
<!-- <template v-if="item.alreadyRead === 1">
<template v-if="item.listShowButton == null">
<div class="status" style="color: #cccccc">已处理</div>
</template>
<template v-else>
<div class="status" >未处理</div>
</template>-->
</template>
</div>
</van-pull-refresh>
</div>
@ -42,6 +38,7 @@
<div class="nextBtn" @click="showPoup = false">确定</div>
</div>
</div>
</div>
</div>
<div class="poupCommon" v-if="isFinished">
@ -54,14 +51,17 @@
<div class="nextBtn" @click="goApp">前往</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
// import { Dialog } from 'vant';
import {myMixins} from "@/utils/myMixins"
import {pageList} from "@/api/mine"
export default {
name: "newTrainingList",
computed: {
@ -78,26 +78,16 @@ export default {
isLoading:false,
showPoup:true,//进入弹框
isFinished:false,
// showPoup:false,//进入弹框
// isFinished:true,
}
},
mounted() {
// this.onRefresh();
this.getList();
document.addEventListener('visibilitychange', async ( ) => {
let state = document.visibilityState
if (state == 'hidden') { // 用户离开了
// console.log('用户离开了')
}
if (state == 'visible') {
// console.log('用户回来了')
this.getList();
//调用接口,获取订单状态
}
});
},
created() {
console.log("createdcreatedcreated")
// this.getList();
// 每次回答完问题之后返回需重新加结果
@ -121,14 +111,16 @@ export default {
docType:1,
trainingType:4,
})
this.pageList=res.data?.list || [];
if(res.data.assessState == 0){
this.isFinished=false
}else {
this.isFinished=true //是否完成
this.pageList=res.data;
let aaa=this.pageList.every(item=>item.listShowButton != 1)
if(aaa){
this.showPoup=false
this.isFinished=true
// await this.allProcessed()
}
if(this.pageList?.length == 0){
if(res.data.length === 0){
this.showEmpty = true
}else {
this.showEmpty = false
}
@ -147,6 +139,28 @@ export default {
window.android.sendMessage("goBack");
}
},
/*allProcessed(){
Dialog.confirm({
title: '提示',
message: '恭喜您您已经全部完成培训现在您可以正常使用我们的app请前往体验。',
confirmButtonText: '前往',
cancelButtonText: '稍后'
})
.then(() => {
let data = {"action":"goBack","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.sendMessage("goBack");
}
})
.catch(() => {
// on cancel
});
console.log("全部处理")
},*/
}
}
</script>
@ -154,10 +168,6 @@ export default {
@import "@/styles/common.scss";
@import "@/styles/mixin.scss";
@import "@/styles/docment.scss";
.contentWrap{
height: calc(100% - 50px) !important;
}
.status{
color: red;
font-size: 14px;
@ -254,8 +264,77 @@ export default {
}
}
}
.alRead{
color: #cccccc !important;
}
//.poupWrap{
// width: 100%;
// height: 100%;
// background-color: rgba(0,0,0,.7);
// position: absolute;
// top: 0;
// left: 0;
// .container{
// width: 320px;
// height: 310px;
// background-image: url("@/assets/trainBg.png");
// background-size: 320px 310px;
// background-repeat: no-repeat;
// position: absolute;
// top: 0;
// bottom: 0;
// left: 0;
// right: 0;
// margin: auto;
// .con{
// position: absolute;
// top: 100px;
// left: 20px;
// }
//
// }
// .title{
// font-weight: bold;
// font-size: 19px;
// color: #3364B7;
// line-height: 26px;
// width: 70%;
// margin-left: 35px;
// text-align: center;
// }
// .content{
// width: 70%;
// height: 92px;
// font-size: 14px;
// color: #4C5361;
// line-height: 23px;
// text-align: justify;
// margin-top: 8px;
// margin-bottom: 20px;
// margin-left: 35px;
// }
// .line{
// width: 285px;
// height: 1px;
// border-bottom: 1px solid #F1F2F5;
// }
// .btnWrap{
// width: 92%;
// font-weight: bold;
// font-size: 13px;
// display: flex;
// justify-content: space-around;
// margin-top: 6px;
// height: 40px;
// line-height: 40px;
// .closeBtn{
// color: #999B9F;
// }
// .line{
// width: 1px;
// height: 48px;
// border-right: 1px solid #F1F2F5;
// }
// .nextBtn{
// color: #3364B7;
// }
// }
//}
</style>

View File

@ -46,18 +46,7 @@
</div>
<div class="item">
<span class="titleLeft">扣除责任险费</span>
<span
class="content">{{ orderInfo.policyAmount }}</span>
</div>
<div class="item">
<span class="titleLeft">车衣费用</span>
<span
class="content">{{ orderInfo.carClothingToolAmount }}</span>
</div>
<div class="item">
<span class="titleLeft">换电瓶费用</span>
<span
class="content">{{ orderInfo.replaceBatteryAmount }}</span>
<span class="content">{{orderInfo.policyAmount}} {{orderInfo.cutInsuranceAmount==1 ? '是' : (orderInfo.cutInsuranceAmount==0 ? '否' : ' ')}}</span>
</div>
<div class="item">
<span class="leftTitle fontColor">工单照片:</span>
@ -73,7 +62,7 @@
<div class="titleContent">
<div class="flex-between" v-show="abState">
<div> 到事发地距离:</div>
<div class="halfOpcity"><input @input="validateIntegerInput" type="number" v-model="form.supplierSettleMileageAb"/>公里</div>
<div class="halfOpcity"><input type="number" v-model="form.supplierSettleMileageAb"/>公里</div>
</div>
<div class="flex-between" v-show="bcState" >
<div> 拖车里程:</div>
@ -85,31 +74,31 @@
</div>
<div class="flex-between" v-show="bridgeAbState">
<div>ab路桥费:</div>
<div class="halfOpcity"><input @input="validateIntegerInput" type="number" v-model="form.supplierBridgeAmountAb"/></div>
<div class="halfOpcity"><input type="number" v-model="form.supplierBridgeAmountAb"/></div>
</div>
<div class="flex-between" v-show="bridgeBcState">
<div>bc路桥费:</div>
<div class="halfOpcity"><input @input="validateIntegerInput" type="number" v-model="form.supplierBridgeAmountBc"/></div>
<div class="halfOpcity"><input type="number" v-model="form.supplierBridgeAmountBc"/></div>
</div>
<div class="flex-between" v-show="bridgeCaState">
<div>ca路桥费:</div>
<div class="halfOpcity"><input @input="validateIntegerInput" type="number" v-model="form.supplierBridgeAmountCa"/></div>
<div class="halfOpcity"><input type="number" v-model="form.supplierBridgeAmountCa"/></div>
</div>
<div class="flex-between" v-show="waitAmountState">
<div>等候费:</div>
<div class="halfOpcity inputContent"><input @input="validateIntegerInput" type="number" v-model="form.supplierWaitAmount"/></div>
<div class="halfOpcity inputContent"><input type="number" v-model="form.supplierWaitAmount"/></div>
</div>
<div class="flex-between" v-show="tyreAmountState">
<div>小轮费:</div>
<div class="halfOpcity inputContent"><input @input="validateIntegerInput" type="number" v-model="form.supplierTyreAmount"/></div>
<div class="halfOpcity inputContent"><input type="number" v-model="form.supplierTyreAmount"/></div>
</div>
<div class="flex-between" v-show="dilemmaAmountState && basePriceDisabled">
<div>困境费:</div>
<div class="halfOpcity inputContent"><input @input="validateIntegerInput" type="number" v-model="form.supplierDilemmaAmount"/></div>
<div class="halfOpcity inputContent"><input type="number" v-model="form.supplierDilemmaAmount"/></div>
</div>
<div class="flex-between" v-show="basementFeeState">
<div>地库费:</div>
<div class="halfOpcity inputContent"><input @input="validateIntegerInput" type="number" v-model="form.supplierBasementFee" :disabled="!isBasementSettle" /></div>
<div class="halfOpcity inputContent"><input type="number" v-model="form.supplierBasementFee"/></div>
</div>
<div class="flex-between">
<div>收取客户金额:</div>
@ -117,18 +106,15 @@
</div>
<div class="flex-between bgDisable" :class=" { 'flex-between': true, 'bgDisable' : basePriceDisabled } " >
<div>基本费用:</div>
<div class="halfOpcity inputContent "><input class="disable" type="number" :readonly="basePriceDisabled || isBasementSettle"
v-model="form.supplierBasePrice"/><span></span></div>
<div class="halfOpcity inputContent " ><input class="disable" type="number" :readonly="basePriceDisabled" v-model="form.supplierBasePrice"/><span ></span></div>
</div>
<div class="flex-between bgDisable" >
<div>额外费用总计:</div>
<div class="halfOpcity inputContent "><input class="disable" type="number" :readonly="true"
v-model="form.supplierExtraPrice"/><span></span></div>
<div class="halfOpcity inputContent " ><input class="disable" type="number" :readonly="true" v-model="form.supplierExtraPrice"/><span></span></div>
</div>
<div class="flex-between bgDisable ">
<div>费用总计: </div>
<div class="halfOpcity inputContent "><input class="disable" type="number" :readonly="true"
v-model="form.supplierSettleAmount"/><span></span></div>
<div class="halfOpcity inputContent " ><input class="disable" type="number" :readonly="true" v-model="form.supplierSettleAmount"/><span ></span></div>
</div>
<div class="flex-between">
<div> &nbsp;</div>
@ -141,9 +127,7 @@
<!-- <two-common-btn class="btn" @cancelClick="cancelBtn" @submitClick="save" />-->
<div class="btn">
<button class="cancel" @click="noMultipleClicks(cancelBtn )">取消</button>
<button v-if="orderInfo.checkCount < 3" :class="{'submit' : true,'loading' : loading}"
@click="noMultipleClicks(save)">提交
</button>
<button v-if="orderInfo.checkCount < 3" :class="{'submit' : true,'loading' : loading}" @click="noMultipleClicks(save)" >提交</button>
</div>
</div>
@ -155,54 +139,51 @@
</tr>
<tr v-show="abState">
<td class="col1">到事发地距离:{{orderInfo.settleMileageAb + '公里'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入到事发地距离" v-model="form.supplierSettleMileageAb"/></td>
<td class="col2 halfOpc"><input placeholder="输入到事发地距离" v-model="form.supplierSettleMileageAb"/></td>
</tr>
<tr v-show="bcState">
<td class="col1">拖车里程:{{orderInfo.settleMileageBc + '公里'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入拖车公里" v-model="form.supplierSettleMileageBc"/></td>
<td class="col2 halfOpc"><input placeholder="输入拖车公里" v-model="form.supplierSettleMileageBc"/></td>
</tr>
<tr v-show="caState">
<td class="col1">返程里程:{{orderInfo.settleMileageCa + '公里'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入返程里程" v-model="form.supplierSettleMileageCa"/></td>
<td class="col2 halfOpc"><input placeholder="输入返程里程" v-model="form.supplierSettleMileageCa"/></td>
</tr>
<tr v-show="bridgeAbState">
<td class="col1">ab路桥费:{{orderInfo.bridgeAmountAb +'元'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入ab路桥费" v-model="form.supplierBridgeAmountAb"/></td>
<td class="col2 halfOpc"><input placeholder="输入ab路桥费" v-model="form.supplierBridgeAmountAb"/></td>
</tr>
<tr v-show="bridgeBcState">
<td class="col1">bc路桥费:{{orderInfo.bridgeAmountBc +'元'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入bc路桥费" v-model="form.supplierBridgeAmountBc"/></td>
<td class="col2 halfOpc"><input placeholder="输入bc路桥费" v-model="form.supplierBridgeAmountBc"/></td>
</tr>
<tr v-show="bridgeCaState">
<td class="col1">ca路桥费:{{orderInfo.bridgeAmountCa +'元'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入ca路桥费" v-model="form.supplierBridgeAmountCa"/></td>
<td class="col2 halfOpc"><input placeholder="输入ca路桥费" v-model="form.supplierBridgeAmountCa"/></td>
</tr>
<tr v-show="tyreAmountState">
<td class="col1">小轮费:{{orderInfo.bridgeAmount +'元'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入小轮费" v-model="form.supplierTyreAmount"/></td>
<td class="col2 halfOpc"><input placeholder="输入小轮费" v-model="form.supplierTyreAmount"/></td>
</tr>
<tr v-show="dilemmaAmountState && basePriceDisabled">
<td class="col1">困境费:{{orderInfo.dilemmaAmount +'元'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入困境费" v-model="form.supplierDilemmaAmount"/></td>
<td class="col2 halfOpc"><input placeholder="输入困境费" v-model="form.supplierDilemmaAmount"/></td>
</tr>
<tr v-show="waitAmountState">
<td class="col1">等候费:{{orderInfo.waitAmount +'元'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入等候费" v-model="form.supplierWaitAmount"/></td>
<td class="col2 halfOpc"><input placeholder="输入等候费" v-model="form.supplierWaitAmount"/></td>
</tr>
<tr v-show="basementFeeState">
<td class="col1">地库费:{{orderInfo.basementFee +'元'}}</td>
<td class="col2 halfOpc"><input @input="validateIntegerInput" placeholder="输入地库费" v-model="form.supplierBasementFee"/></td>
<td class="col2 halfOpc"><input placeholder="输入地库费" v-model="form.supplierBasementFee"/></td>
</tr>
<tr>
<td class="col1">基本费用:{{orderInfo.basePrice +'元'}}</td>
<td class="col2 halfOpc" :style="{ opacity: basePriceDisabled ? '1' : '0.5' }"><input
:class="basePriceDisabled ? 'supplierdisable' : ''" :readonly="basePriceDisabled"
v-model="form.supplierBasePrice"/></td>
<td class="col2 halfOpc" :style="{ opacity: basePriceDisabled ? '1' : '0.5' }"><input :class="basePriceDisabled ? 'supplierdisable' : ''" :readonly="basePriceDisabled" v-model="form.supplierBasePrice"/></td>
</tr>
<tr>
<td class="col1">额外费用总计:{{orderInfo.extraPrice +'元'}}</td>
<td class="col2 halfOpc" style="opacity: 1;"><input class="supplierdisable" :readonly="true"
v-model="form.supplierExtraPrice"/></td>
<td class="col2 halfOpc" style="opacity: 1;"><input class="supplierdisable" :readonly="true" v-model="form.supplierExtraPrice"/></td>
</tr>
<tr>
<td class="col1">收取客户:{{orderInfo.customerAmount +'元'}}</td>
@ -220,8 +201,7 @@
<div class="title col1" style="white-space: nowrap;">审核失败原因</div>
<div class="reason">{{orderInfo.auditRemark}}</div>
<div v-show="orderInfo.auditPhoto" style="display: flex;flex-wrap: wrap">
<van-image class="camerImg" v-for="(item,index) in auditPhotoList" :key="index" :src="item.url"
@click="previewPhoto(index)"/>
<van-image class="camerImg" v-for="(item,index) in auditPhotoList" :key="index" :src="item.url" @click="previewPhoto(index)" />
</div>
</td>
<td class="col2 alignLeft" style="border-bottom-right-radius: 3px">
@ -229,8 +209,7 @@
<div class="title" style="margin-bottom: 8px"> 本次补充说明:</div>
<div style="display: flex;margin-bottom: 5px">
<!-- @click="delSupplierPhoto(item) -->
<img v-for="(item,index) in supplierPhotoList" :key="index" class="supplierImg" :src="item.url"
@click="viewHandle(item)">
<img v-for="(item,index) in supplierPhotoList" :key="index" class="supplierImg" :src="item.url" @click="viewHandle(item)">
</div>
<div style="display: flex" >
<van-uploader
@ -247,12 +226,8 @@
</div>
<van-dialog v-model="show" title="确定删除此照片吗" show-cancel-button @confirm="handleConfirm"></van-dialog>
<div class="btn" v-show="auditFormShow">
<button v-if="orderInfo.checkCount < 3" :class="{'submit' : true,'loading' : loading}"
@click="noMultipleClicks(save)">提交
</button>
<button v-if="accountStatus == 2 || accountStatus == 3" :class="{'submit' : true,'loading1' : loading1}"
@click="noMultipleClicks(confirmAudit)">确定审核
</button>
<button v-if="orderInfo.checkCount < 3" :class="{'submit' : true,'loading' : loading}" @click="noMultipleClicks(save)">提交</button>
<button v-if="accountStatus == 2 || accountStatus == 3" :class="{'submit' : true,'loading1' : loading1}" @click="noMultipleClicks(confirmAudit)" >确定审核</button>
</div>
</div>
</template>
@ -267,7 +242,6 @@ import {
} from "@/api/mine"
import { ImagePreview } from "vant";
import {orderReportingList} from "@/api/order";
export default {
name: "accountingView",
mixins:[myMixins],
@ -376,11 +350,7 @@ export default {
exceptionApprovalStatus:'',
exceptionApprovalRemark:'',
auditSuccessRemark:'',
accountStatus: '',
carClothingToolAmount: '',
replaceBatteryAmount: '',
supplierSettleRatio:{},
contractSettleTypeString:'',
accountStatus: ''
},
noClick:true,
loading: false,
@ -404,24 +374,15 @@ export default {
return !(this.serviceType == '困境救援' || this.serviceType == '困境-吊车' || this.serviceType == '困境救援-事故' || this.serviceType == '困境救援-故障'
|| (this.fixedPrice && parseFloat(this.fixedPrice) > 0 && this.fixedPriceType) || this.supplierId == 500921)
},
isBasementSettle(){
return (this.form?.supplierSettleRatio?.code == 5)
},
//保险实拖案件,剔除人保和太平事故
isCPICDrag(){
return this.settleType == '实拖' && this.orderInfo?.contractType == 1 && !['PICC10101', 'PICCSHANGQI', 'PICC101099', 'SAIPCC2021', ''].includes(this.appCode) && !(this.appCode.indexOf("TAIPING") != -1 && this.orderInfo?.malfunctionReason == 2)
return this.settleType == '实拖' && !['PICC10101','PICCSHANGQI','PICC101099','SAIPCC2021',''].includes(this.appCode)
},
isBasement(){
return this.serviceType == '困境救援' || this.serviceType == '困境-吊车' || this.serviceType == '困境救援-事故' || this.serviceType == '困境救援-故障'
},
},
methods:{
validateIntegerInput(event) {
const regex = /^\d*$/;
if (!regex.test(event.target.value)) {
event.target.value = event.target.value.replace(/[^\d]/g, '');
}
},
viewSettlementDoc(){//查看结算单
this.$router.push({
name:"settlementDetail",
@ -492,18 +453,19 @@ export default {
})
},
async compute() {
if(this.orderInfo.contractSettleTypeString == '车主现收'){
this.form.supplierBasePrice = 0
this.form.supplierExtraPrice = 0
this.form.supplierSettleAmount = 0
}else {
//现金业务置为0
// if(this.form.contractSettleTypeString == '车主现收'){
// this.form.supplierBasePrice = 0
// this.form.supplierExtraPrice = 0
// this.form.supplierSettleAmount = 0
// } else {
if (this.form.supplierOtherAmount > 0) {
if (this.form.supplierOtherAmountRemark == '') {
this.$alert('请填写其他费用说明');
return;
}
}
if (!this.basePriceDisabled && !this.isBasementSettle) {
if (!this.basePriceDisabled) {
//困境的案件,或者一口价案件,基本费用可以输入
let dilemmaBasePrice = parseFloat(this.form.supplierBasePrice) || 0
this.form.supplierBasePrice = dilemmaBasePrice
@ -519,23 +481,12 @@ export default {
this.form.supplierSettleAmount = data.data.totalPrice
}
// }
/*if(this.form.cutInsuranceAmount == 1 && this.form.policyState === 0){
if(this.form.cutInsuranceAmount == 1 && this.form.policyState === 0){
this.form.supplierSettleAmount = parseFloat(parseFloat(this.form.supplierSettleAmount) - parseFloat(this.form.policyAmount || 0)).toFixed(2)
}*/
}
if (this.form.policyAmount && this.form.policyAmount > 0) {
this.form.supplierSettleAmount = parseFloat(parseFloat(this.form.supplierSettleAmount) - parseFloat(this.form.policyAmount || 0)).toFixed(2)
}
if (this.form.carClothingToolAmount) {
this.form.supplierSettleAmount = parseFloat(parseFloat(this.form.supplierSettleAmount) + parseFloat(this.form.carClothingToolAmount || 0)).toFixed(2)
}
if (this.form.replaceBatteryAmount) {
this.form.supplierSettleAmount = parseFloat(parseFloat(this.form.supplierSettleAmount) - parseFloat(this.form.replaceBatteryAmount || 0)).toFixed(2)
}
},
async pictureList(){
let res = await selectRecordPictureList({
userOrderId:this.orderInfo.userOrderId,
taskOrderCostRecordId:this.id,
state:0,
postfix:this.postfix
@ -566,11 +517,10 @@ export default {
if(res.code === 200){
this.orderInfo=res.data
console.log("this.orderInfo",this.orderInfo)
this.accountStatus = this.orderInfo.accountStatus?.code
this.serviceType=this.orderInfo.serviceName
this.taskFlowId=this.orderInfo.taskFlowId
this.settleType=this.orderInfo.settleType?.label
this.accountStatus = this.orderInfo.accountStatus?.code
this.appCode=this.orderInfo.appCode
this.fixedPrice = this.orderInfo.fixedPrice
this.fixedPriceType=this.orderInfo.fixedPriceType
@ -585,12 +535,11 @@ export default {
leftCopy(this.form, {...res.data})
this.auditFormShow = true;//是否显示审核数据
}
console.log("this.form",this.form)
if (this.settleType == '实拖' && this.basePriceDisabled && !this.isBasementSettle) {
if(this.settleType == '实拖' && this.basePriceDisabled){
this.bcState = true
this.form.supplierSettleMileageAb = 0
this.form.supplierSettleMileageCa = 0
} else if (this.settleType == '单程' && this.basePriceDisabled && !this.isBasementSettle) {
}else if(this.settleType == '单程' && this.basePriceDisabled){
this.abState = true
this.bcState = true
this.form.supplierSettleMileageCa = 0
@ -598,43 +547,25 @@ export default {
this.bcState = false
this.form.supplierSettleMileageBc = 0
}
} else if (this.settleType == '全程' && this.basePriceDisabled && !this.isBasementSettle) {
}else if(this.settleType == '全程' && this.basePriceDisabled){
this.abState = true
this.bcState = true
this.caState = true
} else if (this.settleType == '全程减半' && this.basePriceDisabled && !this.isBasementSettle) {
}else if(this.settleType == '全程减半' && this.basePriceDisabled){
this.abState = true
this.bcState = true
this.caState = true
}
if (this.form.supplierSettleRatio && this.form.supplierSettleRatio?.code == 5){
this.basementFeeState = true
this.form.supplierSettleMileageAb = 0
this.form.supplierSettleMileageBc = 0
this.form.supplierSettleMileageCa = 0
this.form.supplierBridgeAmountAb = 0
this.form.supplierBridgeAmountBc = 0
this.form.supplierBridgeAmountCa = 0
this.form.supplierBridgeAmount = 0
this.form.supplierDilemmaAmount = 0
this.form.supplierOtherAmount = 0
this.form.supplierTyreAmount = 0
this.form.supplierWaitAmount = 0
}else {
if(this.orderInfo.refBridgeAmountAB > 0 && !this.isCPICDrag && !this.isBasement) this.bridgeAbState = true
if(this.orderInfo.refBridgeAmountBC > 0 && !this.isCPICDrag && !this.isBasement) this.bridgeBcState = true
if(this.orderInfo.refBridgeAmountCA > 0 && !this.isCPICDrag && !this.isBasement) this.bridgeCaState = true
if(this.orderInfo.refWaitFee > 0) this.waitAmountState = true
if(this.orderInfo.refDilemmaFee > 0) this.dilemmaAmountState = true
if(this.orderInfo.refTyreNumber > 0 && this.taskFlowId != '1') this.tyreAmountState = true
}
if(this.orderInfo.refBasementFee > 0 && this.taskFlowId != '1' ){
this.basementFeeState = true
this.form.supplierBasementFee = this.orderInfo.refBasementFee
}
if (this.form.supplierSettleRatio?.code != 5 && (this.serviceType == '困境救援' || this.serviceType == '困境-吊车' || this.serviceType == '困境救援-事故' || this.serviceType == '困境救援-故障')){
await this.$alert("该案件为困境案件需确认填写基本费用")
}
},
cancelBtn(){
this.goback()
@ -679,7 +610,6 @@ export default {
this.files.forEach((file) => {
formData.append('file', file.file);
});
formData.append('userOrderId', this.orderInfo.userOrderId);
formData.append('state', 0);
formData.append('postfix', this.postfix);
formData.append('supplierBridgeAmount', parseInt(this.form.supplierBridgeAmountAb || 0) + parseInt(this.form.supplierBridgeAmountBc || 0) + parseInt(this.form.supplierBridgeAmountCa || 0));
@ -735,7 +665,6 @@ export default {
formData.append('file', file.file);
});
// formData.append('accountStatus', accountStatus);
formData.append('userOrderId', this.orderInfo.userOrderId);
formData.append('state', 0);
formData.append('postfix', this.postfix);
formData.append('supplierBridgeAmount', parseInt(this.form.supplierBridgeAmountAb || 0) + parseInt(this.form.supplierBridgeAmountBc || 0) + parseInt(this.form.supplierBridgeAmountCa || 0));
@ -778,7 +707,6 @@ export default {
<style scoped lang="scss">
@import "@/styles/mixin.scss";
@import "@/styles/common.scss";
.loading,.loading1 {
position: relative;
}
@ -805,57 +733,46 @@ export default {
transform: translate(-50%, -50%) rotate(360deg);
}
}
.btn{
@include flexColBet;
button{
@include whLin(152px,39px);
border-radius: 5px;
color: #FFFFFF;
@include fontWeightSize(bold,14px)
}
.cancel{
background: #9EA7C0;
}
.submit{
background-color: #354D93;
}
}
.wrap{
@include wh(100%,100%);
background-color: #F4F5F7;
overflow-y: auto;
}
.disable{
background-color: transparent;
border: none;
opacity: 1 !important;
}
.supplierdisable{
color: #999999;;
border: none;
opacity: 1 !important;
}
.bgDisable{
background: rgba(204, 204, 204, .3);
}
.navBar{
margin-bottom: 46px;
}
.title{
@include fontWeightSize(bold,14px);
@include colorOpa(#323643,0.66);
}
.line{
@include wh(100%,2px);
opacity: 0.16;
@ -863,39 +780,32 @@ export default {
margin-top: 7px;
border-image: linear-gradient(270deg, rgba(217, 217, 217, 0.6), rgba(178, 178, 178, 1), rgba(178, 178, 178, 1), rgba(217, 217, 217, 0.6)) 1 1;
}
.item{
@include flexCenter;
font-size: 12px !important;
font-weight: 400 !important;
.titleLeft{
opacity: .5;
line-height: 27px;
}
.leftTitle{
opacity: .5;
@include wh(60px,189px);
}
.rightContent{
height: 189px;
width: calc(100% - 60px);
}
.fontColor{
@include fontWeightSize(400,12px);
color: #000000;
line-height: 24px;
}
.rightContent{
width: calc(100% - 90px);
@include fontWeightSize(bold,12px);
}
.driverPoiBtn{
display: inline-block;
padding: 3px 8px;
@ -907,58 +817,47 @@ export default {
cursor: pointer;
}
}
img{
@include wh(35px,15px);
margin-left: 21px;
}
.common{
background-color: #FFFFFF;
padding: 11px 24px 14px;
box-sizing: border-box;
margin-bottom: 10px;
}
.baseInfo{
@include wh(100%, 344px);
@include wh(100%,286px);
}
.supplierData{
width: 100%;
margin-bottom: 0;
.inpInfo{
margin: 0 5px;
color: #323643;
line-height: 32px;
input{
border: none;
text-align: right;
padding-right: 3px;
margin-right: 0;
}
.titleContent{
@include fontWeightSize(bold,13px);
}
.flex-between{
width: 100%;
@include flexBetCen
}
.halfOpcity{
opacity: .5;
}
.inputContent{
text-align: right;
}
}
.btnComputed{
width: 48px;
@include all-height(18px);
@ -966,7 +865,6 @@ img {
@include bgFontColor(#FFFFFF,#354D93);
border-radius: 3px;
}
.multipleTxt{
@include wh(100%,87px);
background: #FAFAFA;
@ -974,81 +872,67 @@ img {
border: 1px solid #E6E6E6;
backdrop-filter: blur(10px);
}
.btn{
margin-top: 28px;
}
}
.dataType{
padding: 0 8px;
table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
}
td {
padding: 10px;
border: 1px solid #ccc;
text-align: center;
}
.alignLeft{
text-align: left !important;
opacity: 1 !important;
.reason{
@include fontWeightSize(400,11px);
@include colorOpa(#FF8F37,1);
//color: #FF8F37;
//opacity: 1 !important;
}
.camerImg{
@include widHeiMar(54px,42px,5px);
margin-top: 15px;
}
.supplierImg{
@include widHeiMar(54px,42px,8px);
margin-top: 0;
margin-left: 0;
}
.title{
@include fontWeightSize(400,11px);
opacity: .5;
}
}
.col1{
width: 41%;
background-color: #E9E9EA;
@include fontWeightSize(400,12px);
opacity: 0.55;
}
.col2{
width: 58%;
background-color: #EAEFF6;
@include fontWeightSize(400,12px);
color: #0434D0;
input{
width: 72px;
border: none;
background-color:#EAEFF6;
text-align: center;
}
input::placeholder {
color: #0434D0; /* 设置提示内容文字颜色 */
}
}
.btnCom{
border: none;
padding: 4px 7px;
@ -1061,31 +945,25 @@ img {
color: #FFFFFF;
@include fontWeightSize(bold,12px)
}
.checkData,.supplierShuju{
color: #323643;
}
.checkData{
border-top-left-radius: 3px;
opacity: 0.66;
}
.supplierShuju{
border-top-right-radius: 3px;
}
.halfOpc{
opacity: .5;
}
}
.twoBtn{
margin-top: 28px;
margin-bottom: 30px;
@include flexColBet;
@include sizingPadding(0 ,15px);
button{
@include whLin(152px,39px);
@include fontWeightSize(bold,14px);
@ -1093,13 +971,11 @@ img {
border-radius: 5px;
}
}
.btn{
margin-top: 31px;
margin-bottom: 31px;
@include flexColAround;
box-sizing: border-box;
button{
line-height: 39px;
border-radius: 5px;
@ -1108,7 +984,6 @@ img {
@include fontWeightSize(bold,14px);
border: none;
}
.submit{
background: #354D93;
}

View File

@ -11,7 +11,7 @@
@click-left="goback"
/>
</div>
<div class="baseInfo common" style="height: 344px">
<div class="baseInfo common">
<div class="title">基本信息:</div>
<div class="line"></div>
<div class="item">
@ -47,16 +47,9 @@
</div>
<div class="item">
<span class="titleLeft">扣除责任险费</span>
<span class="content">{{orderInfo.policyAmount}}</span>
</div>
<div class="item">
<span class="titleLeft">车衣费用</span>
<span class="content">{{orderInfo.carClothingToolAmount}}</span>
</div>
<div class="item">
<span class="titleLeft">换电瓶费用</span>
<span class="content">{{orderInfo.replaceBatteryAmount}}</span>
<span class="content">{{orderInfo.policyAmount}} {{orderInfo.cutInsuranceAmount}}</span>
</div>
</div>
<div class="baseInfo common">
<div class="title">审核数据:</div>

6403
yarn.lock Normal file

File diff suppressed because it is too large Load Diff