chuangte_bike_newxcx/page_user/guzhang/index.vue

444 lines
10 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="cardbox">
<view class="tip">
<view class="ipnt">*</view>故障车编号
</view>
<view class="iptbox">
<input type="text" class="ips" v-model="sn" placeholder="请输入车辆二维码下方编号"
placeholder-style='font-weight: 400;font-size: 36rpx;color: #808080;' />
<view class="iptbtn" @click="scanQRCode()">
<image src="https://lxnapi.ccttiot.com/bike/img/static/u7thMxZGRQrS5yWh2mCD" mode=""></image>
</view>
</view>
</view>
<view class="cardbox">
<view class="tip">
<view class="ipnt">*</view>请输入车辆故障部位
</view>
<view class="input-container">
<view class="placeholder" v-if="!textValue">请输入故障问题</view>
<textarea class="custom-textarea" v-model="textValue" @focus="hidePlaceholder" style="border: none;"
@input="updateWordCount" @blur="showPlaceholder"></textarea>
<text class="word-count">{{ currentCount }}/500</text>
</view>
</view>
<view class="cardbox">
<view class="tip">
请对故障部位拍照
</view>
<view class="icon">
<view class="imgbox" v-for="(item,index) in imglist " :key="index">
<image :src="item" mode=""></image>
</view>
<view class="imgbox" @click="btn">
<image src="https://api.ccttiot.com/smartmeter/img/static/uY8CPw9YE6JxPzcHUaqf" mode="aspectFill"></image>
</view>
</view>
</view>
<view class="btn" @click="sub()">
提交
</view>
<view class="sbjl" @click="btnzgjl">
历史上报记录 <image src="https://api.ccttiot.com/smartmeter/img/static/uVbMMNz0STQy3PMImgRJ" mode=""></image>
</view>
</view>
</template>
<script>
export default {
data() {
return {
bgc: {
backgroundColor: "#fff",
},
cbgz: ['车头','车灯'],
csgz: ['车座','车把','轮胎'],
tsgz: ['其他'],
textValue: '',
currentCount: 0,
imglist: [],
token: '',
sn:'',
upurl:''
}
},
onShow() {
this.getQiniuToken()
},
onLoad(e) {
},
computed: {
appointmentServiceFee() {
return this.$store.getters.appointmentServiceFee;
},
dispatchFee() {
return this.$store.getters.dispatchFee;
},
vehicleManagementFee() {
return this.$store.getters.vehicleManagementFee;
},
startingPrice() {
return this.$store.getters.startingPrice;
},
timeFee() {
return this.$store.getters.timeFee;
},
timeMinutes() {
return this.$store.getters.timeMinutes;
},
deposit() {
return this.$store.getters.deposit;
},
userId() {
return this.$store.getters.userId;
},
},
methods: {
// 点击跳转到故障记录
btnzgjl(){
uni.navigateTo({
url:'/page_user/guzhang/guzhanglv'
})
},
sub(){
let data = {
faultDetail:this.textValue,
vehicleCode:this.sn,
faultSite:'',
picture:this.imglist.join(',')
}
console.log(data,'dadadad');
this.$u.post("/app/fault",data).then((res) => {
if (res.code == 200) {
uni.showToast({
title: '提交成功',
icon: 'success',
duration: 1000
})
setTimeout(()=>{
uni.navigateBack({
delta: 1,
})
},1100)
}else if(res.code == 401){
uni.showModal({
title: '提示',
content: '您当前未登录,是否前去登录?',
showCancel: true,
success: function (res) {
if (res.confirm) {
uni.reLaunch({
url:'/pages/login/login'
})
} else if (res.cancel) {
}
}
})
} else{
uni.showToast({
title: res.msg,
icon: 'none',
duration: 1000
})
}
})
},
getQiniuToken() {
this.$u.get("/common/qiniuToken").then((res) => {
if (res.code == 200) {
this.token=res.data
console.log(res,'resres')
}
})
},
getlist(){
// checked
this.$u.get("/appVerify/fault/allList?dictType=et_fault_type").then((res) => {
if (res.code == 200) {
this.cbgz = res.data.headstock.map(item => ({...item, checked: false}))
this.csgz = res.data.body.map(item => ({...item, checked: false}))
this.tsgz = res.data.special.map(item => ({...item, checked: false}))
} else {
uni.showToast({
title: '未登录,请登录后尝试',
icon: 'none',
duration: 2000
})
}
})
},
toggleCheckbox(index) {
this.cbgz[index].checked = !this.cbgz[index].checked
this.$forceUpdate()
},
csCheckbox(index){
this.csgz[index].checked = !this.csgz[index].checked
},
tsCheckbox(index){
this.tsgz[index].checked = !this.tsgz[index].checked
},
hidePlaceholder() {
this.placeholderVisible = false
},
showPlaceholder() {
if (!this.textValue) {
this.placeholderVisible = true
}
},
scanQRCode() {
uni.scanCode({
onlyFromCamera: true,
scanType: ['qrCode'],
success: res => {
let sn = null;
let queryParams = res.result.split('?')[1]
if (queryParams) {
let params = queryParams.split('&')
params.forEach(param => {
let [key, value] = param.split('=')
if (key === 's') {
sn = value
}
})
}
this.sn = sn
},
fail: err => {
console.error('扫描失败:', err);
uni.showToast({
title: '扫描失败',
icon: 'none'
})
}
})
},
btn() {
let _this = this
let math = 'static/' + _this.$u.guid(20)
uni.chooseImage({
count: 9,
type: 'all',
success(res) {
const tempFilePaths = res.tempFiles
wx.uploadFile({
url: 'https://up-z2.qiniup.com',
name: 'file',
filePath: tempFilePaths[0].path,
formData: {
token: _this.token, //后端返回的token
key: 'smartmeter/img/' + math
},
success: function(res) {
console.log(res,'resres');
let str = JSON.parse(res.data)
console.log(str.key)
_this.userImgs = 'https://api.ccttiot.com/'+ str.key
console.log(_this.userImgs)
_this.imglist.push(_this.userImgs)
}
})
}
})
},
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'
// // })
// }
},
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.page {
width: 750rpx;
padding-bottom: 200rpx;
.sbjl{
width: 750rpx;
margin-top: 20rpx;
justify-content: center;
display: flex;
align-items: center;
font-size: 28rpx;
color: #3D3D3D;
image{
width: 40rpx;
height: 40rpx;
}
}
.btn{
position: fixed;
left: 34rpx;
bottom: 80rpx;
// margin: 0 auto;
display: flex;
align-items: center;
justify-content: center;
width: 680rpx;
height: 90rpx;
background: #4C97E7;
border-radius: 54rpx 54rpx 54rpx 54rpx;
font-weight: 500;
font-size: 40rpx;
color: #FFFFFF;
}
.cardbox {
margin: 30rpx auto;
width: 680rpx;
padding: 20rpx 45rpx;
background: #FFFFFF;
box-shadow: 0rpx 10rpx 64rpx 0rpx rgba(0, 0, 0, 0.08);
border-radius: 20rpx 20rpx 20rpx 20rpx;
.tip {
display: flex;
flex-wrap: nowrap;
font-weight: 700;
font-size: 32rpx;
color: #3D3D3D;
line-height: 44rpx;
.ipnt {
margin-top: 10rpx;
margin-right: 12rpx;
color: #FF4444;
font-size: 48rpx;
}
}
.iptbox {
display: flex;
align-items: center;
margin-top: 30rpx;
width: 592rpx;
height: 80rpx;
border-radius: 20rpx 20rpx 20rpx 20rpx;
border: 2rpx solid #979797;
.ips {
margin-left: 30rpx;
width: 80%;
}
.iptbtn {
display: flex;
align-items: center;
justify-content: center;
width: 112rpx;
height: 80rpx;
background: #4C97E7;
border-radius: 20rpx 20rpx 20rpx 20rpx;
image {
width: 37rpx;
height: 37rpx;
}
}
}
.txt {
margin-top: 18rpx;
font-weight: 400;
font-size: 28rpx;
color: #3D3D3D;
}
.icon {
display: flex;
flex-wrap: wrap;
align-items: center;
margin-top: 40rpx;
.imgbox {
width: 33%;
image {
width: 142rpx;
height: 142rpx;
border-radius: 10rpx;
}
}
}
.checkbox {
display: flex;
flex-wrap: wrap;
.check_li {
position: relative;
margin-right: 10rpx;
margin-top: 18rpx;
display: flex;
align-items: center;
justify-content: center;
width: 142rpx;
height: 65rpx;
border-radius: 20rpx 20rpx 20rpx 20rpx;
border: 2rpx solid #C7C7C7;
image{
position: absolute;
right: 0;
bottom: 0;
width: 40rpx;
height: 20rpx;
}
}
.check_li:nth-child(4n) {
margin-right: 0;
}
.act1 {
width: 142rpx;
height: 65rpx;
border: 2rpx solid #1E807A;
}
}
.input-container {
position: relative;
width: 612rpx;
height: 248rpx;
background: #FFFFFF;
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;
/* 为placeholder留出空间 */
padding-left: 38rpx;
box-sizing: border-box;
border: 1px solid #ccc;
}
.word-count {
position: absolute;
right: 10px;
bottom: 10px;
font-size: 12px;
color: #999;
}
}
}
</style>