Просмотр исходного кода

Merge branch 'development' of gogs.softpar.inf.br:Softpar/sfp_front_vue_diarista_prestador into development

Gustavo Zanatta 1 неделя назад
Родитель
Сommit
43483c4d01
2 измененных файлов с 204 добавлено и 6 удалено
  1. 24 1
      src/api/user.js
  2. 180 5
      src/pages/LoginPage.vue

+ 24 - 1
src/api/user.js

@@ -38,7 +38,30 @@ export const sendCode = async (email, phone) => {
 export const validateCode = async (email, phone, code, isLogin = false) => {
   const data = await api.post("/validate-code-provider", { email, phone, code, isLogin });
   return data;
-}
+};
+
+const removeEmptyRegistrationFields = (data) => {
+  if (Array.isArray(data)) {
+    return data.map(removeEmptyRegistrationFields);
+  }
+
+  if (!data || typeof data !== "object" || data instanceof FormData) {
+    return data;
+  }
+
+  return Object.entries(data).reduce((payload, [key, value]) => {
+    if (
+      value === undefined ||
+      key === "no_complement" ||
+      key.endsWith("_file")
+    ) {
+      return payload;
+    }
+
+    payload[key] = removeEmptyRegistrationFields(value);
+    return payload;
+  }, {});
+};
 
 export const createUserAndProvider = async (data) => {
   const response = await api.post("/register-provider", data);

+ 180 - 5
src/pages/LoginPage.vue

@@ -31,10 +31,160 @@
               v-model="stepFourForm"
               @update:show-sub-step="showSubStep = $event"
             />
-            <LoginStepFivePanel v-else-if="steps === 5" v-model="stepFiveForm" />
-            <LoginStepSixPanel v-else-if="steps === 6" v-model="stepSixForm" />
+            <LoginStepFivePanel
+              v-else-if="steps === 5"
+              v-model="stepFiveForm"
+            />
+            <q-card-section v-else-if="steps === 6" class="no-padding">
+              <div
+                class="text-subtitle1 text-center text-weight-bold text-text q-mb-md"
+              >
+                Dados bancários
+              </div>
+
+              <div class="text-caption text-grey-7 text-center q-mb-md">
+                Informe uma conta vinculada ao mesmo CPF do cadastro para
+                receber os pagamentos.
+              </div>
+
+              <div class="row q-mb-sm items-center">
+                <q-radio
+                  v-model="stepSixForm.account_type"
+                  val="checking"
+                  label="Conta corrente"
+                  color="primary"
+                  keep-color
+                  class="q-mr-lg text-text"
+                />
+                <q-radio
+                  v-model="stepSixForm.account_type"
+                  val="savings"
+                  label="Poupança"
+                  color="primary"
+                  keep-color
+                  class="text-text"
+                />
+              </div>
+
+              <div class="text-text">
+                <span class="text-weight-medium">Código do banco</span>
+              </div>
+              <q-input
+                v-model="stepSixForm.bank"
+                no-error-icon
+                outlined
+                rounded
+                class="bg-surface q-mt-sm q-mb-md"
+                input-class="text-text"
+                placeholder="Ex: 001"
+                hide-bottom-space
+                :rules="[requiredRule]"
+                lazy-rules
+                maxlength="3"
+              />
+
+              <div class="row q-col-gutter-sm">
+                <div class="col-8">
+                  <div class="text-text">
+                    <span class="text-weight-medium">Agência</span>
+                  </div>
+                  <q-input
+                    v-model="stepSixForm.branch_number"
+                    no-error-icon
+                    outlined
+                    rounded
+                    class="bg-surface q-mt-sm q-mb-md"
+                    input-class="text-text"
+                    placeholder="0000"
+                    hide-bottom-space
+                    :rules="[requiredRule]"
+                    lazy-rules
+                    maxlength="20"
+                  />
+                </div>
+                <div class="col-4">
+                  <div class="text-text">
+                    <span class="text-weight-medium">Dígito</span>
+                  </div>
+                  <q-input
+                    v-model="stepSixForm.branch_check_digit"
+                    no-error-icon
+                    outlined
+                    rounded
+                    class="bg-surface q-mt-sm q-mb-md"
+                    input-class="text-text"
+                    placeholder="0"
+                    hide-bottom-space
+                    lazy-rules
+                    maxlength="10"
+                  />
+                </div>
+              </div>
+
+              <div class="row q-col-gutter-sm">
+                <div class="col-8">
+                  <div class="text-text">
+                    <span class="text-weight-medium">Conta</span>
+                  </div>
+                  <q-input
+                    v-model="stepSixForm.account_number"
+                    no-error-icon
+                    outlined
+                    rounded
+                    class="bg-surface q-mt-sm q-mb-md"
+                    input-class="text-text"
+                    placeholder="000000"
+                    hide-bottom-space
+                    :rules="[requiredRule]"
+                    lazy-rules
+                    maxlength="20"
+                  />
+                </div>
+                <div class="col-4">
+                  <div class="text-text">
+                    <span class="text-weight-medium">Dígito</span>
+                  </div>
+                  <q-input
+                    v-model="stepSixForm.account_check_digit"
+                    no-error-icon
+                    outlined
+                    rounded
+                    class="bg-surface q-mt-sm q-mb-md"
+                    input-class="text-text"
+                    placeholder="0"
+                    hide-bottom-space
+                    :rules="[requiredRule]"
+                    lazy-rules
+                    maxlength="10"
+                  />
+                </div>
+              </div>
+
+              <div class="text-text">
+                <span class="text-weight-medium">Chave Pix</span>
+              </div>
+              <q-input
+                v-model="stepSixForm.pix_key"
+                no-error-icon
+                outlined
+                rounded
+                class="bg-surface q-mt-sm q-mb-md"
+                input-class="text-text"
+                placeholder="Opcional"
+                hide-bottom-space
+                lazy-rules
+                maxlength="255"
+              />
+            </q-card-section>
+            <LoginStepSixPanel
+              v-else-if="steps === 7"
+              v-model="stepSevenForm"
+            />
 
-            <div v-else-if="steps === 7" class="column items-center justify-center q-gutter-md text-center">
+            <div
+              v-else-if="steps === 8"
+              class="column items-center justify-center q-gutter-md text-center"
+            >
               <q-icon name="mdi-clock-outline" size="64px" color="warning" />
               <div class="text-h6 text-text">{{ $t('provider.login.pending_approval.title') }}</div>
               <div class="text-body2 text-grey-5">{{ $t('provider.login.pending_approval.description') }}</div>
@@ -253,9 +403,34 @@ const registerUserAndProvider = async () => {
 
   };
 
-  const response = await createUserAndProvider(payload);
+  form.append('selfie', stepFourForm.value.selfie);
+  form.append('document_front', stepFourForm.value.document_front);
+  form.append('document_back', stepFourForm.value.document_back);
+
+  append('recipient_name', stepThreeForm.value.name);
+  append('recipient_email', stepThreeForm.value.email || email.value);
+  append('recipient_document', stepThreeForm.value.document);
+  append('recipient_type', 'individual');
+  append('recipient_payment_mode', 'bank_transfer');
+  append('recipient_default_bank_account[type]', stepSixForm.value.account_type);
+  append('recipient_default_bank_account[bank]', stepSixForm.value.bank);
+  append('recipient_default_bank_account[branch_number]', stepSixForm.value.branch_number);
+  append('recipient_default_bank_account[branch_check_digit]', stepSixForm.value.branch_check_digit);
+  append('recipient_default_bank_account[account_number]', stepSixForm.value.account_number);
+  append('recipient_default_bank_account[account_check_digit]', stepSixForm.value.account_check_digit);
+  append('recipient_default_bank_account[pix_key]', stepSixForm.value.pix_key);
+  append('recipient_default_bank_account[holder_name]', stepThreeForm.value.name);
+  append('recipient_default_bank_account[holder_document]', stepThreeForm.value.document);
+  append('recipient_default_bank_account[holder_type]', 'individual');
+
+  const response = await createUserAndProvider(form);
   if (response.status === 200) {
-    steps.value = 7;
+    if (response.data?.payload?.access_token) {
+      await setAuthDataFromPayload(response.data.payload);
+      router.push({ name: "DashboardPage" });
+      return;
+    }
+    steps.value = 8;
   }
 };