<template> <div class="flexOne"> <div class="query-box" style="border-bottom: none;"> <ul> <li> <span><em>公司</em> <el-select filterable @change='getUser' v-model='msg.RB_BranchId'> <el-option label='不限' value='-1'></el-option> <el-option v-for='item in companyList' :label='item.BName' :value='item.Id' :key='item.Id'></el-option> </el-select> </span> </li> <li> <span><em>申请人</em> <el-select filterable v-model='msg.CreateBy'> <el-option label='不限' value='0'></el-option> <el-option v-for='item in userList' :label='item.name' :value='item.empId' :key='item.empId'></el-option> </el-select> </span> </li> <li> <span><em>待审核人</em> <el-select filterable v-model='msg.ToAuditId'> <el-option label='不限' value='0'></el-option> <el-option v-for='item in userList' :label='item.name' :value='item.empId' :key='item.empId'></el-option> </el-select> </span> </li> <li> <span><em>已审核人</em> <el-select filterable v-model='msg.AuditedId'> <el-option label='不限' value='0'></el-option> <el-option v-for='item in userList' :label='item.name' :value='item.empId' :key='item.empId'></el-option> </el-select> </span> </li> <li> <span><em>请假类型</em> <el-select v-model='msg.TemplateId'> <el-option v-for='item in ApplyTypeList' :label='item.label' :value='item.value' :key='item.value'> </el-option> </el-select> </span> </li> <li> <span><em>申请审核状态</em> <el-select v-model='msg.appAuditStatus'> <el-option v-for='item in appAuditStatusList' :label='item.label' :value='item.value' :key='item.value'> </el-option> </el-select> </span> </li> <li><span><em>申请时间</em> <el-date-picker v-model='msg.StartTime' class='w135' value-format="yyyy-MM-dd" type="date"></el-date-picker> - <el-date-picker v-model='msg.EndTime' class='w135' value-format="yyyy-MM-dd" type="date"></el-date-picker> </span> </li> <li> <input type="button" class="hollowFixedBtn" value="查询" @click="resetPageIndex(),getList()" /> </li> </ul> </div> <div style="width: 100%; overflow: auto;"> <table style="min-width: 1400px;" class="singeRowTable" border="0" cellspacing="0" cellpadding="0"> <tr> <th>公司</th> <th>申请人</th> <th>请假类型</th> <th width="300">待审核人</th> <th width="300">已审核人</th> <th>申请时间</th> <th>{{$t('admin.admin_status')}}</th> <th width="150">{{$t('system.table_operation')}}</th> </tr> <tbody v-loading='loading'> <tr v-for='item in list'> <td>{{item.BName}}</td> <td>{{item.EmName}}</td> <td>{{item.TemplateName}}</td> <td>{{item.ToAuditName}}</td> <td>{{item.AuditedName}}</td> <td>{{item.CreateTime}}</td> <td>{{item.Status}}</td> <td> <el-tooltip class="item" effect="dark" content="详情" placement="top"> <el-button type="primary" icon="el-icon-tickets" circle @click="getDetail(item.Id,item.TemplateType)"> </el-button> </el-tooltip> </td> </tr> </tbody> </table> </div> <el-pagination background @current-change="handleCurrentChange" :current-page.sync="currentPage" layout="total,prev, pager, next, jumper" :page-size=msg.pageSize :total=total> </el-pagination> <el-dialog custom-class='w500' :title="dialogTitle" :visible.sync="outerVisible" center> <div class="approvalStatisticalDialog"> <div class="title">{{detailList.Proposer}}{{detailList.TempleteTypeName}}</div> <div class="user"> <img v-if="!detailList.ProposerPhoto" src="../../assets/img/litheader.png" alt=""> <img v-else :src="detailList.ProposerPhoto" alt="" :onerror="defaultImg"> <p>{{detailList.Proposer}}</p> <p><span style="color:#257BF1; font-size: 14px;">{{detailList.Status}}</span></p> </div> <div class="detail"> <table border="0" cellspacing="0" cellpadding="0" class="myApprovalTable"> <tr v-for="(item,index) in detailList.Details" v-if="(item.formType=='Image' && item.value.length>0) || item.formType!='Image'"> <td width="80">{{item.title}}:</td> <td v-if="item.formType=='String'">{{item.value}}</td> <td v-if="item.formType=='Json'"> <div v-for="(i,index) in item.value" style="border-bottom: 1px solid #ccc; padding:10px 0;"> <p style="line-height: 24px;" v-for="o in i">{{o.title}}:{{o.value}}</p> </div> </td> <td v-if="item.formType=='Image'"> <img v-if='item.value.length>0' style="width: 50px; height: 50px; border-radius: 4px; margin:0 10px 0 0;" v-for="(img,index) in item.value" :src="img" @click="getPic(item.value)" /> </td> </tr> </table> </div> <div class="audit"> <div class="auditItem"> <img v-if="!detailList.ProposerPhoto" src="../../assets/img/litheader.png" alt=""> <img v-else :src="detailList.ProposerPhoto" alt="" :onerror="defaultImg"> <p> <span>{{detailList.Proposer}}</span> <span>发起申请</span><span class="fr">{{detailList.ProposerTime}}</span> </p> </div> <div class="auditItem" v-for="(item,index) in detailList.arList"> <img v-if='item.AuditRecordList.length==1&&!item.AuditRecordList[0].AuditEmPhoto' src="../../assets/img/litheader.png" /> <img v-if='item.AuditRecordList.length==1&&item.AuditRecordList[0].AuditEmPhoto' :src='item.AuditRecordList[0].AuditEmPhoto' alt="" :onerror="defaultImg" /> <img v-if='item.AuditRecordList.length>1' src="../../assets/img/bg_z1@2x.png" /> <p v-if='item.AuditRecordList.length==1'> <span>{{item.AuditRecordList[0].AuditEmName}}</span> <span :style="'color: ' + item.AuditRecordList[0].StatusColor + ' !important'">{{item.AuditRecordList[0].Stauts}}</span> <span class="fr">{{item.AuditRecordList[0].AuditTime}}</span> <span style="display:block; padding-left: 40px; text-indent: 0; font-size: 12px; line-height: 24px; color: #333;">{{item.AuditRecordList[0].Description}}</span> <span v-if="item.AuditRecordList[0].CareOfList!=null" style="display: inline-block; line-height: 24px; font-size: 12px; text-indent: 0; padding-left:40px; color: #666;"> <b style="color: red;">由 </b>{{item.AuditRecordList[0].CareOfList[0].BeFrom}} <b style="color: red;">转</b> {{item.AuditRecordList[0].CareOfList[0].Target}} <br /> {{item.AuditRecordList[0].CareOfList[0].Remarks}} </span> </p> <p v-if='item.AuditRecordList.length>1' style="cursor: pointer;"> <span>{{item.AuditDescription}}{{item.AuditWay}}</span> <i class="el-icon-arrow-right"></i> </p> <div v-if='item.AuditRecordList.length>1' style=" width: 300px; height: auto; margin:15px 0; border-radius: 4px; background: #F0F3FA;"> <p v-if='item.AuditWayStatus==2' style="padding: 10px; color: #666;">须以下人员全部审批通过</p> <p v-if='item.AuditWayStatus==3' style="padding: 10px; color: #666;">以下人员大于等于一人审批通过即可</p> <div v-for="i in item.AuditRecordList"> <p class="auditItemDetailtitle"> <img width="28" height="28" v-if="!i.AuditEmPhoto" src="../../assets/img/litheader.png" alt=""> <img width="28" height="28" v-else :src="i.AuditEmPhoto" alt="" :onerror="defaultImg"> <span>{{i.AuditEmName}}</span> <span :style="'color: ' + i.StatusColor + ' !important'">{{i.Stauts}}</span> <span style="display:block; padding-left: 40px; text-indent: 0; font-size: 12px; line-height: 24px; color: #333;">{{i.Description}}</span> <span v-if='i.CareOfList!=null' style="display: inline-block; line-height: 24px; font-size: 12px; text-indent: 0; padding-left:40px; color: #666;"> <b style="color: red;">由 </b>{{i.CareOfList[0].BeFrom}} <b style="color: red;">转</b> {{i.CareOfList[0].Target}} <br /> {{i.CareOfList[0].Remarks}} </span> </p> <div class="auditItemImgList" v-if="toArr(i.Image).length>0"> <img v-for='img in toArr(i.Image)' :src="img" @click="getPic(toArr(i.Image))" /> </div> </div> </div> </div> </div> <!--audit end--> <div class="send" v-if="detailList.AuditStatus==5"> <!--v-if="detailList.AuditStatus==5"--> <p class="sentTitle">抄送<span>审批通过后,通知抄送人</span></p> <div class="sendList"> <div v-for="(item,index) in detailList.CopyToPeopleList"> <img v-if="!item.EmPhoto" src="../../assets/img/litheader.png" alt=""> <img v-else :src="item.EmPhoto" alt="" :onerror="defaultImg"> <br /> {{item.EmName}} </div> </div> </div> <!--send end--> </div> <div :class="{viewBigPicLayer:true,viewBigPicLayerDisplayNone:dspNone}" @click="closePicLayer"> <i @click="closePicLayer" class="el-icon-circle-close-outline clolseViewBigPicLayer"></i> <el-carousel height="600px" :interval="5000" trigger="click"> <el-carousel-item v-for="(item,index) in picObj" :key="index"> <img :src="item" /> </el-carousel-item> </el-carousel> </div> <div slot="footer" class="dialog-footer"> <button class="hollowFixedBtn" @click="outerVisible=false">关闭</button> </div> </el-dialog> </div> </template> <script> export default { data() { return { picObj: [], dspNone: true, loading: true, outerVisible: false, dialogTitle: "", total: 0, currentPage: 1, defaultImg: 'this.src="' + require('../../assets/img/litheader.png') + '"', //请求数据 msg: { RB_BranchId: '-1', Status: '0', CreateBy: '0', ToAuditId: '0', AuditedId: '0', TemplateId: 0, pageIndex: 1, pageSize: 15, StartTime: '', EndTime: '', }, getCompanyMsg: { RB_Group_Id: '0', Status: '0', }, getUserMsg: { RB_Branch_id: '-1', }, //返回数据 list: [], companyList: [], userList: [], ApplyTypeList: [], appAuditStatusList: [], detailList: {}, } }, methods: { getPic(obj) { this.picObj = obj this.dspNone = false; }, closePicLayer() { this.dspNone = true }, toArr(val) { let arr = [] if (val != "[]") { val.substring(1, val.length - 1).split(',').forEach(item => { arr.push(item.substring(1, item.length - 1)) }); } return arr; }, getDetail(id, type) { this.apipost('app_user_workflow_GetAuditInfo', { WorkFlowId: id, TemplateType: type }, res => { if (res.data.resultCode == 1) { this.outerVisible = true; this.dialogTitle = '审批详情' this.detailList = res.data.data } }, err => {}) }, getAppAuditStatus() { this.apipost('app_user_workflow_get_myinitiate_auditstatus', {}, res => { if (res.data.resultCode == 1) { res.data.data.forEach(item => { for (let key in item) { if (item.hasOwnProperty(key)) { this.appAuditStatusList.push({ label: key, value: item[key] }) } } }) } }, err => {}) }, getApplyType() { //模板类型 this.apipost('app_user_workflow_get_templatetype', {}, res => { if (res.data.resultCode == 1) { res.data.data.forEach(item => { for (let key in item) { if (item.hasOwnProperty(key)) { this.ApplyTypeList.push({ label: key, value: item[key] }) } } }) } }, err => {}) }, getCompany() { this.apipost('admin_get_BranchGetList', this.getCompanyMsg, res => { if (res.data.resultCode == 1) { this.companyList = res.data.data; } else {} }, err => {}) }, getUser() { this.msg.CreateBy = '0' this.msg.ToAuditId = '0' this.msg.AuditedId = '0' this.getUserMsg.RB_Branch_id = this.msg.RB_BranchId; this.apipost('app_get_company_employee', this.getUserMsg, res => { if (res.data.resultCode == 1) { this.userList = res.data.data; } else {} }, err => {}) }, getList() { this.loading = true; this.apipost('WorkFlow_get_GetOAPageList', this.msg, res => { if (res.data.resultCode == 1) { this.list = res.data.data.pageData; this.total = res.data.data.count; this.loading = false } else {} }, err => {}) }, handleCurrentChange(val) { this.msg.pageIndex = val; this.getList(); }, resetPageIndex() { this.msg.pageIndex = 1; this.currentPage = 1 }, }, mounted() { let userInfo = this.getLocalStorage(); this.getUserMsg.RB_Group_id = this.getCompanyMsg.RB_Group_Id = userInfo.RB_Group_id; //集团ID this.getCompany() this.getUser() this.getList() this.getApplyType() this.getAppAuditStatus() } } </script> <style> .approvalStatisticalDialog { width: 400px; background: #fff } .approvalStatisticalDialog .title { height: 48px; background: #EDEEF0; line-height: 48px; font-size: 16px; color: #333; text-indent: 30px; } .approvalStatisticalDialog .user { width: 340px; margin: 0 30px; border-bottom: 1px solid #E6E6E6; height: 60px; padding: 30px 0; box-sizing: content-box } .approvalStatisticalDialog .user>p { line-height: 28px; } .approvalStatisticalDialog .user>img { width: 58px; height: 58px; border-radius: 29px; float: left; margin: 0 12px 0 0; } .approvalStatisticalDialog .detail { width: 340px; margin: 0 30px; padding: 25px 0; border-bottom: 1px solid #E6E6E6; min-height: 120px; } .approvalStatisticalDialog .audit { width: 340px; margin: 30px 30px 0; min-height: 120px; border-bottom: 1px solid #E6E6E6; } .approvalStatisticalDialog .audit .auditItem { min-height: 80px; width: 320px; margin-left: 20px; border-left: 1px solid #EDEDED; position: relative; font-size: 14px; } .approvalStatisticalDialog .audit .auditItem:last-child { border-left: none; } .approvalStatisticalDialog .audit .auditItem>p { line-height: 40px; text-indent: 40px; } .approvalStatisticalDialog .audit .auditItem>img { width: 40px; height: 40px; border-radius: 20px; position: absolute; left: -20px; } .approvalStatisticalDialog .send { width: 340px; margin: 30px 30px 0; min-height: 120px; } .approvalStatisticalDialog .send .sentTitle { height: 14px; line-height: 14px; text-indent: 10px; border-left: 3px solid #E95252; font-size: 14px; } .approvalStatisticalDialog .send .sentTitle span { color: #666; margin-left: 20px; } .approvalStatisticalDialog .send .sendList>div { float: left; margin: 10px 10px 0 0; font-size: 12px; color: #666; width: 40px; text-align: center; } .approvalStatisticalDialog .send .sendList>div>img { width: 40px; height: 40px; border-radius: 20px; } .approvalStatisticalDialog .myApprovalTable tr { height: 40px; font-size: 14px; } .approvalStatisticalDialog .myApprovalTable tr td:nth-child(1) { text-align: right; color: #666; } </style>