From e659b2b45594c35a1464f32108f99f01e68a2715 Mon Sep 17 00:00:00 2001 From: sudomarcma <1040211836@qq.com> Date: Wed, 23 Jul 2025 17:07:46 +0800 Subject: [PATCH] feat:UI enhancements --- .../release/baselineProfiles/0/app-release.dm | Bin 0 -> 3089 bytes .../release/baselineProfiles/1/app-release.dm | Bin 0 -> 3026 bytes android/app/release/output-metadata.json | 37 +++++++++++ src/App.vue | 6 ++ src/assets/main.css | 7 +++ src/locales/en.json | 11 +++- src/locales/ms.json | 11 +++- src/services/authService.js | 4 +- src/views/ChangePasswordView.vue | 20 +++--- src/views/LoginView.vue | 1 + src/views/SettingsView.vue | 59 +++++++++--------- src/views/WorkerDashboardView.vue | 53 +++++++++++----- src/views/WorkerHistoryView.vue | 22 +++---- 13 files changed, 164 insertions(+), 67 deletions(-) create mode 100644 android/app/release/baselineProfiles/0/app-release.dm create mode 100644 android/app/release/baselineProfiles/1/app-release.dm create mode 100644 android/app/release/output-metadata.json diff --git a/android/app/release/baselineProfiles/0/app-release.dm b/android/app/release/baselineProfiles/0/app-release.dm new file mode 100644 index 0000000000000000000000000000000000000000..44f948807785e901cd85bda82dc67e3506b6c069 GIT binary patch literal 3089 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 HKUV(*qIAzK literal 0 HcmV?d00001 diff --git a/android/app/release/output-metadata.json b/android/app/release/output-metadata.json new file mode 100644 index 0000000..36f38ec --- /dev/null +++ b/android/app/release/output-metadata.json @@ -0,0 +1,37 @@ +{ + "version": 3, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.ouji.factory.myapp", + "variantName": "release", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "attributes": [], + "versionCode": 1, + "versionName": "1.0.1a", + "outputFile": "app-release.apk" + } + ], + "elementType": "File", + "baselineProfiles": [ + { + "minApi": 28, + "maxApi": 30, + "baselineProfiles": [ + "baselineProfiles/1/app-release.dm" + ] + }, + { + "minApi": 31, + "maxApi": 2147483647, + "baselineProfiles": [ + "baselineProfiles/0/app-release.dm" + ] + } + ], + "minSdkVersionForDexing": 24 +} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index d74d6d7..d552586 100644 --- a/src/App.vue +++ b/src/App.vue @@ -178,6 +178,12 @@ onMounted(async () => { sessionStorage.setItem('token', token) } + // Get cached worker data to retrieve username + const cachedWorkerData = await authService.getCachedWorkerData(autoLoginResult.userId); + if (cachedWorkerData && cachedWorkerData.username) { + sessionStorage.setItem('username', cachedWorkerData.username); + } + // Start native services await nativeServicesManager.onUserLogin() diff --git a/src/assets/main.css b/src/assets/main.css index 82cb921..c1fe388 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -100,3 +100,10 @@ padding-bottom: calc(var(--safe-area-inset-bottom) + 4rem); /* 4rem = bottom nav height */ } } + +/* Dark mode overrides */ +@layer base { + html.dark { + color-scheme: dark; + } +} diff --git a/src/locales/en.json b/src/locales/en.json index e096982..b86c15d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -250,5 +250,14 @@ "workLocationTracking": "Work Location Tracking", "locationTrackingForAttendance": "Location tracking active for work attendance", - "monitoringLocation": "Monitoring location for work attendance" + "monitoringLocation": "Monitoring location for work attendance", + + "appInformation": "App Information", + "version": "Version", + "platform": "Platform", + "android": "Android", + "web": "Web", + "darkMode": "Dark Mode", + "enableDarkMode": "Enable dark mode", + "disableDarkMode": "Disable dark mode" } diff --git a/src/locales/ms.json b/src/locales/ms.json index f2cb7a3..b40fe9c 100644 --- a/src/locales/ms.json +++ b/src/locales/ms.json @@ -249,5 +249,14 @@ "workLocationTracking": "Penjejakan Lokasi Kerja", "locationTrackingForAttendance": "Penjejakan lokasi aktif untuk kehadiran kerja", "monitoringLocation": "Memantau lokasi untuk kehadiran kerja", - "failedToVerifyStatus": "Gagal untuk mengesahkan status semasa dari pelayan." + "failedToVerifyStatus": "Gagal untuk mengesahkan status semasa dari pelayan.", + + "appInformation": "Maklumat Aplikasi", + "version": "Versi", + "platform": "Platform", + "android": "Android", + "web": "Web", + "darkMode": "Mod Gelap", + "enableDarkMode": "Aktifkan mod gelap", + "disableDarkMode": "Nyahaktifkan mod gelap" } diff --git a/src/services/authService.js b/src/services/authService.js index 059ac82..2af6b79 100644 --- a/src/services/authService.js +++ b/src/services/authService.js @@ -228,9 +228,9 @@ class AuthService { credentials ) - // Cache worker data + // Cache worker data including username if (decodedToken.role === 'worker') { - await this.cacheWorkerData(decodedToken.userId, { full_name: data.fullName }) + await this.cacheWorkerData(decodedToken.userId, { full_name: data.fullName, username: username }) } return { diff --git a/src/views/ChangePasswordView.vue b/src/views/ChangePasswordView.vue index fef5171..1212c69 100644 --- a/src/views/ChangePasswordView.vue +++ b/src/views/ChangePasswordView.vue @@ -1,5 +1,5 @@