433 lines
10 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="tab flex2">
<view class="tabType" @click="changeTab(1)" :class="checkedTab==1?'checkedTab':'noCheckTab'">检查详细</view>
<view class="tabType" @click="changeTab(2)" :class="checkedTab==2?'checkedTab':'noCheckTab'">整改记录</view>
</view>
<view class="content" v-if="checkedTab==1">
<view class="type flex2">
<view>检查性质</view>
<view>{{basicInfo.checkNature}}</view>
</view>
<view class="type">
<view>检查项</view>
<view class="pre">{{basicInfo.checkPoints}}</view>
</view>
<view class="type">
<view>检查内容</view>
<pre class="pre">{{basicInfo.checkContent}}</pre>
</view>
<view class="type">
<view>整改要求</view>
<pre class="pre">{{basicInfo.rectifyRequire}}</pre>
</view>
<!-- <view class="type flex2">
<view>问题等级</view>
<view>{{basicInfo.level==1?'一级':basicInfo.level==2?'二级':basicInfo.level==3?'三级':basicInfo.level==4?'四级':''}}</view>
</view>
<view class="type flex2">
<view>紧急程度</view>
<view>{{basicInfo.urgentLevel==1?'一般':basicInfo.urgentLevel==2?'严重':basicInfo.urgentLevel==3?'紧要':''}}</view>
</view>
<view class="type flex2">
<view>检查人</view>
<view>{{basicInfo.inspectManName}}</view>
</view> -->
<view class="type flex2">
<view>检查时间</view>
<view>{{basicInfo.checkTime}}</view>
</view>
<!-- <view class="type flex2">
<view>图纸定位</view>
<view>{{basicInfo.rectifyPeopleName}}</view>
</view> -->
<!-- <view class="type flex2">
<view>分包单位</view>
<view>{{basicInfo.enterpriseName}}</view>
</view>
<view class="type flex2">
<view>整改时限</view>
<view>{{basicInfo.changeLimitTime}}</view>
</view> -->
<view class="type flex2">
<view>整改人</view>
<view>{{basicInfo.rectifyPeopleAme}}</view>
</view>
<!-- <view class="type flex2">
<view>复查人</view>
<view>{{basicInfo.reviewName}}</view>
</view>
<view class="type flex2">
<view>核检人</view>
<view>{{basicInfo.verifyManName}}</view>
</view> -->
<view class="type flex2">
<view>通知人</view>
<view>{{basicInfo.notifier}}</view>
</view>
<!-- <view class="type flex2">
<view>现场整改</view>
<view>{{basicInfo.status==2?'未完成':basicInfo.status==5?'已完成':''}}</view>
</view> -->
<view class="type">
<view>附件</view>
<view class="accessory">
<image @click="previewImage(url_config+'image/'+item.url)" v-if="imgFileList.length>0" v-for="(item,index) in imgFileList" :key="index" :src="url_config+'image/'+item.url"
class="accessoryImg"></image>
</view>
</view>
<!-- <view style="margin-top: 20rpx;">
<view>视频/音频附件</view>
<view @click="playVideo(url_config+'image/'+item.url,'video')" v-if="videoFileList.length>0" v-for="(item,index) in videoFileList" :key="index"
style="line-height: 28rpx; color: #4181FE;">{{item.name}}</view>
</view> -->
</view>
<view class="content record" v-if="checkedTab==2">
<view class="item flex3" v-if="issueInfoList.length>0" v-for="(item,index) in issueInfoList" :key="index" style="margin-bottom:40rpx">
<image src="../../../static/profile_photo.png" class="userImg"></image>
<view class="bubble">
<view class="bubble_content">
<view class="flex2">
<view class="name"><text class="item_title">整改人</text>{{item.rectifyPeopleName}}</view>
<view class="time">{{item.replyTime}}</view>
</view>
<view class="item_title">回复内容</view>
<pre class="pre">{{item.replyContent}}</pre>
<view class="item_title">附件</view>
<view>
<image v-for="(imgItem,imgIndex) in item.fileList" :key="imgIndex" :src="url_config+'image/'+imgItem.url" style="width:100rpx;height: 100rpx;"></image>
</view>
<view class="audit_content" v-if="item.status!=1">
<view class="item_title">复核内容</view>
<pre class="pre">{{item.auditPeplyContent}}</pre>
<view class="item_title">复核附件</view>
<view>
<image v-for="(imgItem,imgIndex) in JSON.parse(item.auditReplyImg)" :key="imgIndex" :src="url_config+'image/'+imgItem.url"
style="width:100rpx;height: 100rpx;"></image>
</view>
</view>
<view class="pass_wrap">
<image v-if="item.status==2" class="pass_icon" src="../../../static/icon_pass.png"></image>
<image v-if="item.status==3" class="pass_icon" src="../../../static/icon_unpass.png"></image>
</view>
</view>
</view>
</view>
<view class="noData" v-if="issueInfoList.length==0">
<image class="noDataImg" src="../../../static/noData.png"></image>
<view>暂无数据</view>
</view>
<view class="approveBtn">
<view class="btn" v-if="
userInfo.userId == basicInfo.rectifyPeople &&
issueInfoList.length>0 && issueInfoList[issueInfoList.length-1].status==3 ||
userInfo.userId == basicInfo.rectifyPeople && issueInfoList.length<=0
"
@click="replyBtn(1)">整改回复</view>
</view>
<view class="approveBtn">
<view class="btn" v-if="userInfo.userId==basicInfo.inspector&&issueInfoList.length>0&&issueInfoList[issueInfoList.length-1].status==1"
@click="replyBtn(2)">审核回复</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
checkedTab: 1,
imgFileList: [],
videoFileList:[],
basicInfo: {},
issueInfoList: [],
userInfo: {},
}
},
onLoad(option) {
this.id = Number(option.id);
this.userInfo = JSON.parse(uni.getStorageSync('userInfo'));
},
onShow() {
this.getBasicInfo();
this.getIssueInfo();
},
methods: {
//切换tab
changeTab(type) {
this.checkedTab = type;
if (type == 1) {
this.getBasicInfo();
} else {
this.getIssueInfo();
}
},
//获取基本信息
getBasicInfo() {
let that = this;
this.sendRequest({
url: 'xmgl/securityManage/getSecurityManageDetails',
method: 'post',
data: {
id: that.id
},
success: res => {
console.log(res.result)
that.basicInfo = res.result;
if (res.result.fileUrl) {
that.imgFileList = JSON.parse(res.result.fileUrl);
console.log(that.imgFileList)
}
}
})
},
//获取整改信息
getIssueInfo() {
let that = this;
this.sendRequest({
url: 'xmgl/securityRectifyRecord/viewSecurityRectifyRecordList',
method: 'post',
data: {
securityId: that.id
},
success: res => {
console.log(res)
if (res)
that.issueInfoList = res.result.dataList;
that.issueInfoList.forEach((item, index) => {
if (item.replyImg) {
item.fileList = JSON.parse(item.replyImg)
}
})
}
})
},
//新增回复
replyBtn(type) {
let stateId = this.issueInfoList.length > 0 ? this.issueInfoList[this.issueInfoList.length - 1].id : '';
uni.navigateTo({
url: './reply?id=' + this.id + '&type=' + type + '&stateId=' + stateId
})
},
//播放视频
playVideo(url,type){
uni.navigateTo({
url:'../carWashManage/mediaPlay?url='+url+'&type='+type
})
},
//预览图片
previewImage(url){
uni.previewImage({
urls:[url]
})
}
}
}
</script>
<style>
.flex {
display: flex;
align-items: center;
}
.flex2 {
display: flex;
align-items: center;
justify-content: space-between;
}
.flex3 {
display: flex;
}
.deetailPage {
width: 100%;
height: 100%;
}
.tab {
width: 100%;
height: 90rpx;
text-align: center;
box-shadow: 0 0 20rpx rgba(194, 194, 194, 0.5);
}
.tabType {
width: 50%;
line-height: 43px;
border-bottom: 1px solid rgba(194, 194, 194, 0.2);
}
.checkedTab {
color: #4181FE;
border-bottom: 4rpx solid #4181FE;
}
.noCheckTab {
padding-bottom: 4rpx;
}
.content {
width: 100%;
box-sizing: border-box;
padding: 40rpx 30rpx ;
}
.type {
font-size: 30rpx;
line-height: 80rpx;
border-bottom: 1px solid rgba(194, 194, 194, 0.2);
}
.pre {
padding: 20rpx 30rpx;
background-color: rgba(194, 194, 194, 0.2);
min-height: 100rpx;
width: 100%;
white-space: pre-wrap;
word-wrap: break-word;
box-sizing: border-box;
line-height: initial;
}
.accessory {
width: 100%;
height: 70px;
padding: 0 20rpx;
box-sizing: border-box;
}
.accessoryImg {
width: 110rpx;
height: 120rpx;
margin-right: 16rpx;
}
.userImg {
width: 50rpx;
height: 50rpx;
border-radius: 50%;
box-shadow: 0px 0 30rpx rgba(194, 194, 194, 0.5);
margin-top: 10rpx;
}
.bubble {
margin-left: 36rpx;
width: 90%;
box-sizing: border-box;
}
.bubble .bubble_content {
width: 90%;
background-color: #fff;
padding: 20rpx 30rpx;
display: inline-block;
border-radius: 6px;
position: relative;
box-shadow: -4rpx 0 30rpx rgba(194, 194, 194, 0.5);
position: relative;
}
.bubble .bubble_content::after {
content: '';
border: 8px solid #ffffff00;
border-right: 8px solid #fff;
position: absolute;
top: 20rpx;
left: -30rpx;
}
.record {
/* background-color: rgba(234, 234, 234, 0.4); */
padding-bottom: 120rpx;
}
.bubble_content .name {
font-size: 30rpx;
margin: 20rpx 0;
}
.time {
color: rgba(153, 153, 153, 1);
font-size: 24rpx;
font-family: PingFangSC-Regular;
}
.item_title {
margin: 20rpx 0;
font-family: PingFangSC-Regular;
font-size: 28rpx;
opacity: 0.8;
}
.approveBtn {
position: fixed;
bottom: 30rpx;
width: calc(100% - 60rpx);
box-sizing: border-box;
z-index: 99;
}
.approveBtn .btn {
width: 70%;
line-height: 80rpx;
background-color: #4181FE;
color: #fff;
text-align: center;
border-radius: 60rpx;
margin: 0 auto;
box-shadow: 0 10rpx 10rpx rgba(65, 129, 254, 0.3);
}
.approveBtn .btn:active {
background-color: rgba(65, 129, 254, 0.8);
}
.pass_wrap {
position: absolute;
top: 100px;
right: 40rpx;
z-index: 10;
}
.pass_icon {
width: 80px;
height: 80px;
}
.noData {
text-align: center;
font-size: 32rpx;
margin-top: 240rpx;
color: #bed0fb;
}
.noDataImg {
width: 250rpx;
height: 196rpx;
}
</style>