| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- import { defineStore } from 'pinia'
- import { getAttendanceRule, getAttendanceSegment } from '@/api/mine.js'
- import { ref } from 'vue'
-
- export const useConfigStore = defineStore('config', () => {
- // 正常签到时间,分别为上午和下午
- const signInTimeRange = ref([[], []]);
- // 正常签退时间,分别为上午和下午
- const signOutTimeRange = ref([[], []]);
- // 迟到时间,分别为上午和下午
- const lateTimeRange = ref([[], []]);
- // 早退时间,分别为上午和下午
- const earlyTimeRange = ref([[], []]);
-
- function GetAttRule(user) {
- const fillZero = (timeStr) => timeStr + ':00';
- return new Promise((resolve, reject) => {
- try {
- getAttendanceSegment(user.unitId).then(res => {
- console.log('getAttendanceSegment', res);
- const result = res.returnParams.find(item => item.segment_status == "1");
- const { startTimeAm, endTimeAm, startTimePm, endTimePm } = getStartAndEndTime(result.work_time);
- getAttendanceRule(user.unitId).then(res => {
- // 找到正在用的考勤规则
- const attRule = res.returnParams.Rows.find(item => item.rule_status == "1");
- // 上午签到时间范围
- signInTimeRange.value[0] = [addMinutesToTime(startTimeAm, -attRule.on_advance_num), fillZero(startTimeAm)];
- // 上午签退时间范围
- signOutTimeRange.value[0] = [fillZero(endTimeAm), addMinutesToTime(endTimeAm, attRule.off_delay_num)];
- // 上午迟到时间范围
- lateTimeRange.value[0] = [fillZero(startTimeAm), addMinutesToTime(startTimeAm, attRule.late_num)];
- // 上午早退时间范围
- earlyTimeRange.value[0] = [addMinutesToTime(endTimeAm, -attRule.eary_num), fillZero(endTimeAm)];
-
- if(startTimePm){
- // 下午签到时间范围
- signInTimeRange.value[1] = [addMinutesToTime(startTimePm, -attRule.on_advance_num), fillZero(startTimePm)];
- // 下午签退时间范围
- signOutTimeRange.value[1] = [fillZero(endTimePm), addMinutesToTime(endTimePm, attRule.off_delay_num)];
- // 下午迟到时间范围
- lateTimeRange.value[1] = [fillZero(startTimePm), addMinutesToTime(startTimePm, attRule.late_num)];
- // 下午早退时间范围
- earlyTimeRange.value[1] = [addMinutesToTime(endTimePm, -attRule.eary_num), fillZero(endTimePm)];
- }else{
- //防止考勤设置时,没有分段设置考勤导致的异常
- // 下午签到时间范围
- signInTimeRange.value[1] = [addMinutesToTime(startTimeAm, -attRule.on_advance_num), fillZero(startTimeAm)];
- // 下午签退时间范围
- signOutTimeRange.value[1] = [fillZero(endTimeAm), addMinutesToTime(endTimeAm, attRule.off_delay_num)];
- // 下午迟到时间范围
- lateTimeRange.value[1] = [fillZero(startTimeAm), addMinutesToTime(startTimeAm, attRule.late_num)];
- // 下午早退时间范围
- earlyTimeRange.value[1] = [addMinutesToTime(endTimeAm, -attRule.eary_num), fillZero(endTimeAm)];
- }
- resolve(); // 确保执行完成后调用 resolve
- }).catch(err => {
- console.log(' 获取考勤规则时发生错误', err);
- reject('getAttendanceRuleErr');
- });
- }).catch(err => {
- console.log(' 获取考勤时间段时发生错误', err);
- reject('getAttendanceSegmentErr');
- });
- } catch (err) {
- console.error(' 处理考勤数据时发生错误', err);
- reject(err);
- }
- });
- }
-
- // 获取当天的上午上班、上午下班、下午上班和下午下班时间
- function getStartAndEndTime(timeString) {
- // 去除最后一个分号
- timeString = timeString.trim().replace(/;$/, '');
- const periods = timeString.split(';');
- let startTimeAm = null;
- let endTimeAm = null;
- let startTimePm = null;
- let endTimePm = null;
-
- // 遍历每个时间段
- for (let period of periods) {
- if (period) { // 确保不是空字符串
- const [start, end] = period.split(',').map(time => time.trim());
- const startHour = parseInt(start.split(':')[0]);
- if (startHour < 12) { // 上午时间段
- if (!startTimeAm || start < startTimeAm) {
- startTimeAm = start;
- }
- if (!endTimeAm || end > endTimeAm) {
- endTimeAm = end;
- }
- } else { // 下午时间段
- if (!startTimePm || start < startTimePm) {
- startTimePm = start;
- }
- if (!endTimePm || end > endTimePm) {
- endTimePm = end;
- }
- }
- }
- }
- return { startTimeAm, endTimeAm, startTimePm, endTimePm };
- }
-
- // 处理时间运算
- function addMinutesToTime(timeStr, minutesToAdd) {
- const [hours, minutes] = timeStr.split(':').map(Number);
- let date = new Date();
- date.setHours(hours);
- date.setMinutes(minutes);
- // 添加分钟数
- date.setMinutes(date.getMinutes() + minutesToAdd);
- // 获取新的小时和分钟值,确保它们是两位数格式
- const newHours = String(date.getHours()).padStart(2, '0');
- const newMinutes = String(date.getMinutes()).padStart(2, '0');
- // 返回格式化后的新时间字符串
- return `${newHours}:${newMinutes}:00`;
- }
-
- return {
- signInTimeRange,
- signOutTimeRange,
- lateTimeRange,
- earlyTimeRange,
- GetAttRule
- }
- })
|