fix: FilterPanel when is multiline and VnTable vh on n toolbar #1657

Merged
jsegarra merged 15 commits from fix_itemFilter_multiLine into dev 2025-04-08 10:17:25 +00:00
5 changed files with 47 additions and 28 deletions

View File

@ -19,6 +19,7 @@ import { useQuasar, date } from 'quasar';
import { useStateStore } from 'stores/useStateStore';
import { useFilterParams } from 'src/composables/useFilterParams';
import { dashIfEmpty, toDate } from 'src/filters';
import { useTableHeight } from './filters/useTableHeight';
import CrudModel from 'src/components/CrudModel.vue';
import FormModelPopup from 'components/FormModelPopup.vue';
@ -117,7 +118,7 @@ const $props = defineProps({
},
tableHeight: {
type: String,

Al hacer F5 se calcula mal la altura de de la tabla,
La prueba la he hecho ticketSale he metido muchos registros para que supere el tamaño de la pagina y tenga que hacer scroll y después f5

Al hacer F5 se calcula mal la altura de de la tabla, La prueba la he hecho ticketSale he metido muchos registros para que supere el tamaño de la pagina y tenga que hacer scroll y después f5
default: '90vh',
default: undefined,
},
footer: {
type: Boolean,
@ -166,6 +167,7 @@ const tableRef = ref();
const params = ref(useFilterParams($attrs['data-key']).params);
const orders = ref(useFilterParams($attrs['data-key']).orders);
const app = inject('app');
const tableHeight = useTableHeight();
const editingRow = ref(null);
const editingField = ref(null);
@ -678,7 +680,7 @@ const rowCtrlClickFunction = computed(() => {
table-header-class="bg-header"
card-container-class="grid-three"
flat
:style="isTableMode && `max-height: ${tableHeight}`"
:style="isTableMode && `max-height: ${$props.tableHeight || tableHeight}`"
:virtual-scroll="isTableMode"
@virtual-scroll="handleScroll"
@row-click="(event, row) => handleRowClick(event, row)"

View File

@ -0,0 +1,18 @@
import { onMounted, nextTick, ref } from 'vue';
export function useTableHeight() {
const tableHeight = ref('90vh');
onMounted(async () => {
await nextTick();
let height = 100;
Array.from(document.querySelectorAll('[role="toolbar"]'))
.filter((element) => window.getComputedStyle(element).display !== 'none')
.forEach(() => {
height -= 10;
});
tableHeight.value = `${height}vh`;
});
return tableHeight;
}

View File

@ -340,3 +340,6 @@ input::-webkit-inner-spin-button {
.containerShrinked {
width: 70%;
}
.q-item__section--main ~ .q-item__section--side {
padding-inline: 0;
}

View File

@ -7,7 +7,7 @@ import FetchData from 'components/FetchData.vue';
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import VnInput from 'src/components/common/VnInput.vue';
import { QCheckbox } from 'quasar';
import VnCheckbox from 'src/components/common/VnCheckbox.vue';
import { useArrayData } from 'composables/useArrayData';
import { useValidator } from 'src/composables/useValidator';
@ -250,10 +250,9 @@ onMounted(async () => {
</QItemSection>
</QItem>
<!-- Tags filter -->
<QItem class="row items-center">
<QItemLabel>
<QItemLabel header>
{{ t('params.tags') }}
</QItemLabel>
<QIcon
name="add_circle"
class="fill-icon-on-hover q-ml-md"
@ -261,7 +260,7 @@ onMounted(async () => {
color="primary"
@click="tagValues.push({})"
/>
</QItem>
</QItemLabel>
<QItem
v-for="(tag, index) in tagValues"
:key="index"
@ -269,6 +268,7 @@ onMounted(async () => {
>
<QItemSection class="col">
<VnSelect
class="full-width"
:label="t('params.tag')"
v-model="tag.selectedTag"
:options="tagOptions"
@ -316,25 +316,19 @@ onMounted(async () => {
/>
</QItem>
<!-- Filter fields -->
<QItem class="row items-center">
<QItemLabel>
{{ t('More fields') }}
</QItemLabel>
<QItemLabel header
>{{ t('More fields') }}
<QIcon
name="add_circle"
class="fill-icon-on-hover q-ml-md"
size="sm"
color="primary"
@click="fieldFiltersValues.push({})"
/>
</QItem>
<QItem
v-for="(fieldFilter, index) in fieldFiltersValues"
:key="index"
class="row items-center"
>
/></QItemLabel>
<QItem v-for="(fieldFilter, index) in fieldFiltersValues" :key="index">
<QItemSection class="col">
<VnSelect
class="full-width"
:label="t('params.tag')"
:model-value="fieldFilter.selectedField"
:options="moreFields"
@ -355,7 +349,7 @@ onMounted(async () => {
/>
</QItemSection>
<QItemSection class="col">
<QCheckbox
<VnCheckbox
v-if="fieldFilter.selectedField?.type === 'boolean'"
v-model="fieldFilter.value"
:label="t('params.value')"
@ -370,13 +364,14 @@ onMounted(async () => {
@keydown.enter="applyFieldFilters(params, searchFn)"
/>
</QItemSection>
<QIcon
<QItemSection side
><QIcon
name="delete"
class="fill-icon-on-hover q-ml-xs"
size="sm"
color="primary"
@click="removeFieldFilter(index, params, searchFn)"
/>
/></QItemSection>
</QItem>
<QItem>
<QItemSection>

View File

@ -99,6 +99,7 @@ const columns = computed(() => [
align: 'left',
label: t('globals.quantity'),
name: 'quantity',
class: 'shrink',
format: (row) => toCurrency(row.quantity),
},
{
@ -791,7 +792,7 @@ watch(
{{ row?.item?.subName.toUpperCase() }}
</div>
</div>
<FetchedTags v-if="row.item" :item="row.item" :max-length="6" />
<FetchedTags v-if="row.item" :item="row.item" :columns="6" :max-length="6" />
<QPopupProxy v-if="row.id && isTicketEditable">
<VnInput
v-model="row.concept"