refactor: add new data employee
This commit is contained in:
parent
204f3ccacd
commit
70cbc4b1d2
2 changed files with 83 additions and 49 deletions
|
|
@ -6,6 +6,7 @@ const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
items: any;
|
items: any;
|
||||||
|
newItems: any;
|
||||||
color?: string;
|
color?: string;
|
||||||
borderSearchSection?: boolean;
|
borderSearchSection?: boolean;
|
||||||
itemClass?: string;
|
itemClass?: string;
|
||||||
|
|
@ -15,6 +16,7 @@ const props = withDefaults(
|
||||||
}>(),
|
}>(),
|
||||||
{
|
{
|
||||||
items: () => [],
|
items: () => [],
|
||||||
|
newItems: () => [],
|
||||||
color: 'var(--brand-1)',
|
color: 'var(--brand-1)',
|
||||||
noItemsIcon: 'mdi-close',
|
noItemsIcon: 'mdi-close',
|
||||||
itemClass: 'col-md-2 col-sm-6 col-12',
|
itemClass: 'col-md-2 col-sm-6 col-12',
|
||||||
|
|
@ -83,24 +85,57 @@ function assignSelect(to: unknown[], from: unknown[]) {
|
||||||
<slot name="tab"></slot>
|
<slot name="tab"></slot>
|
||||||
|
|
||||||
<section class="col q-ma-md">
|
<section class="col q-ma-md">
|
||||||
<div v-if="items.length > 0" class="row q-col-gutter-md">
|
<div v-if="items.length > 0 || newItems.length > 0" class="column">
|
||||||
<div v-for="(item, i) in items" :key="i" :class="`${itemClass}`">
|
<!-- NOTE: START - item -->
|
||||||
<div
|
<div class="row q-col-gutter-md">
|
||||||
class="rounded cursor-pointer relative-position"
|
<div v-for="(item, i) in items" :key="i" :class="`${itemClass}`">
|
||||||
:style="`border: 1px solid ${selectedItem.includes(item) ? color : 'transparent'}`"
|
|
||||||
@click="() => select(item)"
|
|
||||||
>
|
|
||||||
<div
|
<div
|
||||||
v-if="selectedItem.includes(item)"
|
class="rounded cursor-pointer relative-position"
|
||||||
class="badge absolute-top-right flex justify-center q-ma-sm"
|
:style="`border: 1px solid ${selectedItem.includes(item) ? color : 'transparent'}`"
|
||||||
:style="`background-color: ${color}`"
|
@click="() => select(item)"
|
||||||
>
|
>
|
||||||
{{ selectedItem.indexOf(item) + 1 }}
|
<div
|
||||||
|
v-if="selectedItem.includes(item)"
|
||||||
|
class="badge absolute-top-right flex justify-center q-ma-sm"
|
||||||
|
:style="`background-color: ${color}`"
|
||||||
|
>
|
||||||
|
{{ selectedItem.indexOf(item) + 1 }}
|
||||||
|
</div>
|
||||||
|
<slot name="data" :item="item"></slot>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- NOTE: END - item -->
|
||||||
|
|
||||||
|
<q-separator
|
||||||
|
v-if="newItems.length !== 0"
|
||||||
|
dark
|
||||||
|
inset
|
||||||
|
:class="{ 'q-mb-md': !$q.screen.lt.md, 'q-my-md': $q.screen.lt.md }"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- NOTE: START - newItem -->
|
||||||
|
<div v-if="newItems.length !== 0" class="row q-col-gutter-md">
|
||||||
|
<div v-for="(item, i) in newItems" :key="i" :class="`${itemClass}`">
|
||||||
|
<div
|
||||||
|
class="rounded cursor-pointer relative-position"
|
||||||
|
:style="`border: 1px solid ${selectedItem.includes(item) ? color : 'transparent'}`"
|
||||||
|
@click="() => select(item)"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-if="selectedItem.includes(item)"
|
||||||
|
class="badge absolute-top-right flex justify-center q-ma-sm"
|
||||||
|
:style="`background-color: ${color}`"
|
||||||
|
>
|
||||||
|
{{ selectedItem.indexOf(item) + 1 }}
|
||||||
|
</div>
|
||||||
|
<slot name="newData" :item="item"></slot>
|
||||||
</div>
|
</div>
|
||||||
<slot name="data" :item="item"></slot>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- NOTE: END - newItem -->
|
||||||
|
|
||||||
<div v-else class="flex justify-center full-height">
|
<div v-else class="flex justify-center full-height">
|
||||||
<span class="col column items-center justify-center app-text-muted">
|
<span class="col column items-center justify-center app-text-muted">
|
||||||
<q-avatar style="background: var(--surface-0)" class="q-mb-md">
|
<q-avatar style="background: var(--surface-0)" class="q-mb-md">
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,8 @@ const date = ref();
|
||||||
|
|
||||||
const preSelectedWorker = ref<Employee[]>([]);
|
const preSelectedWorker = ref<Employee[]>([]);
|
||||||
const selectedWorker = ref<Employee[]>([]);
|
const selectedWorker = ref<Employee[]>([]);
|
||||||
const workerList = ref<EmployeeWorker[]>([]);
|
const workerList = ref<Employee[]>([]);
|
||||||
|
const newWorkerList = ref<EmployeeWorker[]>([]);
|
||||||
|
|
||||||
const agentPrice = ref(false);
|
const agentPrice = ref(false);
|
||||||
const summaryPrice = ref<{
|
const summaryPrice = ref<{
|
||||||
|
|
@ -326,22 +327,7 @@ onMounted(async () => {
|
||||||
const retEmp = await customerStore.fetchBranchEmployee(
|
const retEmp = await customerStore.fetchBranchEmployee(
|
||||||
quotationFormData.value.customerBranchId,
|
quotationFormData.value.customerBranchId,
|
||||||
);
|
);
|
||||||
if (retEmp)
|
if (retEmp) workerList.value = workerList.value = retEmp.data.result;
|
||||||
workerList.value = retEmp.data.result.map((value) => ({
|
|
||||||
alienReferencNumber: '',
|
|
||||||
documentExpireDate: new Date(),
|
|
||||||
lastNameEN: value.lastNameEN,
|
|
||||||
lastName: value.lastName,
|
|
||||||
middleNameEN: value.middleNameEN,
|
|
||||||
middleName: value.middleName,
|
|
||||||
firstNameEN: value.firstNameEN,
|
|
||||||
firstName: value.firstName,
|
|
||||||
namePrefix: value.namePrefix,
|
|
||||||
nationality: value.nationality,
|
|
||||||
gender: value.gender,
|
|
||||||
dateOfBirth: value.dateOfBirth,
|
|
||||||
code: value.code,
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pageState.isLoaded = true;
|
pageState.isLoaded = true;
|
||||||
|
|
@ -357,21 +343,7 @@ watch(
|
||||||
if (!v) return;
|
if (!v) return;
|
||||||
const retEmp = await customerStore.fetchBranchEmployee(v);
|
const retEmp = await customerStore.fetchBranchEmployee(v);
|
||||||
if (retEmp) {
|
if (retEmp) {
|
||||||
workerList.value = retEmp.data.result.map((value) => ({
|
workerList.value = workerList.value = retEmp.data.result;
|
||||||
alienReferencNumber: '',
|
|
||||||
documentExpireDate: new Date(),
|
|
||||||
lastNameEN: value.lastNameEN,
|
|
||||||
lastName: value.lastName,
|
|
||||||
middleNameEN: value.middleNameEN,
|
|
||||||
middleName: value.middleName,
|
|
||||||
firstNameEN: value.firstNameEN,
|
|
||||||
firstName: value.firstName,
|
|
||||||
namePrefix: value.namePrefix,
|
|
||||||
nationality: value.nationality,
|
|
||||||
gender: value.gender,
|
|
||||||
dateOfBirth: value.dateOfBirth,
|
|
||||||
code: value.code,
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -523,10 +495,7 @@ watch(
|
||||||
</nav>
|
</nav>
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
<div
|
<div class="surface-1 q-pa-md full-width">
|
||||||
class="surface-1 q-pa-md full-width"
|
|
||||||
style="overflow-x: scroll"
|
|
||||||
>
|
|
||||||
<ProductItem
|
<ProductItem
|
||||||
:agent-price="agentPrice"
|
:agent-price="agentPrice"
|
||||||
@delete="toggleDeleteProduct"
|
@delete="toggleDeleteProduct"
|
||||||
|
|
@ -642,6 +611,7 @@ watch(
|
||||||
ref="refSelectZoneEmployee"
|
ref="refSelectZoneEmployee"
|
||||||
v-model:selected-item="preSelectedWorker"
|
v-model:selected-item="preSelectedWorker"
|
||||||
:items="workerList"
|
:items="workerList"
|
||||||
|
:new-items="newWorkerList"
|
||||||
>
|
>
|
||||||
<template #top>
|
<template #top>
|
||||||
<AddButton
|
<AddButton
|
||||||
|
|
@ -681,6 +651,35 @@ watch(
|
||||||
}"
|
}"
|
||||||
></PersonCard>
|
></PersonCard>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template #newData="{ item }">
|
||||||
|
<PersonCard
|
||||||
|
noAction
|
||||||
|
prefixId="asda"
|
||||||
|
class="full-width"
|
||||||
|
:data="{
|
||||||
|
name:
|
||||||
|
$i18n.locale === 'eng'
|
||||||
|
? `${item.firstNameEN} ${item.lastNameEN}`
|
||||||
|
: `${item.firstName} ${item.lastName}`,
|
||||||
|
code: item.code,
|
||||||
|
female: item.gender === 'female',
|
||||||
|
male: item.gender === 'male',
|
||||||
|
img: `${baseUrl}/customer/${item.id}/image/${item.selectedImage}`,
|
||||||
|
fallbackImg: '/images/employee-avatar.png',
|
||||||
|
detail: [
|
||||||
|
{
|
||||||
|
icon: 'mdi-passport',
|
||||||
|
value: optionStore.mapOption(item.nationality),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: 'mdi-clock-outline',
|
||||||
|
value: calculateAge(item.dateOfBirth),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}"
|
||||||
|
></PersonCard>
|
||||||
|
</template>
|
||||||
</SelectZone>
|
</SelectZone>
|
||||||
</section>
|
</section>
|
||||||
</DialogForm>
|
</DialogForm>
|
||||||
|
|
@ -710,7 +709,7 @@ watch(
|
||||||
:title="$t('form.title.create', { name: $t('customer.employee') })"
|
:title="$t('form.title.create', { name: $t('customer.employee') })"
|
||||||
:submit="
|
:submit="
|
||||||
() => {
|
() => {
|
||||||
workerList.push(formDataEmployee);
|
newWorkerList.push(formDataEmployee);
|
||||||
quotationForm.injectNewEmployee(formDataEmployee, () =>
|
quotationForm.injectNewEmployee(formDataEmployee, () =>
|
||||||
setDefaultFormEmployee(),
|
setDefaultFormEmployee(),
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue