Merge pull request #178 from dikstub-rssa/feat/adjustment-org-to-the-be-153

Feat/adjustment org to the be 153
This commit is contained in:
Munawwirul Jamal
2025-11-21 14:06:13 +07:00
committed by GitHub
58 changed files with 297 additions and 409 deletions

No files matched your search

@@ -40,7 +40,7 @@ const { defineField, errors, meta } = useForm({
const [code, codeAttrs] = defineField('code') const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name') const [name, nameAttrs] = defineField('name')
const [division, divisionAttrs] = defineField('division_id') const [division, divisionAttrs] = defineField('division_code')
const [employee, employeeAttrs] = defineField('employee_id') const [employee, employeeAttrs] = defineField('employee_id')
const [headStatus, headStatusAttrs] = defineField('headStatus') const [headStatus, headStatusAttrs] = defineField('headStatus')
@@ -62,8 +62,8 @@ const headStatusStr = computed<string>({
if (props.values) { if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name if (props.values.name !== undefined) name.value = props.values.name
if (props.values.division_id !== undefined) if (props.values.division_code !== undefined)
division.value = props.values.division_id ? Number(props.values.division_id) : null division.value = props.values.division_code ? String(props.values.division_code) : null
if (props.values.employee_id !== undefined) if (props.values.employee_id !== undefined)
employee.value = props.values.employee_id ? Number(props.values.employee_id) : null employee.value = props.values.employee_id ? Number(props.values.employee_id) : null
if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus
@@ -72,7 +72,7 @@ if (props.values) {
const resetForm = () => { const resetForm = () => {
code.value = '' code.value = ''
name.value = '' name.value = ''
division.value = null division.value = ''
employee.value = null employee.value = null
headStatus.value = false headStatus.value = false
} }
@@ -83,7 +83,7 @@ function onSubmitForm() {
...genBase(), ...genBase(),
name: name.value || '', name: name.value || '',
code: code.value || '', code: code.value || '',
division_id: division.value || null, division_code: division.value || '',
employee_id: employee.value || null, employee_id: employee.value || null,
headStatus: headStatus.value !== undefined ? headStatus.value : undefined, headStatus: headStatus.value !== undefined ? headStatus.value : undefined,
} }
@@ -130,7 +130,7 @@ function onCancelForm() {
</Cell> </Cell>
<Cell> <Cell>
<Label height="compact">Posisi Divisi</Label> <Label height="compact">Posisi Divisi</Label>
<Field :errMessage="errors.division_id"> <Field :errMessage="errors.division_code">
<Combobox <Combobox
id="division" id="division"
v-model="division" v-model="division"
@@ -18,7 +18,7 @@ import { genDivisionPosition } from '~/models/division-position'
interface Props { interface Props {
schema: z.ZodSchema<any> schema: z.ZodSchema<any>
divisionId: number divisionId: string
employees: any[] employees: any[]
values: any values: any
isLoading?: boolean isLoading?: boolean
+6 -6
View File
@@ -36,25 +36,25 @@ const { defineField, errors, meta } = useForm({
initialValues: { initialValues: {
code: '', code: '',
name: '', name: '',
parent_id: null, parent_code: null,
} as Partial<DivisionFormData>, } as Partial<DivisionFormData>,
}) })
const [code, codeAttrs] = defineField('code') const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name') const [name, nameAttrs] = defineField('name')
const [parent, parentAttrs] = defineField('parent_id') const [parent, parentAttrs] = defineField('parent_code')
// Fill fields from props.values if provided // Fill fields from props.values if provided
if (props.values) { if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name if (props.values.name !== undefined) name.value = props.values.name
if (props.values.parent_id !== undefined) parent.value = String(props.values.parent_id) if (props.values.parent_code !== undefined) parent.value = String(props.values.parent_code)
} }
const resetForm = () => { const resetForm = () => {
code.value = '' code.value = ''
name.value = '' name.value = ''
parent.value = null parent.value = ''
} }
// Form submission handler // Form submission handler
@@ -63,7 +63,7 @@ function onSubmitForm() {
...genBase(), ...genBase(),
name: name.value || '', name: name.value || '',
code: code.value || '', code: code.value || '',
parent_id: parent.value || null, parent_code: parent.value || '',
} }
emit('submit', formData, resetForm) emit('submit', formData, resetForm)
} }
@@ -108,7 +108,7 @@ function onCancelForm() {
</Cell> </Cell>
<Cell> <Cell>
<Label height="compact">Divisi Induk</Label> <Label height="compact">Divisi Induk</Label>
<Field :errMessage="errors.parent_id"> <Field :errMessage="errors.parent_code">
<TreeSelect <TreeSelect
id="parent" id="parent"
v-model="parent" v-model="parent"
@@ -40,7 +40,7 @@ const { defineField, errors, meta } = useForm({
const [code, codeAttrs] = defineField('code') const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name') const [name, nameAttrs] = defineField('name')
const [installation, installationAttrs] = defineField('installation_id') const [installation, installationAttrs] = defineField('installation_code')
const [employee, employeeAttrs] = defineField('employee_id') const [employee, employeeAttrs] = defineField('employee_id')
const [headStatus, headStatusAttrs] = defineField('headStatus') const [headStatus, headStatusAttrs] = defineField('headStatus')
@@ -62,8 +62,8 @@ const headStatusStr = computed<string>({
if (props.values) { if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name if (props.values.name !== undefined) name.value = props.values.name
if (props.values.installation_id !== undefined) if (props.values.installation_code !== undefined)
installation.value = props.values.installation_id ? Number(props.values.installation_id) : null installation.value = props.values.installation_code ? String(props.values.installation_code) : null
if (props.values.employee_id !== undefined) if (props.values.employee_id !== undefined)
employee.value = props.values.employee_id ? Number(props.values.employee_id) : null employee.value = props.values.employee_id ? Number(props.values.employee_id) : null
if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus
@@ -83,7 +83,7 @@ function onSubmitForm() {
...genBase(), ...genBase(),
name: name.value || '', name: name.value || '',
code: code.value || '', code: code.value || '',
installation_id: installation.value || null, installation_code: String(installation.value) || '',
employee_id: employee.value || null, employee_id: employee.value || null,
headStatus: headStatus.value !== undefined ? headStatus.value : undefined, headStatus: headStatus.value !== undefined ? headStatus.value : undefined,
} }
@@ -130,7 +130,7 @@ function onCancelForm() {
</Cell> </Cell>
<Cell> <Cell>
<Label height="compact">Instalasi</Label> <Label height="compact">Instalasi</Label>
<Field :errMessage="errors.installation_id"> <Field :errMessage="errors.installation_code">
<Combobox <Combobox
id="installation" id="installation"
v-model="installation" v-model="installation"
@@ -18,7 +18,7 @@ import { genSpecialistPosition } from '~/models/specialist-position'
interface Props { interface Props {
schema: z.ZodSchema<any> schema: z.ZodSchema<any>
specialistId: number specialistId: string
employees: any[] employees: any[]
values: any values: any
isLoading?: boolean isLoading?: boolean
@@ -40,7 +40,7 @@ const { defineField, errors, meta } = useForm({
const [code, codeAttrs] = defineField('code') const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name') const [name, nameAttrs] = defineField('name')
const [specialist, specialistAttrs] = defineField('specialist_id') const [specialist, specialistAttrs] = defineField('specialist_code')
const [employee, employeeAttrs] = defineField('employee_id') const [employee, employeeAttrs] = defineField('employee_id')
const [headStatus, headStatusAttrs] = defineField('headStatus') const [headStatus, headStatusAttrs] = defineField('headStatus')
@@ -62,8 +62,8 @@ const headStatusStr = computed<string>({
if (props.values) { if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name if (props.values.name !== undefined) name.value = props.values.name
if (props.values.specialist_id !== undefined) if (props.values.specialist_code !== undefined)
specialist.value = props.values.specialist_id ? Number(props.values.specialist_id) : null specialist.value = props.values.specialist_code ? String(props.values.specialist_code) : null
if (props.values.employee_id !== undefined) if (props.values.employee_id !== undefined)
employee.value = props.values.employee_id ? Number(props.values.employee_id) : null employee.value = props.values.employee_id ? Number(props.values.employee_id) : null
if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus
@@ -72,7 +72,7 @@ if (props.values) {
const resetForm = () => { const resetForm = () => {
code.value = '' code.value = ''
name.value = '' name.value = ''
specialist.value = null specialist.value = ''
employee.value = null employee.value = null
headStatus.value = false headStatus.value = false
} }
@@ -83,7 +83,7 @@ function onSubmitForm() {
...genBase(), ...genBase(),
name: name.value || '', name: name.value || '',
code: code.value || '', code: code.value || '',
specialist_id: specialist.value || null, specialist_code: specialist.value || '',
employee_id: employee.value || null, employee_id: employee.value || null,
headStatus: headStatus.value !== undefined ? headStatus.value : undefined, headStatus: headStatus.value !== undefined ? headStatus.value : undefined,
} }
@@ -130,7 +130,7 @@ function onCancelForm() {
</Cell> </Cell>
<Cell> <Cell>
<Label height="compact">Spesialis</Label> <Label height="compact">Spesialis</Label>
<Field :errMessage="errors.specialist_id"> <Field :errMessage="errors.specialist_code">
<Combobox <Combobox
id="specialist" id="specialist"
v-model="specialist" v-model="specialist"
+4 -4
View File
@@ -36,19 +36,19 @@ const { defineField, errors, meta } = useForm({
initialValues: { initialValues: {
code: '', code: '',
name: '', name: '',
unit_id: 0, unit_code: '',
} as Partial<SpecialistFormData>, } as Partial<SpecialistFormData>,
}) })
const [code, codeAttrs] = defineField('code') const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name') const [name, nameAttrs] = defineField('name')
const [unit, unitAttrs] = defineField('unit_id') const [unit, unitAttrs] = defineField('unit_code')
// Fill fields from props.values if provided // Fill fields from props.values if provided
if (props.values) { if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name if (props.values.name !== undefined) name.value = props.values.name
if (props.values.unit_id !== undefined) unit.value = props.values.unit_id ? String(props.values.unit_id) : null if (props.values.unit_code !== undefined) unit.value = props.values.unit_code ? String(props.values.unit_code) : null
} }
const resetForm = () => { const resetForm = () => {
@@ -63,7 +63,7 @@ function onSubmitForm(values: any) {
...genBase(), ...genBase(),
name: name.value || '', name: name.value || '',
code: code.value || '', code: code.value || '',
unit_id: unit.value ? Number(unit.value) : null, unit_code: unit.value ? String(unit.value) : null,
} }
emit('submit', formData, resetForm) emit('submit', formData, resetForm)
} }
@@ -18,7 +18,7 @@ import { genSubSpecialistPosition } from '~/models/subspecialist-position'
interface Props { interface Props {
schema: z.ZodSchema<any> schema: z.ZodSchema<any>
subspecialistId: number subspecialistId: string
employees: any[] employees: any[]
values: any values: any
isLoading?: boolean isLoading?: boolean
@@ -40,7 +40,7 @@ const { defineField, errors, meta } = useForm({
const [code, codeAttrs] = defineField('code') const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name') const [name, nameAttrs] = defineField('name')
const [subSpecialist, subSpecialistAttrs] = defineField('subspecialist_id') const [subSpecialist, subSpecialistAttrs] = defineField('subspecialist_code')
const [employee, employeeAttrs] = defineField('employee_id') const [employee, employeeAttrs] = defineField('employee_id')
const [headStatus, headStatusAttrs] = defineField('headStatus') const [headStatus, headStatusAttrs] = defineField('headStatus')
@@ -62,8 +62,8 @@ const headStatusStr = computed<string>({
if (props.values) { if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name if (props.values.name !== undefined) name.value = props.values.name
if (props.values.subspecialist_id !== undefined) if (props.values.subspecialist_code !== undefined)
subSpecialist.value = props.values.subspecialist_id ? Number(props.values.subspecialist_id) : null subSpecialist.value = props.values.subspecialist_code ? String(props.values.subspecialist_code) : null
if (props.values.employee_id !== undefined) if (props.values.employee_id !== undefined)
employee.value = props.values.employee_id ? Number(props.values.employee_id) : null employee.value = props.values.employee_id ? Number(props.values.employee_id) : null
if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus
@@ -83,7 +83,7 @@ function onSubmitForm() {
...genBase(), ...genBase(),
name: name.value || '', name: name.value || '',
code: code.value || '', code: code.value || '',
subspecialist_id: subSpecialist.value || null, subspecialist_code: subSpecialist.value || null,
employee_id: employee.value || null, employee_id: employee.value || null,
headStatus: headStatus.value !== undefined ? headStatus.value : undefined, headStatus: headStatus.value !== undefined ? headStatus.value : undefined,
} }
@@ -130,7 +130,7 @@ function onCancelForm() {
</Cell> </Cell>
<Cell> <Cell>
<Label height="compact">Sub Spesialis</Label> <Label height="compact">Sub Spesialis</Label>
<Field :errMessage="errors.subspecialist_id"> <Field :errMessage="errors.subspecialist_code">
<Combobox <Combobox
id="specialist" id="specialist"
v-model="subSpecialist" v-model="subSpecialist"
@@ -36,20 +36,20 @@ const { defineField, errors, meta } = useForm({
initialValues: { initialValues: {
code: '', code: '',
name: '', name: '',
specialist_id: 0, specialist_code: '',
} as Partial<SubspecialistFormData>, } as Partial<SubspecialistFormData>,
}) })
const [code, codeAttrs] = defineField('code') const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name') const [name, nameAttrs] = defineField('name')
const [specialist, specialistAttrs] = defineField('specialist_id') const [specialist, specialistAttrs] = defineField('specialist_code')
// Fill fields from props.values if provided // Fill fields from props.values if provided
if (props.values) { if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name if (props.values.name !== undefined) name.value = props.values.name
if (props.values.specialist_id !== undefined) if (props.values.specialist_code !== undefined)
specialist.value = props.values.specialist_id ? String(props.values.specialist_id) : null specialist.value = props.values.specialist_code ? String(props.values.specialist_code) : null
} }
const resetForm = () => { const resetForm = () => {
@@ -64,7 +64,7 @@ function onSubmitForm(values: any) {
...genBase(), ...genBase(),
name: name.value || '', name: name.value || '',
code: code.value || '', code: code.value || '',
specialist_id: specialist.value ? Number(specialist.value) : null, specialist_code: specialist.value ? String(specialist.value) : "",
} }
emit('submit', formData, resetForm) emit('submit', formData, resetForm)
} }
@@ -1,192 +0,0 @@
<script setup lang="ts">
// Components
import Block from '~/components/pub/my-ui/doc-entry/block.vue'
import Cell from '~/components/pub/my-ui/doc-entry/cell.vue'
import Field from '~/components/pub/my-ui/doc-entry/field.vue'
import Label from '~/components/pub/my-ui/doc-entry/label.vue'
import Combobox from '~/components/pub/my-ui/combobox/combobox.vue'
// Types
import type { UnitPositionFormData } from '~/schemas/unit-position.schema'
// Helpers
import type z from 'zod'
import { toTypedSchema } from '@vee-validate/zod'
import { useForm } from 'vee-validate'
import { genBase } from '~/models/_base'
import { genUnitPosition } from '~/models/unit-position'
interface Props {
schema: z.ZodSchema<any>
unitId: number
employees: any[]
values: any
isLoading?: boolean
isReadonly?: boolean
}
const props = defineProps<Props>()
const isLoading = props.isLoading !== undefined ? props.isLoading : false
const isReadonly = props.isReadonly !== undefined ? props.isReadonly : false
const emit = defineEmits<{
submit: [values: UnitPositionFormData, resetForm: () => void]
cancel: [resetForm: () => void]
}>()
const { defineField, errors, meta } = useForm({
validationSchema: toTypedSchema(props.schema),
initialValues: genUnitPosition() as Partial<UnitPositionFormData>,
})
const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name')
const [employee, employeeAttrs] = defineField('employee_id')
const [headStatus, headStatusAttrs] = defineField('headStatus')
// RadioGroup uses string values; expose a string computed that maps to the boolean field
const headStatusStr = computed<string>({
get() {
if (headStatus.value === true) return 'true'
if (headStatus.value === false) return 'false'
return ''
},
set(v: string) {
if (v === 'true') headStatus.value = true
else if (v === 'false') headStatus.value = false
else headStatus.value = undefined
},
})
// Fill fields from props.values if provided
if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name
if (props.values.employee_id !== undefined)
employee.value = props.values.employee_id ? Number(props.values.employee_id) : null
if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus
}
const resetForm = () => {
code.value = ''
name.value = ''
employee.value = null
headStatus.value = false
}
// Form submission handler
function onSubmitForm() {
const formData: UnitPositionFormData = {
...genBase(),
name: name.value || '',
code: code.value || '',
// readonly based on detail unit
unit_id: props.unitId,
employee_id: employee.value || null,
headStatus: headStatus.value !== undefined ? headStatus.value : undefined,
}
emit('submit', formData, resetForm)
}
// Form cancel handler
function onCancelForm() {
emit('cancel', resetForm)
}
</script>
<template>
<form
id="form-unit-position"
@submit.prevent
>
<Block
labelSize="thin"
class="!mb-2.5 !pt-0 xl:!mb-3"
:colCount="1"
>
<Cell>
<Label height="compact">Kode Jabatan</Label>
<Field :errMessage="errors.code">
<Input
id="code"
v-model="code"
v-bind="codeAttrs"
:disabled="isLoading || isReadonly"
/>
</Field>
</Cell>
<Cell>
<Label height="compact">Nama Jabatan</Label>
<Field :errMessage="errors.name">
<Input
id="name"
v-model="name"
v-bind="nameAttrs"
:disabled="isLoading || isReadonly"
/>
</Field>
</Cell>
<Cell>
<Label height="compact">Pengisi Jabatan</Label>
<Field :errMessage="errors.employee_id">
<Combobox
id="employee"
v-model="employee"
v-bind="employeeAttrs"
:items="employees"
:is-disabled="isLoading || isReadonly"
placeholder="Pilih Karyawan"
search-placeholder="Cari Karyawan"
empty-message="Item tidak ditemukan"
/>
</Field>
</Cell>
<Cell>
<Label height="compact">Status Kepala</Label>
<Field :errMessage="errors.headStatus">
<RadioGroup
v-model="headStatusStr"
v-bind="headStatusAttrs"
class="flex gap-4"
>
<div class="flex items-center space-x-2">
<RadioGroupItem
id="head-yes"
value="true"
/>
<Label for="head-yes">Ya</Label>
</div>
<div class="flex items-center space-x-2">
<RadioGroupItem
id="head-no"
value="false"
/>
<Label for="head-no">Tidak</Label>
</div>
</RadioGroup>
</Field>
</Cell>
</Block>
<div class="my-2 flex justify-end gap-2 py-2">
<Button
type="button"
variant="secondary"
class="w-[120px]"
@click="onCancelForm"
>
Kembali
</Button>
<Button
v-if="!isReadonly"
type="button"
class="w-[120px]"
:disabled="isLoading || !meta.valid"
@click="onSubmitForm"
>
Simpan
</Button>
</div>
</form>
</template>
@@ -40,7 +40,7 @@ const { defineField, errors, meta } = useForm({
const [code, codeAttrs] = defineField('code') const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name') const [name, nameAttrs] = defineField('name')
const [unit, unitAttrs] = defineField('unit_id') const [unit, unitAttrs] = defineField('unit_code')
const [employee, employeeAttrs] = defineField('employee_id') const [employee, employeeAttrs] = defineField('employee_id')
const [headStatus, headStatusAttrs] = defineField('headStatus') const [headStatus, headStatusAttrs] = defineField('headStatus')
@@ -62,7 +62,7 @@ const headStatusStr = computed<string>({
if (props.values) { if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name if (props.values.name !== undefined) name.value = props.values.name
if (props.values.unit_id !== undefined) unit.value = props.values.unit_id ? Number(props.values.unit_id) : null if (props.values.unit_code !== undefined) unit.value = props.values.unit_code ? String(props.values.unit_code) : null
if (props.values.employee_id !== undefined) if (props.values.employee_id !== undefined)
employee.value = props.values.employee_id ? Number(props.values.employee_id) : null employee.value = props.values.employee_id ? Number(props.values.employee_id) : null
if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus if (props.values.headStatus !== undefined) headStatus.value = !!props.values.headStatus
@@ -82,7 +82,7 @@ function onSubmitForm() {
...genBase(), ...genBase(),
name: name.value || '', name: name.value || '',
code: code.value || '', code: code.value || '',
unit_id: unit.value || null, unit_code: unit.value || '',
employee_id: employee.value || null, employee_id: employee.value || null,
headStatus: headStatus.value !== undefined ? headStatus.value : undefined, headStatus: headStatus.value !== undefined ? headStatus.value : undefined,
} }
@@ -129,7 +129,7 @@ function onCancelForm() {
</Cell> </Cell>
<Cell> <Cell>
<Label height="compact">Unit</Label> <Label height="compact">Unit</Label>
<Field :errMessage="errors.unit_id"> <Field :errMessage="errors.unit_code">
<Combobox <Combobox
id="unit" id="unit"
v-model="unit" v-model="unit"
+5 -5
View File
@@ -35,20 +35,20 @@ const { defineField, errors, meta } = useForm({
initialValues: { initialValues: {
code: '', code: '',
name: '', name: '',
installation_id: 0, installation_code: '',
} as Partial<UnitFormData>, } as Partial<UnitFormData>,
}) })
const [code, codeAttrs] = defineField('code') const [code, codeAttrs] = defineField('code')
const [name, nameAttrs] = defineField('name') const [name, nameAttrs] = defineField('name')
const [installation, installationAttrs] = defineField('installation_id') const [installation, installationAttrs] = defineField('installation_code')
// Fill fields from props.values if provided // Fill fields from props.values if provided
if (props.values) { if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name if (props.values.name !== undefined) name.value = props.values.name
if (props.values.installation_id !== undefined) if (props.values.installation_code !== undefined)
installation.value = props.values.installation_id ? Number(props.values.installation_id) : null installation.value = props.values.installation_code ? String(props.values.installation_code) : null
} }
const resetForm = () => { const resetForm = () => {
@@ -62,7 +62,7 @@ function onSubmitForm() {
const formData: UnitFormData = { const formData: UnitFormData = {
name: name.value || '', name: name.value || '',
code: code.value || '', code: code.value || '',
installation_id: installation.value ? Number(installation.value) : null, installation_code: installation.value ? String(installation.value) : "",
} }
emit('submit', formData, resetForm) emit('submit', formData, resetForm)
} }
@@ -105,12 +105,12 @@ const getCurrentDivisionDetail = async (id: number | string) => {
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showDetail: case ActionEvents.showDetail:
getCurrentDivisionDetail(recId.value) getCurrentDivisionDetail(recItem.value.code)
title.value = 'Detail Divisi Position' title.value = 'Detail Divisi Position'
isReadonly.value = true isReadonly.value = true
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentDivisionDetail(recId.value) getCurrentDivisionDetail(recItem.value.code)
title.value = 'Edit Divisi Position' title.value = 'Edit Divisi Position'
isReadonly.value = false isReadonly.value = false
break break
@@ -122,7 +122,7 @@ watch([recId, recAction], () => {
onMounted(async () => { onMounted(async () => {
try { try {
divisions.value = await getDivisionLabelList({ sort: 'createdAt:asc', 'page-size': 100 }) divisions.value = await getDivisionLabelList({ sort: 'createdAt:asc', 'page-size': 100 }, true)
employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' }) employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' })
await getDivisionList() await getDivisionList()
} catch (err) { } catch (err) {
@@ -172,9 +172,8 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: DivisionPositionFormData | Record<string, any>, resetForm: () => void) => { (values: DivisionPositionFormData | Record<string, any>, resetForm: () => void) => {
console.log(values) if (recItem?.code.length > 0) {
if (recId > 0) { handleActionEdit(recItem.code, values, getDivisionList, resetForm, toast)
handleActionEdit(recId, values, getDivisionList, resetForm, toast)
return return
} }
handleActionSave(values, getDivisionList, resetForm, toast) handleActionSave(values, getDivisionList, resetForm, toast)
@@ -189,7 +188,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getDivisionList, toast)" @confirm="() => handleActionRemove(recItem.code, getDivisionList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
+5 -5
View File
@@ -47,7 +47,7 @@ const title = ref('')
// #region Props & Emits // #region Props & Emits
const props = defineProps<{ const props = defineProps<{
divisionId: number divisionId: string
}>() }>()
const division = ref<Division>({} as Division) const division = ref<Division>({} as Division)
// #endregion // #endregion
@@ -152,7 +152,7 @@ watch([recId, recAction], () => {
console.log(recId, recAction) console.log(recId, recAction)
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showEdit: case ActionEvents.showEdit:
getDetailDivisionPosition(recId.value) getDetailDivisionPosition(recItem.value.code)
title.value = 'Edit Jabatan' title.value = 'Edit Jabatan'
isReadonly.value = false isReadonly.value = false
isFormEntryDialogOpen.value = true isFormEntryDialogOpen.value = true
@@ -201,8 +201,8 @@ watch([recId, recAction], () => {
@submit=" @submit="
(values: DivisionPositionFormData | Record<string, any>, resetForm: () => void) => { (values: DivisionPositionFormData | Record<string, any>, resetForm: () => void) => {
console.log(values) console.log(values)
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getDivisionPositionList, onResetState, toast) handleActionEdit(recItem.code, values, getDivisionPositionList, onResetState, toast)
return return
} }
handleActionSave(values, getDivisionPositionList, onResetState, toast) handleActionSave(values, getDivisionPositionList, onResetState, toast)
@@ -215,7 +215,7 @@ watch([recId, recAction], () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getDivisionPositionList, toast)" @confirm="() => handleActionRemove(recItem.code, getDivisionPositionList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
+13 -16
View File
@@ -105,26 +105,23 @@ const getCurrentDivisionDetail = async (id: number | string) => {
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showDetail: case ActionEvents.showDetail:
if (Number(recId.value) > 0) { if (recItem.value.code.length > 0) {
const id = Number(recId.value) navigateTo({
name: 'org-src-division-id',
params: {
id: recItem.value.code,
},
})
recAction.value = '' recAction.value = ''
recItem.value = null recItem.value = null
recId.value = 0 recId.value = 0
isFormEntryDialogOpen.value = false isFormEntryDialogOpen.value = false
isReadonly.value = false isReadonly.value = false
navigateTo({
name: 'org-src-division-id',
params: {
id,
},
})
} }
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentDivisionDetail(recId.value) getCurrentDivisionDetail(recItem.value.code)
title.value = 'Edit Divisi' title.value = 'Edit Divisi'
isReadonly.value = false isReadonly.value = false
break break
@@ -146,7 +143,7 @@ watch(
if (result.success) { if (result.success) {
const currentData = result.body.data || [] const currentData = result.body.data || []
const normalizedData = currentData.filter((division: Division) => !division.parent_id) const normalizedData = currentData.filter((division: Division) => !division.parent_id)
divisionsTrees.value = getValueTreeItems(normalizedData) divisionsTrees.value = getValueTreeItems(normalizedData, true)
} }
}, },
) )
@@ -190,9 +187,9 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: DivisionFormData | Record<string, any>, resetForm: () => void) => { (values: DivisionFormData | Record<string, any>, resetForm: () => void) => {
console.log(values) // console.log(values)
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getDivisionList, resetForm, toast) handleActionEdit(recItem.code, values, getDivisionList, resetForm, toast)
return return
} }
handleActionSave(values, getDivisionList, resetForm, toast) handleActionSave(values, getDivisionList, resetForm, toast)
@@ -207,7 +204,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getDivisionList, toast)" @confirm="() => handleActionRemove(recItem.code, getDivisionList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
@@ -85,8 +85,6 @@ const tabs: TabItem[] = [
{ value: 'mcu-result', label: 'Hasil Penunjang' }, { value: 'mcu-result', label: 'Hasil Penunjang' },
{ value: 'consultation', label: 'Konsultasi', component: Consultation, props: { encounter: data } }, { value: 'consultation', label: 'Konsultasi', component: Consultation, props: { encounter: data } },
{ value: 'resume', label: 'Resume', component: ResumeList, props: { encounter: data } }, { value: 'resume', label: 'Resume', component: ResumeList, props: { encounter: data } },
{ value: 'control', label: 'Surat Kontrol' },
{ value: 'resume', label: 'Resume' },
{ value: 'control', label: 'Surat Kontrol', component: ControlLetterList, props: { encounter: data } }, { value: 'control', label: 'Surat Kontrol', component: ControlLetterList, props: { encounter: data } },
{ value: 'screening', label: 'Skrinning MPP' }, { value: 'screening', label: 'Skrinning MPP' },
{ value: 'supporting-document', label: 'Upload Dokumen Pendukung', component: DocUploadList, props: { encounter: data }, }, { value: 'supporting-document', label: 'Upload Dokumen Pendukung', component: DocUploadList, props: { encounter: data }, },
@@ -108,7 +108,7 @@ watch([recId, recAction], () => {
isReadonly.value = true isReadonly.value = true
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentInstallationDetail(recId.value) getCurrentInstallationDetail(recItem.value.code)
title.value = 'Edit Instalasi - Posisi' title.value = 'Edit Instalasi - Posisi'
isReadonly.value = false isReadonly.value = false
break break
@@ -120,7 +120,7 @@ watch([recId, recAction], () => {
onMounted(async () => { onMounted(async () => {
try { try {
installations.value = await getInstallationLabelList({ sort: 'createdAt:asc', 'page-size': 100 }) installations.value = await getInstallationLabelList({ sort: 'createdAt:asc', 'page-size': 100 }, true)
employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' }) employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' })
} catch (err) { } catch (err) {
console.log(err) console.log(err)
@@ -169,8 +169,8 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: InstallationPositionFormData | Record<string, any>, resetForm: () => void) => { (values: InstallationPositionFormData | Record<string, any>, resetForm: () => void) => {
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getInstallationPositionList, resetForm, toast) handleActionEdit(recItem.code, values, getInstallationPositionList, resetForm, toast)
return return
} }
handleActionSave(values, getInstallationPositionList, resetForm, toast) handleActionSave(values, getInstallationPositionList, resetForm, toast)
@@ -185,7 +185,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getInstallationPositionList, toast)" @confirm="() => handleActionRemove(recItem.code, getInstallationPositionList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
@@ -47,7 +47,7 @@ const title = ref('')
// #region Props & Emits // #region Props & Emits
const props = defineProps<{ const props = defineProps<{
installationId: number installationId: string
}>() }>()
const installation = ref<Installation>({} as Installation) const installation = ref<Installation>({} as Installation)
// #endregion // #endregion
@@ -153,7 +153,7 @@ watch([recId, recAction], () => {
console.log(recId, recAction) console.log(recId, recAction)
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showEdit: case ActionEvents.showEdit:
getDetailInstallationPosition(recId.value) getDetailInstallationPosition(recItem.value.code)
title.value = 'Edit Jabatan' title.value = 'Edit Jabatan'
isReadonly.value = false isReadonly.value = false
isFormEntryDialogOpen.value = true isFormEntryDialogOpen.value = true
@@ -202,8 +202,8 @@ watch([recId, recAction], () => {
@submit=" @submit="
(values: InstallationPositionFormData | Record<string, any>, resetForm: () => void) => { (values: InstallationPositionFormData | Record<string, any>, resetForm: () => void) => {
console.log(values) console.log(values)
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getInstallationPositionList, onResetState, toast) handleActionEdit(recItem.code, values, getInstallationPositionList, onResetState, toast)
return return
} }
handleActionSave(values, getInstallationPositionList, onResetState, toast) handleActionSave(values, getInstallationPositionList, onResetState, toast)
@@ -216,7 +216,7 @@ watch([recId, recAction], () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getInstallationPositionList, toast)" @confirm="() => handleActionRemove(recItem.code, getInstallationPositionList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
+11 -14
View File
@@ -102,26 +102,23 @@ const getCurrentInstallationDetail = async (id: number | string) => {
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showDetail: case ActionEvents.showDetail:
if (Number(recId.value) > 0) { if (recItem.value.code.length > 0) {
const id = Number(recId.value) navigateTo({
name: 'org-src-installation-id',
params: {
id: recItem.value.code,
},
})
recAction.value = '' recAction.value = ''
recItem.value = null recItem.value = null
recId.value = 0 recId.value = 0
isFormEntryDialogOpen.value = false isFormEntryDialogOpen.value = false
isReadonly.value = false isReadonly.value = false
navigateTo({
name: 'org-src-installation-id',
params: {
id,
},
})
} }
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentInstallationDetail(recId.value) getCurrentInstallationDetail(recItem.value.code)
title.value = 'Edit Instalasi' title.value = 'Edit Instalasi'
isReadonly.value = false isReadonly.value = false
break break
@@ -171,8 +168,8 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: InstallationFormData | Record<string, any>, resetForm: () => void) => { (values: InstallationFormData | Record<string, any>, resetForm: () => void) => {
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getInstallationList, resetForm, toast) handleActionEdit(recItem.code, values, getInstallationList, resetForm, toast)
return return
} }
handleActionSave(values, getInstallationList, resetForm, toast) handleActionSave(values, getInstallationList, resetForm, toast)
@@ -187,7 +184,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getInstallationList, toast)" @confirm="() => handleActionRemove(recItem.code, getInstallationList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
@@ -105,12 +105,12 @@ const getCurrentSpecialistDetail = async (id: number | string) => {
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showDetail: case ActionEvents.showDetail:
getCurrentSpecialistDetail(recId.value) getCurrentSpecialistDetail(recItem.value.code)
title.value = 'Detail Spesialis Posisi' title.value = 'Detail Spesialis Posisi'
isReadonly.value = true isReadonly.value = true
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentSpecialistDetail(recId.value) getCurrentSpecialistDetail(recItem.value.code)
title.value = 'Edit Spesialis Posisi' title.value = 'Edit Spesialis Posisi'
isReadonly.value = false isReadonly.value = false
break break
@@ -122,7 +122,7 @@ watch([recId, recAction], () => {
onMounted(async () => { onMounted(async () => {
try { try {
specialists.value = await getValueLabelSpecialistList({ sort: 'createdAt:asc', 'page-size': 100 }) specialists.value = await getValueLabelSpecialistList({ sort: 'createdAt:asc', 'page-size': 100 }, true)
employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' }) employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' })
} catch (err) { } catch (err) {
console.log(err) console.log(err)
@@ -169,8 +169,8 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: SpecialistPositionFormData | Record<string, any>, resetForm: () => void) => { (values: SpecialistPositionFormData | Record<string, any>, resetForm: () => void) => {
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getSpecialistList, resetForm, toast) handleActionEdit(recItem.code, values, getSpecialistList, resetForm, toast)
return return
} }
handleActionSave(values, getSpecialistList, resetForm, toast) handleActionSave(values, getSpecialistList, resetForm, toast)
@@ -184,7 +184,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getSpecialistList, toast)" @confirm="() => handleActionRemove(recItem.code, getSpecialistList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
+5 -5
View File
@@ -48,7 +48,7 @@ const title = ref('')
// #region Props & Emits // #region Props & Emits
const props = defineProps<{ const props = defineProps<{
specialistId: number specialistId: string
}>() }>()
const specialist = ref<Specialist>({} as Specialist) const specialist = ref<Specialist>({} as Specialist)
// #endregion // #endregion
@@ -154,7 +154,7 @@ provide('table_data_loader', isLoading)
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showEdit: case ActionEvents.showEdit:
getDetailSpecialistPosition(recId.value) getDetailSpecialistPosition(recItem.value.code)
title.value = 'Edit Posisi' title.value = 'Edit Posisi'
isReadonly.value = false isReadonly.value = false
isFormEntryDialogOpen.value = true isFormEntryDialogOpen.value = true
@@ -203,8 +203,8 @@ watch([recId, recAction], () => {
@submit=" @submit="
(values: SpecialistPositionFormData | Record<string, any>, resetForm: () => void) => { (values: SpecialistPositionFormData | Record<string, any>, resetForm: () => void) => {
console.log(values) console.log(values)
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getPositionList, onResetState, toast) handleActionEdit(recItem.code, values, getPositionList, onResetState, toast)
return return
} }
handleActionSave(values, getPositionList, onResetState, toast) handleActionSave(values, getPositionList, onResetState, toast)
@@ -217,7 +217,7 @@ watch([recId, recAction], () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getPositionList, toast)" @confirm="() => handleActionRemove(recItem.code, getPositionList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
+12 -15
View File
@@ -103,26 +103,23 @@ const getCurrentSpecialistDetail = async (id: number | string) => {
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showDetail: case ActionEvents.showDetail:
if (Number(recId.value) > 0) { if (recItem.value.code.length > 0) {
const id = Number(recId.value) navigateTo({
name: 'org-src-specialist-id',
params: {
id: recItem.value.code,
},
})
recAction.value = '' recAction.value = ''
recItem.value = null recItem.value = null
recId.value = 0 recId.value = 0
isFormEntryDialogOpen.value = false isFormEntryDialogOpen.value = false
isReadonly.value = false isReadonly.value = false
navigateTo({
name: 'org-src-specialist-id',
params: {
id,
},
})
} }
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentSpecialistDetail(recId.value) getCurrentSpecialistDetail(recItem.value.code)
title.value = 'Edit Spesialis' title.value = 'Edit Spesialis'
isReadonly.value = false isReadonly.value = false
break break
@@ -133,7 +130,7 @@ watch([recId, recAction], () => {
}) })
onMounted(async () => { onMounted(async () => {
units.value = await getUnitList() units.value = await getUnitList({}, true)
await getSpecialistList() await getSpecialistList()
}) })
</script> </script>
@@ -172,8 +169,8 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: SpecialistFormData | Record<string, any>, resetForm: () => void) => { (values: SpecialistFormData | Record<string, any>, resetForm: () => void) => {
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getSpecialistList, resetForm, toast) handleActionEdit(recItem.code, values, getSpecialistList, resetForm, toast)
return return
} }
handleActionSave(values, getSpecialistList, resetForm, toast) handleActionSave(values, getSpecialistList, resetForm, toast)
@@ -188,7 +185,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getSpecialistList, toast)" @confirm="() => handleActionRemove(recItem.code, getSpecialistList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
@@ -110,12 +110,12 @@ const getCurrentSubSpecialistDetail = async (id: number | string) => {
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showDetail: case ActionEvents.showDetail:
getCurrentSubSpecialistDetail(recId.value) getCurrentSubSpecialistDetail(recItem.value.code)
title.value = 'Detail Sub Spesialis Posisi' title.value = 'Detail Sub Spesialis Posisi'
isReadonly.value = true isReadonly.value = true
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentSubSpecialistDetail(recId.value) getCurrentSubSpecialistDetail(recItem.value.code)
title.value = 'Edit Sub Spesialis Posisi' title.value = 'Edit Sub Spesialis Posisi'
isReadonly.value = false isReadonly.value = false
break break
@@ -127,7 +127,7 @@ watch([recId, recAction], () => {
onMounted(async () => { onMounted(async () => {
try { try {
subSpecialists.value = await getValueLabelSubSpecialistList({ sort: 'createdAt:asc', 'page-size': 100 }) subSpecialists.value = await getValueLabelSubSpecialistList({ sort: 'createdAt:asc', 'page-size': 100 }, true)
employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' }) employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' })
} catch (err) { } catch (err) {
console.log(err) console.log(err)
@@ -176,8 +176,8 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: SubSpecialistPositionFormData | Record<string, any>, resetForm: () => void) => { (values: SubSpecialistPositionFormData | Record<string, any>, resetForm: () => void) => {
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getSubSpecialistList, onResetState, toast) handleActionEdit(recItem.code, values, getSubSpecialistList, onResetState, toast)
return return
} }
handleActionSave(values, getSubSpecialistList, onResetState, toast) handleActionSave(values, getSubSpecialistList, onResetState, toast)
@@ -192,7 +192,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getSubSpecialistList, toast)" @confirm="() => handleActionRemove(recItem.code, getSubSpecialistList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
@@ -51,7 +51,7 @@ const title = ref('')
// #region Props & Emits // #region Props & Emits
const props = defineProps<{ const props = defineProps<{
subspecialistId: number subspecialistId: string
}>() }>()
const subSpecialist = ref<Subspecialist>({} as Subspecialist) const subSpecialist = ref<Subspecialist>({} as Subspecialist)
// #endregion // #endregion
@@ -157,7 +157,7 @@ provide('table_data_loader', isLoading)
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showEdit: case ActionEvents.showEdit:
getDetailSubSpecialistPosition(recId.value) getDetailSubSpecialistPosition(recItem.value.code)
title.value = 'Edit Posisi' title.value = 'Edit Posisi'
isReadonly.value = false isReadonly.value = false
isFormEntryDialogOpen.value = true isFormEntryDialogOpen.value = true
@@ -206,8 +206,8 @@ watch([recId, recAction], () => {
@submit=" @submit="
(values: SubSpecialistPositionFormData | Record<string, any>, resetForm: () => void) => { (values: SubSpecialistPositionFormData | Record<string, any>, resetForm: () => void) => {
console.log(values) console.log(values)
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getPositionList, onResetState, toast) handleActionEdit(recItem.code, values, getPositionList, onResetState, toast)
return return
} }
handleActionSave(values, getPositionList, onResetState, toast) handleActionSave(values, getPositionList, onResetState, toast)
@@ -220,7 +220,7 @@ watch([recId, recAction], () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getPositionList, toast)" @confirm="() => handleActionRemove(recItem.code, getPositionList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
+12 -15
View File
@@ -103,26 +103,23 @@ const getCurrentSubSpecialistDetail = async (id: number | string) => {
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showDetail: case ActionEvents.showDetail:
if (Number(recId.value) > 0) { if (recItem.value.code.length > 0) {
const id = Number(recId.value) navigateTo({
name: 'org-src-subspecialist-id',
params: {
id: recItem.value.code,
},
})
recAction.value = '' recAction.value = ''
recItem.value = null recItem.value = null
recId.value = 0 recId.value = 0
isFormEntryDialogOpen.value = false isFormEntryDialogOpen.value = false
isReadonly.value = false isReadonly.value = false
navigateTo({
name: 'org-src-subspecialist-id',
params: {
id,
},
})
} }
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentSubSpecialistDetail(recId.value) getCurrentSubSpecialistDetail(recItem.value.code)
title.value = 'Edit Sub Spesialis' title.value = 'Edit Sub Spesialis'
isReadonly.value = false isReadonly.value = false
break break
@@ -133,7 +130,7 @@ watch([recId, recAction], () => {
}) })
onMounted(async () => { onMounted(async () => {
specialists.value = await getSpecialistsList() specialists.value = await getSpecialistsList({}, true)
await getSubSpecialistList() await getSubSpecialistList()
}) })
</script> </script>
@@ -172,8 +169,8 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: SubspecialistFormData | Record<string, any>, resetForm: () => void) => { (values: SubspecialistFormData | Record<string, any>, resetForm: () => void) => {
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getSubSpecialistList, resetForm, toast) handleActionEdit(recItem.code, values, getSubSpecialistList, resetForm, toast)
return return
} }
handleActionSave(values, getSubSpecialistList, resetForm, toast) handleActionSave(values, getSubSpecialistList, resetForm, toast)
@@ -188,7 +185,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getSubSpecialistList, toast)" @confirm="() => handleActionRemove(recItem.code, getSubSpecialistList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
@@ -106,12 +106,12 @@ const getCurrentUnitDetail = async (id: number | string) => {
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showDetail: case ActionEvents.showDetail:
getCurrentUnitDetail(recId.value) getCurrentUnitDetail(recItem.value.code)
title.value = 'Detail Unit Posisi' title.value = 'Detail Unit Posisi'
isReadonly.value = true isReadonly.value = true
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentUnitDetail(recId.value) getCurrentUnitDetail(recItem.value.code)
title.value = 'Edit Unit Posisi' title.value = 'Edit Unit Posisi'
isReadonly.value = false isReadonly.value = false
break break
@@ -123,7 +123,7 @@ watch([recId, recAction], () => {
onMounted(async () => { onMounted(async () => {
try { try {
units.value = await getValueLabelUnitList({ sort: 'createdAt:asc', 'page-size': 100 }) units.value = await getValueLabelUnitList({ sort: 'createdAt:asc', 'page-size': 100 }, true)
employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' }) employees.value = await getEmployeeLabelList({ sort: 'createdAt:asc', 'page-size': 100, includes: 'person' })
} catch (err) { } catch (err) {
console.log(err) console.log(err)
@@ -172,8 +172,8 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: UnitPositionFormData | Record<string, any>, resetForm: () => void) => { (values: UnitPositionFormData | Record<string, any>, resetForm: () => void) => {
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getListUnit, resetForm, toast) handleActionEdit(recItem.code, values, getListUnit, resetForm, toast)
return return
} }
handleActionSave(values, getListUnit, resetForm, toast) handleActionSave(values, getListUnit, resetForm, toast)
@@ -187,7 +187,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getListUnit, toast)" @confirm="() => handleActionRemove(recItem.code, getListUnit, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
+5 -5
View File
@@ -47,7 +47,7 @@ const title = ref('')
// #region Props & Emits // #region Props & Emits
const props = defineProps<{ const props = defineProps<{
unitId: number unitId: string
}>() }>()
const unit = ref<Unit>({} as Unit) const unit = ref<Unit>({} as Unit)
// #endregion // #endregion
@@ -152,7 +152,7 @@ watch([recId, recAction], () => {
console.log(recId, recAction) console.log(recId, recAction)
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showEdit: case ActionEvents.showEdit:
getDetailUnitPosition(recId.value) getDetailUnitPosition(recItem.value.code)
title.value = 'Edit Posisi' title.value = 'Edit Posisi'
isReadonly.value = false isReadonly.value = false
isFormEntryDialogOpen.value = true isFormEntryDialogOpen.value = true
@@ -201,8 +201,8 @@ watch([recId, recAction], () => {
@submit=" @submit="
(values: UnitPositionFormData | Record<string, any>, resetForm: () => void) => { (values: UnitPositionFormData | Record<string, any>, resetForm: () => void) => {
console.log(values) console.log(values)
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getPositionList, onResetState, toast) handleActionEdit(recItem.code, values, getPositionList, onResetState, toast)
return return
} }
handleActionSave(values, getPositionList, onResetState, toast) handleActionSave(values, getPositionList, onResetState, toast)
@@ -215,7 +215,7 @@ watch([recId, recAction], () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getPositionList, toast)" @confirm="() => handleActionRemove(recItem.code, getPositionList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
+12 -16
View File
@@ -103,26 +103,22 @@ const getCurrentUnitDetail = async (id: number | string) => {
watch([recId, recAction], () => { watch([recId, recAction], () => {
switch (recAction.value) { switch (recAction.value) {
case ActionEvents.showDetail: case ActionEvents.showDetail:
if (Number(recId.value) > 0) { if (recItem.value.code.length > 0) {
const id = Number(recId.value) navigateTo({
name: 'org-src-unit-id',
params: {
id: recItem.value.code,
},
})
recAction.value = '' recAction.value = ''
recItem.value = null recItem.value = null
recId.value = 0 recId.value = 0
isFormEntryDialogOpen.value = false isFormEntryDialogOpen.value = false
isReadonly.value = false isReadonly.value = false
navigateTo({
name: 'org-src-unit-id',
params: {
id,
},
})
} }
break break
case ActionEvents.showEdit: case ActionEvents.showEdit:
getCurrentUnitDetail(recId.value) getCurrentUnitDetail(recItem.value.code)
title.value = 'Edit Unit' title.value = 'Edit Unit'
isReadonly.value = false isReadonly.value = false
break break
@@ -133,7 +129,7 @@ watch([recId, recAction], () => {
}) })
onMounted(async () => { onMounted(async () => {
installations.value = await getInstallationList() installations.value = await getInstallationList({}, true)
await getUnitList() await getUnitList()
}) })
</script> </script>
@@ -172,8 +168,8 @@ onMounted(async () => {
:is-readonly="isReadonly" :is-readonly="isReadonly"
@submit=" @submit="
(values: UnitFormData | Record<string, any>, resetForm: () => void) => { (values: UnitFormData | Record<string, any>, resetForm: () => void) => {
if (recId > 0) { if (recItem?.code.length > 0) {
handleActionEdit(recId, values, getUnitList, resetForm, toast) handleActionEdit(recItem.code, values, getUnitList, resetForm, toast)
return return
} }
handleActionSave(values, getUnitList, resetForm, toast) handleActionSave(values, getUnitList, resetForm, toast)
@@ -188,7 +184,7 @@ onMounted(async () => {
v-model:open="isRecordConfirmationOpen" v-model:open="isRecordConfirmationOpen"
action="delete" action="delete"
:record="recItem" :record="recItem"
@confirm="() => handleActionRemove(recId, getUnitList, toast)" @confirm="() => handleActionRemove(recItem.code, getUnitList, toast)"
@cancel="" @cancel=""
> >
<template #default="{ record }"> <template #default="{ record }">
+6
View File
@@ -42,6 +42,12 @@ export interface RefSearchNav {
onClear: () => void onClear: () => void
} }
export interface RefExportNav {
onExportPdf?: () => void
onExportCsv?: () => void
onExportExcel?: () => void
}
// prepared header for relatively common usage // prepared header for relatively common usage
export interface HeaderPrep { export interface HeaderPrep {
title?: string title?: string
+2 -2
View File
@@ -4,7 +4,7 @@ export interface DivisionPosition extends Base {
code: string code: string
name: string name: string
headStatus?: boolean headStatus?: boolean
division_id: number division_id: string
employee_id?: number employee_id?: number
employee?: Employee | null employee?: Employee | null
@@ -16,7 +16,7 @@ export function genDivisionPosition(): DivisionPosition {
code: '', code: '',
name: '', name: '',
headStatus: false, headStatus: false,
division_id: 0, division_id: '',
employee_id: 0, employee_id: 0,
} }
} }
+2 -2
View File
@@ -2,7 +2,7 @@ import { type Base, genBase } from './_base'
import type { Employee } from './employee' import type { Employee } from './employee'
export interface SpecialistPosition extends Base { export interface SpecialistPosition extends Base {
specialist_id: number specialist_id: string
code: string code: string
name: string name: string
headStatus?: boolean headStatus?: boolean
@@ -13,7 +13,7 @@ export interface SpecialistPosition extends Base {
export function genSpecialistPosition(): SpecialistPosition { export function genSpecialistPosition(): SpecialistPosition {
return { return {
...genBase(), ...genBase(),
specialist_id: 0, specialist_id: '',
code: '', code: '',
name: '', name: '',
headStatus: false, headStatus: false,
+1 -1
View File
@@ -14,6 +14,6 @@ export function genSpecialist(): Specialist {
...genBase(), ...genBase(),
code: '', code: '',
name: '', name: '',
unit_id: 0, unit_id: '',
} }
} }
+2 -2
View File
@@ -3,7 +3,7 @@ import type { Employee } from './employee'
import type { Subspecialist } from './subspecialist' import type { Subspecialist } from './subspecialist'
export interface SubSpecialistPosition extends Base { export interface SubSpecialistPosition extends Base {
subspecialist_id: number subspecialist_id: string
code: string code: string
name: string name: string
headStatus?: boolean headStatus?: boolean
@@ -16,7 +16,7 @@ export interface SubSpecialistPosition extends Base {
export function genSubSpecialistPosition(): SubSpecialistPosition { export function genSubSpecialistPosition(): SubSpecialistPosition {
return { return {
...genBase(), ...genBase(),
subspecialist_id: 0, subspecialist_id: '',
code: '', code: '',
name: '', name: '',
headStatus: false, headStatus: false,
+2 -2
View File
@@ -2,7 +2,7 @@ import { type Base, genBase } from './_base'
import type { Employee } from './employee' import type { Employee } from './employee'
export interface UnitPosition extends Base { export interface UnitPosition extends Base {
unit_id: number unit_code: string
code: string code: string
name: string name: string
headStatus?: boolean headStatus?: boolean
@@ -14,7 +14,7 @@ export interface UnitPosition extends Base {
export function genUnitPosition(): UnitPosition { export function genUnitPosition(): UnitPosition {
return { return {
...genBase(), ...genBase(),
unit_id: 0, unit_code: '',
code: '', code: '',
name: '', name: '',
headStatus: false, headStatus: false,
@@ -33,7 +33,7 @@ const canRead = true
<template> <template>
<template v-if="canRead"> <template v-if="canRead">
<ContentDivisionDetail :division-id="Number(route.params.id)" /> <ContentDivisionDetail :division-id="String(route.params.id)" />
</template> </template>
<Error <Error
v-else v-else
@@ -33,7 +33,7 @@ const canRead = true
<template> <template>
<template v-if="canRead"> <template v-if="canRead">
<ContentInstallationDetail :installation-id="Number(route.params.id)" /> <ContentInstallationDetail :installation-id="String(route.params.id)" />
</template> </template>
<Error <Error
v-else v-else
@@ -33,7 +33,7 @@ const canRead = true
<template> <template>
<template v-if="canRead"> <template v-if="canRead">
<ContentSpecialistDetail :specialist-id="Number(route.params.id)" /> <ContentSpecialistDetail :specialist-id="String(route.params.id)" />
</template> </template>
<Error <Error
v-else v-else
@@ -33,7 +33,7 @@ const canRead = true
<template> <template>
<template v-if="canRead"> <template v-if="canRead">
<ContentSubspecialistDetail :subspecialist-id="Number(route.params.id)" /> <ContentSubspecialistDetail :subspecialist-id="String(route.params.id)" />
</template> </template>
<Error <Error
v-else v-else
@@ -33,7 +33,7 @@ const canRead = true
<template> <template>
<template v-if="canRead"> <template v-if="canRead">
<ContentUnitDetail :unit-id="Number(route.params.id)" /> <ContentUnitDetail :unit-id="String(route.params.id)" />
</template> </template>
<Error <Error
v-else v-else
@@ -0,0 +1,47 @@
<script setup lang="ts">
import type { PagePermission } from '~/models/role'
import Error from '~/components/pub/my-ui/error/error.vue'
import { PAGE_PERMISSIONS } from '~/lib/page-permission'
import ContentChemotherapyAdminList from '~/components/content/chemotherapy/admin-list.vue'
import ContentChemotherapyVerification from '~/components/content/chemotherapy/verification.vue'
definePageMeta({
middleware: ['rbac'],
roles: ['doctor', 'nurse', 'admisi', 'pharmacy', 'billing', 'management'],
title: 'Kemoterapi Admin',
contentFrame: 'cf-full-width',
})
const route = useRoute()
useHead({
title: () => 'Verifikasi Jadwal Pasien',
})
const roleAccess: PagePermission = PAGE_PERMISSIONS['/doctor'] || {}
const { checkRole, hasReadAccess } = useRBAC()
// Check if user has access to this page
const hasAccess = checkRole(roleAccess)
if (!hasAccess) {
navigateTo('/403')
}
// Define permission-based computed properties
const canRead = true // hasReadAccess(roleAccess)
const mode = computed(() => route.params.mode as string)
</script>
<template>
<div>
<div v-if="canRead">
<ContentChemotherapyVerification />
</div>
<Error
v-else
:status-code="403"
/>
</div>
</template>
@@ -0,0 +1,40 @@
<script setup lang="ts">
import type { PagePermission } from '~/models/role'
import Error from '~/components/pub/my-ui/error/error.vue'
import { PAGE_PERMISSIONS } from '~/lib/page-permission'
definePageMeta({
middleware: ['rbac'],
roles: ['doctor', 'nurse', 'admisi', 'pharmacy', 'billing', 'management'],
title: 'Daftar Kempterapi',
contentFrame: 'cf-full-width',
})
const route = useRoute()
useHead({
title: () => route.meta.title as string,
})
const roleAccess: PagePermission = PAGE_PERMISSIONS['/doctor']
const { checkRole, hasReadAccess } = useRBAC()
// Check if user has access to this page
const hasAccess = checkRole(roleAccess)
if (!hasAccess) {
navigateTo('/403')
}
// Define permission-based computed properties
const canRead = true // hasReadAccess(roleAccess)
</script>
<template>
<div>
<div v-if="canRead">
<ContentChemotherapyList />
</div>
<Error v-else :status-code="403" />
</div>
</template>
+1 -1
View File
@@ -5,7 +5,7 @@ const DivisionPositionSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
headStatus: z.boolean().optional().nullable(), headStatus: z.boolean().optional().nullable(),
division_id: z.union([ division_code: z.union([
z.string({ required_error: 'Divisi Induk harus diisi' }), z.string({ required_error: 'Divisi Induk harus diisi' }),
z.number({ required_error: 'Divisi Induk harus diisi' }) z.number({ required_error: 'Divisi Induk harus diisi' })
]).optional().nullable(), ]).optional().nullable(),
+1 -1
View File
@@ -4,7 +4,7 @@ import type { Division } from '~/models/division'
const DivisionSchema = z.object({ const DivisionSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
parent_id: z.union([ parent_code: z.union([
z.string({ required_error: 'Divisi Induk harus diisi' }), z.string({ required_error: 'Divisi Induk harus diisi' }),
z.number({ required_error: 'Divisi Induk harus diisi' }) z.number({ required_error: 'Divisi Induk harus diisi' })
]).optional().nullable(), ]).optional().nullable(),
+1 -1
View File
@@ -5,7 +5,7 @@ const InstallationPositionSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
headStatus: z.boolean().optional().nullable(), headStatus: z.boolean().optional().nullable(),
installation_id: z.union([ installation_code: z.union([
z.string({ required_error: 'Instalasi Induk harus diisi' }), z.string({ required_error: 'Instalasi Induk harus diisi' }),
z.number({ required_error: 'Instalasi Induk harus diisi' }), z.number({ required_error: 'Instalasi Induk harus diisi' }),
]), ]),
+1 -1
View File
@@ -5,7 +5,7 @@ const SpecialistPositionSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
headStatus: z.boolean().optional().nullable(), headStatus: z.boolean().optional().nullable(),
specialist_id: z specialist_code: z
.union([ .union([
z.string({ required_error: 'Spesialis harus diisi' }), z.string({ required_error: 'Spesialis harus diisi' }),
z.number({ required_error: 'Spesialis harus diisi' }), z.number({ required_error: 'Spesialis harus diisi' }),
+1 -1
View File
@@ -4,7 +4,7 @@ import type { Specialist } from '~/models/specialist'
const SpecialistSchema = z.object({ const SpecialistSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
unit_id: z unit_code: z
.union([z.string({ required_error: 'Unit harus diisi' }), z.number({ required_error: 'Unit harus diisi' })]) .union([z.string({ required_error: 'Unit harus diisi' }), z.number({ required_error: 'Unit harus diisi' })])
.optional() .optional()
.nullable(), .nullable(),
+1 -1
View File
@@ -5,7 +5,7 @@ const SubSpecialistPositionSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
headStatus: z.boolean().optional().nullable(), headStatus: z.boolean().optional().nullable(),
subspecialist_id: z subspecialist_code: z
.union([ .union([
z.string({ required_error: 'Spesialis harus diisi' }), z.string({ required_error: 'Spesialis harus diisi' }),
z.number({ required_error: 'Spesialis harus diisi' }), z.number({ required_error: 'Spesialis harus diisi' }),
+1 -1
View File
@@ -4,7 +4,7 @@ import type { Subspecialist } from '~/models/subspecialist'
const SubspecialistSchema = z.object({ const SubspecialistSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
specialist_id: z specialist_code: z
.union([ .union([
z.string({ required_error: 'Spesialis harus diisi' }), z.string({ required_error: 'Spesialis harus diisi' }),
z.number({ required_error: 'Spesialis harus diisi' }), z.number({ required_error: 'Spesialis harus diisi' }),
+1 -1
View File
@@ -5,7 +5,7 @@ const UnitPositionSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
headStatus: z.boolean().optional().nullable(), headStatus: z.boolean().optional().nullable(),
unit_id: z unit_code: z
.union([ .union([
z.string({ required_error: 'Unit Induk harus diisi' }), z.string({ required_error: 'Unit Induk harus diisi' }),
z.number({ required_error: 'Unit Induk harus diisi' }), z.number({ required_error: 'Unit Induk harus diisi' }),
+1 -1
View File
@@ -4,7 +4,7 @@ import type { Unit } from '~/models/unit'
const UnitSchema = z.object({ const UnitSchema = z.object({
code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'), code: z.string({ required_error: 'Kode harus diisi' }).min(1, 'Kode minimum 1 karakter'),
name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'), name: z.string({ required_error: 'Nama harus diisi' }).min(1, 'Nama minimum 1 karakter'),
installation_id: z installation_code: z
.union([ .union([
z.string({ required_error: 'Instalasi harus diisi' }), z.string({ required_error: 'Instalasi harus diisi' }),
z.number({ required_error: 'Instalasi harus diisi' }), z.number({ required_error: 'Instalasi harus diisi' }),
+8 -4
View File
@@ -28,13 +28,15 @@ export function remove(id: number | string) {
return base.remove(path, id, name) return base.remove(path, id, name)
} }
export async function getValueLabelList(params: any = null): Promise<{ value: string; label: string }[]> { export async function getValueLabelList(params: any = null, useCodeAsValue = false): Promise<{ value: string; label: string }[]> {
let data: { value: string; label: string }[] = [] let data: { value: string; label: string }[] = []
const result = await getList(params) const result = await getList(params)
if (result.success) { if (result.success) {
const resultData = result.body?.data || [] const resultData = result.body?.data || []
data = resultData.map((item: Division) => ({ data = resultData.map((item: Division) => ({
value: item.id ? Number(item.id) : item.code, value: useCodeAsValue ? item.code
: item.id ? Number(item.id)
: item.code,
label: item.name, label: item.name,
})) }))
} }
@@ -46,10 +48,12 @@ export async function getValueLabelList(params: any = null): Promise<{ value: st
* @param divisions Array of division objects from API * @param divisions Array of division objects from API
* @returns TreeItem[] * @returns TreeItem[]
*/ */
export function getValueTreeItems(divisions: any[]): TreeItem[] { export function getValueTreeItems(divisions: any[], byCode = true): TreeItem[] {
return divisions return divisions
.map((division: Division) => ({ .map((division: Division) => ({
value: division.id ? String(division.id) : division.code, value: byCode ? String(division.code)
: String(division.id) ? String(division.id)
: division.code,
label: division.name, label: division.name,
hasChildren: Array.isArray(division.childrens) && division.childrens.length > 0, hasChildren: Array.isArray(division.childrens) && division.childrens.length > 0,
children: children:
+4 -2
View File
@@ -27,13 +27,15 @@ export function remove(id: number | string) {
return base.remove(path, id, name) return base.remove(path, id, name)
} }
export async function getValueLabelList(params: any = null): Promise<{ value: string; label: string }[]> { export async function getValueLabelList(params: any = null, useCodeAsValue = false): Promise<{ value: string; label: string }[]> {
let data: { value: string; label: string }[] = [] let data: { value: string; label: string }[] = []
const result = await getList(params) const result = await getList(params)
if (result.success) { if (result.success) {
const resultData = result.body?.data || [] const resultData = result.body?.data || []
data = resultData.map((item: Installation) => ({ data = resultData.map((item: Installation) => ({
value: item.id ? Number(item.id) : item.code, value: useCodeAsValue ? item.code
: item.id ? Number(item.id)
: item.code,
label: item.name, label: item.name,
})) }))
} }
+1 -1
View File
@@ -36,7 +36,7 @@ export async function getValueLabelList(params: any = null, useCodeAsValue = fal
data = resultData.map((item: Specialist) => ({ data = resultData.map((item: Specialist) => ({
value: useCodeAsValue ? item.code value: useCodeAsValue ? item.code
: item.id ? Number(item.id) : item.id ? Number(item.id)
: item.id, : item.code,
label: item.name, label: item.name,
parent: item.unit_id ? Number(item.unit_id) : null, parent: item.unit_id ? Number(item.unit_id) : null,
})) }))
+2 -2
View File
@@ -33,9 +33,9 @@ export async function getValueLabelList(params: any = null, useCodeAsValue = fal
if (result.success) { if (result.success) {
const resultData = result.body?.data || [] const resultData = result.body?.data || []
data = resultData.map((item: Subspecialist) => ({ data = resultData.map((item: Subspecialist) => ({
value: useCodeAsValue ? item.code value: useCodeAsValue ? item.code
: item.id ? Number(item.id) : item.id ? Number(item.id)
: item.id, : item.code,
label: item.name, label: item.name,
parent: item.specialist_id ? Number(item.specialist_id) : null, parent: item.specialist_id ? Number(item.specialist_id) : null,
})) }))
+1 -1
View File
@@ -35,7 +35,7 @@ export async function getValueLabelList(params: any = null, useCodeAsValue = fal
data = resultData.map((item: Unit) => ({ data = resultData.map((item: Unit) => ({
value: useCodeAsValue ? item.code value: useCodeAsValue ? item.code
: item.id ? Number(item.id) : item.id ? Number(item.id)
: item.id, : item.code,
label: item.name, label: item.name,
})) }))
} }
+1 -1
View File
@@ -369,4 +369,4 @@
} }
] ]
} }
] ]
+1 -1
View File
@@ -389,4 +389,4 @@
} }
] ]
} }
] ]