| <template> | 
|   <GlobalWindow :title="title" :visible.sync="isShowModal" @close="close" @confirm="confirm"> | 
|     <div class="modal_wrap"> | 
|       <div class="modal_content"> | 
|         <div class="header"> | 
|           <img v-if="info.status == '3' || info.status == '6'" class="head_bg" src="@/assets/task/bg_shenhe_fail@2x.png" | 
|             alt=""> | 
|           <img v-else-if="info.status == '2' || info.status == '5'" class="head_bg" | 
|             src="@/assets/task/bg_shenhe_pass@2x.png" alt=""> | 
|           <img v-else-if="info.status == '4'" class="head_bg" src="@/assets/task/bg_shenhe_chexiao@2x.png" alt=""> | 
|           <img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt=""> | 
|           <div class="left"> | 
|             <div class="h1">物流车预约</div> | 
|             <div class="time">提交时间:{{ info.createDate }}</div> | 
|           </div> | 
|           <div class="right" | 
|             :class="{ scs: info.status == '2' || info.status == '5', msg: info.status == '3' || info.status == '6' }">{{ | 
|               statusMap[info.status] }}</div> | 
|         </div> | 
|         <div class="info"> | 
|           <div class="title">物流车预约信息</div> | 
|           <div class="list"> | 
|             <div class="item"> | 
|               <div class="label">申请人</div> | 
|               <div class="value">{{ info.driverName }} {{ info.driverPhone }}</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">车牌照</div> | 
|               <div class="value">前 {{ info.carCodeFront }},后 {{ info.carCodeBack }}</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">合同/单据编号</div> | 
|               <div class="value">{{ info.contractNum }}</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">到厂时间</div> | 
|               <div class="value">{{ info.arriveDate }}</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">作业类型</div> | 
|               <div class="value">{{ info.inType == 0 ? '整托盘' : '件烟' }}</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">总运输量</div> | 
|               <div class="value">{{ info.totalNum || info.ioQty }}万支</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">准运证/运单照片</div> | 
|               <div v-if="info.transportImg" class="value"> | 
|                 <el-image style="width: 100px" :preview-src-list="[info.prefixUrl + info.transportImg]" | 
|                   :src="info.prefixUrl + info.transportImg" alt="" /> | 
|               </div> | 
|             </div> | 
|           </div> | 
|         </div> | 
|       </div> | 
|       <div class="side"> | 
|         <div class="side_title">审批流程</div> | 
|         <div class="list" v-if="info.approveDateVO != null && info.approveDateVO.approveList != null"> | 
|           <div class="item" v-for="item, index in info.approveDateVO.approveList"> | 
|             <div v-if="index != info.approveDateVO.approveList.length - 1" class="separate"></div> | 
|             <div class="info"> | 
|               <img src="@/assets/icons/ic_tongguo.png" class="iconnew" v-if="item.status == 2" /> | 
|               <img src="@/assets/icons/ic_dangqian.png" class="iconnew" v-if="item.status == 1" /> | 
|               <img src="@/assets/icons/ic_jujue.png" class="iconnew" v-if="item.status == 3" /> | 
|               <img src="@/assets/icons/ic_grey.png" class="iconnew" v-if="item.status == null || item.status == 0" /> | 
|             </div> | 
|             <div class="avatar_wrap"> | 
|               <img class="img" :src="item.faceImg | 
|                 ? item.faceImg | 
|                 : require('@/assets/avatar/man.png') | 
|                 " /> | 
|             </div> | 
|             <div class="content"> | 
|               <div class="head"> | 
|                 <div class="event">{{ item.title }}</div> | 
|                 <div class="time">{{ item.checkDate }}</div> | 
|               </div> | 
|               <div class="name_wrap"> | 
|                 <span>{{ item.memberName }}<span v-if="item.statusInfo" class="status">({{ item.statusInfo | 
|                     }})</span></span> | 
|               </div> | 
|               <div v-if="item.checkInfo" class="remark"> | 
|                 {{ item.checkInfo }} | 
|               </div> | 
|               <div v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="carbon"> | 
|                 <div class="carbon_item" v-for="child in item.approveList" :key="child.id"> | 
|                   <img v-if="child.faceImg != null && child.faceImg != ''" :src="child.faceImg" class="avatar" alt="" /> | 
|                   <img v-if="child.faceImg == null || child.faceImg == ''" src="@/assets/avatar/man.png" class="avatar" | 
|                     alt="" /> | 
|                   <div class="text">{{ child.memberName }}</div> | 
|                 </div> | 
|               </div> | 
|             </div> | 
|           </div> | 
|         </div> | 
|       </div> | 
|     </div> | 
|     <!--  --> | 
|     <template v-slot:footer> | 
|       <el-button @click="handleAppr(2)" type="primary" class="status-red" v-if=" | 
|         info.approveDateVO != null && | 
|         info.approveDateVO.canBeApproved != null && | 
|         info.approveDateVO.canBeApproved == 1 | 
|       ">同意</el-button> | 
|       <el-button @click="handleAppr(3)" type="danger" v-if=" | 
|         info.approveDateVO != null && | 
|         info.approveDateVO.canBeApproved != null && | 
|         info.approveDateVO.canBeApproved == 1 | 
|       ">拒绝</el-button> | 
|       <el-button @click="close">返回</el-button> | 
|     </template> | 
|     <!--  同意/拒绝 --> | 
|     <el-dialog append-to-body :title="apprTitle" :visible.sync="isShowAppr" width="480px"> | 
|       <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> | 
|         <el-form-item :prop="param.status == 3 ? 'checkInfo' : ''" :label="param.status == 2 ? '同意说明' : '拒绝说明'"> | 
|           <el-input type="textarea" :placeholder="param.status == 2 ? '同意说明,非必填' : '拒绝说明必填' | 
|             " :rows="4" v-model="param.checkInfo" /> | 
|         </el-form-item> | 
|       </el-form> | 
|       <span slot="footer" class="dialog-footer"> | 
|         <el-button @click="isShowAppr = false">取消</el-button> | 
|         <el-button :loading="subLoading" type="primary" @click="onSubAppr">确定</el-button> | 
|       </span> | 
|     </el-dialog> | 
|   </GlobalWindow> | 
| </template> | 
|   | 
| <script> | 
| import GlobalWindow from '@/components/common/GlobalWindow' | 
| import { | 
|   getDriverJobDetail, | 
|   approveDo | 
| } from '@/api' | 
| export default { | 
|   components: { GlobalWindow }, | 
|   data() { | 
|     return { | 
|       id: '', | 
|       type: '', | 
|   | 
|       title: '物流车预约详情', | 
|       isShowModal: false, | 
|       info: {}, | 
|       isShowAppr: false, | 
|       apprTitle: '同意', | 
|       subLoading: false, | 
|       param: {}, | 
|   | 
|       isShowProblem: false, | 
|       rules: { | 
|         checkInfo: [{ required: true, message: '请输入', trigger: 'blur' }] | 
|       }, | 
|       statusMap: { | 
|         0: '待审核', | 
|         1: '处理中', | 
|         2: '已同意', | 
|         3: '已拒绝', | 
|         4: '已取消', | 
|         5: '他人或签', | 
|         6: '他人拒绝' | 
|       }, | 
|       cateList: { | 
|         0: '访客申请', | 
|         1: '访客报备', | 
|         2: '用车申请', | 
|         3: '隐患随手拍', | 
|         4: '物流车申请' | 
|       } | 
|     } | 
|   }, | 
|   methods: { | 
|     onSubAppr() { | 
|       this.$refs.ruleForm.validate((valid) => { | 
|         if (!valid) { | 
|           return | 
|         } | 
|         this.$dialog.actionConfirm('操作确认', this.param.status === 2 ? '您确认同意该申请吗?' : '您确认拒绝该申请吗?') | 
|           .then(() => { | 
|             this.subLoading = true | 
|             approveDo({ | 
|               objId: this.id, | 
|               objType: 6, | 
|               status: this.param.status, | 
|               checkInfo: this.param.checkInfo | 
|             }) | 
|               .then(res => { | 
|                 this.subLoading = false | 
|                 this.$tip.apiSuccess('处理成功') | 
|                 this.getDetail() | 
|                 this.$emit('success') | 
|                 this.$emit('close') | 
|                 this.isShowAppr = false | 
|               }) | 
|               .finally(() => { | 
|                 this.subLoading = false | 
|               }) | 
|           }) | 
|       }) | 
|     }, | 
|     getDetail() { | 
|       const { id } = this | 
|       getDriverJobDetail(id).then(res => { | 
|         this.info = res | 
|         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.approveList = [] | 
|             } | 
|           }) | 
|         } | 
|       }) | 
|     }, | 
|     close() { | 
|       this.isShowModal = false | 
|       this.$emit('close') | 
|     }, | 
|     handleAppr(val) { | 
|       this.$set(this.param, 'status', val) | 
|       this.apprTitle = val == 2 ? '同意' : '拒绝' | 
|       this.isShowAppr = true | 
|     }, | 
|     confirm() { | 
|       console.log('--') | 
|     }, | 
|     handleTransfer() { | 
|       this.isShowProblem = true | 
|     }, | 
|     reject() { }, | 
|     handleAvatarSuccess() { }, | 
|     beforeAvatarUpload() { } | 
|   } | 
| } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
| @import "@/assets/style/variables.scss"; | 
|   | 
| .upload_box { | 
|   width: 84px; | 
|   height: 84px; | 
|   border-radius: 4px; | 
|   background-color: #f7f7f7; | 
|   display: flex; | 
|   flex-direction: column; | 
|   justify-content: center; | 
|   align-items: center; | 
|   color: #999999; | 
|   border: 1px solid #e4e4e4; | 
|   | 
|   .icon { | 
|     font-size: 24px; | 
|   } | 
|   | 
|   .text { | 
|     font-size: 12px; | 
|   } | 
| } | 
|   | 
| .side_title { | 
|   font-weight: 600; | 
|   font-size: 18px; | 
|   color: #111111; | 
|   margin-bottom: 20px; | 
|   margin-left: 20px; | 
|   margin-top: 20px; | 
| } | 
|   | 
| .modal_wrap { | 
|   display: flex; | 
|   height: 100%; | 
|   | 
|   .modal_content { | 
|     flex: 1; | 
|     padding: 0px 30px; | 
|     border-radius: 8px; | 
|     overflow: hidden; | 
|     height: 100%; | 
|   | 
|     .title { | 
|       font-weight: 600; | 
|       font-size: 18px; | 
|       color: #333333; | 
|       margin-bottom: 20px; | 
|       margin-top: 30px; | 
|     } | 
|   | 
|     .info { | 
|       .list { | 
|         display: flex; | 
|         flex-wrap: wrap; | 
|   | 
|         .item { | 
|           display: flex; | 
|           width: 40%; | 
|           margin-bottom: 20px; | 
|   | 
|           &:nth-of-type(2n) { | 
|             width: 60%; | 
|           } | 
|   | 
|           .label { | 
|             color: #888888; | 
|             width: 100px; | 
|           } | 
|   | 
|           .value { | 
|             color: #111111; | 
|           } | 
|         } | 
|       } | 
|     } | 
|   | 
|     .header { | 
|       display: flex; | 
|       justify-content: space-between; | 
|       align-items: center; | 
|       padding: 20px 30px; | 
|       margin: 0 -30px; | 
|       border-radius: 8px 8px 0 0; | 
|       position: relative; | 
|   | 
|       .head_bg { | 
|         position: absolute; | 
|         width: 100%; | 
|         height: 100%; | 
|         left: 0; | 
|         top: 0; | 
|         z-index: 9; | 
|       } | 
|   | 
|       .h1 { | 
|         font-weight: 600; | 
|         font-size: 22px; | 
|         color: #111111; | 
|         margin-bottom: 8px; | 
|       } | 
|   | 
|       .time { | 
|         font-size: 14px; | 
|         color: #999999; | 
|       } | 
|   | 
|       .right { | 
|         height: 40px; | 
|         font-size: 16px; | 
|         color: #ffffff; | 
|         line-height: 40px; | 
|         padding: 0 20px; | 
|         background: #207ff7; | 
|         box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16); | 
|         border-radius: 16px 0px 16px 0px; | 
|         position: relative; | 
|         z-index: 99; | 
|       } | 
|   | 
|       .scs { | 
|         background-color: #00BA67; | 
|       } | 
|   | 
|       .msg { | 
|         background-color: #ED4545; | 
|       } | 
|     } | 
|   | 
|     .table_info { | 
|       .name_wrap { | 
|         display: flex; | 
|         align-items: center; | 
|   | 
|         .avatar { | 
|           width: 40px; | 
|           height: 40px; | 
|           border-radius: 50%; | 
|           margin-right: 12px; | 
|         } | 
|   | 
|         .content { | 
|           .line { | 
|             display: flex; | 
|           } | 
|   | 
|           .tag { | 
|             color: #b2cbf9; | 
|             border: 1px solid #b2cbf9; | 
|             padding: 0px 4px; | 
|             border-radius: 4px; | 
|             margin-left: 6px; | 
|           } | 
|         } | 
|       } | 
|     } | 
|   } | 
|   | 
|   .side { | 
|     height: 100%; | 
|     width: 420px; | 
|     background: #ffffff; | 
|     border-left: 20px solid #f7f7f7; | 
|   | 
|     .list { | 
|       .item { | 
|         padding: 8px 0; | 
|         display: flex; | 
|         margin-bottom: 24px; | 
|         position: relative; | 
|   | 
|         .separate { | 
|           position: absolute; | 
|           border-left: 2px dashed #cccccc; | 
|           left: 31px; | 
|           height: calc(100% - 2px); | 
|           top: 42px; | 
|         } | 
|   | 
|         .info { | 
|           padding-top: 10px; | 
|           margin-left: 20px; | 
|           margin-right: 16px; | 
|   | 
|           .iconnew { | 
|             width: 24px; | 
|             height: 24px; | 
|           } | 
|         } | 
|   | 
|         .avatar_wrap { | 
|           width: 40px; | 
|           height: 40px; | 
|           position: relative; | 
|           margin-right: 10px; | 
|   | 
|           .img { | 
|             width: 40px; | 
|             height: 40px; | 
|             border-radius: 50%; | 
|           } | 
|   | 
|           .status { | 
|             width: 14px; | 
|             height: 14px; | 
|             border-radius: 50%; | 
|             position: absolute; | 
|             right: 0; | 
|             bottom: 0; | 
|           } | 
|   | 
|         } | 
|   | 
|         .content { | 
|           flex: 1; | 
|   | 
|           .head { | 
|             display: flex; | 
|             justify-content: space-between; | 
|             margin-bottom: 2px; | 
|   | 
|             .event { | 
|               font-size: 15px; | 
|             } | 
|   | 
|             .time { | 
|               font-size: 13px; | 
|               color: #999999; | 
|             } | 
|           } | 
|   | 
|           .name_wrap { | 
|             font-size: 13px; | 
|             color: #777777; | 
|   | 
|             .status { | 
|               color: $primaryColor; | 
|             } | 
|           } | 
|   | 
|           .remark { | 
|             margin-top: 6px; | 
|             background-color: #f7f7f7; | 
|             padding: 7px 10px; | 
|             border-radius: 4px; | 
|             font-size: 13px; | 
|             color: #666666; | 
|             line-height: 18px; | 
|           } | 
|         } | 
|   | 
|         .carbon { | 
|           display: flex; | 
|           width: 100%; | 
|           overflow-x: auto; | 
|           margin-top: 12px; | 
|   | 
|           .carbon_item { | 
|             text-align: center; | 
|             flex-shrink: 0; | 
|             width: 60px; | 
|   | 
|             img { | 
|               width: 36px; | 
|               height: 36px; | 
|               margin: 0 auto; | 
|             } | 
|   | 
|             div { | 
|               font-size: 13px; | 
|               color: #777777; | 
|             } | 
|           } | 
|         } | 
|       } | 
|     } | 
|   } | 
| } | 
| </style> |