223 lines
6.9 KiB
Vue
223 lines
6.9 KiB
Vue
|
<!-- 回车登记 -->
|
||
|
<template>
|
||
|
<view>
|
||
|
<!-- 详情 -->
|
||
|
<view class="refister">
|
||
|
<DetailsNav title="回车登记"></DetailsNav>
|
||
|
<view class="container">
|
||
|
<!-- 垂直滚动区域 scroll和swiper的高度都要给且是一样的高度-->
|
||
|
<scroll-view scroll-y="true" class="swiperH">
|
||
|
<view class="boxBg">
|
||
|
<view class="infoCard">
|
||
|
<view class="line">
|
||
|
<text>出车时间</text>
|
||
|
<text>{{startTime}}</text>
|
||
|
</view>
|
||
|
<view class="line">
|
||
|
<text>回车时间</text>
|
||
|
<uni-datetime-picker type="datetime" v-model="params.endTime" :clear-icon="false" @change="changeLog" />
|
||
|
</view>
|
||
|
</view>
|
||
|
<!-- 通用卡片组件 - 待提货 - 带开关 -->
|
||
|
<CardCont title="车辆违章" type="redio" redioKey="isBreakRules" @redioChange = "redioChange">
|
||
|
<refisterCards :data="breakRulesType" :value="breakRulesType.data[0]" choiceKey="breakRulesType" @choiceHandel = "choiceHandel" />
|
||
|
<refisterCards :data="penaltyAmount" :value="penaltyAmount.data[0]" choiceKey="penaltyAmount" @choiceHandel = "choiceHandel" />
|
||
|
<refisterCards :data="deductPoints" :value="deductPoints.data[0]" choiceKey="deductPoints" @choiceHandel = "choiceHandel" />
|
||
|
</CardCont>
|
||
|
<CardCont title="车辆故障" type="redio" redioKey="isFault" @redioChange = "redioChange">
|
||
|
<!-- 车辆是否可用 -->
|
||
|
<refisterCards :data="isAvailable" :value="isAvailable.data[0]" choiceKey="isAvailable" @choiceHandel = "choiceHandel" />
|
||
|
<!-- 故障类型 -->
|
||
|
<refisterCards :data="faultType" :value="faultType.data[0]" choiceKey="faultType" @choiceHandel = "choiceHandel" />
|
||
|
<TextArea placeholder="请简单描述故障"></TextArea>
|
||
|
<ImageUpload title="请拍照" @uploadImage="uploadImage" tit='faultImages'></ImageUpload>
|
||
|
</CardCont>
|
||
|
<CardCont title="车辆事故" type="redio" redioKey="isAccident" @redioChange = "redioChange">
|
||
|
<refisterCards :data="accidentType" :value="accidentType.data[0]" choiceKey="accidentType" @choiceHandel = "choiceHandel" />
|
||
|
<TextArea placeholder="请简单描述故障"></TextArea>
|
||
|
<ImageUpload title="请拍照" @uploadImage="uploadImage" tit='accidentImages'></ImageUpload>
|
||
|
</CardCont>
|
||
|
</view>
|
||
|
</scroll-view>
|
||
|
</view>
|
||
|
<!-- end -->
|
||
|
</view>
|
||
|
<!-- footer -->
|
||
|
<view class="footCont">
|
||
|
<view class="footBut">
|
||
|
<text class="button" v-show="params.endTime != '' && (params.endTime).length == 19 " @click="submit()">交车</text>
|
||
|
<text class="button buttonDis1" v-show="params.endTime == '' || (params.endTime).length < 19" >交车</text>
|
||
|
</view>
|
||
|
</view>
|
||
|
<!-- end -->
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script setup>
|
||
|
import { ref, reactive, onMounted, onUpdated, watch, watchEffect, computed, inject } from 'vue';
|
||
|
// 导入接口
|
||
|
import { TruckRegistration } from '@/pages/api/index.js';
|
||
|
// 导入组件
|
||
|
import DetailsNav from '@/components/DetailsNav/index.vue'
|
||
|
import CardCont from '@/components/CardCont/index.vue';
|
||
|
import refisterCards from './components/refisterCards.vue'
|
||
|
import ImageUpload from '@/components/ImageUpload/index.vue'
|
||
|
import TextArea from '@/components/TextArea/index.vue'
|
||
|
|
||
|
|
||
|
// ------定义变量------
|
||
|
const startTime = ref('')
|
||
|
const breakRulesType = {
|
||
|
title: '违章类型',
|
||
|
data: ['闯红灯', '无证驾驶', '超载', '酒后驾驶', '超速驾驶']
|
||
|
}
|
||
|
|
||
|
const penaltyAmount = {
|
||
|
title: '罚款金额',
|
||
|
data: ['0元', '100元', '200元', '300元', '500元', '1000元', '2000元']
|
||
|
}
|
||
|
|
||
|
const deductPoints = {
|
||
|
title: '扣分',
|
||
|
data: ['0分', '1分', '2分', '3分', '6分', '12分']
|
||
|
}
|
||
|
const isAvailable = {
|
||
|
title: '车辆是否可用',
|
||
|
data: ['是', '否']
|
||
|
}
|
||
|
const faultType = {
|
||
|
title: '故障类型',
|
||
|
data: ['启动困难', '不着车', '漏油', '漏水', '照明失灵', '有异响', '排烟异常', '温度异常', '其他']
|
||
|
}
|
||
|
|
||
|
const accidentType = {
|
||
|
title: '事故类型',
|
||
|
data: ['直行事故', '追尾事故', '超车事故', '左转弯事故', '右转弯事故', '弯道事故', '坡道事故', '会车事故', '其他']
|
||
|
}
|
||
|
|
||
|
let params = reactive({
|
||
|
id: '',
|
||
|
startTime: '', //出车时间
|
||
|
endTime: '', //回车时间
|
||
|
isBreakRules: false, //违章
|
||
|
breakRulesType: 1, //违章类型
|
||
|
penaltyAmount: 1, //罚款金额
|
||
|
deductPoints: 1, //扣分
|
||
|
isFault: false, //是否有故障
|
||
|
isAvailable: true, //车辆是否可用
|
||
|
faultType: 1, //故障类型
|
||
|
faultImages: '', //故障图片
|
||
|
isAccident: false, // 是否有事故
|
||
|
accidentType: 1,
|
||
|
accidentImages: '' // 事故图片
|
||
|
})
|
||
|
|
||
|
// ------生命周期------
|
||
|
onMounted(() => {
|
||
|
const pages = getCurrentPages();
|
||
|
const currentPage = pages[pages.length - 1].$page.options;
|
||
|
startTime.value = currentPage.time;
|
||
|
params.startTime = currentPage.time;
|
||
|
params.id = currentPage.id
|
||
|
});
|
||
|
|
||
|
// ------定义方法------
|
||
|
// 回车登级-交车数据提交
|
||
|
async function submit() {
|
||
|
// 网络慢的时候添加按钮loading
|
||
|
let times =
|
||
|
setTimeout(()=>{
|
||
|
uni.showLoading({
|
||
|
title: 'loading',
|
||
|
mask:true
|
||
|
});
|
||
|
},500)
|
||
|
await TruckRegistration(params)
|
||
|
.then(res => {
|
||
|
if (res.code === 200) {
|
||
|
// 操作成功后清除loading
|
||
|
setTimeout(function () {
|
||
|
uni.hideLoading();
|
||
|
}, 500);
|
||
|
clearTimeout(times)
|
||
|
uni.showToast({
|
||
|
title: '回车登记数据提交成功!',
|
||
|
duration: 1000,
|
||
|
icon: 'none'
|
||
|
});
|
||
|
uni.navigateTo({
|
||
|
url: '/pages/index/index'
|
||
|
})
|
||
|
} else {
|
||
|
return uni.showToast({
|
||
|
title: res.msg,
|
||
|
duration: 1000,
|
||
|
icon: 'none'
|
||
|
});
|
||
|
}
|
||
|
})
|
||
|
.catch(err => {});
|
||
|
}
|
||
|
// 是否打开相关的违章、故障、事故并赋值到params
|
||
|
function redioChange(item){
|
||
|
params[item.key] = item.value == 2 ? true : false
|
||
|
}
|
||
|
|
||
|
// 图片上传
|
||
|
const uploadImage = (item) => {
|
||
|
if (item.key == 'accidentImages'){
|
||
|
params.accidentImages = params.accidentImages == '' ? item.value : params.accidentImages + ',' + item.value
|
||
|
} else {
|
||
|
params.faultImages = params.faultImages == '' ? item.value : params.faultImages + ',' + item.value
|
||
|
}
|
||
|
}
|
||
|
// 回车时间
|
||
|
function changeLog(e){
|
||
|
if (e.length < 19){
|
||
|
uni.showToast({
|
||
|
title: '请选择回车时间(包含日期及时间)',
|
||
|
duration: 3000,
|
||
|
icon: 'none'
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 选择违章的数据
|
||
|
function choiceHandel(item){
|
||
|
if (item.key == 'isAvailable'){
|
||
|
params[item.key] = item.value == 1 ? true : false
|
||
|
} else {
|
||
|
params[item.key] = item.value
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
<style src="./index.scss" lang="scss"></style>
|
||
|
<style lang="scss">
|
||
|
.refister .container{
|
||
|
padding-top: 30rpx;
|
||
|
font-size: var(--font-size-14);
|
||
|
.infoCard{
|
||
|
background: #FFFFFF;
|
||
|
border-radius: 20rpx;
|
||
|
padding:0 30rpx;
|
||
|
.line{
|
||
|
display: flex;
|
||
|
justify-content: space-between;
|
||
|
line-height: 60rpx;
|
||
|
border-bottom: solid 2rpx #EEEEEE;
|
||
|
padding: 20rpx 0;
|
||
|
.desc{
|
||
|
color: #818181;
|
||
|
}
|
||
|
}
|
||
|
.line:last-child{
|
||
|
border: none;
|
||
|
}
|
||
|
}
|
||
|
::v-deep .uni-input-placeholder{
|
||
|
text-align: right;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
</style>
|