工单报备,工单详情

This commit is contained in:
2023-08-15 17:20:21 +08:00
parent ad809b38e6
commit c27a99d0ac
10 changed files with 312 additions and 184 deletions

84
package-lock.json generated
View File

@ -2030,49 +2030,6 @@
"webpack-merge": "^5.7.3",
"webpack-virtual-modules": "^0.4.2",
"whatwg-fetch": "^3.6.2"
},
"dependencies": {
"@vue/vue-loader-v15": {
"version": "npm:vue-loader@15.10.1",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz",
"integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
"dev": true,
"requires": {
"@vue/component-compiler-utils": "^3.1.0",
"hash-sum": "^1.0.2",
"loader-utils": "^1.1.0",
"vue-hot-reload-api": "^2.3.0",
"vue-style-loader": "^4.1.0"
},
"dependencies": {
"hash-sum": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
"integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
"dev": true
}
}
},
"json5": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
"requires": {
"minimist": "^1.2.0"
}
},
"loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^1.0.1"
}
}
}
},
"@vue/cli-shared-utils": {
@ -2237,6 +2194,47 @@
}
}
},
"@vue/vue-loader-v15": {
"version": "npm:vue-loader@15.10.1",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.10.1.tgz",
"integrity": "sha512-SaPHK1A01VrNthlix6h1hq4uJu7S/z0kdLUb6klubo738NeQoLbS6V9/d8Pv19tU0XdQKju3D1HSKuI8wJ5wMA==",
"dev": true,
"requires": {
"@vue/component-compiler-utils": "^3.1.0",
"hash-sum": "^1.0.2",
"loader-utils": "^1.1.0",
"vue-hot-reload-api": "^2.3.0",
"vue-style-loader": "^4.1.0"
},
"dependencies": {
"hash-sum": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
"integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
"dev": true
},
"json5": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
"integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
"dev": true,
"requires": {
"minimist": "^1.2.0"
}
},
"loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
"integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
"dev": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^1.0.1"
}
}
}
},
"@vue/web-component-wrapper": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",

45
src/api/mine.js Normal file
View File

@ -0,0 +1,45 @@
import request from '@/utils/http'
//车辆列表
export function supplierVehicleList(data){
return request({
url:'/supplierAppV2/dispatchApp/user/supplierVehicleList',
method:'POST',
contentTye:'application/json',
data
})
}
//添加或修改车辆信息
export function saveVehicle(data){
return request({
url:'/supplierAppV2/dispatchApp/user/saveVehicle',
method:'POST',
contentType:'application/json',
data
})
}
// 获取车辆信息(用于修改时回显的值,只需传vehicleId
export function getInfoById(data){
return request({
url:'/supplierAppV2/dispatchApp/user/getInfoById',
method:'POST',
contentType:'application/json',
data
})
}
//删除车辆信息(只需传vehicleId)
export function deleteVehicle(data){
return request({
url:'/supplierAppV2/dispatchApp/user/deleteVehicle',
method:'POST',
contentType:'application/json',
data
})
}
//车辆类型列表
export function vehicleTypeList(){
return request({
url:'/supplierAppV2/dispatchApp/user/vehicleTypeList',
method:'POST'
})
}

View File

@ -34,3 +34,12 @@ export function orderReporting(data){
data
})
}
// 修改结算信息
export function updateOrderSettlement(data){
return request({
url:'/supplierAppV2/dispatchApp/order/updateOrderSettlement',
method:'POST',
contentType:'application/json',
data
})
}

View File

@ -72,9 +72,9 @@ const routes = [
}
},
{
path: "/carManage",
name: 'carManage',
component: () => import('@/views/index/carManage'),
path: "/vehicleManage",
name: 'vehicleManage',
component: () => import('@/views/index/vehicleManage.vue'),
meta: {
title: '车辆管理'
}

View File

@ -1,6 +1,5 @@
import axios from "axios";
import qs from 'qs'
import { Toast } from 'vant'
// console.log('process.env.VUE_APP_BASE_API', process.env.VUE_APP_BASE_API)
@ -15,12 +14,9 @@ service.interceptors.request.use(
config => {
config.data = config.contentType ? config.data : qs.stringify(config.data)
config.headers['Content-Type'] = config.contentType || 'application/x-www-form-urlencoded'
// 在发送请求之前做一些操作如添加token到请求头
const token='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzemwiLCJhdWQiOlsic3VwcGxpZXItYXBwIl0sIm5iZiI6MTY5MTU1NzIzNSwidXNlcl9pbmZvIjp7InVzZXJJZCI6NTQ1ODUsInBob25lIjoiMTc2MzAwMzU2NTgiLCJuYW1lIjoi5bCP5a6LIiwic3VwcGxpZXJOYW1lIjoi5LiK5rW35a6J55WFQSIsInN1cHBsaWVySWQiOjExMjgsInVzZXJuYW1lIjoic3psIiwidXNlclR5cGUiOiJBUFAiLCJhdXRob3JpdGllcyI6W119LCJzY29wZSI6WyJhbGwiXSwiaXNzIjoiaHR0cHM6Ly9zaW5vYXNzaXN0LmNvbSIsImV4cCI6MTY5MTY0MzYzNSwiaWF0IjoxNjkxNTU3MjM1fQ.S1AignpcnCxSrm3M8rzhCLYlgyqD2Hv-SPMqPLgqlt4'
const urlParams = new URLSearchParams(window.location.search);
const token = urlParams.get('token');
config.headers['Authorization'] = `${token}`;
/* if (getToken()) {
config.headers['token'] = getToken()
}*/
return config
},
error => {
@ -33,7 +29,7 @@ service.interceptors.response.use(
response => {
const res = response.data
// console.log('rere', res)
return res
return res //请求响应数据
// if (res.code && (res.code != '00' && res.code != '105' )) {
// Toast(res.msg || 'Error')
// return Promise.reject(new Error(res.msg || 'Error'))
@ -47,7 +43,6 @@ service.interceptors.response.use(
},
error => {
console.log('err' + error)
Toast(error.message)
return Promise.reject(error)
}
)

View File

@ -3,7 +3,7 @@
<div class="title">报备事项:</div>
<div class="line"></div>
<van-radio-group v-model="radio" @change="change">
<van-radio name="1" class="item">
<van-radio name="特殊情况绕路" class="item">
特殊情况绕路
<img
slot="icon"
@ -11,7 +11,7 @@
:src="props.checked ? activeIcon : inactiveIcon"
>
</van-radio>
<van-radio name="2" class="item">
<van-radio name="事发地变更" class="item">
事发地变更
<img
slot="icon"
@ -19,7 +19,7 @@
:src="props.checked ? activeIcon : inactiveIcon"
>
</van-radio>
<van-radio name="3" class="item">
<van-radio name="目的地变更" class="item">
目的地变更
<img
slot="icon"
@ -27,7 +27,7 @@
:src="props.checked ? activeIcon : inactiveIcon"
>
</van-radio>
<van-radio name="4" class="item">
<van-radio name="其他报备" class="item">
其他报备
<img
slot="icon"
@ -36,47 +36,58 @@
>
</van-radio>
</van-radio-group>
<!-- <div class="item" @click="isCheck = !isCheck">-->
<!-- <img :src="isCheck ? require('@/assets/check.png') : require('@/assets/uncheck.png')" />-->
<!-- <span>特殊情况绕路</span>-->
<!-- </div>-->
<!-- <div class="item">-->
<!-- <img :src="isCheck ? require('@/assets/check.png') : require('@/assets/uncheck.png')" />-->
<!-- <span>事发地变更</span>-->
<!-- </div>-->
<!-- <div class="item">-->
<!-- <img :src="isCheck ? require('@/assets/check.png') : require('@/assets/uncheck.png')" />-->
<!-- <span>目的地变更</span>-->
<!-- </div>-->
<!-- <div class="item">-->
<!-- <img :src="isCheck ? require('@/assets/check.png') : require('@/assets/uncheck.png')" />-->
<!-- <span>其他报备</span>-->
<!-- </div>-->
<textarea class="multiple" id="text-input" rows="4" cols="50" placeholder="报备描述"></textarea><br>
<textarea class="multiple" id="text-input" rows="4" cols="50" placeholder="报备描述" v-model="decscripTxt"></textarea><br>
<common-btn @submitClick="submit" />
</div>
</template>
<script>
import {orderReporting} from "@/api/order"
import CommonBtn from "@/components/commonBtn.vue"
export default {
name: "reportingView",
data(){
return{
// isCheck:false,
radio: '1',
decscripTxt:'',
radio: '',
activeIcon: require('@/assets/check.png'),
inactiveIcon: require('@/assets/uncheck.png')
inactiveIcon: require('@/assets/uncheck.png'),
queryType:'',
userOrderId:'',
orderCode:''
}
},
mounted() {
console.log(this.radio)
const urlParams = new URLSearchParams(window.location.search);
this.queryType = urlParams.get('queryType');
this.userOrderId = urlParams.get('userOrderId');
this.orderCode = urlParams.get('orderCode')
},
methods:{
submit(){
console.log("提交1111111111")
this.goReporting();
},
change(e){
console.log("change,可以拿到选中的是哪个值",e)
this.radio=e
console.log("可以拿到选中的是哪个值",this.radio)
},
async goReporting(){
let result = await orderReporting({
queryType:this.queryType,
userOrderId:this.userOrderId,
orderCode:this.orderCode,
reportingItem:this.radio ? this.radio : "",
reportingDesc:this.decscripTxt ? this.decscripTxt : ""
})
if(result.code === 200){
this.$toast(result.msg)
setTimeout(()=>{
window.android.sendMessage("goBack");
},2000)
}
}
},
components:{
CommonBtn

View File

@ -10,9 +10,9 @@
<div>CA段公里数</div>
</div>
<div class="rightInputMeters">
<div><input type="number"/>公里</div>
<div><input type="number"/>公里</div>
<div><input type="number"/>公里</div>
<div><input type="number" v-model="form.reportMileageAb"/>公里</div>
<div><input type="number" v-model="form.reportMileageBc"/>公里</div>
<div><input type="number" v-model="form.reportMileageCa"/>公里</div>
</div>
</div>
</div>
@ -21,14 +21,14 @@
<div class="line"></div>
<div class="metersWrap">
<div class="leftKiloMeters">
<div>AB段公里数</div>
<div>BC段公里数</div>
<div>CA段公里数</div>
<div>过路桥费ab</div>
<div>过路桥费bc</div>
<div>过路桥费ca</div>
</div>
<div class="rightInputMeters">
<div><input type="number"/>公里</div>
<div><input type="number"/>公里</div>
<div><input type="number"/>公里</div>
<div><input type="number" v-model="form.bridgeAmountAb"/></div>
<div><input type="number" v-model="form.bridgeAmountBc"/></div>
<div><input type="number" v-model="form.bridgeAmountCa"/></div>
</div>
</div>
</div>
@ -43,10 +43,10 @@
<div class="blueColor">已收取客户金额</div>
</div>
<div class="rightInputMeters" style="opacity: 1">
<div class="alignRight"><input type="number"/></div>
<div class="alignRight"><input type="number"/></div>
<div class="alignRight"><input type="number"/></div>
<div class="blueColor"><input type="number"/></div>
<div class="alignRight"><input type="number" v-model="form.tyreNumber"/></div>
<div class="alignRight"><input type="number" v-model="form.waitAmount"/></div>
<div class="alignRight"><input type="number" v-model="form.dilemmaFee"/></div>
<div class="blueColor"><input type="number" v-model="form.customerAmount"/></div>
</div>
</div>
</div>
@ -56,14 +56,55 @@
<script>
import CommonBtn from "@/components/commonBtn.vue"
import {updateOrderSettlement} from "@/api/order"
export default {
name: "supplySettlement",
data(){
return{}
return{
taskOrderId:'',
userOrderId:'',
orderCode:'',
form:{
reportMileageAb:'',
reportMileageBc:'',
reportMileageCa:'',
bridgeAmountAb:'',
bridgeAmountBc:'',
bridgeAmountCa:'',
tyreNumber:'',
waitAmount:'',
dilemmaFee:'',
customerAmount:'',
}
}
},
mounted() {
const urlParams = new URLSearchParams(window.location.search);
this.taskOrderId = urlParams.get('taskOrderId');
this.userOrderId = urlParams.get('userOrderId');
this.orderCode = urlParams.get('orderCode')
},
methods:{
submit() {
console.log("提交")
this.updatSettlement()
},
async updatSettlement(){
let result =await updateOrderSettlement({
...this.form,
userOrderId:this.userOrderId,
orderCode:this.orderCode,
taskOrderId:this.taskOrderId
})
if(result.code !== 200){
this.$toast(result.msg)
}else{
this.$toast(result.msg)
setTimeout(()=>{
window.android.sendMessage("goBack");
},2000)
}
console.log("result",result)
}
},
components:{

View File

@ -26,7 +26,7 @@ export default {
}
},
mounted() {
this.getList()
// this.getList()
},
methods:{
async getList(){

View File

@ -21,7 +21,7 @@
import { myMixins} from "@/utils/myMixins";
export default {
name: "carManage",
name: "vehicleManage",
mixins:[myMixins],
}
</script>

View File

@ -15,15 +15,15 @@
</div>
<div class="rightContent">
<div class="rightItem" style="display: flex;align-items: center;">
<span id="copyText">ZD23097890987</span>
<span id="copyText">{{orderCode}}</span>
<img @click="copyText" src="@/assets/copy.png" style="width: 35px;height: 15px;margin-left: 10px"/>
</div>
<div class="rightItem">平安产险</div>
<div class="rightItem">合同月结</div>
<div class="rightItem">万女士</div>
<div class="rightItem">15234447878</div>
<div class="rightItem">沪A123456</div>
<div class="rightItem">奥迪 A6L</div>
<div class="rightItem">{{ orderDetailInfo.contractName }}</div>
<div class="rightItem">{{ orderDetailInfo.contractSettleType.label }}</div>
<div class="rightItem">{{ orderDetailInfo.userName }}</div>
<div class="rightItem">{{ orderDetailInfo.userPhone }}</div>
<div class="rightItem">{{ orderDetailInfo.plateNumber }}</div>
<div class="rightItem">{{orderDetailInfo.model}} {{ orderDetailInfo.brand }}</div>
</div>
</div>
</div>
@ -32,31 +32,32 @@
<div class="line"></div>
<div class="infoContent">
<div class="item">
<span class="leftTitle fontColor">服务类型:</span><span class="rightContent">故障拖车</span>
<span class="leftTitle fontColor">服务类型:</span><span class="rightContent">{{ orderDetailInfo.taskServiceName }}</span>
</div>
<div class="item">
<span class="leftTitle fontColor">车辆位于:</span><span class="rightContent">地面</span>
</div>
<div class="item">
<span class="leftTitle fontColor">事发地:</span><span class="rightContent">上海市高科西路650号</span>
<span class="leftTitle fontColor">车辆位于:</span><span class="rightContent">{{ orderDetailInfo.positionEnvironment.label }}</span>
</div>
<div class="item" style="align-items: baseline">
<span class="leftTitle fontColor">事发地补充:</span><span class="rightContent vehicleRemark" style="flex: 1">50公里免拖超出部分费用按照市场价格由客户现场支付原始手机号15088752478,客户承担背车段路桥费目的地不明确请师傅到现场核实清楚并回电反馈</span>
<span class="leftTitle fontColor">事发地:</span><span class="rightContent" style="flex: 1">{{ orderDetailInfo.vehiclePointAddress }}</span>
</div>
<div class="item" style="align-items: baseline">
<span class="leftTitle fontColor">事发地补充:</span><span class="rightContent vehicleRemark" >{{orderDetailInfo.vehiclePointRemark}}
</span>
</div>
<div class="item" style="align-items: baseline">
<span class="leftTitle fontColor">目的地:</span><span class="rightContent" style="flex: 1">{{ orderDetailInfo.destinationAddress }}</span>
</div>
<div class="item" style="align-items: baseline">
<span class="leftTitle fontColor">目的地补充:</span><span class="rightContent vehicleRemark">{{orderDetailInfo.destinationRemark}}</span>
</div>
<div class="item">
<span class="leftTitle fontColor">目的地:</span><span class="rightContent">浙江省杭州市富阳区比亚迪海洋4s店</span>
<span class="leftTitle fontColor">工单状态:</span><span class="rightContent orderStatus">{{ orderDetailInfo.taskOrderStatusString }}</span>
</div>
<div class="item">
<span class="leftTitle fontColor">目的地补充:</span><span class="rightContent vehicleRemark"></span>
<span class="leftTitle fontColor">服务车辆:</span><span class="rightContent">{{ orderDetailInfo.taskVehicleName }}</span>
</div>
<div class="item">
<span class="leftTitle fontColor">工单状态:</span><span class="rightContent orderStatus">师傅接单待发车</span>
</div>
<div class="item">
<span class="leftTitle fontColor">服务车辆:</span><span class="rightContent">沪A123456</span>
</div>
<div class="item">
<span class="leftTitle fontColor">服务师傅:</span><span class="rightContent">周师傅/15234345656</span>
<span class="leftTitle fontColor">服务师傅:</span><span class="rightContent">{{ orderDetailInfo.driverName }} {{orderDetailInfo.drivePhone ? '/' : ''}} {{orderDetailInfo.drivePhone }}</span>
</div>
</div>
</div>
@ -65,16 +66,42 @@
<script>
import {myMixins} from '@/utils/myMixins'
import {getOrderDetail} from "@/api/order"
export default {
name: "workOrderDetail",
mixins:[myMixins],
data(){
return{
userOrderId:'',
queryType:'',
orderCode:'',
taskOrderId:'',
orderDetailInfo:{}
}
},
async mounted() {
// 获取当前 URL
const urlParams = new URLSearchParams(window.location.search);
// 获取指定参数的值
this.queryType=urlParams.get('queryType');
this.userOrderId = urlParams.get('userOrderId');
this.orderCode=urlParams.get('orderCode');
this.taskOrderId=urlParams.get('taskOrderId') ? urlParams.get('taskOrderId') : '';
// console.log(this.queryType)
await this.getDetail();
},
methods:{
async getDetail(){
let result=await getOrderDetail({
queryType:this.queryType,
userOrderId:this.userOrderId,
orderCode:this.orderCode,
taskOrderId:this.taskOrderId ? this.taskOrderId : ''
})
if(result.code === 200){
this.orderDetailInfo=result.data;
}
}
}
}
</script>
@ -118,6 +145,7 @@ export default {
.item{
display: flex;
align-items: center;
line-height: 27px;
}
.infoContent{
.leftTitle{
@ -135,6 +163,7 @@ export default {
opacity: 0.55;
color: #121212;
line-height: 14px;
flex: 1;
}
.orderStatus{
color: #E69B0B;