From 9793df1c57d59626a3bbe3e50523a3a58f780a34 Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Mon, 19 Jan 2026 13:35:54 +0700 Subject: [PATCH 1/6] fix --- src/components/PopupPrivacy.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/PopupPrivacy.vue b/src/components/PopupPrivacy.vue index 0109ffd..85d97d1 100644 --- a/src/components/PopupPrivacy.vue +++ b/src/components/PopupPrivacy.vue @@ -19,7 +19,7 @@ const privacyContent = { title: 'วัตถุประสงค์การใช้ข้อมูล', items: [ 'เพื่อยืนยันตัวตนของผู้ปฏิบัติงานในการบันทึกเวลาเข้า-ออกการปฏิบัติราชการ', - 'เพื่อใช้เป็นหลักฐานประกอบการบริหารงานด้านทรัพยากรบุคคล การจ่ายค่าตอบแหน และการกำกับ ดูแลการปฏิบัติราชการ', + 'เพื่อใช้เป็นหลักฐานประกอบการบริหารงานด้านทรัพยากรบุคคล การจ่ายค่าตอบแทน และการกำกับ ดูแลการปฏิบัติราชการ', 'เพื่อรักษาความถูกต้อง โปร่งใส และป้องกันการทุจริตในการบันทึกเวลาการปฏิบัติงาน', ], }, From 8b26530d52a14609d354a6d86898ed4a663900df Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Mon, 19 Jan 2026 14:47:32 +0700 Subject: [PATCH 2/6] fix:privacy --- src/components/AscGISMap.vue | 17 ++++++++++- src/components/PopupPrivacy.vue | 13 ++++---- src/composables/usePermissions.ts | 51 +++++++++++++++++++++++++++++++ src/stores/privacy.ts | 22 +++++++++++++ src/views/HomeView.vue | 21 ++++++++++++- src/views/MainView.vue | 8 ++--- 6 files changed, 120 insertions(+), 12 deletions(-) create mode 100644 src/composables/usePermissions.ts create mode 100644 src/stores/privacy.ts diff --git a/src/components/AscGISMap.vue b/src/components/AscGISMap.vue index b32e32a..c9ab17d 100644 --- a/src/components/AscGISMap.vue +++ b/src/components/AscGISMap.vue @@ -4,9 +4,11 @@ import { loadModules } from 'esri-loader' import axios from 'axios' import { useCounterMixin } from '@/stores/mixin' import { useQuasar } from 'quasar' +import { usePrivacyStore } from '@/stores/privacy' const mixin = useCounterMixin() const { messageError } = mixin +const privacyStore = usePrivacyStore() // import type { LocationObject } from '@/interface/index/Main' const mapElement = ref(null) @@ -200,6 +202,16 @@ async function initializeMap() { const locationGranted = ref(false) // Function to request location permission const requestLocationPermission = () => { + // เช็คสิทธิ์ privacy ก่อนเข้าถึงแผนที่ + if (!privacyStore.isAccepted) { + $q.notify({ + type: 'warning', + message: 'กรุณายอมรับนโยบายคุ้มครองข้อมูลส่วนบุคคลก่อนใช้งานแผนที่', + position: 'top', + }) + return + } + if (!navigator.geolocation) { messageError( $q, @@ -261,7 +273,10 @@ defineExpose({ }) onMounted(async () => { - await initializeMap() + // เรียกแผนที่เฉพาะเมื่อยอมรับ privacy แล้ว + if (privacyStore.isAccepted) { + await initializeMap() + } }) diff --git a/src/components/PopupPrivacy.vue b/src/components/PopupPrivacy.vue index 85d97d1..df4f675 100644 --- a/src/components/PopupPrivacy.vue +++ b/src/components/PopupPrivacy.vue @@ -1,7 +1,12 @@ diff --git a/src/views/MainView.vue b/src/views/MainView.vue index 37151eb..18c30d0 100644 --- a/src/views/MainView.vue +++ b/src/views/MainView.vue @@ -8,6 +8,7 @@ import config from '@/app.config' import avatar from '@/assets/avatar_user.jpg' import { logout, tokenParsed, getCookie } from '@/plugins/auth' import { useCounterMixin } from '@/stores/mixin' +import { usePrivacyStore } from '@/stores/privacy' import type { notiType } from '@/interface/index/Main' import type { Noti } from '@/interface/response/Main' @@ -16,6 +17,7 @@ import DialogHeader from '@/components/DialogHeader.vue' import PopupPrivacy from '@/components/PopupPrivacy.vue' const mixin = useCounterMixin() +const privacyStore = usePrivacyStore() const { date2Thai, hideLoader, @@ -56,8 +58,6 @@ const isPwdOld = ref(true) const isPwdNewOld = ref(true) const isPwdReNewOld = ref(true) -const modalPrivacy = ref(false) - /** * ฟังก์ชั่นดึงข้อมูลจำนวนการแจ้งเตือน */ @@ -173,7 +173,7 @@ async function fetchKeycloakPosition() { .get(config.API.keycloakPosition()) .then(async (res) => { const data = await res.data.result - modalPrivacy.value = !data.privacyCheckin ? true : false + privacyStore.modalPrivacy = !data.privacyCheckin ? true : false //เช็คว่ามีรูปไหม ถ้ามีรูปเรียกข้อมูลรูป if (data.avatarName) { await getImg(data.profileId, data.avatarName) @@ -606,7 +606,7 @@ onMounted(async () => { - +