430 lines
9.9 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="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>