Browse Source

🐞 fix: 修复部分情况下无法进行打卡的bug

Pchen. 8 months ago
parent
commit
9da641471e

+ 3 - 4
apis/ClockIn/AddAttendanceRecord.js

@@ -49,7 +49,7 @@ class AddAttendanceRecord extends API {
         }
         }
 
 
         let projectData = projectResult[0];
         let projectData = projectResult[0];
-        let users = JSON.parse(projectData.user);
+        let users = projectData.user;
 
 
         if (!users.includes(uuid)) {
         if (!users.includes(uuid)) {
             res.json({
             res.json({
@@ -115,11 +115,11 @@ class AddAttendanceRecord extends API {
             return todayWithTime.getTime();
             return todayWithTime.getTime();
         }
         }
 
 
-        const { createTime, day_of_week, begintime, endtime, loopy } = attendanceTimes;
+        const { createTime, day_of_week, begintime, endtime, loopy } = attendanceTimes
         if (dayOfWeek === day_of_week && (loopy || (Number(createTime) + 604800000 - nowTime > 0)) && timeToTodayTimestamp(begintime) <= nowTime && timeToTodayTimestamp(endtime) >= nowTime) {
         if (dayOfWeek === day_of_week && (loopy || (Number(createTime) + 604800000 - nowTime > 0)) && timeToTodayTimestamp(begintime) <= nowTime && timeToTodayTimestamp(endtime) >= nowTime) {
             return true;
             return true;
         }
         }
-        return false;
+        return false
     }
     }
 
 
     hasRecord(attendanceData, records, uuid) {
     hasRecord(attendanceData, records, uuid) {
@@ -146,7 +146,6 @@ class AddAttendanceRecord extends API {
         if (nowTime >= begin) {
         if (nowTime >= begin) {
             return records.some(record => record.time >= begin && record.time <= end && record.uuid === uuid);
             return records.some(record => record.time >= begin && record.time <= end && record.uuid === uuid);
         }
         }
-        return false;
     }
     }
 }
 }
 
 

+ 3 - 2
apis/ClockIn/EditAttendanceItems.js

@@ -72,10 +72,11 @@ class EditAttendanceItems extends API {
         user = user.split('|');
         user = user.split('|');
         admin = admin.split('|');
         admin = admin.split('|');
 
 
-        let uuids, admins;
+        let uuids = [], admins = [];
         try {
         try {
             uuids = await AccessControl.checkUser(user);
             uuids = await AccessControl.checkUser(user);
-            admins = await AccessControl.checkUser(admin, true);
+            if (admin != '')
+                admins = await AccessControl.checkUser(admin, true);
         } catch (error) {
         } catch (error) {
             return res.json({
             return res.json({
                 ...BaseStdResponse.ERR,
                 ...BaseStdResponse.ERR,

+ 23 - 10
apis/ClockIn/SupplementRecord.js

@@ -92,7 +92,7 @@ class SupplementRecord extends API {
             `;
             `;
             const records = await db.query(sqlCheckRecords, [project_id, userUUID]);
             const records = await db.query(sqlCheckRecords, [project_id, userUUID]);
 
 
-            if (records.some(record => this.hasRecord(item, record))) {
+            if (records.some(record => this.hasRecord(item, record, user))) {
                 return res.json({
                 return res.json({
                     ...BaseStdResponse.ERR,
                     ...BaseStdResponse.ERR,
                     endpoint: 513523,
                     endpoint: 513523,
@@ -132,23 +132,36 @@ class SupplementRecord extends API {
         }
         }
     }
     }
 
 
-    hasRecord(attendanceData, record) {
+    hasRecord(attendanceData, records, uuid) {
         const { day_of_week, begintime, loopy } = attendanceData;
         const { day_of_week, begintime, loopy } = attendanceData;
+        if (!loopy) {
+            return records.some(record => record.uuid === uuid);
+        }
         const now = new Date();
         const now = new Date();
+        const dayOfWeek = now.getDay();
         const nowTime = now.getTime();
         const nowTime = now.getTime();
 
 
-        if (!loopy) {
-            return record.time >= nowTime;
+        function getTimestamp() {
+            // 计算今天与目标星期几的差值
+            // 目标星期几应当是从0到6的范围,0是星期日,6是星期六
+            const daysUntilTarget = (day_of_week - dayOfWeek + 7) % 7;
+            // 计算目标日期
+            const targetDate = new Date(now);
+            targetDate.setDate(now.getDate() + daysUntilTarget);
+            const [hours, minutes, seconds] = begintime.split(':').map(Number);
+            targetDate.setHours(hours, minutes, seconds, 0);
+            return targetDate.getTime();
         }
         }
 
 
-        const targetDay = (day_of_week + 7 - now.getDay()) % 7;
-        const targetDate = new Date(now);
-        targetDate.setDate(now.getDate() + targetDay);
-        const [hours, minutes, seconds] = begintime.split(':').map(Number);
-        targetDate.setHours(hours, minutes, seconds, 0);
+        const begin = getTimestamp();
 
 
-        return record.time >= targetDate.getTime() - 604800000;
+        if (nowTime >= begin) {
+            return records.some(record => record.time >= begin && record.uuid === uuid);
+        }
+
+        return records.some(record => record.time >= begin - 604800000 && record.uuid === uuid);
     }
     }
+
 }
 }
 
 
 module.exports.SupplementRecord = SupplementRecord;
 module.exports.SupplementRecord = SupplementRecord;