diff --git a/app/const/common/role.ts b/app/const/common/role.ts new file mode 100644 index 00000000..a0d4565a --- /dev/null +++ b/app/const/common/role.ts @@ -0,0 +1,36 @@ +export const systemCode = 'system' + +export const rehabInstCode = 'rehab' +export const rehabUnitCode = 'rehab' + +export const headPosCode = 'head' // head position +export const respPosCode = 'resp' // responsible position, verificator + +export type UnitLevel = + 'inst' | // installation + 'unit' | // unit / poly + 'spec' | // specialist + 'subspec' // subspecialist + +export const medicalRoles = [ + 'emp|doc', // doctor + 'emp|nur', // nurse + 'emp|miw', // midwife + 'emp|thr', // therapist + 'emp|nut', // nutritionist + 'emp|pha', // pharmacy + 'emp|lab' // laborant +] + +export const serviceRoles = [ + 'emp|reg', + ...medicalRoles, +] + +export function genSpecHeadCode(unit_level: UnitLevel, unit_code: string): string { + return `${unit_level}|${unit_code}|${headPosCode}` +} + +export function genUnitRespCode(unit_level: UnitLevel, unit_code: string): string { + return `${unit_level}|${unit_code}|${respPosCode}` +} diff --git a/app/handlers/encounter-init.handler.ts b/app/handlers/encounter-init.handler.ts index 95e4e27d..3cdceb2c 100644 --- a/app/handlers/encounter-init.handler.ts +++ b/app/handlers/encounter-init.handler.ts @@ -1,5 +1,5 @@ import { isValidDate } from '~/lib/date' -import { medicalPositions } from '~/lib/roles' +import { medicalRoles } from '~/const/common/role' export interface EncounterItem { id: string @@ -459,11 +459,11 @@ export function getMenuItems( 'installation|outpatient': { 'unit|rehab': { items: listItemsForOutpatientRehab, - roles: medicalPositions, + roles: medicalRoles, }, 'unit|chemo': { items: listItemsForOutpatientChemo, - roles: medicalPositions, + roles: medicalRoles, }, all: getItemsAll('ambulatory', 'all', defaultItems), }, diff --git a/app/lib/roles.ts b/app/lib/roles.ts index 96d27780..8e6561e3 100644 --- a/app/lib/roles.ts +++ b/app/lib/roles.ts @@ -1,14 +1,16 @@ -export const medicalPositions = ['emp|doc', 'emp|lab', 'emp|mid', 'emp|nur', 'emp|nut', 'emp|pha', 'emp|reg'] -const verificatorRole = 'verificator' +import { medicalRoles, respPosCode } from '~/const/common/role' -export function getPositionAs(roleAccess: string): string { - if (roleAccess.includes('|')) { - if (medicalPositions.includes(roleAccess)) { - return 'medical' - } - if (roleAccess.includes(verificatorRole)) { - return 'verificator' - } +export function getServicePosition(role?: string): string { + if(!role) { + return 'none' + } + if (medicalRoles.includes(role)) { + return 'medical' + } else if (role === 'emp|reg') { + return 'registration' + } else if (role.includes('|resp')) { + return 'verificator' + } else { + return 'none' } - return 'none' } diff --git a/app/middleware/rbac.ts b/app/middleware/rbac.ts index 87e8ca00..fa0c0685 100644 --- a/app/middleware/rbac.ts +++ b/app/middleware/rbac.ts @@ -20,7 +20,7 @@ export default defineNuxtRouteMiddleware((to) => { const requiredRoles = to.meta.roles as string[] if (requiredRoles && requiredRoles.length > 0) { // FIXME: change this dummy roles, when api is ready - const userRoles = authStore.userRole + const userRoles = authStore.userRoles // const userRoles = ['admisi'] const hasRequiredRole = requiredRoles.some((role) => userRoles.includes(role)) diff --git a/app/stores/user.ts b/app/stores/user.ts index 7ddd9a51..f7fe9fb5 100644 --- a/app/stores/user.ts +++ b/app/stores/user.ts @@ -7,14 +7,15 @@ export const useUserStore = defineStore( const isAuthenticated = computed(() => !!user.value) - const userRole = computed(() => { + const userRoles = computed(() => { return user.value?.roles || [] - // return roles.map((input: string) => { - // const parts = input.split('|') - // return parts.length > 1 ? parts[1]: parts[0] - // }) }) + const userActiveRole = ref('') // watched user failed, so create a ref here + // computed(() => { + // // return user.value?.activeRole || '' + // }) + const login = async (userData: any) => { user.value = userData } @@ -26,10 +27,11 @@ export const useUserStore = defineStore( const setActiveRole = (role: string) => { if (user.value && user.value.roles.includes(role)) { user.value.activeRole = role + userActiveRole.value = role } } - const getActiveRole = (): string | null => { + const getActiveRole = (): string | undefined => { if (user.value?.activeRole) { return user.value.activeRole } @@ -37,13 +39,14 @@ export const useUserStore = defineStore( user.value.activeRole = user.value.roles[0] return user.value.activeRole } - return null + return undefined } return { user, isAuthenticated, - userRole, + userRoles, + userActiveRole, login, logout, setActiveRole,