diff --git a/src/composables/useArrayData.js b/src/composables/useArrayData.js index 998ee0576..04d7bfef7 100644 --- a/src/composables/useArrayData.js +++ b/src/composables/useArrayData.js @@ -156,9 +156,10 @@ export function useArrayData(key, userOptions) { delete store.userParams[param]; delete params[param]; if (store.filter?.where) { - delete store.filter.where[ - Object.keys(exprBuilder ? exprBuilder(param) : param)[0] - ]; + const key = Object.keys( + exprBuilder && exprBuilder(param) ? exprBuilder(param) : param + ); + if (key[0]) delete store.filter.where[key[0]]; if (Object.keys(store.filter.where).length === 0) { delete store.filter.where; } diff --git a/src/pages/Item/ItemList.vue b/src/pages/Item/ItemList.vue index 9c1ab9df6..3b3697612 100644 --- a/src/pages/Item/ItemList.vue +++ b/src/pages/Item/ItemList.vue @@ -70,7 +70,7 @@ const exprBuilder = (param, value) => { } }; -const params = reactive({}); +const params = reactive({ isFloramondo: false, isActive: true }); const applyColumnFilter = async (col) => { try { diff --git a/src/pages/Item/ItemListFilter.vue b/src/pages/Item/ItemListFilter.vue index a99811e2f..ad6167014 100644 --- a/src/pages/Item/ItemListFilter.vue +++ b/src/pages/Item/ItemListFilter.vue @@ -4,13 +4,14 @@ import { useI18n } from 'vue-i18n'; import { onMounted } from 'vue'; import { useStateStore } from 'stores/useStateStore'; +import FetchData from 'components/FetchData.vue'; import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue'; import VnSelectFilter from 'src/components/common/VnSelectFilter.vue'; import VnInput from 'src/components/common/VnInput.vue'; -import FetchData from 'components/FetchData.vue'; -import VnInputDate from 'src/components/common/VnInputDate.vue'; +import { QCheckbox } from 'quasar'; import { useArrayData } from 'composables/useArrayData'; +import { useValidator } from 'src/composables/useValidator'; import axios from 'axios'; const { t } = useI18n(); @@ -23,6 +24,7 @@ const props = defineProps({ }); const stateStore = useStateStore(); +const validationsStore = useValidator(); const itemTypesRef = ref(null); const categoriesOptions = ref([]); @@ -30,19 +32,27 @@ const itemTypesOptions = ref([]); const buyersOptions = ref([]); const suppliersOptions = ref([]); const tagValues = ref([]); +const fieldFiltersValues = ref([]); +const moreFields = ref([]); const arrayData = useArrayData(props.dataKey); -const itemTypesFilter = computed(() => { - return { - fields: ['id', 'name', 'categoryFk'], - include: 'category', - order: 'name ASC', - where: { categoryFk: arrayData.store?.userParams?.categoryFk }, - }; -}); +const itemTypesFilter = { + fields: ['id', 'name', 'categoryFk'], + include: 'category', + order: 'name ASC', + where: {}, +}; -// TODO: checkear este watch que fetchee cuando cambie categoryFk -watch(itemTypesFilter.value.where.categoryFk, () => itemTypesRef.value.fetch()); +const onCategoryChange = async (categoryFk, search) => { + if (!categoryFk) { + itemTypesFilter.where.categoryFk = null; + delete itemTypesFilter.where.categoryFk; + } else { + itemTypesFilter.where.categoryFk = categoryFk; + } + search(); + await itemTypesRef.value.fetch(); +}; const getSelectedTagValues = async (tag) => { try { @@ -62,45 +72,60 @@ const getSelectedTagValues = async (tag) => { } }; -// const applyColumnFilter = async (col) => { -// try { -// params[col.field] = col.columnFilter.filterValue; -// await arrayData.addFilter({ params }); -// } catch (err) { -// console.error('Error applying column filter', err); -// } -// }; - -const applyTags = () => { - // params.tags = tagValues.value - // .filter((tag) => tag.selectedTag && tag.value) - // .map((tag) => ({ - // tagFk: tag.selectedTag.id, - // tagName: tag.selectedTag.name, - // value: tag.value, - // })); - console.log('apply tags'); - const params = { - tags: tagValues.value - .filter((tag) => tag.selectedTag && tag.value) - .map((tag) => ({ - tagFk: tag.selectedTag.id, - tagName: tag.selectedTag.name, - value: tag.value, - })), - }; - console.log('params:: ', params); - arrayData.addFilter({ params }); - // search(); +const applyTags = (params, search) => { + params.tags = tagValues.value + .filter((tag) => tag.selectedTag && tag.value) + .map((tag) => ({ + tagFk: tag.selectedTag.id, + tagName: tag.selectedTag.name, + value: tag.value, + })); + search(); }; const removeTag = (index, params, search) => { (tagValues.value || []).splice(index, 1); - // applyTags(params, search); + applyTags(params, search); +}; + +const applyFieldFilters = (params) => { + fieldFiltersValues.value.forEach((fieldFilter) => { + if ( + fieldFilter.selectedField && + (fieldFilter.value !== null || + fieldFilter.value !== '' || + fieldFilter.value !== undefined) + ) { + params[fieldFilter.name] = fieldFilter.value; + } + }); + arrayData.applyFilter({ params }); +}; + +const removeFieldFilter = (index, params, search) => { + delete params[fieldFiltersValues.value[index].name]; + (fieldFiltersValues.value || []).splice(index, 1); + applyFieldFilters(params, search); }; onMounted(async () => { stateStore.rightDrawer = true; + if (arrayData.store?.userParams?.categoryFk) + itemTypesFilter.where.categoryFk = arrayData.store?.userParams?.categoryFk; + await itemTypesRef.value.fetch(); + const { models } = validationsStore; + const properties = models.Item?.properties || {}; + + const _moreFields = ['id', 'description', 'name', 'isActive']; + + _moreFields.forEach((field) => { + let prop = properties[field]; + moreFields.value.push({ + name: field, + label: prop ? prop.description : field, + type: prop ? prop.type : null, + }); + }); }); @@ -116,7 +141,6 @@ onMounted(async () => { url="ItemTypes" :filter="itemTypesFilter" @on-fetch="(data) => (itemTypesOptions = data)" - auto-load /> { /> @@ -136,16 +160,16 @@ onMounted(async () => { auto-load @on-fetch="(data) => (tagOptions = data)" /> - - - +
{{ itemTypesFilter }}
+ @@ -335,7 +424,13 @@ en: tags: Tags tag: Tag value: Value + isFloramondo: Floramondo + isActive: Active + description: Description + name: Name + id: ID es: + More fields: Más campos params: search: Búsqueda general categoryFk: Reino @@ -345,4 +440,9 @@ es: tags: Etiquetas tag: Etiqueta value: Valor + isFloramondo: Floramondo + isActive: Activo + description: Descripción + name: Nombre + id: ID diff --git a/src/router/modules/item.js b/src/router/modules/item.js index 41f3ec92a..a9e7090b3 100644 --- a/src/router/modules/item.js +++ b/src/router/modules/item.js @@ -6,6 +6,7 @@ export default { meta: { title: 'items', icon: 'vn:item', + moduleName: 'Item', }, component: RouterView, redirect: { name: 'ItemMain' },