diff --git a/app/components/app/treatment-report/preview.vue b/app/components/app/treatment-report/preview.vue index c5eb7f64..65b1fc2e 100644 --- a/app/components/app/treatment-report/preview.vue +++ b/app/components/app/treatment-report/preview.vue @@ -59,16 +59,21 @@ function onNavigate(type: string) { Tim Pelaksanaan Tindakan - - dr. Marcell Galliard Sp.Gr - Sumitro - Alexis Lewis Carol - Mikel Arteta - - {{ format(new Date(), 'd MMMM yyyy', { locale: id }) }} - - {{ operatorTeam?.actionDiagnosis || '-' }} - Cak Armuji + + + dr. Marcell Galliard Sp.Gr + Sumitro + Alexis Lewis Carol + Mikel Arteta + + {{ format(new Date(), 'd MMMM yyyy', { locale: id }) }} + + {{ operatorTeam?.actionDiagnosis || '-' }} + Cak Armuji + @@ -76,69 +81,79 @@ function onNavigate(type: string) { Tindakan Operatif / Non Operatif Lain - + + + + + Data Pelaksanaan Tindakan - - dr. Marcell Galliard Sp.Gr - GCASH1128190 - Alexis Lewis Carol - - {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} - - - {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} - - 5 menit - - {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} - - - {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} - - 5 menit + + + dr. Marcell Galliard Sp.Gr + GCASH1128190 + Alexis Lewis Carol + + {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} + + + {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} + + 5 menit + + {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} + + + {{ format(new Date(), 'd MMMM yyyy, HH:mm', { locale: id }) }} + + 5 menit - 300 CC - - - - - - - - - - - - - - - - - Bersih - 1 (Satu) - Lahir Hidup - RSSA - 18 gram - Normal dan sehat - - - 300 CC - PA - - - -
    -
  • {{ item.note }}
  • -
- - -
+ 300 CC + - + - + - + - + - + - + - + + + Bersih + 1 (Satu) + Lahir Hidup + RSSA + 18 gram + Normal dan sehat + - + 300 CC + PA + +
    +
  • {{ item.note }}
  • +
+ - +
+
diff --git a/app/components/content/treatment-report/edit.vue b/app/components/content/treatment-report/edit.vue deleted file mode 100644 index e35325fe..00000000 --- a/app/components/content/treatment-report/edit.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - diff --git a/app/components/content/treatment-report/entry.vue b/app/components/content/treatment-report/entry.vue index 363aa150..a127b804 100644 --- a/app/components/content/treatment-report/entry.vue +++ b/app/components/content/treatment-report/entry.vue @@ -1,6 +1,7 @@ diff --git a/app/components/content/treatment-report/form.vue b/app/components/content/treatment-report/form.vue index 8eeb0f64..73ebe615 100644 --- a/app/components/content/treatment-report/form.vue +++ b/app/components/content/treatment-report/form.vue @@ -12,7 +12,7 @@ import ArrangementProcedurePicker from '~/components/app/therapy-protocol/picker // states const route = useRoute() -const { mode, backToList } = useQueryCRUDMode('mode') +const { mode, goBack } = useQueryCRUDMode('mode') const { recordId } = useQueryCRUDRecordId('record-id') const reportData = ref({} as unknown as TreatmentReportFormData) const doctors = ref([]) @@ -52,7 +52,7 @@ async function loadEntryForEdit(id: number | string) { :isLoading="isLoading" :mode="entryMode" @submit="(val) => console.log(val)" - @back="backToList" + @back="goBack" @error=" (err: Error) => { toast({ diff --git a/app/components/content/treatment-report/list.vue b/app/components/content/treatment-report/list.vue index 3add31d1..ac3bcc7b 100644 --- a/app/components/content/treatment-report/list.vue +++ b/app/components/content/treatment-report/list.vue @@ -23,6 +23,7 @@ const props = defineProps() const emits = defineEmits<{ (e: 'add'): void (e: 'edit', id: number | string): void + (e: 'view', id: number | string): void }>() // states @@ -76,6 +77,17 @@ const goEdit = (id: number | string) => { }) } +const goView = (id: number | string) => { + router.replace({ + path: route.path, + query: { + ...route.query, + mode: 'view', + 'record-id': id, + }, + }) +} + provide('rec_id', recId) provide('rec_action', recAction) provide('rec_item', recItem) @@ -90,22 +102,33 @@ async function onGetDetail(id: number | string) { } // #region watcher -watch([recId, recAction], () => { - switch (recAction.value) { +watch([recId, recAction], (newVal) => { + const [id, action] = newVal + + // Guard: jangan proses jika id = 0 atau action kosong + if (!id || !action) return + + + switch (action) { case ActionEvents.showDetail: - onGetDetail(recId.value) + // onGetDetail(recId.value) + goView(id) title.value = 'Detail Konsultasi' break case ActionEvents.showEdit: - goEdit(recId.value) - // reset - recId.value = 0 + goEdit(id) title.value = 'Edit Konsultasi' break case ActionEvents.showConfirmDelete: isRecordConfirmationOpen.value = true break } + + // Reset KEDUANYA menggunakan nextTick agar tidak trigger watcher lagi + nextTick(() => { + recId.value = 0 + recAction.value = '' + }) }) // #endregion diff --git a/app/components/content/treatment-report/detail.vue b/app/components/content/treatment-report/view.vue similarity index 73% rename from app/components/content/treatment-report/detail.vue rename to app/components/content/treatment-report/view.vue index bbe5d3a0..93c1c83f 100644 --- a/app/components/content/treatment-report/detail.vue +++ b/app/components/content/treatment-report/view.vue @@ -3,15 +3,23 @@ import mockData from './sample' // types import { type TreatmentReportFormData } from '~/schemas/treatment-report.schema' +import { type Encounter } from '~/models/encounter' // Components -import Header from '~/components/pub/my-ui/nav-header/prep.vue' +import AppTreatmentReportPreview from '~/components/app/treatment-report/preview.vue' import type { HeaderPrep } from '~/components/pub/my-ui/data/types' // #region Props & Emits const router = useRouter() +const { backToList, goToEntry } = useQueryCRUDMode('mode') +const { recordId } = useQueryCRUDRecordId('record-id') + +function onEditFromView() { + goToEntry({ fromView: true }) +} + const props = defineProps<{ - id: string | number + encounter: Encounter }>() // #endregion @@ -50,15 +58,10 @@ function onBack() {} diff --git a/app/composables/useQueryCRUD.ts b/app/composables/useQueryCRUD.ts index f81649bd..4ff7748a 100644 --- a/app/composables/useQueryCRUD.ts +++ b/app/composables/useQueryCRUD.ts @@ -5,8 +5,15 @@ export function useQueryCRUDMode(key: string = 'mode') { const route = useRoute() const router = useRouter() - const mode = computed<'list' | 'entry'>({ - get: () => (route.query[key] && route.query[key] === 'entry' ? 'entry' : 'list'), + const mode = computed<'list' | 'entry' | 'view'>({ + get: () => { + const q = route.query[key] + + if (q === 'entry') return 'entry' + if (q === 'view') return 'view' + + return 'list' + }, set: (val) => { router.push({ path: route.path, @@ -18,20 +25,57 @@ export function useQueryCRUDMode(key: string = 'mode') { }, }) - const goToEntry = () => (mode.value = 'entry') + // Cek apakah form diakses dari view/detail + const fromView = computed(() => route.query['from'] === 'view') + + const goToEntry = (options?: { fromView?: boolean }) => { + router.push({ + path: route.path, + query: { + ...route.query, + [key]: 'entry', + from: options?.fromView ? 'view' : undefined, + }, + }) + } + + const goToView = () => (mode.value = 'view') + const backToList = () => { router.push({ path: route.path, query: { ...route.query, mode: 'list', - // HAPUS record-id + // HAPUS record-id dan from 'record-id': undefined, + from: undefined, }, }) } - return { mode, goToEntry, backToList } + const backToView = () => { + router.push({ + path: route.path, + query: { + ...route.query, + mode: 'view', + // HAPUS from + from: undefined, + }, + }) + } + + // Fungsi back yang otomatis menentukan kemana harus kembali + const goBack = () => { + if (fromView.value) { + backToView() + } else { + backToList() + } + } + + return { mode, fromView, goToEntry, goToView, backToList, backToView, goBack } } export function useQueryCRUDRecordId(key: string = 'record-id') { diff --git a/app/pages/(features)/treatment-report/[id]/edit.vue b/app/pages/(features)/treatment-report/[id]/edit.vue deleted file mode 100644 index c9dd8686..00000000 --- a/app/pages/(features)/treatment-report/[id]/edit.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - diff --git a/app/pages/(features)/treatment-report/[id]/index.vue b/app/pages/(features)/treatment-report/[id]/index.vue deleted file mode 100644 index 43f5f6c3..00000000 --- a/app/pages/(features)/treatment-report/[id]/index.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/app/pages/(features)/treatment-report/add.vue b/app/pages/(features)/treatment-report/add.vue deleted file mode 100644 index e29a77cf..00000000 --- a/app/pages/(features)/treatment-report/add.vue +++ /dev/null @@ -1,45 +0,0 @@ - - -