refactor: edit div of DialogForm

This commit is contained in:
Net 2024-08-16 17:36:25 +07:00
parent a56ac704ee
commit 601537049d

View file

@ -213,7 +213,9 @@ const fieldDisplayEmployee = ref<
const fieldSelected = ref< const fieldSelected = ref<
( (
| 'orderNumber'
| 'customerName' | 'customerName'
| 'businessTypePure'
| 'type' | 'type'
| 'personName' | 'personName'
| 'telephoneNo' | 'telephoneNo'
@ -228,7 +230,9 @@ const fieldSelected = ref<
| 'action' | 'action'
)[] )[]
>([ >([
'orderNumber',
'customerName', 'customerName',
'businessTypePure',
'personName', 'personName',
'telephoneNo', 'telephoneNo',
'branchEmail', 'branchEmail',
@ -1793,6 +1797,7 @@ const emptyCreateDialog = ref(false);
} }
employeeFormState.isEmployeeEdit = false; employeeFormState.isEmployeeEdit = false;
employeeFormState.currentIndex = -1;
await fetchListEmployee(); await fetchListEmployee();
} }
@ -1813,7 +1818,7 @@ const emptyCreateDialog = ref(false);
} }
" "
> >
<div class="q-mx-lg q-mt-lg"> <div class="q-px-lg q-pt-lg surface-2">
<ProfileBanner <ProfileBanner
active active
useToggle useToggle
@ -1859,293 +1864,357 @@ const emptyCreateDialog = ref(false);
</div> </div>
<div <div
class="col surface-1 q-ma-lg rounded bordered scroll row" style="flex: 1; width: 100%; overflow-y: auto"
id="personnel-form" class="surface-2 q-pa-lg"
id="drawer-employee-form"
> >
<div class="col"> <div class="col surface-1 full-height rounded bordered scroll row">
<div style="position: sticky; top: 0" class="q-pa-sm"> <div
<SideMenu class="col"
:menu=" style="height: 100%; max-height: 100; overflow-y: auto"
employeeFormState.currentTab === 'personalInfo' v-if="$q.screen.gt.sm"
? [ >
{ <div class="q-py-md q-pl-md q-pr-sm">
name: $t('formDialogTitleInformation'), <SideMenu
anchor: 'form-information', :menu="
}, employeeFormState.currentTab === 'personalInfo'
{
name: $t('formDialogTitlePersonal'),
anchor: 'form-personal',
},
{
name: $t('formDialogTitlePersonnelAddress'),
anchor: 'form-personal-address',
},
{
name: $t('formDialogTitlePassport'),
anchor: 'form-passport',
},
{
name: $t('formDialogTitleVisa'),
anchor: 'form-visa',
},
]
: employeeFormState.currentTab === 'healthCheck'
? [ ? [
{ {
name: $t('formDialogInputCheckupRes'), name: $t('formDialogTitleInformation'),
anchor: 'form-checkup', anchor: 'form-information',
},
{
name: $t('formDialogTitlePersonal'),
anchor: 'form-personal',
},
{
name: $t('formDialogTitlePersonnelAddress'),
anchor: 'form-personal-address',
},
{
name: $t('formDialogTitlePassport'),
anchor: 'form-passport',
},
{
name: $t('formDialogTitleVisa'),
anchor: 'form-visa',
}, },
] ]
: employeeFormState.currentTab === 'workHistory' : employeeFormState.currentTab === 'healthCheck'
? [ ? [
{ {
name: $t('workHistory'), name: $t('formDialogInputCheckupRes'),
anchor: 'form-workHistory', anchor: 'form-checkup',
}, },
] ]
: employeeFormState.currentTab === 'other' : employeeFormState.currentTab === 'workHistory'
? [ ? [
{ {
name: $t('other'), name: $t('workHistory'),
anchor: 'form-other', anchor: 'form-workHistory',
}, },
] ]
: [] : employeeFormState.currentTab === 'other'
" ? [
background="transparent" {
:active="{ name: $t('other'),
background: 'hsla(var(--blue-6-hsl) / .2)', anchor: 'form-other',
foreground: 'var(--blue-6)', },
}" ]
scroll-element="#employee-form" : []
/> "
background="transparent"
:active="{
background: 'hsla(var(--blue-6-hsl) / .2)',
foreground: 'var(--blue-6)',
}"
scroll-element="#employee-form-content"
/>
</div>
</div> </div>
</div>
<div <div
v-if="employeeFormState.currentTab === 'personalInfo'" class="col-12 col-md-10 q-py-md q-pr-md q-pl-sm"
class="col-10 q-pa-md q-gutter-y-xl" id="employee-form-content"
> style="height: 100%; max-height: 100; overflow-y: auto"
<BasicInformation >
id="form-information" <template v-if="employeeFormState.currentTab === 'personalInfo'">
prefix-id="form-employee" <div
:show-btn-save="employeeFormState.dialogType === 'create'" class="q-pt-sm row"
employee style="position: absolute; z-index: 999; right: 4%"
dense >
outlined <UndoButton
separator v-if="
:title="$t('formDialogTitleInformation')" employeeFormState.isEmployeeEdit &&
:readonly="!employeeFormState.isEmployeeEdit" employeeFormState.dialogType !== 'create'
:employee-owner-option="employeeStore.ownerOption" "
v-model:customer-branch="employeeFormState.formDataEmployeeOwner" id="btn-info-basic-undo"
v-model:employee-id="employeeFormState.currentEmployeeCode" icon-only
v-model:nrc-no="currentFromDataEmployee.nrcNo" @click="
v-model:code="currentFromDataEmployee.code" () => {
@filter-owner-branch="employeeFormStore.employeeFilterOwnerBranch" employeeFormStore.resetFormDataEmployee();
@undo=" employeeFormState.isEmployeeEdit = false;
() => { employeeFormState.dialogType = 'info';
employeeFormStore.resetFormDataEmployee(); }
employeeFormState.isEmployeeEdit = false; "
employeeFormState.dialogType = 'info'; type="button"
} />
" <SaveButton
@edit=" v-if="employeeFormState.isEmployeeEdit"
() => { id="btn-info-basic-save"
employeeFormState.isEmployeeEdit = true; icon-only
employeeFormState.dialogType = 'edit'; type="submit"
} />
" <EditButton
@save="() => {}" v-if="!employeeFormState.isEmployeeEdit"
@delete="() => deleteEmployeeById({ id: currentFromDataEmployee.id })" id="btn-info-basic-edit"
/> icon-only
<FormPerson @click="
id="form-personal" () => {
prefix-id="form-employee" employeeFormState.isEmployeeEdit = true;
dense employeeFormState.dialogType = 'edit';
outlined }
employee "
separator type="button"
:title="$t('personalInfo')" />
v-model:open="employeeFormState.dialogModal" <DeleteButton
v-model:firstName="currentFromDataEmployee.firstName" v-if="!employeeFormState.isEmployeeEdit"
v-model:lastName="currentFromDataEmployee.lastName" id="btn-info-basic-delete"
v-model:firstNameEN="currentFromDataEmployee.firstNameEN" icon-only
v-model:lastNameEN="currentFromDataEmployee.lastNameEN" @click="
v-model:gender="currentFromDataEmployee.gender" () => deleteEmployeeById({ id: currentFromDataEmployee.id })
v-model:birthDate="currentFromDataEmployee.dateOfBirth" "
v-model:nationality="currentFromDataEmployee.nationality" type="button"
/> />
<AddressForm </div>
id="form-personal-address"
prefix-id="form-employee"
v-model:same-with-employer="
employeeFormState.formDataEmployeeSameAddr
"
v-model:address="currentFromDataEmployee.address"
v-model:addressEN="currentFromDataEmployee.addressEN"
v-model:provinceId="currentFromDataEmployee.provinceId"
v-model:districtId="currentFromDataEmployee.districtId"
v-model:subDistrictId="currentFromDataEmployee.subDistrictId"
v-model:zipCode="currentFromDataEmployee.zipCode"
employee
dense
/>
<FormEmployeePassport <BasicInformation
prefix-id="drawer-info-employee" no-action
id="form-passport" id="form-information"
dense prefix-id="form-employee"
outlined :show-btn-save="employeeFormState.dialogType === 'create'"
separator employee
:title="$t('formDialogTitlePassport')" dense
v-model:passport-type="currentFromDataEmployee.passportType" outlined
v-model:passport-number="currentFromDataEmployee.passportNumber" separator
v-model:passport-issue-date=" :title="$t('formDialogTitleInformation')"
currentFromDataEmployee.passportIssueDate :readonly="!employeeFormState.isEmployeeEdit"
" :employee-owner-option="employeeStore.ownerOption"
v-model:passport-expiry-date=" v-model:customer-branch="employeeFormState.formDataEmployeeOwner"
currentFromDataEmployee.passportExpiryDate v-model:employee-id="employeeFormState.currentEmployeeCode"
" v-model:nrc-no="currentFromDataEmployee.nrcNo"
v-model:passport-issuing-place=" v-model:code="currentFromDataEmployee.code"
currentFromDataEmployee.passportIssuingPlace @filter-owner-branch="employeeFormStore.employeeFilterOwnerBranch"
" />
v-model:passport-issuing-country=" <FormPerson
currentFromDataEmployee.passportIssuingCountry id="form-personal"
" prefix-id="form-employee"
v-model:previous-passport-reference=" dense
currentFromDataEmployee.previousPassportReference outlined
" employee
/> separator
:title="$t('personalInfo')"
v-model:open="employeeFormState.dialogModal"
v-model:firstName="currentFromDataEmployee.firstName"
v-model:lastName="currentFromDataEmployee.lastName"
v-model:firstNameEN="currentFromDataEmployee.firstNameEN"
v-model:lastNameEN="currentFromDataEmployee.lastNameEN"
v-model:gender="currentFromDataEmployee.gender"
v-model:birthDate="currentFromDataEmployee.dateOfBirth"
v-model:nationality="currentFromDataEmployee.nationality"
/>
<AddressForm
id="form-personal-address"
prefix-id="form-employee"
v-model:same-with-employer="
employeeFormState.formDataEmployeeSameAddr
"
v-model:address="currentFromDataEmployee.address"
v-model:addressEN="currentFromDataEmployee.addressEN"
v-model:provinceId="currentFromDataEmployee.provinceId"
v-model:districtId="currentFromDataEmployee.districtId"
v-model:subDistrictId="currentFromDataEmployee.subDistrictId"
v-model:zipCode="currentFromDataEmployee.zipCode"
employee
dense
/>
<FormEmployeeVisa <FormEmployeePassport
prefix-id="drawer-info-employee" prefix-id="drawer-info-employee"
id="form-visa" id="form-passport"
dense dense
outlined outlined
:title="$t(`formDialogTitleVisa`)" separator
v-model:visa-type="currentFromDataEmployee.visaType" :title="$t('formDialogTitlePassport')"
v-model:visa-number="currentFromDataEmployee.visaNumber" v-model:passport-type="currentFromDataEmployee.passportType"
v-model:visa-issue-date="currentFromDataEmployee.visaIssueDate" v-model:passport-number="currentFromDataEmployee.passportNumber"
v-model:visa-expiry-date="currentFromDataEmployee.visaExpiryDate" v-model:passport-issue-date="
v-model:visa-issuing-place="currentFromDataEmployee.visaIssuingPlace" currentFromDataEmployee.passportIssueDate
v-model:visa-stay-until-date=" "
currentFromDataEmployee.visaStayUntilDate v-model:passport-expiry-date="
" currentFromDataEmployee.passportExpiryDate
v-model:tm6-number="currentFromDataEmployee.tm6Number" "
v-model:entry-date="currentFromDataEmployee.entryDate" v-model:passport-issuing-place="
/> currentFromDataEmployee.passportIssuingPlace
</div> "
v-model:passport-issuing-country="
currentFromDataEmployee.passportIssuingCountry
"
v-model:previous-passport-reference="
currentFromDataEmployee.previousPassportReference
"
/>
<div class="col-10 q-pa-md q-gutter-y-xl" v-else> <FormEmployeeVisa
<FormEmployeeHealthCheck prefix-id="drawer-info-employee"
v-if="employeeFormState.currentTab === 'healthCheck'" id="form-visa"
id="form-checkup" dense
prefix-id="form-employee" outlined
dense :title="$t(`formDialogTitleVisa`)"
outlined v-model:visa-type="currentFromDataEmployee.visaType"
v-model:current-index="employeeFormState.currentIndex" v-model:visa-number="currentFromDataEmployee.visaNumber"
v-model:employeeCheckup="currentFromDataEmployee.employeeCheckup" v-model:visa-issue-date="currentFromDataEmployee.visaIssueDate"
v-model:checkupTypeOption="optionStore.globalOption.insurancePlace" v-model:visa-expiry-date="currentFromDataEmployee.visaExpiryDate"
v-model:medicalBenefitOption="optionStore.globalOption.typeInsurance" v-model:visa-issuing-place="
v-model:insuranceCompanyOption=" currentFromDataEmployee.visaIssuingPlace
optionStore.globalOption.insurancePlace "
" v-model:visa-stay-until-date="
@delete=" currentFromDataEmployee.visaStayUntilDate
(index) => { "
employeeFormState.currentIndex = index; v-model:tm6-number="currentFromDataEmployee.tm6Number"
deleteEmployeeById({ type: 'healthCheck' }); v-model:entry-date="currentFromDataEmployee.entryDate"
} />
" </template>
@save="
(index) => { <template v-if="employeeFormState.currentTab === 'healthCheck'">
employeeFormState.currentIndex = index; <FormEmployeeHealthCheck
notify('create', $t('success')); v-if="employeeFormState.currentTab === 'healthCheck'"
} id="form-checkup"
" prefix-id="form-employee"
@undo=" dense
(index) => { outlined
if ( v-model:current-index="employeeFormState.currentIndex"
currentFromDataEmployee.employeeCheckup?.[index].statusSave === v-model:employeeCheckup="currentFromDataEmployee.employeeCheckup"
false v-model:checkupTypeOption="
) { optionStore.globalOption.insurancePlace
currentFromDataEmployee.employeeCheckup[index].statusSave = "
true; v-model:medicalBenefitOption="
} optionStore.globalOption.typeInsurance
} "
" v-model:insuranceCompanyOption="
@edit=" optionStore.globalOption.insurancePlace
(index) => { "
if (currentFromDataEmployee.employeeCheckup?.[index].statusSave) { @delete="
currentFromDataEmployee.employeeCheckup[index].statusSave = (index) => {
false; employeeFormState.currentIndex = index;
} deleteEmployeeById({ type: 'healthCheck' });
} }
" "
/> @save="
<FormEmployeeWorkHistory (index) => {
v-if="employeeFormState.currentTab === 'workHistory'" employeeFormState.currentIndex = index;
id="form-work-history" notify('create', $t('success'));
prefix-id="form-employee" }
dense "
outlined @undo="
v-model:current-index="employeeFormState.currentIndex" (index) => {
v-model:employee-work="currentFromDataEmployee.employeeWork" if (
v-model:position-name-option="optionStore.globalOption.position" currentFromDataEmployee.employeeCheckup?.[index]
v-model:job-type-option="optionStore.globalOption.businessType" .statusSave === false
v-model:workplace-option="optionStore.globalOption.area" ) {
@delete=" currentFromDataEmployee.employeeCheckup[index].statusSave =
(index) => { true;
employeeFormState.currentIndex = index; }
deleteEmployeeById({ type: 'work' }); }
} "
" @edit="
@save=" (index) => {
(index) => { if (
employeeFormState.currentIndex = index; currentFromDataEmployee.employeeCheckup?.[index].statusSave
} ) {
" currentFromDataEmployee.employeeCheckup[index].statusSave =
@undo=" false;
(index) => { }
if ( }
currentFromDataEmployee.employeeWork?.[index].statusSave === "
false />
) { </template>
currentFromDataEmployee.employeeWork[index].statusSave = true;
} <template v-if="employeeFormState.currentTab === 'workHistory'">
} <FormEmployeeWorkHistory
" v-if="employeeFormState.currentTab === 'workHistory'"
@edit=" id="form-work-history"
(index) => { prefix-id="form-employee"
if (currentFromDataEmployee.employeeWork?.[index].statusSave) { dense
currentFromDataEmployee.employeeWork[index].statusSave = false; outlined
} v-model:current-index="employeeFormState.currentIndex"
} v-model:employee-work="currentFromDataEmployee.employeeWork"
" v-model:position-name-option="optionStore.globalOption.position"
/> v-model:job-type-option="optionStore.globalOption.businessType"
<FormEmployeeOther v-model:workplace-option="optionStore.globalOption.area"
v-if="employeeFormState.currentTab === 'other'" @delete="
id="form-other" (index) => {
prefix-id="form-employee" employeeFormState.currentIndex = index;
dense deleteEmployeeById({ type: 'work' });
outlined }
v-model:employee-other="currentFromDataEmployee.employeeOtherInfo" "
@undo=" @save="
() => { (index) => {
if ( employeeFormState.currentIndex = index;
currentFromDataEmployee.employeeOtherInfo?.statusSave === false }
) { "
currentFromDataEmployee.employeeOtherInfo.statusSave = true; @undo="
} (index) => {
} if (
" currentFromDataEmployee.employeeWork?.[index].statusSave ===
@edit=" false
() => { ) {
if (currentFromDataEmployee.employeeOtherInfo?.statusSave) { currentFromDataEmployee.employeeWork[index].statusSave =
currentFromDataEmployee.employeeOtherInfo.statusSave = false; true;
} }
} }
" "
/> @edit="
(index) => {
if (
currentFromDataEmployee.employeeWork?.[index].statusSave
) {
currentFromDataEmployee.employeeWork[index].statusSave =
false;
}
}
"
/>
</template>
<template v-if="employeeFormState.currentTab === 'other'">
<FormEmployeeOther
v-if="employeeFormState.currentTab === 'other'"
id="form-other"
prefix-id="form-employee"
dense
outlined
v-model:employee-other="currentFromDataEmployee.employeeOtherInfo"
@undo="
() => {
if (
currentFromDataEmployee.employeeOtherInfo?.statusSave ===
false
) {
currentFromDataEmployee.employeeOtherInfo.statusSave = true;
}
}
"
@edit="
() => {
if (currentFromDataEmployee.employeeOtherInfo?.statusSave) {
currentFromDataEmployee.employeeOtherInfo.statusSave = false;
}
}
"
/>
</template>
</div>
</div> </div>
</div> </div>
</DialogForm> </DialogForm>
@ -2497,8 +2566,6 @@ const emptyCreateDialog = ref(false);
</template> </template>
<template v-if="employeeFormState.currentTab === 'healthCheck'"> <template v-if="employeeFormState.currentTab === 'healthCheck'">
>
<FormEmployeeHealthCheck <FormEmployeeHealthCheck
v-if="employeeFormState.currentTab === 'healthCheck'" v-if="employeeFormState.currentTab === 'healthCheck'"
id="drawer-form-checkup" id="drawer-form-checkup"