From 62d757a343c7bf5060f1e94f711d4eac2da838be Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Fri, 16 Jan 2026 18:18:49 +0700 Subject: [PATCH 1/6] feat:popupPrivacy --- src/api/api.checkin.ts | 7 +- src/api/index.ts | 3 +- src/components/PopupPrivacy.vue | 315 ++++++++++++++++++++++++++++++++ src/views/MainView.vue | 8 + 4 files changed, 329 insertions(+), 4 deletions(-) create mode 100644 src/components/PopupPrivacy.vue diff --git a/src/api/api.checkin.ts b/src/api/api.checkin.ts index a0078fa..8172c07 100644 --- a/src/api/api.checkin.ts +++ b/src/api/api.checkin.ts @@ -13,8 +13,9 @@ export default { fileByFile: (name: string, group: string, id: string, fileName: string) => `${urlFile}/file/${name}/${group}/${id}/${fileName}`, - changePassword:`${orgKeycloak}/user/change-password`, - resetPassword:`${orgKeycloak}/user/reset-password`, + changePassword: `${orgKeycloak}/user/change-password`, + resetPassword: `${orgKeycloak}/user/reset-password`, - checkoutCheck:`${leave}/user/checkout-check` + checkoutCheck: `${leave}/user/checkout-check`, + privacy: `${env.API_URI}/org/profile/privacy`, } diff --git a/src/api/index.ts b/src/api/index.ts index 1a28e27..bac9d68 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -10,7 +10,8 @@ export const apiUrlConfig = import.meta.env.VITE_API_URI_CONFIG const config = ref({ development: { // API_URI: "https://localhost:7260/api", - API_URI: 'https://bma-ehr.frappet.synology.me/api/v1', + // API_URI: 'https://bma-ehr.frappet.synology.me/api/v1', + API_URI: 'https://hrmsbkk.case-collection.com/api/v1', }, test: { API_URI: 'http://localhost:5010/api/v1', diff --git a/src/components/PopupPrivacy.vue b/src/components/PopupPrivacy.vue new file mode 100644 index 0000000..5677e9d --- /dev/null +++ b/src/components/PopupPrivacy.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/src/views/MainView.vue b/src/views/MainView.vue index 572e08b..37151eb 100644 --- a/src/views/MainView.vue +++ b/src/views/MainView.vue @@ -13,6 +13,7 @@ import type { notiType } from '@/interface/index/Main' import type { Noti } from '@/interface/response/Main' import DialogHeader from '@/components/DialogHeader.vue' +import PopupPrivacy from '@/components/PopupPrivacy.vue' const mixin = useCounterMixin() const { @@ -23,6 +24,7 @@ const { success, showLoader, } = mixin + const router = useRouter() const $q = useQuasar() @@ -53,6 +55,9 @@ const reNewPassWord = ref('') const isPwdOld = ref(true) const isPwdNewOld = ref(true) const isPwdReNewOld = ref(true) + +const modalPrivacy = ref(false) + /** * ฟังก์ชั่นดึงข้อมูลจำนวนการแจ้งเตือน */ @@ -168,6 +173,7 @@ async function fetchKeycloakPosition() { .get(config.API.keycloakPosition()) .then(async (res) => { const data = await res.data.result + modalPrivacy.value = !data.privacyCheckin ? true : false //เช็คว่ามีรูปไหม ถ้ามีรูปเรียกข้อมูลรูป if (data.avatarName) { await getImg(data.profileId, data.avatarName) @@ -599,6 +605,8 @@ onMounted(async () => { + + 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 4/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 5/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 () => { - +