From 3b6a6e5bf1510f91ac02d9878c623d66c137fac3 Mon Sep 17 00:00:00 2001 From: riefive Date: Wed, 3 Dec 2025 15:26:00 +0700 Subject: [PATCH] fix: page checker to avoid error --- app/components/content/encounter/entry.vue | 1 + app/lib/page-checker.ts | 83 +++++++++++-------- .../ambulatory/encounter/[id]/detail.vue | 6 +- .../ambulatory/encounter/[id]/edit.vue | 9 +- .../ambulatory/encounter/[id]/process.vue | 6 +- .../(features)/ambulatory/encounter/add.vue | 6 +- .../(features)/ambulatory/encounter/index.vue | 10 ++- .../emergency/encounter/[id]/detail.vue | 6 +- .../emergency/encounter/[id]/edit.vue | 7 +- .../emergency/encounter/[id]/process.vue | 6 +- .../(features)/emergency/encounter/add.vue | 6 +- .../(features)/emergency/encounter/index.vue | 10 ++- .../inpatient/encounter/[id]/detail.vue | 6 +- .../inpatient/encounter/[id]/edit.vue | 7 +- .../inpatient/encounter/[id]/process.vue | 6 +- .../(features)/inpatient/encounter/add.vue | 6 +- .../(features)/inpatient/encounter/index.vue | 10 ++- 17 files changed, 117 insertions(+), 74 deletions(-) diff --git a/app/components/content/encounter/entry.vue b/app/components/content/encounter/entry.vue index 22dfb374..a2e90285 100644 --- a/app/components/content/encounter/entry.vue +++ b/app/components/content/encounter/entry.vue @@ -163,6 +163,7 @@ onMounted(async () => { await handleInit() if (props.formType === 'edit' && props.id > 0) { await getFetchEncounterDetail() + console.log(formObjects.value) } }) diff --git a/app/lib/page-checker.ts b/app/lib/page-checker.ts index 3f5c8132..f346f34a 100644 --- a/app/lib/page-checker.ts +++ b/app/lib/page-checker.ts @@ -1,41 +1,56 @@ -import type { Permission } from "~/models/role" +import type { Permission } from '~/models/role' -const route = useRoute() +export function usePageChecker() { + const route = useRoute() + const { checkRole, hasCreateAccess, hasReadAccess, hasUpdateAccess, hasDeleteAccess } = useRBAC() -const { checkRole, hasCreateAccess, hasReadAccess, hasUpdateAccess, hasDeleteAccess } = useRBAC() - -export function getRouteTitle() { - return route.meta.title as string -} - -export function getParamsId() { - const id = route.params.id - return typeof id === 'string' ? parseInt(id) : 0 -} - -export function checkPageAccess(roleAccess: Record, type: 'create' | 'read' | 'update' | 'delete') { - // Check if user has access to this page, need to use try - catch for proper handling - const hasAccess = checkRole(roleAccess) - if (!hasAccess) { - navigateTo('/403') + function getRouteTitle() { + return route.meta.title as string } - // Define permission-based computed properties - const canCreate = hasCreateAccess(roleAccess) - const canRead = hasReadAccess(roleAccess) - const canUpdate = hasUpdateAccess(roleAccess) - const canDelete = hasDeleteAccess(roleAccess) + function getParamsId() { + const id = route.params.id + return typeof id === 'string' ? parseInt(id) : 0 + } - switch (type) { - case 'create': - return canCreate - case 'read': - return canRead - case 'update': - return canUpdate - case 'delete': - return canDelete - default: - return false + function getPageAccess( + roleAccess: Record, + type: 'create' | 'read' | 'update' | 'delete', + ) { + // Check if user has access to this page, need to use try - catch for proper handling + const hasAccess = checkRole(roleAccess) + if (!hasAccess) { + navigateTo('/403') + } + + // Define permission-based computed properties + const canCreate = hasCreateAccess(roleAccess) + const canRead = hasReadAccess(roleAccess) + const canUpdate = hasUpdateAccess(roleAccess) + const canDelete = hasDeleteAccess(roleAccess) + + switch (type) { + case 'create': + return canCreate + case 'read': + return canRead + case 'update': + return canUpdate + case 'delete': + return canDelete + default: + return false + } + } + + return { + checkRole, + hasCreateAccess, + hasReadAccess, + hasUpdateAccess, + hasDeleteAccess, + getRouteTitle, + getParamsId, + getPageAccess } } diff --git a/app/pages/(features)/ambulatory/encounter/[id]/detail.vue b/app/pages/(features)/ambulatory/encounter/[id]/detail.vue index 09413f9f..49a92919 100644 --- a/app/pages/(features)/ambulatory/encounter/[id]/detail.vue +++ b/app/pages/(features)/ambulatory/encounter/[id]/detail.vue @@ -4,7 +4,7 @@ import type { Permission } from '~/models/role' import { permissions } from '~/const/page-permission/ambulatory' // Helpers -import { getRouteTitle, checkPageAccess } from "~/lib/page-checker" +import { usePageChecker } from "~/lib/page-checker" // Pubs import Error from '~/components/pub/my-ui/error/error.vue' @@ -12,6 +12,8 @@ import Error from '~/components/pub/my-ui/error/error.vue' // Apps import Content from '~/components/content/encounter/detail.vue' +const { getRouteTitle, getPageAccess } = usePageChecker() + definePageMeta({ middleware: ['rbac'], roles: ['emp|doc', 'emp|nur', 'emp|reg', 'emp|pha', 'emp|pay', 'emp|mng'], @@ -25,7 +27,7 @@ useHead({ // Preps role checking const roleAccess: Record = permissions['/ambulatory/encounter/[id]'] || {} -const hasAccess = checkPageAccess(roleAccess, 'read') +const hasAccess = getPageAccess(roleAccess, 'read')