diff --git a/src/modules/05_placement/components/AppointEmployee/DialogOrders.vue b/src/modules/05_placement/components/AppointEmployee/DialogOrders.vue index 1573d607c..4e1bbce3f 100644 --- a/src/modules/05_placement/components/AppointEmployee/DialogOrders.vue +++ b/src/modules/05_placement/components/AppointEmployee/DialogOrders.vue @@ -16,7 +16,13 @@ import DialogCreateCommand from "@/modules/18_command/components/DialogCreateCom const $q = useQuasar(); const storeCommand = useCommandMainStore(); const mixin = useCounterMixin(); -const { dialogConfirm, date2Thai, onSearchDataTable } = mixin; +const { + dialogConfirm, + date2Thai, + onSearchDataTable, + findOrgNameHtml, + findOrgName, +} = mixin; const { statusText } = useTransferDataStore(); const props = defineProps({ @@ -166,7 +172,14 @@ const columns2 = ref([ headerStyle: "font-size: 14px", style: "font-size: 14px", format: (val, row) => { - return `${row.root.position}${row.root.posTypeName}${row.root.posLevelName}${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + // return `${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + return `${row.position !== null ? row.position : ""} ${ + row.posLevelName !== null ? `${row.posLevelName}` : "" + } ${ + row.nodeShortName !== null + ? `(${row.nodeShortName}${row.posMasterNo})` + : "" + } ${findOrgName(row)}`; }, }, { @@ -429,44 +442,21 @@ watch(
-
-
- {{ - props.row.position !== null - ? props.row.position - : "" - }}{{ - (props.row.posTypeName !== null && - props.row.posTypeName === "บริหาร") || - props.row.posTypeName === "อำนวยการ" - ? `${props.row.posTypeName}` - : "" - }}{{ - props.row.posLevelName !== null - ? `${props.row.posLevelName}` - : "" - }} -
-
- {{ props.row.root !== null ? props.row.root : "" }} - {{ - props.row.rootShortName !== null - ? `(${props.row.rootShortName})` - : "" - }} -
-
- {{ - props.row.nodeName !== null - ? props.row.nodeName - : "-" - }} - {{ - props.row.nodeShortName !== null - ? `(${props.row.nodeShortName}${props.row.posMasterNo})` - : "" - }} -
+ {{ + props.row.position !== null ? props.row.position : "" + }} + {{ + props.row.posLevelName !== null + ? `${props.row.posLevelName}` + : "" + }} + {{ + props.row.nodeShortName !== null + ? `(${props.row.nodeShortName}${props.row.posMasterNo})` + : "" + }} +
+ {{ findOrgNameHtml(props.row) }}
diff --git a/src/modules/05_placement/components/AppointMent/DialogOrders.vue b/src/modules/05_placement/components/AppointMent/DialogOrders.vue index 3c34966b2..3949269d5 100644 --- a/src/modules/05_placement/components/AppointMent/DialogOrders.vue +++ b/src/modules/05_placement/components/AppointMent/DialogOrders.vue @@ -19,7 +19,13 @@ const $q = useQuasar(); const storeFn = useTransferDataStore(); const storeCommand = useCommandMainStore(); const { statusText } = storeFn; -const { dialogConfirm, onSearchDataTable, date2Thai } = useCounterMixin(); +const { + dialogConfirm, + onSearchDataTable, + date2Thai, + findOrgNameHtml, + findOrgName, +} = useCounterMixin(); /** * props @@ -163,7 +169,22 @@ const columns2 = ref([ headerStyle: "font-size: 14px", style: "font-size: 14px", format: (val, row) => { - return `${row.root.position}${row.root.posTypeName}${row.root.posLevelName}${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + // return `${row.root.position}${row.root.posLevelName}${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + return `${row.position !== null ? row.position : ""}${ + row.posLevelName !== null ? `${row.posLevelName}` : "" + } ${ + row.nodeShortName !== null + ? `(${row.nodeShortName}${row.posMasterNo})` + : "" + } ${ + row.positionExecutive !== null + ? `${row.positionExecutive}${ + row.positionExecutiveField + ? ` (${row.positionExecutiveField})` + : "" + }` + : "" + } ${findOrgName(row)}`; }, }, { @@ -436,44 +457,38 @@ watch(
-
-
- {{ - props.row.position !== null - ? props.row.position - : "-" - }}{{ - (props.row.posTypeName !== null && - props.row.posTypeName === "บริหาร") || - props.row.posTypeName === "อำนวยการ" - ? `${props.row.posTypeName}` - : "" - }}{{ - props.row.posLevelName !== null - ? `${props.row.posLevelName}` - : "" - }} -
-
- {{ props.row.root !== null ? props.row.root : "-" }} - {{ - props.row.rootShortName !== null - ? `(${props.row.rootShortName})` - : "" - }} -
-
- {{ - props.row.nodeName !== null - ? props.row.nodeName - : "" - }} - {{ - props.row.nodeShortName !== null - ? `(${props.row.nodeShortName}${props.row.posMasterNo})` - : "" - }} -
+ {{ + props.row.position !== null ? props.row.position : "" + }}{{ + props.row.posLevelName !== null + ? `${props.row.posLevelName}` + : "" + }} + + {{ + props.row.nodeShortName !== null + ? `(${props.row.nodeShortName}${props.row.posMasterNo})` + : "" + }} +
+ {{ + props.row.positionExecutive !== null + ? `${props.row.positionExecutive}${ + props.row.positionExecutiveField + ? ` (${props.row.positionExecutiveField})` + : "" + }` + : "" + }} +
+
+ {{ findOrgNameHtml(props.row) }}
diff --git a/src/modules/05_placement/components/Receive/DialogOrders.vue b/src/modules/05_placement/components/Receive/DialogOrders.vue index a5262cce7..cf552fc72 100644 --- a/src/modules/05_placement/components/Receive/DialogOrders.vue +++ b/src/modules/05_placement/components/Receive/DialogOrders.vue @@ -32,7 +32,13 @@ const dataMapToSend = computed(() => { })); }); const mixin = useCounterMixin(); -const { dialogConfirm, date2Thai, onSearchDataTable } = mixin; +const { + dialogConfirm, + date2Thai, + onSearchDataTable, + findOrgName, + findOrgNameHtml, +} = mixin; const rows = defineModel("rows", { required: true }); const rowsData = defineModel("rowsData", { required: true }); @@ -136,7 +142,14 @@ const columns2 = ref([ sort: (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), format: (val, row) => { - return `${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + // return `${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + return `${row.position !== null ? row.position : ""}${ + row.posLevelName !== null ? `${row.posLevelName}` : "" + } ${ + row.nodeShortName !== null + ? `(${row.nodeShortName}${row.posMasterNo})` + : "" + } ${findOrgName(row)}`; }, }, { @@ -324,29 +337,33 @@ watchEffect(() => {
-
-
- {{ props.row.root !== null ? props.row.root : "-" }} - {{ - props.row.rootShortName !== null - ? `(${props.row.rootShortName})` - : "" - }} -
-
- {{ - props.row.nodeName !== null - ? props.row.nodeName - : "" - }} - {{ - props.row.nodeShortName !== null - ? `(${props.row.nodeShortName}${props.row.posMasterNo})` - : "" - }} -
+ {{ props.row.position !== null ? props.row.position : "" + }}{{ + props.row.posLevelName !== null + ? `${props.row.posLevelName}` + : "" + }} + {{ + props.row.nodeShortName !== null + ? `(${props.row.nodeShortName}${props.row.posMasterNo})` + : "" + }} + +
+ {{ findOrgNameHtml(props.row) }}
+
{{ col.value ? col.value : "-" }}
diff --git a/src/modules/05_placement/views/03_receiveMain.vue b/src/modules/05_placement/views/03_receiveMain.vue index 02830028f..07429f5b4 100644 --- a/src/modules/05_placement/views/03_receiveMain.vue +++ b/src/modules/05_placement/views/03_receiveMain.vue @@ -38,6 +38,7 @@ const { dialogRemove, onSearchDataTable, findOrgNameHtml, + findOrgName, } = mixin; const status = ref(""); @@ -163,7 +164,14 @@ const columns = ref([ sort: (a: string, b: string) => a.localeCompare(b, undefined, { numeric: true, sensitivity: "base" }), format: (val, row) => { - return `${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + // return `${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + return `${row.position !== null ? row.position : ""}${ + row.posLevelName !== null ? `${row.posLevelName}` : "" + } ${ + row.nodeShortName !== null + ? `(${row.nodeShortName}${row.posMasterNo})` + : "" + } ${findOrgName(row)}`; }, }, { diff --git a/src/modules/05_placement/views/06_appointPromoteMain.vue b/src/modules/05_placement/views/06_appointPromoteMain.vue index 7859676c9..b65d53f18 100644 --- a/src/modules/05_placement/views/06_appointPromoteMain.vue +++ b/src/modules/05_placement/views/06_appointPromoteMain.vue @@ -37,6 +37,7 @@ const { dialogRemove, onSearchDataTable, findOrgNameHtml, + findOrgName, } = useCounterMixin(); const status = ref(""); @@ -147,9 +148,24 @@ const columns = ref([ field: "organizationName", headerStyle: "font-size: 14px", style: "font-size: 14px", - // format: (val, row) => { - // return `${row.root.position}${row.root.posLevelName}${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; - // }, + format: (val, row) => { + // return `${row.root.position}${row.root.posLevelName}${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + return `${row.position !== null ? row.position : ""}${ + row.posLevelName !== null ? `${row.posLevelName}` : "" + } ${ + row.nodeShortName !== null + ? `(${row.nodeShortName}${row.posMasterNo})` + : "" + } ${ + row.positionExecutive !== null + ? `${row.positionExecutive}${ + row.positionExecutiveField + ? ` (${row.positionExecutiveField})` + : "" + }` + : "" + } ${findOrgName(row)}`; + }, }, { name: "dateOfBirth", diff --git a/src/modules/05_placement/views/07_appointEmployeeMain.vue b/src/modules/05_placement/views/07_appointEmployeeMain.vue index 80d500bb7..e91ba4c50 100644 --- a/src/modules/05_placement/views/07_appointEmployeeMain.vue +++ b/src/modules/05_placement/views/07_appointEmployeeMain.vue @@ -36,6 +36,7 @@ const { dialogRemove, onSearchDataTable, findOrgNameHtml, + findOrgName, } = mixin; const status = ref(""); @@ -166,7 +167,14 @@ const columns = ref([ headerStyle: "font-size: 14px", style: "font-size: 14px", format: (val, row) => { - return `${row.root.position}${row.root.posTypeName}${row.root.posLevelName}${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + // return `${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + return `${row.position !== null ? row.position : ""} ${ + row.posLevelName !== null ? `${row.posLevelName}` : "" + } ${ + row.nodeShortName !== null + ? `(${row.nodeShortName}${row.posMasterNo})` + : "" + } ${findOrgName(row)}`; }, }, { diff --git a/src/modules/05_placement/views/08_otherMain.vue b/src/modules/05_placement/views/08_otherMain.vue index ac3e91c5d..0e56a9951 100644 --- a/src/modules/05_placement/views/08_otherMain.vue +++ b/src/modules/05_placement/views/08_otherMain.vue @@ -35,6 +35,7 @@ const { dialogRemove, onSearchDataTable, findChildNameHtml, + findOrgName, } = useCounterMixin(); const modal = ref(false); @@ -134,8 +135,15 @@ const columns = ref([ label: "ตำแหน่ง/หน่วยงานที่บรรจุกลับ", sortable: true, field: "organizationPositionReturn", - format(val, row) { - return row.organizationPositionReturn.replace(/\n/g, " "); + format: (val, row) => { + // return `${row.root} (${row.rootShortName}) ${row.nodeName} (${row.nodeShortName}${row.posMasterNo})`; + return `${row.position !== null ? row.position : ""}${ + row.posLevelName !== null ? `${row.posLevelName}` : "" + } ${ + row.nodeShortName !== null + ? `(${row.nodeShortName}${row.posMasterNo})` + : "" + } ${findOrgName(row)}`; }, headerStyle: "font-size: 14px", style: "font-size: 14px", diff --git a/src/modules/06_retirement/components/06_dismissOrder/DetailEMP.vue b/src/modules/06_retirement/components/06_dismissOrder/DetailEMP.vue index 5cc1d6417..aaf99c288 100644 --- a/src/modules/06_retirement/components/06_dismissOrder/DetailEMP.vue +++ b/src/modules/06_retirement/components/06_dismissOrder/DetailEMP.vue @@ -19,7 +19,7 @@ import CardProfile from "@/components/CardProfile.vue"; const $q = useQuasar(); const route = useRoute(); const router = useRouter(); -const checkRoutePermisson = ref(route.name == "outDetailOnly"); +const checkRoutePermisson = ref(route.name == "outDetailOnlyEmp"); const mixin = useCounterMixin(); const dataId = route.params.id.toString(); const { diff --git a/src/plugins/auth.ts b/src/plugins/auth.ts index 1bc185278..438d4268d 100644 --- a/src/plugins/auth.ts +++ b/src/plugins/auth.ts @@ -1,7 +1,9 @@ const ACCESS_TOKEN = "BMAHRISMGT_KEYCLOAK_IDENTITY"; const key_C_Config = { url_Logout: import.meta.env.VITE_URL_SSO, + landing_PageUrl: import.meta.env.VITE_URL_LANDING, }; + interface AuthResponse { access_token: string; expires_in: number; @@ -10,22 +12,32 @@ interface AuthResponse { const authenticated = async () => ((await getToken()) ? true : false); -async function setAuthen(r: AuthResponse, val: string) { - await setCookie(ACCESS_TOKEN, r.access_token, r.expires_in); - setCookie("SSO", val, r.expires_in); - window.location.href = "/"; +async function setAuthen(r: AuthResponse, val: string, url?: string) { + if (r && r.access_token) { + await setCookie(ACCESS_TOKEN, r.access_token, r.expires_in); + setCookie("SSO", val, r.expires_in); + window.location.href = url ? encodeURI(url) : "/"; + } } -async function logout() { - await deleteCookie(ACCESS_TOKEN); - window.location.href = key_C_Config.url_Logout; +async function logout(force: boolean = false) { + if (!force) { + await deleteCookie(ACCESS_TOKEN); + window.location.href = key_C_Config.url_Logout; + } else { + const currentUrl = window.location.href; + const loginUrl = `${ + key_C_Config.landing_PageUrl + }?system=mgt&redirectUrl=${encodeURIComponent(currentUrl)}`; + window.location.href = loginUrl; + } } async function getToken() { return getCookie(ACCESS_TOKEN); } // 2024-08-29T02:55:13.000Z -function setCookie(name: string, value: any, time: number) { +async function setCookie(name: string, value: any, time: number) { let expires = ""; if (time) { const date = new Date(); @@ -47,7 +59,7 @@ function getCookie(name: string) { return null; } -function deleteCookie(name: string) { +async function deleteCookie(name: string) { document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; } @@ -71,4 +83,17 @@ async function tokenParsed() { return JSON.parse(jsonPayload); } -export { getToken, authenticated, logout, setAuthen, tokenParsed, getCookie }; +async function redirectToLandingPage() { + await deleteCookie(ACCESS_TOKEN); + window.location.href = key_C_Config.landing_PageUrl; +} + +export { + getToken, + authenticated, + logout, + setAuthen, + tokenParsed, + getCookie, + redirectToLandingPage, +}; diff --git a/src/plugins/http.ts b/src/plugins/http.ts index 8f4f04471..f63a77fe5 100644 --- a/src/plugins/http.ts +++ b/src/plugins/http.ts @@ -29,6 +29,8 @@ http.interceptors.response.use( if (typeof error !== undefined) { // eslint-disable-next-line no-prototype-builtins if (error.hasOwnProperty("response")) { + console.log("error.response", error.response); + if (error.response.status === 403) { window.location.href = "/error"; // Store.commit("SET_ERROR_MESSAGE", error.response.data.message); diff --git a/src/router/index.ts b/src/router/index.ts index 45daf38a7..770e57f63 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -123,10 +123,8 @@ const router = createRouter({ router.beforeEach(async (to, from, next) => { if (to.meta.Auth) { const checkAuthen = await authenticated(); - console.log("checkAuthen", checkAuthen); - if (!checkAuthen && to.meta.Auth) { - logout(); + logout(true); } } next(); diff --git a/src/views/MainLayout.vue b/src/views/MainLayout.vue index a5a3c4240..4e083d072 100644 --- a/src/views/MainLayout.vue +++ b/src/views/MainLayout.vue @@ -6,7 +6,12 @@ import { storeToRefs } from "pinia"; import { scroll, useQuasar } from "quasar"; import { useCounterMixin } from "@/stores/mixin"; import { useMenuDataStore } from "@/stores/menuList"; -import { tokenParsed, logout, getCookie } from "@/plugins/auth"; +import { + tokenParsed, + logout, + getCookie, + redirectToLandingPage, +} from "@/plugins/auth"; import avatar from "@/assets/avatar_user.jpg"; import http from "@/plugins/http"; @@ -758,7 +763,11 @@ function onViewDetailNoti(url: string) { เลือกโหมด
--> - + { expires_in: route.query.expires ? route.query.expires : 36000, refresh_token: route.query.accessToken, }; - setAuthen(params, "y"); + setAuthen( + params, + "y", + route.query.redirectUrl ? (route.query.redirectUrl as string) : "" + ); } });