移动端
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.
 
 
 
 
 

280 lines
6.7 KiB

<template>
<view class="view-container">
<view class="box wd-flex wd-flex-col" style="gap: 12px">
<view
class="wd-flex"
style="justify-content: space-between; align-items: center"
>
<view style="font-weight: bold">
<text style="color: #f8285a; margin-right: 4px">*</text>
处理意见
</view>
<text style="color: #78829d">最多500字符</text>
</view>
<uni-easyinput
type="textarea"
v-model="form.advice"
placeholder="请输入..."
:maxlength="500"
:autoHeight="true"
:styles="{
backgroundColor: '#F9F9F9',
borderColor: '#F1F1F4'
}"
></uni-easyinput>
<view
class="wd-flex"
style="justify-content: space-between; align-items: center"
>
<view style="font-weight: bold">
<text style="color: #f8285a; margin-right: 4px">*</text>
上传证明
</view>
</view>
<u-upload
:fileList="form.photo"
@afterRead="addPhoto"
@delete="delPhoto"
multiple
:maxCount="3"
width="96px"
height="96px"
></u-upload>
</view>
<view class="box" v-if="form.state == 3">
<view
class="wd-flex"
style="justify-content: space-between; align-items: center"
@tap="showCalender"
>
<view style="font-weight: bold">
<text style="color: #f8285a; margin-right: 4px">*</text>
截止日期
</view>
<view class="wd-flex" style="gap: 4px; align-items: center">
<text style="color: #f8285a">
{{ $util.formatDate(form.date, 'YYYY年M月D日') }}
</text>
<u-icon name="arrow-right"></u-icon>
</view>
</view>
</view>
<cs-bottom-wrapper>
<view class="operation">
<view
:class="['btn', form.state == 2 ? 'green' : 'red']"
@tap="submit"
>
{{ form.state == 2 ? '审批通过' : '整改处理' }}
</view>
</view>
</cs-bottom-wrapper>
<uni-calendar
ref="calendarRef"
:insert="false"
@confirm="confirmCalendar"
/>
<u-modal
:show="showModel"
confirmText="返回"
showCancelButton
:cancel-text="form.state == 2 ? '通过' : '整改'"
:cancel-color="form.state == 2 ? '#17C653' : '#F8285A'"
confirm-color="#071437"
@confirm="showModel = false"
@cancel="postApi"
>
<view class="wd-flex wd-flex-col wd-flex-center" style="gap: 10px">
<view style="font-size: 18px; color: #071437; font-weight: 800">
{{ form.state == 2 ? '是否通过?' : '是否整改?' }}
</view>
<view class="">确认后不可再次修改</view>
</view>
</u-modal>
</view>
</template>
<script>
import { uploadFile } from '@/api/system/file.js'
import { InspectionsApi } from '@/api/inspections/index.js'
export default {
data() {
return {
form: {
state: undefined,
inspectionsId: undefined,
advice: undefined,
photo: undefined,
date: ''
},
showModel: false
}
},
onLoad(res) {
this.form.state = res.state
this.form.inspectionsId = res.inspectionsId
},
methods: {
/**
* 选择图片并上传
* @param {Object} e
*/
async addPhoto(e) {
e.file.forEach(p => {
this.form.photo.push({
...p,
status: 'uploading',
message: '上传中'
})
})
// 使用promise.all()方法上传到后端做统一接收
await Promise.all(
this.form.photo.map(async (p, i) => {
if (p.status == 'uploading') {
const res = await uploadFile({ name: `file`, filePath: p.url })
return {
...res.data,
status: 'success',
message: ''
}
}
return p
})
).then(res => {
this.form.photo = res
})
},
/**
* 删除图片
* @param {Object} e
*/
delPhoto(e) {
this.form.photo.splice(e.index, 1)
},
confirmCalendar(e) {
this.form.date = e.fulldate
},
showCalender() {
this.$refs.calendarRef.open()
},
postApi() {
const data = {
...this.form,
status: this.form.state,
feedBack: this.form.advice,
fileIds: this.form.photo.map(i => i.id),
correctionTime: new Date(this.form.date).getTime()
}
InspectionsApi.feeback(data).then(res => {
uni.showToast({
icon: 'none',
title: '操作成功'
})
uni.navigateBack()
})
},
async submit() {
const validate = await this.validate()
if (validate.msg) {
uni.showToast({
icon: 'error',
title: validate.msg
})
return
}
this.showModel = true
},
validate() {
return new Promise(resolve => {
if (!this.form.advice) {
resolve({
state: false,
msg: '请填写处理意见'
})
}
if (!this.form.photo) {
resolve({
state: false,
msg: '请上传证明'
})
}
if (!this.form.date && this.form.state == 3) {
resolve({
state: false,
msg: '请选择日期'
})
}
resolve(true)
})
}
}
}
</script>
<style lang="scss" scoped>
.view-container {
padding: 12px;
height: 100vh;
position: relative;
.box {
padding: 12px;
border: 1px solid #f9f9f9;
border-radius: 12px;
background-color: #fff;
margin-bottom: 12px;
}
.operation {
padding: 12px;
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
.btn {
flex: 1;
border-radius: 8px;
display: flex;
padding: 12px 0;
align-items: center;
justify-content: center;
}
.green {
background-color: $cs-color-main;
color: #fff;
}
.red {
background-color: #f8285a;
color: #fff;
}
}
}
::v-deep .uni-easyinput__content-textarea {
min-height: 400rpx;
}
::v-deep .u-upload__button {
border-radius: 8px !important;
border: 1px solid #f1f1f4;
background-color: #f9f9f9 !important;
}
::v-deep .u-upload__wrap {
.u-upload__wrap__preview {
width: 192rpx;
height: 192rpx;
border-radius: 8px !important;
overflow: visible !important;
.u-upload__wrap__preview__image {
border-radius: 8px !important;
}
.u-upload__deletable {
border-radius: 100% !important;
background-color: #f8285a !important;
transform: translateX(50%) translateY(-50%);
.u-upload__deletable__icon {
position: relative;
}
}
}
}
</style>