building-sign/pagesA/signRecord/signRecord.vue

224 lines
7.0 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="pad-x120">
<!-- 头部 -->
<status-nav navBarTitle="打卡记录"></status-nav>
<view class="content" :style="{'padding-top':statusHeight+50+'px'}">
<!-- 筛选 -->
<view class="screen-box screen-box-other" v-if="ifShow">
<view class="item" :class="userType=='director'?'width-all':''">
<picker class="font24" mode="selector" :range="worksiteList" @change="bindWorksiteChange" :value="worksiteIndex" :range-key="'name'">
<view class="name">
<text class="clips1" :class="worksiteIndex==-1?'color-99':''">{{worksiteIndex!==-1?worksiteList[worksiteIndex].name:'请选择工地'}}</text>
<image src="/static/icon/icon-arrow-02.png" mode="aspectFit"></image>
</view>
</picker>
</view>
<view class="item font26 color-blue" @tap="showCard=true">
<view class="name" style="justify-content: center;">补卡操作</view>
</view>
</view>
<!-- 打卡日历 -->
<view class="sign-calendar">
<sign-calendar ref="signCalendar" @getDate="getDate" :daysIndex="daysIndex"></sign-calendar>
</view>
<!-- 时间 -->
<view class="sign-record-date font26">{{curDate.substr(0,4)+'年'+curDate.substr(5,2)+'月'+curDate.substr(8,2)+'日'}} 打卡情况</view>
<!-- 打卡记录 -->
<view class="sign-record sign-record-other bg-white">
<view class="item font26" v-for="(item,index) in signList" :key="index">
<view class="info">
<text>{{item.type_text}}打卡:{{item.is_replenish==1?'补打卡':item.created_at.substr(item.created_at.length-8)}}</text>
<text v-if="item.role!==0">打卡工地:{{item.worksite_name}}</text>
</view>
<view class="state" v-if="item.role!==0&&item.status==1">{{item.status_text}}</view>
<view class="state color-blue" v-if="item.role!==0&&item.status==0">{{item.status_text}}</view>
<view class="state color-red" v-if="item.role!==0&&item.status==-1">{{item.status_text}}</view>
</view>
</view>
<!-- 加载更多 -->
<view class="more-tips font24" v-if="signList.length==0">当日没有打卡记录</view>
</view>
<!-- 补卡弹窗 -->
<view class="pop-up-bg" v-if="showCard">
<view class="sign-cate bg-white">
<view class="title font34">请选择补卡时间</view>
<view class="txt font28">
<view class="radio-item" @tap="changeSignType(index)" v-for="(item,index) in radioList" :key="index">
<view :class="radioIndex==index?'checked':''"></view>
<view>{{item.title}}</view>
</view>
</view>
<!-- 审核按钮 -->
<view class="sign-cate-btns color-white font30">
<view class="btn" @tap="showCard=false,radioIndex=0"></view>
<view class="btn" @tap="submitEv"></view>
</view>
</view>
</view>
<!-- -->
<tabbar :userType="userType" current="2"></tabbar>
</view>
</template>
<script>
import signCalendar from '@/components/sign-calendar/sign-calendar';
import tabbar from '@/components/tabbar/tabbar';
export default {
components:{
signCalendar,
tabbar
},
data() {
return {
statusHeight:uni.getSystemInfoSync().statusBarHeight, //状态栏高度
userType:'', //账户类型 工人worker 负责人director
signList:[], //打卡列表
radioList:[
{title:'上午上班',type:'morning_on'},
{title:'上午下班',type:'morning_off'},
{title:'下午上班',type:'afternoon_on'},
{title:'下午下班',type:'afternoon_off'}
],//打卡类型
radioIndex:0, //当前选择
curDate:'', //当前日期
page:1,
size:10,
total:0,
worksiteList:[], //工地列表
worksiteIndex:-1, //当前选择
showCard:false, //是否显示补卡
ifShow:uni.getStorageSync('worker_role')==1?true:false,
daysIndex:new Date().getDate(),
}
},
onLoad(op) {
if(op.userType){
this.userType = op.userType;
}
if(op.date){
// 获取选择日期
this.curDate = op.date;
this.daysIndex = parseInt(op.date.substr(op.date.length-2));
}else{
let year = new Date().getFullYear();
let month = new Date().getMonth() + 1;
let day = new Date().getDate();
this.curDate = `${year}-${month<10?'0'+month:month}-${day<10?'0'+day:day}`;
}
//
this.getWorksiteList();
setTimeout(()=>{
// 获取打卡列表
this.getSignList();
},200)
},
onShow() {
},
onReachBottom() {
if(this.signList.length<this.total){
this.page++;
// 获取打卡列表
this.getSignList();
}
},
onPullDownRefresh() {
this.page = 1;
// 获取打卡列表
this.getSignList();
// 关闭下拉刷新
uni.stopPullDownRefresh();
},
methods: {
// 获取工地列表
getWorksiteList(){
this.$requst.get('/api/v1/common/worksite-list').then(res=>{
if(res.code==0){
this.worksiteList = res.data.list;
if(uni.getStorageSync('worksite_id')){
this.worksiteIndex = this.worksiteList.findIndex(item=> item.id === uni.getStorageSync('worksite_id'));
}else if(uni.getStorageSync('baseWorksiteId')!==0){
this.worksiteIndex = this.worksiteList.findIndex(item=> item.id === uni.getStorageSync('baseWorksiteId'));
}else{
this.worksiteIndex = -1;
}
this.isLoding = true;
}
})
},
// 改变上下班打卡
changeSignType(index){
if(this.radioIndex !== index){
this.radioIndex = index;
}
},
// 获取选择时间
getDate(date){
if(date!==this.curDate){
this.curDate = date;
this.daysIndex = parseInt(date.substr(date.length-2));
// 获取打卡列表
this.getSignList();
}
},
// 确认补卡
submitEv(){
let params = {
day:this.curDate,
worksite_id:this.worksiteIndex!==-1?this.worksiteList[this.worksiteIndex].id:0,
type:this.radioList[this.radioIndex].type
}
this.$requst.post('/api/v1/user/replenish',params).then(res=>{
if(res.code==0){
this.$toolAll.tools.showToast('补卡成功');
this.showCard = false;
// 获取状态列表
this.$refs.signCalendar.getStatusObj(this.worksiteList[this.worksiteIndex].id);
}else{
this.$toolAll.tools.showToast(res.msg);
}
})
},
// 获取打卡列表
getSignList(){
let params = {};
if(uni.getStorageSync('worker_role')==0){
params = {
day:this.curDate,
worksite_id:0
}
}else{
params = {
day:this.curDate,
worksite_id:this.worksiteIndex!==-1?this.worksiteList[this.worksiteIndex].id:0
}
}
this.$requst.get('/api/v1/user/sign-today',params).then(res=>{
if(res.code == 0){
console.log(res,'打卡记录');
// 获取打卡状态
this.buttonColor = res.data.buttonColor;
// 获取打卡记录列表
this.signList = res.data.list;
}
})
},
// 选择工地
bindWorksiteChange(e) {
this.worksiteIndex = e.detail.value;
this.page = 1;
// 获取打卡列表
this.getSignList();
// 获取状态列表
this.$refs.signCalendar.getStatusObj(this.worksiteList[this.worksiteIndex].id);
},
}
}
</script>
<style scoped>
</style>