<template>
|
<div class="home">
|
<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>
|
</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 {
|
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 {
|
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;
|
}
|
}
|
.home_charts {
|
width: 100%;
|
margin-top: 20px;
|
display: flex;
|
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;
|
}
|
}
|
}
|
.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;
|
}
|
.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;
|
}
|
}
|
}
|
}
|
}
|
}
|
</style>
|