diff --git a/src/components/common/VnSection.vue b/src/components/common/VnSection.vue index 510865530..16ea79047 100644 --- a/src/components/common/VnSection.vue +++ b/src/components/common/VnSection.vue @@ -52,7 +52,8 @@ const sectionValue = computed(() => $props.section ?? $props.dataKey); const isMainSection = computed(() => { const isSame = sectionValue.value == route.name; if (!isSame && arrayData) { - arrayData.reset(['userParams', 'userFilter']); + arrayData.reset(['userParams', 'filter']); + arrayData.setCurrentFilter(); } return isSame; }); diff --git a/src/components/common/VnSelect.vue b/src/components/common/VnSelect.vue index a3e85655d..43134dbff 100644 --- a/src/components/common/VnSelect.vue +++ b/src/components/common/VnSelect.vue @@ -232,12 +232,15 @@ async function fetchFilter(val) { } else defaultWhere = { [key]: getVal(val) }; const where = { ...(val ? defaultWhere : {}), ...$props.where }; $props.exprBuilder && Object.assign(where, $props.exprBuilder(key, val)); - const fetchOptions = { where, include, limit }; - if (fields) fetchOptions.fields = fields; - if (sortBy) fetchOptions.order = sortBy; + const filterOptions = { where, include, limit }; + if (fields) filterOptions.fields = fields; + if (sortBy) filterOptions.order = sortBy; arrayData.resetPagination(); - const { data } = await arrayData.applyFilter({ filter: fetchOptions }); + const { data } = await arrayData.applyFilter( + { filter: filterOptions }, + { updateRouter: false } + ); setOptions(data); return data; } diff --git a/src/components/ui/VnSearchbar.vue b/src/components/ui/VnSearchbar.vue index bfaa76588..a5ca97b70 100644 --- a/src/components/ui/VnSearchbar.vue +++ b/src/components/ui/VnSearchbar.vue @@ -113,23 +113,20 @@ onMounted(() => { }); async function search() { - const staticParams = Object.keys(store.userParams ?? {}).length - ? store.userParams - : store.defaultParams; arrayData.resetPagination(); - const filter = { - params: { - search: searchText.value, - }, - filter: props.filter, - }; + let filter = { params: { search: searchText.value } }; if (!props.searchRemoveParams || !searchText.value) { - filter.params = { - ...staticParams, - search: searchText.value, + filter = { + params: { + ...store.userParams, + search: searchText.value, + }, + filter: store.filter, }; + } else { + arrayData.reset(['currentFilter', 'userParams']); } if (props.whereFilter) { diff --git a/src/composables/useArrayData.js b/src/composables/useArrayData.js index 6fb22a340..d76053ce9 100644 --- a/src/composables/useArrayData.js +++ b/src/composables/useArrayData.js @@ -33,10 +33,11 @@ export function useArrayData(key, userOptions) { : JSON.parse(params?.filter ?? '{}'); delete params.filter; - store.userParams = { ...store.userParams, ...params }; + store.userParams = params; store.filter = { ...filter, ...store.userFilter }; if (filter?.order) store.order = filter.order; } + setCurrentFilter(); }); if (key && userOptions) setOptions(); @@ -78,11 +79,7 @@ export function useArrayData(key, userOptions) { cancelRequest(); canceller = new AbortController(); - const { params, limit } = getCurrentFilter(); - - store.currentFilter = JSON.parse(JSON.stringify(params)); - delete store.currentFilter.filter.include; - store.currentFilter.filter = JSON.stringify(store.currentFilter.filter); + const { params, limit } = setCurrentFilter(); let exprFilter; if (store?.exprBuilder) { @@ -107,7 +104,7 @@ export function useArrayData(key, userOptions) { store.hasMoreData = limit && response.data.length >= limit; if (!append && !isDialogOpened() && updateRouter) { - if (updateStateParams(response.data)?.redirect) return; + if (updateStateParams(response.data)?.redirect && !store.keepData) return; } store.isLoading = false; canceller = null; @@ -142,12 +139,12 @@ export function useArrayData(key, userOptions) { } } - async function applyFilter({ filter, params }) { + async function applyFilter({ filter, params }, fetchOptions = {}) { if (filter) store.userFilter = filter; store.filter = {}; if (params) store.userParams = { ...params }; - const response = await fetch({}); + const response = await fetch(fetchOptions); return response; } @@ -276,14 +273,14 @@ export function useArrayData(key, userOptions) { } function getCurrentFilter() { + if (!Object.keys(store.userParams).length) + store.userParams = store.defaultParams ?? {}; + const filter = { limit: store.limit, + ...store.userFilter, }; - let userParams = { ...store.userParams }; - - Object.assign(filter, store.userFilter); - let where; if (filter?.where || store.filter?.where) where = Object.assign(filter?.where ?? {}, store.filter?.where ?? {}); @@ -291,7 +288,7 @@ export function useArrayData(key, userOptions) { filter.where = where; const params = { filter }; - Object.assign(params, userParams); + Object.assign(params, store.userParams); if (params.filter) params.filter.skip = store.skip; if (store?.order && typeof store?.order == 'string') store.order = [store.order]; if (store.order?.length) params.filter.order = [...store.order]; @@ -300,6 +297,14 @@ export function useArrayData(key, userOptions) { return { filter, params, limit: filter.limit }; } + function setCurrentFilter() { + const { params, limit } = getCurrentFilter(); + store.currentFilter = JSON.parse(JSON.stringify(params)); + delete store.currentFilter.filter.include; + store.currentFilter.filter = JSON.stringify(store.currentFilter.filter); + return { params, limit }; + } + function processData(data, { map = true, append = true }) { if (!append) { store.data = []; @@ -333,6 +338,7 @@ export function useArrayData(key, userOptions) { applyFilter, addFilter, getCurrentFilter, + setCurrentFilter, addFilterWhere, addOrder, deleteOrder, diff --git a/src/composables/useFilterParams.js b/src/composables/useFilterParams.js index 2878e4b76..07dcdf99b 100644 --- a/src/composables/useFilterParams.js +++ b/src/composables/useFilterParams.js @@ -29,8 +29,12 @@ export function useFilterParams(key) { orders.value = orderObject; } - function setUserParams(watchedParams) { - if (!watchedParams || Object.keys(watchedParams).length == 0) return; + function setUserParams(watchedParams = {}) { + if (Object.keys(watchedParams).length == 0) { + params.value = {}; + orders.value = {}; + return; + } if (typeof watchedParams == 'string') watchedParams = JSON.parse(watchedParams); if (typeof watchedParams?.filter == 'string') diff --git a/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue b/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue index 4d9e180eb..9fa3bcbcb 100644 --- a/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue +++ b/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue @@ -6,24 +6,16 @@ import axios from 'axios'; import { toCurrency, toDate } from 'src/filters'; import VnLv from 'src/components/ui/VnLv.vue'; import CardDescriptor from 'components/ui/CardDescriptor.vue'; -import FetchData from 'src/components/FetchData.vue'; -import VnSelect from 'src/components/common/VnSelect.vue'; -import { useCapitalize } from 'src/composables/useCapitalize'; import SupplierDescriptorProxy from 'src/pages/Supplier/Card/SupplierDescriptorProxy.vue'; import InvoiceInDescriptorMenu from './InvoiceInDescriptorMenu.vue'; const $props = defineProps({ id: { type: Number, default: null } }); -const { push, currentRoute } = useRouter(); +const { currentRoute } = useRouter(); const { t } = useI18n(); const cardDescriptorRef = ref(); -const correctionDialogRef = ref(); const entityId = computed(() => $props.id || +currentRoute.value.params.id); const totalAmount = ref(); -const config = ref(); -const cplusRectificationTypes = ref([]); -const siiTypeInvoiceIns = ref([]); -const invoiceCorrectionTypes = ref([]); const filter = { include: [ @@ -85,12 +77,6 @@ const routes = reactive({ return { name: 'EntryCard', params: { id } }; }, }); -const correctionFormData = reactive({ - invoiceReason: 2, - invoiceType: 2, - invoiceClass: 6, -}); -const isNotFilled = computed(() => Object.values(correctionFormData).includes(null)); onBeforeMount(async () => { await setInvoiceCorrection(entityId.value); @@ -122,38 +108,8 @@ async function setInvoiceCorrection(id) { (corrected) => corrected.correctingFk ); } - -const createInvoiceInCorrection = async () => { - const { data: correctingId } = await axios.post( - 'InvoiceIns/corrective', - Object.assign(correctionFormData, { id: entityId.value }) - ); - push({ path: `/invoice-in/${correctingId}/summary` }); -};