From 86437338508d3a4ed9b5d29e7ca5c73430f3fcd8 Mon Sep 17 00:00:00 2001 From: alexm Date: Fri, 28 Feb 2025 14:28:09 +0100 Subject: [PATCH] feat(orderCatalog): load when reload section --- src/pages/Order/Card/OrderCatalog.vue | 28 ++++++++++++++++++++- src/pages/Order/Card/OrderCatalogFilter.vue | 20 +++++---------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/pages/Order/Card/OrderCatalog.vue b/src/pages/Order/Card/OrderCatalog.vue index 4b3992f21..dbb66c0ec 100644 --- a/src/pages/Order/Card/OrderCatalog.vue +++ b/src/pages/Order/Card/OrderCatalog.vue @@ -10,6 +10,7 @@ import OrderCatalogFilter from 'src/pages/Order/Card/OrderCatalogFilter.vue'; import VnSearchbar from 'src/components/ui/VnSearchbar.vue'; import { useArrayData } from 'src/composables/useArrayData'; import RightMenu from 'src/components/common/RightMenu.vue'; +import { onUnmounted } from 'vue'; const route = useRoute(); const router = useRouter(); @@ -23,16 +24,40 @@ const catalogParams = { const arrayData = useArrayData(dataKey, { url: 'Orders/CatalogFilter', userParams: catalogParams, + exprBuilder, + searchUrl: 'table', }); const store = arrayData.store; const tags = ref([]); const itemRefs = ref({}); -onMounted(() => { +onMounted(async () => { stateStore.rightDrawer = true; checkOrderConfirmation(); + + if ( + arrayData.store.userParams && + Object.keys(arrayData.store.userParams).some((key) => !key.startsWith('order')) + ) { + await arrayData.fetch({}); + } }); +onUnmounted(() => { + arrayData.destroy(); +}); + +function exprBuilder(param, value) { + switch (param) { + case 'categoryFk': + case 'typeFk': + return { [param]: value }; + case 'search': + if (/^\d+$/.test(value)) return { 'i.id': value }; + else return { 'i.name': { like: `%${value}%` } }; + } +} + async function checkOrderConfirmation() { const response = await axios.get(`Orders/${route.params.id}`); if (response.data.isConfirmed === 1) { @@ -96,6 +121,7 @@ watch( :tag-value="tagValue" :tags="tags" :initial-catalog-params="catalogParams" + :arrayData /> diff --git a/src/pages/Order/Card/OrderCatalogFilter.vue b/src/pages/Order/Card/OrderCatalogFilter.vue index 262f503fd..476d16df5 100644 --- a/src/pages/Order/Card/OrderCatalogFilter.vue +++ b/src/pages/Order/Card/OrderCatalogFilter.vue @@ -24,6 +24,10 @@ const props = defineProps({ type: Array, required: true, }, + arrayData: { + type: Object, + required: true, + }, }); const { t } = useI18n(); @@ -74,17 +78,6 @@ const loadTypes = async (id) => { typeList.value = data; }; -function exprBuilder(param, value) { - switch (param) { - case 'categoryFk': - case 'typeFk': - return { [param]: value }; - case 'search': - if (/^\d+$/.test(value)) return { 'i.id': value }; - else return { 'i.name': { like: `%${value}%` } }; - } -} - const applyTags = (tagInfo, params, search) => { if (!tagInfo || !tagInfo.values.length) { params.tagGroups = null; @@ -152,9 +145,8 @@ function addOrder(value, field, params) { :data-key="props.dataKey" :hidden-tags="['filter', 'orderFk', 'orderBy']" :unremovable-params="['orderFk', 'orderBy']" - :expr-builder="exprBuilder" :custom-tags="['tagGroups', 'categoryFk']" - :redirect="false" + :arrayData >