Compare commits
143 Commits
prod-25-03
...
1a15772f08
| Author | SHA1 | Date | |
|---|---|---|---|
| 1a15772f08 | |||
| 8f066a7bbf | |||
| d3e91f584f | |||
| d04ed28ec2 | |||
| 36db96808a | |||
| 781ef75913 | |||
| e7b0cfb006 | |||
| 57b4bc2e59 | |||
| 990db65d25 | |||
| cebb173ec4 | |||
| 8968f4caa9 | |||
| 40ab15266a | |||
| 6bc55d7b89 | |||
| 06191163a2 | |||
| be0227c68b | |||
| b981a57ef5 | |||
| b836f3c979 | |||
| a5c88f11bb | |||
| 9b64456854 | |||
| 658c0c7db2 | |||
| 698f98bee7 | |||
| ec974ed55c | |||
| 41820ef796 | |||
| 2bb1885b37 | |||
| fcf088a6f6 | |||
| 60836e19da | |||
| 1abb7ac605 | |||
| 2c94eee160 | |||
| 4bbc53a9aa | |||
| 5c821e1fc0 | |||
| a84dd52eae | |||
| 4dc0e9b835 | |||
| e18be51b77 | |||
| c7cc6bfec4 | |||
| 0d862caff1 | |||
| cf60d22074 | |||
| d99b0d126f | |||
| 0249e0863d | |||
| 314ab0b729 | |||
| 24b94ebc8c | |||
| 21221c2196 | |||
| adf68457fc | |||
| 94f536d304 | |||
| 47d30f220e | |||
| ef4abf8e62 | |||
| 54041f0008 | |||
| 283d1a37a2 | |||
| 0d9c5fefee | |||
| bed585ffdc | |||
| 55044c55d5 | |||
| 97bf33b316 | |||
| 23e066e752 | |||
| 2de215bd1f | |||
| c44851f636 | |||
| 3b51a87ed1 | |||
| 138bd80bc3 | |||
| 1d8fd78a2b | |||
| 8b35675abc | |||
| 8bbdfb5ca5 | |||
| 040fbb268a | |||
| 1cb27fea3a | |||
| 61f2ae5a87 | |||
| 156d570595 | |||
| c44f872d00 | |||
| 5c603618d3 | |||
| 9a9ac9f76e | |||
| da73c933a0 | |||
| 45d95fe250 | |||
| 310b64f97c | |||
| 058ce2c72c | |||
| ee8fdb16c4 | |||
| 7ff13628b5 | |||
| eae60d1000 | |||
| 3a1e4a6ae2 | |||
| 5bd9db3165 | |||
| fbce498e94 | |||
| 6ab2e0b1d7 | |||
| 001683f215 | |||
| bb13a6e34e | |||
| 16d4425e07 | |||
| a73434fd4d | |||
| 75d20beb77 | |||
| 9a21834741 | |||
| 749daae26e | |||
| 0fc0d33742 | |||
| d1efe578d4 | |||
| 899ea612f4 | |||
| 5552b48ec4 | |||
| 56e56c7839 | |||
| 851a0e7260 | |||
| d2f124e901 | |||
| 8bc734273b | |||
| 643ee2c5eb | |||
| 881ae7e47b | |||
| d5af7692f8 | |||
| aa52bd2f31 | |||
| 9df87ac518 | |||
| 8e20adbba3 | |||
| cc083b7551 | |||
| 0a668e6f57 | |||
| c2cc09aef1 | |||
| 037fbf74fb | |||
| de252fceb2 | |||
| 6a53749cdc | |||
| d71e3679ef | |||
| c626aab606 | |||
| 7594e56cda | |||
| 95c8095518 | |||
| 0aa3630adb | |||
| 75eba22e9e | |||
| a162c3fdcc | |||
| 33f4857427 | |||
| 432f35a403 | |||
| ae0bd3b169 | |||
| 6b27859358 | |||
| 99edd5d431 | |||
| 9ac5860ef8 | |||
| e56de7ff8b | |||
| 4a70d881b8 | |||
| 5de1efc5fb | |||
| 7b7e926f8a | |||
| ba1cd9fcac | |||
| 3fe67c1015 | |||
| cdc63e6c42 | |||
| 0e138e22f4 | |||
| b5c5f24c49 | |||
| d3d6226bcd | |||
| a426b67a51 | |||
| efe76bb675 | |||
| de9d73a642 | |||
| 044813f411 | |||
| b90b7ea89c | |||
| 4c02dcd075 | |||
| 3cd768b973 | |||
| db6a3facae | |||
| 48ab0cfb52 | |||
| c5176ebc02 | |||
| f666d9bcb4 | |||
| 6864a1330f | |||
| e373acb818 | |||
| fe71adf6e3 | |||
| b6d0ae476c | |||
| c80a2f6e6b |
@ -26,14 +26,15 @@
|
|||||||
<van-number-keyboard safe-area-inset-bottom />
|
<van-number-keyboard safe-area-inset-bottom />
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
window._AMapSecurityConfig = {
|
window._AMapSecurityConfig = {
|
||||||
serviceHost: 'https://api.sinoassist.com/_AMapService',
|
// serviceHost: 'https://api.sinoassist.com/_AMapService',
|
||||||
|
securityJsCode:'91ab1ebc492d5479a68b11527bd73dc9',
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="https://webapi.amap.com/maps?v=1.4.15&key=2560bbf04daef66c810c5e6a97e8c508&plugin=AMap.Polyline"></script>
|
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=2560bbf04daef66c810c5e6a97e8c508&plugin=AMap.AutoComplete,AMap.PlaceSearch,AMap.Geolocation,AMap.Geocoder,AMap.Marker,AMap.Driving"></script>
|
||||||
<!-- <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>-->
|
<script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
// VConsole 默认会挂载到 `window.VConsole` 上
|
// VConsole 默认会挂载到 `window.VConsole` 上
|
||||||
// let vConsole = new window.VConsole();
|
let vConsole = new window.VConsole();
|
||||||
(function (doc, win) {
|
(function (doc, win) {
|
||||||
// console.log("==window.location.pathname===",window.location.pathname)
|
// console.log("==window.location.pathname===",window.location.pathname)
|
||||||
let docEl = doc.documentElement
|
let docEl = doc.documentElement
|
||||||
|
|||||||
@ -44,10 +44,10 @@
|
|||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h3>声明</h3>
|
<h3>声明</h3>
|
||||||
<p>本平台为二手车买卖双方提供免费信息发布服务。在您使用本平台之前,请仔细阅读并理解本免责声明。一旦使用本平台,即视为您已阅读、理解并同意接受本免责声明的所有条款。</p>
|
<p>本平台为二手拖车买卖双方提供免费信息发布服务。在您使用本平台之前,请仔细阅读并理解本免责声明。一旦使用本平台,即视为您已阅读、理解并同意接受本免责声明的所有条款。</p>
|
||||||
|
|
||||||
<h4>一、平台性质</h4>
|
<h4>一、平台性质</h4>
|
||||||
<p>1. 本平台仅为信息发布平台,不参与任何二手车交易环节,包括但不限于交易洽谈、合同签订、款项支付、车辆交付等,实际交易价格由买卖双方自行协商确定。</p>
|
<p>1. 本平台仅为信息发布平台,不参与任何二手拖车交易环节,包括但不限于交易洽谈、合同签订、款项支付、车辆交付等,实际交易价格由买卖双方自行协商确定。</p>
|
||||||
<p>2. 本平台不对发布信息的真实性、准确性、完整性、合法性进行任何形式的担保或保证,用户应自行判断信息的真实性并承担由此产生的风险。</p>
|
<p>2. 本平台不对发布信息的真实性、准确性、完整性、合法性进行任何形式的担保或保证,用户应自行判断信息的真实性并承担由此产生的风险。</p>
|
||||||
|
|
||||||
<h4>二、用户责任</h4>
|
<h4>二、用户责任</h4>
|
||||||
|
|||||||
72
src/api/authentication.js
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
import request from '@/utils/http'
|
||||||
|
// 根据订单 获取报备类型
|
||||||
|
/*export function getReportListByOrder(key){
|
||||||
|
return request({
|
||||||
|
url: '/order/baseDriverReportConfigs/getByOrderId',
|
||||||
|
method:'GET',
|
||||||
|
params: key
|
||||||
|
})
|
||||||
|
}*/
|
||||||
|
// 弹框
|
||||||
|
export function successPopup( data) {
|
||||||
|
return request({
|
||||||
|
url: '/returnOrder/wechatDriver/user/successPopup',
|
||||||
|
method:'POST',
|
||||||
|
contentType: 'application/x-www-form-urlencoded',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 认证进度
|
||||||
|
export function infoVerifyProgress(data){
|
||||||
|
return request({
|
||||||
|
url: '/returnOrder/wechatDriver/user/infoVerifyProgress',
|
||||||
|
method:'POST',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 认证详情
|
||||||
|
export function driverInfoVerifyDetail(data) {
|
||||||
|
return request({
|
||||||
|
url:'/returnOrder/wechatDriver/user/driverInfoVerifyDetail',
|
||||||
|
method:'POST',
|
||||||
|
data: data,
|
||||||
|
contentType: 'application/json',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 我的信息
|
||||||
|
export function getMyInfo(data) {
|
||||||
|
return request({
|
||||||
|
url:'/returnOrder/wechatDriver/user/driverDetail',
|
||||||
|
method:'POST',
|
||||||
|
data: data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// ocr识别
|
||||||
|
export function ocrRecognize( data) {
|
||||||
|
return request( {
|
||||||
|
url:'/returnOrder/wechatDriver/user/ocrRecognize',
|
||||||
|
data: data,
|
||||||
|
method:'POST',
|
||||||
|
contentType: 'application/json'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 认证
|
||||||
|
export function driverInfoVerify( data) {
|
||||||
|
return request({
|
||||||
|
url:'/returnOrder/wechatDriver/user/driverInfoVerify',
|
||||||
|
data: data,
|
||||||
|
method:'POST',
|
||||||
|
contentType: 'application/json'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 实名认证
|
||||||
|
export function driverRealName( data) {
|
||||||
|
return request('/returnOrder/wechatDriver/user/driverRealNameAuth', {
|
||||||
|
data: data,
|
||||||
|
method:'POST',
|
||||||
|
contentType: 'application/json'
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -316,4 +316,27 @@ export function unifiedOCRWithCompress(data){
|
|||||||
contentType:'application/json',
|
contentType:'application/json',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 服务商是否培训
|
||||||
|
export function jumpPage(data){
|
||||||
|
return request({
|
||||||
|
url:'/supplierAppV2/dispatchApp/user/jumpPage',
|
||||||
|
method:'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//发送确认参保
|
||||||
|
export function sendInsuranceEmail(){
|
||||||
|
return request({
|
||||||
|
url:'/supplierAppV2/dispatchApp/user/sendInsuranceEmail',
|
||||||
|
method:'POST',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 判断服务商是否参保
|
||||||
|
export function isSendInsuranceEmail(){
|
||||||
|
return request({
|
||||||
|
url:'/supplierAppV2/dispatchApp/user/isSendInsuranceEmail',
|
||||||
|
method:'POST',
|
||||||
|
})
|
||||||
}
|
}
|
||||||
@ -112,3 +112,43 @@ export function correctionHandle(data) {
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 获取报警列表
|
||||||
|
export function getAlarmList(data) {
|
||||||
|
return request({
|
||||||
|
url: '/supplierAppV2/dispatchApp/alarm/alarmList',
|
||||||
|
method:'POST',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取报警数目
|
||||||
|
export function getAlarmCount(data) {
|
||||||
|
return request({
|
||||||
|
url: '/supplierAppV2/dispatchApp/alarm/alarmCount',
|
||||||
|
method:'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取报警详情
|
||||||
|
export function getAlarmByCode(data) {
|
||||||
|
return request({
|
||||||
|
url: '/supplierAppV2/dispatchApp/alarm/getAlarmByCode',
|
||||||
|
method:'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理报警
|
||||||
|
export function dealWithAlarm(data) {
|
||||||
|
return request({
|
||||||
|
url: '/supplierAppV2/dispatchApp/alarm/handAlarm',
|
||||||
|
method:'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
37
src/api/report.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import request from '@/utils/http'
|
||||||
|
// 根据订单 获取报备类型
|
||||||
|
export function getReportListByOrder(key){
|
||||||
|
return request({
|
||||||
|
url: '/order/baseDriverReportConfigs/getByOrderId',
|
||||||
|
method:'GET',
|
||||||
|
params: key
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加报备
|
||||||
|
export function newOrderReporting(data){
|
||||||
|
return request({
|
||||||
|
url: '/supplierAppV2/dispatchApp/order/newOrderReporting',
|
||||||
|
method:'POST',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取报备列表
|
||||||
|
export function reportHistory(data){
|
||||||
|
return request({
|
||||||
|
url: '/supplierAppV2/dispatchApp/order/reportHistory',
|
||||||
|
method:'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取订单信息
|
||||||
|
export function getOrderInfo(data){
|
||||||
|
return request({
|
||||||
|
url: '/supplierAppV2/dispatchApp/order/reportOrderDetail',
|
||||||
|
method:'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -54,14 +54,14 @@ export function userFeedback(data){
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//二手车信息擦亮
|
//二手拖车信息擦亮
|
||||||
export function usedCarPolish(data){
|
export function usedCarPolish(data){
|
||||||
return request({
|
return request({
|
||||||
url: `/toc-user/car-app/usedCarPolish/${data}`,
|
url: `/toc-user/car-app/usedCarPolish/${data}`,
|
||||||
method:'POST',
|
method:'POST',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//二手车信息下架
|
//二手拖车信息下架
|
||||||
export function usedCarRemove(data){
|
export function usedCarRemove(data){
|
||||||
return request({
|
return request({
|
||||||
url: '/toc-user/car-app/usedCarRemove',
|
url: '/toc-user/car-app/usedCarRemove',
|
||||||
@ -70,7 +70,7 @@ export function usedCarRemove(data){
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//二手车信息重新上架
|
//二手拖车信息重新上架
|
||||||
export function usedCarReShelf(data){
|
export function usedCarReShelf(data){
|
||||||
return request({
|
return request({
|
||||||
url: `/toc-user/car-app/usedCarReShelf/${data}`,
|
url: `/toc-user/car-app/usedCarReShelf/${data}`,
|
||||||
@ -93,4 +93,23 @@ export function saveRecord(data){
|
|||||||
contentType: 'application/json',
|
contentType: 'application/json',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
// 审核不通过再次提交
|
||||||
|
export function auditCarInfoAgain(data){
|
||||||
|
return request({
|
||||||
|
url: '/toc-user/car-app/auditCarInfoAgain',
|
||||||
|
method:'POST',
|
||||||
|
contentType: 'application/json',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 我的发布列表
|
||||||
|
export function getAddressForService(data){
|
||||||
|
return request({
|
||||||
|
url: '/base/gaodeMap/getPlaceByAddress',
|
||||||
|
method:'GET',
|
||||||
|
params: data,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
BIN
src/assets/alarm_check.png
Normal file
|
After Width: | Height: | Size: 785 B |
BIN
src/assets/alarm_one.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
src/assets/alarm_repair.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
src/assets/alarm_three.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
src/assets/alarm_tip.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
src/assets/alarm_trailer.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
src/assets/alarm_two.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
src/assets/alarm_unCheck.png
Normal file
|
After Width: | Height: | Size: 770 B |
BIN
src/assets/authentication/aduit_icon1.png
Normal file
|
After Width: | Height: | Size: 790 B |
BIN
src/assets/authentication/arrow_left.png
Normal file
|
After Width: | Height: | Size: 441 B |
BIN
src/assets/authentication/arrow_right.png
Normal file
|
After Width: | Height: | Size: 277 B |
BIN
src/assets/authentication/audit_icon1_gray.png
Normal file
|
After Width: | Height: | Size: 727 B |
BIN
src/assets/authentication/audit_icon2.png
Normal file
|
After Width: | Height: | Size: 901 B |
BIN
src/assets/authentication/audit_icon2_gray.png
Normal file
|
After Width: | Height: | Size: 803 B |
BIN
src/assets/authentication/audit_icon3.png
Normal file
|
After Width: | Height: | Size: 478 B |
BIN
src/assets/authentication/audit_icon3_gray.png
Normal file
|
After Width: | Height: | Size: 470 B |
BIN
src/assets/authentication/audit_icon4.png
Normal file
|
After Width: | Height: | Size: 795 B |
BIN
src/assets/authentication/audit_icon4_gray.png
Normal file
|
After Width: | Height: | Size: 725 B |
BIN
src/assets/authentication/bank_icon1.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
src/assets/authentication/camera.png
Normal file
|
After Width: | Height: | Size: 721 B |
BIN
src/assets/authentication/camera_bg.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
src/assets/authentication/carInfo_icon1.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
src/assets/authentication/carInfo_icon2.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
src/assets/authentication/carInfo_icon3.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
src/assets/authentication/carInfo_icon4.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
src/assets/authentication/carInfo_icon5.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/assets/authentication/car_icon1.png
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
BIN
src/assets/authentication/car_icon2.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
src/assets/authentication/icon_register.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
src/assets/authentication/icon_tip.png
Normal file
|
After Width: | Height: | Size: 727 B |
BIN
src/assets/authentication/person_header.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
src/assets/authentication/person_idcard1.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
src/assets/authentication/person_idcard2.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src/assets/authentication/tipBg.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
src/assets/emptyData.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
src/assets/insured-jianbian.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
src/assets/insured.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
src/assets/report/add_report_address.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
src/assets/report/add_report_arrow.png
Normal file
|
After Width: | Height: | Size: 589 B |
BIN
src/assets/report/add_report_bg.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
src/assets/report/add_report_close.png
Normal file
|
After Width: | Height: | Size: 1022 B |
BIN
src/assets/report/add_report_dot.png
Normal file
|
After Width: | Height: | Size: 355 B |
BIN
src/assets/report/add_report_time.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
src/assets/report/destMarker.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
src/assets/report/report_address.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
src/assets/report/report_ai.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/report/report_cancel.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
src/assets/report/report_customer.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/report/report_delay.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
src/assets/report/report_dispatch.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
src/assets/report/report_driver.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
src/assets/report/report_fee.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
src/assets/report/report_line.png
Normal file
|
After Width: | Height: | Size: 300 B |
BIN
src/assets/report/report_logo.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
src/assets/report/report_other.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
src/assets/report/report_unconnect.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
src/assets/secondHandCar/icon_saled.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src/assets/secondHandCar/icon_zdOwner.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
src/assets/secondHandCar/reviseXiajia.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
src/assets/secondHandCar/sellingInfo.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
src/assets/secondHandCar/viewXiajia.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
src/assets/secondHandCar/xiajia_nopass.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
src/assets/secondHandCar/xiajia_saled.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
src/assets/secondHandCar/xiajia_scrap.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
src/assets/secondHandCar/xiajia_warting.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 6.2 KiB |
43
src/router/authentication-router.js
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
const authenticationRouter = [
|
||||||
|
{
|
||||||
|
path: '/auditList',
|
||||||
|
name: 'auditList',
|
||||||
|
component: () => import('@/views/rvDriverAuthentication/auditList.vue'),
|
||||||
|
meta:{
|
||||||
|
title: '小板运输司机认证',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/personAudit',
|
||||||
|
name: 'personAudit',
|
||||||
|
component: () => import('@/views/rvDriverAuthentication/personAudit.vue'),
|
||||||
|
meta:{
|
||||||
|
title: '实名认证',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/carAudit',
|
||||||
|
name: 'carAudit',
|
||||||
|
component: () => import('@/views/rvDriverAuthentication/carAudit.vue'),
|
||||||
|
meta:{
|
||||||
|
title: '驾驶证认证',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/carInfoAudit',
|
||||||
|
name: 'carInfoAudit',
|
||||||
|
component: () => import('@/views/rvDriverAuthentication/carInfoAudit.vue'),
|
||||||
|
meta:{
|
||||||
|
title: '车辆信息认证',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/bankInfo',
|
||||||
|
name: 'bankInfo',
|
||||||
|
component: () => import('@/views/rvDriverAuthentication/bankInfo.vue'),
|
||||||
|
meta:{
|
||||||
|
title: '银行卡信息认证',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
export default authenticationRouter
|
||||||
@ -4,6 +4,8 @@ Vue.use(VueRouter);
|
|||||||
import kpiRouter from './kpi-router'
|
import kpiRouter from './kpi-router'
|
||||||
import invoiceRouter from "@/router/invoice-router";
|
import invoiceRouter from "@/router/invoice-router";
|
||||||
import secondHandRouter from "@/router/second-hand-router";
|
import secondHandRouter from "@/router/second-hand-router";
|
||||||
|
import reportRouter from "@/router/report-router"
|
||||||
|
import authenticationRouter from "@/router/authentication-router"
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
@ -250,6 +252,22 @@ const routes = [
|
|||||||
title:'车辆维保'
|
title:'车辆维保'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/vehicleAlarmList',
|
||||||
|
name: 'vehicleAlarmList',
|
||||||
|
component:()=>import('@/views/vehicle-maintenance/vehicle-alarm-list.vue'),
|
||||||
|
meta: {
|
||||||
|
title:'车辆报警'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/vehicleAlarmDetail',
|
||||||
|
name: 'vehicleAlarmDetail',
|
||||||
|
component:()=>import('@/views/vehicle-maintenance/vehicle-alarm-detail.vue'),
|
||||||
|
meta: {
|
||||||
|
title:'报警详情'
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/maintenanceApplication',
|
path: '/maintenanceApplication',
|
||||||
name: 'maintenanceApplication',
|
name: 'maintenanceApplication',
|
||||||
@ -277,6 +295,8 @@ const routes = [
|
|||||||
...kpiRouter,
|
...kpiRouter,
|
||||||
...invoiceRouter,
|
...invoiceRouter,
|
||||||
...secondHandRouter,
|
...secondHandRouter,
|
||||||
|
...reportRouter,
|
||||||
|
...authenticationRouter
|
||||||
]
|
]
|
||||||
|
|
||||||
const router = new VueRouter({
|
const router = new VueRouter({
|
||||||
|
|||||||
29
src/router/report-router.js
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
const reportRouter = [
|
||||||
|
{
|
||||||
|
path: '/reportIndex',
|
||||||
|
name: 'reportIndex',
|
||||||
|
component: () => import('@/views/report/reportIndex'),
|
||||||
|
meta:{
|
||||||
|
title: '道路救援',
|
||||||
|
cache: true,
|
||||||
|
modalState: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/addressMap',
|
||||||
|
name: 'addressMap',
|
||||||
|
component: () => import('@/views/report/addressMap'),
|
||||||
|
meta:{
|
||||||
|
title: '道路救援',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/insuredPage',
|
||||||
|
name: 'insuredPage',
|
||||||
|
component: () => import('@/views/liabilityInsurance/insuredPage'),
|
||||||
|
meta:{
|
||||||
|
title: '参保救援职业责任险',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
export default reportRouter
|
||||||
@ -55,5 +55,13 @@ const secondHandCar = [
|
|||||||
title: '免责声明',
|
title: '免责声明',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/sellingInfo',
|
||||||
|
name: 'sellingInfo',
|
||||||
|
component: () => import('@/views/secondHandCar/sellingInfo.vue'),
|
||||||
|
meta:{
|
||||||
|
title: '售出信息',
|
||||||
|
}
|
||||||
|
},
|
||||||
]
|
]
|
||||||
export default secondHandCar
|
export default secondHandCar
|
||||||
|
|||||||
@ -47,4 +47,84 @@ select{
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #000000;
|
color: #000000;
|
||||||
}
|
}
|
||||||
|
.text_center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
//同意协议勾选
|
||||||
|
.protocol-list {
|
||||||
|
display: flex;
|
||||||
|
//align-items: top;
|
||||||
|
margin-top: 5px;
|
||||||
|
justify-content: center;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 20px;
|
||||||
|
text-align: center;
|
||||||
|
width: 100%;
|
||||||
|
padding: 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.protocol-text {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #203152;
|
||||||
|
line-height: 18px;
|
||||||
|
//text-align: left;
|
||||||
|
.linkColor {
|
||||||
|
color: #3364B7;
|
||||||
|
word-break: keep-all;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon_register {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
.mr15 {
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
.mt20 {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
.flex_vertical_center {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.flex {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.flex_between {
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*@mixin wh($w,$h) {
|
||||||
|
width: $w;
|
||||||
|
height: $h;
|
||||||
|
}
|
||||||
|
@mixin flex(){
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
@mixin alignCenter(){
|
||||||
|
@include flex();
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
@mixin col(){
|
||||||
|
@include flex();
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
@mixin colBothCenter(){
|
||||||
|
@include col();
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
@mixin sizingPadding($t,$r,$b,$l) {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: $t $r $b $l;
|
||||||
|
}*/
|
||||||
|
/*@mixin weigthSize($wei,$size){
|
||||||
|
font-weight:$wei ;
|
||||||
|
font-size: $size;
|
||||||
|
}
|
||||||
|
@mixin weigthSizeColor($wei,$size,$col){
|
||||||
|
@include weigthSize($wei,$size);
|
||||||
|
color: $col;
|
||||||
|
}*/
|
||||||
|
|||||||
43
src/styles/infoShow.scss
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
.carInfo{
|
||||||
|
margin-top: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 151px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
padding:8px 23px 17px 30px ;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
.left_wrap,.right_wrap{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-around;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-family: PingFangSC-Medium, PingFang SC;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #323643;
|
||||||
|
.mar_left{
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
.star {
|
||||||
|
color: red;
|
||||||
|
margin-right: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.right_wrap{
|
||||||
|
align-items: flex-end;
|
||||||
|
.phone{
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #323643;
|
||||||
|
}
|
||||||
|
input{
|
||||||
|
font-size: 12px;
|
||||||
|
text-align: right;
|
||||||
|
&::-webkit-input-placeholder { /* WebKit browsers,webkit内核浏览器 */
|
||||||
|
color: #A1A1A1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -104,4 +104,33 @@
|
|||||||
@mixin colHeight($col,$hei){
|
@mixin colHeight($col,$hei){
|
||||||
color: $col;
|
color: $col;
|
||||||
line-height: $hei;
|
line-height: $hei;
|
||||||
|
}
|
||||||
|
@mixin width_height($width,$height){
|
||||||
|
width: $width;
|
||||||
|
height: $height;
|
||||||
|
}
|
||||||
|
@mixin flex($row,$colum){
|
||||||
|
display: flex;
|
||||||
|
justify-content: $row;
|
||||||
|
align-items: $colum;
|
||||||
|
}
|
||||||
|
@mixin center(){
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
@mixin direction($justify-content){
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: $justify-content;
|
||||||
|
}
|
||||||
|
@mixin iconImg($width,$height,$marginRight){
|
||||||
|
width: $width;
|
||||||
|
height: $height;
|
||||||
|
margin-right: $marginRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin iconImgLeft($width,$height,$marginRight){
|
||||||
|
width: $width;
|
||||||
|
height: $height;
|
||||||
|
margin-left: $marginRight;
|
||||||
}
|
}
|
||||||
@ -42,11 +42,89 @@ const timeFormat=(data) =>{
|
|||||||
return formattedDate;
|
return formattedDate;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
// 认证状态
|
||||||
|
const verifyStatus=(id)=> {
|
||||||
|
const ids = String(id)
|
||||||
|
const status = {
|
||||||
|
'0': 1, // 个人信息认证
|
||||||
|
'-1': 1, // 已注册
|
||||||
|
'7': 1, // 已发送待认证
|
||||||
|
'1': 2, // 驾照信息认证
|
||||||
|
'2': 3, // 车辆信息审核
|
||||||
|
'3': 4, // 银行卡信息审核
|
||||||
|
'4': 5, // 认证中
|
||||||
|
'8': 6, // 审核中
|
||||||
|
'11': 6, // 审核失败
|
||||||
|
'12': 6 // 审核成功
|
||||||
|
}
|
||||||
|
return status[ids]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 认证状态 简易版
|
||||||
|
const verifyStatusSimple=(id)=> {
|
||||||
|
const ids = String(id)
|
||||||
|
const status = {
|
||||||
|
'0': 1, // 个人信息认证
|
||||||
|
'-1': 1, // 已注册
|
||||||
|
'7': 1, // 已发送待认证
|
||||||
|
'1': 3, // 驾照信息认证
|
||||||
|
'2': 3, // 车辆信息审核
|
||||||
|
'3': 4, // 银行卡信息审核
|
||||||
|
'4': 5, // 认证中
|
||||||
|
'8': 6, // 审核中
|
||||||
|
'11': 6, // 审核失败
|
||||||
|
'12': 6 // 审核成功
|
||||||
|
}
|
||||||
|
return status[ids]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 认证状态
|
||||||
|
const tipString=(id)=> {
|
||||||
|
const ids = String(id)
|
||||||
|
const status = {
|
||||||
|
'0': { // 个人信息认证
|
||||||
|
tip: '认证待提交',
|
||||||
|
button: '待认证'
|
||||||
|
},
|
||||||
|
'1': { // 驾照信息认证
|
||||||
|
tip: '认证待提交',
|
||||||
|
button: '待认证'
|
||||||
|
},
|
||||||
|
'2': { // 车辆信息审核
|
||||||
|
tip: '认证待提交',
|
||||||
|
button: '待认证'
|
||||||
|
},
|
||||||
|
'3': { // 银行卡信息审核
|
||||||
|
tip: '认证待提交',
|
||||||
|
button: '待认证'
|
||||||
|
},
|
||||||
|
'4': { // 认证中
|
||||||
|
tip: '认证待提交',
|
||||||
|
button: '待认证'
|
||||||
|
},
|
||||||
|
'8': { // 审核中
|
||||||
|
tip: '认证审核中',
|
||||||
|
button: '审核中'
|
||||||
|
},
|
||||||
|
'11': { // 审核失败
|
||||||
|
tip: '认证审核失败',
|
||||||
|
button: '审核失败'
|
||||||
|
},
|
||||||
|
'12': { // 审核成功
|
||||||
|
tip: '认证审核成功',
|
||||||
|
button: '审核成功'
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return status[ids]
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
formatNumber,
|
formatNumber,
|
||||||
formatDate,
|
formatDate,
|
||||||
leftCopy,
|
leftCopy,
|
||||||
timeFormat,
|
timeFormat,
|
||||||
formatDate1
|
formatDate1,
|
||||||
|
verifyStatus,
|
||||||
|
verifyStatusSimple,
|
||||||
|
tipString
|
||||||
}
|
}
|
||||||
@ -11,7 +11,11 @@ const service = axios.create({
|
|||||||
})
|
})
|
||||||
const urlParams = new URLSearchParams(window.location.search);
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
let token = urlParams.get('token');
|
let token = urlParams.get('token');
|
||||||
localStorage.setItem('token', token);
|
if( token ) {
|
||||||
|
localStorage.setItem('token', token);
|
||||||
|
} else {
|
||||||
|
localStorage.setItem('token', '');
|
||||||
|
}
|
||||||
service.interceptors.request.use(
|
service.interceptors.request.use(
|
||||||
config => {
|
config => {
|
||||||
let reqUrl=config.url
|
let reqUrl=config.url
|
||||||
@ -21,11 +25,13 @@ service.interceptors.request.use(
|
|||||||
}
|
}
|
||||||
config.headers['Content-Type'] = config.contentType || 'application/x-www-form-urlencoded'
|
config.headers['Content-Type'] = config.contentType || 'application/x-www-form-urlencoded'
|
||||||
let token = localStorage.getItem('token');
|
let token = localStorage.getItem('token');
|
||||||
// let token='4099761587129c46b03c9316c9e866c9'
|
// let token='eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJBTkNIQU5HIiwidXNlcklkIjo0NTY3MSwibmFtZSI6IuWuieeVhSIsInVzZXJOYW1lIjoiQU5DSEFORyIsInN1cHBsaWVySWQiOjExMjgsImlzWmQiOjAsImV4cCI6MTc1NTQyMjUyNX0.xzDZhaANJFnbeViIHJA0SEtOyTv7Ja3rKmXqRKRuFkc'
|
||||||
// let token='eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJTSEhQWEIiLCJ1c2VySWQiOjU0NzI2LCJuYW1lIjoiI-a1i-ivleWwj-eZveeZvSIsInVzZXJOYW1lIjoiU0hIUFhCIiwic3VwcGxpZXJJZCI6MTAwMDE2NSwiZXhwIjoxNzQ0NTEwNzkwfQ.JPk0OA7slYJN3FIi_uhW4Y0CiWRvl6R1dK8MRTbyhD8'
|
// let token='eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJTSEhQWEIiLCJ1c2VySWQiOjU0NzI2LCJuYW1lIjoiI-a1i-ivleWwj-eZveeZvSIsInVzZXJOYW1lIjoiU0hIUFhCIiwic3VwcGxpZXJJZCI6MTAwMDE2NSwiZXhwIjoxNzQ0NTEwNzkwfQ.JPk0OA7slYJN3FIi_uhW4Y0CiWRvl6R1dK8MRTbyhD8'
|
||||||
if(!(reqUrl=='/supplier/supplierTraining/trainingTask' || reqUrl=='/supplier/supplierTraining/normalList' || reqUrl=='/supplier/supplierTraining/trainingList')){
|
if(!(reqUrl=='/supplier/supplierTraining/trainingTask' || reqUrl=='/supplier/supplierTraining/normalList' || reqUrl=='/supplier/supplierTraining/trainingList')){
|
||||||
|
if(token) {
|
||||||
config.headers['Authorization'] = `${token}`;
|
config.headers['Authorization'] = `${token}`;
|
||||||
config.headers['token'] = `${token}`;
|
config.headers['token'] = `${token}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return config
|
return config
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { getAddressForService } from "@/api/secondHandCar"
|
||||||
// 获取定位, 返回 经纬度
|
// 获取定位, 返回 经纬度
|
||||||
export function getLocal(mapContext) {
|
export function getLocal(mapContext) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
@ -36,6 +37,7 @@ export function getAddress(mapContext, lnglat) {
|
|||||||
} else {
|
} else {
|
||||||
console.log(result)
|
console.log(result)
|
||||||
alert(JSON.stringify(result))
|
alert(JSON.stringify(result))
|
||||||
|
reject(result)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -44,8 +46,20 @@ export function getAddress(mapContext, lnglat) {
|
|||||||
|
|
||||||
// 输入提示
|
// 输入提示
|
||||||
export function searchFun(mapContext, cityCode, keyword) {
|
export function searchFun(mapContext, cityCode, keyword) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve) => {
|
||||||
mapContext.plugin('AMap.AutoComplete', function(){
|
getAddressForService({
|
||||||
|
city: '',
|
||||||
|
address: keyword
|
||||||
|
}).then((res) => {
|
||||||
|
if(res.code == 200) {
|
||||||
|
resolve(res?.data?.pois || [])
|
||||||
|
} else {
|
||||||
|
resolve([])
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
resolve([])
|
||||||
|
})
|
||||||
|
/*mapContext.plugin('AMap.AutoComplete', function(){
|
||||||
var autoOptions = {
|
var autoOptions = {
|
||||||
city: cityCode || '全国',
|
city: cityCode || '全国',
|
||||||
};
|
};
|
||||||
@ -57,10 +71,10 @@ export function searchFun(mapContext, cityCode, keyword) {
|
|||||||
if(result.info == 'OK') {
|
if(result.info == 'OK') {
|
||||||
resolve(result.tips)
|
resolve(result.tips)
|
||||||
} else {
|
} else {
|
||||||
reject(result)
|
resolve([])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})*/
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,6 +104,7 @@ export function getRoad( mapContext, startLng, startLat, endLng, endLat ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
function drawRoute(route, map) {
|
function drawRoute(route, map) {
|
||||||
let path = parseRouteToPath(route)
|
let path = parseRouteToPath(route)
|
||||||
|
|
||||||
@ -106,3 +121,4 @@ function drawRoute(route, map) {
|
|||||||
|
|
||||||
map.add(routeLine);
|
map.add(routeLine);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|||||||
@ -5,6 +5,12 @@ export const myMixins = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
showFun() {
|
||||||
|
if( localStorage.getItem('infoVerify') == 8 || localStorage.getItem('infoVerify') == 12 ) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
},
|
||||||
goPage(page, query) {
|
goPage(page, query) {
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
name: page,
|
name: page,
|
||||||
|
|||||||
@ -101,7 +101,7 @@ export default {
|
|||||||
const urlParams = new URLSearchParams(window.location.search);
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
this.driverId = urlParams.get('driverId');
|
this.driverId = urlParams.get('driverId');
|
||||||
this.time=timeFormat(Date.now())
|
this.time=timeFormat(Date.now())
|
||||||
this.keyword=urlParams.get('keyWord') || ''
|
this.keyword=urlParams.get('keyword') || ''
|
||||||
this.getTrainingList();
|
this.getTrainingList();
|
||||||
document.addEventListener('visibilitychange', async ( ) => {
|
document.addEventListener('visibilitychange', async ( ) => {
|
||||||
let state = document.visibilityState
|
let state = document.visibilityState
|
||||||
|
|||||||
@ -36,9 +36,6 @@
|
|||||||
v-model="keyword"
|
v-model="keyword"
|
||||||
placeholder="名称/关键词/简介"
|
placeholder="名称/关键词/简介"
|
||||||
>
|
>
|
||||||
<!-- <template #button>
|
|
||||||
<van-icon class="search" name="search" size="20" @click="getTrainingList"/>
|
|
||||||
</template>-->
|
|
||||||
</van-field>
|
</van-field>
|
||||||
</template>
|
</template>
|
||||||
<template slot="left">
|
<template slot="left">
|
||||||
@ -104,32 +101,34 @@ export default {
|
|||||||
this.supplierId = urlParams.get('supplierId');
|
this.supplierId = urlParams.get('supplierId');
|
||||||
this.driverId = urlParams.get('driverId');
|
this.driverId = urlParams.get('driverId');
|
||||||
if(this.driverId){
|
if(this.driverId){
|
||||||
this.keyword=urlParams.get('keyWord') || ''
|
this.keyword=urlParams.get('keyword') || ''
|
||||||
}
|
}
|
||||||
this.getNormalList()
|
this.getNormalList()
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
onRefresh() {
|
onRefresh() {
|
||||||
this.getNormalList()
|
this.getNormalList()
|
||||||
setTimeout(() => {
|
if(!this.isLoading){
|
||||||
|
this.$toast('刷新成功');
|
||||||
|
}
|
||||||
|
/* setTimeout(() => {
|
||||||
this.$toast('刷新成功');
|
this.$toast('刷新成功');
|
||||||
this.isLoading = false;
|
this.isLoading = false;
|
||||||
}, 1000);
|
}, 1000);*/
|
||||||
},
|
},
|
||||||
async changeTab(index) {
|
async changeTab(index) {
|
||||||
this.activeIndex = index
|
this.activeIndex = index
|
||||||
await this.getNormalList()
|
await this.getNormalList()
|
||||||
},
|
},
|
||||||
async getNormalList(){
|
async getNormalList(){
|
||||||
let res= await getNormalList({
|
this.isLoading = true;
|
||||||
type:this.supplierId ? 2 : 1,
|
|
||||||
// type:2,
|
|
||||||
id: this.supplierId ? this.supplierId : this.driverId,
|
|
||||||
// id:this.supplierId,//33041,
|
|
||||||
text:this.keyword || '',
|
|
||||||
})
|
|
||||||
this.totalList=[]
|
this.totalList=[]
|
||||||
this.pageList=[]
|
this.pageList=[]
|
||||||
|
let res= await getNormalList({
|
||||||
|
type:this.supplierId ? 2 : 1,
|
||||||
|
id: this.supplierId ? this.supplierId : this.driverId,
|
||||||
|
text:this.keyword || '',
|
||||||
|
})
|
||||||
this.totalList=res.data.list
|
this.totalList=res.data.list
|
||||||
let result=[]
|
let result=[]
|
||||||
if(this.activeIndex === 0){
|
if(this.activeIndex === 0){
|
||||||
@ -149,6 +148,7 @@ export default {
|
|||||||
}else {
|
}else {
|
||||||
this.showEmpty = false
|
this.showEmpty = false
|
||||||
}
|
}
|
||||||
|
this.isLoading = false
|
||||||
},
|
},
|
||||||
initShow(){
|
initShow(){
|
||||||
this.keyword= '',
|
this.keyword= '',
|
||||||
|
|||||||
@ -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 } 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,6 +133,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
/* async getJumpHandler() {
|
||||||
|
let res = await jumpPage();
|
||||||
|
return res
|
||||||
|
},*/
|
||||||
async initData() {
|
async initData() {
|
||||||
this.list = JSON.parse(localStorage.getItem('list'));
|
this.list = JSON.parse(localStorage.getItem('list'));
|
||||||
this.batchIds = [];
|
this.batchIds = [];
|
||||||
@ -230,14 +235,13 @@
|
|||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
beforeRead (file) {
|
async beforeRead (file) {
|
||||||
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 {
|
||||||
|
|||||||
@ -72,7 +72,7 @@
|
|||||||
<div class="itemContent">
|
<div class="itemContent">
|
||||||
<div class="titleType">
|
<div class="titleType">
|
||||||
<img class="startImg" src="@/assets/start.png" />
|
<img class="startImg" src="@/assets/start.png" />
|
||||||
<span>车辆类型</span>
|
<span>车辆类别</span>
|
||||||
</div>
|
</div>
|
||||||
<!--
|
<!--
|
||||||
<select
|
<select
|
||||||
@ -111,6 +111,29 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="itemContent">
|
||||||
|
<div class="titleType">
|
||||||
|
<img class="startImg" src="@/assets/start.png" />
|
||||||
|
<span>车辆属性</span>
|
||||||
|
</div>
|
||||||
|
<el-select
|
||||||
|
v-model="virtualVehicle"
|
||||||
|
value-key="name"
|
||||||
|
class="elSelect"
|
||||||
|
collapse-tags="collapse-tags"
|
||||||
|
placeholder="请选择" style="width: 55%"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in virtualVehicleOptions"
|
||||||
|
:key="item.name"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.value"
|
||||||
|
>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="lineBot"></div>
|
||||||
<div class="itemContent">
|
<div class="itemContent">
|
||||||
<div class="titleType">
|
<div class="titleType">
|
||||||
<span>牌照</span>
|
<span>牌照</span>
|
||||||
@ -134,7 +157,7 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="lineBot"></div>
|
<div class="lineBot"></div>
|
||||||
<div class="itemContent">
|
<!--<div class="itemContent">
|
||||||
<div class="titleType">
|
<div class="titleType">
|
||||||
<img class="startImg" src="@/assets/start.png" />
|
<img class="startImg" src="@/assets/start.png" />
|
||||||
<span>是否参与聚合</span>
|
<span>是否参与聚合</span>
|
||||||
@ -160,7 +183,115 @@
|
|||||||
</van-radio-group>
|
</van-radio-group>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="lineBot"></div>-->
|
||||||
|
<div class="itemContent">
|
||||||
|
<div class="titleType">
|
||||||
|
<img class="startImg" src="@/assets/start.png" />
|
||||||
|
<span>车辆状态</span>
|
||||||
|
</div>
|
||||||
|
<div class="isJoin">
|
||||||
|
<van-radio-group v-model="vehicleStatus" @change="isVehicleChange" class="joinWrap">
|
||||||
|
<van-radio :name="1" style="margin-right: 26px">
|
||||||
|
启用
|
||||||
|
<img
|
||||||
|
slot="icon"
|
||||||
|
slot-scope="props"
|
||||||
|
:src="props.checked ? activeIcon : inactiveIcon"
|
||||||
|
>
|
||||||
|
</van-radio>
|
||||||
|
<van-radio :name="2">
|
||||||
|
停用
|
||||||
|
<img
|
||||||
|
slot="icon"
|
||||||
|
slot-scope="props"
|
||||||
|
:src="props.checked ? activeIcon : inactiveIcon"
|
||||||
|
>
|
||||||
|
</van-radio>
|
||||||
|
</van-radio-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="itemContent">
|
||||||
|
<div class="titleType">
|
||||||
|
<img class="startImg" src="@/assets/start.png" />
|
||||||
|
<span>救援职业责任险</span>
|
||||||
|
</div>
|
||||||
|
<div class="isJoin">
|
||||||
|
<van-radio-group v-model="hasLiabilityInsurance" @change="isChange" class="joinWrap">
|
||||||
|
<van-radio :name="1" style="margin-right: 26px">
|
||||||
|
有
|
||||||
|
<img
|
||||||
|
slot="icon"
|
||||||
|
slot-scope="props"
|
||||||
|
:src="props.checked ? activeIcon : inactiveIcon"
|
||||||
|
>
|
||||||
|
</van-radio>
|
||||||
|
<van-radio :name="0">
|
||||||
|
无
|
||||||
|
<img
|
||||||
|
slot="icon"
|
||||||
|
slot-scope="props"
|
||||||
|
:src="props.checked ? activeIcon : inactiveIcon"
|
||||||
|
>
|
||||||
|
</van-radio>
|
||||||
|
</van-radio-group>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="lineBot"></div>
|
<div class="lineBot"></div>
|
||||||
|
<template v-if="hasLiabilityInsurance == 1">
|
||||||
|
<div class="itemContent">
|
||||||
|
<div class="titleType">
|
||||||
|
<img class="startImg" src="@/assets/start.png" />
|
||||||
|
<span>保单</span>
|
||||||
|
</div>
|
||||||
|
<van-uploader
|
||||||
|
v-model="insurancePictureFiles"
|
||||||
|
:after-read="insurancePictureFilesHandler"
|
||||||
|
max-count="1"
|
||||||
|
:preview-size="54"
|
||||||
|
accept="image "
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="lineBot"></div>
|
||||||
|
<div class="itemContent">
|
||||||
|
<div class="titleType">
|
||||||
|
<img class="startImg" src="@/assets/start.png" />
|
||||||
|
<span>承保保司</span>
|
||||||
|
</div>
|
||||||
|
<el-select
|
||||||
|
v-model="insuranceCorp"
|
||||||
|
value-key="name"
|
||||||
|
class="elSelect"
|
||||||
|
collapse-tags="collapse-tags"
|
||||||
|
placeholder="请选择" style="width: 55%"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in insuranceOptions"
|
||||||
|
:key="item.name"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.value"
|
||||||
|
>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
<div class="lineBot"></div>
|
||||||
|
<div class="itemContent">
|
||||||
|
<div class="titleType">
|
||||||
|
<img class="startImg" src="@/assets/start.png" />
|
||||||
|
<span>保险有效期</span>
|
||||||
|
</div>
|
||||||
|
<el-input style="width: 55%" readonly @focus="showDatePicker = true" v-model="dateVal" placeholder="请选择发布日期" :class="{'customSel':true,'customInput':true , 'has-value': dateVal }" >
|
||||||
|
<template #suffix>
|
||||||
|
<i
|
||||||
|
v-if="dateVal"
|
||||||
|
class="el-icon-circle-close el-input__icon"
|
||||||
|
@click="dateVal = ''"
|
||||||
|
></i>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<div class="itemContent">
|
<div class="itemContent">
|
||||||
<div class="titleType">
|
<div class="titleType">
|
||||||
<img class="startImg" src="@/assets/start.png" />
|
<img class="startImg" src="@/assets/start.png" />
|
||||||
@ -168,28 +299,39 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="serviceType">
|
<div class="serviceType">
|
||||||
|
<el-tree
|
||||||
<div class="trailerService" v-for="(item,index) in supplierServiceList" :key="index">
|
show-checkbox
|
||||||
<div class="serviceline" @click="loadAll(index)">
|
node-key="id"
|
||||||
<img :ref="'serviceline' + index" :src="imageUrl" style="width: 20px;height: 15px" >
|
ref="tree"
|
||||||
<span class="service">{{ item.name }}:</span>
|
:highlight-current="true"
|
||||||
<span class="line"></span>
|
:expand-on-click-node="false"
|
||||||
</div>
|
:data="supplierServiceList"
|
||||||
<div :ref="'checkboxGroup' + index" class="checkbox-group">
|
:props="defaultProps">
|
||||||
<van-checkbox-group v-model="serviceIds" v-for="(item2,index2) in item.children" :key="index2" class="radioWrap">
|
</el-tree>
|
||||||
<van-checkbox class="item" :name="item2.id">{{item2.name }}</van-checkbox>
|
<!--<div class="trailerService" v-for="(item,index) in supplierServiceList" :key="index">
|
||||||
</van-checkbox-group>
|
<div class="serviceline" @click="loadAll(index)">
|
||||||
</div>
|
<img :ref="'serviceline' + index" :src="imageUrl" style="width: 20px;height: 15px" >
|
||||||
|
<span class="service">{{ item.name }}:</span>
|
||||||
</div>
|
<span class="line"></span>
|
||||||
|
</div>
|
||||||
|
<div :ref="'checkboxGroup' + index" class="checkbox-group">
|
||||||
|
<van-checkbox-group v-model="serviceIds" v-for="(item2,index2) in item.children" :key="index2" class="radioWrap">
|
||||||
|
<van-checkbox class="item" :name="item2.id">{{item2.name }}</van-checkbox>
|
||||||
|
</van-checkbox-group>
|
||||||
|
</div>
|
||||||
|
</div>-->
|
||||||
</div>
|
</div>
|
||||||
<two-common-btn class="btn" @cancelClick="h5GoBack" @submitClick="submitBtn" />
|
<two-common-btn class="btn" @cancelClick="h5GoBack" @submitClick="submitBtn" />
|
||||||
|
<van-calendar v-model="showDatePicker" :min-date="minDate"
|
||||||
|
:max-date="maxDate" type="range" @confirm="onConfirm" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
// uploadImage
|
// uploadImage
|
||||||
|
import {Dialog} from "vant";
|
||||||
|
import {formatDate1} from "@/utils/common"
|
||||||
import {myMixins} from "@/utils/myMixins"
|
import {myMixins} from "@/utils/myMixins"
|
||||||
import {vehicleTypeList,saveVehicle,getInfoById,supplierServiceTree, uploadImage, ocrHandler} from "@/api/mine"
|
import {vehicleTypeList,saveVehicle,getInfoById,supplierServiceTree, uploadImage, ocrHandler} from "@/api/mine"
|
||||||
import TwoCommonBtn from "@/components/twoBtnCommon.vue"
|
import TwoCommonBtn from "@/components/twoBtnCommon.vue"
|
||||||
@ -199,8 +341,20 @@ export default {
|
|||||||
mixins:[myMixins],
|
mixins:[myMixins],
|
||||||
data(){
|
data(){
|
||||||
return{
|
return{
|
||||||
|
defaultProps: {
|
||||||
|
children: 'children',
|
||||||
|
label: 'name'
|
||||||
|
},
|
||||||
|
minDate: new Date(1970, 0, 1), // 设置最小可选日期(1970年1月1日)
|
||||||
|
maxDate: new Date(2099, 11, 31), // 设置最大可选日期(2099年12月31日)
|
||||||
|
checkList: [],
|
||||||
|
virtualVehicle: '',
|
||||||
|
vehicleStatus: '',
|
||||||
|
showDatePicker: false,
|
||||||
|
dateVal: '',
|
||||||
trailerService: '',//拖车服务
|
trailerService: '',//拖车服务
|
||||||
isJoin:'',//是否参与
|
isJoin:'',//是否参与
|
||||||
|
hasLiabilityInsurance: '', // 有无责任险
|
||||||
activeIcon: require('@/assets/check.png'),
|
activeIcon: require('@/assets/check.png'),
|
||||||
inactiveIcon: require('@/assets/uncheck.png'),
|
inactiveIcon: require('@/assets/uncheck.png'),
|
||||||
// result: [],
|
// result: [],
|
||||||
@ -218,15 +372,18 @@ export default {
|
|||||||
vehicleLicenseBackList: [],
|
vehicleLicenseBackList: [],
|
||||||
vehicleLicenseCarPhotoList: [],
|
vehicleLicenseCarPhotoList: [],
|
||||||
vehicleFrontPhotoList: [],
|
vehicleFrontPhotoList: [],
|
||||||
|
insurancePictureFiles: [],
|
||||||
vehicleLicenseFront: '', // 行驶证首页
|
vehicleLicenseFront: '', // 行驶证首页
|
||||||
vehicleLicenseBack: '', // 行驶证副页
|
vehicleLicenseBack: '', // 行驶证副页
|
||||||
vehicleLicenseCarPhoto: '', // 行驶证车辆照片
|
vehicleLicenseCarPhoto: '', // 行驶证车辆照片
|
||||||
vehicleFrontPhoto: '', // 车头照
|
vehicleFrontPhoto: '', // 车头照
|
||||||
|
insurancePicturePhoto: '', // 保单照片
|
||||||
vehicleLicenseInfo: {},
|
vehicleLicenseInfo: {},
|
||||||
vehicleLicenseBackOcrFlag: false, // 行驶证副页 修改时默认不需要 ocr识别
|
vehicleLicenseBackOcrFlag: false, // 行驶证副页 修改时默认不需要 ocr识别
|
||||||
isMultiple: false, // 是否支持多选
|
isMultiple: false, // 是否支持多选
|
||||||
vehicleLicense:'',//牌照
|
vehicleLicense:'',//牌照
|
||||||
vehicleFrontLicensePlate:'',//车头照车牌号码
|
vehicleFrontLicensePlate:'',//车头照车牌号码
|
||||||
|
insuranceCorp: '',
|
||||||
vehicleTypes:[{
|
vehicleTypes:[{
|
||||||
name: '小修车',
|
name: '小修车',
|
||||||
value: 1
|
value: 1
|
||||||
@ -275,6 +432,62 @@ export default {
|
|||||||
}, {
|
}, {
|
||||||
name: '其他',
|
name: '其他',
|
||||||
value: 5
|
value: 5
|
||||||
|
}],
|
||||||
|
virtualVehicleOptions: [{
|
||||||
|
name: '自有车辆',
|
||||||
|
value: 1
|
||||||
|
}, {
|
||||||
|
name: '挂靠车辆',
|
||||||
|
value: 2
|
||||||
|
}, {
|
||||||
|
name: '虚拟车辆',
|
||||||
|
value: 3
|
||||||
|
}, {
|
||||||
|
name: '借入车辆',
|
||||||
|
value: 4
|
||||||
|
}],
|
||||||
|
insuranceOptions: [{
|
||||||
|
name: '太平洋',
|
||||||
|
value: 1
|
||||||
|
}, {
|
||||||
|
name: '人保',
|
||||||
|
value: 2
|
||||||
|
}, {
|
||||||
|
name: '平安',
|
||||||
|
value: 3
|
||||||
|
}, {
|
||||||
|
name: '中华联合',
|
||||||
|
value: 4
|
||||||
|
}, {
|
||||||
|
name: '大地',
|
||||||
|
value: 5
|
||||||
|
}, {
|
||||||
|
name: '阳光',
|
||||||
|
value: 6
|
||||||
|
}, {
|
||||||
|
name: '太平',
|
||||||
|
value: 7
|
||||||
|
}, {
|
||||||
|
name: '人寿',
|
||||||
|
value: 8
|
||||||
|
}, {
|
||||||
|
name: '永安',
|
||||||
|
value: 9
|
||||||
|
}, {
|
||||||
|
name: '华安',
|
||||||
|
value: 10
|
||||||
|
}, {
|
||||||
|
name: '申能',
|
||||||
|
value: 11
|
||||||
|
}, {
|
||||||
|
name: '大家',
|
||||||
|
value: 12
|
||||||
|
}, {
|
||||||
|
name: '富德',
|
||||||
|
value: 13
|
||||||
|
}, {
|
||||||
|
name: '其他',
|
||||||
|
value: 14
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -308,7 +521,7 @@ export default {
|
|||||||
}else{
|
}else{
|
||||||
this.supplierServiceList = this.oldSupplierServiceList
|
this.supplierServiceList = this.oldSupplierServiceList
|
||||||
}
|
}
|
||||||
|
this.setDefault();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -321,6 +534,42 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
|
formatDate(date) {
|
||||||
|
return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
|
||||||
|
},
|
||||||
|
onConfirm(date) {
|
||||||
|
const [start, end] = date;
|
||||||
|
this.showDatePicker = false;
|
||||||
|
this.dateVal = `${this.formatDate(start)} - ${this.formatDate(end)}`;
|
||||||
|
},
|
||||||
|
formatDateTimeRange(str) {
|
||||||
|
const [startStr, endStr] = str.split(' - ').map(s => s.trim());
|
||||||
|
const startDate = new Date(startStr);
|
||||||
|
const startTime = `${startDate.getFullYear()}-${(startDate.getMonth() + 1).toString().padStart(2, '0')}-${startDate.getDate().toString().padStart(2, '0')} 00:00:00`;
|
||||||
|
const endDate = new Date(endStr);
|
||||||
|
const endTime = `${endDate.getFullYear()}-${(endDate.getMonth() + 1).toString().padStart(2, '0')}-${endDate.getDate().toString().padStart(2, '0')} 23:59:59`;
|
||||||
|
return {
|
||||||
|
startTime,
|
||||||
|
endTime
|
||||||
|
};
|
||||||
|
},
|
||||||
|
setDefault() {
|
||||||
|
if( this.vehicleLicenseInfo?.vehicleType?.includes('小型') || this.vehicleLicenseInfo?.vehicleType?.includes('微型') || this.vehicleLicenseInfo?.vehicleType?.includes('普通') || this.vehicleLicenseInfo?.vehicleType?.includes('摩托') ) {
|
||||||
|
this.vehicleTypes.map(item => {
|
||||||
|
if( item.value == 1 || item.value == 9 ) {
|
||||||
|
item.disabled = false;
|
||||||
|
} else {
|
||||||
|
item.disabled = true;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.$forceUpdate();
|
||||||
|
} else {
|
||||||
|
this.vehicleTypes.map(item => {
|
||||||
|
item.disabled = false;
|
||||||
|
})
|
||||||
|
this.$forceUpdate();
|
||||||
|
}
|
||||||
|
},
|
||||||
getVehicleLicense(color) {
|
getVehicleLicense(color) {
|
||||||
if( color == '蓝' ) {
|
if( color == '蓝' ) {
|
||||||
this.vehicleLicense = 1
|
this.vehicleLicense = 1
|
||||||
@ -362,6 +611,12 @@ export default {
|
|||||||
this.vehicleFrontPhoto = res.data;
|
this.vehicleFrontPhoto = res.data;
|
||||||
await this.ocrCarFrontHandler()
|
await this.ocrCarFrontHandler()
|
||||||
},
|
},
|
||||||
|
async insurancePictureFilesHandler(file) {
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("file" , file.file);
|
||||||
|
let res = await uploadImage(formData);
|
||||||
|
this.insurancePicturePhoto = res.data;
|
||||||
|
},
|
||||||
async ocrCarFrontHandler() { // 车辆正面 orc 识别
|
async ocrCarFrontHandler() { // 车辆正面 orc 识别
|
||||||
let res = await ocrHandler({
|
let res = await ocrHandler({
|
||||||
ocrType: 10,
|
ocrType: 10,
|
||||||
@ -402,6 +657,7 @@ export default {
|
|||||||
this.vehicleLicenseInfo.registrationDate = frontInfo?.registerDate;
|
this.vehicleLicenseInfo.registrationDate = frontInfo?.registerDate;
|
||||||
this.vehicleLicenseInfo.issueDate = frontInfo?.issueDate;
|
this.vehicleLicenseInfo.issueDate = frontInfo?.issueDate;
|
||||||
this.vehicleLicenseInfo.issueAuthority = frontInfo?.seal;
|
this.vehicleLicenseInfo.issueAuthority = frontInfo?.seal;
|
||||||
|
this.setDefault();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async vehicleBackOcrHandler() { // 行驶证副页 ocr 识别
|
async vehicleBackOcrHandler() { // 行驶证副页 ocr 识别
|
||||||
@ -475,14 +731,22 @@ export default {
|
|||||||
this.selectedOption=result.vehicleType?.split(',').map((item)=>{
|
this.selectedOption=result.vehicleType?.split(',').map((item)=>{
|
||||||
return Number(item);
|
return Number(item);
|
||||||
});
|
});
|
||||||
this.serviceIds=result.serviceIds
|
this.virtualVehicle = result.virtualVehicle;
|
||||||
|
this.$refs.tree.setCheckedKeys(result.serviceIds)
|
||||||
|
this.vehicleStatus = result.vehicleStatus
|
||||||
this.vehicleLicenseFront = result.vehicleLicenseFront;
|
this.vehicleLicenseFront = result.vehicleLicenseFront;
|
||||||
this.vehicleLicenseBack = result.vehicleLicenseBack;
|
this.vehicleLicenseBack = result.vehicleLicenseBack;
|
||||||
this.vehicleFrontPhoto = result.vehicleFrontPhoto;
|
this.vehicleFrontPhoto = result.vehicleFrontPhoto;
|
||||||
|
this.insurancePicturePhoto = result.insurancePicturePhoto;
|
||||||
this.vehicleLicenseInfo = result.vehicleLicenseInfo;
|
this.vehicleLicenseInfo = result.vehicleLicenseInfo;
|
||||||
this.vehicleLicenseCarPhoto = result.vehicleLicenseCarPhoto;
|
this.vehicleLicenseCarPhoto = result.vehicleLicenseCarPhoto;
|
||||||
this.vehicleLicense = result.vehicleLicense;
|
this.vehicleLicense = result.vehicleLicense;
|
||||||
this.vehicleFrontLicensePlate = result.vehicleFrontLicensePlate;
|
this.vehicleFrontLicensePlate = result.vehicleFrontLicensePlate;
|
||||||
|
this.hasLiabilityInsurance = result.hasLiabilityInsurance
|
||||||
|
this.vehicleStatus = result.vehicleStatus
|
||||||
|
if(this.insurancePicturePhoto) {
|
||||||
|
this.insurancePictureFiles = [{url: this.insurancePicturePhoto}]
|
||||||
|
}
|
||||||
if( this.vehicleLicenseFront ) {
|
if( this.vehicleLicenseFront ) {
|
||||||
this.vehicleLicenseFrontList = [{ url : this.vehicleLicenseFront }];
|
this.vehicleLicenseFrontList = [{ url : this.vehicleLicenseFront }];
|
||||||
}
|
}
|
||||||
@ -495,9 +759,28 @@ export default {
|
|||||||
if(this.vehicleLicenseCarPhoto) {
|
if(this.vehicleLicenseCarPhoto) {
|
||||||
this.vehicleLicenseCarPhotoList = [{ url : this.vehicleLicenseCarPhoto }];
|
this.vehicleLicenseCarPhotoList = [{ url : this.vehicleLicenseCarPhoto }];
|
||||||
}
|
}
|
||||||
|
if(this.vehicleLicenseCarPhoto) {
|
||||||
|
this.vehicleLicenseCarPhotoList = [{ url : this.vehicleLicenseCarPhoto }];
|
||||||
|
}
|
||||||
|
if( result.liabilityInsuranceEndTime && result.liabilityInsuranceStartTime ) {
|
||||||
|
this.dateVal = formatDate1(result.liabilityInsuranceStartTime) + ' - ' + formatDate1(result.liabilityInsuranceEndTime)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
isChange(e){
|
isChange(e){
|
||||||
this.isJoin=e
|
this.hasLiabilityInsurance=e
|
||||||
|
if (e === 0) {
|
||||||
|
Dialog.confirm({
|
||||||
|
title: '提醒',
|
||||||
|
message: '有救援职业责任险车辆会提升案件聚合能力和接单能力。',
|
||||||
|
confirmButtonText: '我已知晓', // 确认按钮文字,默认为“确认”
|
||||||
|
showCancelButton: false // 是否显示取消按钮,默认为 true。如果不需要取消按钮,可以设置为 false。
|
||||||
|
})
|
||||||
|
.then(() => { /* 确认后的操作 */ })
|
||||||
|
.catch(() => { /* 取消后的操作 */ });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isVehicleChange(e) {
|
||||||
|
this.vehicleStatus=e
|
||||||
},
|
},
|
||||||
async submitBtn(){
|
async submitBtn(){
|
||||||
if( !this.vehicleLicenseFront ) {
|
if( !this.vehicleLicenseFront ) {
|
||||||
@ -525,13 +808,42 @@ export default {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if(!(this.selectedOption.length > 0)){
|
if(!(this.selectedOption.length > 0)){
|
||||||
this.$toast('车辆类型不能为空')
|
this.$toast('车辆类别不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if( !this.virtualVehicle ) {
|
||||||
|
this.$toast('车辆属性不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if( !this.vehicleStatus ) {
|
||||||
|
this.$toast('车辆状态不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(this.hasLiabilityInsurance === null || this.hasLiabilityInsurance === undefined) { // 有职业责任险,就需要有保单照片
|
||||||
|
this.$toast('救援职业责任险不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.insurancePicturePhoto && this.hasLiabilityInsurance == 1) { // 有职业责任险,就需要有保单照片
|
||||||
|
this.$toast('保单照片不能为空')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if(this.selectedOption?.length==1 && this.selectedOption.includes(1)){//选择小修车时需清除原本的拖车服务类型
|
if(this.selectedOption?.length==1 && this.selectedOption.includes(1)){//选择小修车时需清除原本的拖车服务类型
|
||||||
let data=this.oldSupplierServiceList.filter(item => item.name ==='拖车服务')
|
let data=this.oldSupplierServiceList.filter(item => item.name ==='拖车服务')
|
||||||
this.serviceIds = this.serviceIds.filter(item => !data[0].children.some(obj => obj.id === item));
|
this.serviceIds = this.serviceIds.filter(item => !data[0].children.some(obj => obj.id === item));
|
||||||
}
|
}
|
||||||
|
if(!this.insuranceCorp && this.hasLiabilityInsurance == 1) { // 有职业责任险,就需要有保单照片
|
||||||
|
this.$toast('承保保司不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.dateVal && this.hasLiabilityInsurance == 1) { // 有职业责任险,就需要有保单照片
|
||||||
|
this.$toast('保单有效期不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let timeObj;
|
||||||
|
if(this.dateVal) {
|
||||||
|
timeObj = this.formatDateTimeRange(this.dateVal)
|
||||||
|
}
|
||||||
|
this.serviceIds = this.$refs.tree.getCheckedKeys(true)
|
||||||
await saveVehicle({
|
await saveVehicle({
|
||||||
vehicleId:this.id ? this.id : '',
|
vehicleId:this.id ? this.id : '',
|
||||||
plateNumber:this.carNum ? this.carNum :'',
|
plateNumber:this.carNum ? this.carNum :'',
|
||||||
@ -545,6 +857,12 @@ export default {
|
|||||||
vehicleLicenseCarPhoto: this.vehicleLicenseCarPhoto,
|
vehicleLicenseCarPhoto: this.vehicleLicenseCarPhoto,
|
||||||
vehicleLicense: this.vehicleLicense,
|
vehicleLicense: this.vehicleLicense,
|
||||||
vehicleFrontLicensePlate:this.vehicleFrontLicensePlate,
|
vehicleFrontLicensePlate:this.vehicleFrontLicensePlate,
|
||||||
|
hasLiabilityInsurance: this.hasLiabilityInsurance,
|
||||||
|
insurancePicturePhoto: this.hasLiabilityInsurance == 1 ? this.insurancePicturePhoto : '',
|
||||||
|
insuranceCorp: this.hasLiabilityInsurance == 1 ? this.insuranceCorp : '',
|
||||||
|
liabilityInsuranceStartTime: this.hasLiabilityInsurance == 1 ? (timeObj?.startTime || '' ) : '',
|
||||||
|
liabilityInsuranceEndTime: this.hasLiabilityInsurance == 1 ? (timeObj?.endTime || '') : '',
|
||||||
|
virtualVehicle: this.virtualVehicle,
|
||||||
})
|
})
|
||||||
if(this.id){
|
if(this.id){
|
||||||
this.$toast('修改成功')
|
this.$toast('修改成功')
|
||||||
|
|||||||
@ -18,6 +18,46 @@
|
|||||||
</template>
|
</template>
|
||||||
</van-nav-bar>
|
</van-nav-bar>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="filterWrap">
|
||||||
|
<!-- <div >-->
|
||||||
|
<el-input v-model="searchVal" @blur="resetHandler" placeholder="车辆名称/车牌号/车架号" :class="{'customSel':true,'customInput':true , 'has-value': searchVal }" >
|
||||||
|
<template #suffix>
|
||||||
|
<i
|
||||||
|
v-if="searchVal"
|
||||||
|
class="el-icon-circle-close el-input__icon"
|
||||||
|
@click="searchVal = ''"
|
||||||
|
></i>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
<el-select @change="resetHandler" multiple :collapse-tags="true" v-model="inputStatusList" placeholder="录入状态" :class="{'customSel':true , 'has-value': inputStatusList }" clearable>
|
||||||
|
<el-option
|
||||||
|
v-for="item in inputStatusListOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.value">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <div>-->
|
||||||
|
<el-select @change="resetHandler" multiple :collapse-tags="true" v-model="authStates" placeholder="认证状态" :class="{'customSel':true , 'has-value': authStates }" clearable>
|
||||||
|
<el-option
|
||||||
|
v-for="item in authStatesOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.value">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
<el-select @change="resetHandler" multiple :collapse-tags="true" v-model="liabilityInsuranceAudit" placeholder="职业责任险" :class="{'customSel':true , 'has-value': liabilityInsuranceAudit }" clearable>
|
||||||
|
<el-option
|
||||||
|
v-for="item in insuresOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.value">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
<!-- </div>-->
|
||||||
|
|
||||||
|
</div>
|
||||||
<van-pull-refresh v-model="isLoading" @refresh="onRefresh">
|
<van-pull-refresh v-model="isLoading" @refresh="onRefresh">
|
||||||
<van-list
|
<van-list
|
||||||
v-model="loading"
|
v-model="loading"
|
||||||
@ -29,15 +69,26 @@
|
|||||||
<div class="carCode">
|
<div class="carCode">
|
||||||
<div class="codeLeft">{{item.plateNumber}} / {{item.vehicleTypeString}}</div>
|
<div class="codeLeft">{{item.plateNumber}} / {{item.vehicleTypeString}}</div>
|
||||||
<div class="twoBtn">
|
<div class="twoBtn">
|
||||||
<button v-if="permissonList.includes('vehicleAddBtn')" class="del" @click="deleteItem(item.vehicleId)">删除</button>
|
<span> {{ item.vehicleStatus == 1 ? '正常' : '停用' }} </span>
|
||||||
|
<!-- <button v-if="permissonList.includes('vehicleAddBtn')" class="del" @click="deleteItem(item.vehicleId)">删除</button>-->
|
||||||
<button v-if="permissonList.includes('vehicleModifyBtn')" class="revise" @click="updateVehicle(item)">修改</button>
|
<button v-if="permissonList.includes('vehicleModifyBtn')" class="revise" @click="updateVehicle(item)">修改</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="carType">{{ item.serviceName }}</div>
|
<div class="juhe flex-between">
|
||||||
|
<span class="zdJuhe mr10">核验:<span :class="item.inputStatus == 1 ? 'isYes' :'isNo'">{{item.inputStatus == 1 ? '已核验' :'未核验'}}</span></span>
|
||||||
|
<span class="zdJuhe">认证:<span :class="item.authStatus == 1 ? 'isYes' :'isNo'">{{item.authStatus == 1 ? '已认证' :'未认证'}}</span></span>
|
||||||
|
</div>
|
||||||
|
<div class="juhe">
|
||||||
|
<span class="zdJuhe mr10">最近登录时间:{{item.lastLoginTime}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="juhe">
|
||||||
|
<span class="zdJuhe mr10">救援职业责任险情况:<span :class="getClass(item.liabilityInsuranceAudit)?.className">{{getClass(item.liabilityInsuranceAudit)?.title}}</span></span>
|
||||||
|
</div>
|
||||||
|
<!--<div class="carType">{{ item.serviceName }}</div>
|
||||||
<div class="juhe">
|
<div class="juhe">
|
||||||
<span class="zdJuhe">是否参与中道聚合: </span>
|
<span class="zdJuhe">是否参与中道聚合: </span>
|
||||||
<span :class="item.hasPolymerization.code == 0 ? 'isYes' :'isNo'">{{item.hasPolymerization.label}}</span>
|
<span :class="item.hasPolymerization.code == 0 ? 'isYes' :'isNo'">{{item.hasPolymerization.label}}</span>
|
||||||
</div>
|
</div>-->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</van-list>
|
</van-list>
|
||||||
@ -65,6 +116,49 @@ export default {
|
|||||||
loading: false,
|
loading: false,
|
||||||
finished: false,
|
finished: false,
|
||||||
permissonList:[],
|
permissonList:[],
|
||||||
|
inputStatusList: [],
|
||||||
|
searchVal: '',
|
||||||
|
authStates: [],
|
||||||
|
liabilityInsuranceAudit: [],
|
||||||
|
inputStatusListOptions: [{
|
||||||
|
name: '行驶证未录入',
|
||||||
|
value: 0
|
||||||
|
},{
|
||||||
|
name: '行驶证核验通过',
|
||||||
|
value: 1
|
||||||
|
},{
|
||||||
|
name: '行驶证核验不通过',
|
||||||
|
value: 2
|
||||||
|
}],
|
||||||
|
authStatesOptions: [{
|
||||||
|
name: '车头照片未录入',
|
||||||
|
value: 1
|
||||||
|
},{
|
||||||
|
name: '车头照片认证通过',
|
||||||
|
value: 2
|
||||||
|
},{
|
||||||
|
name: '车头照片认证不通过',
|
||||||
|
value: 3
|
||||||
|
}],
|
||||||
|
insuresOptions: [{
|
||||||
|
name: '待审核',
|
||||||
|
value: 1
|
||||||
|
},{
|
||||||
|
name: '有责任险',
|
||||||
|
value: 2
|
||||||
|
},{
|
||||||
|
name: '有货物险',
|
||||||
|
value: 3
|
||||||
|
},{
|
||||||
|
name: '未通过',
|
||||||
|
value: 4
|
||||||
|
},{
|
||||||
|
name: '无',
|
||||||
|
value: 5
|
||||||
|
},{
|
||||||
|
name: '空',
|
||||||
|
value: 6
|
||||||
|
}],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -72,6 +166,37 @@ export default {
|
|||||||
this.getPermissions();
|
this.getPermissions();
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
|
getClass(id) {
|
||||||
|
const ids = String(id)
|
||||||
|
const steps = {
|
||||||
|
'1': {
|
||||||
|
title: '待审核',
|
||||||
|
className: 'insuranceMain'
|
||||||
|
},
|
||||||
|
'2': {
|
||||||
|
title: '有责任险',
|
||||||
|
className: 'insuranceSuccess'
|
||||||
|
},
|
||||||
|
'3': {
|
||||||
|
title: '有货物险',
|
||||||
|
className: 'insuranceTip'
|
||||||
|
},
|
||||||
|
'4': {
|
||||||
|
title: '未通过(点击显示原因)',
|
||||||
|
className: 'insuranceDanger'
|
||||||
|
},
|
||||||
|
'5': {
|
||||||
|
title: '无',
|
||||||
|
className: ''
|
||||||
|
},
|
||||||
|
'6': {
|
||||||
|
title: '空',
|
||||||
|
className: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return steps[ids] || { title: '', className: '' }
|
||||||
|
},
|
||||||
async onLoad(){
|
async onLoad(){
|
||||||
await this.getVehicleList()
|
await this.getVehicleList()
|
||||||
this.pageNum++;
|
this.pageNum++;
|
||||||
@ -121,6 +246,12 @@ export default {
|
|||||||
this.pageNum=1
|
this.pageNum=1
|
||||||
await this.getVehicleList();
|
await this.getVehicleList();
|
||||||
},
|
},
|
||||||
|
async resetHandler() {
|
||||||
|
// debounce(async () => {
|
||||||
|
this.pageNum=1
|
||||||
|
await this.getVehicleList();
|
||||||
|
// }, 1000)
|
||||||
|
},
|
||||||
updateVehicle(item){//修改
|
updateVehicle(item){//修改
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
name:'vehicleAdd',
|
name:'vehicleAdd',
|
||||||
@ -161,7 +292,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.carItem{
|
.carItem{
|
||||||
@include wh(100%,86px);
|
@include wh(100%,110px);
|
||||||
background: #FFFFFF;
|
background: #FFFFFF;
|
||||||
box-shadow: 0px 2px 10px 0px rgba(216,216,216,0.5);
|
box-shadow: 0px 2px 10px 0px rgba(216,216,216,0.5);
|
||||||
@include radiusSizing(6px);
|
@include radiusSizing(6px);
|
||||||
@ -175,6 +306,7 @@ export default {
|
|||||||
}
|
}
|
||||||
.twoBtn{
|
.twoBtn{
|
||||||
display: flex;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
button{
|
button{
|
||||||
border: none;
|
border: none;
|
||||||
padding: 4px 8px;
|
padding: 4px 8px;
|
||||||
@ -211,4 +343,107 @@ export default {
|
|||||||
@include fontWeightSize(400,12px);
|
@include fontWeightSize(400,12px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
.mr10 {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.insuranceMain {
|
||||||
|
color: #354D93;
|
||||||
|
}
|
||||||
|
.insuranceSuccess {
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
.insuranceTip {
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
.insuranceDanger {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.flex-between {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filterWrap {
|
||||||
|
width: calc(100% - 5px);
|
||||||
|
padding-right: 5px;
|
||||||
|
display: flex;
|
||||||
|
overflow-x: auto; /* 允许横向滚动 */
|
||||||
|
white-space: nowrap; /* 防止子元素换行 */
|
||||||
|
padding-bottom: 10px;
|
||||||
|
-webkit-overflow-scrolling: touch; /* 在iOS上平滑滚动 */
|
||||||
|
scrollbar-width: none; /* Firefox */
|
||||||
|
padding-bottom: 10px;
|
||||||
|
padding: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
background-color: #fff;
|
||||||
|
box-sizing: border-box;
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
display: none; /* Chrome/Safari */
|
||||||
|
}
|
||||||
|
.customSel {
|
||||||
|
flex: 0 0 auto; /* 防止子元素被压缩 */
|
||||||
|
width: 100px;
|
||||||
|
/*width: 100%;*/
|
||||||
|
height: 25px;
|
||||||
|
background: #F5F5F5;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 10px;
|
||||||
|
color: #323233;
|
||||||
|
margin-left: 5px;
|
||||||
|
::v-deep .el-input__inner{
|
||||||
|
padding: 0 2px;
|
||||||
|
height: 25px;
|
||||||
|
font-size: 10px;
|
||||||
|
background: #F5F5F5;
|
||||||
|
border-radius: 4px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
::v-deep .el-input__icon{
|
||||||
|
line-height: 25px;
|
||||||
|
font-size: 10px;
|
||||||
|
width: 18px;
|
||||||
|
color: #2A5094;
|
||||||
|
}
|
||||||
|
::v-deep .el-input__suffix{
|
||||||
|
right: 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.customInput{
|
||||||
|
/*width: 49%;*/
|
||||||
|
width: 130px;
|
||||||
|
}
|
||||||
|
.has-value ::v-deep .el-input__inner{
|
||||||
|
background: #F1F6FF ;
|
||||||
|
color: #007BE9;
|
||||||
|
font-weight: bold;
|
||||||
|
padding-left: 8px;
|
||||||
|
}
|
||||||
|
.has-value ::v-deep .el-input__icon{
|
||||||
|
color: #007BE9;
|
||||||
|
}
|
||||||
|
.priceSel{
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
color: #C0C4CC;
|
||||||
|
.iconSpan{
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.has-price{
|
||||||
|
color: #007BE9 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-select .el-select__tags>span {
|
||||||
|
display: flex;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|||||||
@ -84,7 +84,7 @@ export default {
|
|||||||
color:'rgba(4, 4, 21,0.45)'
|
color:'rgba(4, 4, 21,0.45)'
|
||||||
},
|
},
|
||||||
detail: {
|
detail: {
|
||||||
color:this.isStore ? this.bgColor : '#040415',
|
color:this.isStore ? this.bgColor : (this.bgColor || '#040415'),
|
||||||
fontSize: this.isStore ? 43 :19,
|
fontSize: this.isStore ? 43 :19,
|
||||||
formatter: this.isStore ? '{value}' : '{value}%'
|
formatter: this.isStore ? '{value}' : '{value}%'
|
||||||
}
|
}
|
||||||
@ -110,4 +110,4 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 125px;
|
height: 125px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
208
src/views/liabilityInsurance/insuredPage.vue
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
<template>
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="navBar">
|
||||||
|
<van-nav-bar
|
||||||
|
title="参保救援职业责任险"
|
||||||
|
left-arrow
|
||||||
|
left-arrow-color="#FFFFFF"
|
||||||
|
:border="false"
|
||||||
|
:fixed="true"
|
||||||
|
:safe-area-inset-top="true"
|
||||||
|
@click-left="goBack"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="contentWrap">
|
||||||
|
<div>
|
||||||
|
为降低日常救援工作中的不可预期的车损赔付带来的运营风险和资金压力,减少由此衍生而来的可能投诉,顺应行业服务标准不断增长的局势,中道救援自有车辆已全部投保了救援职业责任险。
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
通过日常的交流了解,此险种对于服务商而言,投保相对较难,很多服务商在无投保渠道的情况下选择了对于我们救援场景保障能力稍弱、不太匹配的货物险,从而从形成了现在很多救援车无保障、或者特殊场景货物险理赔难的局面。
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
为此中道救援经过与保司沟通协调,特为与中道救援合作紧密的服务商,提供救援职业责任险参保渠道,提升服务商服务能力,降低运营风险,实现共同进步。
|
||||||
|
</div>
|
||||||
|
<div>一、救援职业责任险简介:</div>
|
||||||
|
<div>1、综合保额50万元,可全方位覆盖我们日常的经营活动。</div>
|
||||||
|
<div> 2、保费支付可采用救援服务费抵扣的方式,降低资金压力。</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>
|
||||||
|
<div class="poupCommon" v-if="showPoup">
|
||||||
|
<div class="showPoupContainer">
|
||||||
|
<img class="insured" src="@/assets/insured-jianbian.png">
|
||||||
|
<img class="insure" src="@/assets/insured.png">
|
||||||
|
<div class="con">
|
||||||
|
<template v-if="used">
|
||||||
|
<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 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>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {myMixins} from "@/utils/myMixins"
|
||||||
|
import {sendInsuranceEmail,isSendInsuranceEmail} from "@/api/mine"
|
||||||
|
export default {
|
||||||
|
name: "insuredPage",
|
||||||
|
mixins: [myMixins],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
showPoup: false,
|
||||||
|
used:false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
let res=await isSendInsuranceEmail()
|
||||||
|
this.used=res.data
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async saveHandle() {
|
||||||
|
await sendInsuranceEmail();
|
||||||
|
this.$toast('操作成功');
|
||||||
|
this.showPoup=false
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.goBack()
|
||||||
|
},1500)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@import "@/styles/mixin.scss";
|
||||||
|
@import "@/styles/common.scss";
|
||||||
|
|
||||||
|
.wrap {
|
||||||
|
@include wh(100%, 100%);
|
||||||
|
background-color: #F4F5F7;
|
||||||
|
overflow-y: auto;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navBar {
|
||||||
|
height: 46px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentWrap {
|
||||||
|
padding-top: 15px;
|
||||||
|
|
||||||
|
div {
|
||||||
|
padding: 0 18px;
|
||||||
|
line-height: 22px;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload_btn_wrap {
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
bottom: 10px;
|
||||||
|
left: 0;
|
||||||
|
padding: 15px 30px;
|
||||||
|
display: flex;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 40px;
|
||||||
|
div {
|
||||||
|
height: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
border-radius: 5px;
|
||||||
|
text-align: center;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.btn_save {
|
||||||
|
//background: #354D93;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.poupCommon {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: rgba(0, 0, 0, .7);
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
.showPoupContainer {
|
||||||
|
width: 290px;
|
||||||
|
height: 242px;
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
border-radius: 12px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 11;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
margin: auto;
|
||||||
|
.con {
|
||||||
|
top: 80px !important;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 60px;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #040404;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
|
.insure {
|
||||||
|
width: 78px;
|
||||||
|
height: 78px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 11;
|
||||||
|
top: -34px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
.insured {
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
.btnWrap {
|
||||||
|
margin-top: 36px;
|
||||||
|
text-align: center;
|
||||||
|
.btn{
|
||||||
|
width: 174px;
|
||||||
|
height: 42px;
|
||||||
|
line-height: 42px;
|
||||||
|
border-radius: 23px;
|
||||||
|
}
|
||||||
|
.closeBtn {
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #2C4155;
|
||||||
|
opacity: .6;
|
||||||
|
}
|
||||||
|
.confirmBtn {
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 15px;
|
||||||
|
background: #F1BA63;
|
||||||
|
color: #FFFFFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
213
src/views/report/addressMap.vue
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
<template>
|
||||||
|
<div class="address_wrap">
|
||||||
|
<div class="map_wrap" id="mapId">
|
||||||
|
</div>
|
||||||
|
<div class="button_wrap">
|
||||||
|
<div class="cancel_btn" @click="cancelHandler">取消</div>
|
||||||
|
<div class="confirm_btn" @click="successHandler">完成</div>
|
||||||
|
</div>
|
||||||
|
<div class="search_wrap">
|
||||||
|
<div class="section">
|
||||||
|
<input type="text" v-model="keyword" @change="searchHandler" placeholder="请输入地址" />
|
||||||
|
</div>
|
||||||
|
<div class="server_list" v-if="keyword">
|
||||||
|
<div class="text_box" v-for="(item, index) in addressList" :key="index" @click="chooseHandler(item, index)" :class="{'active': index == activeIndex}">
|
||||||
|
<div class="address_name">{{ item.name }}</div>
|
||||||
|
<div class="address_detail">{{ ( item.district || '' ) + ( item.address || '' ) }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { searchFun, getLocal, getAddress } from '@/utils/map'
|
||||||
|
export default {
|
||||||
|
name: "addressMap",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
keyword: '',
|
||||||
|
addressList: [],
|
||||||
|
activeIndex: '',
|
||||||
|
map: '',
|
||||||
|
marker: null,
|
||||||
|
cityCode: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
keyword() {
|
||||||
|
this.searchHandler()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
sessionStorage.setItem('reportAddress', '')
|
||||||
|
await this.initMap()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async initMap() { // 初始化地图
|
||||||
|
this.map = new AMap.Map('mapId', {
|
||||||
|
viewMode: '2D', // 默认使用 2D 模式
|
||||||
|
zoom:11, //初始化地图层级
|
||||||
|
})
|
||||||
|
let res = await getLocal(this.map);
|
||||||
|
let lnglat = new AMap.LngLat(res?.lng, res?.lat);
|
||||||
|
let location = await getAddress(this.map, lnglat)
|
||||||
|
this.cityCode = location?.regeocode.addressComponent.adcode
|
||||||
|
//location?.regeocode?.addressComponent?.city || location?.regeocode?.addressComponent?.province
|
||||||
|
console.log('location', location);
|
||||||
|
},
|
||||||
|
async searchHandler() {
|
||||||
|
this.activeIndex = null
|
||||||
|
if( this.keyword ) {
|
||||||
|
this.addressList = await searchFun(this.map, this.cityCode, this.keyword,)
|
||||||
|
this.addressList = this.addressList.filter(item => !!item.location)
|
||||||
|
} else {
|
||||||
|
this.addressList = []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
chooseHandler(item, index) {
|
||||||
|
this.activeIndex = index;
|
||||||
|
this.addMarker()
|
||||||
|
},
|
||||||
|
addMarker() {
|
||||||
|
if( this.marker ) {
|
||||||
|
this.map.remove(this.marker)
|
||||||
|
}
|
||||||
|
let content = '<div class="dest-position"></div>';
|
||||||
|
let activeObj = this.addressList[this.activeIndex];
|
||||||
|
this.marker = new AMap.Marker({
|
||||||
|
position: new AMap.LngLat( activeObj.location.lng, activeObj.location.lat ),
|
||||||
|
content: content,
|
||||||
|
offset: new AMap.Pixel(-13, -30)
|
||||||
|
});
|
||||||
|
this.map.add(this.marker)
|
||||||
|
this.map.setCenter([activeObj.location.lng, activeObj.location.lat])
|
||||||
|
},
|
||||||
|
successHandler() {
|
||||||
|
if( this.activeIndex == null ) {
|
||||||
|
this.$toast('请选择具体地址')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let activeObj = this.addressList[this.activeIndex];
|
||||||
|
let _tempObj = {
|
||||||
|
startPoiAddress: activeObj?.address + activeObj?.name,
|
||||||
|
startLat: activeObj?.location?.lat,
|
||||||
|
startLng: activeObj?.location?.lng,
|
||||||
|
adCode: activeObj?.adcode,
|
||||||
|
}
|
||||||
|
sessionStorage.setItem('reportAddress', JSON.stringify(_tempObj))
|
||||||
|
setTimeout(() => {
|
||||||
|
this.$router.go(-1)
|
||||||
|
}, 1)
|
||||||
|
},
|
||||||
|
// 取消 返回上一页
|
||||||
|
cancelHandler() {
|
||||||
|
this.$router.go(-1)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
.dest-position {
|
||||||
|
width: 30px;
|
||||||
|
height: 36px;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
background-image: url("~@/assets/report/destMarker.png");
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.address_wrap {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.map_wrap {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 60%;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
.button_wrap {
|
||||||
|
width: 100%;
|
||||||
|
padding: 5px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
zoom: 1;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
.cancel_btn {
|
||||||
|
width: 50px;
|
||||||
|
height: 27px;
|
||||||
|
background: #F37877;
|
||||||
|
font-size: 12px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 27px;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 3px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.confirm_btn {
|
||||||
|
width: 50px;
|
||||||
|
height: 27px;
|
||||||
|
background: rgba(5,193,98,1);
|
||||||
|
font-size: 12px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 27px;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 3px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.search_wrap {
|
||||||
|
background-color: #fff;
|
||||||
|
position: fixed;
|
||||||
|
width: 100%;
|
||||||
|
height: 60%;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
overflow: auto;
|
||||||
|
.section {
|
||||||
|
height: 35px;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #fff;
|
||||||
|
position: fixed;
|
||||||
|
top: 40%;
|
||||||
|
padding-top: 10px;
|
||||||
|
input {
|
||||||
|
width: 90%;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: block;
|
||||||
|
border: none;
|
||||||
|
height: 30px;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 0 10px;
|
||||||
|
background: #e2e0e0;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.server_list {
|
||||||
|
overflow-y: auto;
|
||||||
|
padding-top: 30px;
|
||||||
|
.text_box {
|
||||||
|
margin: 10px 25px;
|
||||||
|
padding-top: 10px;
|
||||||
|
.address_name {
|
||||||
|
font-size: 14px !important;
|
||||||
|
color: rgba(0,0,0,0.8);
|
||||||
|
}
|
||||||
|
.address_detail {
|
||||||
|
margin-top: 3px;
|
||||||
|
color: #c3c3c3 !important;
|
||||||
|
font-size: 12px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.active {
|
||||||
|
.address_name {
|
||||||
|
color: green !important;
|
||||||
|
}
|
||||||
|
.address_detail {
|
||||||
|
color: green !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
57
src/views/report/components/report-list-item.vue
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<template>
|
||||||
|
<div class="bottom_wrap">
|
||||||
|
<div class="report_item" v-for="(item, index) in reportList" @click="goReportHandler(item)" :key="index">
|
||||||
|
<img class="report_icon" :src="item?.iconUrl" alt="">
|
||||||
|
<div class="report_title">{{item.name}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "report-list-item",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
addressReportCode: '',
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: ['reportList'],
|
||||||
|
methods: {
|
||||||
|
goReportHandler(data) {
|
||||||
|
this.$emit('getReport', data);
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.bottom_wrap {
|
||||||
|
width: 100%;
|
||||||
|
/*position: fixed;*/
|
||||||
|
bottom: 0;
|
||||||
|
/*padding: 0 34px 20px;*/
|
||||||
|
padding-bottom: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
background: #FFFFFF;
|
||||||
|
box-shadow: 0px 0px 20px 0px rgba(53,73,93,0.2);
|
||||||
|
box-sizing: border-box;
|
||||||
|
.report_item {
|
||||||
|
width: 25%;
|
||||||
|
margin-top: 20px;
|
||||||
|
text-align: center;
|
||||||
|
.report_icon {
|
||||||
|
width: 45px;
|
||||||
|
height: 45px;
|
||||||
|
}
|
||||||
|
.report_title {
|
||||||
|
color: rgba(53, 53, 53, 0.67);
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 16px;
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
112
src/views/report/components/service-item.vue
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<template>
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="service_title">
|
||||||
|
<span class="name">{{orderInfo?.serviceName}}</span>
|
||||||
|
<span class="status">
|
||||||
|
{{orderInfo?.orderStatusString}}
|
||||||
|
<span class="refresh_btn" @click="refreshHandler">刷新</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<!-- <img class="report_line" src="@/assets/report/report_line.png" alt="">-->
|
||||||
|
<div class="service_content">
|
||||||
|
<div class="content_left">
|
||||||
|
<img class="report_logo" src="@/assets/report/report_logo.png" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="content_right">
|
||||||
|
<div class="order_code">单号:{{orderInfo?.userOrderCode}}</div>
|
||||||
|
<div class="company">单位:{{orderInfo?.supplierName}}</div>
|
||||||
|
<div class="driver_info">
|
||||||
|
<span class="driver_name">{{orderInfo?.driverName}}</span>
|
||||||
|
<span>{{orderInfo?.phone}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "service-item",
|
||||||
|
props: ['orderInfo'],
|
||||||
|
methods: {
|
||||||
|
refreshHandler() {
|
||||||
|
this.$emit('refresh')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.wrap {
|
||||||
|
width: calc(100% - 20px);
|
||||||
|
background: #FFFFFF;
|
||||||
|
box-shadow: 0px 0px 9px 0px rgba(53,73,93,0.2);
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #E6E6E6;
|
||||||
|
backdrop-filter: blur(5.602678571428572px);
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.service_title {
|
||||||
|
height: 40px;
|
||||||
|
line-height: 42px;
|
||||||
|
padding-left: 22px;
|
||||||
|
padding-right: 14px;
|
||||||
|
background: #F9FDFF;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
border-bottom: 1px solid #EFEFEF;
|
||||||
|
border-top-left-radius: 8px;
|
||||||
|
border-top-right-radius: 8px;
|
||||||
|
.name {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: rgba(0, 0, 0, 0.9);
|
||||||
|
}
|
||||||
|
.status {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #F19028;
|
||||||
|
}
|
||||||
|
.refresh_btn {
|
||||||
|
background-color: #267EF0;
|
||||||
|
color: #fff;
|
||||||
|
padding: 6px 12px;
|
||||||
|
margin-left: 5px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.service_content {
|
||||||
|
padding: 11px 16px 18px;
|
||||||
|
display: flex;
|
||||||
|
.content_left {
|
||||||
|
.report_logo {
|
||||||
|
width: 56px;
|
||||||
|
height: 56px;
|
||||||
|
margin-right: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content_right {
|
||||||
|
.order_code {
|
||||||
|
color: #323643;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 1px;
|
||||||
|
}
|
||||||
|
.company {
|
||||||
|
color: #323643;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
}
|
||||||
|
.driver_info {
|
||||||
|
color: rgba(50, 54, 67, 0.65);
|
||||||
|
font-size: 12px;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
.driver_name {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.report_line {
|
||||||
|
|
||||||
|
}
|
||||||
|
</style>
|
||||||
568
src/views/report/reportIndex.vue
Normal file
@ -0,0 +1,568 @@
|
|||||||
|
<template>
|
||||||
|
<!-- <van-pull-refresh v-model="isLoading" class="custom-pull-refresh safe-pull-refresh" @refresh="onRefresh">-->
|
||||||
|
<div class="main_wrap">
|
||||||
|
<div class="top_bg" :class="{'dispatch' : type == 1 , 'driver' : type != 1}">
|
||||||
|
<!-- <div class="title">报备中心</div>-->
|
||||||
|
</div>
|
||||||
|
<div class="service_wrap">
|
||||||
|
<service-item :order-info="orderInfo" @refresh="onRefreshHandler"></service-item>
|
||||||
|
</div>
|
||||||
|
<div class="chat_list" ref="chatList" >
|
||||||
|
<!--ai对话框 s -->
|
||||||
|
<div v-for="(item, index) in recordList" :key="index">
|
||||||
|
<template v-if="item.messageType == 4">
|
||||||
|
<div class="top_tip_wrap">为了快速解决问题,请选择下方咨询类型</div>
|
||||||
|
<div class="ai_chat" >
|
||||||
|
<div class="ai_left">
|
||||||
|
<img class="report_ai" src="@/assets/report/report_ai.png" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="ai_right">
|
||||||
|
<div class="ai_title">{{ orderInfo?.driverName }}你好,请选择报备内容</div>
|
||||||
|
<ul>
|
||||||
|
<li v-for="_item in item.content" :key="_item.id" @click="addReportHandler(_item)">“{{_item.name}}”</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-if="[2, 3].includes(Number(item.messageType))">
|
||||||
|
<!--ai对话框 e -->
|
||||||
|
<div class="tip_wrap">{{item.createTime}}</div>
|
||||||
|
<!--客服对话框 s -->
|
||||||
|
<div class="customer_item mb20">
|
||||||
|
<div class="customer_left">
|
||||||
|
<img class="profile_photo mr" src="@/assets/report/report_customer.png" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="common_right customer_cls">
|
||||||
|
<div class="customer_status">{{item.reportConfigName}}</div>
|
||||||
|
<div class="response_con">{{item.remark}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-if="item.messageType == 1">
|
||||||
|
<!--服务人员对话框 e -->
|
||||||
|
<div class="tip_wrap">{{item.createTime}}</div>
|
||||||
|
<!--服务人员对话框 s -->
|
||||||
|
<div class="server_item mb20">
|
||||||
|
<div class="common_right service_cls">
|
||||||
|
<div class="service_status">{{item.reportConfigName}}</div>
|
||||||
|
<div class="response_con">{{item.remark}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="customer_left">
|
||||||
|
<img class="profile_photo ml" v-if="type == 1" src="@/assets/report/report_dispatch.png" alt="">
|
||||||
|
<img class="profile_photo ml" v-else src="@/assets/report/report_driver.png" alt="">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!--服务人员对话框 e -->
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<report-list-item :report-list.sync="reportList" @getReport="getReportHandler" />
|
||||||
|
<van-popup ref="addReportModal" v-model="addReportShow" :close-on-click-overlay="false" closeable duration="0" round position="bottom">
|
||||||
|
<div class="dialog_wrap">
|
||||||
|
<img class="add_report_bg" src="@/assets/report/add_report_bg.png" alt="">
|
||||||
|
<div class="report_content">
|
||||||
|
<template v-if="currentInfo.component == 'time'">
|
||||||
|
<!--预约时间报备 s -->
|
||||||
|
<div class="report_title">
|
||||||
|
<img class="dot" src="@/assets/report/add_report_dot.png" alt="">
|
||||||
|
<span>预约时间</span>
|
||||||
|
</div>
|
||||||
|
<div class="report_time_content" @click="showDatetime = true">
|
||||||
|
<div class="report_time_left">
|
||||||
|
<img class="add_report_time" src="@/assets/report/add_report_time.png" alt="">
|
||||||
|
<span>{{appointTime || '请选择时间'}}</span>
|
||||||
|
</div>
|
||||||
|
<img class="report_arrow" src="@/assets/report/add_report_arrow.png" alt="">
|
||||||
|
</div>
|
||||||
|
<!--预约时间报备 e -->
|
||||||
|
</template>
|
||||||
|
<template v-if="currentInfo.component == 'address'">
|
||||||
|
<!--修改地址报备 s -->
|
||||||
|
<div class="report_title">
|
||||||
|
<img class="dot" src="@/assets/report/add_report_dot.png" alt="">
|
||||||
|
<span>修改地址</span>
|
||||||
|
</div>
|
||||||
|
<div class="report_time_content" @click="goPage('addressMap')">
|
||||||
|
<div class="report_time_left">
|
||||||
|
<img class="add_report_time" src="@/assets/report/add_report_address.png" alt="">
|
||||||
|
<span>{{address || '请选择地址'}}</span>
|
||||||
|
</div>
|
||||||
|
<img class="report_arrow" src="@/assets/report/add_report_arrow.png" alt="">
|
||||||
|
</div>
|
||||||
|
<!--修改地址报备 e -->
|
||||||
|
</template>
|
||||||
|
<div class="report_title">
|
||||||
|
<img class="dot" src="@/assets/report/add_report_dot.png" alt="">
|
||||||
|
<span>补充报备内容</span>
|
||||||
|
</div>
|
||||||
|
<div class="report_common_content">
|
||||||
|
<textarea class="report_textarea" id="text-input" rows="4" placeholder="点击这里输入补充报备内容" v-model.trim="remark"></textarea>
|
||||||
|
<!-- <van-field-->
|
||||||
|
<!-- v-model="remark"-->
|
||||||
|
<!-- class="report_textarea"-->
|
||||||
|
<!-- placeholder="点击这里输入补充报备内容" />-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="report_btn" @click="saveHandler">
|
||||||
|
提交报备
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</van-popup>
|
||||||
|
|
||||||
|
<van-popup v-model="showDatetime" round position="bottom">
|
||||||
|
<van-datetime-picker
|
||||||
|
class="dataTime"
|
||||||
|
v-if="showDatetime"
|
||||||
|
v-model="appointTime"
|
||||||
|
type="datetime"
|
||||||
|
:min-date="minDate"
|
||||||
|
@confirm="onConfirm"
|
||||||
|
@cancel="showDatetime = false"
|
||||||
|
/>
|
||||||
|
</van-popup>
|
||||||
|
</div>
|
||||||
|
<!-- </van-pull-refresh>-->
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { getReportListByOrder, reportHistory, newOrderReporting, getOrderInfo } from "@/api/report"
|
||||||
|
import { myMixins} from "@/utils/myMixins";
|
||||||
|
import {timeFormat} from "@/utils/common";
|
||||||
|
import reportListItem from '@/views/report/components/report-list-item'
|
||||||
|
import serviceItem from "@/views/report/components/service-item"
|
||||||
|
import {Dialog, Toast} from "vant";
|
||||||
|
export default {
|
||||||
|
name: "reportIndex",
|
||||||
|
components: { serviceItem, reportListItem },
|
||||||
|
mixins: [myMixins],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
addReportShow: false,
|
||||||
|
remark: '',
|
||||||
|
showDatetime: false,
|
||||||
|
appointTime: '',
|
||||||
|
minDate: new Date(),
|
||||||
|
address: '',
|
||||||
|
lat: '',
|
||||||
|
lng: '',
|
||||||
|
reportList: [],
|
||||||
|
recordList: [],
|
||||||
|
orderInfo: {},
|
||||||
|
type: '', // 1 调度 2 司机
|
||||||
|
currentInfo: '',
|
||||||
|
userOrderId: '',
|
||||||
|
userOrderCode: '',
|
||||||
|
driverId: '',
|
||||||
|
clickFlag: true,
|
||||||
|
isLoading: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
|
this.userOrderId = this.$route.query.userOrderId || urlParams.get('userOrderId');
|
||||||
|
this.userOrderCode = this.$route.query.userOrderCode || urlParams.get('userOrderCode');
|
||||||
|
this.type = this.$route.query.type || urlParams.get('type');
|
||||||
|
this.driverId = this.$route.query.driverId || urlParams.get('driverId');
|
||||||
|
await this.getReportList();
|
||||||
|
await this.getDetail();
|
||||||
|
await this.getRecordList();
|
||||||
|
await this.scrollToBottom();
|
||||||
|
},
|
||||||
|
activated() {
|
||||||
|
let addressSession = sessionStorage.getItem('reportAddress');
|
||||||
|
if(addressSession) {
|
||||||
|
let _obj = JSON.parse(addressSession)
|
||||||
|
this.address = _obj.startPoiAddress;
|
||||||
|
this.lat = _obj.startLat;
|
||||||
|
this.lng = _obj.startLng;
|
||||||
|
this.adCode = _obj.adCode;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onRefreshHandler() {
|
||||||
|
setTimeout(async () => {
|
||||||
|
try {
|
||||||
|
this.recordList = [];
|
||||||
|
await this.getReportList();
|
||||||
|
await this.getDetail();
|
||||||
|
await this.getRecordList();
|
||||||
|
await this.scrollToBottom();
|
||||||
|
} finally {
|
||||||
|
this.isLoading = false; // 结束加载状态
|
||||||
|
}
|
||||||
|
}, 100)
|
||||||
|
},
|
||||||
|
// 添加滚动方法
|
||||||
|
scrollToBottom() {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
const container = this.$refs.chatList
|
||||||
|
container.scrollTop = container.scrollHeight
|
||||||
|
})
|
||||||
|
},
|
||||||
|
async getRecordList() {
|
||||||
|
let recordList = await reportHistory({
|
||||||
|
userOrderId: this.userOrderId,
|
||||||
|
userOrderCode: this.userOrderCode,
|
||||||
|
driverId: this.driverId,
|
||||||
|
source: Number(this.type),
|
||||||
|
})
|
||||||
|
this.recordList = recordList.data;
|
||||||
|
},
|
||||||
|
async saveHandler() {
|
||||||
|
if( this.clickFlag ) {
|
||||||
|
let data = {
|
||||||
|
source: Number(this.type),
|
||||||
|
reportContent: this.remark,
|
||||||
|
userOrderId: Number(this.userOrderId),
|
||||||
|
reportConfigId: this.currentInfo.id,
|
||||||
|
userOrderCode: this.userOrderCode,
|
||||||
|
driverId: this.driverId,
|
||||||
|
}
|
||||||
|
if(this.currentInfo.component == 'time') {
|
||||||
|
if( !this.appointTime ) {
|
||||||
|
Toast('预约时间不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if( new Date(this.appointTime).getTime() <= new Date().getTime() ) {
|
||||||
|
Toast('预约时间不能小于当前时间')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data.time = this.appointTime
|
||||||
|
}
|
||||||
|
if(this.currentInfo.component == 'address') {
|
||||||
|
if( !this.address ) {
|
||||||
|
Toast('地址不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
data.address = this.address
|
||||||
|
data.lat = this.lat;
|
||||||
|
data.lng = this.lng;
|
||||||
|
}
|
||||||
|
if( !this.remark ) {
|
||||||
|
Toast('备注内容不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.clickFlag = false;
|
||||||
|
try {
|
||||||
|
await newOrderReporting(data)
|
||||||
|
Dialog.alert({
|
||||||
|
title: '提示',
|
||||||
|
message: "报备添加成功"
|
||||||
|
}).then(async () => {
|
||||||
|
await this.getRecordList()
|
||||||
|
this.addReportShow = false
|
||||||
|
this.scrollToBottom();
|
||||||
|
this.initDialogData();
|
||||||
|
this.clickFlag = true
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
this.clickFlag = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
initDialogData() {
|
||||||
|
this.appointTime = '';
|
||||||
|
this.address = '';
|
||||||
|
this.lat = '';
|
||||||
|
this.lng = '';
|
||||||
|
this.remark = '';
|
||||||
|
},
|
||||||
|
addReportHandler(data) { // 点击添加报备弹框
|
||||||
|
this.currentInfo = data;
|
||||||
|
this.addReportShow = true
|
||||||
|
},
|
||||||
|
getReportHandler(data) { // 点击获取当前报备信息
|
||||||
|
this.recordList.push({
|
||||||
|
messageType: 4,
|
||||||
|
content: data.child
|
||||||
|
})
|
||||||
|
this.scrollToBottom();
|
||||||
|
},
|
||||||
|
async getDetail(){ // 订单详情
|
||||||
|
if(this.userOrderId) {
|
||||||
|
let result = await getOrderInfo({
|
||||||
|
userOrderId: this.userOrderId,
|
||||||
|
userOrderCode: this.userOrderCode
|
||||||
|
})
|
||||||
|
this.orderInfo = result.data
|
||||||
|
} else {
|
||||||
|
this.orderInfo = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
async getReportList() { // 报备大类
|
||||||
|
let res = await getReportListByOrder({
|
||||||
|
orderId: this.userOrderId
|
||||||
|
});
|
||||||
|
this.reportList = res.data
|
||||||
|
},
|
||||||
|
onConfirm(data) {
|
||||||
|
this.appointTime = timeFormat(new Date(data))
|
||||||
|
this.showDatetime = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.custom-pull-refresh {
|
||||||
|
height: 100% !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
#app {
|
||||||
|
background: #F9FCFF !important;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main_wrap {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: #F9FCFF !important;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
// 添加以下样式确保正确的高度计算
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.top_bg {
|
||||||
|
width: 100%;
|
||||||
|
height: 87px;
|
||||||
|
/*.title {
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding-top: 52px;
|
||||||
|
font-size: 17px;
|
||||||
|
line-height: 24px;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
.dispatch { // 调度app头部背景色
|
||||||
|
background: #354683;
|
||||||
|
}
|
||||||
|
.driver { // 司机app头部背景色
|
||||||
|
background: #334885;
|
||||||
|
}
|
||||||
|
.service_wrap {
|
||||||
|
margin-top: -75px;
|
||||||
|
/*margin-bottom: 20px;*/
|
||||||
|
}
|
||||||
|
.chat_list {
|
||||||
|
flex: 1;
|
||||||
|
/*overflow: auto;*/
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
-webkit-overflow-scrolling: touch; // 为了iOS平滑滚动
|
||||||
|
padding-top: 10px;
|
||||||
|
/* 修复 iOS 滚动问题 */
|
||||||
|
transform: translateZ(0);
|
||||||
|
.top_tip_wrap {
|
||||||
|
color: #7C8698;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
.tip_wrap {
|
||||||
|
color: #7C8698;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.ai_chat {
|
||||||
|
padding: 25px 10px 20px;
|
||||||
|
display: flex;
|
||||||
|
.ai_left {
|
||||||
|
.report_ai {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.ai_right {
|
||||||
|
.ai_title {
|
||||||
|
color: #203152;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #267EF0;
|
||||||
|
line-height: 18px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
li::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
background-color: #5680FA;
|
||||||
|
border-radius: 50%; /* 圆形 */
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*客服人员,服务人员对话弹框样式 s*/
|
||||||
|
.profile_photo {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
}
|
||||||
|
.mr {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.ml {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
.mb20 {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.customer_item {
|
||||||
|
display: flex;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 64px;
|
||||||
|
.customer_left {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.common_right {
|
||||||
|
padding: 11px 13px;
|
||||||
|
flex: 1;
|
||||||
|
.customer_status::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
background-color: #5680FA;
|
||||||
|
border-radius: 50%; /* 圆形 */
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.customer_status {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #267EF0;
|
||||||
|
line-height: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.service_status {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #F07926;
|
||||||
|
line-height: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.service_status::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
background-color: #F07926;
|
||||||
|
border-radius: 50%; /* 圆形 */
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.customer_cls {
|
||||||
|
border-radius: 0px 6px 6px 6px;
|
||||||
|
background: #E3F0FF;
|
||||||
|
}
|
||||||
|
.service_cls {
|
||||||
|
background: #FAEBD8;
|
||||||
|
border-radius: 0px 6px 6px 6px;
|
||||||
|
}
|
||||||
|
.server_item {
|
||||||
|
display: flex;
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-left: 64px;
|
||||||
|
}
|
||||||
|
.response_con {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #242A37;
|
||||||
|
line-height: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
/*客服人员,服务人员对话弹框样式 e*/
|
||||||
|
.dialog_wrap {
|
||||||
|
.add_report_bg {
|
||||||
|
width: 100%;
|
||||||
|
height: 76px;
|
||||||
|
}
|
||||||
|
.report_content {
|
||||||
|
width: calc(100% - 12px);
|
||||||
|
margin: -30px auto 0;
|
||||||
|
padding-right: 14px;
|
||||||
|
padding-left: 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: #fff;
|
||||||
|
position: relative;
|
||||||
|
padding-top: 25px;
|
||||||
|
border-radius: 10px;
|
||||||
|
.report_title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #267EF0;
|
||||||
|
line-height: 22px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
.dot {
|
||||||
|
width: 7px;
|
||||||
|
height: 6px;
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.report_time_content {
|
||||||
|
padding: 13px;
|
||||||
|
background: #F2F7FF;
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 1px solid #E2EAF6;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
.report_time_left {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: rgba(0, 0, 0, 0.9);
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
.add_report_time {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
.report_arrow {
|
||||||
|
width: 8px;
|
||||||
|
height: 12px;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.report_common_content {
|
||||||
|
margin-bottom: 27px;
|
||||||
|
.report_textarea {
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background: #F8FAFC;
|
||||||
|
border-radius: 6px;
|
||||||
|
min-height: 95px;
|
||||||
|
border: 1px solid #E2EAF6;
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.report_btn {
|
||||||
|
width: calc(100% - 80px);
|
||||||
|
height: 46px;
|
||||||
|
line-height: 46px;
|
||||||
|
background: #005DD5;
|
||||||
|
border-radius: 23px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
margin: 0 auto 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
::v-deep .van-popup__close-icon {
|
||||||
|
color: #0F458E;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
150
src/views/rvDriverAuthentication/auditList.vue
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content">
|
||||||
|
<div class="navBar">
|
||||||
|
<van-nav-bar
|
||||||
|
title="小板运输司机认证"
|
||||||
|
left-arrow
|
||||||
|
left-arrow-color="#FFFFFF"
|
||||||
|
:border="false"
|
||||||
|
:fixed="true"
|
||||||
|
:safe-area-inset-top="true"
|
||||||
|
@click-left="h5GoBack"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<img class="icon_register" mode="widthFix" src="@/assets/authentication/icon_register.png" />
|
||||||
|
<tip-bar :title="'应国家政策要求:从事货运行业的司机用户,身份证照片、驾驶证信息、行驶证信息、人车合影及承运资质信息必须进行实名认证。'"></tip-bar>
|
||||||
|
<div class="audit_list">
|
||||||
|
<audit-item title="个人信息" tip="上传本人头像和身份证"
|
||||||
|
:url="currentFlag(1) ? personActiveUrl : personUrl"
|
||||||
|
:pass="currentFlag(1)" :current-class="currentStep == 1"
|
||||||
|
@detail="showDetail('personAudit')" @upload="showDetail('personAudit')"></audit-item>
|
||||||
|
<audit-item title="驾照信息" tip="上传驾驶证" :url="currentFlag(2) ? driverActiveUrl : driverUrl" v-if="type != 'simple'" :pass="currentFlag(2)" :current-class="currentStep == 2"
|
||||||
|
@detail="showDetail('carAudit')" @upload="showDetail('carAudit')"></audit-item>
|
||||||
|
<audit-item title="车辆信息" tip="上传行驶证与车辆照片" :url="currentFlag(3) ? carActiveUrl : carUrl" :pass="currentFlag(3)" :current-class="currentStep == 3"
|
||||||
|
@detail="showDetail('carInfoAudit')" @upload="showDetail('carInfoAudit')"></audit-item>
|
||||||
|
<audit-item title="银行卡信息" tip="上传本人银行卡信息" :url="currentFlag(4) ? bankActiveUrl :bankUrl" :pass="currentFlag(4)" :current-class="currentStep == 4"
|
||||||
|
@detail="showDetail('bankInfo')" @upload="showDetail('bankInfo')"></audit-item>
|
||||||
|
<audit-item title="审核信息" :tip="auditTip" :status="statusStr" :url="currentFlag(5) ? bankActiveUrl :bankUrl" :pass="currentFlag(5)" :current-class="currentStep == 5" :button-hide="false"
|
||||||
|
></audit-item>
|
||||||
|
</div>
|
||||||
|
<fixed-button v-if="verifyStatus == 11" @myClick="showDetail('personAudit')" title="重新认证"></fixed-button>
|
||||||
|
<success-dialog ref="successDialog"></success-dialog>s
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import successDialog from "./component/successDialog.vue";
|
||||||
|
import auditItem from "./component/auditItem";
|
||||||
|
import tipBar from "./component/tipBar";
|
||||||
|
import { verifyStatus, verifyStatusSimple ,tipString} from '@/utils/common';
|
||||||
|
import { myMixins } from '@/utils/myMixins.js';
|
||||||
|
import fixedButton from "./component/fixedButton";
|
||||||
|
import {infoVerifyProgress} from "@/api/authentication"
|
||||||
|
export default {
|
||||||
|
name:"auditList",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
personUrl: require('@/assets/authentication/audit_icon4_gray.png'),
|
||||||
|
personActiveUrl: require('@/assets/authentication/audit_icon4.png'),
|
||||||
|
driverUrl: require('@/assets/authentication/audit_icon1_gray.png'),
|
||||||
|
driverActiveUrl: require('@/assets/authentication/aduit_icon1.png'),
|
||||||
|
carUrl: require('@/assets/authentication/audit_icon2_gray.png'),
|
||||||
|
carActiveUrl: require('@/assets/authentication/audit_icon2.png'),
|
||||||
|
bankUrl: require('@/assets/authentication/audit_icon3_gray.png'),
|
||||||
|
bankActiveUrl: require('@/assets/authentication/audit_icon3.png'),
|
||||||
|
currentStep: undefined,
|
||||||
|
auditTip: '',
|
||||||
|
statusStr: '',
|
||||||
|
verifyStatus: '',
|
||||||
|
type: localStorage.getItem('type')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mixins: [ myMixins ],
|
||||||
|
components: {
|
||||||
|
tipBar,
|
||||||
|
auditItem,
|
||||||
|
fixedButton,
|
||||||
|
successDialog
|
||||||
|
},
|
||||||
|
// onLoad() {
|
||||||
|
// },
|
||||||
|
// async onPullDownRefresh() {
|
||||||
|
// await this.refresh()
|
||||||
|
// uni.stopPullDownRefresh()
|
||||||
|
// },
|
||||||
|
async mounted() {
|
||||||
|
// await this.$onLaunched;
|
||||||
|
await this.refresh()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getRegisterInfo(data) {
|
||||||
|
let res = await infoVerifyProgress( data)
|
||||||
|
// console.log("res",res)
|
||||||
|
localStorage.setItem('infoVerify', res?.data?.infoVerify?.code)
|
||||||
|
localStorage.setItem('failReason', res?.data?.verifyRemark)
|
||||||
|
localStorage.setItem('authIsSuccess', res?.data?.authIsSuccess)
|
||||||
|
localStorage.setItem('name', res?.data?.name)
|
||||||
|
},
|
||||||
|
async refresh() {
|
||||||
|
await this.getRegisterInfo()
|
||||||
|
await this.getVerifyStatus()
|
||||||
|
let obj = await tipString(localStorage.getItem('infoVerify'))
|
||||||
|
this.verifyStatus = localStorage.getItem('infoVerify')
|
||||||
|
if( this.verifyStatus == 11 ) {
|
||||||
|
this.auditTip = localStorage.getItem('failReason')
|
||||||
|
localStorage.setItem('authIsSuccess', 0)
|
||||||
|
} else {
|
||||||
|
this.auditTip = obj.tip
|
||||||
|
}
|
||||||
|
if( this.verifyStatus == 12 && parseInt(localStorage.getItem('authIsSuccess')) != 1) { // 审核通过
|
||||||
|
this.$refs.successDialog.openHandler()
|
||||||
|
}
|
||||||
|
this.statusStr = obj.button
|
||||||
|
},
|
||||||
|
currentFlag(status) {
|
||||||
|
return this.currentStep > status
|
||||||
|
},
|
||||||
|
showDetail(path) {
|
||||||
|
this.goPage(path)
|
||||||
|
},
|
||||||
|
getVerifyStatus() {
|
||||||
|
if( this.type == 'simple' ) {
|
||||||
|
this.currentStep = verifyStatusSimple(localStorage.getItem('infoVerify'))
|
||||||
|
} else {
|
||||||
|
this.currentStep = verifyStatus(localStorage.getItem('infoVerify'))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@import "@/styles/common.scss";
|
||||||
|
.navBar{
|
||||||
|
margin-bottom: 46px;
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
font-size: 0;
|
||||||
|
padding-bottom: 80px;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
.audit_list {
|
||||||
|
padding: 20px 30px;
|
||||||
|
.audit_item:after{
|
||||||
|
left: 18px;
|
||||||
|
position: absolute;
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
width: 2px;
|
||||||
|
top: 56px;
|
||||||
|
height: 48px;
|
||||||
|
background: rgba($color: #B2C2E4, $alpha: 0.59);
|
||||||
|
}
|
||||||
|
.audit_item:last-child {
|
||||||
|
&::after{
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
143
src/views/rvDriverAuthentication/bankInfo.vue
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content">
|
||||||
|
<div class="navBar">
|
||||||
|
<van-nav-bar
|
||||||
|
title="银行卡信息认证"
|
||||||
|
left-arrow
|
||||||
|
left-arrow-color="#FFFFFF"
|
||||||
|
:border="false"
|
||||||
|
:fixed="true"
|
||||||
|
:safe-area-inset-top="true"
|
||||||
|
@click-left="h5GoBack"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<tip-bar :title="'温馨提示:服务完成后,平台代收的运费需要提现到您的银行卡账户中,请确保您上传的银行卡信息真实可用。'"></tip-bar>
|
||||||
|
<photo-item title="银行卡正面照片" :left-url="form.bankCardFront || bank" :show="show" @leftImg="bankHandler"></photo-item>
|
||||||
|
<div class="carInfo">
|
||||||
|
<div class="left_wrap title">
|
||||||
|
<span class="mar_left">姓名</span>
|
||||||
|
<div>
|
||||||
|
<span class="star">*</span>
|
||||||
|
<span>账户号</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="star">*</span>
|
||||||
|
<span>开户行</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="right_wrap">
|
||||||
|
<input type="text" disabled placeholder="请输入持卡人姓名" v-model="form.name">
|
||||||
|
<input type="text" placeholder="请输入银行卡号" v-model="form.cardNumber">
|
||||||
|
<input type="text" placeholder="请输入开户行" v-model="form.bankName">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<fixed-button @myClick="clickHandler" v-if="showFun()"></fixed-button>
|
||||||
|
<!-- <protocol-dialog></protocol-dialog>-->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import protocolDialog from "./component/protocolDialog";
|
||||||
|
import fixedButton from "./component/fixedButton";
|
||||||
|
import photoItem from "./component/photoItem";
|
||||||
|
import tipBar from "./component/tipBar";
|
||||||
|
import { ocrRecognize, driverInfoVerify, driverInfoVerifyDetail } from '@/api/authentication.js'
|
||||||
|
import { leftCopy } from '@/utils/common.js'
|
||||||
|
import { myMixins } from '@/utils/myMixins.js'
|
||||||
|
export default {
|
||||||
|
name: "bankInfo",
|
||||||
|
components: {
|
||||||
|
tipBar,
|
||||||
|
photoItem,
|
||||||
|
fixedButton,
|
||||||
|
// protocolDialog
|
||||||
|
},
|
||||||
|
mixins: [myMixins],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
bank: require('@/assets/authentication/bank_icon1.png'),
|
||||||
|
show: undefined,
|
||||||
|
form: {
|
||||||
|
bankCardFront: '',
|
||||||
|
bankName: '',
|
||||||
|
cardNumber: '',
|
||||||
|
name: '',
|
||||||
|
},
|
||||||
|
type:localStorage.getItem('type')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
// if(options?.show) {
|
||||||
|
this.show = true
|
||||||
|
// }
|
||||||
|
if( this.show ) {
|
||||||
|
await this.getDetail()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async onShow() {
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async clickHandler() {
|
||||||
|
if(!this.form.bankCardFront) {
|
||||||
|
this.$toast('银行卡照片未上传');
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if( this.form.name && this.form.cardNumber && this.form.bankName ) {
|
||||||
|
let res = await driverInfoVerify( {
|
||||||
|
verifyType: 4,
|
||||||
|
...this.form,
|
||||||
|
type: this.type || 'full',
|
||||||
|
})
|
||||||
|
this.$toast('操作成功')
|
||||||
|
await this.getRegisterInfo({
|
||||||
|
verifyType: 4
|
||||||
|
})
|
||||||
|
setTimeout(() => {
|
||||||
|
this.h5GoBack()
|
||||||
|
}, 100)
|
||||||
|
console.log('注册', res)
|
||||||
|
} else {
|
||||||
|
this.$toast('银行卡信息识别错误')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async bankHandler(data) {
|
||||||
|
this.form.bankName = ''
|
||||||
|
this.form.cardNumber = ''
|
||||||
|
this.form.name = ''
|
||||||
|
this.form.bankCardFront = data
|
||||||
|
let res = await this.orcHandler(this.form.bankCardFront, 5)
|
||||||
|
leftCopy(this.form, {...res?.data?.data})
|
||||||
|
},
|
||||||
|
async getDetail() { // 认证详情
|
||||||
|
let res = await driverInfoVerifyDetail( {
|
||||||
|
verifyType: 4
|
||||||
|
})
|
||||||
|
leftCopy(this.form, {...res?.data?.bankCardInfoData})
|
||||||
|
console.log('bank', res)
|
||||||
|
},
|
||||||
|
async orcHandler(url, type) { // ocr 识别
|
||||||
|
let res = await ocrRecognize( {
|
||||||
|
ocrType: type,
|
||||||
|
imageUrl: url
|
||||||
|
});
|
||||||
|
return res;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@import "@/styles/common.scss";
|
||||||
|
@import "@/styles/infoShow.scss";
|
||||||
|
page {
|
||||||
|
background: #F4F5F7;
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
.navBar{
|
||||||
|
margin-bottom: 46px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
215
src/views/rvDriverAuthentication/carAudit.vue
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
<template>
|
||||||
|
<div class="content">
|
||||||
|
<div class="navBar">
|
||||||
|
<van-nav-bar
|
||||||
|
title="驾驶证认证"
|
||||||
|
left-arrow
|
||||||
|
left-arrow-color="#FFFFFF"
|
||||||
|
:border="false"
|
||||||
|
:fixed="true"
|
||||||
|
:safe-area-inset-top="true"
|
||||||
|
@click-left="h5GoBack"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<tip-bar :title="'应国家政策要求:从事货运行业的司机用户,身份证照片、驾驶证信息、行驶证信息、人车合影及承运资质信息必须进行实名认证。'"></tip-bar>
|
||||||
|
<photo-item title="上传驾驶证" :left-url="form.drivingLicenceFront || carFront" :right-url="form.drivingLicenceContrary || carBack"
|
||||||
|
:show="show" @leftImg="carFrontHandler" @rightImg="carBackHandler"></photo-item>
|
||||||
|
<div class="carInfo">
|
||||||
|
<div class="left_wrap title">
|
||||||
|
<div class="form_item">
|
||||||
|
<div>
|
||||||
|
<span class="star">*</span>
|
||||||
|
<span>姓名</span>
|
||||||
|
</div>
|
||||||
|
<span class="phone">{{form.name}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="form_item">
|
||||||
|
<div>
|
||||||
|
<span class="star">*</span>
|
||||||
|
<span>身份证号</span>
|
||||||
|
</div>
|
||||||
|
<input class="phone" type="text" placeholder="请输入持卡人身份证号" v-model="form.licenseNumber">
|
||||||
|
</div>
|
||||||
|
<div class="form_item">
|
||||||
|
<div>
|
||||||
|
<span class="star">*</span>
|
||||||
|
<span>准驾类型</span>
|
||||||
|
</div>
|
||||||
|
<span class="phone">{{form.approvedType}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="form_item">
|
||||||
|
<div>
|
||||||
|
<span class="star">*</span>
|
||||||
|
<span>初次领证日期</span>
|
||||||
|
</div>
|
||||||
|
<span class="phone">{{form.initialIssueDate}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="form_item">
|
||||||
|
<div>
|
||||||
|
<span class="star">*</span>
|
||||||
|
<span>有效期限</span>
|
||||||
|
</div>
|
||||||
|
<span class="phone">{{form.validPeriod}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="form_item">
|
||||||
|
<div>
|
||||||
|
<span class="star">*</span>
|
||||||
|
<span>档案编号</span>
|
||||||
|
</div>
|
||||||
|
<span class="phone">{{form.recordNumber}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<fixed-button @myClick="clickHandler" v-if="showFun()"></fixed-button>
|
||||||
|
<!-- <protocol-dialog></protocol-dialog>-->
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import protocolDialog from "./component/protocolDialog";
|
||||||
|
import fixedButton from "./component/fixedButton";
|
||||||
|
import photoItem from "./component/photoItem";
|
||||||
|
import tipBar from "./component/tipBar";
|
||||||
|
import { ocrRecognize, driverInfoVerify, driverInfoVerifyDetail } from '@/api/authentication.js'
|
||||||
|
import { leftCopy } from '@/utils/common.js'
|
||||||
|
import { myMixins } from '@/utils/myMixins.js'
|
||||||
|
export default {
|
||||||
|
name: "carAudit",
|
||||||
|
components: {
|
||||||
|
tipBar,
|
||||||
|
photoItem,
|
||||||
|
fixedButton,
|
||||||
|
// protocolDialog
|
||||||
|
},
|
||||||
|
mixins: [ myMixins ],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
carFront: require('@/assets/authentication/car_icon1.png'),
|
||||||
|
carBack: require('@/assets/authentication/car_icon2.png'),
|
||||||
|
form: {
|
||||||
|
name: '',
|
||||||
|
drivingLicenceFront: '',
|
||||||
|
drivingLicenceContrary: '',
|
||||||
|
licenseNumber: '',
|
||||||
|
approvedType: '', // 准驾车型
|
||||||
|
initialIssueDate: '', // 初次领证日期
|
||||||
|
validPeriod: '', // 有效期
|
||||||
|
recordNumber: '', // 档案编号
|
||||||
|
},
|
||||||
|
show: undefined,
|
||||||
|
type: localStorage.getItem('type'),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async mounted() {
|
||||||
|
// if(options?.show) {
|
||||||
|
this.show = true
|
||||||
|
// }
|
||||||
|
if( this.show ) {
|
||||||
|
await this.getDetail()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async onShow() {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
backInit() {
|
||||||
|
this.form.recordNumber = ''
|
||||||
|
},
|
||||||
|
frontInit() {
|
||||||
|
this.form.licenseNumber = ''
|
||||||
|
this.form.approvedType = ''
|
||||||
|
this.form.initialIssueDate = ''
|
||||||
|
this.form.validPeriod = ''
|
||||||
|
},
|
||||||
|
async carFrontHandler(data) {
|
||||||
|
await this.frontInit();
|
||||||
|
this.form.drivingLicenceFront = data
|
||||||
|
await this.idOrcHandler(this.form.drivingLicenceFront)
|
||||||
|
},
|
||||||
|
async carBackHandler(data) {
|
||||||
|
await this.backInit();
|
||||||
|
this.form.drivingLicenceContrary = data
|
||||||
|
await this.idOrcHandler(this.form.drivingLicenceContrary, 'back')
|
||||||
|
},
|
||||||
|
async idOrcHandler(url, type = 'front') { // ocr 识别
|
||||||
|
let res = await ocrRecognize({
|
||||||
|
ocrType: 2,
|
||||||
|
imageUrl: url
|
||||||
|
});
|
||||||
|
let carInfo
|
||||||
|
if(type == 'back') {
|
||||||
|
carInfo = res?.data?.data?.back?.data
|
||||||
|
this.form.recordNumber = carInfo?.recordNumber || ''
|
||||||
|
} else {
|
||||||
|
carInfo = res?.data?.data?.face?.data
|
||||||
|
leftCopy(this.form, {...carInfo})
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
async getDetail() { // 认证详情
|
||||||
|
let res = await driverInfoVerifyDetail( {
|
||||||
|
verifyType: 2
|
||||||
|
})
|
||||||
|
leftCopy(this.form, {...res?.data?.drivingLicenseInfoData})
|
||||||
|
console.log('carAudit', res)
|
||||||
|
},
|
||||||
|
async clickHandler() { // 点击去认证
|
||||||
|
if( !this.form.drivingLicenceFront ) {
|
||||||
|
this.$toast('驾驶证正面照片未上传')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if( !this.form.drivingLicenceContrary ) {
|
||||||
|
this.$toast('驾驶证反面照片未上传')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.form.licenseNumber || !this.form.initialIssueDate || !this.form.validPeriod) {
|
||||||
|
this.$toast('驾驶证正面识别错误,请重新上传')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if(!this.form.recordNumber) {
|
||||||
|
this.$toast('驾驶证反面识别错误,请重新上传')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
await driverInfoVerify({
|
||||||
|
verifyType: 2,
|
||||||
|
type: this.type || 'full',
|
||||||
|
...this.form,
|
||||||
|
})
|
||||||
|
this.$toast('操作成功')
|
||||||
|
await this.getRegisterInfo({
|
||||||
|
verifyType: 2
|
||||||
|
})
|
||||||
|
setTimeout(() => {
|
||||||
|
this.h5GoBack()
|
||||||
|
}, 100)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@import "@/styles/common.scss";
|
||||||
|
@import "@/styles/infoShow.scss";
|
||||||
|
page {
|
||||||
|
background: #F4F5F7;
|
||||||
|
}
|
||||||
|
.content{
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
.navBar{
|
||||||
|
margin-bottom: 46px;
|
||||||
|
}
|
||||||
|
.carInfo .title {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
.form_item {
|
||||||
|
line-height: 30px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.phone {
|
||||||
|
flex: 1;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
</style>
|
||||||