549 lines
14 KiB
Vue
Raw Normal View History

<template>
<view class="fullHeight personContent">
<image src="/static/personManage/titleBG.png" class="titleBg"></image>
<headers :showBack="true" :themeType="'white'">
<view class="headerName">
劳务管理
</view>
</headers>
<view class="topBox" :style="{ 'margin-top': (200-statusBarHeight-44 - 110) + 'px' }">
<image src="/static/personManage/left.png" class="topBoxBG" v-show="tabIndex==0"></image>
<image src="/static/personManage/right.png" class="topBoxBG" v-show="tabIndex==1"></image>
<view class="item item1">
<view class="itemInner" @click="tabIndex=0">
<view class="">
<view class="txt" :class="tabIndex==0?'active':''">
在场施工人员
</view>
<view class="num">
{{statictisData.presencePerson.lwPersonTotal}}
</view>
</view>
</view>
<view class="itemInner" @click="tabIndex=1">
<view class="">
<view class="txt" :class="tabIndex==1?'active':''">
在场管理人员
</view>
<view class="num">
{{statictisData.presencePerson.glPersonTotal}}
</view>
</view>
</view>
</view>
<view class="item item2">
<view class="itemInner">
<view class="">
<view class="txt">
<text v-if="tabIndex === 0">施工人员出勤</text>
<text v-if="tabIndex === 1">管理人员出勤</text>
</view>
<view class="num">
{{tabIndex==0?statictisData.attendancePerson.lwPersonTotal:statictisData.attendancePerson.glPersonTotal}}
</view>
</view>
</view>
<view class="itemInner">
<view class="">
<view class="txt">
<text v-if="tabIndex === 0">施工人员总数</text>
<text v-if="tabIndex === 1">管理人员总数</text>
</view>
<view class="num">
{{tabIndex==0?statictisData.toaltPerson.lwPersonTotal:statictisData.toaltPerson.glPersonTotal}}
</view>
</view>
</view>
</view>
<view class="item item3">
<view class="itemInner">
<view class="">
<view class="txt">
<!-- <text v-if="tabIndex === 0">施工人员昨日出勤率</text> -->
<text v-if="tabIndex === 0">施工人员考勤环比</text>
<!-- <text v-if="tabIndex === 1">管理人员昨日出勤率</text> -->
<text v-if="tabIndex === 1">管理人员考勤环比</text>
</view>
<view class="" v-if="statictisData.yesterdayAttendancePerson.totalPerson != 0">
<view class="num" v-show="tabIndex==0">
<!-- {{((statictisData.yesterdayAttendancePerson.lwPersonTotal/Number(statictisData.toaltPerson.lwPersonTotal))*100).toFixed(2)}}% -->
<!-- {{(((statictisData.attendancePerson.lwPersonTotal-statictisData.yesterdayAttendancePerson.lwPersonTotal)/statictisData.yesterdayAttendancePerson.lwPersonTotal)*100).toFixed(2)}}% -->
<text v-if="lwRadio(statictisData) === 999999999">
<text>-</text>
</text>
<text v-if="lwRadio(statictisData) > 0 && lwRadio(statictisData) !== 999999999">
<u-icon name="arrow-upward" color="#2979ff" size="40"></u-icon>
<text>{{Math.abs(lwRadio(statictisData))}}%</text>
</text>
<text v-if="lwRadio(statictisData) === 0">
<text>{{Math.abs(lwRadio(statictisData))}}%</text>
</text>
<text v-if="lwRadio(statictisData) < 0">
<u-icon name="arrow-downward" color="#FF0000" size="40"></u-icon>
<text>{{Math.abs(lwRadio(statictisData))}}%</text>
</text>
</view>
<view class="num" v-show="tabIndex==1">
<!-- {{((statictisData.yesterdayAttendancePerson.glPersonTotal/Number(statictisData.toaltPerson.glPersonTotal))*100).toFixed(2)}}% -->
<!-- {{(((statictisData.attendancePerson.glPersonTotal-statictisData.yesterdayAttendancePerson.glPersonTotal)/statictisData.yesterdayAttendancePerson.glPersonTotal)*100).toFixed(2)}}% -->
<text v-if="glRadio(statictisData) === 999999999">
<text>-</text>
</text>
<text v-if="glRadio(statictisData) > 0 && glRadio(statictisData) !== 999999999">
<u-icon name="arrow-upward" color="#2979ff" size="40"></u-icon>
<text>{{Math.abs(glRadio(statictisData))}}%</text>
</text>
<text v-if="glRadio(statictisData) === 0">
<text>{{Math.abs(glRadio(statictisData))}}%</text>
</text>
<text v-if="glRadio(statictisData) < 0">
<u-icon name="arrow-downward" color="#FF0000" size="40"></u-icon>
<text>{{Math.abs(glRadio(statictisData))}}%</text>
</text>
</view>
</view>
<view class="num" v-else>
0%
</view>
</view>
</view>
<view class="itemInner">
<view class="">
<view class="txt">
现场工种()
</view>
<view class="num">
{{statictisData.presencePerson.total_worker_type_num}}
</view>
</view>
</view>
</view>
</view>
<view class="middleBox" v-if="COMPANY != 'longguang' && COMPANY != 'nanchang'">
<view class="box" @click="viewWorkerAnalysis">
<image src="/static/personManage/zggrfx.png" class="img" style="width: 40rpx;height: 19px;"></image>
在岗工人分析
</view>
<view class="box" @click="viewTeamList">
<image src="/static/personManage/cdw.png" class="img" style="width: 23px;height: 19px;"></image>
<view class="">
<view class="">
查队伍
</view>
<text class="num">{{statictisData.toaltPerson.total_team_num}}</text>
</view>
</view>
</view>
<view class="box operateBox">
<!-- <view class="item" @click="viewSafeMange">
<view class="imgBox">
<image src="/static/personManage/aqjy.png" mode="" style="width: 29px;height: 40rpx;"></image>
</view>
<view class="txt">
安全教育
</view>
</view> -->
<!-- <view v-if="COMPANY != 'longguang'" class="item" @click="goClockIn" v-show="mobileAttendance==0">
<view class="imgBox">
<image src="/static/personManage/ydkq.png" mode="" style="width: 24rpx;height: 24rpx;"></image>
</view>
<view class="txt">
移动考勤
</view>
</view>
<view class="item" v-if="COMPANY == 'longguang'" @click="viewTeamList" v-show="mobileAttendance==0">
<view class="imgBox">
<image src="/static/personManage/cdw.png" mode="" style="width: 24rpx;height: 24rpx;"></image>
</view>
<view class="txt">
查队伍
</view>
</view> -->
<view class="item" @click="viewAttendence">
<view class="imgBox">
<image src="/static/personManage/kqjl.png" mode="" style="width: 23px;height: 40rpx;"></image>
</view>
<view class="txt">
考勤记录
</view>
</view>
<!-- <view class="item" @click="safeMeeting" v-if="COMPANY !='sccr'&& COMPANY != 'sanjiang'">
<view class="imgBox">
<image src="/static/personManage/kqjl.png" mode="" style="width: 23px;height: 40rpx;"></image>
</view>
<view class="txt">
班前喊话
</view>
</view> -->
<view class="item" @click="viewVideo" v-if="COMPANY != 'nanchang'&& COMPANY != 'sccr'&& COMPANY != 'sanjiang'">
<view class="imgBox">
<image src="/static/personManage/video.png" mode="" style="width: 50rpx;height: 36rpx;"></image>
</view>
<view class="txt">
视频监控
</view>
</view>
</view>
<view class="tabBarBox">
<view class="item active">
<image src="/static/personManage/index.png" class="img"></image>
<view class="txt">
首页
</view>
</view>
<view class="item" @click="queryStaff">
<image src="/static/personManage/search.png" class="img"></image>
<view class="txt">
查人员
</view>
</view>
<!-- <view class="item">
<image src="/static/personManage/location.png" class="img"></image>
<view class="txt">
定位
</view>
</view> -->
</view>
<levitatedsphere :x="100" :y="80"></levitatedsphere>
</view>
</template>
<script>
import levitatedsphere from "@/components/levitatedsphere/levitatedsphere.vue"
import headers from "../../../components/headers/headers.vue"
export default {
data() {
return {
projectDetail: null,
statictisData: {
attendancePerson: {
glPersonTotal: 0,
lsPersonTotal: 0,
lwPersonTotal: 0,
totalPerson: 0
},
presencePerson: {
glPersonTotal: 0,
lsPersonTotal: 0,
total_worker_type_num: 0,
lwPersonTotal: 0,
totalPerson: 0
},
toaltPerson: {
glPersonTotal: 0,
total_team_num: 0,
lsPersonTotal: 0,
lwPersonTotal: 0,
totalPerson: 0
},
yesterdayAttendancePerson: {
glPersonTotal: 0,
lsPersonTotal: 0,
lwPersonTotal: 0,
totalPerson: 0,
}
},
statusBarHeight: 0,
tabIndex: 0,
mobileAttendance:1,//是否能移动考勤0是1否
};
},
computed:{
},
onLoad() {
this.statusBarHeight = uni.getStorageSync('systemInfo').statusBarHeight
this.projectDetail = JSON.parse(uni.getStorageSync('projectDetail'))
this.mobileAttendance=JSON.parse(uni.getStorageSync('userInfo')).mobileAttendance
this.loadData()
},
methods: {
lwRadio(statictisData){
let today = Number(statictisData.attendancePerson.lwPersonTotal)
let yesterday = Number(statictisData.yesterdayAttendancePerson.lwPersonTotal)
if(yesterday === 0) return 999999999
// yesterday = 5
// today = 5
if(today - yesterday === 0) return 0
let radio = (((today - yesterday)/yesterday)*100).toFixed(2)
return radio
},
glRadio(statictisData){
let today = statictisData.attendancePerson.glPersonTotal
let yesterday = statictisData.yesterdayAttendancePerson.glPersonTotal
if(yesterday === 0) return 999999999
// yesterday = 5
// today = 5
if(today - yesterday === 0) return 0
let radio = (((today - yesterday)/yesterday)*100).toFixed(2)
return radio
},
loadData() {
var that = this
this.sendRequest({
url: 'xmgl/workerInfo/selectProjectSceneManageStatistics',
data: {
projectSn: this.projectDetail.projectSn
},
method: "POST",
success(res) {
that.statictisData = res.result
console.log('获取的数据',that.statictisData);
}
})
},
viewWorkerAnalysis() {
uni.navigateTo({
url: './workerAnalysis'
})
},
viewSafeMange() {
uni.navigateTo({
url: './safetyEducationManage/index'
})
},
viewTeamList() {
uni.navigateTo({
url: './searchTeam/teamList'
})
},
goClockIn() {
var userInfo = JSON.parse(uni.getStorageSync('userInfo'))
if (userInfo.accountType == 6) {
uni.navigateTo({
url: './clockIn?faceScore='
})
// uni.navigateTo({
// url:'./faceRecognition'
// })
} else {
uni.showModal({
title: '提示',
content: '只有项目子账号才能使用该功能!'
})
}
},
viewAttendence() {
uni.navigateTo({
url: 'attendanceManage'
})
},
safeMeeting(){
uni.navigateTo({
url:'../../videoManage/safeMeeting?sn='+this.projectDetail.projectSn
})
},
viewVideo(){
uni.navigateTo({
url: '../../videoManage/videoList?sn='+this.projectDetail.projectSn+'&pageType=backEnd'
})
},
//查询人员
queryStaff(){
uni.navigateTo({
url: './queryStaff'
})
},
}
}
</script>
<style lang="scss" scoped>
.personContent {
color: $uni-text-color2;
font-size: 30rpx;
:deep(.headerBox){
background-color: transparent;
border-bottom: none;
}
}
.titleBg {
width: 100%;
position: absolute;
top: 0;
left: 0;
height: 200px;
}
.middleBox {
display: flex;
align-items: center;
margin: 30rpx;
.box {
flex: 1;
display: inline-flex;
align-items: center;
height: 65px;
&:first-child {
margin-right: 10rpx;
}
.img {
margin-right: 16rpx;
margin-left: 40rpx;
}
.num {
font-size: 24rpx;
}
}
}
.box {
box-shadow: 0 4px 24px 0px rgba(212, 220, 236, 0.69);
border-radius: 16rpx;
}
.operateBox {
display: flex;
align-items: center;
font-size: 24rpx;
height: 96px;
margin: 0 30rpx;
.item {
flex: 1;
.imgBox {
height: 24rpx;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20rpx;
}
.txt {
text-align: center;
}
}
}
.tabBarBox {
display: flex;
align-items: center;
font-size: 24rpx;
border-top: 1px solid rgba(151, 151, 151, 0.2);
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 64rpx;
.item {
flex: 1;
// display: inline-flex;
text-align: center;
color: rgba(148, 149, 173, 1);
.img {
width: 70rpx;
height: 70rpx;
}
&.active {
color: rgba(72, 141, 236, 1);
}
}
}
.topBox {
margin: 0 10rpx;
position: relative;
height: 270px;
z-index: 4;
.topBoxBG {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
}
.item {
margin: 0 20rpx;
display: flex;
.itemInner {
display: inline-flex;
flex: 1;
align-items: center;
justify-content: center;
&:first-child {
border-right: 1px solid rgba(55, 45, 102, 0.1);
}
}
.txt {
color: rgba(55, 45, 102, 0.6);
font-size: 30rpx;
text-align: center;
}
.active {
color: rgba(55, 45, 102, 1);
font-weight: bold;
}
.num {
font-size: 40rpx;
font-weight: bold;
text-align: center;
}
}
.item1 {
height: calc(33% - 20rpx);
padding-top: 20rpx;
.itemInner {
&:first-child {
border-right: none;
}
}
}
.item2 {
height: 20%;
margin: 4% 20rpx;
// padding-bottom: 2%;
// .itemInner{
// padding-bottom: 20rpx;
// }
}
.item3 {
padding-top: 4%;
height: 20%;
position: relative;
&::after {
content: "";
position: absolute;
left: 5%;
width: 90%;
top: 0px;
border-top: 1px solid rgba(55, 45, 102, 0.1);
}
}
}
</style>