From e2ede08319f220a4e591e05c265154fb6147560e Mon Sep 17 00:00:00 2001 From: puriphatt Date: Thu, 30 Jan 2025 16:54:28 +0700 Subject: [PATCH] refactor: 02 => optimize screen.xs fetch scroll logic --- .../02_personnel-management/MainPage.vue | 618 ++++++++++-------- 1 file changed, 333 insertions(+), 285 deletions(-) diff --git a/src/pages/02_personnel-management/MainPage.vue b/src/pages/02_personnel-management/MainPage.vue index 4d3f8553..f0d317ca 100644 --- a/src/pages/02_personnel-management/MainPage.vue +++ b/src/pages/02_personnel-management/MainPage.vue @@ -74,6 +74,7 @@ const imageDialog = ref(false); const infoDrawerEdit = ref(false); const refreshImageState = ref(false); const refFilter = ref>(); +const firstScroll = ref(false); const inputSearch = ref(''); const currentTab = ref('ALL'); @@ -434,7 +435,7 @@ async function onSubmit(excludeDialog?: boolean) { } } - await fetchUserList(); + $q.screen.xs ? await fetchUserEditXs() : await fetchUserList(); typeStats.value = await userStore.typeStats(); const res = await branchStore.userStats(formData.value.userType); if (res) { @@ -466,9 +467,14 @@ async function onSubmit(excludeDialog?: boolean) { } } - currentTab.value = formData.value.userType; + if ( + currentTab.value === formData.value.userType && + currentTab.value !== 'ALL' + ) { + $q.screen.gt.xs ? await fetchUserEditXs() : await fetchUserList(); + } - await fetchUserList(); + currentTab.value = formData.value.userType; typeStats.value = await userStore.typeStats(); const res = await branchStore.userStats(formData.value.userType); @@ -658,6 +664,9 @@ async function fetchUserList() { if (!userData.value) { userData.value = ret; } else { + userData.value.page = ret.page; + userData.value.pageSize = ret.pageSize; + userData.value.total = ret.total; userData.value?.result.push(...ret.result); } } else { @@ -666,6 +675,26 @@ async function fetchUserList() { } } +async function fetchUserEditXs() { + const ret = await userStore.fetchList({ + includeBranch: true, + pageSize: userData.value?.result.length || 0, + page: 1, + query: !!inputSearch.value ? inputSearch.value : undefined, + userType: currentTab.value === 'ALL' ? undefined : currentTab.value, + status: + statusFilter.value === 'all' + ? undefined + : statusFilter.value === 'statusACTIVE' + ? 'ACTIVE' + : 'INACTIVE', + }); + + if (ret) { + userData.value = ret; + } +} + function noPersonnel() { const number = typeStats.value && @@ -700,8 +729,11 @@ onMounted(async () => { watch( () => currentTab.value, async (label) => { + firstScroll.value = true; mapUserType(label); - await fetchUserList(); + if (userData.value) userData.value.result = []; + currentPage.value = 1; + if ($q.screen.gt.xs) await fetchUserList(); const res = await branchStore.userStats(label); if (res) { userStats.value = res; @@ -734,7 +766,12 @@ watch( }, ); -watch([inputSearch, statusFilter, pageSize], async () => await fetchUserList()); +watch([inputSearch, statusFilter, pageSize], async () => { + if (userData.value) userData.value.result = []; + currentPage.value = 1; + + await fetchUserList(); +}); watch( () => $q.screen.lt.md, @@ -1083,74 +1120,79 @@ watch( class="flex full-width full-height q-pa-md surface-2 column col scroll" > - + +