hrms-checkin/src/stores/positionKeycloak.ts
waruneeauy 001e7d3580
All checks were successful
Build & Deploy on Dev / build (push) Successful in 2m30s
fixed image profile to store
2026-04-28 09:47:12 +07:00

78 lines
2.5 KiB
TypeScript

import { ref } from 'vue'
import { defineStore } from 'pinia'
import type { KeycloakPosition } from '@/interface/keycloak-position'
export const usePositionKeycloakStore = defineStore(
'positionKeycloak',
() => {
const menuData = ref<string[]>([
'ลงเวลาปฏิบัติงาน',
'ประวัติการลงเวลา',
'รายการลงเวลากรณีพิเศษ',
])
const dataPositionKeycloak = ref<KeycloakPosition | null>(null)
const profileImg = ref<string>('')
function setPositionKeycloak(data: KeycloakPosition) {
dataPositionKeycloak.value = data
}
/**
* ตั้งค่ารูปโปรไฟล์ผู้ใช้งาน
* @param url URL ของรูปโปรไฟล์
*/
function setProfileImg(url: string) {
profileImg.value = url
}
/**
* ล้างข้อมูล Keycloak position (ใช้เมื่อ logout)
*/
function clearPositionKeycloak() {
dataPositionKeycloak.value = null
profileImg.value = ''
// ลบ localStorage ด้วยเพื่อให้แน่ใจว่าข้อมูลหายจริง
localStorage.removeItem('positionKeycloak')
}
/**
* สร้างชื่อหน่วยงานจากข้อมูลลำดับชั้นองค์กร
* @param obj ข้อมูลองค์กรที่มีโครงสร้าง child4 -> child3 -> child2 -> child1 -> root
* @returns ชื่อหน่วยงานในรูปแบบ string เชื่อมด้วย /
*/
function findOrgName(obj: KeycloakPosition | null): string {
if (!obj?.organization) {
return ''
}
const org = obj.organization
const levels = ['child4', 'child3', 'child2', 'child1', 'root'] as const
const parts: string[] = []
for (const level of levels) {
const value = org[level]
if (value) {
parts.push(value)
}
}
return parts.length > 0 ? parts.join('/') : '-'
}
return {
setPositionKeycloak,
clearPositionKeycloak,
setProfileImg,
dataPositionKeycloak,
profileImg,
findOrgName,
menuData,
}
},
{
persist: {
key: 'positionKeycloak',
storage: localStorage, // ใช้ localStorage เพื่อให้ข้อมูลอยู่ถาวร
},
}
)