feat: employee gender filter

This commit is contained in:
puriphatt 2024-06-13 11:07:04 +00:00
parent 27e85cee3b
commit 24a491288a
2 changed files with 66 additions and 9 deletions

View file

@ -123,6 +123,7 @@ const infoDrawerEmployee = ref(false);
const infoDrawerEmployeeEdit = ref(false); const infoDrawerEmployeeEdit = ref(false);
const infoEmployeePersonCard = ref(); const infoEmployeePersonCard = ref();
const statsEmployee = ref(0); const statsEmployee = ref(0);
const statsEmployeeGender = ref<{ male: number; female: number }>();
const formDataEmployeeOwner = ref<{ const formDataEmployeeOwner = ref<{
id: string; id: string;
address: string; address: string;
@ -689,8 +690,8 @@ async function fetchListCustomer() {
} }
} }
async function fetchListEmployee() { async function fetchListEmployee(param?: { gender: string }) {
const resultListEmployee = await employeeStore.fetchList(); const resultListEmployee = await employeeStore.fetchList(param);
if (resultListEmployee) { if (resultListEmployee) {
currentPageEmployee.value = resultListEmployee.page; currentPageEmployee.value = resultListEmployee.page;
maxPageEmployee.value = Math.ceil( maxPageEmployee.value = Math.ceil(
@ -1029,6 +1030,11 @@ onMounted(async () => {
const resultStatsEmployee = await employeeStore.getStatsEmployee(); const resultStatsEmployee = await employeeStore.getStatsEmployee();
if (resultStatsEmployee) statsEmployee.value = resultStatsEmployee; if (resultStatsEmployee) statsEmployee.value = resultStatsEmployee;
const resultStatsEmployeeGender =
await employeeStore.getStatsEmployeeGender();
if (resultStatsEmployeeGender)
statsEmployeeGender.value = resultStatsEmployeeGender;
const resultListEmployee = await employeeStore.fetchList({ const resultListEmployee = await employeeStore.fetchList({
page: 1, page: 1,
pageSize: pageSizeEmployee.value, pageSize: pageSizeEmployee.value,
@ -1121,6 +1127,10 @@ watch(
formDataEmployee.value.customerBranchId = formDataEmployeeOwner.value.id; formDataEmployee.value.customerBranchId = formDataEmployeeOwner.value.id;
}, },
); );
watch(genderselector, async (gender) => {
await fetchListEmployee({ gender: gender });
});
</script> </script>
<template> <template>
@ -1238,9 +1248,9 @@ watch(
v-else v-else
v-model="genderselector" v-model="genderselector"
id="btn-mode" id="btn-mode"
dense class="no-shadow"
class="no-shadow bordered" padding="0px"
toggle-color="grey-4" toggle-color="grey-3"
size="xs" size="xs"
:options="[ :options="[
{ value: 'female', slot: 'female' }, { value: 'female', slot: 'female' },
@ -1249,22 +1259,43 @@ watch(
> >
<template v-slot:female> <template v-slot:female>
<div <div
class="q-px-sm q-py-xs app-text-female text-weight-medium text-body2 row items-center" class="bordered-t bordered-l bordered-b q-px-md q-py-sm app-text-female text-weight-medium text-body2 row items-center"
@click="
async () => {
if (genderselector === 'female') {
await fetchListEmployee();
genderselector = '';
}
}
"
> >
<q-icon <q-icon
name="mdi-gender-female" name="mdi-gender-female"
class="q-mr-sm" class="q-mr-sm"
size="18px" size="18px"
/> />
5 คน <div v-if="statsEmployeeGender">
{{ statsEmployeeGender.female }} คน
</div>
</div> </div>
</template> </template>
<template v-slot:male> <template v-slot:male>
<div <div
class="q-px-sm q-py-xs app-text-male text-weight-medium text-body2 row items-center" class="bordered q-px-md q-py-sm app-text-male text-weight-medium text-body2 row items-center"
@click="
async () => {
if (genderselector === 'male') {
await fetchListEmployee();
genderselector = '';
}
}
"
> >
<q-icon name="mdi-gender-male" class="q-mr-sm" size="18px" /> <q-icon name="mdi-gender-male" class="q-mr-sm" size="18px" />
5 คน <div v-if="statsEmployeeGender">
{{ statsEmployeeGender.male }} คน
</div>
</div> </div>
</template> </template>
</q-btn-toggle> </q-btn-toggle>

View file

@ -22,6 +22,7 @@ const useEmployeeStore = defineStore('api-employee', () => {
page?: number; page?: number;
pageSize?: number; pageSize?: number;
query?: string; query?: string;
gender?: string;
}, },
flow?: { flow?: {
sessionId: string; sessionId: string;
@ -36,6 +37,7 @@ const useEmployeeStore = defineStore('api-employee', () => {
} }
if (opts?.page && opts.page > 0) params.append('page', `${opts.page}`); if (opts?.page && opts.page > 0) params.append('page', `${opts.page}`);
if (opts?.query) params.append('query', opts.query); if (opts?.query) params.append('query', opts.query);
if (opts?.gender) params.append('gender', opts.gender);
const query = params.toString(); const query = params.toString();
@ -227,6 +229,29 @@ const useEmployeeStore = defineStore('api-employee', () => {
} }
} }
async function getStatsEmployeeGender(
customerBranchId?: string,
flow?: {
sessionId: string;
refTransactionId: string;
transactionId: string;
},
) {
const res = await api.get(
`/employee/stats/gender${customerBranchId ? '?customerBranchId=' + customerBranchId : ''}/`,
{
headers: {
'X-Session-Id': flow?.sessionId,
'X-Rtid': flow?.refTransactionId,
'X-Tid': flow?.transactionId,
},
},
);
if (res && res.status === 200) {
return res.data;
}
}
return { return {
data, data,
globalOption, globalOption,
@ -240,6 +265,7 @@ const useEmployeeStore = defineStore('api-employee', () => {
fetchWork, fetchWork,
fetchOther, fetchOther,
getStatsEmployee, getStatsEmployee,
getStatsEmployeeGender,
}; };
}); });