2025-01-08 17:19:40 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="container">
|
|
|
|
|
|
<view class="containerBody">
|
|
|
|
|
|
<VNavigationBar background-color="rgba(0,0,0,0)" title="编辑工单" title-color="#333"></VNavigationBar>
|
|
|
|
|
|
<view class="body">
|
|
|
|
|
|
<view class="card cardInfo userCard">
|
|
|
|
|
|
<template>
|
|
|
|
|
|
<view class="userTitle">工单信息</view>
|
|
|
|
|
|
<view class="userContainer" style="padding-bottom: 20rpx">
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">客户姓名</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.userName" placeholder="请填写客户姓名"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">客户电话</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.userMobile" placeholder="请填写客户电话"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">经办人姓名</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.handleName" placeholder="请填写经办人姓名"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">经办人电话</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.handleMobile" placeholder="请填写经办人电话"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">进厂时间</text>
|
|
|
|
|
|
|
|
|
|
|
|
<picker
|
|
|
|
|
|
mode="date"
|
|
|
|
|
|
:value="formData.inTime"
|
|
|
|
|
|
start="2020-01-01"
|
|
|
|
|
|
end="2030-12-31"
|
|
|
|
|
|
@change="bindDateChange1">
|
|
|
|
|
|
<view style="margin-left: 10rpx">
|
|
|
|
|
|
{{ formData.inTime}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">预计完工</text>
|
|
|
|
|
|
<picker
|
|
|
|
|
|
mode="date"
|
|
|
|
|
|
:value="formData.outTime"
|
|
|
|
|
|
start="2020-01-01"
|
|
|
|
|
|
end="2030-12-31"
|
|
|
|
|
|
@change="bindDateChange2">
|
|
|
|
|
|
<view style="margin-left: 10rpx">
|
|
|
|
|
|
{{ formData.outTime}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">表显里程</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.mileageTraveled" placeholder="请填写表显里程"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">三包单位</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.threePackUnits" placeholder="请填写三包单位"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">最近保养日期</text>
|
|
|
|
|
|
<picker
|
|
|
|
|
|
mode="date"
|
|
|
|
|
|
:value="formData.maintenanceDate"
|
|
|
|
|
|
start="2020-01-01"
|
|
|
|
|
|
@change="bindDateChange3">
|
|
|
|
|
|
<view style="margin-left: 10rpx">
|
|
|
|
|
|
{{ formData.maintenanceDate}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">最近保养公里数</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.maintenanceMileage" placeholder="请填写最近保养公里数"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">年检到期时间</text>
|
|
|
|
|
|
<picker
|
|
|
|
|
|
mode="date"
|
|
|
|
|
|
:value="formData.nextInspectionDate"
|
|
|
|
|
|
start="2020-01-01"
|
|
|
|
|
|
@change="bindDateChange4">
|
|
|
|
|
|
<view style="margin-left: 10rpx">
|
|
|
|
|
|
{{ formData.nextInspectionDate}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">保险到期时间</text>
|
|
|
|
|
|
<picker
|
|
|
|
|
|
mode="date"
|
|
|
|
|
|
:value="formData.insuranceExpiryDate"
|
|
|
|
|
|
start="2020-01-01"
|
|
|
|
|
|
@change="bindDateChange5">
|
|
|
|
|
|
<view style="margin-left: 10rpx">
|
|
|
|
|
|
{{ formData.insuranceExpiryDate}}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-01-09 18:03:36 +08:00
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1" v-if="cusFromList && cusFromList.length>0">
|
|
|
|
|
|
<text class="label">客户来源</text>
|
|
|
|
|
|
<picker @change="cusFromChange" :value="cusFromIndex" :range="cusFromList" range-key="label" >
|
|
|
|
|
|
<view class="uni-input">{{ cusFromList[cusFromIndex].label}}</view>
|
|
|
|
|
|
</picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1" v-if="busiFromList && busiFromList.length>0">
|
|
|
|
|
|
<text class="label">业务来源</text>
|
|
|
|
|
|
<picker @change="busiFromChange" :value="busiFromIndex" :range="busiFromList" range-key="label" >
|
|
|
|
|
|
<view class="uni-input">{{ busiFromList[busiFromIndex].label}}</view>
|
|
|
|
|
|
</picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-01-08 17:19:40 +08:00
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">保险名称</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.insuranceName" placeholder="请填写保险名称"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">承保险种</text>
|
|
|
|
|
|
<uni-data-checkbox multiple v-model="insuranceTypeArray" :localdata="insuranceTypeList"></uni-data-checkbox>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">上年保费</text>
|
|
|
|
|
|
<view style="display: flex">
|
|
|
|
|
|
交:<input type="decimal" style="text-align: left" v-model="formData.jiaoqiang" placeholder="请输入交强险保费"/>
|
|
|
|
|
|
商:<input type="decimal" style="text-align: left" v-model="formData.shangye" placeholder="请输入商业险保费"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">救援费</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.rescueMoney" placeholder="请填写救援费"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">三包费</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.threePackMoney" placeholder="请填写救援费"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">定损费</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.confirmFaultMoney" placeholder="请填写定损费"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1">
|
|
|
|
|
|
<text class="label">管理费</text>
|
|
|
|
|
|
<input type="text" style="text-align: left" v-model="formData.managerMoney" placeholder="请填写管理费"/>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view style="display: flex;align-items: center">
|
|
|
|
|
|
<view class="infoItem" style="flex: 1" v-if="partDisposals && partDisposals.length>0">
|
|
|
|
|
|
<text class="label">旧件处置方式</text>
|
|
|
|
|
|
<picker @change="partDisposalChange" :value="partDisposalIndex" :range="partDisposals" range-key="label" >
|
|
|
|
|
|
<view class="uni-input">{{ partDisposals[partDisposalIndex].label}}</view>
|
|
|
|
|
|
</picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="infoItem" style="flex: 1" v-if="repairTypes && repairTypes.length>0">
|
|
|
|
|
|
<text class="label">维修类型</text>
|
|
|
|
|
|
<picker @change="repairTypeChange" :value="repairTypeIndex" :range="repairTypes" range-key="label" >
|
|
|
|
|
|
<view class="uni-input">{{ repairTypes[repairTypeIndex].label}}</view>
|
|
|
|
|
|
</picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="footer">
|
|
|
|
|
|
<view class="btn" @click="submitUpload">保存工单</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
2025-01-09 18:03:36 +08:00
|
|
|
|
<!-- 普通弹窗---拍照上传 -->
|
|
|
|
|
|
<uni-popup ref="popup" background-color="#fff">
|
|
|
|
|
|
<view class="popup-content">
|
|
|
|
|
|
<view class="dl-avatar-box">
|
|
|
|
|
|
<uni-file-picker :value="fileList" :sizeType="sizeType" @select="afterRead" @delete="deleteFile" limit="9" title="请上传诊断维修单和车辆维修前照片"></uni-file-picker>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<button type="primary" @click="applyData">保存</button>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</uni-popup>
|
2025-01-08 17:19:40 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
import VNavigationBar from '@/components/VNavigationBar.vue'
|
|
|
|
|
|
import request from "@/utils/request";
|
2025-01-09 18:03:36 +08:00
|
|
|
|
import upload from "@/utils/upload";
|
|
|
|
|
|
import config from "@/config";
|
2025-01-08 17:19:40 +08:00
|
|
|
|
import {getToken, setUserInfo, getUserInfo,getStorageWithExpiry,setStorageWithExpiry} from '@/utils/auth.js'
|
|
|
|
|
|
import {getDictByCode,formatDate} from "@/utils/utils";
|
|
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
|
components: {
|
|
|
|
|
|
VNavigationBar,
|
|
|
|
|
|
},
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
2025-01-09 18:03:36 +08:00
|
|
|
|
//上传的图片数组
|
|
|
|
|
|
fileList: [],
|
|
|
|
|
|
sizeType:['compressed'],
|
2025-01-08 17:19:40 +08:00
|
|
|
|
phone: '',
|
|
|
|
|
|
repairTypes:[],
|
|
|
|
|
|
repairTypeIndex:0,
|
2025-01-09 18:03:36 +08:00
|
|
|
|
cusFromList:[],
|
|
|
|
|
|
cusFromIndex:0,
|
|
|
|
|
|
busiFromList:[],
|
|
|
|
|
|
busiFromIndex:0,
|
2025-01-08 17:19:40 +08:00
|
|
|
|
partDisposals:[],
|
|
|
|
|
|
partDisposalIndex:0,
|
2025-01-22 14:30:50 +08:00
|
|
|
|
//是否可以点击
|
|
|
|
|
|
canClick:true,
|
2025-01-08 17:19:40 +08:00
|
|
|
|
formData:{
|
|
|
|
|
|
userName: "",
|
|
|
|
|
|
userMobile: "",
|
|
|
|
|
|
inTime: null,
|
|
|
|
|
|
outTime: null,
|
|
|
|
|
|
handleName: null,
|
|
|
|
|
|
handleMobile: null,
|
|
|
|
|
|
mileageTraveled:null,
|
|
|
|
|
|
threePackUnits:null,
|
|
|
|
|
|
insuranceName:null,
|
|
|
|
|
|
managerMoney:0.00,
|
|
|
|
|
|
rescueMoney:0.00,
|
|
|
|
|
|
threePackMoney:0.00,
|
|
|
|
|
|
confirmFaultMoney:0.00,
|
|
|
|
|
|
partDisposal:null,
|
|
|
|
|
|
repairType:null,
|
|
|
|
|
|
nextInspectionDate:null,
|
|
|
|
|
|
insuranceExpiryDate:null,
|
|
|
|
|
|
jiaoqiang:null,
|
|
|
|
|
|
shangye:null,
|
2025-01-09 18:03:36 +08:00
|
|
|
|
cusFrom:null,
|
|
|
|
|
|
busiFrom:null,
|
2025-01-08 17:19:40 +08:00
|
|
|
|
},
|
|
|
|
|
|
//承保险种-、三者、车损、驾乘、不计
|
|
|
|
|
|
insuranceTypeList:[{
|
|
|
|
|
|
text: '交强',
|
|
|
|
|
|
value: '交强'
|
|
|
|
|
|
}, {
|
|
|
|
|
|
text: '三者',
|
|
|
|
|
|
value: '三者'
|
|
|
|
|
|
}, {
|
|
|
|
|
|
text: '车损',
|
|
|
|
|
|
value: '车损'
|
|
|
|
|
|
},{
|
|
|
|
|
|
text: '驾乘',
|
|
|
|
|
|
value: '驾乘'
|
|
|
|
|
|
},{
|
|
|
|
|
|
text: '不计',
|
|
|
|
|
|
value: '不计'
|
|
|
|
|
|
}],
|
|
|
|
|
|
//选中的险种
|
|
|
|
|
|
insuranceTypeArray:[],
|
|
|
|
|
|
//ticketId 工单Id
|
|
|
|
|
|
ticketId:null,
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onLoad(data) {
|
|
|
|
|
|
this.ticketId = data.ticketId
|
|
|
|
|
|
// this.formData.inTime = formatDate(Date.now())
|
|
|
|
|
|
// this.formData.outTime = formatDate(Date.now())
|
|
|
|
|
|
// this.formData.maintenanceDate = formatDate(Date.now())
|
2025-01-09 18:03:36 +08:00
|
|
|
|
this.initDict("repair_busi_from")
|
2025-01-08 17:19:40 +08:00
|
|
|
|
this.initDict("insurance_type")
|
|
|
|
|
|
this.initDict("repair_type")
|
2025-01-09 18:03:36 +08:00
|
|
|
|
this.initDict("cus_data_from")
|
2025-01-08 17:19:40 +08:00
|
|
|
|
this.initDict("repair_part_disposal")
|
|
|
|
|
|
this.getOrderDetail()
|
|
|
|
|
|
},
|
|
|
|
|
|
onShow() {
|
|
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
2025-01-09 18:03:36 +08:00
|
|
|
|
afterRead(file) {
|
2025-01-22 14:30:50 +08:00
|
|
|
|
uni.showLoading({
|
|
|
|
|
|
title: '正在上传中...',
|
|
|
|
|
|
mask:true
|
|
|
|
|
|
});
|
2025-01-09 18:03:36 +08:00
|
|
|
|
for (let i = 0; i < file.tempFilePaths.length; i++) {
|
|
|
|
|
|
upload({
|
|
|
|
|
|
url:'/admin-api/infra/file/upload',
|
|
|
|
|
|
filePath: file.tempFilePaths[i]
|
|
|
|
|
|
}).then((res)=>{
|
|
|
|
|
|
this.fileList.push({
|
|
|
|
|
|
url: config.baseImageUrl+res.data
|
|
|
|
|
|
})
|
2025-01-22 14:30:50 +08:00
|
|
|
|
if(i==file.tempFilePaths.length-1){
|
|
|
|
|
|
uni.hideLoading()
|
|
|
|
|
|
}
|
2025-01-09 18:03:36 +08:00
|
|
|
|
console.log(this.fileList)
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
deleteFile(file, index) {
|
|
|
|
|
|
this.fileList.splice(index, 1);
|
|
|
|
|
|
},
|
2025-01-08 17:19:40 +08:00
|
|
|
|
getOrderDetail(){
|
|
|
|
|
|
request({
|
|
|
|
|
|
url: '/admin-api/repair/tickets/getById',
|
|
|
|
|
|
method: 'get',
|
|
|
|
|
|
params:{id:this.ticketId}
|
|
|
|
|
|
}).then((res)=> {
|
|
|
|
|
|
let resultObj= res.data
|
|
|
|
|
|
//进厂日期
|
|
|
|
|
|
if (null != resultObj.inTime){
|
|
|
|
|
|
resultObj.inTime = formatDate(resultObj.inTime)
|
|
|
|
|
|
}
|
|
|
|
|
|
//最近保养日期
|
|
|
|
|
|
if (null != resultObj.maintenanceDate){
|
|
|
|
|
|
resultObj.maintenanceDate = formatDate(resultObj.maintenanceDate)
|
|
|
|
|
|
}
|
|
|
|
|
|
//预计竣工日期
|
|
|
|
|
|
if (null != resultObj.outTime){
|
|
|
|
|
|
resultObj.outTime = formatDate(resultObj.outTime)
|
|
|
|
|
|
}
|
|
|
|
|
|
//年检到期时间
|
|
|
|
|
|
if (null != resultObj.nextInspectionDate){
|
|
|
|
|
|
resultObj.nextInspectionDate = formatDate(resultObj.nextInspectionDate)
|
|
|
|
|
|
}
|
|
|
|
|
|
//保险到期时间
|
|
|
|
|
|
if (null != resultObj.insuranceExpiryDate){
|
|
|
|
|
|
resultObj.insuranceExpiryDate = formatDate(resultObj.insuranceExpiryDate)
|
|
|
|
|
|
}
|
|
|
|
|
|
if(resultObj.insuranceType){
|
|
|
|
|
|
this.insuranceTypeArray = resultObj.insuranceType.split(",")
|
|
|
|
|
|
}
|
2025-01-09 18:03:36 +08:00
|
|
|
|
for (let i = 0; i < this.cusFromList.length; i++) {
|
|
|
|
|
|
if(this.cusFromList[i].value==resultObj.customerInfo.dataFrom){
|
|
|
|
|
|
this.cusFromIndex = i
|
|
|
|
|
|
resultObj.cusFrom = this.cusFromList[i].value
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
for (let i = 0; i < this.busiFromList.length; i++) {
|
|
|
|
|
|
if(this.busiFromList[i].value==resultObj.busiFrom){
|
|
|
|
|
|
this.busiFromIndex = i
|
|
|
|
|
|
resultObj.busiFrom = this.busiFromList[i].value
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
for (let i = 0; i < this.partDisposals.length; i++) {
|
|
|
|
|
|
if(this.partDisposals[i].value==resultObj.partDisposal){
|
|
|
|
|
|
this.partDisposalIndex = i
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
for (let i = 0; i < this.repairTypes.length; i++) {
|
|
|
|
|
|
if(this.repairTypes[i].value==resultObj.repairType){
|
|
|
|
|
|
this.repairTypeIndex = i
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-01-08 17:19:40 +08:00
|
|
|
|
this.formData = resultObj
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
// 日期选择 事件
|
|
|
|
|
|
bindDateChange1(e) {
|
|
|
|
|
|
this.formData.inTime = e.target.value; // 更新选择的日期到data中的date变量
|
|
|
|
|
|
},
|
|
|
|
|
|
// 日期选择 事件
|
|
|
|
|
|
bindDateChange3(e) {
|
|
|
|
|
|
this.formData.maintenanceDate = e.target.value; // 更新选择的日期到data中的date变量
|
|
|
|
|
|
},
|
|
|
|
|
|
// 日期选择 事件
|
|
|
|
|
|
bindDateChange4(e) {
|
|
|
|
|
|
this.formData.nextInspectionDate = e.target.value; // 更新选择的日期到data中的date变量
|
|
|
|
|
|
},
|
|
|
|
|
|
// 日期选择 事件
|
|
|
|
|
|
bindDateChange5(e) {
|
|
|
|
|
|
this.formData.insuranceExpiryDate = e.target.value; // 更新选择的日期到data中的date变量
|
|
|
|
|
|
},
|
|
|
|
|
|
// 日期选择 事件
|
|
|
|
|
|
bindDateChange2(e) {
|
|
|
|
|
|
this.formData.outTime = e.target.value; // 更新选择的日期到data中的date变量
|
|
|
|
|
|
},
|
|
|
|
|
|
repairTypeChange(event){
|
|
|
|
|
|
const newIndex = event.detail.value;
|
|
|
|
|
|
this.repairTypeIndex = newIndex;
|
|
|
|
|
|
this.formData.repairType = this.repairTypes[newIndex].value;
|
|
|
|
|
|
},
|
2025-01-09 18:03:36 +08:00
|
|
|
|
cusFromChange(event){
|
|
|
|
|
|
const newIndex = event.detail.value;
|
|
|
|
|
|
this.cusFromIndex = newIndex;
|
|
|
|
|
|
this.formData.cusFrom = this.cusFromList[newIndex].value;
|
|
|
|
|
|
},
|
|
|
|
|
|
busiFromChange(event){
|
|
|
|
|
|
const newIndex = event.detail.value;
|
|
|
|
|
|
this.busiFromIndex = newIndex;
|
|
|
|
|
|
this.formData.busiFrom = this.busiFromList[newIndex].value;
|
|
|
|
|
|
},
|
2025-01-08 17:19:40 +08:00
|
|
|
|
partDisposalChange(event){
|
|
|
|
|
|
const newIndex = event.detail.value;
|
|
|
|
|
|
this.partDisposalIndex = newIndex;
|
|
|
|
|
|
this.formData.partDisposal = this.repairTypes[newIndex].value;
|
|
|
|
|
|
},
|
|
|
|
|
|
async initDict(dictCode){
|
|
|
|
|
|
let dictArray = getStorageWithExpiry(dictCode);
|
|
|
|
|
|
console.log(dictArray,"partDisposals")
|
|
|
|
|
|
if(null==dictArray || undefined==dictArray){
|
|
|
|
|
|
request({
|
|
|
|
|
|
url: '/admin-api/system/dict-data/type',
|
|
|
|
|
|
method: 'get',
|
|
|
|
|
|
params:{type:dictCode}
|
|
|
|
|
|
}).then((res) => {
|
|
|
|
|
|
console.log(res)
|
|
|
|
|
|
if (res.code == 200) {
|
|
|
|
|
|
setStorageWithExpiry(dictCode,res.data,3600)
|
|
|
|
|
|
this.$nextTick(()=>{
|
|
|
|
|
|
if("repair_type"==dictCode){
|
|
|
|
|
|
this.repairTypes = res.data
|
2025-01-09 18:03:36 +08:00
|
|
|
|
}else if("repair_part_disposal"==dictCode){
|
2025-01-08 17:19:40 +08:00
|
|
|
|
this.partDisposals = res.data
|
2025-01-09 18:03:36 +08:00
|
|
|
|
}else if("insurance_type"==dictCode){
|
2025-01-08 17:19:40 +08:00
|
|
|
|
this.buildInsuranceTypeList()
|
2025-01-09 18:03:36 +08:00
|
|
|
|
}else if("cus_data_from"==dictCode){
|
|
|
|
|
|
this.cusFromList = res.data
|
|
|
|
|
|
}else if("repair_busi_from"==dictCode){
|
|
|
|
|
|
this.busiFromList = res.data
|
2025-01-08 17:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}else{
|
|
|
|
|
|
this.$nextTick(()=>{
|
|
|
|
|
|
if("repair_type"==dictCode){
|
|
|
|
|
|
this.repairTypes = dictArray
|
2025-01-09 18:03:36 +08:00
|
|
|
|
}else if("repair_part_disposal"==dictCode){
|
2025-01-08 17:19:40 +08:00
|
|
|
|
this.partDisposals = dictArray
|
2025-01-09 18:03:36 +08:00
|
|
|
|
}else if("insurance_type"==dictCode){
|
2025-01-08 17:19:40 +08:00
|
|
|
|
this.buildInsuranceTypeList()
|
2025-01-09 18:03:36 +08:00
|
|
|
|
}else if("cus_data_from"==dictCode){
|
|
|
|
|
|
this.cusFromList = dictArray
|
|
|
|
|
|
}else if("repair_busi_from"==dictCode){
|
|
|
|
|
|
this.busiFromList = dictArray
|
2025-01-08 17:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 组装承保险种待选值
|
|
|
|
|
|
*/
|
|
|
|
|
|
buildInsuranceTypeList(data){
|
|
|
|
|
|
if(data && data.length>0){
|
|
|
|
|
|
this.insuranceTypeList=[]
|
|
|
|
|
|
data.map((item)=>{
|
|
|
|
|
|
let thisObj={
|
|
|
|
|
|
text:item.label,
|
|
|
|
|
|
value:item.value
|
|
|
|
|
|
}
|
|
|
|
|
|
this.insuranceTypeList.push(thisObj)
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 创建工单前上传图片
|
|
|
|
|
|
*/
|
|
|
|
|
|
submitUpload(){
|
2025-01-09 18:03:36 +08:00
|
|
|
|
this.$refs.popup.open("bottom")
|
|
|
|
|
|
},
|
|
|
|
|
|
applyData(){
|
2025-01-22 14:30:50 +08:00
|
|
|
|
if(!this.canClick){
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
this.canClick = false
|
2025-01-09 18:03:36 +08:00
|
|
|
|
let fileStr = this.fileList.map(item=>item.url.replace(config.baseImageUrl,"")).join(",")
|
2025-01-08 17:19:40 +08:00
|
|
|
|
let dataObj = this.formData
|
2025-01-09 18:03:36 +08:00
|
|
|
|
dataObj.image=fileStr
|
2025-01-08 17:19:40 +08:00
|
|
|
|
if(this.insuranceTypeArray.length>0){
|
|
|
|
|
|
dataObj.insuranceType= this.insuranceTypeArray.join(",")
|
|
|
|
|
|
}
|
|
|
|
|
|
request({
|
|
|
|
|
|
url: '/admin-api/repair/tickets/updateById',
|
|
|
|
|
|
method: 'POST',
|
|
|
|
|
|
data: this.formData
|
|
|
|
|
|
}).then(res => {
|
2025-01-22 14:30:50 +08:00
|
|
|
|
this.canClick =true
|
2025-01-09 18:03:36 +08:00
|
|
|
|
this.$refs.popup.close()
|
2025-01-08 17:19:40 +08:00
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '修改成功',
|
|
|
|
|
|
icon: 'success'
|
|
|
|
|
|
})
|
|
|
|
|
|
setTimeout(()=>{
|
|
|
|
|
|
uni.navigateTo({
|
|
|
|
|
|
url: `/pages-home/home/home`
|
|
|
|
|
|
});
|
|
|
|
|
|
},600)
|
|
|
|
|
|
})
|
2025-01-09 18:03:36 +08:00
|
|
|
|
}
|
2025-01-08 17:19:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="less" scoped>
|
|
|
|
|
|
.popup-content {
|
|
|
|
|
|
@include flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
padding: 15px;
|
|
|
|
|
|
height: auto;
|
|
|
|
|
|
background-color: #fff;
|
|
|
|
|
|
}
|
|
|
|
|
|
.container {
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
background-color: #F3F5F7;
|
|
|
|
|
|
|
|
|
|
|
|
.containerBody {
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
background: linear-gradient(180deg, #C1DEFF 0%, rgba(193, 222, 255, 0) 100%);
|
|
|
|
|
|
background-size: 100% 500rpx;
|
|
|
|
|
|
background-repeat: no-repeat;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.body {
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
height: 0;
|
|
|
|
|
|
overflow: auto;
|
|
|
|
|
|
|
|
|
|
|
|
.card {
|
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
|
|
|
|
|
margin: 20rpx 32rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.phone {
|
|
|
|
|
|
background: #0174F6;
|
|
|
|
|
|
|
|
|
|
|
|
.phoneHeader {
|
|
|
|
|
|
padding: 20rpx 30rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.title {
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
margin-bottom: 10rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.desc {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: rgba(255, 255, 255, 0.7);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.phoneBody {
|
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
|
|
|
|
|
padding: 0 30rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.searchBox {
|
|
|
|
|
|
padding: 40rpx 0;
|
|
|
|
|
|
border-bottom: 1rpx solid #EEEEEE;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn {
|
|
|
|
|
|
padding: 40rpx 0;
|
|
|
|
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
column-gap: 10rpx;
|
|
|
|
|
|
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #0174F6;
|
|
|
|
|
|
|
|
|
|
|
|
.btnIcon {
|
|
|
|
|
|
width: 32rpx;
|
|
|
|
|
|
height: 32rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.cardInfo {
|
|
|
|
|
|
&.none {
|
|
|
|
|
|
position: relative;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
.cardNoneIcon {
|
|
|
|
|
|
width: 336rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.btn {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
bottom: 40rpx;
|
|
|
|
|
|
left: 50%;
|
|
|
|
|
|
transform: translateX(-50%);
|
|
|
|
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
column-gap: 10rpx;
|
|
|
|
|
|
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #0174F6;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.projTitle, .userTitle, .carTitle {
|
|
|
|
|
|
padding: 30rpx;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #333333;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.carCard {
|
|
|
|
|
|
.carListTab {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
column-gap: 32rpx;
|
|
|
|
|
|
padding: 0 26rpx 22rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.carTabItem {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
row-gap: 10rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #333333;
|
|
|
|
|
|
|
|
|
|
|
|
&.active {
|
|
|
|
|
|
.carImage {
|
|
|
|
|
|
border: 2rpx solid #0174F6;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
color: #0174F6;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.carImage {
|
|
|
|
|
|
width: 128rpx;
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
background: #F2F2F7;
|
|
|
|
|
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.carTabItemNew {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
row-gap: 10rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #333333;
|
|
|
|
|
|
border: 2rpx solid #0174F6; /* 默认边框颜色为透明 */
|
|
|
|
|
|
justify-content: center; /* 垂直居中 */
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
padding: 10rpx; /* 可以根据需要调整内边距 */
|
|
|
|
|
|
width: 128rpx; /* 与 .carImage 宽度一致 */
|
|
|
|
|
|
height: 80rpx; /* 与 .carImage 高度一致 */
|
|
|
|
|
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
|
|
|
|
|
margin-top: -37rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.carDetail {
|
|
|
|
|
|
background: linear-gradient(180deg, rgba(1, 116, 246, 0.15) 0%, rgba(255, 255, 255, 0) 100%) no-repeat;
|
|
|
|
|
|
background-size: 100% 184rpx;
|
|
|
|
|
|
padding: 30rpx 30rpx 0;
|
|
|
|
|
|
|
|
|
|
|
|
.carHeader {
|
|
|
|
|
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
|
|
|
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
column-gap: 20rpx;
|
|
|
|
|
|
|
|
|
|
|
|
padding-bottom: 30rpx;
|
|
|
|
|
|
|
|
|
|
|
|
.carImage {
|
|
|
|
|
|
width: 192rpx;
|
|
|
|
|
|
height: 120rpx;
|
|
|
|
|
|
background: #F2F2F7;
|
|
|
|
|
|
border-radius: 8rpx 8rpx 8rpx 8rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.carHeaderRight {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
row-gap: 20rpx;
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #333333;
|
|
|
|
|
|
|
|
|
|
|
|
.carType {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #858BA0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.carBody {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
row-gap: 30rpx;
|
|
|
|
|
|
padding-top: 30rpx;
|
|
|
|
|
|
border-top: 1rpx solid #DDDDDD;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.carFoot {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.projCard {
|
|
|
|
|
|
.projList {
|
|
|
|
|
|
padding: 0 30rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
gap: 20rpx;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
|
|
|
|
|
|
.projItem {
|
|
|
|
|
|
padding: 10rpx 16rpx;
|
|
|
|
|
|
border-radius: 4rpx 4rpx 4rpx 4rpx;
|
|
|
|
|
|
border: 2rpx solid #0174F6;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 24rpx;
|
|
|
|
|
|
color: #0174F6;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.userCard {
|
|
|
|
|
|
.userContainer {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
row-gap: 30rpx;
|
|
|
|
|
|
margin: 0 30rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.infoItem {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
|
|
|
|
|
|
.label {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #858BA0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.value {
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #333333;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.projFoot, .userFoot, .carFoot {
|
|
|
|
|
|
padding: 30rpx;
|
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
color: #0174F6;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
column-gap: 6rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.footer {
|
|
|
|
|
|
height: 136rpx;
|
|
|
|
|
|
background: #FFFFFF;
|
|
|
|
|
|
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
|
|
|
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
|
|
|
|
|
|
.btn {
|
|
|
|
|
|
width: 510rpx;
|
|
|
|
|
|
height: 76rpx;
|
|
|
|
|
|
background: #0174F6;
|
|
|
|
|
|
border-radius: 38rpx 38rpx 38rpx 38rpx;
|
|
|
|
|
|
|
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.radio-label {
|
|
|
|
|
|
//display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
margin-bottom: 10rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.radio-label text {
|
|
|
|
|
|
margin-left: 10rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|