feat: upload file employee

This commit is contained in:
Methapon Metanipat 2024-08-28 15:37:59 +07:00
parent 511ff04bda
commit 46afed06e8

View file

@ -2051,6 +2051,11 @@ const emptyCreateDialog = ref(false);
anchor: 'form-visa', anchor: 'form-visa',
tab: 'personalInfo', tab: 'personalInfo',
}, },
{
name: $t('general.uploadFile'),
anchor: 'drawer-info-file-upload',
tab: 'personalInfo',
},
...(currentFromDataEmployee.employeeCheckup?.map((v, i) => ({ ...(currentFromDataEmployee.employeeCheckup?.map((v, i) => ({
name: $t('general.times', { number: i + 1 }), name: $t('general.times', { number: i + 1 }),
anchor: `form-employee-checkup-${i}`, anchor: `form-employee-checkup-${i}`,
@ -2162,6 +2167,7 @@ const emptyCreateDialog = ref(false);
employee employee
separator separator
title="customerEmployee.form.group.personalInfo" title="customerEmployee.form.group.personalInfo"
:readonly="!employeeFormState.isEmployeeEdit"
v-model:open="employeeFormState.dialogModal" v-model:open="employeeFormState.dialogModal"
v-model:prefixName="currentFromDataEmployee.namePrefix" v-model:prefixName="currentFromDataEmployee.namePrefix"
v-model:firstName="currentFromDataEmployee.firstName" v-model:firstName="currentFromDataEmployee.firstName"
@ -2178,6 +2184,7 @@ const emptyCreateDialog = ref(false);
<AddressForm <AddressForm
id="form-personal-address" id="form-personal-address"
prefix-id="form-employee" prefix-id="form-employee"
:readonly="!employeeFormState.isEmployeeEdit"
v-model:same-with-employer=" v-model:same-with-employer="
employeeFormState.formDataEmployeeSameAddr employeeFormState.formDataEmployeeSameAddr
" "
@ -2199,6 +2206,7 @@ const emptyCreateDialog = ref(false);
outlined outlined
separator separator
:title="$t('customerEmployee.form.group.passport')" :title="$t('customerEmployee.form.group.passport')"
:readonly="!employeeFormState.isEmployeeEdit"
v-model:passport-type="currentFromDataEmployee.passportType" v-model:passport-type="currentFromDataEmployee.passportType"
v-model:passport-number="currentFromDataEmployee.passportNumber" v-model:passport-number="currentFromDataEmployee.passportNumber"
v-model:passport-issue-date=" v-model:passport-issue-date="
@ -2225,6 +2233,7 @@ const emptyCreateDialog = ref(false);
dense dense
outlined outlined
title="customerEmployee.form.group.visa" title="customerEmployee.form.group.visa"
:readonly="!employeeFormState.isEmployeeEdit"
v-model:visa-type="currentFromDataEmployee.visaType" v-model:visa-type="currentFromDataEmployee.visaType"
v-model:visa-number="currentFromDataEmployee.visaNumber" v-model:visa-number="currentFromDataEmployee.visaNumber"
v-model:visa-issue-date="currentFromDataEmployee.visaIssueDate" v-model:visa-issue-date="currentFromDataEmployee.visaIssueDate"
@ -2239,6 +2248,66 @@ const emptyCreateDialog = ref(false);
v-model:entry-date="currentFromDataEmployee.entryDate" v-model:entry-date="currentFromDataEmployee.entryDate"
class="q-mb-xl" class="q-mb-xl"
/> />
<div class="row" id="drawer-info-file-upload">
<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-upload"
style="background-color: var(--surface-3)"
/>
{{ $t(`general.uploadFile`) }}
</div>
<UploadFile
:tree-file="
Object.values(
currentFromDataEmployee.file?.reduce<
Record<
string,
{ label: string; file: { label: string }[] }
>
>((a, c) => {
const _group = c.group || 'other';
if (!a[_group]) {
a[_group] = {
label: $t(
uploadFileListEmployee.find(
(v) => v.value === _group,
)?.label || _group,
),
file: [
{
label:
c.name ||
`${c.group}-${c.file?.name || Date.now()}`,
},
],
};
} else {
a[_group].file.push({
label:
c.name ||
`${c.group}-${c.file?.name || Date.now()}`,
});
}
return a;
}, {}) || {},
)
"
v-model:file="currentFromDataEmployee.file"
hide-action
:readonly="!employeeFormState.isEmployeeEdit"
:dropdown-list="uploadFileListEmployee"
@send-ocr="
async (_, file) => {
if (file) await ocrStore.sendOcr({ file });
}
"
/>
</div>
</template> </template>
<template v-if="employeeFormState.currentTab === 'healthCheck'"> <template v-if="employeeFormState.currentTab === 'healthCheck'">
@ -2340,6 +2409,7 @@ const emptyCreateDialog = ref(false);
} }
" "
/> />
a
</template> </template>
<template v-if="employeeFormState.currentTab === 'other'"> <template v-if="employeeFormState.currentTab === 'other'">
@ -2915,7 +2985,7 @@ const emptyCreateDialog = ref(false);
}, },
{ {
name: $t('อัปโหลดไฟล์'), name: $t('general.uploadFile'),
anchor: 'drawer-upload-file', anchor: 'drawer-upload-file',
tab: 'personalInfo', tab: 'personalInfo',
}, },
@ -3108,52 +3178,65 @@ const emptyCreateDialog = ref(false);
class="q-mb-xl" class="q-mb-xl"
/> />
<UploadFile <div class="row" id="drawer-upload-file">
:tree-file=" <div class="col-12 q-pb-sm text-weight-bold text-body1">
Object.values( <q-icon
currentFromDataEmployee.file?.reduce< flat
Record< size="xs"
string, class="q-pa-sm rounded q-mr-xs"
{ label: string; file: { label: string }[] } color="info"
> name="mdi-upload"
>((a, c) => { style="background-color: var(--surface-3)"
const _group = c.group || 'other'; />
if (!a[_group]) { {{ $t(`general.uploadFile`) }}
a[_group] = { </div>
label: $t( <UploadFile
uploadFileListEmployee.find( :tree-file="
(v) => v.value === _group, Object.values(
)?.label || _group, currentFromDataEmployee.file?.reduce<
), Record<
file: [ string,
{ { label: string; file: { label: string }[] }
label: >
c.name || >((a, c) => {
`${c.group}-${c.file?.name || Date.now()}`, const _group = c.group || 'other';
}, if (!a[_group]) {
], a[_group] = {
}; label: $t(
} else { uploadFileListEmployee.find(
a[_group].file.push({ (v) => v.value === _group,
label: )?.label || _group,
c.name || ),
`${c.group}-${c.file?.name || Date.now()}`, file: [
}); {
} label:
return a; c.name ||
}, {}) || {}, `${c.group}-${c.file?.name || Date.now()}`,
) },
" ],
v-model:file="currentFromDataEmployee.file" };
hide-action } else {
:readonly="!employeeFormState.isEmployeeEdit" a[_group].file.push({
:dropdown-list="uploadFileListEmployee" label:
@send-ocr=" c.name ||
async (_, file) => { `${c.group}-${c.file?.name || Date.now()}`,
if (file) await ocrStore.sendOcr({ file }); });
} }
" return a;
/> }, {}) || {},
)
"
v-model:file="currentFromDataEmployee.file"
hide-action
:readonly="!employeeFormState.isEmployeeEdit"
:dropdown-list="uploadFileListEmployee"
@send-ocr="
async (_, file) => {
if (file) await ocrStore.sendOcr({ file });
}
"
/>
</div>
</template> </template>
<template v-if="employeeFormState.currentTab === 'healthCheck'"> <template v-if="employeeFormState.currentTab === 'healthCheck'">
<FormEmployeeHealthCheck <FormEmployeeHealthCheck