<template>  
 | 
    <view class="main_app">  
 | 
        <view class="status_wrap">  
 | 
            <view class="name">{{ info.name }}提交的访客申请</view>  
 | 
            <view class="desc" :class="{  
 | 
          gray: info.businessStatus == '2' || info.businessStatus == '3' || info.businessStatus == '4',  
 | 
        }">{{ statusMap[info.businessStatus] }}</view>  
 | 
            <view v-if="info.businessStatus == '0' || info.businessStatus == '1'" class="status">{{  
 | 
        info.info  
 | 
      }}</view>  
 | 
            <image v-if="info.businessStatus == '2'" src="@/static/ic_passed@2x.png" mode="widthFix" class="status_img">  
 | 
            </image>  
 | 
            <image v-if="info.businessStatus == '3'" src="@/static/ic_refused@2x.png" mode="widthFix" class="status_img">  
 | 
            </image>  
 | 
        </view>  
 | 
        <!--  -->  
 | 
        <view class="emyty"></view>  
 | 
        <view class="module_list">  
 | 
            <view class="item">  
 | 
                <view class="label">被访人</view>  
 | 
                <view class="value">{{ info.visitUserName }}</view>  
 | 
            </view>  
 | 
            <view class="item">  
 | 
                <view class="label">预计入/离园时间</view>  
 | 
                <view class="value" v-if="info.visitTime">{{ info.visitTime }}</view>  
 | 
            </view>  
 | 
            <view class="emyty"></view>  
 | 
            <view class="item">  
 | 
                <view class="label">访客信息</view>  
 | 
                <view class="value">  
 | 
                    <image class="avatar" :src="  
 | 
              info.prefix  
 | 
                ? info.prefix + info.faceImg  
 | 
                : require('@/static/meeting/common/default_user@2x.png')  
 | 
            " mode="widthFix"></image>  
 | 
                    <view class="info">  
 | 
                        <text class="name">{{ info.name }} {{ info.phone }}</text>  
 | 
                        <text>身份证号:{{ info.idCardDecode }}</text>  
 | 
                        <text>入园车辆:{{ info.carNos }}</text>  
 | 
                    </view>  
 | 
                </view>  
 | 
            </view>  
 | 
            <view class="item">  
 | 
                <view class="label">公司名称</view>  
 | 
                <view class="value">{{ info.companyName }}</view>  
 | 
            </view>  
 | 
            <view class="item">  
 | 
                <view class="label">是否涉及施工作业</view>  
 | 
                <view class="value">{{ info.type == 0 ? "否" : "是" }}</view>  
 | 
            </view>  
 | 
            <view class="item">  
 | 
                <view class="label">来访事由</view>  
 | 
                <view class="value">{{ info.visitReason }}</view>  
 | 
            </view>  
 | 
            <view v-if="info.constructionReason" class="item">  
 | 
                <view class="label">施工内容</view>  
 | 
                <view class="value">{{ info.constructionReason }}</view>  
 | 
            </view>  
 | 
        </view>  
 | 
        <!-- 流程 -->  
 | 
        <view class="flow_wrap">  
 | 
            <view class="flow_title">流程</view>  
 | 
            <view class="list" v-if="  
 | 
          info.approveDateVO != null && info.approveDateVO.approveList != null  
 | 
        ">  
 | 
                <view class="item" v-for="(item, index) in info.approveDateVO.approveList" :key="item.id">  
 | 
                    <view class="separate"></view>  
 | 
                    <view class="avatar">  
 | 
                        <image v-if="item.type == 1" class="img" src="@/static/staff/ic_chaosong@2x.png" />  
 | 
                        <image v-else-if="item.approveType == 1 || item.approveType == 0" class="img"  
 | 
                            src="@/static/staff/ic_shenpiren@2x.png" /> 
 | 
                        <image v-else-if="item.faceImg" :src="item.faceImg" class="img"></image>  
 | 
                        <span v-else class="img_name">{{item.memberName && item.memberName.slice(0,1)}}</span>  
 | 
                        <image v-if="item.status == 2" class="status" src="@/static/staff/liucheng_success@2x.png"  
 | 
                            mode="widthFix" />  
 | 
                        <image v-if="item.status == 3" class="status" src="@/static/staff/liucheng_fail@2x.png" mode="widthFix" />  
 | 
                    </view>  
 | 
                    <view class="content">  
 | 
                        <view class="head">  
 | 
                            <view class="event">{{ item.title }}</view>  
 | 
                            <view class="time">{{ item.checkDate }}</view>  
 | 
                        </view>  
 | 
                        <view class="name_wrap">  
 | 
                            <text>{{ item.memberName  
 | 
                }}<text :class="{ status: item.statusInfo == '处理中' || item.status == '1'  }"  
 | 
                                    v-if="item.statusInfo">({{ item.statusInfo }})</text></text>  
 | 
                        </view>  
 | 
                        <view v-if="item.checkInfo" class="remark">{{  
 | 
              item.checkInfo  
 | 
            }}</view>  
 | 
                        <!-- 抄送人 -->  
 | 
                        <view v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="children">  
 | 
                            <view class="child" v-for="child in item.approveList" :key="child.id">  
 | 
                                <image v-if="child.faceImg" class="child_img" :src="child.faceImg" />  
 | 
                                <view v-else class="child_name">{{ child.memberName && child.memberName.slice(0,1) }}</view>  
 | 
                                <view>{{ child.memberName }}</view>  
 | 
                            </view>  
 | 
                        </view>  
 | 
                    </view>  
 | 
                </view>  
 | 
            </view>  
 | 
        </view>  
 | 
        <view class="emyty"></view>  
 | 
        <view v-if="  
 | 
        info.approveDateVO != null &&  
 | 
        info.approveDateVO.canBeApproved != null &&  
 | 
        info.approveDateVO.canBeApproved == 1  
 | 
      " class="main_footer">  
 | 
            <view class="btn" @click="cancelShow = true" v-if="checkAuth('business:visits:cancel') && [0,1,2,5].includes(info.status)">取消预约</view>  
 | 
            <view style="width: 30rpx; height: 100%;"></view>  
 | 
            <view class="btn" @click="handleSub(3)">拒绝</view>  
 | 
            <view style="width: 30rpx; height: 100%;"></view>  
 | 
            <view class="btn agree" @click="handleSub(2)">同意</view>  
 | 
        </view>  
 | 
  
 | 
        <u-popup :show="showApprModal" :round="10" :safeAreaInsetBottom="true" mode="bottom" @close="showApprModal = false">  
 | 
            <view class="appr_modal">  
 | 
                <view class="title">{{ param.status == 2 ? "同意" : "拒绝" }}</view>  
 | 
                <textarea v-model="param.checkInfo" :placeholder="  
 | 
            param.status == 2 ? '同意说明,非必填' : '拒绝说明,必填'  
 | 
          " placeholder-class="placeholder9" />  
 | 
                <view class="main_footer">  
 | 
                    <view class="btn" @click="showApprModal = false">取消</view>  
 | 
                    <view style="width: 30rpx; height: 100%;"></view>  
 | 
                    <view class="btn agree" @click="onSubmit">提交</view>  
 | 
                </view>  
 | 
            </view>  
 | 
        </u-popup>  
 | 
        <!-- 取消预约弹窗 -->  
 | 
        <u-modal  
 | 
            :show="cancelShow"  
 | 
            :showCancelButton="true"  
 | 
            title="系统提示"  
 | 
            content='确定取消当前预约吗?'  
 | 
            @cancel="cancelShow = false"  
 | 
            @confirm="cancel" />  
 | 
    </view>  
 | 
</template>  
 | 
  
 | 
<script>  
 | 
    import {  
 | 
        getVisitedDetail, // 访客预约详情  
 | 
        carUseBookAppr  
 | 
    } from '@/api'  
 | 
    export default {  
 | 
        data() {  
 | 
            return {  
 | 
                userInfo: uni.getStorageSync('userInfo') || {  
 | 
                    permissions: []  
 | 
                },  
 | 
                showApprModal: false,  
 | 
                param: {},  
 | 
                info: {},  
 | 
  
 | 
                id: '',  
 | 
                type: '',  
 | 
                infoStatus: '',  
 | 
                cateList: [{  
 | 
                        name: '访客申请',  
 | 
                        id: 0  
 | 
                    },  
 | 
                    {  
 | 
                        name: '访客报备',  
 | 
                        id: 1  
 | 
                    },  
 | 
                    {  
 | 
                        name: '用车申请',  
 | 
                        id: 2  
 | 
                    },  
 | 
                    {  
 | 
                        name: '隐患随手拍',  
 | 
                        id: 3  
 | 
                    },  
 | 
                    {  
 | 
                        name: '物流车申请',  
 | 
                        id: 4  
 | 
                    },  
 | 
                ],  
 | 
                statusMap: {  
 | 
                    0: '待审批',  
 | 
                    1: '审批中',  
 | 
                    2: '已通过',  
 | 
                    3: '已拒绝',  
 | 
                    4: '已取消',  
 | 
                },  
 | 
                cancelShow: false  
 | 
            }  
 | 
        },  
 | 
        onLoad(op) { 
 | 
            uni.setStorageSync('ywinfo',{})  
 | 
            this.id = op.id  
 | 
            this.getDetail()  
 | 
        },  
 | 
        methods: {  
 | 
            // 取消预约  
 | 
            cancel() {  
 | 
                visitsCancel(this.id).then(res => {  
 | 
                    this.getDetail()  
 | 
                })  
 | 
            },  
 | 
            checkAuth(str) {  
 | 
                const permissions = this.userInfo.permissions || []  
 | 
                return permissions.indexOf(str) > -1  
 | 
            },  
 | 
            getDetail() {  
 | 
                const {  
 | 
                    id  
 | 
                } = this  
 | 
                getVisitedDetail({  
 | 
                    id  
 | 
                }).then(res => {  
 | 
                    this.info = res.data  
 | 
                    if (this.info.approveDateVO && this.info.approveDateVO.approveList.length > 0) {  
 | 
                        this.info.approveDateVO.approveList.forEach(item => {  
 | 
                            if (item.approveList && item.approveList.length == 1 && item.type !== 1) {  
 | 
                                item.title = item.approveList[0].title  
 | 
                                item.faceImg = item.approveList[0].faceImg  
 | 
                                item.memberName = item.approveList[0].memberName  
 | 
                                item.statusInfo = item.approveList[0].statusInfo  
 | 
                                item.status = item.approveList[0].status  
 | 
                                item.approveList = []  
 | 
                            }  
 | 
                        })  
 | 
                    }  
 | 
                })  
 | 
            },  
 | 
            onSubmit() {  
 | 
                const {  
 | 
                    param,  
 | 
                    info  
 | 
                } = this  
 | 
                if (param.status == '3' && !param.checkInfo) {  
 | 
                    return uni.showToast({  
 | 
                        title: '请输入拒绝说明',  
 | 
                        icon: 'none'  
 | 
                    })  
 | 
                }  
 | 
                carUseBookAppr({  
 | 
                    status: param.status,  
 | 
                    objType: info.type,  
 | 
                    objId: this.id,  
 | 
                    // driverId: param.driverId,  
 | 
                    checkInfo: param.checkInfo  
 | 
                }).then(res => {  
 | 
                    if (res.code === 200) {  
 | 
                        this.showApprModal = false  
 | 
                        setTimeout(() => {  
 | 
                            uni.showToast({  
 | 
                                title: '操作成功',  
 | 
                                icon: 'success'  
 | 
                            })  
 | 
                        })  
 | 
                        uni.navigateBack()  
 | 
                    }  
 | 
                })  
 | 
            },  
 | 
            handleSub(status) {  
 | 
                // this.param.flag =   
 | 
                this.param = {  
 | 
                    status  
 | 
                }  
 | 
                this.showApprModal = true  
 | 
            },  
 | 
        },  
 | 
    }  
 | 
</script>  
 | 
<style>  
 | 
    page {  
 | 
        background-color: #f7f7f7;  
 | 
    }  
 | 
</style>  
 | 
<style lang="scss">  
 | 
    .main_app {  
 | 
        background-color: #fff;  
 | 
        padding-bottom: 0;  
 | 
  
 | 
        .flow_wrap {  
 | 
            padding: 30rpx 0;  
 | 
            .flow_title {  
 | 
                font-weight: 600;  
 | 
                font-size: 32rpx;  
 | 
                color: #222222;  
 | 
                margin-bottom: 24rpx;  
 | 
            }  
 | 
  
 | 
            .list {  
 | 
                .item {  
 | 
                    display: flex;  
 | 
                    margin-bottom: 48rpx;  
 | 
                    position: relative;  
 | 
  
 | 
                    .separate {  
 | 
                        position: absolute;  
 | 
                        width: 4rpx;  
 | 
                        height: 100%;  
 | 
                        background-color: #eeeeee;  
 | 
                        left: 40rpx;  
 | 
                        transform: translate(-50%, 0);  
 | 
                        top: 80rpx;  
 | 
                    }  
 | 
  
 | 
                    .avatar {  
 | 
                        width: 80rpx;  
 | 
                        height: 80rpx;  
 | 
                        position: relative;  
 | 
                        margin-right: 20rpx;  
 | 
                        display: flex;  
 | 
                        align-items: center;  
 | 
                        justify-content: center;  
 | 
  
 | 
                        .img {  
 | 
                            width: 80rpx;  
 | 
                            height: 80rpx;  
 | 
                            border-radius: 50%;  
 | 
                        }  
 | 
  
 | 
                        .img_name {  
 | 
                            font-size: 32rpx;  
 | 
                            color: #FFFFFF;  
 | 
                        }  
 | 
  
 | 
                        .status {  
 | 
                            width: 28rpx;  
 | 
                            height: 28rpx;  
 | 
                            border-radius: 50%;  
 | 
                            position: absolute;  
 | 
                            right: 0;  
 | 
                            bottom: 0;  
 | 
                        }  
 | 
                    }  
 | 
  
 | 
                    .content {  
 | 
                        flex: 1;  
 | 
  
 | 
                        .head {  
 | 
                            display: flex;  
 | 
                            justify-content: space-between;  
 | 
                            margin-bottom: 4rpx;  
 | 
  
 | 
                            .event {  
 | 
                                font-size: 30rpx;  
 | 
                            }  
 | 
  
 | 
                            .time {  
 | 
                                font-size: 26rpx;  
 | 
                                color: #999999;  
 | 
                            }  
 | 
                        }  
 | 
  
 | 
                        .name_wrap {  
 | 
                            font-size: 26rpx;  
 | 
                            color: #777777;  
 | 
  
 | 
                            .status {  
 | 
                                color: $uni-color-primary;  
 | 
                            }  
 | 
                        }  
 | 
  
 | 
                        .children {  
 | 
                            display: flex;  
 | 
                            flex-wrap: wrap;  
 | 
                            margin-top: 12rpx;  
 | 
  
 | 
                            .child {  
 | 
                                display: flex;  
 | 
                                flex-direction: column;  
 | 
                                justify-content: center;  
 | 
                                align-items: center;  
 | 
                                margin-right: 12rpx;  
 | 
                                font-size: 26rpx;  
 | 
                                color: #777777;  
 | 
  
 | 
                                .child_img {  
 | 
                                    width: 48rpx;  
 | 
                                    height: 48rpx;  
 | 
                                    border-radius: 50%;  
 | 
                                    margin-bottom: 2rpx;  
 | 
                                }  
 | 
  
 | 
                                .child_name {  
 | 
                                    margin-bottom: 2rpx;  
 | 
                                    width: 48rpx;  
 | 
                                    height: 48rpx;  
 | 
                                    text-align: center;  
 | 
                                    justify-content: center;  
 | 
                                    padding-top: 4rpx;  
 | 
                                    font-size: 28rpx;  
 | 
                                    border-radius: 50%;  
 | 
                                    color: #FFFFFF;  
 | 
                                    background-color: $uni-color-primary;  
 | 
                                }  
 | 
                            }  
 | 
                        }  
 | 
  
 | 
                        .remark {  
 | 
                            margin-top: 12rpx;  
 | 
                            background-color: #f7f7f7;  
 | 
                            padding: 14rpx 20rpx;  
 | 
                            border-radius: 8rpx;  
 | 
                            font-size: 26rpx;  
 | 
                            color: #666666;  
 | 
                            line-height: 36rpx;  
 | 
                        }  
 | 
                    }  
 | 
  
 | 
                    .carbon {  
 | 
                        display: flex;  
 | 
                        width: 590rpx;  
 | 
                        overflow-x: auto;  
 | 
                        margin-top: 12rpx;  
 | 
  
 | 
                        .carbon_item {  
 | 
                            text-align: center;  
 | 
                            flex-shrink: 0;  
 | 
                            width: 100rpx;  
 | 
  
 | 
                            image {  
 | 
                                width: 60rpx;  
 | 
                                height: 60rpx;  
 | 
                                margin: 0 auto;  
 | 
                            }  
 | 
  
 | 
                            view {  
 | 
                                font-size: 26rpx;  
 | 
                                color: #777777;  
 | 
                            }  
 | 
                        }  
 | 
                    }  
 | 
  
 | 
                    &:nth-last-child(1) {  
 | 
                        .separate {  
 | 
                            height: 0;  
 | 
                        }  
 | 
                    }  
 | 
                }  
 | 
            }  
 | 
        }  
 | 
  
 | 
        .module_list {  
 | 
            .item {  
 | 
                padding: 30rpx 0;  
 | 
                border-bottom: 1rpx solid #e5e5e5;  
 | 
  
 | 
                .label {  
 | 
                    font-size: 26rpx;  
 | 
                    color: #666666;  
 | 
                    margin-bottom: 20rpx;  
 | 
                }  
 | 
  
 | 
                .value {  
 | 
                    font-size: 30rpx;  
 | 
                    display: flex;  
 | 
                    align-items: center;  
 | 
  
 | 
                    .avatar {  
 | 
                        margin-right: 20rpx;  
 | 
                        width: 120rpx;  
 | 
                        height: 120rpx;  
 | 
                        border-radius: 8rpx;  
 | 
                        border: 2rpx solid #e5e5e5;  
 | 
                    }  
 | 
  
 | 
                    .info {  
 | 
                        flex: 1;  
 | 
                        display: flex;  
 | 
                        flex-direction: column;  
 | 
                        justify-content: space-between;  
 | 
                        font-size: 26rpx;  
 | 
                        color: #666666;  
 | 
  
 | 
                        .name {  
 | 
                            font-size: 30rpx;  
 | 
                            color: #333333;  
 | 
                        }  
 | 
                    }  
 | 
                }  
 | 
            }  
 | 
        }  
 | 
  
 | 
        .status_wrap {  
 | 
            position: relative;  
 | 
            padding: 30rpx 0;  
 | 
  
 | 
            .name {  
 | 
                font-weight: 600;  
 | 
                font-size: 32rpx;  
 | 
                margin-bottom: 20rpx;  
 | 
                color: #222222;  
 | 
            }  
 | 
  
 | 
            .desc {  
 | 
                font-size: 26rpx;  
 | 
                color: #ed4545;  
 | 
            }  
 | 
  
 | 
            .gray {  
 | 
                color: #999999;  
 | 
            }  
 | 
  
 | 
            .status {  
 | 
                position: absolute;  
 | 
                right: -30rpx;  
 | 
                top: 0;  
 | 
                height: 60rpx;  
 | 
                line-height: 60rpx;  
 | 
                padding: 0 32rpx;  
 | 
                border-radius: 0rpx 0rpx 0rpx 30rpx;  
 | 
                background-color: #e9edff;  
 | 
                color: $uni-color-primary;  
 | 
            }  
 | 
  
 | 
            .status_img {  
 | 
                position: absolute;  
 | 
                right: 0rpx;  
 | 
                top: 20rpx;  
 | 
                width: 120rpx;  
 | 
            }  
 | 
        }  
 | 
  
 | 
        .main_footer {  
 | 
            padding-bottom: 64rpx;  
 | 
            display: flex;  
 | 
            justify-content: space-between;  
 | 
            width: 100%;  
 | 
            left: 0;  
 | 
            // padding: 30rpx 10rpx 60rpx;  
 | 
            display: flex;  
 | 
            justify-content: space-between;  
 | 
            background: #ffffff;  
 | 
  
 | 
            .btn {  
 | 
                // width: 336rpx;  
 | 
                flex: 1;  
 | 
                height: 88rpx;  
 | 
                line-height: 88rpx;  
 | 
                background: #ffffff;  
 | 
                border-radius: 44rpx;  
 | 
                border: 1rpx solid #999999;  
 | 
                font-size: 32rpx;  
 | 
                text-align: center;  
 | 
                margin: 16rpx 0;  
 | 
            }  
 | 
  
 | 
            .agree {  
 | 
                background: $uni-color-primary;  
 | 
                color: #fff;  
 | 
                border: 1rpx solid $uni-color-primary;  
 | 
            }  
 | 
        }  
 | 
  
 | 
        .appr_modal {  
 | 
            padding: 36rpx 30rpx 0;  
 | 
  
 | 
            .title {  
 | 
                font-weight: 600;  
 | 
                font-size: 32rpx;  
 | 
                color: #222222;  
 | 
                margin-bottom: 40rpx;  
 | 
                text-align: center;  
 | 
            }  
 | 
  
 | 
            textarea {  
 | 
                box-sizing: border-box;  
 | 
                width: 690rpx;  
 | 
                background-color: #f7f7f7;  
 | 
                font-size: 28rpx;  
 | 
                color: #333333;  
 | 
                padding: 24rpx;  
 | 
                border-radius: 8rpx;  
 | 
                margin-bottom: 30rpx;  
 | 
            }  
 | 
        }  
 | 
  
 | 
        .emyty {  
 | 
            width: 750rpx;  
 | 
            height: 20rpx;  
 | 
            background-color: #f7f7f7;  
 | 
            margin: 0 -30rpx;  
 | 
        }  
 | 
    }  
 | 
</style> 
 |