fix(03): form employee health check

This commit is contained in:
puriphatt 2024-08-06 03:14:56 +00:00
parent 6b2c407946
commit 72bce36373
2 changed files with 330 additions and 308 deletions

View file

@ -55,6 +55,11 @@ withDefaults(
showBtnSave: false, showBtnSave: false,
}, },
); );
defineEmits<{
(e: 'save', id: string): void;
}>();
async function fetchProvince() { async function fetchProvince() {
const result = await adrressStore.fetchProvince(); const result = await adrressStore.fetchProvince();
@ -67,7 +72,7 @@ async function fetchProvince() {
); );
} }
function addData() { function addCheckup() {
const canAdd = checkTabBeforeAdd(employeeCheckup.value || []); const canAdd = checkTabBeforeAdd(employeeCheckup.value || []);
if (canAdd) { if (canAdd) {
employeeCheckup.value?.push({ employeeCheckup.value?.push({
@ -131,7 +136,7 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
</script> </script>
<template> <template>
<div class="full-height full-width column"> <!-- <div class="full-height full-width column">
<div class="bordered-b full-width row no-wrap"> <div class="bordered-b full-width row no-wrap">
<q-btn <q-btn
@click="addData" @click="addData"
@ -186,27 +191,57 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
</div> </div>
</q-tab> </q-tab>
</q-tabs> </q-tabs>
</div> </div> -->
<q-tab-panels v-model="tab" style="padding-top: 0px" class="col"> <!-- <q-tab-panels v-model="tab" style="padding-top: 0px" class="col">
<q-tab-panel <q-tab-panel
v-for="(checkup, index) in employeeCheckup" v-for="(checkup, index) in employeeCheckup"
v-bind:key="index" v-bind:key="index"
:name="`tab${index}`" :name="`tab${index}`"
class="row col-12 items-start" class="row col-12 items-start"
style="overflow: auto" style="overflow: auto"
> > -->
<div class="col-md-3 col-12 app-text-muted q-pb-sm">
• {{ $t(`formDialogTitleHealthCheck`) }} <div class="row col-12">
<div class="col-12 q-pb-sm text-weight-bold text-body1">
<q-icon
flat
size="xs"
class="q-pa-sm rounded q-mr-xs"
color="info"
name="mdi-hospital-box"
style="background-color: var(--surface-3)"
/>
{{ $t(`formDialogTitleHealthCheck`) }}
<q-btn icon="mdi-plus" flat dense @click="addCheckup" v-if="!readonly" />
</div> </div>
<div class="col-md-9 col-12 row q-col-gutter-md">
<div
v-for="(checkup, index) in employeeCheckup"
v-bind:key="index"
class="col-12 row q-col-gutter-sm"
>
<span class="col-12 app-text-muted-2 flex justify-between items-center">
{{ `ครั้งที่ ${index + 1}` }}
<q-btn
v-if="!readonly"
dense
unelevated
id="save-basic-info"
color="primary"
class="q-px-md rounded"
:label="$t('save')"
@click="$emit('save', index)"
/>
</span>
<q-input <q-input
lazy-rules="ondemand" lazy-rules="ondemand"
:dense="dense" :dense="dense"
outlined outlined
:readonly="readonly" :readonly="readonly"
hide-bottom-space hide-bottom-space
class="col-md-6 col-12" class="col-5"
:label="$t('formDialogInputCheckupRes')" :label="$t('formDialogInputCheckupRes')"
v-model="checkup.checkupResult" v-model="checkup.checkupResult"
/> />
@ -219,7 +254,7 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
map-options map-options
hide-selected hide-selected
hide-bottom-space hide-bottom-space
class="col-6" class="col-5"
input-debounce="0" input-debounce="0"
option-value="value" option-value="value"
option-label="label" option-label="label"
@ -254,7 +289,7 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
input-debounce="0" input-debounce="0"
option-label="name" option-label="name"
lazy-rules="ondemand" lazy-rules="ondemand"
class="col-md-3 col-6" class="col-2"
v-model="checkup.provinceId" v-model="checkup.provinceId"
:dense="dense" :dense="dense"
:readonly="readonly" :readonly="readonly"
@ -279,23 +314,11 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
outlined outlined
:readonly="readonly" :readonly="readonly"
hide-bottom-space hide-bottom-space
class="col-md-9 col-12" class="col-5"
:label="$t('formDialogInputHospital')" :label="$t('formDialogInputHospital')"
v-model="checkup.hospitalName" v-model="checkup.hospitalName"
:for="`${prefixId}-input-hospital`" :for="`${prefixId}-input-hospital`"
/> />
<q-input
lazy-rules="ondemand"
:label="$t('formDialogInputRemark')"
:dense="dense"
outlined
:readonly="readonly"
hide-bottom-space
class="col-12"
v-model="checkup.remark"
type="textarea"
:for="`${prefixId}-input-remark`"
/>
<q-select <q-select
outlined outlined
clearable clearable
@ -305,7 +328,7 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
map-options map-options
hide-selected hide-selected
hide-bottom-space hide-bottom-space
class="col-6" class="col-5"
input-debounce="0" input-debounce="0"
option-value="value" option-value="value"
option-label="label" option-label="label"
@ -327,37 +350,18 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
</q-item> </q-item>
</template> </template>
</q-select> </q-select>
<q-select <q-input
outlined
clearable
use-input
fill-input
emit-value
map-options
hide-selected
hide-bottom-space
class="col-6"
input-debounce="0"
option-label="label"
option-value="value"
lazy-rules="ondemand" lazy-rules="ondemand"
v-model="checkup.insuranceCompany" :label="$t('formDialogInputRemark')"
:dense="dense" :dense="dense"
outlined
:readonly="readonly" :readonly="readonly"
:hide-dropdown-icon="readonly" hide-bottom-space
:options="insuranceCompanyOptions" class="col-12"
:for="`${prefixId}-select-province`" v-model="checkup.remark"
:label="$t('formDialogInputInsuranceCompany')" type="textarea"
@filter="insuranceCompanyFilter" :for="`${prefixId}-input-remark`"
> />
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
{{ $t('noResults') }}
</q-item-section>
</q-item>
</template>
</q-select>
<VueDatePicker <VueDatePicker
utc utc
autoApply autoApply
@ -367,7 +371,7 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
:locale="$i18n.locale === 'th-th' ? 'th' : 'en'" :locale="$i18n.locale === 'th-th' ? 'th' : 'en'"
:enableTimePicker="false" :enableTimePicker="false"
:disabled="readonly" :disabled="readonly"
class="col-md-3 col-6" class="col"
> >
<template #year="{ value }"> <template #year="{ value }">
{{ $i18n.locale === 'th-th' ? value + 543 : value }} {{ $i18n.locale === 'th-th' ? value + 543 : value }}
@ -390,12 +394,7 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
checkup.coverageStartDate checkup.coverageStartDate
? readonly ? readonly
? dateFormat(checkup.coverageStartDate) ? dateFormat(checkup.coverageStartDate)
: dateFormat( : dateFormat(checkup.coverageStartDate, false, false, true)
checkup.coverageStartDate,
false,
false,
true,
)
: undefined : undefined
" "
@update:model-value=" @update:model-value="
@ -435,7 +434,7 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
:locale="$i18n.locale === 'th-th' ? 'th' : 'en'" :locale="$i18n.locale === 'th-th' ? 'th' : 'en'"
:enableTimePicker="false" :enableTimePicker="false"
:disabled="readonly" :disabled="readonly"
class="col-md-3 col-6" class="col"
> >
<template #year="{ value }"> <template #year="{ value }">
{{ $i18n.locale === 'th-th' ? value + 543 : value }} {{ $i18n.locale === 'th-th' ? value + 543 : value }}
@ -457,21 +456,13 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
checkup.coverageExpireDate checkup.coverageExpireDate
? readonly ? readonly
? dateFormat(checkup.coverageExpireDate) ? dateFormat(checkup.coverageExpireDate)
: dateFormat( : dateFormat(checkup.coverageExpireDate, false, false, true)
checkup.coverageExpireDate,
false,
false,
true,
)
: undefined : undefined
" "
@update:model-value=" @update:model-value="
(v) => { (v) => {
if (v && v.toString().length === 10) { if (v && v.toString().length === 10) {
checkup.coverageExpireDate = parseAndFormatDate( checkup.coverageExpireDate = parseAndFormatDate(v, locale);
v,
locale,
);
} }
} }
" "
@ -497,7 +488,39 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
</template> </template>
</VueDatePicker> </VueDatePicker>
<div class="col-12 row justify-end" style="min-height: 50px"> <q-select
outlined
clearable
use-input
fill-input
emit-value
map-options
hide-selected
hide-bottom-space
class="col-7"
input-debounce="0"
option-label="label"
option-value="value"
lazy-rules="ondemand"
v-model="checkup.insuranceCompany"
:dense="dense"
:readonly="readonly"
:hide-dropdown-icon="readonly"
:options="insuranceCompanyOptions"
:for="`${prefixId}-select-province`"
:label="$t('formDialogInputInsuranceCompany')"
@filter="insuranceCompanyFilter"
>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
{{ $t('noResults') }}
</q-item-section>
</q-item>
</template>
</q-select>
<!-- <div class="col-12 row justify-end" style="min-height: 50px">
<q-btn <q-btn
v-if="!readonly && showBtnSave" v-if="!readonly && showBtnSave"
dense dense
@ -508,17 +531,18 @@ const insuranceCompanyFilter = selectFilterOptionRefMod(
:label="$t('save')" :label="$t('save')"
@click="$emit('save', index)" @click="$emit('save', index)"
/> />
</div> -->
</div> </div>
</div> </div>
<q-separator <!-- <q-separator
v-if="separator" v-if="separator"
class="col-12 q-mt-xl q-mb-md" class="col-12 q-mt-xl q-mb-md"
style="padding-block: 0.5px" style="padding-block: 0.5px"
/> />
</q-tab-panel> </q-tab-panel>
</q-tab-panels> </q-tab-panels>
</div> </div> -->
</template> </template>
<style scoped> <style scoped>

View file

@ -163,17 +163,15 @@ const currentTab = defineModel<string>('currentTab');
inline-label inline-label
mobile-arrows mobile-arrows
dense dense
class="app-text-muted full-width" class="full-width"
v-model="currentTab" v-model="currentTab"
active-class="active-tab"
indicator-color="transparent"
align="left" align="left"
> >
<q-tab <q-tab
:id="`tab-${tab.label}`"
v-for="tab in tabsList" v-for="tab in tabsList"
v-bind:key="tab.name" v-bind:key="tab.name"
class="content-tab text-capitalize" :id="`tab-${tab.label}`"
class="text-capitalize"
:name="tab.name" :name="tab.name"
:label="$t(tab.label)" :label="$t(tab.label)"
/> />