<template>
|
<div class="arrive">
|
<div class="arrive-title">到达现场情况</div>
|
<div class="arrive-form">
|
<el-form ref="arriveForm" label-width="160px" :model="arrive" :rules="arriveRules" autoComplete="on">
|
<!-- 到达时间 -->
|
<el-form-item label="到达时间:" prop="arrivalTime">
|
<el-date-picker v-model="arrive.arrivalTime" type="datetime" placeholder="选择到达时间">
|
</el-date-picker>
|
</el-form-item>
|
<!-- 到达地址 -->
|
<el-form-item label="到达地址:" prop="arrivalAddress">
|
<el-input v-model="arrive.arrivalAddress" placeholder="请输入地址"></el-input>
|
</el-form-item>
|
<!-- 现场情况说明 -->
|
<el-form-item label="现场情况说明:" prop="situationExplain">
|
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4}" maxlength="200" show-word-limit
|
v-model="arrive.situationExplain" placeholder="请输入情况说明,限制200字以内"></el-input>
|
</el-form-item>
|
<!-- 信访回复说明 -->
|
<el-form-item label="信访回复说明:" prop="replyExplain">
|
<el-input type="textarea" :autosize="{ minRows: 2, maxRows: 4}" maxlength="200" show-word-limit
|
v-model="arrive.replyExplain" placeholder="请输入回访说明,限制200字以内"></el-input>
|
</el-form-item>
|
<!-- 现场情况照片 -->
|
<el-form-item label="现场情况照片:" prop="situationPic">
|
<div class="upImg">
|
<div class="img-list" v-if="arrive.situationPic.length!==0">
|
<div class="img" v-for="(item,index) in arrive.situationPic" :key="index">
|
<img :src="item" alt="">
|
<i class="el-icon-close myicon" @click="handleRemove(index)"></i>
|
</div>
|
</div>
|
<div class="upload" v-if="arrive.situationPic.length<4">
|
<el-upload :file-list="fileList" class="upload-demo"
|
action="/sccg/file/medias" multiple :show-file-list="false"
|
:limit="50" :on-success="handleSuccess" list-type="picture" :headers="getToken()">
|
<i class="el-icon-plus"></i>
|
</el-upload>
|
</div>
|
<div class="tip">{{arrive.situationPic.length}} / 4</div>
|
</div>
|
</el-form-item>
|
</el-form>
|
</div>
|
</div>
|
</template>
|
<script>
|
export default {
|
data() {
|
const checkTime = (rule, value, callback) => {
|
if (value) {
|
callback()
|
} else {
|
callback(new Error('到达时间不能为空'));
|
}
|
}
|
const checkAddress = (rule, value, callback) => {
|
if (value) {
|
callback()
|
} else {
|
callback(new Error('到达地址不能为空'));
|
}
|
}
|
const checkSit = (rule, value, callback) => {
|
if (value) {
|
callback()
|
} else {
|
callback(new Error('现场情况说明不能为空'));
|
}
|
}
|
const checkReplay = (rule, value, callback) => {
|
if (value) {
|
callback()
|
} else {
|
callback(new Error('信访回复说明不能为空'));
|
}
|
}
|
const checkSitPic = (rule, value, callback) => {
|
if (value.length !== 0) {
|
callback()
|
} else {
|
callback(new Error('请上传现场情况照片'));
|
}
|
}
|
return {
|
arrive: {
|
situationPic: [],
|
},
|
arriveRules: {
|
arrivalTime: [
|
{ trigger: 'blur', validator: checkTime }
|
],
|
arrivalAddress: [
|
{ trigger: 'blur', validator: checkAddress }
|
],
|
situationExplain: [
|
{ trigger: 'blur', validator: checkSit }
|
],
|
replyExplain: [
|
{ trigger: 'blur', validator: checkReplay }
|
],
|
situationPic: [
|
{ trigger: 'blur', validator: checkSitPic }
|
],
|
},
|
fileList: [],
|
}
|
},
|
methods: {
|
handleSuccess(res, file, filelist) {
|
const baseUrl = 'http://140.143.152.226:8410/';
|
console.log(res);
|
console.log(this.fileList);
|
if (this.arrive.situationPic.length < 4) {
|
this.arrive.situationPic.push(baseUrl + res.data.url1)
|
}
|
},
|
getToken() {
|
const token = sessionStorage.getItem('token');
|
const tokenHead = sessionStorage.getItem('tokenHead');
|
if (token && tokenHead) {
|
return { Authorization: tokenHead + token }
|
}
|
},
|
// 获取arrive对象
|
backData() {
|
const { arrive } = this;
|
this.$emit('getArrive', { arrive });
|
},
|
// 删除图片
|
handleRemove(index) {
|
this.arrive.situationPic.splice(index,1);
|
}
|
},
|
watch: {
|
'arrive.situationPic.length': {
|
handler(newLen, oldLen) {
|
if (newLen !== 0) {
|
this.$refs.arriveForm.validateField('situationPic');
|
}
|
},
|
deep: true,
|
}
|
}
|
}
|
</script>
|
<style lang="scss" scoped>
|
.arrive-title {
|
line-height: 60px;
|
font-weight: 650;
|
font-size: 20px;
|
width: 160px;
|
padding-right: 12px;
|
text-align: right;
|
color: #4b9bb7;
|
}
|
|
.upImg {
|
display: flex;
|
|
.tip {
|
position: absolute;
|
bottom: 0;
|
right: 0;
|
}
|
|
.img-list {
|
height: 60px;
|
position: relative;
|
display: flex;
|
img {
|
width: 60px;
|
height: 60px;
|
}
|
.img{
|
height: 60px;
|
position: relative;
|
}
|
.myicon {
|
position: absolute;
|
top: 0px;
|
right: 0px;
|
color: #4b9bb7;
|
}
|
}
|
}
|
|
.upload {
|
width: 60px;
|
height: 60px;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
font-size: 20px;
|
background-color: #fbfdff;
|
border-radius: 4px;
|
}
|
|
::v-deep .el-textarea__inner {
|
background-color: #09152f;
|
border: 1px solid #17324c;
|
}
|
|
::v-deep .el-input__count {
|
background-color: #09152f;
|
}
|
|
::v-deep .el-form-item__label {
|
color: #4b9bb7;
|
}
|
</style>
|