| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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) => {
- getAttendanceSegment(user.unitId).then(res => {
- const result = res.returnParams.find(item => item.segment_status == "1");
- const { startTime, endTime } = getStartAndEndTime(result.work_time);
- getAttendanceRule(user.unitId).then(res => {
- //找到正在用的考勤规则
- const attRule = res.returnParams.Rows.find(item => item.rule_status == "1");
- signInTimeRange.value = [addMinutesToTime(startTime, -attRule.on_advance_num), fillZero(startTime)];
- signOutTimeRange.value = [fillZero(endTime), addMinutesToTime(endTime, attRule.off_delay_num)];
- lateTimeRange.value = [fillZero(startTime), addMinutesToTime(startTime, attRule.late_num)];
- earlyTimeRange.value = [addMinutesToTime(endTime, -attRule.eary_num), fillZero(endTime)];
- resolve(); // 确保执行完成后调用 resolve
- })
- })
-
- });
-
- }
-
- //获取当天的上班时间和下班时间
- function getStartAndEndTime(timeString) {
- //去除最后一个分号
- timeString = timeString.trim().replace(/;$/, '');
- const periods = timeString.split(';');
- let startTime = null;
- let endTime = null;
- // 遍历每个时间段
- for (let period of periods) {
- if (period) { // 确保不是空字符串
- const [start, end] = period.split(',').map(time => time.trim());
- if (!startTime || start < startTime) {
- startTime = start;
- }
- if (!endTime || end > endTime) {
- endTime = end;
- }
- }
- }
- return { startTime, endTime };
- }
-
- //处理时间运算
- 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`;
- }
-
- //补零方法(09:00=>09:00:00)
-
-
- return {
- signInTimeRange,
- signOutTimeRange,
- lateTimeRange,
- earlyTimeRange,
- GetAttRule
- }
- })
|