|  |  | 
 |  |  | <template> | 
 |  |  |   <div class="home"> | 
 |  |  |     <div class="wrap"> | 
 |  |  |       <h2>欢迎使用伊娃极速开发框架</h2> | 
 |  |  |       <p>您使用的此套开源框架没有任何版权问题,可学习可商用,请放心使用!</p> | 
 |  |  |       <p>伊娃致力于打造简洁、合理、高效的开发体验,为此我们将不断升级,感谢您的支持!</p> | 
 |  |  |       <p style="margin-top: 12px;"> | 
 |  |  |         <a href="https://gitee.com/coderd-repos/eva" target="_blank">GITEE</a> | 
 |  |  |         <a href="https://github.com/coderd-repos/eva" target="_blank">GITHUB</a> | 
 |  |  |       </p> | 
 |  |  |       <div class="guide"> | 
 |  |  |         <a href="http://eva.adjustrd.com" target="_blank">前往官网</a> | 
 |  |  |         <a href="http://coderd.adjustrd.com/template/308/default" target="_blank">前往CodeRd</a> | 
 |  |  |     <div class="home_total"> | 
 |  |  |       <div class="home_total_head">在厂人员总览</div> | 
 |  |  |       <div class="home_total_list"> | 
 |  |  |         <div class="home_total_list_item a"> | 
 |  |  |           <span>{{head && head.workerCount ? head.workerCount : 0}}</span> | 
 |  |  |           <span>内部员工</span> | 
 |  |  |         </div> | 
 |  |  |         <div class="home_total_list_item b"> | 
 |  |  |           <span>{{head && head.visitorCount ? head.visitorCount : 0}}</span> | 
 |  |  |           <span>访客</span> | 
 |  |  |         </div> | 
 |  |  |         <div class="home_total_list_item c"> | 
 |  |  |           <span>{{head && head.lwCount ? head.lwCount : 0}}</span> | 
 |  |  |           <span>劳务人员</span> | 
 |  |  |         </div> | 
 |  |  |         <div class="home_total_list_item d"> | 
 |  |  |           <span>{{head && head.presenceCarCount ? head.presenceCarCount : 0}}</span> | 
 |  |  |           <span>在场车辆</span> | 
 |  |  |         </div> | 
 |  |  |         <div class="home_total_list_item e"> | 
 |  |  |           <span>{{head && head.longCarCount ? head.longCarCount : 0}}</span> | 
 |  |  |           <span>长期车辆</span> | 
 |  |  |         </div> | 
 |  |  |         <div class="home_total_list_item f"> | 
 |  |  |           <span>{{head && head.visitorCarCount ? head.visitorCarCount : 0}}</span> | 
 |  |  |           <span>预约车辆</span> | 
 |  |  |         </div> | 
 |  |  |         <div class="home_total_list_item g"> | 
 |  |  |           <span>{{head && head.supplierCount ? head.supplierCount : 0}}</span> | 
 |  |  |           <span>供应商</span> | 
 |  |  |         </div> | 
 |  |  |       </div> | 
 |  |  |       <img src="@/assets/images/qq.png"> | 
 |  |  |       <p>你可以扫码加入群聊以获得技术支持</p> | 
 |  |  |       <div class="award"> | 
 |  |  |         <h4>激励作者做得更好</h4> | 
 |  |  |         <img src="@/assets/images/alipay.jpeg"> | 
 |  |  |         <img src="@/assets/images/wxpay.jpeg"> | 
 |  |  |     </div> | 
 |  |  |     <div class="home_charts"> | 
 |  |  |       <div class="home_charts_item"> | 
 |  |  |         <div class="home_charts_item_label">在厂人员占比</div> | 
 |  |  |         <div class="home_charts_item_charts" id="chart1"></div> | 
 |  |  |       </div> | 
 |  |  |       <div class="home_charts_item"> | 
 |  |  |         <div class="home_charts_item_label">劳务人员分布总览</div> | 
 |  |  |         <div class="home_charts_item_charts" id="chart2"></div> | 
 |  |  |       </div> | 
 |  |  |     </div> | 
 |  |  |     <div class="home_table"> | 
 |  |  |       <div class="home_table_head">超时预警人员({{total}})</div> | 
 |  |  |       <div class="home_table_box"> | 
 |  |  |         <el-table | 
 |  |  |           :data="list" | 
 |  |  |           :header-cell-style="{background: '#dcdde2', color: 'rgb(51, 51, 51)'}" | 
 |  |  |           border | 
 |  |  |           style="width: 100%"> | 
 |  |  |           <el-table-column | 
 |  |  |             prop="name" | 
 |  |  |             label="访客姓名"> | 
 |  |  |           </el-table-column> | 
 |  |  |           <el-table-column | 
 |  |  |             prop="phone" | 
 |  |  |             label="访客电话"> | 
 |  |  |           </el-table-column> | 
 |  |  |           <el-table-column | 
 |  |  |             prop="companyName" | 
 |  |  |             label="访客组织"> | 
 |  |  |           </el-table-column> | 
 |  |  |           <el-table-column | 
 |  |  |             label="人员类型"> | 
 |  |  |             <template slot-scope="{row}"> | 
 |  |  |               <span v-if="row.type === 0">劳务访客</span> | 
 |  |  |               <span v-if="row.type === 1">普通访客</span> | 
 |  |  |               <span v-if="row.type === 2">内部人员</span> | 
 |  |  |             </template> | 
 |  |  |           </el-table-column> | 
 |  |  |           <el-table-column | 
 |  |  |             prop="outDate" | 
 |  |  |             label="授权到期时间"> | 
 |  |  |           </el-table-column> | 
 |  |  |           <el-table-column | 
 |  |  |             label="状态"> | 
 |  |  |             <template slot-scope="{row}"> | 
 |  |  |               <span v-if="row.outStatus === 0">未超时</span> | 
 |  |  |               <span style="color: red;" v-if="row.outStatus === 1">已超时</span> | 
 |  |  |               <span v-if="row.outStatus === 2">即将超时</span> | 
 |  |  |             </template> | 
 |  |  |           </el-table-column> | 
 |  |  |           <el-table-column | 
 |  |  |             prop="address" | 
 |  |  |             label="处理" | 
 |  |  |             width="80"> | 
 |  |  |             <template slot-scope="scope"> | 
 |  |  |               <el-button type="text" @click="departure(scope.row.id)" v-if="scope.row.outStatus === 1">离厂</el-button> | 
 |  |  |             </template> | 
 |  |  |           </el-table-column> | 
 |  |  |         </el-table> | 
 |  |  |         <el-pagination | 
 |  |  |           style="margin-top: 20px;" | 
 |  |  |           @current-change="handleCurrentChange" | 
 |  |  |           :current-page="page" | 
 |  |  |           :page-size="10" | 
 |  |  |           layout="total, prev, pager, next, jumper" | 
 |  |  |           :total="total"> | 
 |  |  |         </el-pagination> | 
 |  |  |       </div> | 
 |  |  |     </div> | 
 |  |  |   </div> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script> | 
 |  |  | import * as echarts from 'echarts' | 
 |  |  | import { body, head, timeoutPage, level } from '@/api/business/staging' | 
 |  |  | export default { | 
 |  |  |   name: 'Index', | 
 |  |  |   data () { | 
 |  |  |     return {} | 
 |  |  |     return { | 
 |  |  |       head: null, | 
 |  |  |       list: [], | 
 |  |  |       total: 0, | 
 |  |  |       data1: [], | 
 |  |  |       data2: [[],[]], | 
 |  |  |       page: 1 | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   created () { | 
 |  |  |     this.getHeader() | 
 |  |  |     this.getData() | 
 |  |  |   }, | 
 |  |  |   mounted () { | 
 |  |  |     // this.getcharts2() | 
 |  |  |   }, | 
 |  |  |   methods: { | 
 |  |  |     departure(id) { | 
 |  |  |       this.$confirm('确定离场吗, 是否继续?', '提示', { | 
 |  |  |         confirmButtonText: '确定', | 
 |  |  |         cancelButtonText: '取消', | 
 |  |  |         type: 'warning' | 
 |  |  |       }).then(() => { | 
 |  |  |         level(id) | 
 |  |  |           .then(res => { | 
 |  |  |             this.page = 1 | 
 |  |  |             this.getData() | 
 |  |  |           }) | 
 |  |  |       }).catch(() => { | 
 |  |  |  | 
 |  |  |       }); | 
 |  |  |     }, | 
 |  |  |     getData() { | 
 |  |  |       timeoutPage({ | 
 |  |  |         capacity: 10, | 
 |  |  |         page: this.page, | 
 |  |  |         model: {} | 
 |  |  |       }).then(res => { | 
 |  |  |         this.list = res.records | 
 |  |  |         this.total = res.total | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     getHeader() { | 
 |  |  |       head().then(res => { | 
 |  |  |         this.head = res | 
 |  |  |       }) | 
 |  |  |       body().then(res => { | 
 |  |  |         this.data1 = res.retentionUsers.map(item => { | 
 |  |  |           let name = '' | 
 |  |  |           if (item.memberType === 0) { | 
 |  |  |             name = '劳务访客' | 
 |  |  |           } else if (item.memberType === 1) { | 
 |  |  |             name = '普通访客' | 
 |  |  |           } else if (item.memberType === 2) { | 
 |  |  |             name = '内部员工' | 
 |  |  |           } | 
 |  |  |           return { | 
 |  |  |             value: item.memberCount, | 
 |  |  |             name | 
 |  |  |           } | 
 |  |  |         }) | 
 |  |  |         let arr1 = res.companyUsers.map(item => item.companyName) | 
 |  |  |         let arr2 = res.companyUsers.map(item => item.memberCount) | 
 |  |  |         if (arr1.length > 0) { | 
 |  |  |           this.data2 = [arr1, arr2] | 
 |  |  |           this.getcharts2() | 
 |  |  |         } | 
 |  |  |         this.getcharts1() | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     handleCurrentChange (page) { | 
 |  |  |       this.page = page | 
 |  |  |       this.getData() | 
 |  |  |     }, | 
 |  |  |     getcharts1 () { | 
 |  |  |       const myChart = echarts.init(document.getElementById('chart1')) | 
 |  |  |       // 绘制图表 | 
 |  |  |       myChart.setOption({ | 
 |  |  |         tooltip: { | 
 |  |  |           trigger: 'item' | 
 |  |  |         }, | 
 |  |  |         grid: { | 
 |  |  |           bottom: '5%', | 
 |  |  |           top: '5%' | 
 |  |  |         }, | 
 |  |  |         legend: { | 
 |  |  |           bottom: '0%', | 
 |  |  |           left: 'center', | 
 |  |  |           icon: 'circle' | 
 |  |  |         }, | 
 |  |  |         series: [ | 
 |  |  |           { | 
 |  |  |             type: 'pie', | 
 |  |  |             radius: ['40%', '70%'], | 
 |  |  |             label: { | 
 |  |  |               formatter: '{b} {d}%' | 
 |  |  |             }, | 
 |  |  |             data: this.data1, | 
 |  |  |             itemStyle: { | 
 |  |  |               normal: { | 
 |  |  |                 color: function (colors) { | 
 |  |  |                   var colorList = [ | 
 |  |  |                     '#fc8251', | 
 |  |  |                     '#5470c6', | 
 |  |  |                     '#91cd77' | 
 |  |  |                   ] | 
 |  |  |                   return colorList[colors.dataIndex] | 
 |  |  |                 } | 
 |  |  |               } | 
 |  |  |             }, | 
 |  |  |             emphasis: { | 
 |  |  |               itemStyle: { | 
 |  |  |                 shadowBlur: 10, | 
 |  |  |                 shadowOffsetX: 0, | 
 |  |  |                 shadowColor: 'rgba(0, 0, 0, 0.5)' | 
 |  |  |               } | 
 |  |  |             } | 
 |  |  |           } | 
 |  |  |         ] | 
 |  |  |       }) | 
 |  |  |     }, | 
 |  |  |     getcharts2 () { | 
 |  |  |       const myChart = echarts.init(document.getElementById('chart2')) | 
 |  |  |       myChart.setOption({ | 
 |  |  |         tooltip: { | 
 |  |  |           trigger: 'item' | 
 |  |  |         }, | 
 |  |  |         grid: { | 
 |  |  |           bottom: '5%', | 
 |  |  |           top: '5%' | 
 |  |  |         }, | 
 |  |  |         xAxis: { | 
 |  |  |           max: 'dataMax' | 
 |  |  |         }, | 
 |  |  |         yAxis: { | 
 |  |  |           type: 'category', | 
 |  |  |           data: this.data2[0] | 
 |  |  |         }, | 
 |  |  |         series: [ | 
 |  |  |           { | 
 |  |  |             realtimeSort: true, | 
 |  |  |             type: 'bar', | 
 |  |  |             data: this.data2[1], | 
 |  |  |             itemStyle: { | 
 |  |  |               normal: { | 
 |  |  |                 color: '#fc8251' | 
 |  |  |               } | 
 |  |  |             } | 
 |  |  |           } | 
 |  |  |         ] | 
 |  |  |       }) | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </script> | 
 |  |  | 
 |  |  | <style scoped lang="scss"> | 
 |  |  | @import "@/assets/style/variables.scss"; | 
 |  |  | .home { | 
 |  |  |   text-align: center; | 
 |  |  |   color: #777; | 
 |  |  |   .wrap { | 
 |  |  |     margin-top: 80px; | 
 |  |  |     img { | 
 |  |  |       width: 240px; | 
 |  |  |   width: 100%; | 
 |  |  |   .home_table { | 
 |  |  |     width: 100%; | 
 |  |  |     padding: 20px; | 
 |  |  |     box-sizing: border-box; | 
 |  |  |     background: #ffffff; | 
 |  |  |     margin-top: 20px; | 
 |  |  |     .home_table_head { | 
 |  |  |       font-size: 16px; | 
 |  |  |       font-weight: 600; | 
 |  |  |       color: black; | 
 |  |  |     } | 
 |  |  |     .home_table_box { | 
 |  |  |       width: 100%; | 
 |  |  |       margin-top: 15px; | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  |   h2 { | 
 |  |  |     font-size: 32px; | 
 |  |  |     color: #555; | 
 |  |  |     margin-bottom: 20px; | 
 |  |  |   } | 
 |  |  |   p { | 
 |  |  |     line-height: 24px; | 
 |  |  |     margin: 0; | 
 |  |  |   } | 
 |  |  |   .start-up { | 
 |  |  |     margin-top: 8px; | 
 |  |  |   } | 
 |  |  |   .guide { | 
 |  |  |     margin: 30px 0 40px 0; | 
 |  |  |   .home_charts { | 
 |  |  |     width: 100%; | 
 |  |  |     margin-top: 20px; | 
 |  |  |     display: flex; | 
 |  |  |     justify-content: center; | 
 |  |  |     a { | 
 |  |  |       margin-right: 12px; | 
 |  |  |       padding: 12px 40px; | 
 |  |  |       border-radius: 30px; | 
 |  |  |       background: $primary-color; | 
 |  |  |       color: #fff; | 
 |  |  |       text-decoration: none; | 
 |  |  |     align-items: center; | 
 |  |  |     justify-content: space-between; | 
 |  |  |     .home_charts_item { | 
 |  |  |       padding: 20px; | 
 |  |  |       box-sizing: border-box; | 
 |  |  |       flex: 1; | 
 |  |  |       display: flex; | 
 |  |  |       flex-direction: column; | 
 |  |  |       margin-right: 20px; | 
 |  |  |       background: #ffffff; | 
 |  |  |       .home_charts_item_label { | 
 |  |  |         font-size: 16px; | 
 |  |  |         font-weight: 600; | 
 |  |  |         color: black; | 
 |  |  |       } | 
 |  |  |       .home_charts_item_charts { | 
 |  |  |         width: 100%; | 
 |  |  |         height: 300px; | 
 |  |  |       } | 
 |  |  |       &:last-child { | 
 |  |  |         margin: 0 !important; | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  |   em,a { | 
 |  |  |     font-style: normal; | 
 |  |  |     font-weight: bold; | 
 |  |  |     margin: 0 3px; | 
 |  |  |     color: $primary-color; | 
 |  |  |   } | 
 |  |  |   .award { | 
 |  |  |     position: absolute; | 
 |  |  |     right: 20px; | 
 |  |  |     bottom: 60px; | 
 |  |  |     display: flex; | 
 |  |  |     flex-direction: column; | 
 |  |  |     text-align: left; | 
 |  |  |     padding: 12px; | 
 |  |  |     border: 1px solid #eee; | 
 |  |  |     box-shadow: -1px 1px 10px #ccc; | 
 |  |  |     h4 { | 
 |  |  |       font-weight: bold; | 
 |  |  |       margin-bottom: 8px; | 
 |  |  |   .home_total { | 
 |  |  |     width: 100%; | 
 |  |  |     background: #ffffff; | 
 |  |  |     margin-top: 20px; | 
 |  |  |     .home_total_head { | 
 |  |  |       width: 100%; | 
 |  |  |       font-size: 16px; | 
 |  |  |       font-weight: 600; | 
 |  |  |       color: black; | 
 |  |  |       padding: 10px 20px; | 
 |  |  |       box-sizing: border-box; | 
 |  |  |       border-bottom: 1px solid #ececec; | 
 |  |  |     } | 
 |  |  |     img { | 
 |  |  |       width: 160px; | 
 |  |  |       margin-bottom: 20px; | 
 |  |  |       transition: opacity ease .3s; | 
 |  |  |     .home_total_list { | 
 |  |  |       width: 100%; | 
 |  |  |       padding: 20px; | 
 |  |  |       box-sizing: border-box; | 
 |  |  |       display: flex; | 
 |  |  |       align-items: center; | 
 |  |  |       .a { | 
 |  |  |         border-left: 5px solid rgba(129, 211, 248, 1) !important; | 
 |  |  |       } | 
 |  |  |       .b { | 
 |  |  |         border-left: 5px solid rgba(236, 128, 141, 1) !important; | 
 |  |  |       } | 
 |  |  |       .c { | 
 |  |  |         border-left: 5px solid rgba(250, 205, 145, 1) !important; | 
 |  |  |       } | 
 |  |  |       .d { | 
 |  |  |         border-left: 5px solid rgba(245, 154, 35, 1) !important; | 
 |  |  |       } | 
 |  |  |       .e { | 
 |  |  |         border-left: 5px solid rgba(128, 128, 255, 1) !important; | 
 |  |  |       } | 
 |  |  |       .f { | 
 |  |  |         border-left: 5px solid rgba(202, 249, 130, 1) !important; | 
 |  |  |       } | 
 |  |  |       .g { | 
 |  |  |         border-left: 5px solid rgba(194, 128, 255, 1) !important; | 
 |  |  |       } | 
 |  |  |       .home_total_list_item { | 
 |  |  |         flex: 1; | 
 |  |  |         display: flex; | 
 |  |  |         align-items: center; | 
 |  |  |         flex-direction: column; | 
 |  |  |         justify-content: center; | 
 |  |  |         height: 80px; | 
 |  |  |         border-radius: 5px; | 
 |  |  |         border: 1px solid #ececec; | 
 |  |  |         margin-right: 15px; | 
 |  |  |         &:last-child { | 
 |  |  |           margin: 0 !important; | 
 |  |  |         } | 
 |  |  |         span { | 
 |  |  |           &:first-child { | 
 |  |  |             font-weight: 500; | 
 |  |  |             font-size: 24px; | 
 |  |  |             color: black; | 
 |  |  |           } | 
 |  |  |           &:last-child { | 
 |  |  |             font-weight: 400; | 
 |  |  |             font-size: 14px; | 
 |  |  |             color: #666666; | 
 |  |  |             margin-top: 2px; | 
 |  |  |           } | 
 |  |  |         } | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |   } | 
 |  |  | } |