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
-
-
-
-
- -
-
+ 300 CC
+ -
+ -
+ -
+ -
+ -
+ -
+ -
+
+
+ Bersih
+ 1 (Satu)
+ Lahir Hidup
+ RSSA
+ 18 gram
+ Normal dan sehat
+ -
+ 300 CC
+ PA
+
+
+ -
+
+
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 @@
-
-
-
- console.log(val)"
- @back="backToList"
- @error="
- (err: Error) => {
- toast({
- title: 'Terjadi Kesalahan',
- description: err.message,
- variant: 'destructive',
- })
- }
- "
- :doctors="doctors"
- :initialValues="detail"
- >
-
-
-
-
-
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 @@
@@ -21,11 +22,13 @@ const { mode, goToEntry, backToList } = useQueryCRUDMode('mode')
v-if="mode === 'list'"
:encounter="props.encounter"
@add="goToEntry"
- @edit="goToEntry"
+ @edit="goToEntry({ fromView: false })"
+ @view="goToView"
/>
-
+
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 @@
-
-
-
-
-