731 lines
17 KiB
Vue
731 lines
17 KiB
Vue
<template>
|
|
<view class="page">
|
|
<u-navbar title="工单详情" :border-bottom="false" :background="bgc" title-color='#000' title-size='36'
|
|
height='45'></u-navbar>
|
|
<view class="top">
|
|
|
|
<view class="tap">
|
|
<view class="tap_cont " :class="curtitidx==0?'act1':''" @click="changeidx(0)">
|
|
维修信息
|
|
</view>
|
|
<view class="tap_cont" :class="curtitidx==1?'act1':''" @click="changeidx(1)">
|
|
处理进度
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</view>
|
|
<view class="page1" v-if="curtitidx==0">
|
|
<view class="device_info">
|
|
<view class="device_top">
|
|
<image src="https://lxnapi.ccttiot.com/bike/img/static/uacJ7fdNpS3llY54ZaUi" mode=""></image>
|
|
设备信息
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
设备编号
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.sn}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
车辆型号
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.device.model}}
|
|
</view>
|
|
</view>
|
|
<!-- <view class="info_li">
|
|
<view class="info_li_left">
|
|
运营商
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.model}}
|
|
</view>
|
|
</view> -->
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
运营区域
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.device.areaName}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
车辆状态
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{comstatus}}
|
|
</view>
|
|
</view>
|
|
<!-- <view class="info_li">
|
|
<view class="info_li_left">
|
|
开机状态
|
|
</view>
|
|
<view class="info_li_right">
|
|
DS-15659874523
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
头盔锁状态
|
|
</view>
|
|
<view class="info_li_right">
|
|
DS-15659874523
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
电池锁状态
|
|
</view>
|
|
<view class="info_li_right">
|
|
DS-15659874523
|
|
</view>
|
|
</view> -->
|
|
<!-- <view class="info_li">
|
|
<view class="info_li_left">
|
|
剩余电量
|
|
</view>
|
|
<view class="info_li_right">
|
|
DS-15659874523
|
|
</view>
|
|
</view> -->
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
续航里程
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.device.remainingMileage}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
电池电量
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.device.voltage}}V, {{info.device.remainingPower}}%
|
|
</view>
|
|
</view>
|
|
|
|
|
|
<view class="info_li" @click="mapFun()" style="align-items: flex-start;">
|
|
<view class="info_li_left">
|
|
设备位置
|
|
</view>
|
|
<view class="info_li_right" style="display: inline;width: 62%;">
|
|
{{info.address}}
|
|
</view>
|
|
<image src="https://lxnapi.ccttiot.com/bike/img/static/uklW7KIegcLR6E7DTOGO" mode="" style="width: 46rpx;"></image>
|
|
</view>
|
|
</view>
|
|
<view class="fix_info" v-if="info.type==1">
|
|
<view class="fix_top">
|
|
<image src="https://lxnapi.ccttiot.com/bike/img/static/uCQgmzKCxtkLtZTeMgRC" mode=""></image>
|
|
设备维修
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
报修单号
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.orderNo}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
故障部位
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.fault.typeStr}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
报修用户
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.fault.userName}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
故障描述
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.fault.detail}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
报修时间
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.fault.createTime}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
维修人员
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.adminName}}
|
|
</view>
|
|
</view>
|
|
|
|
|
|
</view>
|
|
<view class="fix_info" v-if="info.type==2">
|
|
<view class="fix_top">
|
|
<image src="https://lxnapi.ccttiot.com/bike/img/static/uCQgmzKCxtkLtZTeMgRC" mode=""></image>
|
|
换电信息
|
|
</view>
|
|
<view class="info_li"style="align-items: flex-start;word-wrap: break-word;">
|
|
<view class="info_li_left">
|
|
换电单号
|
|
</view>
|
|
<view class="info_li_right" style="display: inline;width: 70%;">
|
|
{{info.orderNo}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
换电前电量
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.beforeElectric}}%
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
换电后电量
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.afterElectric}}%
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
报修时间
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.createTime}}
|
|
</view>
|
|
</view>
|
|
<view class="info_li">
|
|
<view class="info_li_left">
|
|
换电人员
|
|
</view>
|
|
<view class="info_li_right">
|
|
{{info.adminName}}
|
|
</view>
|
|
</view>
|
|
|
|
|
|
</view>
|
|
<view class="bot_btn" v-if="info.status!=4">
|
|
<view class="btn" @click="btn(0)">
|
|
开锁
|
|
</view>
|
|
<view class="btn" @click="btn(1)">
|
|
关锁
|
|
</view>
|
|
<view class="btn" @click="btn(2)">
|
|
车辆禁用
|
|
</view>
|
|
<view class="btn" @click="btn(3)">
|
|
车辆解禁
|
|
</view>
|
|
<view class="btn" @click="btn(4)">
|
|
响铃寻车
|
|
</view>
|
|
<view class="btn" @click="tipshow=true" v-if="info.type==1">
|
|
维修处理
|
|
</view>
|
|
<view class="btn" @click="tipshow=true" v-if="info.type==2">
|
|
换电处理
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="page2" v-if="curtitidx==1" style="padding: 30rpx;padding-left: 80rpx;">
|
|
<view class="timebox" style="padding: 30rpx;">
|
|
<u-time-line >
|
|
|
|
<u-time-line-item v-for="(imte,index ) in history" :key="index" >
|
|
<!-- 此处没有自定义左边的内容,会默认显示一个点 -->
|
|
<template v-slot:content>
|
|
<view>
|
|
<view class="u-order-desc">{{imte.info}}</view>
|
|
<view class="u-order-time">{{imte.createTime}}</view>
|
|
</view>
|
|
</template>
|
|
</u-time-line-item>
|
|
|
|
</u-time-line>
|
|
</view>
|
|
|
|
</view>
|
|
<u-mask :show="tipshow" z-index='10'>
|
|
|
|
</u-mask>
|
|
<view class="tip_box" v-if="tipshow">
|
|
<view class="cont">
|
|
<view class="tit">
|
|
维修备注
|
|
</view>
|
|
<view class="input-container">
|
|
<!-- <view class="placeholder" v-if="!textValue">如选项未涵盖,请输入故障问题</view> -->
|
|
<textarea class="custom-textarea" v-model="textValue" @focus="hidePlaceholder" style="border: none;" placeholder="请填写维修备注"
|
|
@input="updateWordCount" @blur="showPlaceholder" maxlength='100'></textarea>
|
|
<text class="word-count">{{ currentCount }}/100</text>
|
|
</view>
|
|
<view class="tip_btn" @click="putFix()">
|
|
完成
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
bgc: {
|
|
backgroundColor: "#fff",
|
|
},
|
|
curtitidx:0,
|
|
latitude: 0,
|
|
longitude: 0,
|
|
info:'',
|
|
tipshow:false,
|
|
textValue: '',
|
|
placeholderVisible:false,
|
|
currentCount: 0,
|
|
info:{},
|
|
history:[]
|
|
}
|
|
},
|
|
onLoad(e) {
|
|
this.id=e.id
|
|
this.getdetail()
|
|
},
|
|
computed:{
|
|
comstatus(){
|
|
if(this.info.status==0){
|
|
return '未上架'
|
|
}else if (this.info.status==1){
|
|
return '正常'
|
|
}else if (this.info.status==2){
|
|
return '预约中'
|
|
}else if (this.info.status==3){
|
|
return '使用中'
|
|
}else if (this.info.status==4){
|
|
return '临时锁车'
|
|
}else if (this.info.status==5){
|
|
return '检修中'
|
|
}else if (this.info.status==6){
|
|
return '工单中'
|
|
}else if (this.info.status==9){
|
|
return '废弃'
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
btn(num){
|
|
if(num==0){
|
|
this.$u.post('/appVerify/admin/unlocking?sn='+this.info.sn).then((res) => {
|
|
if (res.code === 200) {
|
|
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
|
this.deviceInfo()
|
|
}
|
|
}).catch(error => {
|
|
console.error("Error fetching area data:", error);
|
|
});
|
|
}else if(num==1){
|
|
this.$u.post('/appVerify/admin/lock?sn='+this.info.sn).then((res) => {
|
|
if (res.code === 200) {
|
|
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
|
this.deviceInfo()
|
|
}
|
|
}).catch(error => {
|
|
console.error("Error fetching area data:", error);
|
|
});
|
|
}else if(num==2){
|
|
this.$u.post('/appVerify/device/offline?sn='+this.info.sn).then((res) => {
|
|
if (res.code === 200) {
|
|
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
|
this.deviceInfo()
|
|
}
|
|
}).catch(error => {
|
|
console.error("Error fetching area data:", error);
|
|
});
|
|
}else if(num==3){
|
|
this.$u.post('/appVerify/device/online?sn='+this.info.sn).then((res) => {
|
|
if (res.code === 200) {
|
|
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
|
|
this.deviceInfo()
|
|
}
|
|
}).catch(error => {
|
|
console.error("Error fetching area data:", error);
|
|
});
|
|
}else if(num==4){
|
|
this.$u.post('/app/device/ring?sn=' + this.info.sn).then((res) => {
|
|
if (res.code === 200) {
|
|
|
|
}
|
|
})
|
|
}
|
|
},
|
|
historyList(){
|
|
this.$u.get(`/appVerify/admiOrder/historyList?orderNo` + 111).then((res) => {
|
|
if (res.code == 200) {
|
|
this.history=res.rows
|
|
} else {
|
|
// 处理接口返回错误的情况
|
|
}
|
|
}).catch(error => {
|
|
// 处理接口请求失败的情况
|
|
});
|
|
},
|
|
getdetail(){
|
|
this.$u.get(`/appVerify/adminOrder/` + this.id).then((res) => {
|
|
if (res.code == 200) {
|
|
this.info=res.data
|
|
this.latitude=parseFloat(this.info.device.latitude)
|
|
this.longitude=parseFloat(this.info.device.longitude)
|
|
this.historyList()
|
|
} else {
|
|
// 处理接口返回错误的情况
|
|
}
|
|
}).catch(error => {
|
|
// 处理接口请求失败的情况
|
|
});
|
|
},
|
|
putFix(){
|
|
this.$u.put(`/appVerify/admiOrder?remark=` + this.textValue+'&orderNo='+this.info.orderNo).then((res) => {
|
|
if (res.code == 200) {
|
|
this.tipshow=false
|
|
uni.navigateBack()
|
|
} else {
|
|
uni.showToast({
|
|
title: '处理失败',
|
|
icon: 'none',
|
|
duration: 1000
|
|
});
|
|
// 处理接口返回错误的情况
|
|
}
|
|
}).catch(error => {
|
|
// 处理接口请求失败的情况
|
|
});
|
|
},
|
|
changeidx(idx){
|
|
this.curtitidx=idx
|
|
},
|
|
hidePlaceholder() {
|
|
this.placeholderVisible = false;
|
|
},
|
|
showPlaceholder() {
|
|
if (!this.textValue) {
|
|
this.placeholderVisible = true;
|
|
}
|
|
},
|
|
updateWordCount() {
|
|
this.currentCount = this.textValue.trim().replace(/\s+/g, '').length;
|
|
// if (this.currentCount > 500) {
|
|
// this.textValue = this.textValue.slice(0, this.textValue.lastIndexOf(' ', 500)).trim();
|
|
// uni.showToast({
|
|
// title: '字数已超过500字限制',
|
|
// icon: 'none'
|
|
// });
|
|
// }
|
|
|
|
},
|
|
mapFun() {
|
|
console.log('点击了');
|
|
uni.openLocation({
|
|
latitude: this.latitude,
|
|
//纬度 - 目的地/坐标点
|
|
longitude: this.longitude,
|
|
//经度 - 目的地/坐标点
|
|
// name: "荆门市",
|
|
address: this.info.address
|
|
});
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" >
|
|
page{
|
|
background-color: #fff;
|
|
}
|
|
.page{
|
|
width: 750rpx;
|
|
.tap{
|
|
margin-top: 24rpx;
|
|
width: 750rpx;
|
|
display: flex;
|
|
flex-wrap: nowrap;
|
|
align-items: center;
|
|
justify-content: space-around;
|
|
|
|
.tap_cont{
|
|
text-align: center;
|
|
padding-bottom: 15rpx;
|
|
width: 130rpx;
|
|
font-weight: 500;
|
|
font-size: 32rpx;
|
|
color: #3D3D3D;
|
|
border-bottom: 6rpx solid #fff ;
|
|
}
|
|
.act1{
|
|
border-bottom: 6rpx solid #4C97E7 ;
|
|
color: #4C97E7;
|
|
}
|
|
}
|
|
.tip_box{
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
position: fixed;
|
|
top: 50%;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
z-index: 12;
|
|
height: 100%;
|
|
.cont{
|
|
padding: 36rpx 42rpx;
|
|
// display: flex;
|
|
flex-wrap: wrap;
|
|
// justify-content: center;
|
|
width: 610rpx;
|
|
height: 772rpx;
|
|
background: #FFFFFF;
|
|
border-radius: 30rpx;
|
|
.tit{
|
|
|
|
width: 100%;
|
|
font-weight: 500;
|
|
font-size: 36rpx;
|
|
color: #3D3D3D;
|
|
}
|
|
.input-container {
|
|
margin-top: 34rpx;
|
|
position: relative;
|
|
width: 526rpx;
|
|
height: 396rpx;
|
|
background: #F7F7F7;
|
|
box-shadow: 0rpx 16rpx 40rpx 0rpx rgba(42, 130, 228, 0.1);
|
|
border-radius: 20rpx;
|
|
// margin-top: 40rpx;
|
|
overflow: hidden;
|
|
// padding-right: 38rpx;
|
|
box-sizing: border-box;
|
|
border: 2rpx solid #C7C7C7;
|
|
}
|
|
|
|
.placeholder {
|
|
position: absolute;
|
|
top: 18rpx;
|
|
left: 38rpx;
|
|
color: #999;
|
|
/* placeholder颜色 */
|
|
pointer-events: none;
|
|
/* 确保点击事件可以穿透到textarea上 */
|
|
}
|
|
.custom-textarea {
|
|
width: 100%;
|
|
height: 100%;
|
|
/* 设置一个合适高度 */
|
|
padding-top: 18rpx;
|
|
padding-bottom: 40rpx;
|
|
/* 为placeholder留出空间 */
|
|
padding-left: 10rpx;
|
|
box-sizing: border-box;
|
|
border: 1px solid #ccc;
|
|
}
|
|
|
|
.word-count {
|
|
position: absolute;
|
|
right: 10px;
|
|
bottom: 10px;
|
|
font-size: 12px;
|
|
color: #999;
|
|
}
|
|
.tip_btn{
|
|
margin-top: 94rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 526rpx;
|
|
height: 78rpx;
|
|
background: #4C97E7;
|
|
border-radius: 49rpx 49rpx 49rpx 49rpx;
|
|
font-weight: 500;
|
|
font-size: 36rpx;
|
|
color: #FFFFFF;
|
|
}
|
|
}
|
|
}
|
|
.page2{
|
|
.timebox{
|
|
padding-left: 20rpx;
|
|
background: #fff;
|
|
}
|
|
.u-node {
|
|
width: 44rpx;
|
|
height: 44rpx;
|
|
border-radius: 100rpx;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
background: #d0d0d0;
|
|
}
|
|
|
|
.u-order-title {
|
|
color: #333333;
|
|
font-weight: bold;
|
|
font-size: 32rpx;
|
|
}
|
|
|
|
.u-order-desc {
|
|
color: rgb(150, 150, 150);
|
|
font-size: 28rpx;
|
|
margin-bottom: 6rpx;
|
|
}
|
|
|
|
.u-order-time {
|
|
color: rgb(200, 200, 200);
|
|
font-size: 26rpx;
|
|
}
|
|
}
|
|
.page1{
|
|
padding-bottom: 250rpx;
|
|
.device_info{
|
|
margin: 32rpx auto;
|
|
padding: 32rpx 28rpx;
|
|
width: 680rpx;
|
|
background: #FFFFFF;
|
|
box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0,0,0,0.08);
|
|
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
|
.device_top{
|
|
margin-bottom: 28rpx;
|
|
image{
|
|
margin-right: 18rpx;
|
|
width: 42rpx;
|
|
height: 42rpx;
|
|
}
|
|
width: 100%;
|
|
display: flex;
|
|
flex-wrap: nowrap;
|
|
align-items: center;
|
|
font-weight: 500;
|
|
font-size: 32rpx;
|
|
color: #3D3D3D;
|
|
}
|
|
.info_li{
|
|
display: flex;
|
|
align-items: center;
|
|
flex-wrap: nowrap;
|
|
margin-bottom: 28rpx;
|
|
.info_li_left{
|
|
margin-right: 44rpx;
|
|
width: 140rpx;
|
|
font-weight: 400;
|
|
font-size: 28rpx;
|
|
color: #808080;
|
|
}
|
|
.info_li_right{
|
|
font-weight: 400;
|
|
font-size: 28rpx;
|
|
color: #3D3D3D;
|
|
}
|
|
image{
|
|
margin-left: auto;
|
|
width: 41.66rpx;
|
|
height: 48rpx;
|
|
}
|
|
}
|
|
}
|
|
.fix_info{
|
|
margin: 32rpx auto;
|
|
padding: 32rpx 28rpx;
|
|
width: 680rpx;
|
|
background: #FFFFFF;
|
|
box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0,0,0,0.08);
|
|
border-radius: 20rpx 20rpx 20rpx 20rpx;
|
|
.fix_top{
|
|
margin-bottom: 28rpx;
|
|
image{
|
|
margin-right: 18rpx;
|
|
width: 42rpx;
|
|
height: 42rpx;
|
|
}
|
|
width: 100%;
|
|
display: flex;
|
|
flex-wrap: nowrap;
|
|
align-items: center;
|
|
font-weight: 500;
|
|
font-size: 32rpx;
|
|
color: #3D3D3D;
|
|
}
|
|
.info_li{
|
|
display: flex;
|
|
align-items: center;
|
|
flex-wrap: nowrap;
|
|
margin-bottom: 28rpx;
|
|
.info_li_left{
|
|
margin-right: 44rpx;
|
|
width: 140rpx;
|
|
font-weight: 400;
|
|
font-size: 28rpx;
|
|
color: #808080;
|
|
}
|
|
.info_li_right{
|
|
font-weight: 400;
|
|
font-size: 28rpx;
|
|
color: #3D3D3D;
|
|
}
|
|
image{
|
|
margin-left: auto;
|
|
width: 41.66rpx;
|
|
height: 48rpx;
|
|
}
|
|
}
|
|
}
|
|
.bot_btn{
|
|
position: fixed;
|
|
bottom: 0;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
padding: 40rpx 18rpx;
|
|
width: 750rpx;
|
|
height: 230rpx;
|
|
background: linear-gradient( 180deg, #FFFFFF 0%, rgba(255,255,255,0) 100%);
|
|
box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0,0,0,0.08);
|
|
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
|
.btn:nth-child(4n) {
|
|
margin-right: 0;
|
|
}
|
|
.btn{
|
|
margin-right: 18rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 164rpx;
|
|
height: 66rpx;
|
|
background: #E2F2FF;
|
|
border-radius: 0rpx 0rpx 0rpx 0rpx;
|
|
border: 2rpx solid #4C97E7;
|
|
font-weight: 400;
|
|
font-size: 28rpx;
|
|
color: #3D3D3D;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|