yxk_h5_master/pages/eqPatrol/patrolStep3.vue

538 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="content">
<view class="step_num">
<view class="step step1">签到</view>
<view class="step step2">巡检设备</view>
<view class="step step3">巡检总结</view>
</view>
<!-- <view class="photo_container">
<view class="pzqd" style="padding-bottom: 20upx;">巡检完成时间</view>
<view @click="onShowDatePicker()">
<view class="date_time">{{value!=''?value:"请选择时间"}}</view>
<img src="../../static/img/dateIcon.png" class="dateIcon" />
</view>
</view> -->
<view class="photo_container">
<view class="pzqd required">巡检总结</view>
<textarea class="result_out" maxlength=1000 v-model="content" @input="changeContent()"></textarea>
</view>
<view class="photo_container">
<view class="pzqd">现场照片</view>
<view class="photo_out">
<view class="imgwrap" v-for="(items,index) in imgsrc_list_local" :key="index">
<view class="myimgBox" @click="reUpload(index)">
<view class="img">
<img class="uploadimg" :src="items" />
<view class="cxsc">重新上传</view>
</view>
</view>
<img src="../../static/img/delete.png" class="deleteimg" @click="deleteImg(index)" />
</view>
<view class="imgwrap" @click="chooseImg()">
<view class="myimgBox">
<view class="img upload_btn">
<img src="../../static/img/uploadimg.png" />
<view class="sctp">上传图片</view>
</view>
</view>
</view>
</view>
</view>
<view class="bottom_btn">
<view class="previous" @click="toPrevious()">上一步</view>
<view class="next" @click="submit()">完成</view>
</view>
<mx-datepicker type="datetime" :value="value" :show="showPicker" @confirm="onSelected" @cancel="onSelected"></mx-datepicker>
<view class="goHome" @click='goMain()'>
<img src="../../static/img/gohome.png">
</view>
</view>
</template>
<script>
import {
mapState,
mapMutations
} from 'vuex'
import {
config
} from '../../request/js/config.js'
import mxDatepicker from '@/components/mx-datepicker/mx-datepicker.vue'
export default {
computed: {
...mapState(['patrolSignInImage', 'patrolDetails', 'patrolStep3'])
},
components: {
mxDatepicker
},
data() {
return {
showPicker: false,
value: '',
imgsrc_list: [],
imgsrc_list_local: [],
id: '',
content: '', //巡检总结
}
},
onLoad(option) {
this.id = option.id;
if (this.id == undefined) {
uni.reLaunch({
url: 'eqPatrol'
});
return false;
}
if (this.patrolStep3.content != undefined && this.patrolStep3.content != null) {
this.content = this.patrolStep3.content;
this.imgsrc_list = this.patrolStep3.taglocationappearanceImage;
this.imgsrc_list_local = this.patrolStep3.taglocationappearanceImage_local;
} else {
this.setpatrolStep3({
content: '',
taglocationappearanceImage: [],
taglocationappearanceImage_local: []
})
}
},
methods: {
...mapMutations(['setpatrolStep3']),
onShowDatePicker() { //显示
this.showPicker = true;
},
onSelected(e) { //选择
this.showPicker = false;
if (e) {
this.value = e.value;
//选择的值
// console.log('value => ' + e.value);
//原始的Date对象
// console.log('date => ' + e.date);
}
},
//上传
chooseImg() {
this.uploadImg();
},
//重新上传
reUpload(index) {
this.uploadImg(index);
},
uploadImg(indexnum) {
var _this = this;
//#ifdef APP-PLUS
var count_ = 9;
//#endif
//#ifndef APP-PLUS
var count_ = 1;
//#endif
if (indexnum != undefined) {
count_ = 1;
}
uni.chooseImage({
count: count_,
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
//#ifdef APP-PLUS
let imgs = chooseImageRes.tempFilePaths.map((value, index) => {
return {
name: "file" + (index + 1), //注意这一行uni的hello的示例中这里为key名+index这样是无法和使用一个固定key名接多个文件的php接口对接上的改为数组下标形式的字符串就解决这个问题了。其效果等同于在html页面上多个同name文件域同时提交表单。
uri: value
}
});
uni.uploadFile({
url: config.baseURL + '/apis/file/uploadMulti', //接口地址
files: imgs,
fileType: "image",
name: 'files',
success: (uploadFileRes) => {
// console.log(JSON.stringify(uploadFileRes))
var arr = [];
for (var i = 0; i < JSON.parse(uploadFileRes.data).result.length; i++) {
arr.push(JSON.parse(uploadFileRes.data).result[i].filePath);
}
if (indexnum != undefined) { //是重新上传
_this.imgsrc_list[indexnum] = arr[0]
_this.imgsrc_list_local[indexnum] = chooseImageRes.tempFilePaths[0]
} else {
_this.imgsrc_list = _this.imgsrc_list.concat(arr);
_this.imgsrc_list_local = _this.imgsrc_list_local.concat(chooseImageRes.tempFilePaths);
}
_this.setpatrolStep3({
content: _this.content,
taglocationappearanceImage: _this.imgsrc_list,
taglocationappearanceImage_local: _this.imgsrc_list_local
})
_this.$forceUpdate();
},
fail:function(){
uni.showToast({
title: '上传图片失败',
duration: 2000,
icon:"none"
});
}
});
//#endif
//#ifndef APP-PLUS
uni.uploadFile({
url: config.baseURL + '/apis/file/upload', //接口地址
filePath: tempFilePaths[0],
fileType: "image",
name: 'file',
success: (uploadFileRes) => {
var arr = [];
if (indexnum != undefined) { //是重新上传
_this.imgsrc_list[indexnum] = JSON.parse(uploadFileRes.data).filePath;
_this.imgsrc_list_local[indexnum] = chooseImageRes.tempFilePaths[0];
} else {
_this.imgsrc_list.push(JSON.parse(uploadFileRes.data).filePath)
// _this.imgsrc_list.push("aa.png")
_this.imgsrc_list_local.push(chooseImageRes.tempFilePaths)
}
_this.setpatrolStep3({
content: _this.content,
taglocationappearanceImage: _this.imgsrc_list,
taglocationappearanceImage_local: _this.imgsrc_list_local
})
_this.$forceUpdate();
},
fail:function(){
uni.showToast({
title: '上传图片失败',
duration: 2000,
icon:"none"
});
}
});
//#endif
}
});
},
//删除图片
deleteImg(index) {
this.imgsrc_list.splice(index, 1);
this.imgsrc_list_local.splice(index, 1);
this.$forceUpdate()
},
changeContent() {
this.$nextTick(function() {
this.setpatrolStep3({
content: this.content,
taglocationappearanceImage: this.imgsrc_list,
taglocationappearanceImage_local: this.imgsrc_list_local
})
})
},
toPrevious() {
uni.navigateBack({})
},
submit() {
if (this.content.trim() == '') {
uni.showToast({
title: '请填写巡检总结',
icon: 'none',
duration: 2000
});
return false;
}
if (this.id == undefined) {
uni.showToast({
title: '页面已失效,请返回首页重新巡检',
icon: 'none',
duration: 2000
});
return false;
}
var json_ = {
id: this.id,
content: this.content,
signInImage:this.patrolSignInImage,
taglocationappearanceImage:this.imgsrc_list,
detailArray:encodeURIComponent(JSON.stringify(this.patrolDetails.patrolDetails))
}
var _this = this;
this.$http.request({
url: '/apis/patrolRecord/handleRecord',
params: json_,
}).then(res => {
// console.log(res)
if (res.data.code == 0) {
uni.showToast({
title: '提交成功',
icon: 'none',
duration: 1000
});
setTimeout(function(){
//这里写死会有问题,我跳转不一定就是 跳转4步
//这里暂时修改为跳转到详情界面。
// _this.$eventHub.$emit('changestate',{id:_this.id,state:"待验收"});
// uni.navigateBack({
// delta: 4
// });
uni.navigateTo({
url: "patrolDetail?id="+_this.id
});
},1000)
}else{
uni.showToast({
title: res.data.msg|| '提交失败,请稍后重试',
icon: 'none',
duration: 2000
});
}
}).catch(err => {
uni.showToast({
title: '提交失败,请稍后重试',
icon: 'none',
duration: 2000
});
});
}
},
}
</script>
<style>
page {
background-color: #f5f7f5;
}
</style>
<style scoped>
.content {
position: relative;
min-height: 100%;
overflow: auto;
padding-bottom: 140upx;
box-sizing: border-box;
}
.step_num {
display: flex;
flex-direction: row;
justify-content: center;
width: 100%;
height: 80upx;
background-color: #fff;
padding-right: 48upx;
box-sizing: border-box;
}
.step {
position: relative;
font-size: 28upx;
line-height: 80upx;
padding-left: 30upx;
float: left;
}
.step:before {
position: absolute;
left: 0px;
content: '1';
border: 1px solid #000;
width: 28upx;
height: 28upx;
box-sizing: border-box;
line-height: 28upx;
border-radius: 200upx;
font-size: 20upx;
text-align: center;
top: 26upx;
}
.step:after {
position: absolute;
content: '';
width: 60upx;
height: 2upx;
background-color: #000;
top: 40upx;
left: 88upx;
}
.step2 {
margin-left: 64upx;
}
.step2:before {
content: '2';
border: 2upx solid #828282;
}
.step2:after,
.step3:after {
left: 144upx;
}
.step3 {
margin-left: 64upx;
}
.step3:after{
background: transparent;
}
.step3:before {
content: '3';
}
.photo_container {
position: relative;
margin-top: 20upx;
background-color: #fff;
overflow: auto;
}
.photo_container .required:before {
position: absolute;
content: '*';
color: red;
left: 30upx;
}
.pzqd {
font-size: 28upx;
color: #999999;
padding-left: 30upx;
padding-top: 20upx;
box-sizing: border-box;
}
.photo_container .required {
padding-left: 50upx;
}
.result_out {
position: relative;
height: 160upx;
display: block;
width: 90%;
margin: auto;
padding-bottom: 20upx;
}
.img-wrap {
position: relative;
background-color: #fff;
float: left;
width: 27%;
margin: 3%;
}
.img-box {
width: 100%;
padding-bottom: 100%;
overflow: hidden;
margin: 0;
position: relative;
}
.img-box .img {
position: absolute;
width: 100%;
height: 100%;
/* background-color: red; */
}
.upload_btn {
border: 2upx solid #dadada;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: center;
}
.upload_btn img {
display: block;
width: 32%;
height: 30%;
margin: 0 auto 10upx auto;
}
.sctp {
text-align: center;
font-size: 30upx;
color: #ababab;
}
.uploadimg {
width: 100%;
height: 100%;
}
.cxsc {
position: absolute;
width: 100%;
height: 60upx;
background-color: rgba(0, 0, 0, 0.8);
bottom: 0;
left: 0;
text-align: center;
line-height: 60upx;
font-size: 28upx;
color: #fff;
}
.deleteimg {
position: absolute;
width: 36upx;
height: 36upx;
right: -18upx;
top: -18upx;
background-color: #fff;
border-radius: 36upx;
}
.bottom_btn {
position: absolute;
left: 5%;
bottom: 15px;
width: 90%;
height: 82upx;
display: flex;
flex-direction: row;
justify-content: space-between;
}
.next,
.previous {
width: 48%;
border-radius: 5px;
border: 1px solid #3382FF;
text-align: center;
color: #3382FF;
line-height: 82upx;
background-color: #fff;
}
.next {
border: none;
background-color: #3382FF;
color: #fff;
}
.date_time {
position: absolute;
right: 80upx;
height: 90upx;
line-height: 90upx;
top: 0upx;
color: #333;
font-size: 28upx;
}
.dateIcon {
position: absolute;
right: 30upx;
top: 25upx;
width: 40upx;
height: 40upx;
}
</style>