diff --git a/src/api/12_evaluatePersonal/api.evaluate.ts b/src/api/12_evaluatePersonal/api.evaluate.ts index a355449a1..90b218f74 100644 --- a/src/api/12_evaluatePersonal/api.evaluate.ts +++ b/src/api/12_evaluatePersonal/api.evaluate.ts @@ -8,7 +8,7 @@ export default { evaluationMain: () => `${evaluation}`, - evaluateGetDetail: (id: string) => `${evaluation}/check-spec/${id}`, + evaluateGetDetail: (id: string) => `${evaluation}/admin/check-spec/${id}`, evaluateGetStep: (id: string) => `${evaluation}/check/admin/${id}`, meeting: () => `${evaluation}/meeting`, @@ -28,10 +28,11 @@ export default { evaluationHistory: (id: string) => `${evaluation}/step-history/${id}`, - evaluationDateAnnounce: (id: string) => `${evaluation}/check-date/${id}`, + evaluationDateAnnounce: (id: string) => + `${evaluation}/admin/check-date/${id}`, evaluationSigner: (id: string, num: number) => - `${evaluation}/doc${num}-signer/${id}`, + `${evaluation}/admin/doc${num}-signer/${id}`, evaluationSentToContact: (id: string) => `${evaluation}/contact/user/${id}`, diff --git a/src/main.ts b/src/main.ts index df8024dbe..e179635f1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,7 +3,6 @@ import App from "./App.vue"; import router from "./router"; import { Dialog, Notify, Quasar, Loading } from "quasar"; import "./quasar-user-options"; -import keycloak, { getToken } from "@/plugins/keycloak"; import qDraggableTable from "quasar-ui-q-draggable-table"; import "quasar-ui-q-draggable-table/dist/index.css"; @@ -14,15 +13,9 @@ import th from "quasar/lang/th"; import "@vuepic/vue-datepicker/dist/main.css"; import http from "./plugins/http"; import { createPinia } from "pinia"; -// organization -// position -// positionEmployee -//calendar -// insignia // import './assets/main.css' -// Import GlobalFilters import filters from "./plugins/filters"; const app = createApp(App); @@ -81,27 +74,4 @@ app.component( ); app.config.globalProperties.$http = http; - -// authen with keycloak client -const auth = await getToken(); - -if (auth.token && auth.refresh_token) { - keycloak.init({ - checkLoginIframe: false, - token: auth.token, - refreshToken: auth.refresh_token, - }); - // .then((authenticated) => { - // console.log("authenticated", authenticated); - // if (!authenticated) { - // window.location.reload(); - // } else { - // console.log("Authenticated"); - // } - // }) - // .catch((err) => { - // console.error("Keycloak initialization failed:", err); - // }); -} - app.mount("#app"); diff --git a/src/modules/00_support/store/Main.ts b/src/modules/00_support/store/Main.ts index 3d612a96c..0a7d01cb9 100644 --- a/src/modules/00_support/store/Main.ts +++ b/src/modules/00_support/store/Main.ts @@ -12,13 +12,13 @@ import type { SupportMessageStatus, SupportIssueCategoryResponse, } from "@/modules/00_support/interface/index/Main"; -import keycloak from "@/plugins/keycloak"; import { useQuasar } from "quasar"; +import { getToken, tokenParsed } from "@/plugins/auth"; -export const useSupportStore = defineStore("supportServiceStore", () => { +export const useSupportStore = defineStore("supportServiceStore", async () => { const { showLoader, hideLoader, messageError } = useCounterMixin(); const $q = useQuasar(); - const userId = ref(keycloak.subject); + const userId = ref(""); const issue = ref(); const message = ref(); const messageStatus = ref(); @@ -44,8 +44,9 @@ export const useSupportStore = defineStore("supportServiceStore", () => { }, 150); } + const token = await getToken(); const socket = io(config.API.supportSocket, { - auth: { token: keycloak.token }, + auth: { token: token }, autoConnect: false, path: "/api/v1/support/socket/", }); @@ -54,7 +55,10 @@ export const useSupportStore = defineStore("supportServiceStore", () => { userStatus.value = data; }); - socket.on("online", (r) => { + socket.on("online", async (r) => { + const user = await tokenParsed(); + userId.value = user.subject; + userStatus.value.push({ socketId: r.socketId, userId: r.userId, diff --git a/src/modules/03_recruiting/components/Information.vue b/src/modules/03_recruiting/components/Information.vue index ab19830b7..34a57b636 100644 --- a/src/modules/03_recruiting/components/Information.vue +++ b/src/modules/03_recruiting/components/Information.vue @@ -397,6 +397,7 @@ --> + diff --git a/src/modules/04_registryPerson/components/detail/PersonalInformation/04_FamilyNew.vue b/src/modules/04_registryPerson/components/detail/PersonalInformation/04_FamilyNew.vue index 487363119..5defd1310 100644 --- a/src/modules/04_registryPerson/components/detail/PersonalInformation/04_FamilyNew.vue +++ b/src/modules/04_registryPerson/components/detail/PersonalInformation/04_FamilyNew.vue @@ -172,9 +172,9 @@ const fromData = reactive({ /** * function fetch ข้อมูลบิดา */ -function fetchDataFather() { +async function fetchDataFather() { showLoader(); - http + await http .get( config.API.profileFamily(empType.value, "father") + `/${profileId.value}` ) @@ -201,9 +201,9 @@ function fetchDataFather() { /** * function fetch ข้อมูลมารดา */ -function fetchDataMother() { +async function fetchDataMother() { showLoader(); - http + await http .get( config.API.profileFamily(empType.value, "mother") + `/${profileId.value}` ) @@ -229,9 +229,9 @@ function fetchDataMother() { /** * function fetch ข้อมูลคู่สมรส */ -function fetchDataCouple() { +async function fetchDataCouple() { showLoader(); - http + await http .get( config.API.profileFamily(empType.value, "couple") + `/${profileId.value}` ) @@ -259,9 +259,9 @@ function fetchDataCouple() { /** * function fetch ข้อมูลบุตร */ -function fetchDataChildren() { +async function fetchDataChildren() { showLoader(); - http + await http .get( config.API.profileFamily(empType.value, "children") + `/${profileId.value}` @@ -412,7 +412,7 @@ function onOpenDialogHistory(type: string, id: string = "") { * function fetch ข้อมูลความสัมพันธ์ */ function fetchDataRelationship() { - showLoader(); + // showLoader(); http .get(config.API.orgRelationship) .then((res) => { @@ -426,7 +426,9 @@ function fetchDataRelationship() { messageError($q, err); }) .finally(() => { - hideLoader(); + // setTimeout(() => { + // hideLoader(); + // }, 2000); }); } @@ -472,14 +474,17 @@ function fetchHistory(id: string, type: string) { }); } -onMounted(() => { - Promise.all([ +onMounted(async () => { + showLoader(); + await Promise.all([ fetchDataFather(), fetchDataMother(), fetchDataCouple(), fetchDataChildren(), fetchDataRelationship(), - ]); + ]).then(() => { + hideLoader(); + }); }); diff --git a/src/modules/04_registryPerson/stores/profile.ts b/src/modules/04_registryPerson/stores/profile.ts index 1de06731e..52a3f62db 100644 --- a/src/modules/04_registryPerson/stores/profile.ts +++ b/src/modules/04_registryPerson/stores/profile.ts @@ -173,9 +173,13 @@ export const useProfileDataStore = defineStore("profile", () => { Ops.value.religionOps = optionreligions; OpsFilter.value.religionOps = optionreligions; }) - .catch((e: any) => {}) + .catch((e) => { + messageError($q, e); + }) .finally(() => { - hideLoader(); + setTimeout(() => { + hideLoader(); + }, 2500); }); }; diff --git a/src/modules/04_registryPerson/views/detailView.vue b/src/modules/04_registryPerson/views/detailView.vue index c432e35b3..8a12ad1e7 100644 --- a/src/modules/04_registryPerson/views/detailView.vue +++ b/src/modules/04_registryPerson/views/detailView.vue @@ -199,7 +199,7 @@ function uploadFileURL(uploadUrl: string, file: any) { } function fetchProfile(id: string) { - showLoader(); + // showLoader(); http .get(config.API.fileByFile("ทะเบียนประวัติ", "โปรไฟล์", id, fileName.value)) .then(async (res) => { @@ -208,9 +208,9 @@ function fetchProfile(id: string) { .catch(() => { profilePicture.value = avatar; }) - .finally(() => { - hideLoader(); - }); + // .finally(() => { + // hideLoader(); + // }); } const reasonStatus = ref(false); @@ -254,7 +254,7 @@ async function fetchDataPersonal() { showLoader(); await http .get(config.API.registryNewByProfileId(profileId.value, empType.value)) - .then((res) => { + .then(async (res) => { formDetail.value = res.data.result; if (res.data.result.leaveReason) { @@ -275,7 +275,7 @@ async function fetchDataPersonal() { fileName.value = res.data.result.avatarName; if (formDetail.value?.avatarName) { - fetchProfile(profileId.value); + await fetchProfile(profileId.value); } else { profilePicture.value = avatar; } @@ -291,13 +291,13 @@ async function fetchDataPersonal() { } }) .finally(() => { - hideLoader(); + setTimeout(() => { + hideLoader(); + }, 2800); }); } function onClickDownloadKp7(type: string) { - console.log(empType.value); - showLoader(); const url = type === "FULL" diff --git a/src/modules/05_placement/components/Other/Detail.vue b/src/modules/05_placement/components/Other/Detail.vue index 332bdd189..b93904e95 100644 --- a/src/modules/05_placement/components/Other/Detail.vue +++ b/src/modules/05_placement/components/Other/Detail.vue @@ -5,8 +5,7 @@ import { checkPermission } from "@/utils/permissions"; import { useRoute, useRouter } from "vue-router"; import http from "@/plugins/http"; import config from "@/app.config"; -import keycloak from "@/plugins/keycloak"; - +import { tokenParsed } from "@/plugins/auth"; /** * impotyType */ @@ -143,8 +142,9 @@ const getClass = (val: boolean) => { }; onMounted(async () => { - if (keycloak.tokenParsed != null) { - roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1"); + const user = await tokenParsed(); + if (user) { + roleAdmin.value = await user.role.includes("placement1"); } fetchData(); }); diff --git a/src/modules/05_placement/components/PersonalList/Detail.vue b/src/modules/05_placement/components/PersonalList/Detail.vue index 932e0c69b..79b6e04f0 100644 --- a/src/modules/05_placement/components/PersonalList/Detail.vue +++ b/src/modules/05_placement/components/PersonalList/Detail.vue @@ -3,8 +3,8 @@ import { onMounted, ref } from "vue"; import { defineAsyncComponent } from "@vue/runtime-core"; import { useRouter, useRoute } from "vue-router"; import cardTop from "@/modules/05_placement/components/PersonalList/StatCard.vue"; +import { tokenParsed } from "@/plugins/auth"; -import keycloak from "@/plugins/keycloak"; import http from "@/plugins/http"; import config from "@/app.config"; @@ -81,8 +81,9 @@ onMounted(async () => { await fetchPlacementData(); } - if (keycloak.tokenParsed != null) { - roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1"); + const user = await tokenParsed(); + if (user) { + roleAdmin.value = await user.role.includes("placement1"); } await getStat(); diff --git a/src/modules/05_placement/components/PersonalList/Table.vue b/src/modules/05_placement/components/PersonalList/Table.vue index 0243364fe..e9fd76e4c 100644 --- a/src/modules/05_placement/components/PersonalList/Table.vue +++ b/src/modules/05_placement/components/PersonalList/Table.vue @@ -18,9 +18,9 @@ import DialogOrgTree from "@/modules/05_placement/components/PersonalList/OrgTre import { useRoute } from "vue-router"; import http from "@/plugins/http"; import config from "@/app.config"; -import keycloak from "@/plugins/keycloak"; import router from "@/router"; import avatar from "@/assets/avatar_user.jpg"; +import { tokenParsed } from "@/plugins/auth"; let roleAdmin = ref(false); @@ -714,8 +714,9 @@ function onSubmitDate() { } onMounted(async () => { - if (keycloak.tokenParsed != null) { - roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1"); + const user = await tokenParsed(); + if (user) { + roleAdmin.value = await user.role.includes("placement1"); if (roleAdmin.value === false) { displayAdd.value = false; visibleColumns.value = [ diff --git a/src/modules/05_placement/components/Relocation/RelocationbyId.vue b/src/modules/05_placement/components/Relocation/RelocationbyId.vue index da4c407a4..3bffec327 100644 --- a/src/modules/05_placement/components/Relocation/RelocationbyId.vue +++ b/src/modules/05_placement/components/Relocation/RelocationbyId.vue @@ -6,7 +6,6 @@ import { useCounterMixin } from "@/stores/mixin"; import http from "@/plugins/http"; import config from "@/app.config"; -import keycloak from "@/plugins/keycloak"; import CurrencyInput from "@/components/CurruncyInput.vue"; import type { QTableProps, QForm } from "quasar"; import PopupPersonal from "@/components/Dialogs/PopupPersonal.vue"; diff --git a/src/modules/05_placement/components/Transfer/transferRegistry.vue b/src/modules/05_placement/components/Transfer/transferRegistry.vue index c37ab14ed..bfb31fd1b 100644 --- a/src/modules/05_placement/components/Transfer/transferRegistry.vue +++ b/src/modules/05_placement/components/Transfer/transferRegistry.vue @@ -8,7 +8,6 @@ import { checkPermission } from "@/utils/permissions"; // import CurrencyInput from "@/components/CurruncyInput.vue"; import http from "@/plugins/http"; import config from "@/app.config"; -import keycloak from "@/plugins/keycloak"; import type { QTableProps, QForm } from "quasar"; import type { DataProfile } from "@/modules/05_placement/interface/index/Main"; @@ -19,6 +18,7 @@ import type { } from "@/modules/05_placement/interface/response/Transfer"; import PopupPersonal from "@/components/Dialogs/PopupPersonal.vue"; import CardProfile from "@/components/CardProfile.vue"; +import { tokenParsed } from "@/plugins/auth"; const modalPersonal = ref(false); const personId = ref(""); @@ -304,8 +304,9 @@ function updatemodalPersonal(modal: boolean) { } onMounted(async () => { - if (keycloak.tokenParsed != null) { - roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1"); + const user = await tokenParsed(); + if (user) { + roleAdmin.value = await user.role.includes("placement1"); } await getData(); }); diff --git a/src/modules/06_retirement/components/Discharged/dischargedRegistry.vue b/src/modules/06_retirement/components/Discharged/dischargedRegistry.vue index a78028226..dd072f016 100644 --- a/src/modules/06_retirement/components/Discharged/dischargedRegistry.vue +++ b/src/modules/06_retirement/components/Discharged/dischargedRegistry.vue @@ -7,11 +7,11 @@ import { useCounterMixin } from "@/stores/mixin"; import CurrencyInput from "@/components/CurruncyInput.vue"; import http from "@/plugins/http"; import config from "@/app.config"; -import keycloak from "@/plugins/keycloak"; /**Import type */ import type { QForm } from "quasar"; import type { ResponseDataDetail } from "@/modules/06_retirement/interface/response/discharged"; import PopupPersonal from "@/components/Dialogs/PopupPersonal.vue"; +import { tokenParsed } from "@/plugins/auth"; const modalPersonal = ref(false); const personId = ref(""); @@ -64,8 +64,9 @@ const responseData = ref({ /** Hook */ onMounted(async () => { - if (keycloak.tokenParsed != null) { - roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1"); + const user = await tokenParsed(); + if (user) { + roleAdmin.value = await user.role.includes("placement1"); } await getData(); }); diff --git a/src/modules/06_retirement/components/DismissOrder/outRegistry.vue b/src/modules/06_retirement/components/DismissOrder/outRegistry.vue index efc60e412..f3669fa42 100644 --- a/src/modules/06_retirement/components/DismissOrder/outRegistry.vue +++ b/src/modules/06_retirement/components/DismissOrder/outRegistry.vue @@ -5,7 +5,7 @@ import { useRoute, useRouter } from "vue-router"; import { useCounterMixin } from "@/stores/mixin"; import http from "@/plugins/http"; import config from "@/app.config"; -import keycloak from "@/plugins/keycloak"; +import { tokenParsed } from "@/plugins/auth"; /**Import type */ import type { QForm } from "quasar"; @@ -146,8 +146,9 @@ const getClass = (val: boolean) => { /** Hook */ onMounted(async () => { - if (keycloak.tokenParsed != null) { - roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1"); + const user = await tokenParsed(); + if (user) { + roleAdmin.value = await user.role.includes("placement1"); } await getData(); }); @@ -182,7 +183,11 @@ onMounted(async () => { แก้ไขข้อมูลเพื่อลงบัญชีแนบท้าย -
+
(route.name == "exit-Interview-detailsOnly"); +const checkRoutePermisson = ref( + route.name == "exit-Interview-detailsOnly" +); const mixin = useCounterMixin(); const dataId = route.params.id.toString(); const { @@ -80,8 +82,9 @@ const adjustOther = ref(""); /** HOOK */ onMounted(async () => { - if (keycloak.tokenParsed != null) { - roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1"); + const user = await tokenParsed(); + if (user) { + roleAdmin.value = await user.role.includes("placement1"); } await getData(); await fecthquestion(); @@ -1087,9 +1090,14 @@ const putData = () => {
-
+
+ +
- + ({ /**Hook */ onMounted(async () => { - if (keycloak.tokenParsed != null) { - roleAdmin.value = await keycloak.tokenParsed.role.includes("placement1"); + const user = await tokenParsed(); + if (user) { + roleAdmin.value = await user.role.includes("placement1"); } await getData(); }); diff --git a/src/modules/06_retirement/components/resign/ResignByid.vue b/src/modules/06_retirement/components/resign/ResignByid.vue index 5d9ac5070..37406a5c9 100644 --- a/src/modules/06_retirement/components/resign/ResignByid.vue +++ b/src/modules/06_retirement/components/resign/ResignByid.vue @@ -9,8 +9,8 @@ import { useRetirementDataStore } from "@/modules/06_retirement/store"; import http from "@/plugins/http"; import config from "@/app.config"; import axios from "axios"; +import { tokenParsed } from "@/plugins/auth"; -import keycloak from "@/plugins/keycloak"; import type { TypeFile, rowFile, @@ -144,10 +144,11 @@ const checkboxOp = ref([ onMounted(async () => { fetchData(id.value); fetchFile(); - if (keycloak.tokenParsed !== undefined) { - const commander = await keycloak.tokenParsed.role.includes("commander"); - const oligarch = await keycloak.tokenParsed.role.includes("oligarch"); - const officer = await keycloak.tokenParsed.role.includes("officer"); + const user = await tokenParsed(); + if (user) { + const commander = await user.role.includes("commander"); + const oligarch = await kuser.role.includes("oligarch"); + const officer = await user.role.includes("officer"); if (commander) { roleUser.value = "commander"; } else if (oligarch) { diff --git a/src/modules/08_registryEmployee/components/DialogAddEmployee.vue b/src/modules/08_registryEmployee/components/DialogAddEmployee.vue index 7a44e1458..9a5f19525 100644 --- a/src/modules/08_registryEmployee/components/DialogAddEmployee.vue +++ b/src/modules/08_registryEmployee/components/DialogAddEmployee.vue @@ -216,19 +216,17 @@ function calculateMaxDate() { } function onSubmit() { - dialogConfirm($q, () => { + dialogConfirm($q, async () => { showLoader(); - http + await http .post(config.API.registryNew("-employee"), formData) - .then(() => { - success($q, "บันทึกข้อมูลสำเร็จ"); - props.fetchData?.(); + .then(async () => { + await props.fetchData?.(); + await success($q, "บันทึกข้อมูลสำเร็จ"); closeDialog(); }) .catch((err) => { messageError($q, err); - }) - .finally(() => { hideLoader(); }); }); diff --git a/src/modules/08_registryEmployee/components/DialogSelectPos.vue b/src/modules/08_registryEmployee/components/DialogSelectPos.vue index e925afa3b..3d0bbd403 100644 --- a/src/modules/08_registryEmployee/components/DialogSelectPos.vue +++ b/src/modules/08_registryEmployee/components/DialogSelectPos.vue @@ -378,9 +378,9 @@ async function onClickSubmit() { await http .put(config.API.positionEmployee(props?.dataRow?.id), body) - .then(() => { - success($q, "บันทึกข้อมูลสำเร็จ"); - props.fetchData?.(); + .then(async () => { + await props.fetchData?.(); + await success($q, "บันทึกข้อมูลสำเร็จ"); closePopup(); }) .catch((err) => { diff --git a/src/modules/08_registryEmployee/components/DialogSendOrder.vue b/src/modules/08_registryEmployee/components/DialogSendOrder.vue index 465f6f655..52b209789 100644 --- a/src/modules/08_registryEmployee/components/DialogSendOrder.vue +++ b/src/modules/08_registryEmployee/components/DialogSendOrder.vue @@ -182,10 +182,10 @@ function onClickSendOrder() { }; http .post(config.API.orgProfileReport, data) - .then(() => { - success($q, "บันทึกสำเร็จ"); + .then(async() => { + await props?.fetchData?.(); + await success($q, "บันทึกสำเร็จ"); closeDialog(); - props?.fetchData?.(); }) .catch((err) => { messageError($q, err); diff --git a/src/modules/08_registryEmployee/components/DialogSendToCommand.vue b/src/modules/08_registryEmployee/components/DialogSendToCommand.vue index b87a817cc..522a2bbc7 100644 --- a/src/modules/08_registryEmployee/components/DialogSendToCommand.vue +++ b/src/modules/08_registryEmployee/components/DialogSendToCommand.vue @@ -258,16 +258,16 @@ const sendToCommand = async () => { showLoader(); await http .post(config.API.organizationEmployeeSendOrder, data) - .then((res: any) => { - success($q, "บันทึกสำเร็จ"); + .then(async () => { + await props.fetchNewList(); + await success($q, "บันทึกสำเร็จ"); + props.closeDialog(); + selected.value = []; }) .catch((e: any) => { messageError($q, e); }) .finally(async () => { - props.fetchNewList(); - props.closeDialog(); - selected.value = []; hideLoader(); }); }; diff --git a/src/modules/08_registryEmployee/views/Main.vue b/src/modules/08_registryEmployee/views/Main.vue index 7b968d47a..6b914c99f 100644 --- a/src/modules/08_registryEmployee/views/Main.vue +++ b/src/modules/08_registryEmployee/views/Main.vue @@ -218,7 +218,7 @@ watch( function fetchList() { showLoader(); http - .get(config.API.registryNew("-employee"), { params: queryParams }) + .get(config.API.registryNew("-temp"), { params: queryParams }) .then((res) => { maxPage.value = Math.ceil(res.data.result.total / queryParams.pageSize); total.value = res.data.result.total; @@ -233,18 +233,16 @@ function fetchList() { } function onClickDelete(id: string) { - dialogRemove($q, () => { + dialogRemove($q, async () => { showLoader(); - http + await http .delete(config.API.registryNew("-employee") + `/${id}`) - .then(() => { - success($q, "ลบข้อมูลสำเร็จ"); - fetchList(); + .then(async () => { + await fetchList(); + await success($q, "ลบข้อมูลสำเร็จ"); }) .catch((err) => { messageError($q, err); - }) - .finally(() => { hideLoader(); }); }); diff --git a/src/modules/09_leave/components/2_Leave/Calendar.vue b/src/modules/09_leave/components/2_Leave/Calendar.vue index fcd31835a..d21e7978f 100644 --- a/src/modules/09_leave/components/2_Leave/Calendar.vue +++ b/src/modules/09_leave/components/2_Leave/Calendar.vue @@ -11,7 +11,6 @@ import allLocales from "@fullcalendar/core/locales-all"; import listPlugin from "@fullcalendar/list"; import http from "@/plugins/http"; import config from "@/app.config"; -import keycloak from "@/plugins/keycloak"; import moment from "moment"; import { checkPermission } from "@/utils/permissions"; /** importType*/ @@ -19,6 +18,7 @@ import type { DataDateMonthObject, ResCalendar, } from "@/modules/09_leave/interface/response/leave"; +import { tokenParsed } from "@/plugins/auth"; /** importStore*/ import { useCounterMixin } from "@/stores/mixin"; @@ -32,9 +32,7 @@ const router = useRouter(); const { showLoader, hideLoader, messageError, monthYear2Thai } = mixin; -const keycloakId = ref( - keycloak.tokenParsed ? keycloak.tokenParsed.sub!.toString() : "" -); +const keycloakId = ref(""); /** * Option ของปฏิทิน */ @@ -209,6 +207,8 @@ function redirectToDetail(id: string) { * เรียกฟังก์ชันทั้งหมดตอนเรียกใช้ไฟล์นี้ */ onMounted(async () => { + const user = await tokenParsed(); + keycloakId.value = user?.sub; await fetchDataCalendar("onMounted"); }); @@ -292,11 +292,19 @@ const monthYearThai = (val: DataDateMonthObject) => {