|
|
@@ -114,8 +114,11 @@ function showNowTime() {
|
|
|
}, 1000); // 每1秒更新一次
|
|
|
}
|
|
|
|
|
|
-const signInTime = ref(''); // 上班签到时间
|
|
|
-const signOutTime = ref(''); // 下班签到时间
|
|
|
+const signInTime = ref(''); // 上午上班签到时间
|
|
|
+const signOutTime = ref(''); // 下午下班签到时间
|
|
|
+const signOutTimeAm = ref(''); // 上午下班签到时间
|
|
|
+const signInTimePm= ref(''); // 下午上班签到时间
|
|
|
+
|
|
|
//打卡按钮文字显示
|
|
|
const signName = ref('')
|
|
|
|
|
|
@@ -136,6 +139,9 @@ function getTodayAtt() {
|
|
|
const attList = res.returnParams.list;
|
|
|
let time1;
|
|
|
let time2;
|
|
|
+ let time3;
|
|
|
+ let time4;
|
|
|
+ //上午上班
|
|
|
const filteredRecord1 = attList.filter(item => item.att_type_id === '1');
|
|
|
if (filteredRecord1.length > 0) {
|
|
|
time1 = filteredRecord1.reduce((latest, current) => {
|
|
|
@@ -145,7 +151,7 @@ function getTodayAtt() {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- //拿到所有签退数据后,取最大时间的那个
|
|
|
+ //下午下班拿到所有签退数据后,取最大时间的那个
|
|
|
const filteredRecord2 = attList.filter(item => item.att_type_id === '2');
|
|
|
if (filteredRecord2.length > 0) {
|
|
|
time2 = filteredRecord2.reduce((latest, current) => {
|
|
|
@@ -154,12 +160,39 @@ function getTodayAtt() {
|
|
|
return (currentTime > latestTime) ? current : latest;
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ //上午下班,取最大时间的那个
|
|
|
+ const filteredRecord3 = attList.filter(item => item.att_type_id === '7');
|
|
|
+ if (filteredRecord3.length > 0) {
|
|
|
+ time3 = filteredRecord3.reduce((latest, current) => {
|
|
|
+ const latestTime = new Date(latest.att_time);
|
|
|
+ const currentTime = new Date(current.att_time);
|
|
|
+ return (currentTime > latestTime) ? current : latest;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ //下午上班,取最小时间
|
|
|
+ const filteredRecord4 = attList.filter(item => item.att_type_id === '8');
|
|
|
+ if (filteredRecord4.length > 0) {
|
|
|
+ time4 = filteredRecord4.reduce((latest, current) => {
|
|
|
+ const latestTime = new Date(latest.att_time);
|
|
|
+ const currentTime = new Date(current.att_time);
|
|
|
+ return (currentTime < latestTime) ? current : latest;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
//打卡状态修改
|
|
|
//打了上班卡
|
|
|
+ let checkContinue = false;
|
|
|
if (time1 !== undefined) {
|
|
|
// console.log('getTime1',time1);
|
|
|
signInTime.value = time1.att_time.split(' ')[1];
|
|
|
- selectedTypeRange.value='下班'
|
|
|
+ if(config.clock && config.clock == 'multiple'){
|
|
|
+ selectedTypeRange.value='上午下班'
|
|
|
+ }else{
|
|
|
+ selectedTypeRange.value='下班'
|
|
|
+ }
|
|
|
+ checkContinue = true;
|
|
|
// signName.value = '下班签退';
|
|
|
// if (isTimeInRange(subOneMinute(signInTime.value), ...configStore.lateTimeRange)) {//迟到
|
|
|
// signInStatusName.value = '迟到';
|
|
|
@@ -173,9 +206,32 @@ function getTodayAtt() {
|
|
|
// signName.value = '下班签退'
|
|
|
// }
|
|
|
else {
|
|
|
- // signName.value = '上班签到';
|
|
|
- selectedTypeRange.value='上班'
|
|
|
+ // signName.value = '上班签到';
|
|
|
+ if(config.clock && config.clock == 'multiple'){
|
|
|
+ selectedTypeRange.value='上午上班'
|
|
|
+ }else{
|
|
|
+ selectedTypeRange.value='上班'
|
|
|
+ }
|
|
|
+ checkContinue = false;
|
|
|
}
|
|
|
+ //上午下班卡
|
|
|
+ if (time3 !== undefined) {
|
|
|
+ signOutTimeAm.value = time3.att_time.split(' ')[1];
|
|
|
+ if(checkContinue){
|
|
|
+ selectedTypeRange.value='下午上班'
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ checkContinue = false;
|
|
|
+ }
|
|
|
+ //下午上班卡
|
|
|
+ if (time4 !== undefined) {
|
|
|
+ signInTimePm.value = time4.att_time.split(' ')[1];
|
|
|
+ if(checkContinue){
|
|
|
+ selectedTypeRange.value='下午下班'
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ checkContinue = false;
|
|
|
+ }
|
|
|
//打了下班卡
|
|
|
if (time2 !== undefined) {
|
|
|
signOutTime.value = time2.att_time.split(' ')[1];
|
|
|
@@ -191,11 +247,18 @@ function getTodayAtt() {
|
|
|
// isSignOutStatusDisabled.value = true; //隐藏早退状态
|
|
|
// }
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-const typeRanges=ref(['上班','下班','外出','外出返回'])
|
|
|
+let typeRanges;
|
|
|
+if(config.clock && config.clock == 'multiple'){
|
|
|
+ typeRanges=ref(['上午上班','上午下班','下午上班','下午下班','外出','外出返回'])
|
|
|
+}else{
|
|
|
+ typeRanges=ref(['上班','下班','外出','外出返回'])
|
|
|
+}
|
|
|
const selectedTypeRange=ref('上班')
|
|
|
//打卡类型切换
|
|
|
function onTypeRangeChange(event){
|
|
|
@@ -211,17 +274,38 @@ function signInOrOut() {
|
|
|
// } else {
|
|
|
// signOut();
|
|
|
// }
|
|
|
- switch(selectedTypeRange.value){
|
|
|
- case '上班':
|
|
|
- signIn()
|
|
|
- break
|
|
|
- case '下班':
|
|
|
- signOut()
|
|
|
- break
|
|
|
- case '外出':
|
|
|
- case '外出返回':
|
|
|
- otherTypeClockIn()
|
|
|
- break
|
|
|
+ if(config.clock && config.clock == 'multiple'){
|
|
|
+ switch(selectedTypeRange.value){
|
|
|
+ case '上午上班':
|
|
|
+ signInForMultiple('上午上班')
|
|
|
+ break
|
|
|
+ case '下午下班':
|
|
|
+ signOutForMultiple('下午下班')
|
|
|
+ break
|
|
|
+ case '外出':
|
|
|
+ case '外出返回':
|
|
|
+ otherTypeClockIn()
|
|
|
+ break
|
|
|
+ case '下午上班':
|
|
|
+ signInForMultiple('下午上班')
|
|
|
+ break
|
|
|
+ case '上午下班':
|
|
|
+ signOutForMultiple('上午下班')
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ switch(selectedTypeRange.value){
|
|
|
+ case '上班':
|
|
|
+ signIn()
|
|
|
+ break
|
|
|
+ case '下班':
|
|
|
+ signOut()
|
|
|
+ break
|
|
|
+ case '外出':
|
|
|
+ case '外出返回':
|
|
|
+ otherTypeClockIn()
|
|
|
+ break
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -243,12 +327,50 @@ function signIn() {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+function signInForMultiple(selectTypeName) {
|
|
|
+ let signIn = 1;
|
|
|
+ if(selectTypeName == '上午上班'){
|
|
|
+ signIn = 1
|
|
|
+ }else if(selectTypeName == '下午上班'){
|
|
|
+ signIn = 8
|
|
|
+ }
|
|
|
+ getAddress().then(() => {
|
|
|
+ clockIn(signIn);
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
// 下班签退
|
|
|
function signOut() {
|
|
|
const now = getNowTime();
|
|
|
- const signOut = 2;
|
|
|
+ const signOut = 2;
|
|
|
+ //判断打卡时间是否符合
|
|
|
+ const currentRangeIndex = 1;
|
|
|
+ if (!isTimeInRange(now, ...configStore.signOutTimeRange[currentRangeIndex])) {
|
|
|
+ $modal.confirm('当前非正常签退时间,是否继续?').then(res => {
|
|
|
+ if (res) {
|
|
|
+ getAddress().then(() => {
|
|
|
+ clockIn(signOut); // 执行打卡并获取结果
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }).catch(() => { })
|
|
|
+ } else {
|
|
|
+ getAddress().then(() => {
|
|
|
+ clockIn(signOut);
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+function signOutForMultiple(selectTypeName) {
|
|
|
+ const now = getNowTime();
|
|
|
+ let signOut = 2;
|
|
|
+ if(selectTypeName == '上午下班'){
|
|
|
+ signOut = 7
|
|
|
+ }else if(selectTypeName == '下午下班'){
|
|
|
+ signOut = 2
|
|
|
+ }
|
|
|
//判断打卡时间是否符合
|
|
|
- if (!isTimeInRange(now, ...configStore.signOutTimeRange)) {
|
|
|
+ const currentRangeIndex = signOut === 7 ? 0 : 1;
|
|
|
+ if (!isTimeInRange(now, ...configStore.signOutTimeRange[currentRangeIndex])) {
|
|
|
$modal.confirm('当前非正常签退时间,是否继续?').then(res => {
|
|
|
if (res) {
|
|
|
getAddress().then(() => {
|
|
|
@@ -363,6 +485,9 @@ function getlocation() {
|
|
|
// 封装获取位置的函数
|
|
|
function fetchLocation(resolve, reject) {
|
|
|
wx.getLocation({
|
|
|
+ type: 'gcj02',
|
|
|
+ isHighAccuracy: true, // 开启高精度定位
|
|
|
+ highAccuracyExpireTime: 4000, // 高精度定位超时时间
|
|
|
success: (res) => {
|
|
|
longitude.value = res.longitude; // 保存经度
|
|
|
latitude.value = res.latitude; // 保存纬度
|
|
|
@@ -458,7 +583,7 @@ function clockIn(attType) {
|
|
|
};
|
|
|
createAttendance(params).then(res => {
|
|
|
if ("success" == res.returnMsg) {
|
|
|
- if(1==attType || 2==attType){
|
|
|
+ if(1==attType || 2==attType || 7==attType || 8==attType){
|
|
|
getTodayAtt(); //更新今日考勤数据
|
|
|
}
|
|
|
isToFillClock(attType, localString.substring(11, 19));//判断考勤状态是否异常
|
|
|
@@ -481,61 +606,69 @@ function clockIn(attType) {
|
|
|
}
|
|
|
|
|
|
//是否补卡、请假判断
|
|
|
-function isToFillClock(attType, time) {
|
|
|
- // console.log('isToFillClock',attType,time);
|
|
|
- //早上迟到跳补卡
|
|
|
- let status = '';
|
|
|
- if (attType == 1) {
|
|
|
- if (isTimeInRange(subOneMinute(time), ...configStore.lateTimeRange)) {
|
|
|
- status = '迟到'
|
|
|
- } else if (isTimeInRange(time, configStore.lateTimeRange[1], '23:59:59')) {
|
|
|
- status = '旷工'
|
|
|
- } else {
|
|
|
- $modal.msgSuccess('打卡成功')
|
|
|
- setTimeout(() => {
|
|
|
- $tab.navigateTo('/pages/mine/checkIn/checkIn')
|
|
|
- }, 1000)
|
|
|
- return
|
|
|
+function isToFillClock(attType, time) {
|
|
|
+ // console.log('isToFillClock',attType,time);
|
|
|
+ // 早上迟到跳补卡
|
|
|
+ let status = '';
|
|
|
+ if (attType === 1 || attType === 8) {
|
|
|
+ const currentRangeIndex = attType === 1 ? 0 : 1;
|
|
|
+ if (isTimeInRange(subOneMinute(time), ...configStore.lateTimeRange[currentRangeIndex])) {
|
|
|
+ status = '迟到';
|
|
|
+ } else if (isTimeInRange(time, configStore.lateTimeRange[currentRangeIndex][1], '23:59:59')) {
|
|
|
+ status = '旷工';
|
|
|
+ } else {
|
|
|
+ $modal.msgSuccess(' 打卡成功');
|
|
|
+ setTimeout(() => {
|
|
|
+ $tab.navigateTo('/pages/mine/checkIn/checkIn');
|
|
|
+ }, 1000);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(config.companyCode && config.companyCode == 'yg'){
|
|
|
+ $modal.confirm(' 当前状态为' + status + '!\n是否跳转补卡页面').then(() => {
|
|
|
+ $tab.reLaunch('/pages/work/index');
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ $tab.navigateTo('/pages/mine/checkIn/checkIn');
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ $tab.navigateTo('/pages/mine/checkIn/checkIn');
|
|
|
}
|
|
|
- $modal.confirm('当前状态为' + status + '!\n是否跳转补卡页面').then(() => {
|
|
|
- $tab.reLaunch('/pages/work/index')
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- $tab.navigateTo('/pages/mine/checkIn/checkIn')
|
|
|
- })
|
|
|
- } else if (attType == 2) {
|
|
|
- //早退请假提示
|
|
|
- if (isTimeInRange(time, '00:00:00', configStore.earlyTimeRange[0])) {
|
|
|
- status = '旷工'
|
|
|
- } else if (isTimeInRange(time, ...configStore.earlyTimeRange)) {
|
|
|
- status = '早退'
|
|
|
- } else {
|
|
|
- $modal.msgSuccess('打卡成功')
|
|
|
- setTimeout(() => {
|
|
|
- $tab.navigateTo('/pages/mine/checkIn/checkIn')
|
|
|
- }, 1000)
|
|
|
- return
|
|
|
- }
|
|
|
- $modal.confirm('当前状态为' + status + '!\n是否跳转请假页面').then(() => {
|
|
|
- $tab.reLaunch('/pages/work/index')
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- $tab.navigateTo('/pages/mine/checkIn/checkIn')
|
|
|
- })
|
|
|
- }else{
|
|
|
- $modal.msgSuccess('打卡成功')
|
|
|
- setTimeout(() => {
|
|
|
- $tab.navigateBack()
|
|
|
- }, 1000)
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
+ } else if (attType === 2 || attType === 7) {
|
|
|
+ const currentRangeIndex = attType === 7 ? 0 : 1;
|
|
|
+ // 早退请假提示
|
|
|
+ if (isTimeInRange(time, '00:00:00', configStore.earlyTimeRange[currentRangeIndex][0])) {
|
|
|
+ status = '旷工';
|
|
|
+ } else if (isTimeInRange(time, ...configStore.earlyTimeRange[currentRangeIndex])) {
|
|
|
+ status = '早退';
|
|
|
+ } else {
|
|
|
+ $modal.msgSuccess(' 打卡成功');
|
|
|
+ setTimeout(() => {
|
|
|
+ $tab.navigateTo('/pages/mine/checkIn/checkIn');
|
|
|
+ }, 1000);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $modal.confirm(' 当前状态为' + status + '!\n是否跳转请假页面').then(() => {
|
|
|
+ $tab.reLaunch('/pages/work/index');
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ $tab.navigateTo('/pages/mine/checkIn/checkIn');
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ $modal.msgSuccess(' 打卡成功');
|
|
|
+ setTimeout(() => {
|
|
|
+ $tab.navigateBack();
|
|
|
+ }, 1000);
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
//判断是否已经打过上班卡
|
|
|
function isClockIn(attType) {
|
|
|
if (1==attType && '' != signInTime.value) {
|
|
|
$modal.showToast('请勿重复打卡')
|
|
|
return true;
|
|
|
+ }else if (8==attType && '' != signInTimePm.value) {
|
|
|
+ $modal.showToast('请勿重复打卡')
|
|
|
+ return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|