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] 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 () => { - +