config.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { defineStore } from 'pinia'
  2. import { getAttendanceRule, getAttendanceSegment } from '@/api/mine.js'
  3. import { ref } from 'vue'
  4. export const useConfigStore = defineStore('config', () => {
  5. const signInTimeRange = ref([]);//正常签到时间
  6. const signOutTimeRange = ref([]);//正常签退时间
  7. const lateTimeRange = ref([]);//迟到时间
  8. const earlyTimeRange = ref([]);//早退时间
  9. function GetAttRule(user) {
  10. const fillZero = (timeStr) => timeStr + ':00'
  11. return new Promise((resolve) => {
  12. getAttendanceSegment(user.unitId).then(res => {
  13. const result = res.returnParams.find(item => item.segment_status == "1");
  14. const { startTime, endTime } = getStartAndEndTime(result.work_time);
  15. getAttendanceRule(user.unitId).then(res => {
  16. //找到正在用的考勤规则
  17. const attRule = res.returnParams.Rows.find(item => item.rule_status == "1");
  18. signInTimeRange.value = [addMinutesToTime(startTime, -attRule.on_advance_num), fillZero(startTime)];
  19. signOutTimeRange.value = [fillZero(endTime), addMinutesToTime(endTime, attRule.off_delay_num)];
  20. lateTimeRange.value = [fillZero(startTime), addMinutesToTime(startTime, attRule.late_num)];
  21. earlyTimeRange.value = [addMinutesToTime(endTime, -attRule.eary_num), fillZero(endTime)];
  22. resolve(); // 确保执行完成后调用 resolve
  23. })
  24. })
  25. });
  26. }
  27. //获取当天的上班时间和下班时间
  28. function getStartAndEndTime(timeString) {
  29. //去除最后一个分号
  30. timeString = timeString.trim().replace(/;$/, '');
  31. const periods = timeString.split(';');
  32. let startTime = null;
  33. let endTime = null;
  34. // 遍历每个时间段
  35. for (let period of periods) {
  36. if (period) { // 确保不是空字符串
  37. const [start, end] = period.split(',').map(time => time.trim());
  38. if (!startTime || start < startTime) {
  39. startTime = start;
  40. }
  41. if (!endTime || end > endTime) {
  42. endTime = end;
  43. }
  44. }
  45. }
  46. return { startTime, endTime };
  47. }
  48. //处理时间运算
  49. function addMinutesToTime(timeStr, minutesToAdd) {
  50. const [hours, minutes] = timeStr.split(':').map(Number);
  51. let date = new Date();
  52. date.setHours(hours);
  53. date.setMinutes(minutes);
  54. // 添加分钟数
  55. date.setMinutes(date.getMinutes() + minutesToAdd);
  56. // 获取新的小时和分钟值,确保它们是两位数格式
  57. const newHours = String(date.getHours()).padStart(2, '0');
  58. const newMinutes = String(date.getMinutes()).padStart(2, '0');
  59. // 返回格式化后的新时间字符串
  60. return `${newHours}:${newMinutes}:00`;
  61. }
  62. //补零方法(09:00=>09:00:00)
  63. return {
  64. signInTimeRange,
  65. signOutTimeRange,
  66. lateTimeRange,
  67. earlyTimeRange,
  68. GetAttRule
  69. }
  70. })