From 2560996333c9f9e2015b9a1bb2bcbcc50af2d42f Mon Sep 17 00:00:00 2001 From: sudomarcma <1040211836@qq.com> Date: Tue, 1 Jul 2025 11:28:05 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=95=B0=E6=8D=AE=E5=BA=93):=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4clock=5Frecords=E8=A1=A8=E4=B8=AD=E7=9A=84dis?= =?UTF-8?q?tance=5Fmeters=E5=AD=97=E6=AE=B5=E5=B9=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除不再使用的distance_meters字段,简化数据库结构 更新前端展示失败的打卡记录样式和添加notes列显示 删除不再需要的SSL证书文件 --- backend/cert.pem | 23 --------------------- backend/key.pem | 28 -------------------------- backend/server.js | 9 ++++----- nilai_clock.sql | 1 - src/components/AttendanceReporting.vue | 7 +++++++ 5 files changed, 11 insertions(+), 57 deletions(-) delete mode 100644 backend/cert.pem delete mode 100644 backend/key.pem diff --git a/backend/cert.pem b/backend/cert.pem deleted file mode 100644 index dd33852..0000000 --- a/backend/cert.pem +++ /dev/null @@ -1,23 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID1zCCAr+gAwIBAgIUBR7JyWNONICsFp/nQvPR29Z5PBAwDQYJKoZIhvcNAQEL -BQAwezELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM -DVNhbi1GcmFuY2lzY28xEzARBgNVBAoMCk15LUNvbXBhbnkxFjAUBgNVBAsMDU15 -LURlcGFydG1lbnQxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yNTA2MjYwMjAyMjFa -Fw0yNjA2MjYwMjAyMjFaMHsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9y -bmlhMRYwFAYDVQQHDA1TYW4tRnJhbmNpc2NvMRMwEQYDVQQKDApNeS1Db21wYW55 -MRYwFAYDVQQLDA1NeS1EZXBhcnRtZW50MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCRiQgTu/x1V9NTVf4zJ7PQgTO -ivda/SNi4HdSoiiyzDfXtyeXXfQwuHR+nGtqr+iideuDtEubig5Zru4gRY1oKGcn -mnUdjSpjIaH655gjyCV+tuYC774Fdn4sFZiPAe5ExAwOEgOHsrgGeuLYIIIXX/0J -FW2mQWOB0wHzxftNgKC1WoutZ4uNq15nC/W7BfpyR7pUkOVAb0oCNdKsIB4NDq9/ -is6MW/ZrLTZtsTAP0/f76BKqpM36eeUApvGe4RDQYNGxMVp2SO5oemjOyIz2qXZp -SZsSilDhJWqytxd8G3KbdGoZYBmdtuv+Tu48aZMiImpp1+zNDJGiZlzYqd2ZAgMB -AAGjUzBRMB0GA1UdDgQWBBQtH8QZY8Ew389MUw+cBocOb4pCfTAfBgNVHSMEGDAW -gBQtH8QZY8Ew389MUw+cBocOb4pCfTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBwVkWIfqpxAPyEoDQY7XMZrZQ7C6N7VDb5sMFoutTItmlbZOto -U08x5HfTfSuqUA2jK0FYhWLFea2njsa8ycffFGbf1YzOTY8956ufSOQrLtzJsZ74 -aIOr+VffhcdU1HQ3ncp6XY/XySK/C0tyZlJUvw5SIllMQog1jA8B4EX3LSGd0V3Q -Hu2FI3G/+iNDk2w4PF9iKFk2p//1Wq+xOjhrxmjyTxKa4w6mM/hwhUBz4nbd5HYo -/TyjW7TjAGRYYXOw+NLwoVyLzaSVRVEppGmxFHbuicxfbdHbQAzdhUU7Z2rEp2qA -FilIQHQH3kKnifEtfG8zwfAu1rN7c02gdpu3 ------END CERTIFICATE----- diff --git a/backend/key.pem b/backend/key.pem deleted file mode 100644 index 9bd84ce..0000000 --- a/backend/key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDCRiQgTu/x1V9N -TVf4zJ7PQgTOivda/SNi4HdSoiiyzDfXtyeXXfQwuHR+nGtqr+iideuDtEubig5Z -ru4gRY1oKGcnmnUdjSpjIaH655gjyCV+tuYC774Fdn4sFZiPAe5ExAwOEgOHsrgG -euLYIIIXX/0JFW2mQWOB0wHzxftNgKC1WoutZ4uNq15nC/W7BfpyR7pUkOVAb0oC -NdKsIB4NDq9/is6MW/ZrLTZtsTAP0/f76BKqpM36eeUApvGe4RDQYNGxMVp2SO5o -emjOyIz2qXZpSZsSilDhJWqytxd8G3KbdGoZYBmdtuv+Tu48aZMiImpp1+zNDJGi -ZlzYqd2ZAgMBAAECggEAJrZJ4BtCsnahezqoh0Yk9ilSYmLsJ9gt6zfN5ywzfm91 -yDkxvTamYGf9JLagK/36Fhd30wKEF24i7mmOf2VEqIb2iTx8zmLxGZhb2e640RaC -rDWfb2HdBGMogLnb8NFCbLcBLPOXevyYsYfeuJD/w08oEZ2QwDKi9L16k9w1d6uK -+aebcVggNWOAlDeOtJCn1nqy0TnLl8VSlM42SZKIgFdkXrHWKpfrr+GX1ckj70No -/kEHOnMzyT4s0YKvIE114Wm5oIvjACVGO09JJVeolYY/1/y7waMgZmpCD3vp14wF -1pZGLQsH4SA7EGv2hRKSENpmuxULdH+tI5A7TvbMtQKBgQD0ec6Jb4TuoKmRftDp -GNTeke6x9vyZyyQF+9Z2ZeFwA8k0Agg0r6BWwjX0xNjNv97T8RX2qj26q9EpquEl -Uql5y7pTrKaDtGGnI7en5gz3ZhmO4fwxM2TyRHzePXCzbAFvHdq48iI8IPQDLfaj -mD/sMBtE24I0W+r4c4lXj7PDJQKBgQDLbocXZjFE0y0OE+sIFVFfU9fD0gOGiQpu -i83bCorqEB1sqzIaq3bMDMdVMj9v+Pt2biiIx2JF4QuFC8B2nksFzUjc4Ya567xU -qSHqwQfhYqe+g7VpjP4EEefQFCSN/pHFODuqh/Qnl+FBiKvIH8Cx9XlJyFgrjLcG -L3+DGlBgZQKBgQCgEMRejaqOhpifT1W+2Gg/VXLgCGM42p06Ybn4CRqCOahZqd7v -h/HF/CBRozSD+dUOFTIZLzt9ZhNrYZtJ0YZu3SmgsVDQuKCbSzJq9p+Ut7+SInn5 -SLoWOSs8YyPQBa4mr3hOURKDJdw93LE4SW3I2XJxMftdBrWgeBz7PHYpFQKBgGhC -eVHwugeAA3NXmflGk7G7krV1iQEGcyY82IAOYyuanrn283Lftb7WPcLYQdLtVFNa -GcQgC6mssO67GySv89tBXrp1i0r2Gkt5czyROay1lyr47Zzu+bC0TI5EBIgRlDvz -mgDINMWl/XhMx12FiIisOkEqQKXxNEwjQ8K5VcBRAoGANpRsF9FaMdObg7vLS0iI -AKyr8qYVbiXzxKudxBM2DspBo9Ot5Mr68zEQPxd73ErK5WTnf0U7VCG1+/Ikq46H -5IallJBUegQaGyPOETRQDakzQNQrvcjh1knqBjBj5mvEjDZnvxa3pg+IC+4IvSGm -7WaDkfSnenvCVQ3tx+XQUaw= ------END PRIVATE KEY----- diff --git a/backend/server.js b/backend/server.js index e9301c0..398068c 100644 --- a/backend/server.js +++ b/backend/server.js @@ -41,7 +41,6 @@ async function startServer() { process.exit(1) } - // --- FIX START --- // Define the geofence polygon by calling the 'polygon' function directly const geofence = polygon([ [ @@ -55,7 +54,7 @@ async function startServer() { [101.80827335908509, 2.8350045747358337], ], ]) - // --- FIX END --- + app.use(cors()) app.use(express.json()) @@ -128,8 +127,8 @@ async function startServer() { // Insert the failed attempt into the database await db.execute( - 'INSERT INTO clock_records (worker_id, event_type, timestamp, qr_code_id, latitude, longitude, notes, distance_meters) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', - [userId, 'failed', new Date(), qrCodeValue, latitude, longitude, notes, distance] + 'INSERT INTO clock_records (worker_id, event_type, timestamp, qr_code_id, latitude, longitude, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', + [userId, 'failed', new Date(), qrCodeValue, latitude, longitude, notes] ); // Return an error to the user @@ -577,7 +576,7 @@ async function startServer() { const placeholders = idsArray.map(() => '?').join(',') // MODIFIED: Use LEFT JOIN and COALESCE to handle manual entries, and select `notes` - let query = `SELECT cr.id, w.full_name, cr.event_type, cr.timestamp, COALESCE(qc.name, 'Manual Entry') as qrCodeUsedName, cr.latitude, cr.longitude, cr.notes, cr.distance_meters FROM clock_records cr LEFT JOIN qr_codes qc ON cr.qr_code_id = qc.id JOIN workers w ON cr.worker_id = w.id WHERE cr.worker_id IN (${placeholders})`; + let query = `SELECT cr.id, w.full_name, cr.event_type, cr.timestamp, COALESCE(qc.name, 'Manual Entry') as qrCodeUsedName, cr.latitude, cr.longitude, cr.notes FROM clock_records cr LEFT JOIN qr_codes qc ON cr.qr_code_id = qc.id JOIN workers w ON cr.worker_id = w.id WHERE cr.worker_id IN (${placeholders})`; const params = [...idsArray] if (startDate && endDate) { diff --git a/nilai_clock.sql b/nilai_clock.sql index 5f7a4b0..a29783e 100644 --- a/nilai_clock.sql +++ b/nilai_clock.sql @@ -19,7 +19,6 @@ CREATE TABLE `clock_records` ( `longitude` decimal(11,8) DEFAULT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `notes` text, - `distance_meters` decimal(10,2) DEFAULT NULL, PRIMARY KEY (`id`), KEY `worker_id` (`worker_id`), KEY `qr_code_id` (`qr_code_id`) diff --git a/src/components/AttendanceReporting.vue b/src/components/AttendanceReporting.vue index a3e5865..a15e7bd 100644 --- a/src/components/AttendanceReporting.vue +++ b/src/components/AttendanceReporting.vue @@ -337,6 +337,11 @@ > Location +