diff --git a/src/components/CrudModel.vue b/src/components/CrudModel.vue index cb079c7e1..c39a83d4c 100644 --- a/src/components/CrudModel.vue +++ b/src/components/CrudModel.vue @@ -50,7 +50,7 @@ const $props = defineProps({ }, insertOnLoad: { type: Boolean, - default: true, + default: false, }, defaultSave: { type: Boolean, @@ -64,6 +64,10 @@ const $props = defineProps({ type: Boolean, default: true, }, + defaultAdd: { + type: Boolean, + default: false, + }, selected: { type: Object, default: null, @@ -96,7 +100,6 @@ const saveButtonRef = ref(null); const watchChanges = ref(); let isNotEqual = ref(false); let isLastRowEmpty = ref(false); -const isFirstFetch = ref(true); const formUrl = computed(() => $props.url); const rowsContainer = ref(null); @@ -134,10 +137,9 @@ async function fetch(data) { const rows = keyData ? data[keyData] : data; resetData(rows); emit('onFetch', rows); - if (isFirstFetch.value && $props.insertOnLoad) { + if ($props.insertOnLoad) { await insert(); } - isFirstFetch.value = false; return rows; } @@ -338,9 +340,16 @@ function removeIndexField(data) { } async function handleTab(event) { - const focusableElements = rowsContainer.value?.querySelectorAll( - 'input, select, textarea, [tabindex]:not([tabindex="-1"]), .q-field__native, .q-checkbox__input' + if (event.target.classList.contains('q-checkbox__input') || + event.target.type === 'checkbox' || + event.target.closest('.q-checkbox')) { + return; + } + + const focusableElements = rowsContainer.value?.querySelectorAll( + 'input:not([type="checkbox"]), select, textarea, [tabindex]:not([tabindex="-1"]):not(.q-checkbox__input), .q-field__native' ); + if (!focusableElements || focusableElements.length === 0) return; const lastElement = focusableElements[focusableElements.length - 1]; @@ -348,7 +357,7 @@ async function handleTab(event) { event.preventDefault(); await insert(); await nextTick(); - const newElements = rowsContainer.value.querySelectorAll('input, select, textarea, [tabindex]:not([tabindex="-1"])'); + const newElements = rowsContainer.value.querySelectorAll('input:not([type="checkbox"]), select, textarea, [tabindex]:not([tabindex="-1"]):not(.q-checkbox__input)'); if (newElements.length > focusableElements.length) { newElements[newElements.length - 1].focus(); } @@ -376,7 +385,7 @@ watch(formUrl, async () => { v-bind="$attrs" > diff --git a/src/pages/Claim/Card/ClaimDevelopment.vue b/src/pages/Claim/Card/ClaimDevelopment.vue index d17c6b4e6..afd686f42 100644 --- a/src/pages/Claim/Card/ClaimDevelopment.vue +++ b/src/pages/Claim/Card/ClaimDevelopment.vue @@ -138,6 +138,8 @@ const columns = computed(() => [ :filter="developmentsFilter" ref="claimDevelopmentForm" :data-required="{ claimFk: route.params.id }" + :defaultAdd="true" + :insert-on-load="true" v-model:selected="selected" @save-changes="$router.push(`/claim/${route.params.id}/action`)" :default-save="false" diff --git a/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue b/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue index 932ff784c..2fc53a397 100644 --- a/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue +++ b/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue @@ -89,7 +89,8 @@ onBeforeMount(async () => await setTaxableBase()); data-key="InvoiceInDueDays" url="InvoiceInDueDays" :filter="filter" - :insert-on-load="false" + :insert-on-load="true" + :default-add="true" auto-load :data-required="{ invoiceInFk: invoiceId }" v-model:selected="rowsSelected" diff --git a/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue b/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue index 6f8642313..35f35b6bf 100644 --- a/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue +++ b/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue @@ -89,7 +89,9 @@ const columns = computed(() => [ url="InvoiceInIntrastats" auto-load :data-required="{ invoiceInFk: invoiceInId }" + :default-add="true" :filter="filter" + :insert-on-load="true" v-model:selected="rowsSelected" @on-fetch="(data) => (invoceInIntrastat = data)" > diff --git a/src/pages/InvoiceIn/Card/InvoiceInVat.vue b/src/pages/InvoiceIn/Card/InvoiceInVat.vue index 61c3040ae..3bd1b27fb 100644 --- a/src/pages/InvoiceIn/Card/InvoiceInVat.vue +++ b/src/pages/InvoiceIn/Card/InvoiceInVat.vue @@ -187,6 +187,8 @@ function setCursor(ref) { url="InvoiceInTaxes" :filter="filter" :data-required="{ invoiceInFk: $route.params.id }" + :default-add="true" + :insert-on-load="true" auto-load v-model:selected="rowsSelected" :go-to="`/invoice-in/${$route.params.id}/due-day`" diff --git a/src/pages/Item/Card/ItemBarcode.vue b/src/pages/Item/Card/ItemBarcode.vue index 53b4514b7..f2f2d89a7 100644 --- a/src/pages/Item/Card/ItemBarcode.vue +++ b/src/pages/Item/Card/ItemBarcode.vue @@ -51,6 +51,7 @@ const submit = async (rows) => { [ workerFk: entityId, }, }" + :crud-model="{ + insertOnLoad: false, + }" + order="paymentDate DESC" :columns="columns" auto-load diff --git a/src/pages/Worker/Card/WorkerFormation.vue b/src/pages/Worker/Card/WorkerFormation.vue index e8680f7dd..39949010c 100644 --- a/src/pages/Worker/Card/WorkerFormation.vue +++ b/src/pages/Worker/Card/WorkerFormation.vue @@ -128,6 +128,9 @@ const columns = computed(() => [ workerFk: entityId, }, }" + :crud-model="{ + insertOnLoad: false, + }" order="id DESC" :columns="columns" auto-load diff --git a/src/pages/Worker/Card/WorkerMedical.vue b/src/pages/Worker/Card/WorkerMedical.vue index c04f6496b..8b21eadb4 100644 --- a/src/pages/Worker/Card/WorkerMedical.vue +++ b/src/pages/Worker/Card/WorkerMedical.vue @@ -109,6 +109,9 @@ const columns = [ workerFk: entityId, }, }" + :crud-model="{ + insertOnLoad: false, + }" order="date DESC" :columns="columns" auto-load diff --git a/src/pages/Worker/Card/WorkerPda.vue b/src/pages/Worker/Card/WorkerPda.vue index 408260256..ec7b2edf4 100644 --- a/src/pages/Worker/Card/WorkerPda.vue +++ b/src/pages/Worker/Card/WorkerPda.vue @@ -170,6 +170,9 @@ function isSigned(row) { 'row-key': 'deviceProductionFk', selection: 'multiple', }" + :crud-model="{ + insertOnLoad: false, + }" :table-filter="{ hiddenTags: ['userFk'] }" >