refactor: edit type passpor

This commit is contained in:
Thanaphon Frappet 2024-11-11 14:58:24 +07:00
parent 6efce3c4bb
commit 82d28cc3aa
3 changed files with 124 additions and 109 deletions

View file

@ -12,36 +12,25 @@ import DatePicker from '../shared/DatePicker.vue';
const optionStore = useOptionStore();
const { locale } = useI18n();
const firstName = defineModel<string>('firstName');
const lastName = defineModel<string>('lastName');
const prefixName = defineModel<string>('prefixName');
const gender = defineModel<string>('gender');
const passportType = defineModel<string>('passportType');
const passportNumber = defineModel<string>('passportNumber');
const passportIssueDate = defineModel<Date | null | string>(
'passportIssueDate',
);
const passportExpiryDate = defineModel<Date | null | string>(
'passportExpiryDate',
);
const passportIssuingCountry = defineModel<string>('passportIssuingCountry');
const passportIssuingPlace = defineModel<string>('passportIssuingPlace');
const previousPassportReference = defineModel<string>(
'previousPassportReference',
);
const workerStatus = defineModel<string>('workerStatus');
const previousPassportNo = defineModel<string>('previousPassportNo');
const birthCountry = defineModel<string>('birthCountry');
const previousPassportRef = defineModel<string>('previousPassportRef');
const issuePlace = defineModel<string>('issuePlace');
const issueCountry = defineModel<string>('issueCountry');
const issueDate = defineModel<Date | null | string>('issueDate');
const type = defineModel<string>('type');
const expireDate = defineModel<Date>('expireDate');
const birthDate = defineModel<Date>('birthDate');
const workerStatus = defineModel<string>('workerStatus');
const nationality = defineModel<string>('nationality');
const placeOfBirth = defineModel<string>('placeOfBirth');
const countryOfBirth = defineModel<string>('countryOfBirth');
const firstNameEN = defineModel<string>('firstNameEn');
const middleNameEN = defineModel<string>('middleNameEn');
const gender = defineModel<string>('gender');
const lastNameEN = defineModel<string>('lastNameEn');
const lastName = defineModel<string>('lastName');
const middleNameEN = defineModel<string>('middleNameEn');
const middleName = defineModel<string>('middleName');
const firstNameEN = defineModel<string>('firstNameEn');
const firstName = defineModel<string>('firstName');
const namePrefix = defineModel<string>('namePrefix');
const passportNumber = defineModel<string>('passportNumber');
const genderOptions = ref<Record<string, unknown>[]>([]);
let genderFilter: (
@ -96,8 +85,8 @@ let workerStatusFilter: (
function matPreFixName() {
if (!gender.value) return;
if (gender.value === 'male') prefixName.value = 'mr';
else prefixName.value = 'mrs';
if (gender.value === 'male') namePrefix.value = 'mr';
else namePrefix.value = 'mrs';
}
onMounted(() => {
@ -187,7 +176,7 @@ watch(
);
watch(
() => prefixName.value,
() => namePrefix.value,
(v) => {
if (v === 'mr') gender.value = 'male';
else if (v !== '') gender.value = 'female';
@ -232,7 +221,7 @@ watch(
input-debounce="0"
option-value="value"
option-label="label"
v-model="passportType"
v-model="type"
class="col-12"
:dense="dense"
:readonly="readonly"
@ -304,11 +293,11 @@ watch(
:for="`${prefixId}-select-prefix-name`"
:label="$t('personnel.form.prefixName')"
@filter="prefixNameFilter"
:model-value="readonly ? prefixName || '-' : prefixName"
:model-value="readonly ? namePrefix || '-' : namePrefix"
@update:model-value="
(v) => (typeof v === 'string' ? (prefixName = v) : '')
(v) => (typeof v === 'string' ? (namePrefix = v) : '')
"
@clear="prefixName = ''"
@clear="namePrefix = ''"
>
<template v-slot:no-option>
<q-item>
@ -350,13 +339,10 @@ watch(
class="col-2"
:label="$t('customerEmployee.form.passportRef')"
:model-value="
readonly
? previousPassportReference || '-'
: previousPassportReference
readonly ? previousPassportRef || '-' : previousPassportRef
"
@update:model-value="
(v) =>
typeof v === 'string' ? (previousPassportReference = v) : ''
(v) => (typeof v === 'string' ? (previousPassportRef = v) : '')
"
/>
<q-input
@ -367,7 +353,7 @@ watch(
hide-bottom-space
class="col-12"
:label="$t('customerEmployee.form.passportPlace')"
v-model="passportIssuingPlace"
v-model="issuePlace"
:rules="[
(val) => (val && val.length > 0) || $t('form.error.required'),
]"
@ -385,7 +371,7 @@ watch(
option-value="value"
option-label="label"
class="col-12"
v-model="passportIssuingCountry"
v-model="issueCountry"
:dense="dense"
:readonly="readonly"
:hide-dropdown-icon="readonly"
@ -412,7 +398,7 @@ watch(
<DatePicker
:id="`${prefixId}-date-picker-passport-issueance`"
:label="$t('customerEmployee.form.passportIssueDate')"
v-model="passportIssueDate"
v-model="issueDate"
class="col-6"
:readonly="readonly"
:rules="[
@ -426,7 +412,7 @@ watch(
<DatePicker
:id="`${prefixId}-date-picker-passport-expire`"
:label="$t('customerEmployee.form.passportExpireDate')"
v-model="passportExpiryDate"
v-model="expireDate"
class="col-6"
:readonly="readonly"
:rules="[
@ -527,7 +513,7 @@ watch(
hide-bottom-space
class="col-6"
:label="$t('customerEmployee.form.previousPassportNumber')"
v-model="previousPassportNo"
v-model="previousPassportRef"
/>
<q-select
@ -549,11 +535,11 @@ watch(
:for="`${prefixId}-select-prefix-name`"
:label="$t('personnel.form.prefixName')"
@filter="prefixNameFilter"
:model-value="readonly ? prefixName || '-' : prefixName"
:model-value="readonly ? namePrefix || '-' : namePrefix"
@update:model-value="
(v) => (typeof v === 'string' ? (prefixName = v) : '')
(v) => (typeof v === 'string' ? (namePrefix = v) : '')
"
@clear="prefixName = ''"
@clear="namePrefix = ''"
>
<template v-slot:no-option>
<q-item>
@ -772,7 +758,8 @@ watch(
@filter="nationalityFilter"
:model-value="readonly ? nationality || '-' : nationality"
@update:model-value="
(v) => (typeof v === 'string' ? (nationality = v) : '')
(v) =>
typeof v === 'string' ? (birthCountry = nationality = v) : ''
"
@clear="nationality = ''"
>
@ -793,44 +780,12 @@ watch(
hide-bottom-space
class="col-4"
:label="$t('customerEmployee.form.placeOfBirth')"
v-model="placeOfBirth"
:model-value="optionStore.mapOption(birthCountry || '')"
@update:model-value="
(v) => (typeof v === 'string' ? (birthCountry = v) : '')
"
/>
<q-select
outlined
clearable
use-input
fill-input
emit-value
map-options
hide-selected
hide-bottom-space
input-debounce="0"
option-value="value"
option-label="label"
class="col-4"
:dense="dense"
:readonly="readonly"
:options="nationalityOptions"
:hide-dropdown-icon="readonly"
:for="`${prefixId}-select-visa-type`"
:label="$t('customerEmployee.form.countryOfbirth')"
@filter="nationalityFilter"
:model-value="readonly ? countryOfBirth || '-' : countryOfBirth"
@update:model-value="
(v) => (typeof v === 'string' ? (countryOfBirth = v) : '')
"
@clear="countryOfBirth = ''"
>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
{{ $t('general.noData') }}
</q-item-section>
</q-item>
</template>
</q-select>
<q-select
outlined
clearable
@ -844,13 +799,14 @@ watch(
option-value="value"
option-label="label"
class="col-6 col-md-4"
v-model="passportIssuingCountry"
v-model="issueCountry"
:dense="dense"
:readonly="readonly"
:hide-dropdown-icon="readonly"
:options="passportIssuingCountryOptions"
:for="`${prefixId}-select-passport-country`"
:label="$t('customerEmployee.form.passportIssuer')"
@update:model-value="(v) => (issuePlace = v)"
:rules="[
(val) =>
(val && val.length > 0) ||
@ -869,10 +825,31 @@ watch(
</template>
</q-select>
<q-input
:for="`${prefixId}-input-passport-place`"
:dense="dense"
outlined
:readonly="readonly"
hide-bottom-space
class="col-4"
:label="$t('customerEmployee.form.passportPlace')"
:model-value="
readonly
? optionStore.mapOption(issuePlace || '') || '-'
: optionStore.mapOption(issuePlace || '')
"
@update:model-value="
(v) => (typeof v === 'string' ? (issuePlace = v) : '')
"
:rules="[
(val) => (val && val.length > 0) || $t('form.error.required'),
]"
/>
<DatePicker
:id="`${prefixId}-date-picker-passport-issueance`"
:label="$t('customerEmployee.form.passportIssueDate')"
v-model="passportIssueDate"
v-model="issueDate"
class="col-6 col-md-3"
:readonly="readonly"
:rules="[
@ -886,7 +863,7 @@ watch(
<DatePicker
:id="`${prefixId}-date-picker-passport-expire`"
:label="$t('customerEmployee.form.passportExpireDate')"
v-model="passportExpiryDate"
v-model="expireDate"
class="col-6 col-md-3"
:readonly="readonly"
:rules="[

View file

@ -3040,15 +3040,25 @@ const emptyCreateDialog = ref(false);
:title="$t('customerEmployee.form.group.passport')"
:readonly="employeeFormState.currentIndexPassport !== index"
:full-name="employeeFormState.currentIndexPassport !== index"
v-model:passport-type="value.type"
v-model:birth-country="value.birthCountry"
v-model:previous-passportRef="value.previousPassportRef"
v-model:issue-place="value.issuePlace"
v-model:issue-country="value.issueCountry"
v-model:issue-date="value.issueDate"
v-model:type="value.type"
v-model:expire-date="value.expireDate"
v-model:birth-date="value.birthDate"
v-model:worker-status="value.workerStatus"
v-model:nationality="value.nationality"
v-model:gender="value.gender"
v-model:last-name-en="value.lastNameEN"
v-model:last-name="value.lastName"
v-model:middle-name-en="value.middleNameEN"
v-model:middle-name="value.middleName"
v-model:first-name-en="value.firstNameEN"
v-model:first-name="value.firstName"
v-model:name-prefix="value.namePrefix"
v-model:passport-number="value.number"
v-model:prefix-name="currentFromDataEmployee.namePrefix"
v-model:first-name="currentFromDataEmployee.firstName"
v-model:last-name="currentFromDataEmployee.lastName"
v-model:passport-issue-date="value.issueDate"
v-model:passport-expiry-date="value.expireDate"
v-model:passport-issuing-place="value.issuePlace"
v-model:passport-issuing-country="value.issueCountry"
>
<template v-slot:expiryDate>
{{ $t('general.expirationDate') }} :
@ -4714,15 +4724,25 @@ const emptyCreateDialog = ref(false);
:title="$t('customerEmployee.form.group.passport')"
:readonly="employeeFormState.currentIndexPassport !== index"
:full-name="employeeFormState.currentIndexPassport !== index"
v-model:passport-type="value.type"
v-model:birth-country="value.birthCountry"
v-model:previous-passportRef="value.previousPassportRef"
v-model:issue-place="value.issuePlace"
v-model:issue-country="value.issueCountry"
v-model:issue-date="value.issueDate"
v-model:type="value.type"
v-model:expire-date="value.expireDate"
v-model:birth-date="value.birthDate"
v-model:worker-status="value.workerStatus"
v-model:nationality="value.nationality"
v-model:gender="value.gender"
v-model:last-name-en="value.lastNameEN"
v-model:last-name="value.lastName"
v-model:middle-name-en="value.middleNameEN"
v-model:middle-name="value.middleName"
v-model:first-name-en="value.firstNameEN"
v-model:first-name="value.firstName"
v-model:name-prefix="value.namePrefix"
v-model:passport-number="value.number"
v-model:prefix-name="currentFromDataEmployee.namePrefix"
v-model:first-name="currentFromDataEmployee.firstName"
v-model:last-name="currentFromDataEmployee.lastName"
v-model:passport-issue-date="value.issueDate"
v-model:passport-expiry-date="value.expireDate"
v-model:passport-issuing-place="value.issuePlace"
v-model:passport-issuing-country="value.issueCountry"
>
<template v-slot:expiryDate>
{{ $t('general.expirationDate') }} :
@ -4939,6 +4959,9 @@ const emptyCreateDialog = ref(false);
v-model:employee-checkup="
currentFromDataEmployee.employeeCheckup
"
v-model:checkup-results-option="
optionStore.globalOption.checkupResults
"
v-model:checkup-type-option="
optionStore.globalOption.insurancePlace
"

View file

@ -297,14 +297,29 @@ export type EmployeeVisaPayload = {
};
export type EmployeePassportPayload = {
id?: string;
number: string;
type: string;
issueDate: Date;
expireDate: Date;
issueCountry: string;
birthCountry: string;
previousPassportRef: string;
issuePlace: string;
previousPassportRef?: string | null;
issueCountry: string;
issueDate: Date;
type: string;
expireDate: Date;
birthDate: Date;
updatedAt: Date;
createdAt: Date;
workerStatus: string;
nationality: string;
gender: string;
lastNameEN: string;
lastName: string;
middleNameEN: string;
middleName: string;
firstNameEN: string;
firstName: string;
namePrefix: string;
employeeId: string;
number: string;
id?: string;
};
export type EmployeeInCountryNoticePayload = {