diff --git a/src/components/common/VnInput.vue b/src/components/common/VnInput.vue
index 26160929c..8585bf5bc 100644
--- a/src/components/common/VnInput.vue
+++ b/src/components/common/VnInput.vue
@@ -2,6 +2,7 @@
import { computed, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useValidator } from 'src/composables/useValidator';
+import { useAttrs } from 'vue';
const emit = defineEmits([
'update:modelValue',
@@ -29,10 +30,11 @@ const $props = defineProps({
},
});
const { validations } = useValidator();
+const $attrs = useAttrs();
const { t } = useI18n();
-const requiredFieldRule = (val) => validations().required($attrs.required, val);
-
+const requiredFieldRule = (val) => validations().required(isRequired.value, val);
+const isRequired = computed(() => Object.keys($attrs).includes('required'));
const vnInputRef = ref(null);
const value = computed({
get() {
@@ -57,12 +59,6 @@ const focus = () => {
vnInputRef.value.focus();
};
-defineExpose({
- focus,
-});
-import { useAttrs } from 'vue';
-const $attrs = useAttrs();
-
const mixinRules = [
requiredFieldRule,
...($attrs.rules ?? []),
@@ -76,6 +72,9 @@ const mixinRules = [
}
},
];
+defineExpose({
+ focus,
+});
@@ -85,7 +84,7 @@ const mixinRules = [
v-model="value"
v-bind="{ ...$attrs, ...styleAttrs }"
:type="$attrs.type"
- :class="{ required: $attrs.required }"
+ :class="{ required: isRequired }"
@keyup.enter="emit('keyup.enter')"
:clearable="false"
:rules="mixinRules"
diff --git a/src/components/common/VnInputNumber.vue b/src/components/common/VnInputNumber.vue
index ef4bb7512..1cad6c245 100644
--- a/src/components/common/VnInputNumber.vue
+++ b/src/components/common/VnInputNumber.vue
@@ -1,8 +1,13 @@
-
+
diff --git a/src/components/common/VnLocation.vue b/src/components/common/VnLocation.vue
index c1b921915..7f891c783 100644
--- a/src/components/common/VnLocation.vue
+++ b/src/components/common/VnLocation.vue
@@ -2,16 +2,24 @@
import CreateNewPostcode from 'src/components/CreateNewPostcodeForm.vue';
import VnSelectDialog from 'components/common/VnSelectDialog.vue';
import { useI18n } from 'vue-i18n';
-import { ref } from 'vue';
+import { computed, ref } from 'vue';
const { t } = useI18n();
const emit = defineEmits(['update:model-value', 'update:options']);
+const { validations } = useValidator();
+import { useAttrs } from 'vue';
+import { useValidator } from 'src/composables/useValidator';
+const $attrs = useAttrs();
const props = defineProps({
location: {
type: Object,
default: null,
},
});
+const isRequired = computed(() => Object.keys($attrs).includes('required'));
+const requiredFieldRule = (val) => validations().required(isRequired.value, val);
+
+const mixinRules = [requiredFieldRule];
const formatLocation = (obj, properties) => {
const parts = properties.map((prop) => {
if (typeof prop === 'string') {
@@ -68,10 +76,12 @@ function showLabel(data) {
:label="t('Location')"
:placeholder="t('search_by_postalcode')"
:input-debounce="300"
- :class="{ required: $attrs.required }"
+ :class="{ required: isRequired }"
v-bind="$attrs"
clearable
:emit-value="false"
+ :rules="mixinRules"
+ :lazy-rules="true"
>
[
name: 'credit',
create: true,
visible: false,
- attrs: {
+ columnCreate: {
+ component: 'number',
+ required: true,
autofocus: true,
},
},
diff --git a/src/pages/Customer/Card/CustomerFiscalData.vue b/src/pages/Customer/Card/CustomerFiscalData.vue
index 1f5775715..6c5086149 100644
--- a/src/pages/Customer/Card/CustomerFiscalData.vue
+++ b/src/pages/Customer/Card/CustomerFiscalData.vue
@@ -53,11 +53,11 @@ function handleLocation(data, location) {
-
+
-
+
@@ -68,6 +68,7 @@ function handleLocation(data, location) {
option-label="vat"
option-value="id"
v-model="data.sageTaxTypeFk"
+ :required="data.isTaxDataChecked"
/>
@@ -96,6 +98,7 @@ function handleLocation(data, location) {
:roles-allowed-to-create="['deliveryAssistant', 'administrative']"
:acls="[{ model: 'Town', props: '*', accessType: 'WRITE' }]"
:location="data"
+ :required="true"
@update:model-value="(location) => handleLocation(data, location)"
/>
diff --git a/src/pages/Customer/Card/CustomerGreuges.vue b/src/pages/Customer/Card/CustomerGreuges.vue
index 1d8b8585f..dcf297d12 100644
--- a/src/pages/Customer/Card/CustomerGreuges.vue
+++ b/src/pages/Customer/Card/CustomerGreuges.vue
@@ -80,6 +80,11 @@ const columns = computed(() => [
align: 'left',
name: 'amount',
label: t('Amount'),
+ columnCreate: {
+ component: 'number',
+ autofocus: true,
+ required: true,
+ },
format: ({ amount }) => toCurrency(amount),
create: true,
},
diff --git a/src/pages/Customer/Card/CustomerRecoveries.vue b/src/pages/Customer/Card/CustomerRecoveries.vue
index 48576ca20..3a8cffff8 100644
--- a/src/pages/Customer/Card/CustomerRecoveries.vue
+++ b/src/pages/Customer/Card/CustomerRecoveries.vue
@@ -56,6 +56,7 @@ const columns = computed(() => [
label: t('Period'),
create: true,
...componentColumn('number'),
+ required: true,
},
{
align: 'left',
diff --git a/src/pages/Customer/components/CustomerAddressCreate.vue b/src/pages/Customer/components/CustomerAddressCreate.vue
index 659114744..e3fef8e5f 100644
--- a/src/pages/Customer/components/CustomerAddressCreate.vue
+++ b/src/pages/Customer/components/CustomerAddressCreate.vue
@@ -85,15 +85,26 @@ function handleLocation(data, location) {
-
+
-
+
handleLocation(data, location)"
/>
diff --git a/src/pages/Customer/components/CustomerNewPayment.vue b/src/pages/Customer/components/CustomerNewPayment.vue
index 16dd28767..f7d3812b3 100644
--- a/src/pages/Customer/components/CustomerNewPayment.vue
+++ b/src/pages/Customer/components/CustomerNewPayment.vue
@@ -241,7 +241,7 @@ async function getAmountPaid() {
-
-
-
-