|  |  |  | 
|---|
|  |  |  | <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 {} | 
|---|
|  |  |  | data() { | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|