浏览代码

ajuste nome e sobrenome para validar form com 3 caracteres

Gustavo Zanatta 1 月之前
父节点
当前提交
250a10b611

+ 18 - 0
src/composables/useInputRules.js

@@ -15,6 +15,24 @@ export const useInputRules = () => {
     min: (min) => (value) =>
     min: (min) => (value) =>
       value.length >= min ||
       value.length >= min ||
       `${t("validation.rules.min")} ${min} ${t("validation.rules.characters")}`,
       `${t("validation.rules.min")} ${min} ${t("validation.rules.characters")}`,
+    minTrimmed: (min) => (value) =>
+      String(value ?? "").trim().length >= min ||
+      `${t("validation.rules.min")} ${min} ${t("validation.rules.characters")}`,
+    // Nome completo em um único campo: exige nome e sobrenome, cada um com o mínimo
+    // de caracteres. Partículas no meio ("da", "de") não entram na verificação.
+    fullName: (min) => (value) => {
+      const parts = String(value ?? "")
+        .trim()
+        .split(/\s+/)
+        .filter(Boolean);
+
+      return (
+        (parts.length >= 2 &&
+          parts[0].length >= min &&
+          parts[parts.length - 1].length >= min) ||
+        `${t("validation.rules.full_name")} ${min} ${t("validation.rules.characters")}`
+      );
+    },
     max: (max) => (value) =>
     max: (max) => (value) =>
       value.length <= max ||
       value.length <= max ||
       `${t("validation.rules.max")} ${max} ${t("validation.rules.characters")}`,
       `${t("validation.rules.max")} ${max} ${t("validation.rules.characters")}`,

+ 1 - 0
src/i18n/locales/en.json

@@ -295,6 +295,7 @@
       "min": "This field must have at least",
       "min": "This field must have at least",
       "max": "This field must have at most",
       "max": "This field must have at most",
       "characters": "characters",
       "characters": "characters",
+      "full_name": "Enter first and last name, each with at least",
       "password": "Password must have at least 6 characters, one uppercase letter, one lowercase letter and one number",
       "password": "Password must have at least 6 characters, one uppercase letter, one lowercase letter and one number",
       "same_password": "Passwords must match",
       "same_password": "Passwords must match",
       "not_same_document": "The document must be unique for each participant",
       "not_same_document": "The document must be unique for each participant",

+ 1 - 0
src/i18n/locales/es.json

@@ -296,6 +296,7 @@
       "min": "Este campo debe tener al menos",
       "min": "Este campo debe tener al menos",
       "max": "Este campo debe tener como máximo",
       "max": "Este campo debe tener como máximo",
       "characters": "caracteres",
       "characters": "caracteres",
+      "full_name": "Ingrese nombre y apellido, cada uno con al menos",
       "password": "La contraseña debe tener al menos 6 caracteres, una letra mayúscula, una letra minúscula y un número",
       "password": "La contraseña debe tener al menos 6 caracteres, una letra mayúscula, una letra minúscula y un número",
       "same_password": "Las contraseñas deben coincidir",
       "same_password": "Las contraseñas deben coincidir",
       "not_same_document": "El documento debe ser único para cada participante",
       "not_same_document": "El documento debe ser único para cada participante",

+ 1 - 0
src/i18n/locales/pt.json

@@ -296,6 +296,7 @@
       "min": "Este campo deve ter no mínimo",
       "min": "Este campo deve ter no mínimo",
       "max": "Este campo deve ter no máximo",
       "max": "Este campo deve ter no máximo",
       "characters": "caracteres",
       "characters": "caracteres",
+      "full_name": "Informe nome e sobrenome, cada um com no mínimo",
       "password": "A senha deve ter pelo menos 6 caracteres, uma letra maiúscula, uma letra minúscula e um número",
       "password": "A senha deve ter pelo menos 6 caracteres, uma letra maiúscula, uma letra minúscula e um número",
       "same_password": "As senhas devem ser iguais",
       "same_password": "As senhas devem ser iguais",
       "not_same_document": "O documento deve ser único para cada participante",
       "not_same_document": "O documento deve ser único para cada participante",

+ 6 - 1
src/pages/gestao-associados/components/AddEditAssociadoDialog.vue

@@ -7,7 +7,8 @@
           <DefaultInput
           <DefaultInput
             v-model="form.name"
             v-model="form.name"
             v-model:error="validationErrors.name"
             v-model:error="validationErrors.name"
-            :rules="[inputRules.required]"
+            lazy-rules
+            :rules="[inputRules.required, inputRules.fullName(6)]"
             :label="$t('common.terms.name')"
             :label="$t('common.terms.name')"
             :placeholder="$t('user.profile.name_and_surname')"
             :placeholder="$t('user.profile.name_and_surname')"
             class="col-md-8 col-12 input-violet"
             class="col-md-8 col-12 input-violet"
@@ -24,6 +25,7 @@
           <DefaultInput
           <DefaultInput
             v-model="form.email"
             v-model="form.email"
             v-model:error="validationErrors.email"
             v-model:error="validationErrors.email"
+            lazy-rules
             :rules="[inputRules.email, inputRules.required]"
             :rules="[inputRules.email, inputRules.required]"
             :label="$t('common.terms.email')"
             :label="$t('common.terms.email')"
             :placeholder="$t('common.placeholders.email')"
             :placeholder="$t('common.placeholders.email')"
@@ -40,6 +42,7 @@
           <DefaultInput
           <DefaultInput
             v-model="form.registration"
             v-model="form.registration"
             v-model:error="validationErrors.registration"
             v-model:error="validationErrors.registration"
+            lazy-rules
             :rules="[inputRules.required]"
             :rules="[inputRules.required]"
             :label="$t('associado.registration')"
             :label="$t('associado.registration')"
             :placeholder="$t('common.placeholders.registration')"
             :placeholder="$t('common.placeholders.registration')"
@@ -70,6 +73,7 @@
           <DefaultPasswordInput
           <DefaultPasswordInput
             v-model="form.password"
             v-model="form.password"
             v-model:error="validationErrors.password"
             v-model:error="validationErrors.password"
+            lazy-rules
             :rules="[inputRules.password]"
             :rules="[inputRules.password]"
             :label="$t('common.terms.password')"
             :label="$t('common.terms.password')"
             :placeholder="$t('auth.password_hint')"
             :placeholder="$t('auth.password_hint')"
@@ -77,6 +81,7 @@
           />
           />
           <DefaultPasswordInput
           <DefaultPasswordInput
             v-model="confirmPassword"
             v-model="confirmPassword"
+            lazy-rules
             :rules="[inputRules.samePassword(form.password)]"
             :rules="[inputRules.samePassword(form.password)]"
             :label="$t('auth.confirm_password')"
             :label="$t('auth.confirm_password')"
             class="col-md-6 col-12"
             class="col-md-6 col-12"

+ 4 - 4
src/pages/login/FirstAccessFormPage.vue

@@ -75,7 +75,7 @@
               :readonly="isLocked('name')"
               :readonly="isLocked('name')"
               :bg-color="isLocked('name') ? 'grey-2' : undefined"
               :bg-color="isLocked('name') ? 'grey-2' : undefined"
               :label="$t('common.terms.name')"
               :label="$t('common.terms.name')"
-              :rules="[inputRules.required]"
+              :rules="[inputRules.required, inputRules.minTrimmed(3)]"
             />
             />
 
 
             <DefaultInput
             <DefaultInput
@@ -85,7 +85,7 @@
               :readonly="isLocked('last_name')"
               :readonly="isLocked('last_name')"
               :bg-color="isLocked('last_name') ? 'grey-2' : undefined"
               :bg-color="isLocked('last_name') ? 'grey-2' : undefined"
               :label="$t('auth.first_access.last_name')"
               :label="$t('auth.first_access.last_name')"
-              :rules="[inputRules.required]"
+              :rules="[inputRules.required, inputRules.minTrimmed(3)]"
             />
             />
 
 
             <DefaultInput
             <DefaultInput
@@ -246,8 +246,8 @@ const {
 } = useSubmitHandler({ formRef });
 } = useSubmitHandler({ formRef });
 
 
 const prefillRules = {
 const prefillRules = {
-  name: [inputRules.required],
-  last_name: [inputRules.required],
+  name: [inputRules.required, inputRules.minTrimmed(3)],
+  last_name: [inputRules.required, inputRules.minTrimmed(3)],
   cpf: [inputRules.required, inputRules.cpf],
   cpf: [inputRules.required, inputRules.cpf],
   email: [inputRules.required, inputRules.email],
   email: [inputRules.required, inputRules.email],
   phone: [inputRules.required],
   phone: [inputRules.required],