430 lines
9.9 KiB
Vue
Raw Permalink Normal View History

<template>
<view class="deetailPage">
<headers :showBack="true">
<view class="headerName">
进度管理系统
</view>
</headers>
<view class="content">
<view class="title">
工程进度
</view>
<view class="b-bottom2">
<view class="name"><text class="mustStar">*</text>上报时间</view>
<view class="inputFrom">
<dateTimePiccker fields="minute" :defaultValue=form.uploadDate
@change="bindPickerChange($event,'startTime')" class="dateTimePiccker">
<view class="uni-input uni-select cl" v-if="form.uploadDate===''">
请选择 <image class="icon-right" src="/static/icon-right-ccc.png"></image>
</view>
<view class="uni-input uni-select" v-else>{{form.uploadDate}}
<image class="icon-right" src="/static/icon-right.png"></image>
</view>
</dateTimePiccker>
</view>
</view>
<view class="b-bottom" style="display: block;">
<view class="name"><text class="mustStar">*</text>上报进度</view>
<view class="inputFrom" style="width: 100%;margin-left: 0px;">
<slider :value="form.progressRatio" @change="sliderChange" min="0" max="100" show-value />
</view>
</view>
<view class="b-bottom">
<view class="name">反馈内容</view>
<textarea class="textarea" maxlength="-1" placeholder-class="cl" name="inspectContent"
@input='supplementTextarea' :value="form.feedbackContent" placeholder="多行输入"></textarea>
</view>
<view class="b-bottom" style="border-bottom: 2rpx solid #f0f0f0;">
<view class="name">上传图片</view>
<view class="uni-form-input imgBox_wrap">
<view class="imgBox" v-show="imgFileList.length>0" v-for="(item,index) in imgFileList" :key="index">
<image :src="url_config+'image/'+item.url" class="img"
@click="previewImage(url_config+'image/'+item.url)"></image>
<view @click="deleteImg(item)" style="margin: 10rpx;" class="deleteImg">×</view>
</view>
<view class="addImgBox" @click="uploadImg()" v-if="imgFileList.length<5">
<image src="/static/icon-add.png" class="icon-add"></image>
</view>
</view>
</view>
<view class="title">
材料用量
</view>
<view class="martNum" v-for="(item, index) in materialList" :key="index">
<view class="name">{{item.name}}</view>
<input type="number" placeholder-class="cl" class="inpuStyle uni-select cl" :value="item.actualUsage"
placeholder="请输入" @input='eventData($event,index)' />
<view class="unit">{{item.unit}}</view>
</view>
<view class="addProgess" @click="addSaveBtn">
提交
</view>
</view>
</view>
</template>
<script>
import dateTimePiccker from '@/components/dateTimePicker/index.vue'
export default {
components: {
dateTimePiccker
},
data() {
return {
form: {
uploadDate: '',
progressRatio: 0,
feedbackContent: '',
},
imgFileList: [],
projectSn: '',
materialList: [],
id: ''
}
},
onLoad(option) {
this.projectSn = JSON.parse(uni.getStorageSync('projectDetail')).projectSn;
this.id = option.id
console.log('id有了吗', this.id);
},
onShow() {
this.getList()
},
methods: {
//获取材料用量列表
getList() {
let data = {
projectSn: this.projectSn,
taskProgressId: this.id,
}
this.sendRequest({
url: 'xmgl/taskProgressMaterialRel/detailList',
method: 'get',
data,
success: res => {
if (res.result.length > 0) {
console.log('获取材料用量列表', res);
this.materialList = res.result
this.getDetail()
}
}
})
},
// /xmgl/taskProgressContent/list?lang=zh_CN&taskProgressId=1722560016547635200
//获取任务
getDetail() {
let data = {
taskProgressId: this.id,
}
this.sendRequest({
url: 'xmgl/taskProgressContent/list',
method: 'get',
data,
success: res => {
if (res.result.length > 0) {
console.log('获取上传进度详情-----', res);
this.form.uploadDate = res.result[0].uploadDate
this.form.progressRatio = res.result[0].progressRatio
this.form.feedbackContent = res.result[0].feedbackContent
console.log('获取上传进度详情+++++', this.form);
if (res.result[0].image !== "") {
this.imgFileList = JSON.parse(res.result.image)
}
}else {
this.selectNowDate()
}
}
})
},
sliderChange(e) {
this.form.progressRatio = e.detail.value
},
bindPickerChange(e, type) {
if (type == 'startTime') {
this.form.uploadDate = e.f3;
}
},
//反馈内容
supplementTextarea(e) {
this.form.feedbackContent = e.detail.value
},
//材料用量
eventData(e, index) {
this.materialList[index].actualUsage = e.detail.value;
console.log('输入的数据', this.materialList[index].actualUsage);
},
//预览图片
previewImage(url) {
uni.previewImage({
urls: [url]
})
},
uploadImg(type) {
var that = this
uni.chooseImage({
count: 5 - that.imgFileList.length,
success(res) {
const tempFilePaths = res.tempFilePaths;
uni.uploadFile({
url: that.url_config + 'upload/image', //仅为示例,非真实的接口地址
filePath: tempFilePaths[0],
name: 'files',
success: (uploadFileRes) => {
let data = {
name: JSON.parse(uploadFileRes.data).data[0].filename,
url: JSON.parse(uploadFileRes.data).data[0].imageUrl
};
that.imgFileList.push(data)
}
});
}
})
},
//删除附件
deleteImg(val) {
let that = this;
uni.showModal({
title: '提示',
content: '确定删除该附件吗?',
success: function(res) {
if (res.confirm) {
let fileArr = JSON.parse(JSON.stringify(that.imgFileList));
fileArr.forEach((item, index) => {
if (item.url == val.url) {
fileArr.splice(index, 1)
}
})
that.imgFileList = fileArr;
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
//新增保存
addSaveBtn() {
if (this.form.uploadDate == "") {
uni.showToast({
title: "请选择上报时间",
icon: 'error'
})
return
}
let data = JSON.parse(JSON.stringify(this.form));
data.projectSn = this.projectSn;
data.taskProgressId = String(this.id)
data.image = JSON.stringify(this.imgFileList)
data.typeDataList = this.materialList
console.log('新增提交的数据', data);
this.sendRequest({
url: 'xmgl/taskProgressContent/add',
method: 'post',
data: data,
success: (res) => {
console.log(res)
if (res.code == 200) {
uni.showToast({
title: '保存成功'
})
setTimeout(() => {
uni.navigateBack({})
}, 1000)
} else {
uni.showToast({
title: res.message,
icon: 'none'
})
}
}
})
},
selectNowDate() {
let date = new Date(),
year = date.getFullYear(),
month = date.getMonth() + 1,
day = date.getDate(),
hours = date.getHours(), //获取当前小时数(0-23)
minutes = date.getMinutes(), //获取当前分钟数(0-59)
seconds = date.getSeconds()
month >= 1 && month <= 9 ? (month = '0' + month) : ''
day >= 0 && day <= 9 ? (day = '0' + day) : ''
hours >= 0 && hours <= 9 ? (hours = '0' + hours) : ''
minutes >= 0 && minutes <= 9 ? (minutes = '0' + minutes) : ''
seconds >= 0 && seconds <= 9 ? (seconds = '0' + seconds) : ''
let timer = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds
// console.log(timer)
this.form.uploadDate = timer
},
}
}
</script>
<style lang="less">
.content {
width: 100%;
box-sizing: border-box;
padding: 20rpx 30rpx;
font-size: 28rpx;
.title {
font-weight: bold;
font-size: 30rpx;
margin: 20rpx 0 30rpx 4rpx;
}
.b-bottom2 {
display: flex;
margin-bottom: 30rpx;
.name {
width: 20%;
}
.inputFrom {
width: 80%;
margin-left: 20rpx;
}
}
.b-bottom {
border-top: 2rpx solid #f0f0f0;
display: flex;
height: 200rpx;
line-height: 80rpx;
.inputFrom {
width: 80%;
margin-left: 40rpx;
}
.name {
width: 20%;
}
.icon-right {
margin-left: 16rpx;
width: 16rpx;
height: 32rpx;
}
}
.addProgess {
width: 50%;
background: #5181f6;
text-align: center;
margin: auto;
height: 60rpx;
color: #fff;
border-radius: 40rpx;
line-height: 60rpx;
margin-top: 110rpx;
font-size: 28rpx;
}
}
::v-deep .uni-slider-thumb {
width: 30rpx !important;
height: 26rpx !important;
margin-top: -7px !important;
}
.imgBox_wrap {
display: flex;
flex-wrap: wrap;
margin-top: 20rpx;
width: 75%;
}
.addImgBox {
border: 1px solid rgba(42, 43, 91, 0.1);
background-color: #f6f5f8;
width: 120rpx;
height: 120rpx;
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: 20rpx;
font-size: 24rpx;
.icon-add {
width: 36rpx;
height: 36rpx;
}
}
.deleteImg {
position: absolute;
right: -6rpx;
top: -36rpx;
font-size: 30rpx;
color: #fff;
}
.imgBox {
width: 120rpx;
height: 120rpx;
display: inline-flex;
position: relative;
margin-right: 30rpx;
margin-bottom: 16rpx;
.img {
width: 100%;
height: 100%;
border-radius: 20rpx;
}
.deleteImg {
position: absolute;
right: -6rpx;
top: -36rpx;
font-size: 30rpx;
color: #fff;
}
}
.textarea {
width: calc(79% - 64rpx);
padding: 16rpx 30rpx;
box-sizing: border-box;
}
.martNum {
display: flex;
align-items: center;
margin: 20rpx 20rpx 0 20rpx;
border-bottom: 2rpx solid #f0f0f0;
padding-bottom: 20rpx;
.name {
width: 15%;
// white-space: nowrap;
}
.unit {
width: 10%;
margin-left: 80rpx;
text-align: center;
white-space: nowrap;
}
}
::v-deep .uni-input-input {
color: #000 !important;
}
.mustStar {
color: red;
}
</style>