- พื้นที่ใกล้เคียง {{ formLocation.POI ?? formLocation.POI }}
+ พื้นที่ใกล้เคียง {{ formLocation.POI }}
{{ location }}
@@ -1318,7 +1316,7 @@ watch(
.card-container {
position: relative;
overflow: hidden;
- height: autu; /* Adjust as needed */
+ height: auto; /* Adjust as needed */
background: #f5f5f5;
height: 35vh !important;
box-shadow: none !important;
@@ -1327,7 +1325,7 @@ watch(
.card-container-xs {
position: relative;
overflow: hidden;
- height: autu; /* Adjust as needed */
+ height: auto; /* Adjust as needed */
background: #ffffff;
height: 35vh !important;
border-radius: 10px;
diff --git a/src/views/MainView.vue b/src/views/MainView.vue
index c8bc1d8..edebfbc 100644
--- a/src/views/MainView.vue
+++ b/src/views/MainView.vue
@@ -10,6 +10,7 @@ import { logout, tokenParsed, getCookie, gotoLeavePage } from '@/plugins/auth'
import { useCounterMixin } from '@/stores/mixin'
import { usePrivacyStore } from '@/stores/privacy'
import { usePositionKeycloakStore } from '@/stores/positionKeycloak'
+import type { KeycloakPosition } from '@/interface/keycloak-position'
// import type { notiType } from '@/interface/index/Main'
// import type { Noti } from '@/interface/response/Main'
@@ -144,6 +145,8 @@ function onClickLogout() {
ok: 'ยืนยัน',
persistent: true,
}).onOk(async () => {
+ // ล้างข้อมูล positionKeycloak ก่อน logout
+ positionKeycloakStore.clearPositionKeycloak()
await http.post(config.API.keycloakLogSSO, { text: 'ออกจากระบบ' })
await logout()
})
@@ -174,16 +177,50 @@ const landingPageUrl = ref(configParam.landingPageUrl)
/** ฟังก์ชันเรียกข้อมูลผู้ใช่งาน*/
async function fetchKeycloakPosition() {
+ // เช็คว่ามีข้อมูลใน store อยู่แล้วหรือไม่ (จาก localStorage)
+ const existingData = positionKeycloakStore.dataPositionKeycloak
+
+ if (existingData) {
+ // มีข้อมูลอยู่แล้ว ใช้ข้อมูลเดิม
+ privacyStore.modalPrivacy = !existingData.privacyCheckin
+ privacyStore.setAccepted(existingData.privacyCheckin)
+
+ //เช็คว่ามีรูปไหม ถ้ามีรูปเรียกข้อมูลรูป
+ if (existingData.avatarName) {
+ getImg(existingData.profileId, existingData.avatarName)
+ } else {
+ profileImg.value = avatar
+ }
+ return
+ }
+
+ // ไม่มีข้อมูล ให้ fetch จาก API
await http
.get(config.API.keycloakPosition())
.then(async (res) => {
- const data = await res.data.result
- positionKeycloakStore.setPositionKeycloak(data)
- privacyStore.modalPrivacy = !data.privacyCheckin ? true : false
- privacyStore.setAccepted(data.privacyCheckin)
+ const apiData = await res.data.result
+
+ // Map API response to KeycloakPosition interface
+ const keycloakData: KeycloakPosition = {
+ privacyCheckin: apiData.privacyCheckin ?? false,
+ avatarName: apiData.avatarName,
+ profileId: apiData.profileId,
+ organization: {
+ root: apiData.root,
+ child1: apiData.child1,
+ child2: apiData.child2,
+ child3: apiData.child3,
+ child4: apiData.child4,
+ },
+ }
+
+ positionKeycloakStore.setPositionKeycloak(keycloakData)
+ privacyStore.modalPrivacy = !keycloakData.privacyCheckin
+ privacyStore.setAccepted(keycloakData.privacyCheckin)
+
//เช็คว่ามีรูปไหม ถ้ามีรูปเรียกข้อมูลรูป
- if (data.avatarName) {
- getImg(data.profileId, data.avatarName)
+ if (keycloakData.avatarName) {
+ getImg(keycloakData.profileId, keycloakData.avatarName)
} else {
profileImg.value = avatar
}
@@ -297,6 +334,7 @@ onMounted(async () => {
const checkTokenParsed = await tokenParsed()
const SSO_TOKEN = await getCookie('SSO')
isSsoToken.value = SSO_TOKEN === 'y' ? true : false
+
if (checkTokenParsed != null) {
fullName.value = checkTokenParsed.name
}
diff --git a/tests/utils.ts b/tests/utils.ts
new file mode 100644
index 0000000..92b5e37
--- /dev/null
+++ b/tests/utils.ts
@@ -0,0 +1,26 @@
+import { enableAutoUnmount, flushPromises, VueWrapper } from '@vue/test-utils'
+import { createPinia, setActivePinia } from 'pinia'
+
+/**
+ * Helper function to setup test environment with Pinia
+ */
+export function setupTest() {
+ const pinia = createPinia()
+ setActivePinia(pinia)
+ return pinia
+}
+
+/**
+ * Helper to flush all pending promises
+ */
+export async function flushAllPromises() {
+ await flushPromises()
+ await new Promise((resolve) => setTimeout(resolve, 0))
+}
+
+/**
+ * Helper to cleanup after each test
+ */
+export function teardownTest() {
+ vi.clearAllMocks()
+}