270 lines
5.7 KiB
Vue

<template>
<!-- 出勤统计 -->
<Card :title="title" showRefresh @query="handleQuery">
<div class="container">
<div class="contents">
<div>
<div class="point"></div>
<span class="smallTit">工种出勤统计</span>
<div class="box">
<div class="outBox" v-for="(item,index) in workerTypeList" :key="index">
<span class="name">{{item.typeName}}</span>
<p class="num">{{item.totalPersonNum}}</p>
</div>
</div>
</div>
<div class="point botBox"></div>
<span class="smallTit">企业出勤排名</span>
<div class="topTit">
<div class="blue"></div>
<span>在场</span>
<div class="purple"></div>
<span>总人数</span>
</div>
</div>
<div class="chart">
<div class="companyChart" ref="companyChart"></div>
</div>
</div>
</Card>
</template>
<script>
import Card from '../components/Card.vue'
import echarts from 'echarts4'
import { selectProjectWorkerTypeTotalListApi, selectProjectComapnyWorkTotalListApi } from '@/assets/js/api/dataBoard.js'
export default {
components: { Card },
props: {
title: {
type: String,
default: 'default title'
}
},
data() {
return {
workerTypeList: []
}
},
created() {
this.getWokerType()
},
mounted() {
this.getComapnyWorkList()
},
methods: {
//获取工种出勤统计
getWokerType() {
selectProjectWorkerTypeTotalListApi({
projectSn: this.$store.state.projectSn
}).then(res => {
console.log(res)
this.workerTypeList = res.result
})
},
//获取企业列表
getComapnyWorkList() {
selectProjectComapnyWorkTotalListApi({
projectSn: this.$store.state.projectSn,
type: 1
}).then(res => {
var Data = res.result
var xData = [],
yData1 = [],
yData2 = []
Data.forEach(element => {
xData.push(element.enterpriseName)
yData1.push(element.attendancePersonNum)
yData2.push(element.totalPersonNum)
})
this.createdBarCharts(xData, yData1, yData2, this.$refs.companyChart, ['在场', '总人数'])
})
},
/** 查询 */
handleQuery() {
this.getWokerType()
this.$nextTick(() => {
this.getComapnyWorkList()
})
},
//年龄结构---图表
createdBarCharts(xData, yData1, yData2, el, legendData) {
let that = this
let ageChart = echarts.init(el)
let option = {
grid: {
top: 20,
left: 0,
bottom: 5,
right: 20,
containLabel: true
},
color: ['#5CE2F6', '#5181F6'],
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
xAxis: [
{
type: 'category',
data: xData,
boundaryGap: true,
axisTick: {
show: false
},
axisLine: {
show: false
},
axisLabel: {
color: '#9fa2ad',
fontSize: 12
}
}
],
yAxis: {
type: 'value',
axisTick: {
show: false
},
axisLine: {
show: false
},
splitLine: {
lineStyle: {
type: 'dashed',
color: 'rgba(231, 233, 243, 0.2)'
}
},
axisLabel: {
color: '#9fa2ad'
}
},
series: [
{
name: legendData[0],
type: 'bar',
data: yData1,
barWidth: 14
},
{
name: legendData[1],
type: 'bar',
data: yData2,
barWidth: 14,
barGap: 0.1
}
]
}
ageChart.setOption(option)
}
}
}
</script>
<style lang="less" scoped>
.container {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.contents {
box-sizing: border-box;
padding: 10px 20px;
height: 50%;
.point {
width: 8px;
height: 8px;
border-radius: 50%;
background-color: #5be1f5;
display: inline-block;
}
.smallTit {
color: #51cadd;
font-size: 12px;
margin-left: 15px;
}
.box {
display: flex;
flex-flow: wrap;
justify-content: left;
align-items: center;
width: 95%;
height: 170px;
margin-left: 3%;
margin-top: 2%;
overflow: auto;
.outBox {
width: 33%;
// height: 33%;
margin-bottom: 10px;
.name {
display: inline-block;
height: 50px;
width: 35%;
line-height: 40px;
margin-right: 35px;
text-align: right;
}
.num {
display: inline-block;
width: 30%;
height: 40px;
line-height: 40px;
text-align: center;
color: #4fc5d9;
background-image: url(~@/assets/images/projectImg/numBgc.png);
background-size: 100%;
background-repeat: no-repeat;
}
}
}
.botBox {
margin-top: 20px;
}
.topTit {
margin-top: 10px;
font-size: 12px;
color: #5d6674;
.blue,
.purple {
display: inline-block;
width: 15px;
height: 5px;
border-radius: 10px;
margin-left: 30px;
margin-right: 5px;
background-color: #5be2f6;
}
.purple {
background-color: #5181f7;
}
}
}
::-webkit-scrollbar {
width: 3px;
color: #636364;
}
.chart {
width: 100%;
flex: 1;
display: flex;
justify-content: center;
align-items: flex-end;
}
.companyChart {
width: 90%;
height: calc(100% - 30px);
}
</style>