You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
455 lines
13 KiB
455 lines
13 KiB
<template> |
|
<view class="" id="page"> |
|
<view class="Width100 Box BorderBox"> |
|
<top-title :is-show-left="true" :title="'治理结果'" class="custom_bg"> |
|
</top-title> |
|
</view> |
|
<view class="navBar-top"> |
|
|
|
</view> |
|
<view class="form-content"> |
|
<view> |
|
<uni-forms border style="margin-bottom: 12px;"> |
|
<view class="formBox" v-for="(itemData,indexData) in hiddenDangerList" :key="indexData"> |
|
<view class="label-box"> |
|
<view class="border"></view> 问题{{formatIndex(indexData)}} |
|
</view> |
|
<view style="margin-bottom:20rpx; display: flex; align-items: baseline"> |
|
<uni-forms-item label="问题类型" label-position="top" label-width="80px" /> |
|
<view class="value" style="font-size:28rpx"> |
|
{{ itemData.dangerProblem}} |
|
</view> |
|
</view> |
|
|
|
<view style="margin-bottom: 30rpx;"> |
|
<view class="investigation-item" style="width: 100%; padding: 0"> |
|
<view class="detail-item"> |
|
<uni-forms-item label="问题描述" label-position="top" label-width="200px" /> |
|
<u-textarea placeholder="- -" :disabled="true" border="none" |
|
v-model="itemData.hdDesc" style="margin-top: -20rpx;" /> |
|
</view> |
|
</view> |
|
<view class="investigation-item" style="width: 100%; padding: 0"> |
|
<view class="detail-item"> |
|
<uni-forms-item label="隐患图片" label-position="top" label-width="200px" /> |
|
<u-upload :fileList="itemData.hdPic" :disabled="true" style="margin-top: -20rpx;" |
|
name="1" :maxCount="10"></u-upload> |
|
</view> |
|
</view> |
|
<view class="investigation-item" style="width: 100%; padding: 0"> |
|
<view class="detail-item"> |
|
<uni-forms-item label="补充信息" label-position="top" label-width="200px" /> |
|
<u-textarea :disabled="true" placeholder="- -" border="none" |
|
v-model="itemData.hdInfo" style="margin-top: -20rpx;" /> |
|
</view> |
|
</view> |
|
<view class="investigation-item" style="width: 100%; padding: 0"> |
|
<view class="detail-item"> |
|
<uni-forms-item label="治理措施" label-position="top" label-width="100px" required /> |
|
<!-- <upload-file @fileSuccess="fileSuccess.call(this,$event, indexData)" |
|
@fileDelete="fileDelete.call(this, $event, indexData)" |
|
:fileList="itemData.zlMeasure" /> --> |
|
<u-textarea placeholder="请输入治理措施" border="none" v-model="itemData.zlMeasure" |
|
style="margin-top: -20rpx;" /> |
|
</view> |
|
</view> |
|
<view class="investigation-item" style="width: 100%; padding: 0"> |
|
<view class="detail-item detail-item-flex"> |
|
<uni-forms-item label="治理单位" label-position="top" label-width="100px" required /> |
|
<input class="BorderNone Height100 formInput" |
|
style="font-size: 14px; text-align: right;" placeholder-style="fontSize: 14px" |
|
v-model="itemData.zlUnit" placeholder="请输入治理单位" /> |
|
</view> |
|
</view> |
|
<view class="investigation-item" style="width: 100%; padding: 0"> |
|
<view class="detail-item"> |
|
<uni-forms-item label="治理后照片" label-position="top" label-width="100px" required /> |
|
<locationUpload :fileList="itemData.zlPic" style="margin-top: -20rpx;" name="1" |
|
:maxCount="9" @afterRead="afterRead.call(this, $event,indexData)" |
|
@delete="deletePic.call(this, $event,indexData)"></locationUpload> |
|
</view> |
|
</view> |
|
<view class="investigation-item" style="width: 100%; padding: 0"> |
|
<view class="detail-item detail-item-flex" @click="handleOpenDate(indexData)"> |
|
<uni-forms-item label="完成时间" label-position="top" label-width="100px" required /> |
|
<view class="value" :class="itemData.wcTime ? 'value-date' : 'value-placeholder'"> |
|
{{itemData.wcTime || '请选择入完成时间'}} |
|
</view> |
|
</view> |
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
<view class="formBox"> |
|
<view class="investigation-item" style="width: 100%; padding: 0"> |
|
<view class="detail-item detail-item-flex" style="align-items: baseline;"> |
|
<uni-forms-item label="验收材料" label-position="top" label-width="100px" required /> |
|
<upload-file @fileSuccess="fileSuccess.call(this,$event)" |
|
@fileDelete="fileDelete.call(this, $event)" :fileList="acceptanceData" /> |
|
|
|
</view> |
|
</view> |
|
<view class="investigation-item" style="width: 100%; padding: 0"> |
|
<view class="detail-item"> |
|
<uni-forms-item label="验收照片" label-position="top" label-width="100px" required /> |
|
<locationUpload :fileList="acceptancePhotos" style="margin-top: -20rpx;" name="1" |
|
:maxCount="9" @afterRead="afterReadImg.call(this, $event)" |
|
@delete="deletePic.call(this, $event, '')"></locationUpload> |
|
</view> |
|
</view> |
|
</view> |
|
</uni-forms> |
|
</view> |
|
</view> |
|
<three class="footer-buttons" :type="'view'" first-text="取消" next-text="确认" :second-primary="true" |
|
@first="handleBack" @last="handleSubmit" /> |
|
<u-datetime-picker :show="dateShow" :value="dateTime" :maxDate="maxDate" @cancel="dateShow = false" |
|
@confirm="handleConfirm" mode="datetime" :defaultIndex="[1, 2, 1, 1, 1]"></u-datetime-picker> |
|
</view> |
|
</template> |
|
|
|
<script> |
|
import TopTitle from "../../components/top-title"; |
|
import Three from "../../components/bottom-button/three.vue"; |
|
import uploadFile from "../../components/upload-file.vue"; |
|
import locationUpload from '@/components/u-upload/index.js' |
|
const indexList = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', |
|
'十九', '二十' |
|
] |
|
export default { |
|
components: { |
|
TopTitle, |
|
Three, |
|
uploadFile, |
|
locationUpload |
|
}, |
|
data() { |
|
return { |
|
hiddenDangerList: [], |
|
acceptancePhotos: [], |
|
acceptanceData: [], |
|
businessId: '', |
|
dateShow: false, |
|
dateTime: this.formatTime(), |
|
curIndex: 0, |
|
maxDate: null |
|
} |
|
}, |
|
onLoad(e) { |
|
this.businessId = e.id |
|
this.initPage() |
|
}, |
|
methods: { |
|
handleConfirm(value) { |
|
this.$set(this.hiddenDangerList[this.curIndex], 'wcTime', this.formatTime(value.value)) |
|
this.dateShow = false |
|
}, |
|
handleOpenDate(index) { |
|
this.curIndex = index |
|
this.dateTime = this.hiddenDangerList[index].wcTime || this.formatTime() |
|
this.$nextTick(() => { |
|
this.maxDate = this.getCurTimeForX() |
|
this.dateShow = true |
|
}) |
|
}, |
|
getCurTimeForX() { |
|
return (new Date()).getTime() |
|
}, |
|
formatTime(time) { |
|
console.log(time) |
|
return this.$moment(time).format('YYYY-MM-DD HH:mm') |
|
}, |
|
fileSuccess(result) { |
|
this.acceptanceData.push({ |
|
id: this.uuid(), |
|
fileName: result.fileName, |
|
filePath: result.result |
|
}) |
|
|
|
}, |
|
fileDelete(fileIndex) { |
|
this.acceptanceData.splice( |
|
fileIndex, |
|
1, |
|
); |
|
}, |
|
initPage() { |
|
this.$.showLoading() |
|
Promise.all([ |
|
this.$request |
|
.globalRequest( |
|
"/hiddenDanger/highDanger/getUserHiddenDangerList", { |
|
// nuserid: this.$.getData("token"), |
|
pcType: 1, |
|
businessId: this.businessId |
|
}, |
|
"GET" |
|
), |
|
this.$request |
|
.globalRequest( |
|
"/hiddenDanger/highDanger/getUserHiddenDangerList", { |
|
// nuserid: this.$.getData("token"), |
|
pcType: 2, |
|
businessId: this.businessId |
|
}, |
|
"GET" |
|
) |
|
]) |
|
.then((resArr) => { |
|
this.hiddenDangerList = resArr.reduce((arr, item) => { |
|
if (item.code === 200) { |
|
const itemResArr = item.result.map(item => ({ |
|
...item, |
|
hdPic: item.hdPic ? item.hdPic.split(',').map(item => ({ |
|
url: item |
|
})) : [], |
|
zlPic: [] |
|
})) |
|
arr.push(...itemResArr) |
|
} |
|
return arr |
|
}, []) |
|
|
|
}).finally(() => { |
|
this.$.hideLoading() |
|
}) |
|
}, |
|
getPageData() {}, |
|
formatIndex(index) { |
|
return indexList[index] |
|
}, |
|
//获取随机id |
|
uuid(len, binary) { |
|
len = !len ? 36 : len; |
|
binary = !binary ? 16 : binary; |
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx" |
|
.replace(/[xy]/g, function(c) { |
|
var r = (Math.random() * binary) | 0, |
|
v = c == "x" ? r : (r & 0x3) | 0x8; |
|
return v.toString(binary); |
|
}) |
|
.substring(0, len); |
|
}, |
|
async afterReadImg(event) { |
|
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式 |
|
const id = this.uuid(); |
|
this.acceptancePhotos.push({ |
|
id, |
|
...event.file, |
|
status: "uploading", |
|
message: "上传中", |
|
}); |
|
const result = await this.uploadFilePromise(event); |
|
const resultInfo = JSON.parse(result); |
|
const fileIndex = this.acceptancePhotos.findIndex((v) => v.id === id); |
|
if (resultInfo.code == 200) { |
|
this.acceptancePhotos.splice( |
|
fileIndex, |
|
1, |
|
Object.assign(event.file, { |
|
status: "success", |
|
message: "", |
|
result: resultInfo, |
|
url: resultInfo.result, |
|
|
|
}) |
|
); |
|
console.log(this.acceptancePhotos) |
|
} else { |
|
this.$.toast("上传失败"); |
|
this.acceptancePhotos.splice( |
|
fileIndex, |
|
1, |
|
); |
|
} |
|
}, |
|
deletePic(event, index) { |
|
if (index === '') { |
|
this.acceptancePhotos.splice(event.index, 1); |
|
} else { |
|
this.hiddenDangerList[index].zlPic.splice(event.index, 1); |
|
} |
|
}, |
|
uploadFilePromise(event) { |
|
return new Promise((resolve, reject) => { |
|
let a = uni.uploadFile({ |
|
url: this.$.baseUrl + "/hiddenDanger/ftp/uploadFileToFtp", // 仅为示例,非真实的接口地址 |
|
filePath: event.file.url, |
|
name: "file", |
|
formData: { |
|
position: event.position, |
|
longitude: event.longitude, |
|
latitude: event.latitude |
|
}, |
|
success: (res) => { |
|
resolve(res.data); |
|
}, |
|
}); |
|
}); |
|
}, |
|
async afterRead(event, index) { |
|
console.log(event, index) |
|
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式 |
|
const id = this.uuid(); |
|
this.hiddenDangerList[index].zlPic.push({ |
|
id, |
|
...event.file, |
|
status: "uploading", |
|
message: "上传中", |
|
}); |
|
const result = await this.uploadFilePromise(event); |
|
const resultInfo = JSON.parse(result); |
|
const fileIndex = this.hiddenDangerList[index].zlPic.findIndex((v) => v.id === id); |
|
if (resultInfo.code == 200) { |
|
this.hiddenDangerList[index].zlPic.splice( |
|
fileIndex, |
|
1, |
|
Object.assign(event.file, { |
|
status: "success", |
|
message: "", |
|
result: resultInfo, |
|
url: resultInfo.result, |
|
|
|
}) |
|
); |
|
console.log(this.hiddenDangerList[index].zlPic) |
|
} else { |
|
this.$.toast("上传失败"); |
|
this.hiddenDangerList[index].zlPic.splice( |
|
fileIndex, |
|
1, |
|
); |
|
} |
|
}, |
|
handleBack() { |
|
this.$.back(1) |
|
}, |
|
getFormatData() { |
|
const hiddenDangerList = this.hiddenDangerList.map(item => ({ |
|
zlMeasure: item.zlMeasure, |
|
zlPic: item.zlPic.map(item => item.url).join(','), |
|
zlUnit: item.zlUnit, |
|
wcTime: item.wcTime, |
|
hdTerm: item.hdTerm, |
|
nid: item.nid |
|
})) |
|
return { |
|
businessId: this.businessId, |
|
nuserid: this.$.getData('token'), |
|
acceptancePhotos: this.acceptancePhotos.map(item => item.url).join(','), |
|
acceptanceData: this.acceptanceData.map(item => item.filePath).join(','), |
|
describe: hiddenDangerList |
|
} |
|
}, |
|
validDate(data) { |
|
const { |
|
describe = [], acceptanceData, acceptancePhotos |
|
} = data |
|
if (!describe.length || !acceptanceData.length || !acceptancePhotos.length) return false |
|
return describe.reduce((result, item) => { |
|
if (!result) return false |
|
const { |
|
zlMeasure, |
|
zlPic, |
|
zlUnit, |
|
wcTime |
|
} = item |
|
if (zlMeasure && zlPic && zlUnit && wcTime) { |
|
return true |
|
} |
|
return false |
|
}, true) |
|
}, |
|
handleSubmit() { |
|
const formData = this.getFormatData() |
|
console.log('formData', formData) |
|
if (this.validDate(formData)) { |
|
this.$.showLoading() |
|
this.$request.globalRequest('/hiddenDanger/government/saveGovernment', formData, 'post').then(res => { |
|
if (res.code === 200) { |
|
console.log('提交成功', res) |
|
this.$.toast('提交成功') |
|
setTimeout(() => { |
|
this.handleBack() |
|
}, 500) |
|
} |
|
}).finally(() => { |
|
this.$.hideLoading() |
|
}) |
|
} else { |
|
this.$.toast('请填写完整的表单必填项*') |
|
} |
|
} |
|
} |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
page { |
|
background: #F6F8FA; |
|
font-size: 14px; |
|
} |
|
|
|
.navBar-top { |
|
height: calc(var(--status-bar-height) + 88rpx); |
|
} |
|
|
|
.form-content { |
|
padding-bottom: 120rpx; |
|
} |
|
|
|
.formBox { |
|
margin: 30rpx 20rpx; |
|
border: 1px solid #e6e6e6; |
|
background: #ffffff; |
|
padding: 0 20rpx 20rpx; |
|
box-sizing: border-box; |
|
|
|
/deep/ .uni-forms-item--border .uni-forms-item__content { |
|
justify-content: flex-end; |
|
text-align: right; |
|
} |
|
|
|
.photo { |
|
width: 100%; |
|
|
|
image { |
|
width: 100%; |
|
} |
|
} |
|
} |
|
|
|
.label-box { |
|
display: flex; |
|
align-items: center; |
|
height: 110rpx; |
|
font-size: 30rpx; |
|
font-weight: 600; |
|
|
|
.border { |
|
background-color: #2663BF; |
|
height: 35rpx; |
|
width: 6rpx; |
|
margin-right: 14rpx; |
|
} |
|
} |
|
|
|
.detail-item-flex { |
|
display: flex; |
|
align-items: center; |
|
justify-content: space-between; |
|
} |
|
|
|
.uni-forms-item--border { |
|
border: none; |
|
} |
|
|
|
.investigation-item { |
|
border-top: 1px solid #eee; |
|
} |
|
|
|
.value-placeholder { |
|
color: #B4BAC9 |
|
} |
|
</style> |