Merge branch 'dev' into feat/encounter-status-107
This commit is contained in:
No files matched your search
@@ -7,7 +7,7 @@ defineProps<{
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="w-full rounded-md border bg-white p-4 shadow-sm">
|
<div class="w-full rounded-md border bg-white dark:bg-neutral-950 p-4 shadow-sm">
|
||||||
<!-- Data Pasien -->
|
<!-- Data Pasien -->
|
||||||
<h2 class="mb-2 md:text-base 2xl:text-lg font-semibold">{{ 'data.patient.person.name' }} - {{ 'data.patient.number' }}</h2>
|
<h2 class="mb-2 md:text-base 2xl:text-lg font-semibold">{{ 'data.patient.person.name' }} - {{ 'data.patient.number' }}</h2>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
|
||||||
import Block from '~/components/pub/my-ui/doc-entry/block.vue'
|
import Block from '~/components/pub/my-ui/doc-entry/block.vue'
|
||||||
import Cell from '~/components/pub/my-ui/doc-entry/cell.vue'
|
import Cell from '~/components/pub/my-ui/doc-entry/cell.vue'
|
||||||
import Field from '~/components/pub/my-ui/doc-entry/field.vue'
|
import Field from '~/components/pub/my-ui/doc-entry/field.vue'
|
||||||
@@ -9,6 +8,8 @@ const props = defineProps<{
|
|||||||
excludeFields?: string[]
|
excludeFields?: string[]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
|
const emits = defineEmits(['click'])
|
||||||
|
|
||||||
const subject = ref({
|
const subject = ref({
|
||||||
'prim-compl': '',
|
'prim-compl': '',
|
||||||
'sec-compl': '',
|
'sec-compl': '',
|
||||||
@@ -25,77 +26,329 @@ const isExcluded = (key: string) => props.excludeFields?.includes(key)
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="space-y-4">
|
<form id="entry-form">
|
||||||
<!-- Keluhan Utama -->
|
<div class="mb-5 border-b border-b-slate-300 pb-3 text-lg xl:text-xl">
|
||||||
<Cell v-if="!isExcluded('prim-compl')">
|
<div>
|
||||||
<Label dynamic>Keluhan Utama</Label>
|
<h1 class="font-semibold">Pemeriksaan Fisiatrik</h1>
|
||||||
<Field>
|
<span class="text-sm font-semibold">Anamnesa</span>
|
||||||
<Textarea placeholder="Masukkan anamnesa pasien" v-model="subject['prim-compl']" />
|
</div>
|
||||||
</Field>
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
</Cell>
|
<Block>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Keluhan Utama</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
|
||||||
<!-- Keluhan Tambahan -->
|
<Block :colCount="3">
|
||||||
<Cell v-if="!isExcluded('sec-compl')">
|
<Cell>
|
||||||
<Label dynamic>Keluhan Tambahan</Label>
|
<Label dynamic>Diagnosa Medis</Label>
|
||||||
<Field>
|
<Field>
|
||||||
<Textarea placeholder="Masukkan keluhan tambahan" v-model="subject['sec-compl']" />
|
<Textarea />
|
||||||
</Field>
|
</Field>
|
||||||
</Cell>
|
</Cell>
|
||||||
|
|
||||||
<!-- Riwayat Penyakit Sekarang -->
|
<Cell>
|
||||||
<Cell v-if="!isExcluded('cur-disea-hist')">
|
<Label dynamic>Rencana Awal Medis</Label>
|
||||||
<Label dynamic>Riwayat Penyakit Sekarang</Label>
|
<Field>
|
||||||
<Field>
|
<Textarea />
|
||||||
<Textarea placeholder="Masukkan riwayat penyakit sekarang" v-model="subject['cur-disea-hist']" />
|
</Field>
|
||||||
</Field>
|
</Cell>
|
||||||
</Cell>
|
|
||||||
|
|
||||||
<!-- Riwayat Penyakit Dahulu -->
|
<Cell>
|
||||||
<Cell v-if="!isExcluded('pas-disea-hist')">
|
<Label dynamic>Terapi</Label>
|
||||||
<Label dynamic>Riwayat Penyakit Dahulu</Label>
|
<Field>
|
||||||
<Field>
|
<Textarea />
|
||||||
<Textarea placeholder="Masukkan riwayat penyakit dahulu" v-model="subject['pas-disea-hist']" />
|
</Field>
|
||||||
</Field>
|
</Cell>
|
||||||
</Cell>
|
</Block>
|
||||||
|
</div>
|
||||||
|
<Separator class="mt-8" />
|
||||||
|
|
||||||
<!-- Riwayat Penyakit Keluarga -->
|
<div class="my-2">
|
||||||
<Cell v-if="!isExcluded('fam-disea-hist')">
|
<h1 class="font-semibold">Pemeriksaan Fisik</h1>
|
||||||
<Label dynamic>Riwayat Penyakit Keluarga</Label>
|
<span class="text-sm font-semibold">Status Generalis</span>
|
||||||
<Field>
|
</div>
|
||||||
<Textarea placeholder="Masukkan riwayat penyakit keluarga" v-model="subject['fam-disea-hist']" />
|
|
||||||
</Field>
|
|
||||||
</Cell>
|
|
||||||
|
|
||||||
<!-- Riwayat Alergi -->
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
<Cell v-if="!isExcluded('alg-hist')">
|
<Block :colCount="3">
|
||||||
<Label dynamic>Riwayat Alergi</Label>
|
<Cell>
|
||||||
<Field>
|
<Label dynamic>Tekanan Darah</Label>
|
||||||
<Textarea placeholder="Masukkan riwayat alergi" v-model="subject['alg-hist']" />
|
<Field>
|
||||||
</Field>
|
<Input placeholder="Sistolik" />
|
||||||
</Cell>
|
<Input placeholder="Diastolik" />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
|
||||||
<!-- Reaksi Alergi -->
|
<Cell>
|
||||||
<Cell v-if="!isExcluded('alg-react')">
|
<Label dynamic>Nadi</Label>
|
||||||
<Label dynamic>Reaksi Alergi</Label>
|
<Field>
|
||||||
<Field>
|
<Input />
|
||||||
<Textarea placeholder="Masukkan reaksi alergi" v-model="subject['alg-react']" />
|
</Field>
|
||||||
</Field>
|
</Cell>
|
||||||
</Cell>
|
|
||||||
|
|
||||||
<!-- Pengobatan yang Sedang Dijalani -->
|
<Cell>
|
||||||
<Cell v-if="!isExcluded('med-hist')">
|
<Label dynamic>GCS</Label>
|
||||||
<Label dynamic>Riwayat Pengobatan</Label>
|
<Field>
|
||||||
<Field>
|
<Input />
|
||||||
<Textarea placeholder="Masukkan pengobatan yang sedang dijalani" v-model="subject['med-hist']" />
|
</Field>
|
||||||
</Field>
|
</Cell>
|
||||||
</Cell>
|
</Block>
|
||||||
|
<Block :colCount="3">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>RR</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
|
||||||
<!-- Golongan Darah -->
|
<Cell>
|
||||||
<Cell v-if="!isExcluded('blood-type')">
|
<Label dynamic>Ambulasi</Label>
|
||||||
<Label dynamic>Golongan Darah</Label>
|
<Field>
|
||||||
<Field>
|
<RadioGroup class="flex gap-4">
|
||||||
<Input type="text" placeholder="Masukkan golongan darah" v-model="subject['blood-type']" />
|
<div class="flex items-center space-x-2">
|
||||||
</Field>
|
<RadioGroupItem
|
||||||
</Cell>
|
id="vaksin-yes"
|
||||||
</div>
|
value="yes"
|
||||||
|
/>
|
||||||
|
<Label for="vaksin-yes">Dependent</Label>
|
||||||
|
</div>
|
||||||
|
<div class="flex items-center space-x-2">
|
||||||
|
<RadioGroupItem
|
||||||
|
id="vaksin-no"
|
||||||
|
value="no"
|
||||||
|
/>
|
||||||
|
<Label for="vaksin-no">Independen</Label>
|
||||||
|
</div>
|
||||||
|
</RadioGroup>
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Gait</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<span class="text-sm font-semibold">Status Neurologis</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block :colCount="3">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>N. Cranialis</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Sensoris</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Reflek Fisilogis</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Reflek Patologis</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Saraf Otonom</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<span class="text-sm font-semibold">Status Muskuloskeletal - ROM</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Leher</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Batang Tubuh</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>AGA</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>AGB</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<span class="text-sm font-semibold">Status Muskuloskeletal - MMT</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Leher</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Batang Tubuh</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>AGA</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>AGB</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<span class="text-sm font-semibold">Statu Lokalis</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Block>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Deskripsi Temuan Fisik</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
|
||||||
|
<Separator class="mt-8" />
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<h1 class="font-semibold">Pemeriksaan Penunjang</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Block>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Catatan Pemeriksaan Penunjang</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
|
||||||
|
<Separator class="mt-8" />
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<h1 class="font-semibold">Daftar Masalah</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Masalah Medik</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Masalah Rehabilitasi Medik</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
|
||||||
|
<Separator class="mt-8" />
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<h1 class="font-semibold">Diagnosa Fungsional (ICD-X)</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-8 grid grid-cols-2 gap-4">
|
||||||
|
<AppIcdPreview />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<h1 class="font-semibold">Program Rehabilitasi</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block :colCount="3">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Modalitas Fisik</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Latihan</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Ortesa Protesa</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Edukasi</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Lain-Lain</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</template>
|
</template>
|
||||||
@@ -1,172 +1,486 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Block from '~/components/pub/my-ui/form/block.vue'
|
import Block from '~/components/pub/my-ui/doc-entry/block.vue'
|
||||||
import FieldGroup from '~/components/pub/my-ui/form/field-group.vue'
|
import Cell from '~/components/pub/my-ui/doc-entry/cell.vue'
|
||||||
import Field from '~/components/pub/my-ui/form/field.vue'
|
import Field from '~/components/pub/my-ui/doc-entry/field.vue'
|
||||||
import Label from '~/components/pub/my-ui/form/label.vue'
|
import Label from '~/components/pub/my-ui/doc-entry/label.vue'
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
excludeFields?: string[]
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const emits = defineEmits(['click'])
|
||||||
|
|
||||||
|
const subject = ref({
|
||||||
|
'prim-compl': '',
|
||||||
|
'sec-compl': '',
|
||||||
|
'cur-disea-hist': '',
|
||||||
|
'pas-disea-hist': '',
|
||||||
|
'fam-disea-hist': '',
|
||||||
|
'alg-hist': '',
|
||||||
|
'alg-react': '',
|
||||||
|
'med-hist': '',
|
||||||
|
'blood-type': '',
|
||||||
|
})
|
||||||
|
|
||||||
|
const isExcluded = (key: string) => props.excludeFields?.includes(key)
|
||||||
|
const disorders = ref<string[]>([])
|
||||||
|
const therapies = ref<string[]>([])
|
||||||
|
const summary = ref('')
|
||||||
|
|
||||||
|
const disorderOptions = [
|
||||||
|
'Fungsi Otot',
|
||||||
|
'Fungsi Sendi',
|
||||||
|
'Fungsi Jalan',
|
||||||
|
'Fungsi Syaraf',
|
||||||
|
'Fungsi Koordinasi',
|
||||||
|
'Jantung',
|
||||||
|
'Fungsi Respirasi',
|
||||||
|
'Fungsi Menelan',
|
||||||
|
'Fungsi Bladder',
|
||||||
|
'Fungsi Bowel',
|
||||||
|
'Fungsi Luhur',
|
||||||
|
'Fungsi Kontrol Postur',
|
||||||
|
'Fungsi Eksekusi',
|
||||||
|
'Fungsi Ortosa/Protesa',
|
||||||
|
'Gangguan Aktivitas Sehari-hari',
|
||||||
|
'Lainnya',
|
||||||
|
]
|
||||||
|
|
||||||
|
const therapyOptions = ['Terapi Latihan', 'Modalitas Fisik', 'Protesa/Ortosa', 'Medikamentosa', 'Lain-lain: Konsultasi']
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<form id="entry-form">
|
<form id="entry-form">
|
||||||
<div class="mb-5 border-b border-b-slate-300 pb-3 text-lg xl:text-xl">
|
<div class="mb-5 border-b border-b-slate-300 pb-3 text-lg xl:text-xl">
|
||||||
<Block>
|
<Block>
|
||||||
<FieldGroup>
|
<Cell>
|
||||||
<Label dynamic>Sudah Vaksin</Label>
|
|
||||||
<Field>
|
|
||||||
<Select
|
|
||||||
:options="[
|
|
||||||
{ label: 'Sudah', value: 'yes' },
|
|
||||||
{ label: 'Belum', value: 'no' },
|
|
||||||
]"
|
|
||||||
/>
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup>
|
|
||||||
<Label dynamic>Kasus</Label>
|
|
||||||
<Field>
|
|
||||||
<Select
|
|
||||||
:options="[
|
|
||||||
{ label: 'Baru', value: 'baru' },
|
|
||||||
{ label: 'Lama', value: 'lama' },
|
|
||||||
]"
|
|
||||||
/>
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup>
|
|
||||||
<Label dynamic>Kunjungan</Label>
|
|
||||||
<Field>
|
|
||||||
<Select
|
|
||||||
:options="[
|
|
||||||
{ label: 'Baru', value: 'baru' },
|
|
||||||
{ label: 'Lama', value: 'lama' },
|
|
||||||
]"
|
|
||||||
/>
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<!-- Riwayat Penyakit -->
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Keluhan Utama</Label>
|
<Label dynamic>Keluhan Utama</Label>
|
||||||
<Field>
|
|
||||||
<Textarea placeholder="Masukkan anamnesa pasien" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Riwayat Penyakit</Label>
|
|
||||||
<Field>
|
|
||||||
<Textarea
|
|
||||||
placeholder="Masukkan anamnesa pasien (Riwayat Penyakit Sekarang, Dahulu, Pengobatan, Keluarga, dll)"
|
|
||||||
/>
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>SpO₂</Label>
|
|
||||||
<Field>
|
|
||||||
<Input type="number" placeholder="%" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Tekanan Darah Sistol</Label>
|
|
||||||
<Field>
|
|
||||||
<Input type="number" placeholder="mmHg" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Tekanan Darah Diastol</Label>
|
|
||||||
<Field>
|
|
||||||
<Input type="number" placeholder="mmHg" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Respirasi</Label>
|
|
||||||
<Field>
|
|
||||||
<Input type="number" placeholder="kali/menit" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Nadi</Label>
|
|
||||||
<Field>
|
|
||||||
<Input type="number" placeholder="kali/menit" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Temperatur</Label>
|
|
||||||
<Field>
|
|
||||||
<Input type="number" placeholder="℃" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Berat Badan</Label>
|
|
||||||
<Field>
|
|
||||||
<Input type="number" placeholder="Kg" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Tinggi Badan</Label>
|
|
||||||
<Field>
|
|
||||||
<Input type="number" placeholder="Cm" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Golongan Darah</Label>
|
|
||||||
<Field>
|
|
||||||
<Select :options="bloodGroups" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Pemeriksaan Fisik (Yang Mendukung)</Label>
|
|
||||||
<Field>
|
|
||||||
<Textarea placeholder="Masukkan pemeriksaan fisik" />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<!-- Prosedur -->
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Diagnosa (ICD-X)</Label>
|
|
||||||
<Field>
|
|
||||||
<button class="rounded bg-orange-100 px-3 py-1 text-orange-600">+ Pilih Diagnosa</button>
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
<!-- Diagnosa -->
|
|
||||||
<FieldGroup :column="2">
|
|
||||||
<Label dynamic>Diagnosa (ICD-X)</Label>
|
|
||||||
<Field>
|
|
||||||
<button class="rounded bg-orange-100 px-3 py-1 text-orange-600">+ Pilih Diagnosa</button>
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="3">
|
|
||||||
<Label dynamic>Diagnosa Medis</Label>
|
|
||||||
<Field>
|
<Field>
|
||||||
<Textarea />
|
<Textarea />
|
||||||
</Field>
|
</Field>
|
||||||
</FieldGroup>
|
</Cell>
|
||||||
|
|
||||||
<FieldGroup :column="3">
|
|
||||||
<Label dynamic>Rencana Awal Medis</Label>
|
|
||||||
<Field>
|
|
||||||
<Textarea />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
|
|
||||||
<FieldGroup :column="3">
|
|
||||||
<Label dynamic>Terapi</Label>
|
|
||||||
<Field>
|
|
||||||
<Textarea />
|
|
||||||
</Field>
|
|
||||||
</FieldGroup>
|
|
||||||
</Block>
|
</Block>
|
||||||
|
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Riwayat Penyakit Dahulu</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Riwayat Penyakit Sekarang</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Separator class="mt-8" />
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<h1 class="font-semibold">Pemeriksaan Fisik</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Block>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Umum</Label>
|
||||||
|
<Field>
|
||||||
|
<Input placeholder="Sistolik" />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<h1 class="font-semibold">Tanda Vital</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Kesadaran (GCS)</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Pernapasan</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Jenis</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Nadi</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Jenis</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Tekanan Darah Lengan Kanan</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Tekanan Darah Lengan Kiri</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Suhu Aksila</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Suhu Rektal</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<h1 class="font-semibold">Pemeriksaan Badan</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Kulit</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block :colCount="3">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Kepala</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Telinga</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Hidung</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
|
||||||
|
<Block :colCount="3">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Rongga Mulut/Tenggorokan</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Mata</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Lain-Lain</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block :colCount="3">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Leher</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Kelenjar Tiroid</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Lain-Lain</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block :colCount="3">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Thorax</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Jantung</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Paru-Paru</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Lain-Lain</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block :colCount="3">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Abdomen</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Hati</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Lien</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Lain-Lain</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="my-2 rounded-md border border-slate-300 p-4">
|
||||||
|
<Block :colCount="3">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Punggung</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Ekstremitas</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Kelamin</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Rectum</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>System Syaraf</Label>
|
||||||
|
<Field>
|
||||||
|
<Input />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Neuromoskuloskeletal</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Kardiorespirasi</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
|
||||||
|
<Separator class="mt-8" />
|
||||||
|
|
||||||
|
<div class="my-2">
|
||||||
|
<h1 class="font-semibold">Pemeriksaan Penunjang</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Block :colCount="2">
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Pencitraan</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
<Cell>
|
||||||
|
<Label dynamic>Laboratorium</Label>
|
||||||
|
<Field>
|
||||||
|
<Textarea />
|
||||||
|
</Field>
|
||||||
|
</Cell>
|
||||||
|
</Block>
|
||||||
|
|
||||||
|
<div class="mb-8 grid grid-cols-2 gap-4">
|
||||||
|
<div>
|
||||||
|
<span class="text-md">Diagnosa Medis (ICD-X)</span>
|
||||||
|
<Button
|
||||||
|
class="my-2 rounded bg-orange-100 px-3 py-1 text-orange-600"
|
||||||
|
type="button"
|
||||||
|
@click="emits('click', 'prosedur')"
|
||||||
|
>
|
||||||
|
+ Pilih Prosedur
|
||||||
|
</Button>
|
||||||
|
<AppIcdPreview />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="text-md">Diagnosa Medis (ICD-X)</span>
|
||||||
|
<Button
|
||||||
|
class="my-2 rounded bg-orange-100 px-3 py-1 text-orange-600"
|
||||||
|
type="button"
|
||||||
|
@click="emits('click', 'prosedur')"
|
||||||
|
>
|
||||||
|
+ Pilih Prosedur
|
||||||
|
</Button>
|
||||||
|
<AppIcdPreview />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="text-md">Diagnosa Medis (ICD-X)</span>
|
||||||
|
<Button
|
||||||
|
class="my-2 rounded bg-orange-100 px-3 py-1 text-orange-600"
|
||||||
|
type="button"
|
||||||
|
@click="emits('click', 'prosedur')"
|
||||||
|
>
|
||||||
|
+ Pilih Prosedur
|
||||||
|
</Button>
|
||||||
|
<AppIcdPreview />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="space-y-8">
|
||||||
|
<div>
|
||||||
|
<h3 class="mb-3 text-lg font-semibold">Gangguan Fungsi</h3>
|
||||||
|
<div class="grid grid-cols-3 gap-2">
|
||||||
|
<div
|
||||||
|
v-for="opt in disorderOptions"
|
||||||
|
:key="opt"
|
||||||
|
class="flex items-center space-x-2"
|
||||||
|
>
|
||||||
|
<Checkbox
|
||||||
|
:id="opt"
|
||||||
|
:value="opt"
|
||||||
|
v-model="disorders"
|
||||||
|
/>
|
||||||
|
<Label
|
||||||
|
:for="opt"
|
||||||
|
class="text-sm"
|
||||||
|
>
|
||||||
|
{{ opt }}
|
||||||
|
</Label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-4 space-y-2">
|
||||||
|
<Label
|
||||||
|
for="summary"
|
||||||
|
class="font-medium"
|
||||||
|
>
|
||||||
|
Kesimpulan Didapatkan Gangguan Fungsi
|
||||||
|
<span class="text-red-500">*</span>
|
||||||
|
</Label>
|
||||||
|
<Textarea
|
||||||
|
id="summary"
|
||||||
|
v-model="summary"
|
||||||
|
placeholder="Masukkan kesimpulan gangguan fungsi"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<Separator />
|
||||||
|
|
||||||
|
<!-- REKOMENDASI TERAPI -->
|
||||||
|
<div>
|
||||||
|
<h3 class="mb-3 text-lg font-semibold">Rekomendasi Terapi Tindakan Yang Diperlukan</h3>
|
||||||
|
<div class="grid grid-cols-3 gap-2">
|
||||||
|
<div
|
||||||
|
v-for="opt in therapyOptions"
|
||||||
|
:key="opt"
|
||||||
|
class="flex items-center space-x-2"
|
||||||
|
>
|
||||||
|
<Checkbox
|
||||||
|
:id="opt"
|
||||||
|
:value="opt"
|
||||||
|
v-model="therapies"
|
||||||
|
/>
|
||||||
|
<Label
|
||||||
|
:for="opt"
|
||||||
|
class="text-sm"
|
||||||
|
>
|
||||||
|
{{ opt }}
|
||||||
|
</Label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
@@ -49,7 +49,7 @@ const refSearchNav: RefSearchNav = {
|
|||||||
|
|
||||||
async function getPatientList() {
|
async function getPatientList() {
|
||||||
isLoading.isTableLoading = true
|
isLoading.isTableLoading = true
|
||||||
const resp = await xfetch('/api/v1/patient')
|
const resp = await xfetch('/api/v1/encounter')
|
||||||
if (resp.success) {
|
if (resp.success) {
|
||||||
data.value = (resp.body as Record<string, any>).data
|
data.value = (resp.body as Record<string, any>).data
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,15 @@ import { useRoute, useRouter } from 'vue-router'
|
|||||||
import CompTab from '~/components/pub/my-ui/comp-tab/comp-tab.vue'
|
import CompTab from '~/components/pub/my-ui/comp-tab/comp-tab.vue'
|
||||||
import type { TabItem } from '~/components/pub/my-ui/comp-tab/type'
|
import type { TabItem } from '~/components/pub/my-ui/comp-tab/type'
|
||||||
|
|
||||||
import Status from '~/components/app/encounter/status.vue'
|
import { getDetail } from '~/services/encounter.service'
|
||||||
|
|
||||||
import AssesmentFunctionList from '~/components/content/assesment-function/list.vue'
|
import AssesmentFunctionList from '~/components/content/assesment-function/list.vue'
|
||||||
import EarlyMedicalAssesmentList from '~/components/content/soapi/entry.vue'
|
import EarlyMedicalAssesmentList from '~/components/content/soapi/entry.vue'
|
||||||
|
import PrescriptionList from '~/components/content/prescription/list.vue'
|
||||||
|
import type { Encounter } from '~/models/encounter'
|
||||||
|
import Status from '~/components/app/encounter/status.vue'
|
||||||
|
// import AssesmentFunctionList from '~/components/content/assesment-function/list.vue'
|
||||||
|
import EarlyMedicalRehabList from '~/components/content/soapi/entry.vue'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@@ -22,6 +28,9 @@ const activeTab = computed({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const id = typeof route.params.id == 'string' ? parseInt(route.params.id) : 0
|
||||||
|
const encounter = ref<Encounter>((await getDetail(id)) as Encounter)
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
noRm: 'RM21123',
|
noRm: 'RM21123',
|
||||||
nama: 'Ahmad Sutanto',
|
nama: 'Ahmad Sutanto',
|
||||||
@@ -38,13 +47,17 @@ const data = {
|
|||||||
const tabs: TabItem[] = [
|
const tabs: TabItem[] = [
|
||||||
{ value: 'status', label: 'Status Masuk/Keluar', component: Status },
|
{ value: 'status', label: 'Status Masuk/Keluar', component: Status },
|
||||||
{ value: 'early-medical-assessment', label: 'Pengkajian Awal Medis', component: EarlyMedicalAssesmentList },
|
{ value: 'early-medical-assessment', label: 'Pengkajian Awal Medis', component: EarlyMedicalAssesmentList },
|
||||||
{ value: 'rehab-medical-assessment', label: 'Pengkajian Awal Medis Rehabilitasi Medis' },
|
{
|
||||||
|
value: 'rehab-medical-assessment',
|
||||||
|
label: 'Pengkajian Awal Medis Rehabilitasi Medis',
|
||||||
|
component: EarlyMedicalRehabList,
|
||||||
|
},
|
||||||
{ value: 'function-assessment', label: 'Asesmen Fungsi', component: AssesmentFunctionList },
|
{ value: 'function-assessment', label: 'Asesmen Fungsi', component: AssesmentFunctionList },
|
||||||
{ value: 'therapy-protocol', label: 'Protokol Terapi' },
|
{ value: 'therapy-protocol', label: 'Protokol Terapi' },
|
||||||
{ value: 'education-assessment', label: 'Asesmen Kebutuhan Edukasi' },
|
{ value: 'education-assessment', label: 'Asesmen Kebutuhan Edukasi' },
|
||||||
{ value: 'consent', label: 'General Consent' },
|
{ value: 'consent', label: 'General Consent' },
|
||||||
{ value: 'patient-note', label: 'CPRJ' },
|
{ value: 'patient-note', label: 'CPRJ' },
|
||||||
{ value: 'prescription', label: 'Order Obat' },
|
{ value: 'prescription', label: 'Order Obat', component: PrescriptionList },
|
||||||
{ value: 'device', label: 'Order Alkes' },
|
{ value: 'device', label: 'Order Alkes' },
|
||||||
{ value: 'mcu-radiology', label: 'Order Radiologi' },
|
{ value: 'mcu-radiology', label: 'Order Radiologi' },
|
||||||
{ value: 'mcu-lab-pc', label: 'Order Lab PK' },
|
{ value: 'mcu-lab-pc', label: 'Order Lab PK' },
|
||||||
@@ -66,6 +79,10 @@ const tabs: TabItem[] = [
|
|||||||
<PubMyUiNavContentBa label="Kembali ke Daftar Kunjungan" />
|
<PubMyUiNavContentBa label="Kembali ke Daftar Kunjungan" />
|
||||||
</div>
|
</div>
|
||||||
<AppEncounterQuickInfo :data="data" />
|
<AppEncounterQuickInfo :data="data" />
|
||||||
<CompTab :data="tabs" :initial-active-tab="activeTab" @change-tab="activeTab = $event" />
|
<CompTab
|
||||||
|
:data="tabs"
|
||||||
|
:initial-active-tab="activeTab"
|
||||||
|
@change-tab="activeTab = $event"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -1,16 +1,38 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
|
import { useQueryMode } from '@/composables/useQueryMode' // asumsikan ini ada
|
||||||
|
|
||||||
import EarlyMedicalAssesmentList from './list.vue'
|
import SoapiList from './list.vue'
|
||||||
import EarlyMedicalAssesmentForm from './form.vue'
|
import EarlyForm from './form.vue'
|
||||||
|
import RehabForm from './form-rehab.vue'
|
||||||
|
import FunctionForm from './form-function.vue'
|
||||||
|
|
||||||
|
const route = useRoute()
|
||||||
|
const type = computed(() => (route.query.tab as string) || 'early-medical-assessment')
|
||||||
|
|
||||||
const { mode, openForm, backToList } = useQueryMode('mode')
|
const { mode, openForm, backToList } = useQueryMode('mode')
|
||||||
|
|
||||||
|
const formMap = {
|
||||||
|
'early-medical-assessment': EarlyForm,
|
||||||
|
'rehab-medical-assessment': RehabForm,
|
||||||
|
'function-assessment': FunctionForm,
|
||||||
|
}
|
||||||
|
|
||||||
|
const ActiveForm = computed(() => formMap[type.value] || EarlyForm)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<EarlyMedicalAssesmentList v-if="mode === 'list'" @add="openForm" />
|
<SoapiList
|
||||||
<EarlyMedicalAssesmentForm v-else @back="backToList" />
|
v-if="mode === 'list'"
|
||||||
|
@add="openForm"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<component
|
||||||
|
v-else
|
||||||
|
:is="ActiveForm"
|
||||||
|
@back="backToList"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import Entry from '~/components/app/soapi/entry.vue'
|
||||||
|
import Dialog from '~/components/pub/my-ui/modal/dialog.vue'
|
||||||
|
|
||||||
|
const isOpen = ref(false)
|
||||||
|
const data = ref([])
|
||||||
|
const isLoading = reactive<DataTableLoader>({
|
||||||
|
isTableLoading: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
async function getPatientList() {
|
||||||
|
isLoading.isTableLoading = true
|
||||||
|
const resp = await xfetch('/api/v1/patient')
|
||||||
|
if (resp.success) {
|
||||||
|
data.value = (resp.body as Record<string, any>).data
|
||||||
|
}
|
||||||
|
isLoading.isTableLoading = false
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getPatientList()
|
||||||
|
})
|
||||||
|
|
||||||
|
function handleClick(type: string) {
|
||||||
|
console.log(type)
|
||||||
|
isOpen.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
provide('table_data_loader', isLoading)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<Entry
|
||||||
|
type="function"
|
||||||
|
:exclude-fields="['prim-compl', 'sec-compl']"
|
||||||
|
@click="handleClick"
|
||||||
|
/>
|
||||||
|
<Dialog
|
||||||
|
v-model:open="isOpen"
|
||||||
|
title="Pilih Prosedur"
|
||||||
|
size="xl"
|
||||||
|
prevent-outside
|
||||||
|
>
|
||||||
|
<AppIcdMultiselectPicker :data="data" />
|
||||||
|
</Dialog>
|
||||||
|
</template>
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import Entry from '~/components/app/soapi/entry.vue'
|
||||||
|
import Dialog from '~/components/pub/my-ui/modal/dialog.vue'
|
||||||
|
|
||||||
|
const isOpen = ref(false)
|
||||||
|
const data = ref([])
|
||||||
|
const isLoading = reactive<DataTableLoader>({
|
||||||
|
isTableLoading: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
async function getPatientList() {
|
||||||
|
isLoading.isTableLoading = true
|
||||||
|
const resp = await xfetch('/api/v1/patient')
|
||||||
|
if (resp.success) {
|
||||||
|
data.value = (resp.body as Record<string, any>).data
|
||||||
|
}
|
||||||
|
isLoading.isTableLoading = false
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getPatientList()
|
||||||
|
})
|
||||||
|
|
||||||
|
function handleClick(type: string) {
|
||||||
|
console.log(type)
|
||||||
|
isOpen.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
provide('table_data_loader', isLoading)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<Entry
|
||||||
|
type="early-rehab"
|
||||||
|
:exclude-fields="['prim-compl', 'sec-compl']"
|
||||||
|
@click="handleClick"
|
||||||
|
/>
|
||||||
|
<Dialog
|
||||||
|
v-model:open="isOpen"
|
||||||
|
title="Pilih Prosedur"
|
||||||
|
size="xl"
|
||||||
|
prevent-outside
|
||||||
|
>
|
||||||
|
<AppIcdMultiselectPicker :data="data" />
|
||||||
|
</Dialog>
|
||||||
|
</template>
|
||||||
@@ -74,10 +74,10 @@ function onSelect(item: Item) {
|
|||||||
:aria-describedby="`${props.id}-search`"
|
:aria-describedby="`${props.id}-search`"
|
||||||
:class="
|
:class="
|
||||||
cn(
|
cn(
|
||||||
'w-full justify-between border md:text-xs 2xl:text-sm font-normal rounded-md px-3 py-2 focus:outline-none focus:ring-1 focus:ring-black dark:focus:ring-white',
|
'w-full justify-between border dark:!border-slate-400 h-8 2xl:h-9 md:text-xs 2xl:text-sm font-normal rounded-md px-3 focus:outline-none focus:ring-1 focus:ring-black dark:focus:ring-white',
|
||||||
{
|
{
|
||||||
'cursor-not-allowed bg-gray-100 opacity-50 border-gray-300 text-gray-500': props.isDisabled,
|
'cursor-not-allowed bg-gray-100 opacity-50 border-gray-300 text-gray-500': props.isDisabled,
|
||||||
'bg-white text-black dark:bg-gray-800 dark:text-white dark:border-gray-600 border-gray-400 hover:bg-gray-50 dark:hover:bg-gray-700': !props.isDisabled,
|
'bg-white text-black dark:bg-slate-950 dark:text-white dark:border-gray-600 border-gray-400 hover:bg-gray-50 dark:hover:bg-gray-700': !props.isDisabled,
|
||||||
'text-gray-400 dark:text-gray-500': !modelValue && !props.isDisabled,
|
'text-gray-400 dark:text-gray-500': !modelValue && !props.isDisabled,
|
||||||
},
|
},
|
||||||
props.class,
|
props.class,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ function changeTab(value: string) {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<!-- Tabs -->
|
<!-- Tabs -->
|
||||||
<div class="mt-4 flex flex-wrap gap-2 rounded-md border bg-white p-4 shadow-sm">
|
<div class="mt-4 flex flex-wrap gap-2 rounded-md border bg-white dark:bg-neutral-950 p-4 shadow-sm">
|
||||||
<Button
|
<Button
|
||||||
v-for="tab in data"
|
v-for="tab in data"
|
||||||
:key="tab.value"
|
:key="tab.value"
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ const settingClass = computed(() => {
|
|||||||
'[&_.label]:md:w-44 [&_.label]:xl:w-52',
|
'[&_.label]:md:w-44 [&_.label]:xl:w-52',
|
||||||
][getLabelSizeIdx(props.labelSize)]
|
][getLabelSizeIdx(props.labelSize)]
|
||||||
} else {
|
} else {
|
||||||
cls += ' [&_.label]:pb-1 ';
|
cls += ' [&_.label]:pb-1 [&_.label]:!pt-0 ';
|
||||||
}
|
}
|
||||||
cls += ' [&:not(.preview)_.height-default]:pt-2 [&:not(.preview)_.height-default]:2xl:!pt-1.5 [&:not(.preview)_.height-compact]:!pt-1 '
|
cls += ' [&:not(.preview)_.height-default]:pt-2 [&:not(.preview)_.height-default]:2xl:!pt-1.5 [&:not(.preview)_.height-compact]:!pt-1 '
|
||||||
cls += '[&_textarea]:text-xs [&_textarea]:2xl:!text-sm '
|
cls += '[&_textarea]:text-xs [&_textarea]:2xl:!text-sm '
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const props = defineProps<{
|
|||||||
<td
|
<td
|
||||||
:class="
|
:class="
|
||||||
cn(
|
cn(
|
||||||
'p-4 align-middle md:text-xs 2xl:text-sm [&:has([role=checkbox])]:pr-0',
|
'p2 2xl:p-3 align-middle md:text-xs 2xl:text-sm [&:has([role=checkbox])]:pr-0',
|
||||||
props.class,
|
props.class,
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
|
||||||
|
// Handlers
|
||||||
|
import { genCrudHandler } from '~/handlers/_handler'
|
||||||
|
|
||||||
|
// Services
|
||||||
|
import { create, update, remove } from '~/services/encounter.service'
|
||||||
|
|
||||||
|
export const {
|
||||||
|
recId,
|
||||||
|
recAction,
|
||||||
|
recItem,
|
||||||
|
isReadonly,
|
||||||
|
isProcessing,
|
||||||
|
isFormEntryDialogOpen,
|
||||||
|
isRecordConfirmationOpen,
|
||||||
|
onResetState,
|
||||||
|
handleActionSave,
|
||||||
|
handleActionEdit,
|
||||||
|
handleActionRemove,
|
||||||
|
handleCancelForm,
|
||||||
|
} = genCrudHandler({
|
||||||
|
create,
|
||||||
|
update,
|
||||||
|
remove,
|
||||||
|
})
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { type Doctor, genDoctor } from "./doctor"
|
import { type Doctor, genDoctor } from "./doctor"
|
||||||
|
import { genEmployee, type Employee } from "./employee"
|
||||||
|
|
||||||
export interface Encounter {
|
export interface Encounter {
|
||||||
id: number
|
id: number
|
||||||
@@ -9,6 +10,8 @@ export interface Encounter {
|
|||||||
specialist_id?: number
|
specialist_id?: number
|
||||||
subspecialist_id?: number
|
subspecialist_id?: number
|
||||||
visitdate: string
|
visitdate: string
|
||||||
|
adm_employee_id: number
|
||||||
|
adm_employee: Employee
|
||||||
appointment_doctor_id: number
|
appointment_doctor_id: number
|
||||||
appointment_doctor: Doctor
|
appointment_doctor: Doctor
|
||||||
responsible_doctor_id?: number
|
responsible_doctor_id?: number
|
||||||
@@ -31,9 +34,16 @@ export function genEncounter(): Encounter {
|
|||||||
class_code: '',
|
class_code: '',
|
||||||
unit_id: 0,
|
unit_id: 0,
|
||||||
visitdate: '',
|
visitdate: '',
|
||||||
|
adm_employee_id: 0,
|
||||||
|
adm_employee: genEmployee(),
|
||||||
appointment_doctor_id: 0,
|
appointment_doctor_id: 0,
|
||||||
appointment_doctor: genDoctor(),
|
appointment_doctor: genDoctor(),
|
||||||
medicalDischargeEducation: '',
|
medicalDischargeEducation: '',
|
||||||
status_code: ''
|
status_code: ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface EncounterCheckInDto {
|
||||||
|
responsible_doctor_id: number
|
||||||
|
responsibleArea_employee_id: number
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user