diff --git a/app/components/content/document-upload/add.vue b/app/components/content/document-upload/add.vue index 7d42f4f6..9d099189 100644 --- a/app/components/content/document-upload/add.vue +++ b/app/components/content/document-upload/add.vue @@ -6,8 +6,8 @@ import { handleActionSave,} from '~/handlers/supporting-document.handler' import { toast } from '~/components/pub/ui/toast' import Confirmation from '~/components/pub/my-ui/confirmation/confirmation.vue' import { DocumentUploadSchema } from '~/schemas/document-upload.schema' +import { toFormData } from '~/lib/utils' import { uploadAttachment } from '~/services/supporting-document.service' -import { printFormData, toFormData } from '~/lib/utils' // #region Props & Emits const props = defineProps<{ diff --git a/app/components/content/document-upload/list.vue b/app/components/content/document-upload/list.vue index 2ddbb77c..d1f6fbad 100644 --- a/app/components/content/document-upload/list.vue +++ b/app/components/content/document-upload/list.vue @@ -7,6 +7,21 @@ import { getList, remove } from '~/services/supporting-document.service' import { toast } from '~/components/pub/ui/toast' import type { Encounter } from '~/models/encounter' import RecordConfirmation from '~/components/pub/my-ui/confirmation/record-confirmation.vue' +import DocPreviewDialog from '~/components/pub/my-ui/modal/doc-preview-dialog.vue' +import Dialog from '~/components/pub/my-ui/modal/dialog.vue' +import type { PagePermission } from '~/models/role' +import { PAGE_PERMISSIONS } from '~/lib/page-permission' +import { unauthorizedToast } from '~/lib/utils' +// #endregion + + +// #region Permission +const roleAccess: PagePermission = PAGE_PERMISSIONS['/rehab/encounter'] +const { getPagePermissions } = useRBAC() +const pagePermission = getPagePermissions(roleAccess) + +const {user,userRole} = useUserStore() +const {getUserPermissions} = useRBAC() // #endregion // #region State @@ -19,7 +34,7 @@ const route = useRoute() const encounterId = typeof route.params.id == 'string' ? parseInt(route.params.id) : 0 const { data, paginationMeta, handlePageChange, handleSearch, searchInput, fetchData } = usePaginatedList({ - fetchFn: (params) => getList({ + fetchFn: (params) => getList({ 'encounter-id': encounterId, // includes: "employee", ...params, @@ -27,6 +42,7 @@ const { data, paginationMeta, handlePageChange, handleSearch, searchInput, fetch entityName: 'encounter-document', }) +const isDocPreviewDialogOpen = ref(false) const isRecordConfirmationOpen = ref(false) const recId = ref(0) const recAction = ref('') @@ -36,13 +52,15 @@ const timestamp = ref(0) const headerPrep: HeaderPrep = { title: "Upload Dokumen", icon: 'i-lucide-newspaper', - addNav: { +} +if (pagePermission.canCreate) { + headerPrep.addNav = { label: "Upload Dokumen", onClick: () => navigateTo({ name: 'rehab-encounter-id-document-upload-add', params: { id: encounterId }, }), - }, + } } const refSearchNav: RefSearchNav = { @@ -101,6 +119,24 @@ provide('timestamp', timestamp) watch([recId, recAction, timestamp], () => { switch (recAction.value) { case ActionEvents.showDetail: + isDocPreviewDialogOpen.value = true + break + case ActionEvents.showEdit: + if(pagePermission.canUpdate){ + navigateTo({ + name: 'rehab-encounter-id-document-upload-document_id-edit', + params: { id: encounterId, "document_id": recId.value }, + }) + } else { + unauthorizedToast() + } + break + case ActionEvents.showConfirmDelete: + if(pagePermission.canDelete){ + isRecordConfirmationOpen.value = true + } else { + unauthorizedToast() + } navigateTo(recItem.value.filePath, { external: true, open: { target: '_blank' } }) break case ActionEvents.showEdit: @@ -140,4 +176,8 @@ watch([recId, recAction, timestamp], () => { + + + + diff --git a/app/components/content/encounter/process.vue b/app/components/content/encounter/process.vue index c2351fca..75007681 100644 --- a/app/components/content/encounter/process.vue +++ b/app/components/content/encounter/process.vue @@ -9,6 +9,8 @@ import { getDetail } from '~/services/encounter.service' import type { TabItem } from '~/components/pub/my-ui/comp-tab/type' import CompTab from '~/components/pub/my-ui/comp-tab/comp-tab.vue' +import { genEncounter } from '~/models/encounter' + // PLASE ORDER BY TAB POSITION import Status from '~/components/content/encounter/status.vue' import AssesmentFunctionList from '~/components/content/soapi/entry.vue' @@ -19,7 +21,6 @@ import CpLabOrder from '~/components/content/cp-lab-order/main.vue' import Radiology from '~/components/content/radiology-order/main.vue' import Consultation from '~/components/content/consultation/list.vue' import DocUploadList from '~/components/content/document-upload/list.vue' -import { genEncounter } from '~/models/encounter' import GeneralConsentList from '~/components/content/general-consent/entry.vue' import ResumeList from '~/components/content/resume/list.vue' import ControlLetterList from '~/components/content/control-letter/list.vue' diff --git a/app/components/pub/my-ui/data/dropdown-action-dud.vue b/app/components/pub/my-ui/data/dropdown-action-dud.vue index dfcf1ada..71979c7c 100644 --- a/app/components/pub/my-ui/data/dropdown-action-dud.vue +++ b/app/components/pub/my-ui/data/dropdown-action-dud.vue @@ -2,14 +2,9 @@ import type { LinkItem, ListItemDto } from './types' import { ActionEvents } from './types' -interface Props { +const props = defineProps<{ rec: ListItemDto - size?: 'default' | 'sm' | 'lg' -} - -const props = withDefaults(defineProps(), { - size: 'lg', -}) +}>() const recId = inject>('rec_id')! const recAction = inject>('rec_action')! @@ -63,7 +58,7 @@ function del() { -import type { PagePermission } from '~/models/role' -import Error from '~/components/pub/my-ui/error/error.vue' -import { PAGE_PERMISSIONS } from '~/lib/page-permission' -import ContentChemotherapyAdminList from '~/components/content/chemotherapy/admin-list.vue' -import ContentChemotherapyVerification from '~/components/content/chemotherapy/verification.vue' - -definePageMeta({ - middleware: ['rbac'], - roles: ['doctor', 'nurse', 'admisi', 'pharmacy', 'billing', 'management'], - title: 'Kemoterapi Admin', - contentFrame: 'cf-full-width', -}) - -const route = useRoute() - -useHead({ - title: () => 'Verifikasi Jadwal Pasien', -}) - -const roleAccess: PagePermission = PAGE_PERMISSIONS['/doctor'] || {} - -const { checkRole, hasReadAccess } = useRBAC() - -// Check if user has access to this page -const hasAccess = checkRole(roleAccess) -if (!hasAccess) { - navigateTo('/403') -} - -// Define permission-based computed properties -const canRead = true // hasReadAccess(roleAccess) - -const mode = computed(() => route.params.mode as string) - - - diff --git a/app/pages/(features)/outpation-action/chemotherapy/list.vue b/app/pages/(features)/outpation-action/chemotherapy/list.vue deleted file mode 100644 index a141baaa..00000000 --- a/app/pages/(features)/outpation-action/chemotherapy/list.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/app/pages/(features)/rehab/encounter/[id]/control-letter/add.vue b/app/pages/(features)/rehab/encounter/[id]/control-letter/add.vue index 1070a29f..fa0b386b 100644 --- a/app/pages/(features)/rehab/encounter/[id]/control-letter/add.vue +++ b/app/pages/(features)/rehab/encounter/[id]/control-letter/add.vue @@ -16,9 +16,9 @@ useHead({ title: () => route.meta.title as string, }) -const roleAccess: PagePermission = PAGE_PERMISSIONS['/patient'] +const roleAccess: PagePermission = PAGE_PERMISSIONS['/rehab/encounter'] -const { checkRole, hasReadAccess } = useRBAC() +const { checkRole, getPagePermissions } = useRBAC() // Check if user has access to this page const hasAccess = checkRole(roleAccess) @@ -27,14 +27,13 @@ const hasAccess = checkRole(roleAccess) // } // Define permission-based computed properties -// const canRead = hasReadAccess(roleAccess) -const canRead = true +const pagePermission = getPagePermissions(roleAccess) const callbackUrl = route.query['return-path'] as string | undefined