feat(patient): add occupation code support and update job selection
- Replace hardcoded job options with dynamic list from constants - Update patient preview to display occupation by code if available - Expand occupation codes in constants with comprehensive list
This commit is contained in:
@@ -4,7 +4,8 @@ import Combobox from '~/components/pub/my-ui/form/combobox.vue'
|
||||
import FieldGroup from '~/components/pub/my-ui/form/field-group.vue'
|
||||
import Field from '~/components/pub/my-ui/form/field.vue'
|
||||
import Label from '~/components/pub/my-ui/form/label.vue'
|
||||
import { cn } from '~/lib/utils'
|
||||
import { cn, mapToComboboxOptList } from '~/lib/utils'
|
||||
import { occupationCodes } from '~/lib/constants'
|
||||
|
||||
const props = defineProps<{
|
||||
fieldName?: string
|
||||
@@ -28,94 +29,8 @@ const {
|
||||
labelClass,
|
||||
} = props
|
||||
|
||||
const jobOptions = [
|
||||
{ label: 'Tidak diketahui', value: 'unknown', priority: 100 },
|
||||
{ label: 'Belum/Tidak Bekerja', value: 'tidak_bekerja', priority: 99 },
|
||||
{ label: 'Mengurus Rumah Tangga', value: 'mengurus_rumah_tangga' },
|
||||
{ label: 'Pelajar/Mahasiswa', value: 'pelajar' },
|
||||
{ label: 'Pensiunan', value: 'pensiunan' },
|
||||
{ label: 'Pegawai Negeri Sipil', value: 'pns' },
|
||||
{ label: 'Tentara Nasional Indonesia', value: 'tni' },
|
||||
{ label: 'Kepolisian RI', value: 'polri' },
|
||||
{ label: 'Perdagangan', value: 'perdagangan' },
|
||||
{ label: 'Petani/Pekebun', value: 'petani' },
|
||||
{ label: 'Peternak', value: 'peternak' },
|
||||
{ label: 'Nelayan/Perikanan', value: 'nelayan' },
|
||||
{ label: 'Industri', value: 'industri' },
|
||||
{ label: 'Konstruksi', value: 'konstruksi' },
|
||||
{ label: 'Transportasi', value: 'transportasi' },
|
||||
{ label: 'Karyawan Swasta', value: 'karyawan_swasta' },
|
||||
{ label: 'Karyawan BUMN', value: 'karyawan_bumn' },
|
||||
{ label: 'Karyawan BUMD', value: 'karyawan_bumd' },
|
||||
{ label: 'Karyawan Honorer', value: 'karyawan_honorer' },
|
||||
{ label: 'Buruh Harian Lepas', value: 'buruh_harian' },
|
||||
{ label: 'Buruh Tani/Perkebunan', value: 'buruh_tani' },
|
||||
{ label: 'Buruh Nelayan/Perikanan', value: 'buruh_nelayan' },
|
||||
{ label: 'Buruh Peternakan', value: 'buruh_peternakan' },
|
||||
{ label: 'Pembantu Rumah Tangga', value: 'pembantu_rumah_tangga' },
|
||||
{ label: 'Tukang Cukur', value: 'tukang_cukur' },
|
||||
{ label: 'Tukang Listrik', value: 'tukang_listrik' },
|
||||
{ label: 'Tukang Batu', value: 'tukang_batu' },
|
||||
{ label: 'Tukang Kayu', value: 'tukang_kayu' },
|
||||
{ label: 'Tukang Sol Sepatu', value: 'tukang_sol_sepatu' },
|
||||
{ label: 'Tukang Jahit', value: 'tukang_jahit' },
|
||||
{ label: 'Tukang Gigi', value: 'tukang_gigi' },
|
||||
{ label: 'Penata Rias', value: 'penata_rias' },
|
||||
{ label: 'Penata Busana', value: 'penata_busana' },
|
||||
{ label: 'Penata Rambut', value: 'penata_rambut' },
|
||||
{ label: 'Mekanik', value: 'mekanik' },
|
||||
{ label: 'Seniman', value: 'seniman' },
|
||||
{ label: 'Tabib', value: 'tabib' },
|
||||
{ label: 'Paraji', value: 'paraji' },
|
||||
{ label: 'Perancang Busana', value: 'perancang_busana' },
|
||||
{ label: 'Penterjemah', value: 'penterjemah' },
|
||||
{ label: 'Imam Mesjid', value: 'imam_mesjid' },
|
||||
{ label: 'Pendeta', value: 'pendeta' },
|
||||
{ label: 'Pastor', value: 'pastor' },
|
||||
{ label: 'Wartawan', value: 'wartawan' },
|
||||
{ label: 'Ustadz/Mubaligh', value: 'ustadz' },
|
||||
{ label: 'Juru Masak', value: 'juru_masak' },
|
||||
{ label: 'Promotor Acara', value: 'promotor' },
|
||||
{ label: 'Anggota DPR-RI', value: 'dpr_ri' },
|
||||
{ label: 'Anggota DPD', value: 'dpd' },
|
||||
{ label: 'Anggota BPK', value: 'bpk' },
|
||||
{ label: 'Presiden', value: 'presiden' },
|
||||
{ label: 'Wakil Presiden', value: 'wakil_presiden' },
|
||||
{ label: 'Anggota Mahkamah Konstitusi', value: 'mk' },
|
||||
{ label: 'Anggota Kabinet/Kementrian', value: 'kabinet' },
|
||||
{ label: 'Duta Besar', value: 'dubes' },
|
||||
{ label: 'Gubernur', value: 'gubernur' },
|
||||
{ label: 'Wakil Gubernur', value: 'wakil_gubernur' },
|
||||
{ label: 'Bupati', value: 'bupati' },
|
||||
{ label: 'Wakil Bupati', value: 'wakil_bupati' },
|
||||
{ label: 'Walikota', value: 'walikota' },
|
||||
{ label: 'Wakil Walikota', value: 'wakil_walikota' },
|
||||
{ label: 'Anggota DPRD Provinsi', value: 'dprd_provinsi' },
|
||||
{ label: 'Anggota DPRD Kabupaten/Kota', value: 'dprd_kabkota' },
|
||||
{ label: 'Dosen', value: 'dosen' },
|
||||
{ label: 'Guru', value: 'guru' },
|
||||
{ label: 'Pilot', value: 'pilot' },
|
||||
{ label: 'Pengacara', value: 'pengacara' },
|
||||
{ label: 'Arsitek', value: 'arsitek' },
|
||||
{ label: 'Akuntan', value: 'akuntan' },
|
||||
{ label: 'Konsultan', value: 'konsultan' },
|
||||
{ label: 'Dokter', value: 'dokter' },
|
||||
{ label: 'Bidan', value: 'bidan' },
|
||||
{ label: 'Apoteker', value: 'apoteker' },
|
||||
{ label: 'Psikiater/Psikolog', value: 'psikolog' },
|
||||
{ label: 'Penyiar Televisi', value: 'penyiar_tv' },
|
||||
{ label: 'Penyiar Radio', value: 'penyiar_radio' },
|
||||
{ label: 'Pelaut', value: 'pelaut' },
|
||||
{ label: 'Sopir', value: 'sopir' },
|
||||
{ label: 'Pialang', value: 'pialang' },
|
||||
{ label: 'Paranormal', value: 'paranormal' },
|
||||
{ label: 'Pedagang', value: 'pedagang' },
|
||||
{ label: 'Perangkat Desa', value: 'perangkat_desa' },
|
||||
{ label: 'Kepala Desa', value: 'kepala_desa' },
|
||||
{ label: 'Biarawati', value: 'biarawati' },
|
||||
{ label: 'Wiraswasta', value: 'wiraswasta' },
|
||||
{ label: 'Lainnya', value: 'lainnya', priority: -100 },
|
||||
]
|
||||
// Generate job options from constants, sama seperti pola genderCodes
|
||||
const jobOptions = mapToComboboxOptList(occupationCodes)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
@@ -7,7 +7,7 @@ import type { PersonRelative } from '~/models/person-relative'
|
||||
import DetailRow from '~/components/pub/my-ui/form/view/detail-row.vue'
|
||||
import DetailSection from '~/components/pub/my-ui/form/view/detail-section.vue'
|
||||
|
||||
import { educationCodes, genderCodes, personContactTypes, relationshipCodes, religionCodes } from '~/lib/constants'
|
||||
import { educationCodes, genderCodes, occupationCodes, personContactTypes, relationshipCodes, religionCodes } from '~/lib/constants'
|
||||
import { mapToComboboxOptList } from '~/lib/utils'
|
||||
|
||||
// #region Props & Emits
|
||||
@@ -28,6 +28,7 @@ const emit = defineEmits<{
|
||||
const genderOptions = mapToComboboxOptList(genderCodes)
|
||||
const religionOptions = mapToComboboxOptList(religionCodes)
|
||||
const educationOptions = mapToComboboxOptList(educationCodes)
|
||||
const occupationOptions = mapToComboboxOptList(occupationCodes)
|
||||
const relationshipOptions = mapToComboboxOptList(relationshipCodes)
|
||||
const personContactTypeOptions = mapToComboboxOptList(personContactTypes)
|
||||
|
||||
@@ -68,7 +69,7 @@ function onClick(type: string) {
|
||||
<template>
|
||||
<DetailSection title="Data Pasien">
|
||||
<DetailRow label="Nomor ID">{{ person.id || '-' }}</DetailRow>
|
||||
<DetailRow label="Sapaan">{{ person.alias || '-' }}</DetailRow>
|
||||
<DetailRow label="Sapaan">{{ '-' }}</DetailRow>
|
||||
<DetailRow label="Nama Lengkap">{{ person.name || '-' }}</DetailRow>
|
||||
<DetailRow label="Tempat, tanggal lahir">
|
||||
{{ person.birthRegency_code || '-' }},
|
||||
@@ -94,7 +95,9 @@ function onClick(type: string) {
|
||||
<DetailRow label="Pendidikan">
|
||||
{{ educationOptions.find((item) => item.code === person.education_code)?.label || '-' }}
|
||||
</DetailRow>
|
||||
<DetailRow label="Pekerjaan">{{ person.occupation_name || '-' }}</DetailRow>
|
||||
<DetailRow label="Pekerjaan">
|
||||
{{ occupationOptions.find((item) => item.code === person.occupation_code)?.label || person.occupation_name || '-' }}
|
||||
</DetailRow>
|
||||
</DetailSection>
|
||||
|
||||
<DetailSection title="Alamat">
|
||||
@@ -136,7 +139,9 @@ function onClick(type: string) {
|
||||
<DetailRow label="Pendidikan">
|
||||
{{ educationOptions.find((item) => item.code === relative.education_code)?.label || '-' }}
|
||||
</DetailRow>
|
||||
<DetailRow label="Pekerjaan">{{ relative.occupation_name || '-' }}</DetailRow>
|
||||
<DetailRow label="Pekerjaan">
|
||||
{{ occupationOptions.find((item) => item.code === relative.occupation_code)?.label || relative.occupation_name || '-' }}
|
||||
</DetailRow>
|
||||
<DetailRow label="Alamat">{{ relative.address || '-' }}</DetailRow>
|
||||
<DetailRow label="Nomor HP">{{ relative.phoneNumber || '-' }}</DetailRow>
|
||||
</template>
|
||||
|
||||
+82
-4
@@ -102,13 +102,91 @@ export const educationCodes: Record<string, string> = {
|
||||
}
|
||||
|
||||
export const occupationCodes: Record<string, string> = {
|
||||
'tidak-bekerja': 'Tidak Bekerja',
|
||||
unknown: 'Tidak diketahui',
|
||||
tidak_bekerja: 'Belum/Tidak Bekerja',
|
||||
mengurus_rumah_tangga: 'Mengurus Rumah Tangga',
|
||||
pelajar: 'Pelajar/Mahasiswa',
|
||||
pensiunan: 'Pensiunan',
|
||||
pns: 'Pegawai Negeri Sipil',
|
||||
polisi: 'Polisi',
|
||||
tni: 'TNI',
|
||||
tni: 'Tentara Nasional Indonesia',
|
||||
polri: 'Kepolisian RI',
|
||||
perdagangan: 'Perdagangan',
|
||||
petani: 'Petani/Pekebun',
|
||||
peternak: 'Peternak',
|
||||
nelayan: 'Nelayan/Perikanan',
|
||||
industri: 'Industri',
|
||||
konstruksi: 'Konstruksi',
|
||||
transportasi: 'Transportasi',
|
||||
karyawan_swasta: 'Karyawan Swasta',
|
||||
karyawan_bumn: 'Karyawan BUMN',
|
||||
karyawan_bumd: 'Karyawan BUMD',
|
||||
karyawan_honorer: 'Karyawan Honorer',
|
||||
buruh_harian: 'Buruh Harian Lepas',
|
||||
buruh_tani: 'Buruh Tani/Perkebunan',
|
||||
buruh_nelayan: 'Buruh Nelayan/Perikanan',
|
||||
buruh_peternakan: 'Buruh Peternakan',
|
||||
pembantu_rumah_tangga: 'Pembantu Rumah Tangga',
|
||||
tukang_cukur: 'Tukang Cukur',
|
||||
tukang_listrik: 'Tukang Listrik',
|
||||
tukang_batu: 'Tukang Batu',
|
||||
tukang_kayu: 'Tukang Kayu',
|
||||
tukang_sol_sepatu: 'Tukang Sol Sepatu',
|
||||
tukang_jahit: 'Tukang Jahit',
|
||||
tukang_gigi: 'Tukang Gigi',
|
||||
penata_rias: 'Penata Rias',
|
||||
penata_busana: 'Penata Busana',
|
||||
penata_rambut: 'Penata Rambut',
|
||||
mekanik: 'Mekanik',
|
||||
seniman: 'Seniman',
|
||||
tabib: 'Tabib',
|
||||
paraji: 'Paraji',
|
||||
perancang_busana: 'Perancang Busana',
|
||||
penterjemah: 'Penterjemah',
|
||||
imam_mesjid: 'Imam Mesjid',
|
||||
pendeta: 'Pendeta',
|
||||
pastor: 'Pastor',
|
||||
wartawan: 'Wartawan',
|
||||
ustadz: 'Ustadz/Mubaligh',
|
||||
juru_masak: 'Juru Masak',
|
||||
promotor: 'Promotor Acara',
|
||||
dpr_ri: 'Anggota DPR-RI',
|
||||
dpd: 'Anggota DPD',
|
||||
bpk: 'Anggota BPK',
|
||||
presiden: 'Presiden',
|
||||
wakil_presiden: 'Wakil Presiden',
|
||||
mk: 'Anggota Mahkamah Konstitusi',
|
||||
kabinet: 'Anggota Kabinet/Kementrian',
|
||||
dubes: 'Duta Besar',
|
||||
gubernur: 'Gubernur',
|
||||
wakil_gubernur: 'Wakil Gubernur',
|
||||
bupati: 'Bupati',
|
||||
wakil_bupati: 'Wakil Bupati',
|
||||
walikota: 'Walikota',
|
||||
wakil_walikota: 'Wakil Walikota',
|
||||
dprd_provinsi: 'Anggota DPRD Provinsi',
|
||||
dprd_kabkota: 'Anggota DPRD Kabupaten/Kota',
|
||||
dosen: 'Dosen',
|
||||
guru: 'Guru',
|
||||
pilot: 'Pilot',
|
||||
pengacara: 'Pengacara',
|
||||
arsitek: 'Arsitek',
|
||||
akuntan: 'Akuntan',
|
||||
konsultan: 'Konsultan',
|
||||
dokter: 'Dokter',
|
||||
bidan: 'Bidan',
|
||||
apoteker: 'Apoteker',
|
||||
psikolog: 'Psikiater/Psikolog',
|
||||
penyiar_tv: 'Penyiar Televisi',
|
||||
penyiar_radio: 'Penyiar Radio',
|
||||
pelaut: 'Pelaut',
|
||||
sopir: 'Sopir',
|
||||
pialang: 'Pialang',
|
||||
paranormal: 'Paranormal',
|
||||
pedagang: 'Pedagang',
|
||||
perangkat_desa: 'Perangkat Desa',
|
||||
kepala_desa: 'Kepala Desa',
|
||||
biarawati: 'Biarawati',
|
||||
wiraswasta: 'Wiraswasta',
|
||||
'kary-swasta': 'Karyawan Swasta',
|
||||
lainnya: 'Lainnya',
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ export function toTitleCase(str: string): string {
|
||||
return str.toLowerCase().replace(/\b\w/g, (char) => char.toUpperCase())
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Menghitung umur berdasarkan tanggal lahir
|
||||
* @param birthDate - Tanggal lahir dalam format Date atau string
|
||||
|
||||
Reference in New Issue
Block a user