Compare commits

...

5 commits

Author SHA1 Message Date
Thanaphon Frappet
2511690d54 refactor: handle input require name en
Some checks failed
Spell Check / Spell Check with Typos (push) Failing after 9s
2025-04-04 11:28:41 +07:00
Thanaphon Frappet
25b62de139 fix: i18n error
Some checks failed
Spell Check / Spell Check with Typos (push) Failing after 7s
2025-04-04 11:27:51 +07:00
Thanaphon Frappet
68e1abb4cb refactor: edit i18n 2025-04-04 11:08:46 +07:00
Thanaphon Frappet
bc507b7b4c refactor: add option type visa 2025-04-04 11:08:46 +07:00
Thanaphon Frappet
6f16964859 refactor: show option only eng 2025-04-04 11:08:46 +07:00
10 changed files with 94 additions and 24 deletions

View file

@ -1,5 +1,28 @@
{ {
"eng": { "eng": {
"visaType": [
{
"label": "Non-LA",
"value": "nla"
},
{
"label": "Non-B",
"value": "nb"
},
{
"label": "TV.60",
"value": "tv60"
},
{
"label": "Non-TR",
"value": "ntr"
},
{
"label": "TV.30",
"value": "tv30"
}
],
"workerStatus": [ "workerStatus": [
{ {
"label": "Normal", "label": "Normal",
@ -1051,6 +1074,29 @@
}, },
"tha": { "tha": {
"visaType": [
{
"label": "Non-LA",
"value": "nla"
},
{
"label": "Non-B",
"value": "nb"
},
{
"label": "ผผ.60",
"value": "tv60"
},
{
"label": "Non-TR",
"value": "ntr"
},
{
"label": "ผผ.30",
"value": "tv30"
}
],
"workerStatus": [ "workerStatus": [
{ {
"label": "ปกติ", "label": "ปกติ",

View file

@ -2,6 +2,7 @@ import { defineBoot } from '#q-app/wrappers';
import { createI18n } from 'vue-i18n'; import { createI18n } from 'vue-i18n';
import messages from 'src/i18n'; import messages from 'src/i18n';
import { Lang } from 'src/utils/ui';
export type MessageLanguages = keyof typeof messages; export type MessageLanguages = keyof typeof messages;
// Type-define 'eng' as the master schema for the resource // Type-define 'eng' as the master schema for the resource
@ -26,7 +27,7 @@ export const i18n = createI18n<
MessageLanguages, MessageLanguages,
false false
>({ >({
locale: 'en-US', locale: Lang.Thai,
legacy: false, legacy: false,
messages, messages,
}); });

View file

@ -196,7 +196,11 @@ watch(
class="col" class="col"
:label="$t('personnel.form.firstName')" :label="$t('personnel.form.firstName')"
v-model="firstName" v-model="firstName"
:rules="[(val: string) => !!val || $t('form.error.required')]" :rules="
employee
? []
: [(val: string) => !!val || $t('form.error.required')]
"
/> />
<q-input <q-input
@ -289,10 +293,22 @@ watch(
class="col" class="col"
label="Surname" label="Surname"
v-model="lastNameEN" v-model="lastNameEN"
:rules="[ :rules="
(val: string) => employee
!val || /^[A-Za-z\s]+$/.test(val) || $t('form.error.letterOnly'), ? [
]" (val: string) => !!val || $t('form.error.required'),
(val: string) =>
!val ||
/^[A-Za-z\s]+$/.test(val) ||
$t('form.error.letterOnly'),
]
: [
(val: string) =>
!val ||
/^[A-Za-z\s]+$/.test(val) ||
$t('form.error.letterOnly'),
]
"
/> />
</div> </div>
@ -394,11 +410,15 @@ watch(
:readonly="readonly" :readonly="readonly"
:label="$t('form.birthDate')" :label="$t('form.birthDate')"
:disabled-dates="disabledAfterToday" :disabled-dates="disabledAfterToday"
:rules="[ :rules="
(val: string) => employee
!!val || ? []
$t('form.error.selectField', { field: $t('form.birthDate') }), : [
]" (val: string) =>
!!val ||
$t('form.error.selectField', { field: $t('form.birthDate') }),
]
"
/> />
<q-input <q-input
@ -480,7 +500,6 @@ watch(
:hide-dropdown-icon="readonly" :hide-dropdown-icon="readonly"
:for="`${prefixId}-select-gender`" :for="`${prefixId}-select-gender`"
:label="$t('form.gender')" :label="$t('form.gender')"
:rules="[(val: string) => !!val || $t('form.error.required')]"
@filter="genderFilter" @filter="genderFilter"
> >
<template v-slot:no-option> <template v-slot:no-option>
@ -513,7 +532,6 @@ watch(
:hide-dropdown-icon="readonly" :hide-dropdown-icon="readonly"
:for="`${prefixId}-select-nationality`" :for="`${prefixId}-select-nationality`"
:label="$t('general.nationality')" :label="$t('general.nationality')"
:rules="[(val: string) => !!val || $t('form.error.required')]"
@filter="nationalityFilter" @filter="nationalityFilter"
> >
<template v-slot:no-option> <template v-slot:no-option>

View file

@ -106,7 +106,7 @@ const employeeOther = defineModel<EmployeeOtherCreate>('employeeOther');
:readonly="readonly || employeeOther.statusSave" :readonly="readonly || employeeOther.statusSave"
hide-bottom-space hide-bottom-space
class="col-md-3 col-6" class="col-md-3 col-6"
:label="$t('form.firstName')" :label="$t('general.nativeLanguage', { msg: $t('form.firstName') })"
:model-value="employeeOther.fatherFirstName" :model-value="employeeOther.fatherFirstName"
@update:model-value=" @update:model-value="
(v) => (v) =>
@ -122,7 +122,7 @@ const employeeOther = defineModel<EmployeeOtherCreate>('employeeOther');
:readonly="readonly || employeeOther.statusSave" :readonly="readonly || employeeOther.statusSave"
hide-bottom-space hide-bottom-space
class="col-md-3 col-6" class="col-md-3 col-6"
:label="$t('form.lastName')" :label="$t('general.nativeLanguage', { msg: $t('form.lastName') })"
:model-value="employeeOther.fatherLastName" :model-value="employeeOther.fatherLastName"
@update:model-value=" @update:model-value="
(v) => (v) =>
@ -177,7 +177,7 @@ const employeeOther = defineModel<EmployeeOtherCreate>('employeeOther');
:readonly="readonly || employeeOther.statusSave" :readonly="readonly || employeeOther.statusSave"
hide-bottom-space hide-bottom-space
class="col-md-3 col-6" class="col-md-3 col-6"
:label="$t('form.firstName')" :label="$t('general.nativeLanguage', { msg: $t('form.firstName') })"
:model-value="employeeOther.motherFirstName" :model-value="employeeOther.motherFirstName"
@update:model-value=" @update:model-value="
(v) => (v) =>
@ -193,7 +193,7 @@ const employeeOther = defineModel<EmployeeOtherCreate>('employeeOther');
:readonly="readonly || employeeOther.statusSave" :readonly="readonly || employeeOther.statusSave"
hide-bottom-space hide-bottom-space
class="col-md-3 col-6" class="col-md-3 col-6"
:label="$t('form.lastName')" :label="$t('general.nativeLanguage', { msg: $t('form.lastName') })"
:model-value="employeeOther.motherLastName" :model-value="employeeOther.motherLastName"
@update:model-value=" @update:model-value="
(v) => (v) =>

View file

@ -103,7 +103,7 @@ onMounted(() => {
'label', 'label',
); );
passportIssuingCountryFilter = selectFilterOptionRefMod( passportIssuingCountryFilter = selectFilterOptionRefMod(
ref(optionStore.globalOption.nationality), ref(optionStore.rawOption?.eng.nationality),
passportIssuingCountryOptions, passportIssuingCountryOptions,
'label', 'label',
); );
@ -121,13 +121,13 @@ onMounted(() => {
); );
genderFilter = selectFilterOptionRefMod( genderFilter = selectFilterOptionRefMod(
ref(optionStore.globalOption?.gender), ref(optionStore.rawOption?.eng.gender),
genderOptions, genderOptions,
'label', 'label',
); );
nationalityFilter = selectFilterOptionRefMod( nationalityFilter = selectFilterOptionRefMod(
ref(optionStore.globalOption?.nationality), ref(optionStore.rawOption?.eng.nationality),
nationalityOptions, nationalityOptions,
'label', 'label',
); );
@ -152,7 +152,7 @@ watch(
); );
passportIssuingCountryFilter = selectFilterOptionRefMod( passportIssuingCountryFilter = selectFilterOptionRefMod(
ref(optionStore.globalOption.nationality), ref(optionStore.rawOption?.eng.nationality),
passportIssuingCountryOptions, passportIssuingCountryOptions,
'label', 'label',
); );
@ -164,13 +164,13 @@ watch(
); );
genderFilter = selectFilterOptionRefMod( genderFilter = selectFilterOptionRefMod(
ref(optionStore.globalOption?.gender), ref(optionStore.rawOption?.eng.gender),
genderOptions, genderOptions,
'label', 'label',
); );
nationalityFilter = selectFilterOptionRefMod( nationalityFilter = selectFilterOptionRefMod(
ref(optionStore.globalOption?.nationality), ref(optionStore.rawOption?.eng.nationality),
nationalityOptions, nationalityOptions,
'label', 'label',
); );

View file

@ -92,7 +92,7 @@ let workerTypeFilter: (
onMounted(() => { onMounted(() => {
visaTypeFilter = selectFilterOptionRefMod( visaTypeFilter = selectFilterOptionRefMod(
ref(optionStore.globalOption?.nationality), ref(optionStore.globalOption?.visaType),
visaTypeOptions, visaTypeOptions,
'label', 'label',
); );

View file

@ -153,6 +153,7 @@ export default {
tableOfContent: 'Table of Contents', tableOfContent: 'Table of Contents',
draw: 'Draw', draw: 'Draw',
newUpload: 'New Upload', newUpload: 'New Upload',
nativeLanguage: '{msg} Native Language',
}, },
menu: { menu: {

View file

@ -153,6 +153,7 @@ export default {
tableOfContent: 'สารบัญ', tableOfContent: 'สารบัญ',
draw: 'วาด', draw: 'วาด',
newUpload: 'อัปโหลดใหม่', newUpload: 'อัปโหลดใหม่',
nativeLanguage: '{msg} ภาษาต้นทาง',
}, },
menu: { menu: {

View file

@ -2918,6 +2918,7 @@ const emptyCreateDialog = ref(false);
class="q-mb-xl" class="q-mb-xl"
/> />
<AddressForm <AddressForm
disabledRule
id="form-personal-address" id="form-personal-address"
prefix-id="form-employee" prefix-id="form-employee"
:readonly="!employeeFormState.isEmployeeEdit" :readonly="!employeeFormState.isEmployeeEdit"
@ -4871,6 +4872,7 @@ const emptyCreateDialog = ref(false);
<AddressForm <AddressForm
id="drawer-form-personal-address" id="drawer-form-personal-address"
employee employee
disabledRule
v-model:address="currentFromDataEmployee.address" v-model:address="currentFromDataEmployee.address"
v-model:address-en="currentFromDataEmployee.addressEN" v-model:address-en="currentFromDataEmployee.addressEN"
v-model:moo="currentFromDataEmployee.moo" v-model:moo="currentFromDataEmployee.moo"

View file

@ -75,6 +75,7 @@ const useOptionStore = defineStore('optionStore', () => {
} }
return { return {
rawOption,
globalOption, globalOption,
mapOption, mapOption,
}; };