feat: refs #6317 create VnCurrency & useValidNumber
gitea/salix-front/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Jorge Penadés 2024-02-15 09:43:01 +01:00
parent 40d043036e
commit 7db177ccba
7 changed files with 48 additions and 33 deletions

View File

@ -1,33 +1,45 @@
<script setup> <script setup>
import { ref } from 'vue'; import { computed } from 'vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { useCapitalize } from 'src/composables/useCapitalize';
import { useValidNumber } from 'src/composables/useValidNumber';
import VnInput from 'src/components/common/VnInput.vue'; import VnInput from 'src/components/common/VnInput.vue';
import { useFirstUpper } from 'src/composables/useFirstUpper';
const props = defineProps({
modelValue: { type: String, default: '' },
currency: { type: String, default: 'euro' },
icon: { type: Boolean, default: false },
});
const { t } = useI18n(); const { t } = useI18n();
const amount = ref(); const emit = defineEmits(['update:modelValue']);
const isValidNumber = (value) => /^(\d|\d+(\.)?\d+)$/.test(value); const amount = computed({
get() {
return props.modelValue;
},
set(val) {
emit('update:modelValue', val.replaceAll(',', '.'));
},
});
</script> </script>
<template> <template>
<VnInput <VnInput
:label="useFirstUpper(t('amount'))"
v-model="amount" v-model="amount"
:label="useCapitalize(t('amount'))"
:rules="[(val) => useValidNumber(val) || !val]"
is-outlined is-outlined
@update:model-value="
(value) => {
if (value.includes(',')) amount.value = amount.replace(',', '.');
}
"
:rules="[(val) => isValidNumber(val) || !val || 'Please type a number']"
lazy-rules
> >
<template #prepend> <template #prepend v-if="icon">
<QIcon name="euro" size="sm" /> <QIcon :name="currency" size="sm" />
</template> </template>
</VnInput> </VnInput>
</template> </template>
<style lang="scss" scoped></style> <style lang="scss" scoped>
.q-input {
max-height: 44px;
}
</style>
<i18n> <i18n>
es: es:
amount: importe amount: importe

View File

@ -0,0 +1,3 @@
export function useValidNumber(value) {
return /^(\d|\d+(\.)?\d+)$/.test(value);
}

View File

@ -12,10 +12,6 @@ const props = defineProps({
required: true, required: true,
}, },
}); });
function isValidNumber(value) {
return /^(\d|\d+(\.|,)?\d+)$/.test(value);
}
</script> </script>
<template> <template>

View File

@ -158,7 +158,12 @@ async function insert() {
</template> </template>
<template #body-cell-amount="{ row }"> <template #body-cell-amount="{ row }">
<QTd> <QTd>
<QInput v-model="row.amount" clearable clear-icon="close" /> <QInput
v-model="row.amount"
type="number"
clearable
clear-icon="close"
/>
</QTd> </QTd>
</template> </template>
<template #body-cell-foreignvalue="{ row }"> <template #body-cell-foreignvalue="{ row }">

View File

@ -8,6 +8,7 @@ import FetchData from 'components/FetchData.vue';
import VnInput from 'src/components/common/VnInput.vue'; import VnInput from 'src/components/common/VnInput.vue';
import VnInputDate from 'components/common/VnInputDate.vue'; import VnInputDate from 'components/common/VnInputDate.vue';
import { useCapitalize } from 'src/composables/useCapitalize'; import { useCapitalize } from 'src/composables/useCapitalize';
import VnCurrency from 'src/components/common/VnCurrency.vue';
const { t } = useI18n(); const { t } = useI18n();
const props = defineProps({ const props = defineProps({
@ -137,16 +138,7 @@ const suppliersRef = ref();
</QItem> </QItem>
<QItem> <QItem>
<QItemSection> <QItemSection>
<VnInput <VnCurrency v-model="params.amount" />
:label="t('Amount')"
v-model="params.amount"
is-outlined
lazy-rules
>
<template #prepend>
<QIcon name="euro" size="sm"></QIcon>
</template>
</VnInput>
</QItemSection> </QItemSection>
</QItem> </QItem>
<QItem class="q-mb-md"> <QItem class="q-mb-md">

View File

@ -6,6 +6,7 @@ import FetchData from 'components/FetchData.vue';
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue'; import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
import VnInput from 'src/components/common/VnInput.vue'; import VnInput from 'src/components/common/VnInput.vue';
import VnInputDate from 'components/common/VnInputDate.vue'; import VnInputDate from 'components/common/VnInputDate.vue';
import VnCurrency from 'src/components/common/VnCurrency.vue';
const { t } = useI18n(); const { t } = useI18n();
const props = defineProps({ const props = defineProps({
@ -57,7 +58,12 @@ function setWorkers(data) {
</QItem> </QItem>
<QItem> <QItem>
<QItemSection> <QItemSection>
<VnInput :label="t('Amount')" v-model="params.amount" is-outlined /> <VnCurrency
:label="t('Amount')"
v-model="params.amount"
is-outlined
:icon="false"
/>
</QItemSection> </QItemSection>
</QItem> </QItem>
<QItem> <QItem>

View File

@ -4,6 +4,7 @@ import { useI18n } from 'vue-i18n';
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue'; import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
import VnInput from 'src/components/common/VnInput.vue'; import VnInput from 'src/components/common/VnInput.vue';
import VnInputDate from 'components/common/VnInputDate.vue'; import VnInputDate from 'components/common/VnInputDate.vue';
import VnCurrency from 'src/components/common/VnCurrency.vue';
const { t } = useI18n(); const { t } = useI18n();
const props = defineProps({ const props = defineProps({
@ -84,10 +85,10 @@ const props = defineProps({
</QItem> </QItem>
<QItem> <QItem>
<QItemSection> <QItemSection>
<VnInput <VnCurrency
v-model="params.amount" v-model="params.amount"
:label="t('invoiceOut.negativeBases.amount')" :label="t('invoiceOut.negativeBases.amount')"
is-outlined :icon="false"
/> />
</QItemSection> </QItemSection>
</QItem> </QItem>