diff --git a/app/components/app/procedure-room-order-item/list-detail.cfg.ts b/app/components/app/procedure-room-order-item/list-detail.cfg.ts
new file mode 100644
index 00000000..cf0f6dab
--- /dev/null
+++ b/app/components/app/procedure-room-order-item/list-detail.cfg.ts
@@ -0,0 +1,16 @@
+import type { Config } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+
+export const config: Config = {
+ cols: [{}, {}, { classVal: '!p-0.5' }],
+
+ headers: [
+ [
+ { label: 'Kode' },
+ { label: 'Nama' },
+ { label: 'Catatan' },
+ ],
+ ],
+
+ keys: ['procedureRoom.code', 'procedureRoom.infra.name', 'note'],
+}
diff --git a/app/components/app/procedure-room-order-item/list-detail.vue b/app/components/app/procedure-room-order-item/list-detail.vue
new file mode 100644
index 00000000..75727a72
--- /dev/null
+++ b/app/components/app/procedure-room-order-item/list-detail.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+ Daftar Order Ruang
+
+
+
+
diff --git a/app/components/app/procedure-room-order-item/list-entry.cfg.ts b/app/components/app/procedure-room-order-item/list-entry.cfg.ts
new file mode 100644
index 00000000..2afcd855
--- /dev/null
+++ b/app/components/app/procedure-room-order-item/list-entry.cfg.ts
@@ -0,0 +1,43 @@
+import type { Config } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue'))
+const input = defineAsyncComponent(() => import('~/components/pub/ui/input/Input.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, { classVal: '!p-0.5' }, { width: 50 }],
+
+ headers: [
+ [
+ { label: 'Kode' },
+ { label: 'Nama' },
+ { label: 'Catatan' },
+ { label: '' },
+ ],
+ ],
+
+ keys: ['procedureRoom.code', 'procedureRoom.infra.name', 'note'],
+
+ delKeyNames: [
+ { key: 'mcuSrc.name', label: 'Nama' },
+ ],
+
+ components: {
+ note(rec, idx) {
+ return {
+ idx,
+ rec: rec as object,
+ component: input,
+ }
+ },
+ action(rec, idx) {
+ return {
+ idx,
+ rec: rec as object,
+ component: action,
+ }
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/procedure-room-order-item/list-entry.vue b/app/components/app/procedure-room-order-item/list-entry.vue
new file mode 100644
index 00000000..f86a0b8e
--- /dev/null
+++ b/app/components/app/procedure-room-order-item/list-entry.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Daftar Order Ruang
+
+
+
+
+
+
+
diff --git a/app/components/app/procedure-room-order/detail.vue b/app/components/app/procedure-room-order/detail.vue
new file mode 100644
index 00000000..23d0dc75
--- /dev/null
+++ b/app/components/app/procedure-room-order/detail.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+ Detail Order
+
+
+
+ No. Order
+
+ ORT-{{ data.id }}
+
+
+ Tgl. Order
+
+ {{ data.createdAt?.substring(0, 10) }}
+
+
+
+
diff --git a/app/components/app/procedure-room-order/form.vue b/app/components/app/procedure-room-order/form.vue
new file mode 100644
index 00000000..ff6c3835
--- /dev/null
+++ b/app/components/app/procedure-room-order/form.vue
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/app/components/app/procedure-room-order/list.cfg.ts b/app/components/app/procedure-room-order/list.cfg.ts
new file mode 100644
index 00000000..e415e26f
--- /dev/null
+++ b/app/components/app/procedure-room-order/list.cfg.ts
@@ -0,0 +1,61 @@
+import type { Config, RecComponent } from '~/components/pub/my-ui/data-table'
+import { defineAsyncComponent } from 'vue'
+import type { ProcedureRoomOrder } from '~/models/procedure-room-order'
+
+const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dsd.vue'))
+
+export const config: Config = {
+ cols: [{}, {}, {}, {}, {}, { width: 50 }],
+
+ headers: [[
+ { label: 'Tgl. Order' },
+ { label: 'No. Order' },
+ { label: 'Ruangan' },
+ { label: 'Status' },
+ { label: 'Resume' },
+ { label: '' },
+ ]],
+
+ keys: ['date', 'number', 'room', 'status_code', 'resume', 'action'],
+
+ delKeyNames: [
+ { key: 'createdAt', label: 'Tgl. Order' },
+ { key: 'id', label: 'No. Order' },
+ ],
+
+ parses: {
+ date: (rec: any) => {
+ const recX = rec as ProcedureRoomOrder
+ return recX.createdAt ? recX.createdAt.substring(0, 10) : ''
+
+ },
+ number: (rec: any) => {
+ const recX = rec as ProcedureRoomOrder
+ return `ORT-${recX.id}`
+ },
+ room: (rec: any) => {
+ const recX = rec as ProcedureRoomOrder
+ let result = ''
+ if (recX.items && recX.items.length > 0) {
+ recX.items.forEach((item, idx) => {
+ result += item.infra?.name ? `
${item.infra.name}
` : ''
+ })
+ }
+ // recX.ite
+ return ''
+ },
+ },
+
+ components: {
+ action(rec, idx) {
+ const res: RecComponent = {
+ idx,
+ rec: rec as object,
+ component: action,
+ }
+ return res
+ },
+ },
+
+ htmls: {},
+}
diff --git a/app/components/app/procedure-room-order/list.vue b/app/components/app/procedure-room-order/list.vue
new file mode 100644
index 00000000..bdbfe1be
--- /dev/null
+++ b/app/components/app/procedure-room-order/list.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
diff --git a/app/components/app/procedure-room/multi-opt-picker.vue b/app/components/app/procedure-room/multi-opt-picker.vue
new file mode 100644
index 00000000..ecdd945a
--- /dev/null
+++ b/app/components/app/procedure-room/multi-opt-picker.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+ Daftar Pilihan Ruang Tindakan
+
+
+
+
+
+
+
+
Tidak ada data ruang tindakan.
+
+
+
+
diff --git a/app/components/app/procedure-room/picker.vue b/app/components/app/procedure-room/picker.vue
new file mode 100644
index 00000000..3660e0cb
--- /dev/null
+++ b/app/components/app/procedure-room/picker.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+ Daftar Pilihan Ruang Tindakan
+
+
+
+
+
+
+
+
Tidak ada data ruang tindakan.
+
+
+
+
diff --git a/app/components/app/procedure-room/single-opt-picker.vue b/app/components/app/procedure-room/single-opt-picker.vue
new file mode 100644
index 00000000..ecdd945a
--- /dev/null
+++ b/app/components/app/procedure-room/single-opt-picker.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+ Daftar Pilihan Ruang Tindakan
+
+
+
+
+
+
+
+
Tidak ada data ruang tindakan.
+
+
+
+
diff --git a/app/components/app/procedure-room/switcher.vue b/app/components/app/procedure-room/switcher.vue
new file mode 100644
index 00000000..fdd80e7d
--- /dev/null
+++ b/app/components/app/procedure-room/switcher.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+ Jenis Ruang Tindakan
+
+
+
+
+
+
diff --git a/app/components/app/sep/action-history.vue b/app/components/app/sep/action-history.vue
new file mode 100644
index 00000000..8ca652b1
--- /dev/null
+++ b/app/components/app/sep/action-history.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/app/components/app/sep/entry-form.vue b/app/components/app/sep/entry-form.vue
index 0aa33178..594d2f02 100644
--- a/app/components/app/sep/entry-form.vue
+++ b/app/components/app/sep/entry-form.vue
@@ -24,11 +24,11 @@ import { useForm } from 'vee-validate'
import { refDebounced } from '@vueuse/core'
const props = defineProps<{
+ mode?: string
isLoading?: boolean
isReadonly?: boolean
isService?: boolean
- isShowPatient?: boolean;
- mode?: string
+ isShowPatient?: boolean
doctors: any[]
diagnoses: any[]
facilitiesFrom: any[]
@@ -102,14 +102,17 @@ const titleLetterNumber = computed(() => (admissionType.value === '3' ? 'Surat K
const titleLetterDate = computed(() =>
admissionType.value === '3' ? 'Tanggal Surat Kontrol' : 'Tanggal Surat Rujukan',
)
+const mode = props.mode !== undefined ? props.mode : 'add'
+const attendingDoctorName = ref('')
+const diagnosisName = ref('')
const isAccidentally = computed(() => accident.value === '1' || accident.value === '2')
const isProvinceSelected = computed(() => accidentProvince.value !== '')
const isCitySelected = computed(() => accidentCity.value !== '')
-const mode = props.mode !== undefined ? props.mode : 'add'
const isLoading = props.isLoading !== undefined ? props.isLoading : false
const isReadonly = props.isReadonly !== undefined ? props.isReadonly : false
const isService = ref(props.isService || false)
const isShowPatient = ref(props.isShowPatient || false)
+const isShowSpecialist = ref(false)
const isDateReload = ref(false)
// Debounced search for bpjsNumber and nationalId
@@ -129,32 +132,138 @@ async function onFetchChildren(parentId: string): Promise
{
console.log('onFetchChildren', parentId)
}
+const onBack = () => {
+ emit('event', 'back')
+}
+
+const onSaveNumber = () => {
+ emit('event', 'save-sep-number', { sepNumber: props?.objects?.sepNumber || '' })
+}
+
// Submit handler
const onSubmit = handleSubmit((values) => {
- console.log('✅ Validated form values:', JSON.stringify(values, null, 2))
emit('event', 'save-sep', values)
})
+const onInitialized = (objects: any) => {
+ sepDate.value = objects?.registerDate || new Date().toISOString().substring(0, 10)
+ cardNumber.value = objects?.cardNumber || '-'
+ nationalId.value = objects?.nationalIdentity || '-'
+ medicalRecordNumber.value = objects?.medicalRecordNumber || '-'
+ patientName.value = objects?.patientName || '-'
+ phoneNumber.value = objects?.phoneNumber || '-'
+ if (objects?.sepType === 'internal') {
+ admissionType.value = '4'
+ }
+ if (objects?.sepType === 'external') {
+ admissionType.value = '1'
+ }
+ if (objects?.diagnosisName) {
+ diagnosisName.value = objects?.diagnosisName
+ }
+ // Patient data
+ if (objects?.serviceType) {
+ serviceType.value = objects?.serviceType
+ }
+ if (objects?.fromClinic) {
+ fromClinic.value = objects?.fromClinic
+ }
+ if (objects?.destinationClinic) {
+ destinationClinic.value = objects?.destinationClinic
+ }
+ // Doctor & Support data
+ if (objects?.attendingDoctor) {
+ attendingDoctor.value = objects?.attendingDoctor
+ }
+ if (objects?.attendingDoctorName) {
+ attendingDoctorName.value = objects?.attendingDoctorName
+ }
+ if (objects?.cob) {
+ cob.value = objects?.cob
+ }
+ if (objects?.cataract) {
+ cataract.value = objects?.cataract
+ }
+ if (objects?.clinicExcecutive) {
+ clinicExcecutive.value = objects?.clinicExcecutive
+ }
+ if (objects?.procedureType) {
+ procedureType.value = objects?.procedureType
+ }
+ if (objects?.supportCode) {
+ supportCode.value = objects?.supportCode
+ }
+ // Class & Payment data
+ if (objects?.classLevel) {
+ classLevel.value = objects?.classLevel
+ }
+ if (objects?.classLevelUpgrade) {
+ classLevelUpgrade.value = objects?.classLevelUpgrade
+ }
+ if (objects?.classPaySource) {
+ classPaySource.value = objects?.classPaySource
+ }
+ if (objects?.responsiblePerson) {
+ responsiblePerson.value = objects?.responsiblePerson
+ }
+ // Accident data
+ if (objects?.trafficAccident) {
+ accident.value = objects?.trafficAccident
+ }
+ if (objects?.lpNumber) {
+ lpNumber.value = objects?.lpNumber
+ }
+ if (objects?.accidentDate) {
+ accidentDate.value = objects?.accidentDate
+ }
+ if (objects?.accidentNote) {
+ accidentNote.value = objects?.accidentNote
+ }
+ if (objects?.accidentProvince) {
+ accidentProvince.value = objects?.accidentProvince
+ }
+ if (objects?.accidentCity) {
+ accidentCity.value = objects?.accidentCity
+ }
+ if (objects?.accidentDistrict) {
+ accidentDistrict.value = objects?.accidentDistrict
+ }
+ if (objects?.suplesi) {
+ suplesi.value = objects?.suplesi
+ }
+ if (objects?.suplesiNumber) {
+ suplesiNumber.value = objects?.suplesiNumber
+ }
+ // Visit purpose & Assessment
+ if (objects?.purposeOfVisit) {
+ purposeOfVisit.value = objects?.purposeOfVisit
+ }
+ if (objects?.serviceAssessment) {
+ serviceAssessment.value = objects?.serviceAssessment
+ }
+ // Note & Specialist
+ if (objects?.note) {
+ note.value = objects?.note
+ }
+ if (objects?.subSpecialistId) {
+ subSpecialistId.value = objects?.subSpecialistId
+ }
+ // Referral letter
+ if (objects?.referralLetterNumber) {
+ referralLetterNumber.value = objects?.referralLetterNumber
+ }
+}
+
watch(props, (value) => {
const objects = value.objects || ({} as any)
if (Object.keys(objects).length > 0) {
- sepDate.value = objects?.registerDate || new Date().toISOString().substring(0, 10)
- cardNumber.value = objects?.cardNumber || '-'
- nationalId.value = objects?.nationalIdentity || '-'
- medicalRecordNumber.value = objects?.medicalRecordNumber || '-'
- patientName.value = objects?.patientName || '-'
- phoneNumber.value = objects?.phoneNumber || '-'
- if (objects?.sepType === 'internal') {
- admissionType.value = '4'
- }
- if (objects?.sepType === 'external') {
- admissionType.value = '1'
- }
- if (objects?.diagnoseLabel) {
- initialDiagnosis.value = objects?.diagnoseLabel
- }
+ onInitialized(objects)
isDateReload.value = true
setTimeout(() => {
+ if (objects?.sepDate) {
+ sepDate.value = objects?.sepDate
+ referralLetterDate.value = objects?.sepDate
+ }
if (objects?.letterDate) {
referralLetterDate.value = objects?.letterDate
}
@@ -206,10 +315,11 @@ onMounted(() => {
@@ -284,7 +394,7 @@ onMounted(() => {
id="cardNumber"
v-model="cardNumber"
v-bind="cardNumberAttrs"
- :disabled="false"
+ :disabled="isLoading || isReadonly"
/>
@@ -299,7 +409,7 @@ onMounted(() => {
id="nationalId"
v-model="nationalId"
v-bind="nationalIdAttrs"
- :disabled="false"
+ :disabled="isLoading || isReadonly"
/>
@@ -378,6 +488,7 @@ onMounted(() => {
"
/>