Merge pull request 'test' (!1439) from test into dev
gitea/salix-front/pipeline/head This commit looks good Details

Reviewed-on: #1439
Reviewed-by: Jon Elias <jon@verdnatura.es>
This commit is contained in:
Javi Gallego 2025-02-19 07:56:43 +00:00
commit 8b238d0098
6 changed files with 38 additions and 38 deletions

View File

@ -30,22 +30,5 @@ export default {
} catch (error) { } catch (error) {
console.error(error); console.error(error);
} }
form.addEventListener('keyup', function (evt) {
if (evt.key === 'Enter' && !that.$attrs['prevent-submit']) {
const input = evt.target;
if (input.type == 'textarea' && evt.shiftKey) {
evt.preventDefault();
let { selectionStart, selectionEnd } = input;
input.value =
input.value.substring(0, selectionStart) +
'\n' +
input.value.substring(selectionEnd);
selectionStart = selectionEnd = selectionStart + 1;
return;
}
evt.preventDefault();
that.onSubmit();
}
});
}, },
}; };

View File

@ -1,6 +1,6 @@
<script setup> <script setup>
import axios from 'axios'; import axios from 'axios';
import { onMounted, onUnmounted, computed, ref, watch, nextTick } from 'vue'; import { onMounted, onUnmounted, computed, ref, watch, nextTick, useAttrs } from 'vue';
import { onBeforeRouteLeave, useRouter, useRoute } from 'vue-router'; import { onBeforeRouteLeave, useRouter, useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { useQuasar } from 'quasar'; import { useQuasar } from 'quasar';
@ -22,6 +22,7 @@ const { validate } = useValidator();
const { notify } = useNotify(); const { notify } = useNotify();
const route = useRoute(); const route = useRoute();
const myForm = ref(null); const myForm = ref(null);
const attrs = useAttrs();
const $props = defineProps({ const $props = defineProps({
url: { url: {
type: String, type: String,
@ -113,7 +114,7 @@ const defaultButtons = computed(() => ({
color: 'primary', color: 'primary',
icon: 'save', icon: 'save',
label: 'globals.save', label: 'globals.save',
click: () => myForm.value.onSubmit(false), click: async () => await save(),
type: 'submit', type: 'submit',
}, },
reset: { reset: {
@ -208,8 +209,7 @@ async function fetch() {
} }
} }
async function save(prevent = false) { async function save() {
if (prevent) return;
if ($props.observeFormChanges && !hasChanges.value) if ($props.observeFormChanges && !hasChanges.value)
return notify('globals.noChanges', 'negative'); return notify('globals.noChanges', 'negative');
@ -284,6 +284,22 @@ function trimData(data) {
return data; return data;
} }
async function onKeyup(evt) {
if (evt.key === 'Enter' && !('prevent-submit' in attrs)) {
const input = evt.target;
if (input.type == 'textarea' && evt.shiftKey) {
let { selectionStart, selectionEnd } = input;
input.value =
input.value.substring(0, selectionStart) +
'\n' +
input.value.substring(selectionEnd);
selectionStart = selectionEnd = selectionStart + 1;
return;
}
await save();
}
}
defineExpose({ defineExpose({
save, save,
isLoading, isLoading,
@ -298,12 +314,12 @@ defineExpose({
<QForm <QForm
ref="myForm" ref="myForm"
v-if="formData" v-if="formData"
@submit="save(!!$event)" @submit.prevent
@keyup.prevent="onKeyup"
@reset="reset" @reset="reset"
class="q-pa-md" class="q-pa-md"
:style="maxWidth ? 'max-width: ' + maxWidth : ''" :style="maxWidth ? 'max-width: ' + maxWidth : ''"
id="formModel" id="formModel"
:prevent-submit="$attrs['prevent-submit']"
> >
<QCard> <QCard>
<slot <slot

View File

@ -27,10 +27,15 @@ const formModelRef = ref(null);
const closeButton = ref(null); const closeButton = ref(null);
const isSaveAndContinue = ref(false); const isSaveAndContinue = ref(false);
const onDataSaved = (formData, requestResponse) => { const onDataSaved = (formData, requestResponse) => {
if (closeButton.value && isSaveAndContinue) closeButton.value.click(); if (closeButton.value && !isSaveAndContinue.value) closeButton.value.click();
emit('onDataSaved', formData, requestResponse); emit('onDataSaved', formData, requestResponse);
}; };
const onClick = async (saveAndContinue) => {
isSaveAndContinue.value = saveAndContinue;
await formModelRef.value.save();
};
const isLoading = computed(() => formModelRef.value?.isLoading); const isLoading = computed(() => formModelRef.value?.isLoading);
const reset = computed(() => formModelRef.value?.reset); const reset = computed(() => formModelRef.value?.reset);
@ -78,10 +83,7 @@ defineExpose({
:flat="showSaveAndContinueBtn" :flat="showSaveAndContinueBtn"
:label="t('globals.save')" :label="t('globals.save')"
:title="t('globals.save')" :title="t('globals.save')"
@click=" @click="onClick(false)"
formModelRef.save();
isSaveAndContinue = false;
"
color="primary" color="primary"
class="q-ml-sm" class="q-ml-sm"
:disabled="isLoading" :disabled="isLoading"
@ -99,10 +101,7 @@ defineExpose({
:loading="isLoading" :loading="isLoading"
data-cy="FormModelPopup_isSaveAndContinue" data-cy="FormModelPopup_isSaveAndContinue"
z-max z-max
@click=" @click="onClick(true)"
isSaveAndContinue = true;
formModelRef.save();
"
/> />
</div> </div>
</template> </template>

View File

@ -114,7 +114,7 @@ function onBeforeSave(data) {
if (isCash.value && shouldSendEmail.value && !data.email) if (isCash.value && shouldSendEmail.value && !data.email)
return notify(t('There is no assigned email for this client'), 'negative'); return notify(t('There is no assigned email for this client'), 'negative');
data.bankFk = data.bankFk.id; data.bankFk = data.bankFk?.id;
return data; return data;
} }
@ -189,7 +189,7 @@ async function getAmountPaid() {
:url-create="urlCreate" :url-create="urlCreate"
:mapper="onBeforeSave" :mapper="onBeforeSave"
@on-data-saved="onDataSaved" @on-data-saved="onDataSaved"
:prevent-submit="true" prevent-submit
> >
<template #form="{ data, validate }"> <template #form="{ data, validate }">
<span ref="closeButton" class="row justify-end close-icon" v-close-popup> <span ref="closeButton" class="row justify-end close-icon" v-close-popup>

View File

@ -25,7 +25,7 @@ const setFilteredAddresses = (data) => {
@on-fetch="(data) => (validAddresses = data)" @on-fetch="(data) => (validAddresses = data)"
/> />
<FetchData url="Addresses" auto-load @on-fetch="setFilteredAddresses" /> <FetchData url="Addresses" auto-load @on-fetch="setFilteredAddresses" />
<FormModel auto-load model="zone"> <FormModel auto-load model="Zone">
<template #form="{ data, validate }"> <template #form="{ data, validate }">
<VnRow> <VnRow>
<VnInput <VnInput
@ -33,6 +33,7 @@ const setFilteredAddresses = (data) => {
:label="t('Name')" :label="t('Name')"
clearable clearable
v-model="data.name" v-model="data.name"
:required="true"
/> />
</VnRow> </VnRow>
<VnRow> <VnRow>
@ -83,7 +84,7 @@ const setFilteredAddresses = (data) => {
type="number" type="number"
min="0" min="0"
/> />
<VnInputTime v-model="data.hour" :label="t('Closing')" /> <VnInputTime v-model="data.hour" :label="t('Closing')" :required="true" />
</VnRow> </VnRow>
<VnRow> <VnRow>
@ -92,7 +93,7 @@ const setFilteredAddresses = (data) => {
:label="t('Price')" :label="t('Price')"
type="number" type="number"
min="0" min="0"
required="true" :required="true"
clearable clearable
/> />
<VnInput <VnInput
@ -100,7 +101,7 @@ const setFilteredAddresses = (data) => {
:label="t('Price optimum')" :label="t('Price optimum')"
type="number" type="number"
min="0" min="0"
required="true" :required="true"
clearable clearable
/> />
</VnRow> </VnRow>

View File

@ -131,6 +131,7 @@ const columns = computed(() => [
label: t('list.addressFk'), label: t('list.addressFk'),
cardVisible: true, cardVisible: true,
columnFilter: false, columnFilter: false,
columnClass: 'expand',
}, },
{ {
align: 'right', align: 'right',