| <template> | 
|   <GlobalWindow | 
|       :title="title" | 
|       :visible.sync="visible" | 
|       @confirm="confirm" | 
|   > | 
|     <div class="modal_wrap"> | 
|       <div class="modal_content"> | 
|         <div class="header"> | 
|           <div class="left"> | 
|             <div class="h1">公务车申请</div> | 
|             <div class="time">提交时间:{{model.createDate}}</div> | 
|           </div> | 
|           <span class="right"  v-if="model.status === 0">申请中</span> | 
|           <span class="right"  v-if="model.status === 1">审批中</span> | 
|           <span class="right" style="background:#53b76f " v-if="model.status === 2">审批通过</span> | 
|           <span class="right" style="background:#dc362e " v-if="model.status === 3">审批不通过</span> | 
|           <span class="right" style="background:#B2B2B2; " v-if="model.status === 4">已撤销</span> | 
|         </div> | 
|         <div class="info"> | 
|           <div class="title">公务车申请信息</div> | 
|           <div class="list"> | 
|             <div class="item" style="width: 100%"> | 
|               <div class="label">申请人</div> | 
|               <div class="value">{{model.memberName || ''}} {{model.memberPhone || ''}} ({{model.companyName || ''}})</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">申请车辆</div> | 
|               <div class="value">{{model.carCode || ''}}</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">司机信息</div> | 
|               <div class="value" v-if="model.driverId !=null">{{model.driverName || ''}} {{model.driverPhone || ''}}</div> | 
|               <div class="value" v-if="model.driverId ==null">未指派</div> | 
|             </div> | 
|             <div class="item"  > | 
|             <div class="label">用车事由</div> | 
|             <div class="value">{{model.content}}</div> | 
|           </div> | 
|             <div class="item"> | 
|               <div class="label">乘车人员</div> | 
|               <div class="value">{{model.memberNames || ''}}</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">目的地类别</div> | 
|               <div class="value status-green" v-if="model.type == 0">【市内用车】</div> | 
|               <div class="value status-red"   v-if="model.type == 1">【市外用车】</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">目的地</div> | 
|               <div class="value">{{model.addr || ''}}</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">预计出发时间</div> | 
|               <div class="value">{{model.planUseDate || ''}}</div> | 
|             </div> | 
|             <div class="item"> | 
|               <div class="label">用车时段</div> | 
|               <div class="value">始:{{model.startTime || ''}}<br>止:{{model.endTime || ''}}</div> | 
|             </div> | 
|           </div> | 
|         </div> | 
|       </div> | 
|       <div class="side"> | 
|         <div class="side_title">审批流程</div> | 
|         <div class="list"  v-if="model.approveDateVO !=null && model.approveDateVO.approveList !=null"> | 
|           <div class="item" v-for="(item,index) in model.approveDateVO.approveList" :key="item.id"> | 
|             <div class="separate" v-if=" (index < model.approveDateVO.approveList.length-1)"></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 style="display: inline" v-if="item.approveType !=1"> | 
|                 <img v-if="item.faceImg!=null && item.faceImg !=''" :src="item.faceImg" class="avatar" alt="" /> | 
|                 <img v-if="item.faceImg ==null ||item.faceImg ==''"  src="@/assets/avatar/man.png" class="avatar" alt="" /> | 
|               </div> | 
|               <div style="display: inline" v-if="item.approveType  == 1"> | 
|                 <img  v-if="item.type !=1"  src="@/assets/icons/ic_duoren.png" class="avatar" alt="" /> | 
|                 <img v-if="item.type == 1"  src="@/assets/icons/ic_chaosong.png" class="avatar" alt="" /> | 
|               </div> | 
|               <div class="content"> | 
|                 <div class="line"> | 
|                   <div class="name">{{ item.title}}</div> | 
|                   <div class="time">{{ item.checkDate }}</div> | 
|                 </div> | 
|                 <div class="line"> | 
|                   <div class="company"> | 
|                     {{ item.memberName }} | 
|                     <div style="display: inline" v-if="item.statusInfo!=null && item.statusInfo!=''"> | 
|                        (<span class="status-green">{{item.statusInfo ||''}}</span>) | 
|                     </div> | 
|                   </div> | 
|                 </div> | 
|               </div> | 
|             </div> | 
|             <div v-if="item.approveType != 1 && item.checkInfo !=null && item.checkInfo !=''" class="remark"> | 
|               {{ item.checkInfo || '' }} | 
|             </div> | 
|             <div v-if="item.approveType == 1 "  class="childList"> | 
|               <div class="m_content company" v-for="item1 in item.approveList" :key="item1.id"> | 
|                 <img v-if="item1.faceImg!=null && item1.faceImg !=''" :src="item1.faceImg" class="avatar" alt="" /> | 
|                 <img v-if="item1.faceImg ==null ||item1.faceImg ==''"  src="@/assets/avatar/man.png" class="avatar" alt="" /> | 
|                 <span > {{item1.memberName}}</span> | 
|               </div> | 
|             </div> | 
|           </div> | 
|         </div> | 
|       </div> | 
|     </div> | 
|     <!--  --> | 
|     <template   v-slot:footer> | 
|       <el-button @click="agreeOpen"  type="primary"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  class="status-red">同意</el-button> | 
|       <el-button @click="jectOpen"  type="danger"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  >拒绝</el-button> | 
|       <el-button @click="visible=false">返回</el-button> | 
|     </template> | 
|     <el-dialog | 
|         append-to-body | 
|         title="同意申请" | 
|         style="text-align: center" | 
|         class="dialogCl" | 
|         :visible.sync="isShowProblem" | 
|         width="480px" | 
|     > | 
|       <el-form :model="dealForm" :rules="rules" ref="dealForm" > | 
|         <!-- <el-form-item label="派车司机" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam === 1"> --> | 
|         <el-form-item label="派车司机" prop="driverId" v-if="model.approveDateVO!=null && model.approveDateVO.driverParam == 1"> | 
|           <el-select v-model="dealForm.driverId" style="width: 300px"  filterable clearable placeholder="请选择派遣司机"> | 
|             <el-option | 
|                 v-for="item in memberList" | 
|                 :key="item.id" | 
|                 :label="item.name+'-'+item.phone" | 
|                 :value="item.id"> | 
|             </el-option> | 
|           </el-select> | 
|         </el-form-item> | 
|         <el-form-item label="同意说明"> | 
|           <el-input | 
|               type="textarea" | 
|               placeholder="请填写说明" | 
|               :rows="4" | 
|               v-model="dealForm.checkInfo" | 
|           /> | 
|         </el-form-item> | 
|       </el-form> | 
|       <span slot="footer" class="dialog-footer"> | 
|         <el-button @click="isShowProblem = false">取消</el-button> | 
|         <el-button type="primary" :loading="dealing" @click="dealDo">确定</el-button> | 
|       </span> | 
|     </el-dialog> | 
|     <el-dialog | 
|         append-to-body | 
|         title="拒绝申请" | 
|         style="text-align: center" | 
|         class="dialogCl" | 
|         :visible.sync="isBackProblem" | 
|         width="600px" | 
|     > | 
|       <el-form :model="backForm"  ref="backForm" label-width="100px"> | 
|         <el-form-item label="拒绝说明"> | 
|           <el-input | 
|               type="textarea" | 
|               placeholder="请填写说明" | 
|               :rows="4" | 
|               v-model="backForm.checkInfo" | 
|           /> | 
|         </el-form-item> | 
|       </el-form> | 
|       <span slot="footer" class="dialog-footer"> | 
|         <el-button @click="isBackProblem= false">取消</el-button> | 
|         <el-button type="primary" :loading="dealing" @click="backDo">确定</el-button> | 
|       </span> | 
|     </el-dialog> | 
|   </GlobalWindow> | 
| </template> | 
|   | 
| <script> | 
| import BaseOpera from '@/components/base/BaseOpera' | 
| import GlobalWindow from '@/components/common/GlobalWindow' | 
| import { driveList } from '@/api/business/member' | 
| import { approveDo } from '@/api/business/approve' | 
| import { mapState } from 'vuex' | 
| export default { | 
|   name: 'OperaCarUseBookWindow', | 
|   components: { GlobalWindow }, | 
|   extends: BaseOpera, | 
|   data () { | 
|     return { | 
|       title: '公务车申请', | 
|       visible: false, | 
|       dataId: null, | 
|       model: { }, | 
|       dealing: false, | 
|       isShowProblem: false, | 
|       isBackProblem: false, | 
|       memberList: [], | 
|       dealForm: { | 
|         driveId: null, | 
|         checkInfo: null | 
|       }, | 
|       backForm: { | 
|         checkInfo: null | 
|       }, | 
|       rules: { | 
|         driverId: [{ required: true, message: '请选择派遣司机', trigger: 'blur' }] | 
|       } | 
|     } | 
|   }, | 
|   computed: { | 
|     ...mapState(['userInfo']) | 
|   }, | 
|   created () { | 
|     this.config({ | 
|       api: '/business/carUseBook', | 
|       'field.id': 'id' | 
|     }) | 
|   }, | 
|   methods: { | 
|     dealDo () { | 
|       this.$refs.dealForm.validate((valid) => { | 
|         if (!valid) { | 
|           return | 
|         } | 
|         this.$dialog.actionConfirm('操作确认', '您确认同意该申请吗?') | 
|           .then(() => { | 
|             this.dealing = true | 
|             approveDo({ | 
|               objId: this.dataId, | 
|               objType: this.model.type == 1 ? 4 : 3, | 
|               status: 2, | 
|               driverId: this.dealForm.driverId, | 
|               checkInfo: this.dealForm.checkInfo | 
|             }) | 
|               .then(res => { | 
|                 this.$tip.apiSuccess('处理成功') | 
|                 this.getDetail() | 
|                 this.isShowProblem = false | 
|               }) | 
|               .finally(() => { | 
|                 this.dealing = false | 
|               }) | 
|           }) | 
|       }) | 
|     }, | 
|     agreeOpen () { | 
|       this.isShowProblem = true | 
|       this.$set(this.dealForm, 'checkInfo', '') | 
|       this.loadMemberList() | 
|     }, | 
|     jectOpen () { | 
|       this.isBackProblem = true | 
|       this.backForm = { | 
|         checkInfo: null | 
|       } | 
|     }, | 
|     backDo () { | 
|       this.$refs.backForm.validate((valid) => { | 
|         if (!valid) { | 
|           return | 
|         } | 
|         approveDo({ | 
|           objId: this.dataId, | 
|           objType: this.model.type == 1 ? 4 : 3, | 
|           status: 3, | 
|           checkInfo: this.backForm.checkInfo | 
|         }).then(res => { | 
|           this.$tip.apiSuccess('退回成功') | 
|           this.getDetail() | 
|           this.isBackProblem = false | 
|         }) | 
|           .catch(e => { | 
|           }) | 
|           .finally(() => { | 
|             this.dealing = false | 
|           }) | 
|       }) | 
|     }, | 
|     open (title, target) { | 
|       this.title = title | 
|       this.visible = true | 
|       this.model = {} | 
|       this.dataId = target.id | 
|       this.$nextTick(() => { | 
|         this.memberList = [] | 
|         this.dealForm = { | 
|           driveId: null, | 
|           checkInfo: null | 
|         } | 
|         this.backForm = { | 
|           checkInfo: null | 
|         } | 
|         this.getDetail() | 
|       }) | 
|     }, | 
|     getDetail () { | 
|       this.api.detail(this.dataId) | 
|         .then(res => { | 
|           this.model = res | 
|           this.dealForm.driveId = res.driveId | 
|         }) | 
|     }, | 
|     loadMemberList () { | 
|       driveList({}).then(res => { | 
|         this.memberList = res | 
|       }) | 
|     } | 
|   } | 
| } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
| .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 { | 
|             flex: 1; | 
|             color: #111111; | 
|           } | 
|         } | 
|       } | 
|     } | 
|   | 
|     .header { | 
|       display: flex; | 
|       justify-content: space-between; | 
|       align-items: center; | 
|       padding: 20px 30px; | 
|       margin: 0 -30px; | 
|       border-radius: 8px 8px 0 0; | 
|       background: linear-gradient(to right, #f2f6fe, #cadffa); | 
|   | 
|       .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; | 
|       } | 
|     } | 
|     .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; | 
|         position: relative; | 
|         .separate { | 
|           position: absolute; | 
|           border-left: 2px dashed #cccccc; | 
|           left: 31px; | 
|           height: calc(100% - 36px); | 
|           top: 49px; | 
|         } | 
|         .avatar { | 
|           width: 40px; | 
|           height: 40px; | 
|           border-radius: 50%; | 
|           margin: 0 12px 0 16px; | 
|           //border: 1px solid; | 
|         } | 
|         .childList{ | 
|           display: flex; | 
|           flex-wrap: wrap; | 
|           margin-left: 100px; | 
|         } | 
|         .company { | 
|           font-size: 13px; | 
|           color: #888888; | 
|           .status { | 
|             color: #00ba67; | 
|           } | 
|         } | 
|         .m_content{ | 
|           display: flex; | 
|           flex-direction: column; | 
|           align-items: center; | 
|           justify-content: center; | 
|           margin-bottom: 4px; | 
|         } | 
|         .info { | 
|           display: flex; | 
|           align-items: center; | 
|           margin-left: 20px; | 
|           .icon { | 
|             position: relative; | 
|             z-index: 11; | 
|             color: #53b76f; | 
|             font-size: 24px; | 
|           } | 
|           .icon1 { | 
|             position: relative; | 
|             z-index: 11; | 
|             color: deepskyblue; | 
|             font-size: 24px; | 
|           } | 
|           .icon2 { | 
|             position: relative; | 
|             z-index: 11; | 
|             color: #dc362e; | 
|             font-size: 24px; | 
|           } | 
|           .iconnew{ | 
|             width: 24px; | 
|             height: 24px; | 
|           } | 
|           .icon3 { | 
|             position: relative; | 
|             z-index: 11; | 
|             color:gray; | 
|             font-size: 24px; | 
|           } | 
|           .content { | 
|             flex: 1; | 
|             .line { | 
|               display: flex; | 
|               justify-content: space-between; | 
|               align-content: center; | 
|               margin-bottom: 6px; | 
|               .name { | 
|                 font-weight: 600; | 
|                 font-size: 16px; | 
|                 color: #111111; | 
|               } | 
|               .time { | 
|                 color: #888888; | 
|               } | 
|             } | 
|           } | 
|         } | 
|         .remark { | 
|           background: #f7f7f7; | 
|           border-radius: 4px; | 
|           padding: 13px 15px; | 
|           color: #666666; | 
|           margin-left: 100px; | 
|         } | 
|   | 
|       } | 
|     } | 
|   } | 
| } | 
| </style> |