Преглед на файлове

fix: :bug: fix(alteração no fluxo de cadastro) Foi realizado um ajuste na parte do cliente para que mostre apenas o primeiro nome do prestador

Foi realizado um ajuste e criado uma função para que aparece apenas o primeiro nome do presatdor nas paginas do sistema

origin: bug-interno
kayo henrique преди 1 седмица
родител
ревизия
04f478f4cd

+ 2 - 1
src/components/dashboard/DashboardFavoriteProviders.vue

@@ -18,7 +18,7 @@
               </q-avatar>
             </div>
             <div class="col-5 column q-gutter-y-xs q-my-auto">
-              <span class="text-fav-name font12 fontmedium">{{ item.provider_name ?? 'Prestador' }}</span>
+              <span class="text-fav-name font12 fontmedium">{{ getFirstName(item.provider_name) || 'Prestador' }}</span>
               <span class="text-fav-region font9 fontbold  text-grey-7">{{ item.provider_district ?? $t('dashboard_client.last_schedules.no_address') }}</span>
               <div v-if="item.average_rating != null" class="row items-center q-gutter-x-xs">
                 <q-icon name="mdi-star" color="warning" size="xs" />
@@ -44,6 +44,7 @@
 <script setup>
 import { useQuasar } from 'quasar';
 import SchedulingDialog from 'src/pages/search/components/SchedulingDialog.vue';
+import { getFirstName } from 'src/helpers/utils';
 
 defineProps({ data: { type: Array, default: () => [] } });
 

+ 2 - 1
src/components/dashboard/DashboardLastDoneSchedules.vue

@@ -14,7 +14,7 @@
             <img v-if="item.provider_photo" :src="item.provider_photo" style="object-fit:cover;border-radius:50%;" />
             <span v-else>{{ item.provider_name?.slice(0,1).toUpperCase() ?? '—' }}</span>
           </q-avatar>
-          <span class="text-done-name font12 fontmedium">{{ item.provider_name ?? 'Prestador' }}</span>
+          <span class="text-done-name font12 fontmedium"> {{ getFirstName(item.provider_name) || 'Prestador' }}</span>
           <span class="text-done-district font9 fontbold text-grey-7">{{ item.provider_district != null ? item.provider_district : $t('dashboard_client.last_schedules.no_address') }}</span>
           <q-btn
             rounded color="secondary"
@@ -32,6 +32,7 @@
 <script setup>
 import { useQuasar } from 'quasar';
 import SchedulingDialog from 'src/pages/search/components/SchedulingDialog.vue';
+import { getFirstName } from 'src/helpers/utils';
 
 defineProps({ data: { type: Array, default: () => [] } });
 

+ 3 - 4
src/components/dashboard/DashboardNextSchedules.vue

@@ -15,7 +15,7 @@
               <div class="col-7 column">
                 <q-avatar :style="avatarColors[item.id % avatarColors.length]" class="q-mx-auto">
                   <img v-if="item.provider_photo" :src="item.provider_photo" style="object-fit:cover;border-radius:50%;" />
-                  <span v-else>{{ item.provider_name?.slice(0,1) ?? '—' }}</span>
+                  <span v-else>{{ item.provider_name?.slice(0,1).toUpperCase() ?? '—' }}</span>
                 </q-avatar>
               </div>
 
@@ -30,7 +30,7 @@
               <div class="column schedule-info">
                 <div>
                   <span class="text-provider-name provider-name-ellipsis font12 fontbold">
-                    {{ item.provider_name ?? $t('dashboard_client.next_schedules.no_provider') }}
+                    {{ getFirstName(item.provider_name) || $t('dashboard_client.next_schedules.no_provider') }}
                   </span>
                 </div>
 
@@ -105,8 +105,7 @@
 </template>
 
 <script setup>
-import { formatCurrency } from 'src/helpers/utils';
-import { formatLabelByPeriodType } from 'src/helpers/utils';
+import { formatCurrency,getFirstName,formatLabelByPeriodType } from 'src/helpers/utils';
 import { getSchedulePaymentType, getScheduleTotalWithPlatformFee } from 'src/helpers/paymentPlatformFees';
 import { usePaymentPlatformFees } from 'src/composables/usePaymentPlatformFees';
 import { onMounted } from 'vue';

+ 4 - 1
src/components/dashboard/DashboardPendingSchedules.vue

@@ -26,7 +26,7 @@
                     {{ $t('dashboard_client.pending_schedules.pay_to_provider') }}
                   </span>
                   
-                  <span class="font12 fontbold">{{ ' ' +  item.provider_name ?? '—' }}</span>
+                  <span class="font12 fontbold"> {{ ' ' + (getFirstName(item.provider_name) || '—') }}</span>
                 </span>
                 <div class="row items-center q-mt-xs">
                   <q-icon name="mdi-clock-outline" size="13px" color="grey-5" class="q-mr-xs" />
@@ -71,6 +71,9 @@
 </template>
 
 <script setup>
+import {getFirstName} from 'src/helpers/utils';
+
+
 const avatarColors = [
   { background: '#ffd5df', color: '#932e57' },
   { background: '#d7e8ff', color: '#2158a8' },

+ 1 - 8
src/components/dashboard/DashboardProvidersClose.vue

@@ -72,7 +72,7 @@
 
 <script setup>
 import { useQuasar } from 'quasar';
-import { formatCurrency } from 'src/helpers/utils';
+import { formatCurrency,getFirstName } from 'src/helpers/utils';
 import SchedulingDialog from 'src/pages/search/components/SchedulingDialog.vue';
 import { ref } from 'vue';
 import { useI18n } from 'vue-i18n';
@@ -151,13 +151,6 @@ const avatarColors = [
   { background: '#ffe5cc', color: '#8a4500' },
 ];
 
-
-const getFirstName = (name) => {
-  if (!name) return 'Prestador';
-
-  return name.trim().split(' ')[0];
-};
-
 const goToScheduling = (provider) => {
   $q.dialog({
     component: SchedulingDialog,

+ 2 - 2
src/components/dashboard/DashboardSummaryInfos.vue

@@ -13,7 +13,7 @@
   </span>
 
   <span class="summary-name text-name text-primary font16 fontbold">
-    {{ data?.name ?? $t('dashboard_client.summary.welcome') }}
+    {{ getFirstName(data?.name) || $t('dashboard_client.summary.welcome') }}
   </span>
 
   <span class="summary-address font10 fontmedium text-text">
@@ -41,7 +41,7 @@
 </template>
 
 <script setup>
-import { formatAddress } from 'src/helpers/utils';
+import { formatAddress, getFirstName } from 'src/helpers/utils';
 defineProps({ data: { type: Object, default: () => null } });
 
 const avatarStyle = {

+ 2 - 1
src/components/dashboard/DashboardTodaySchedules.vue

@@ -21,7 +21,7 @@
                   <template v-if="cardState(item) === 'awaiting_code'">{{ $t('dashboard_client.today_schedules.start_with') }}</template>
                   <template v-else-if="cardState(item) === 'in_progress'">{{ $t('dashboard_client.today_schedules.started_by') }}</template>
                   <template v-else>{{ $t('dashboard_client.today_schedules.finished_by') }}</template>
-                  <span class="fontbold"> {{ ' ' +  item.provider_name.split(' ')[0] ?? '—' }}</span>
+                  <span class="fontbold">  {{ ' ' + (getFirstName(item.provider_name) || '—') }}</span>
                 </span>
                 <div class="row items-center q-mt-xs no-wrap">
                   <q-icon name="mdi-clock-outline" size="13px" class="q-mr-xs gradient-diarista" />
@@ -109,6 +109,7 @@
 <script setup>
 import { useQuasar } from 'quasar'
 import ProfileHelpDialog from 'src/components/profile/ProfileHelpDialog.vue'
+import {getFirstName} from 'src/helpers/utils'
 
 defineProps({ data: { type: Array, default: () => [] } })
 const emit = defineEmits(['rate'])

+ 3 - 4
src/components/dashboard/NextSchedulesDetailsDialog.vue

@@ -12,9 +12,9 @@
         </q-avatar>
 
         <div class="provider-name font16 fontbold">
-          {{ schedule.provider_name }}
+          {{ getFirstName(schedule.provider_name) || '—' }}
 
-          <span v-if="providerAge !== null" class=" text-grey-6">
+          <span v-if="providerAge !== null" class="text-grey-6">
             {{ '(' + providerAge + ' ' + $t('dashboard_client.next_schedules.provider_age_unit') + ')' }}
           </span>
         </div>
@@ -143,8 +143,7 @@
 
 <script setup>
 import { computed, onMounted, ref } from 'vue'
-import { formatAddress } from 'src/helpers/utils';
-import { formatCurrency } from 'src/helpers/utils'
+import { formatAddress, getFirstName,formatCurrency } from 'src/helpers/utils';
 import { getScheduleClienteDetails } from 'src/api/dashboard'
 import { getSchedulePaymentType, getScheduleTotalWithPlatformFee } from 'src/helpers/paymentPlatformFees'
 import { useDialogPluginComponent, useQuasar } from 'quasar'

+ 2 - 2
src/components/dashboard/ScheduleAcceptedDialog.vue

@@ -8,7 +8,7 @@
         </q-avatar>
 
         <div class="font16 fontbold provider-name">
-          {{ schedule.provider_name }}
+          {{ getFirstName(schedule.provider_name) || '—' }}
         </div>
 
         <div class="font14 fontmedium text-text">
@@ -112,7 +112,7 @@
 
 <script setup>
 import { computed, onMounted } from 'vue'
-import { formatCurrency } from 'src/helpers/utils'
+import { formatCurrency, getFirstName } from 'src/helpers/utils'
 import { getSchedulePlatformFeeRate, scheduleUsesCartDiscount } from 'src/helpers/paymentPlatformFees'
 import { useDialogPluginComponent, useQuasar } from 'quasar'
 import { usePaymentStore } from 'src/stores/payment'

+ 7 - 4
src/components/dashboard/ScheduleRatingDialog.vue

@@ -18,7 +18,7 @@
         </q-avatar>
         <div class="font16 fontbold text-text text-center q-px-lg" style="line-height:1.3">
           {{ $t('dashboard_client.schedule_rating.title') }}
-          <span class="text-primary"> {{ schedule.provider_name + '?' }}</span>
+          <span class="text-primary"> {{ (getFirstName(schedule.provider_name) || '—') + '?' }}</span>
         </div>
       </div>
 
@@ -136,6 +136,7 @@ import { useI18n } from 'vue-i18n'
 import { createReview, getImprovementTypes } from 'src/api/review'
 import { userStore } from 'src/stores/user'
 import ProfileHelpDialog from 'src/components/profile/ProfileHelpDialog.vue'
+import { getFirstName } from 'src/helpers/utils'
 
 const props = defineProps({
   schedule: {
@@ -176,9 +177,11 @@ const avatarStyle = computed(() => {
   return { background: c.background, color: c.color }
 })
 
-const initials = computed(() =>
-  props.schedule.provider_name?.slice(0, 2).toUpperCase() ?? '??'
-)
+const initials = computed(() => {
+  const firstName = getFirstName(props.schedule.provider_name)
+
+  return firstName?.slice(0, 2).toUpperCase() ?? '??'
+})
 
 const onStarsChange = () => {
   selectedTagIds.value = []

+ 17 - 7
src/helpers/utils.js

@@ -288,14 +288,23 @@ const formatAddress = (address) => {
   if (!address) return '';
   const { address: street, number, district, city, state } = address;
   let parts = [];
-  if(street && street !== null && street != 'null') parts.push(street);
-  if(number && number !== null && number != 'null') parts.push(number);
-  if(district && district !== null && district != 'null') parts.push(district);
-  if(city?.name && city.name !== null && city.name != 'null') parts.push(city.name);
-  if(state?.code && state.code !== null && state.code != 'null') parts.push(state.code);
+  if (street && street !== null && street != 'null') parts.push(street);
+  if (number && number !== null && number != 'null') parts.push(number);
+  if (district && district !== null && district != 'null') parts.push(district);
+  if (city?.name && city.name !== null && city.name != 'null') parts.push(city.name);
+  if (state?.code && state.code !== null && state.code != 'null') parts.push(state.code);
   return parts.join(', ');
 };
 
+// Função para mostra apenas o primeiro nome (pode ser alterada para mostrar o primeiro e o último nome, caso seja necessário)
+const getFirstName = (fullName) => {
+  if (!fullName) return '';
+
+  return String(fullName)
+    .trim()
+    .split(/\s+/)[0];
+};
+
 const calculateDailyPrices = (dailyPrice8h) => {
   if (!dailyPrice8h || dailyPrice8h <= 0) {
     return {
@@ -307,7 +316,7 @@ const calculateDailyPrices = (dailyPrice8h) => {
   }
 
   return {
-    daily_price_8h: dailyPrice8h, 
+    daily_price_8h: dailyPrice8h,
     daily_price_6h: dailyPrice8h * 0.85,
     daily_price_4h: dailyPrice8h * 0.55,
     daily_price_2h: dailyPrice8h * 0.30,
@@ -328,7 +337,7 @@ const chooseprice = (periodType, daily_price_8h) => {
     default:
       return 0
   }
-  
+
 };
 
 const formatLabelByPeriodType = (type) => {
@@ -359,6 +368,7 @@ export {
   detectCardBrand,
   validateCardExpiration,
   formatAddress,
+  getFirstName,
   calculateDailyPrices,
   chooseprice,
   formatLabelByPeriodType

+ 5 - 5
src/pages/agenda/CalendarPage.vue

@@ -28,10 +28,10 @@
               <div class="row no-wrap items-start q-gutter-x-sm">
                 <q-avatar size="44px">
                   <img v-if="item.provider_photo" :src="item.provider_photo" style="object-fit:cover" />
-                  <span v-else class="full-width full-height flex flex-center" :style="avatarColors[item.id % avatarColors.length]" style="border-radius:50%">{{ item.provider_name?.slice(0,2).toUpperCase() ?? '??' }}</span>
+                  <span v-else class="full-width full-height flex flex-center" :style="avatarColors[item.id % avatarColors.length]" style="border-radius:50%">{{ getFirstName(item.provider_name)?.slice(0, 2).toUpperCase() ?? '??' }}</span>
                 </q-avatar>
                 <div class="col column text-text">
-                  <span class="font12 fontbold">{{ item.provider_name ??  $t('dashboard_client.agenda.waiting_proposals') }}</span>
+                  <span class="font12 fontbold">{{ getFirstName(item.provider_name) || $t('dashboard_client.agenda.waiting_proposals') }}</span>
                   <div class="row items-center no-wrap">
                     <span class="font10 fontbold">{{ formatWeekday(item.date) }}</span>
                     <span class="font10 fontmedium">{{ ', ' + formatDayMonth(item.date) }}</span>
@@ -101,11 +101,11 @@
               <div class="row no-wrap items-start q-gutter-x-sm">
                 <q-avatar size="44px">
                   <img v-if="item.provider_photo" :src="item.provider_photo" style="object-fit:cover" />
-                  <span v-else class="full-width full-height flex flex-center" :style="avatarColors[item.id % avatarColors.length]" style="border-radius:50%">{{ item.provider_name?.slice(0,2).toUpperCase() ?? '??' }}</span>
+                  <span v-else class="full-width full-height flex flex-center" :style="avatarColors[item.id % avatarColors.length]" style="border-radius:50%">{{ getFirstName(item.provider_name)?.slice(0, 2).toUpperCase() ?? '??' }}</span>
                 </q-avatar>
 
                 <div class="col column text-text">
-                  <span class="font12 fontbold">{{ item.provider_name ??  $t('dashboard_client.agenda.waiting_proposals') }}</span>
+                  <span class="font12 fontbold">{{ getFirstName(item.provider_name) || $t('dashboard_client.agenda.waiting_proposals') }}</span>
                   <div class="row items-center no-wrap">
                     <span class="font10 fontbold">{{ formatWeekday(item.date) }}</span>
                     <span class="font10 fontmedium">{{ ', ' + formatDayMonth(item.date) }}</span>
@@ -193,7 +193,7 @@ import { ref, onMounted } from 'vue';
 import { useQuasar } from 'quasar';
 import { useI18n } from 'vue-i18n';
 import { getClientCalendar } from 'src/api/clientCalendar';
-import { formatCurrency } from 'src/helpers/utils';
+import { formatCurrency,getFirstName } from 'src/helpers/utils';
 import { getSchedulePaymentType, getScheduleTotalWithPlatformFee } from 'src/helpers/paymentPlatformFees';
 import { usePaymentPlatformFees } from 'src/composables/usePaymentPlatformFees';
 import NextSchedulesDetailsDialog from 'src/components/dashboard/NextSchedulesDetailsDialog.vue';

+ 3 - 3
src/pages/search/SearchPage.vue

@@ -92,13 +92,13 @@
               <div class="col-2">
                 <q-avatar :style="p.profile_media_url ? {} : avatarColors[p.provider_id % avatarColors.length]">
                   <img v-if="p.profile_media_url" :src="p.profile_media_url" style="object-fit: cover; width: 100%; height: 100%;" />
-                  <span v-else>{{ p.provider_name?.slice(0,1).toUpperCase() ?? '—' }}</span>
+                  <span v-else>{{ getFirstName(p.provider_name)?.slice(0, 1).toUpperCase() ?? '—' }}</span>
                 </q-avatar>
               </div>
 
               <div class="col-10 row">
                 <div class="column col-9 justify-between">
-                  <span class="text-provider-close-nam font12 fontbold">{{ p.provider_name ?? 'Prestador' }}</span>
+                  <span class="text-provider-close-nam font12 fontbold">{{ getFirstName(p.provider_name) || 'Prestador' }}</span>
                   <span class="text-provider-close-region font9 fontbold text-grey-7">{{ p.district }}</span>
                   <div class="row items-center justify-between q-pr-lg">
                     <div class="row items-center">
@@ -147,7 +147,7 @@ import { useRouter } from 'vue-router';
 import { useI18n } from 'vue-i18n';
 import { useQuasar } from 'quasar';
 import { buscaPrestadores } from 'src/api/dashboard';
-import { formatCurrency } from 'src/helpers/utils';
+import { formatCurrency,getFirstName } from 'src/helpers/utils';
 import SearchFilterDialog from 'src/pages/search/components/SearchFilterDialog.vue';
 import SchedulingDialog from 'src/pages/search/components/SchedulingDialog.vue';
 

+ 3 - 2
src/pages/search/components/SchedulingDialog.vue

@@ -41,14 +41,14 @@
                     />
 
                     <span v-else>
-                      {{ provider.provider_name?.slice(0,1) ?? '—' }}
+                      {{ getFirstName(provider.provider_name)?.slice(0, 2).toUpperCase() ?? '??' }}
                     </span>
                   </q-avatar>
                 </div>
 
                 <div class="col-3 column">
                   <div class="font12 fontbold text-text">
-                    {{ provider?.provider_name ?? '—' }}
+                   {{ getFirstName(provider?.provider_name) ?? '—' }}
                   </div>
 
                   <div class="font10 fontmedium text-grey-7">
@@ -214,6 +214,7 @@ import { useDialogPluginComponent, useQuasar } from 'quasar';
 import { useI18n } from 'vue-i18n';
 import { useScheduleCartStore } from 'src/stores/scheduleCart';
 import { userStore } from 'src/stores/user';
+import {getFirstName} from 'src/helpers/utils';
 import OrderSummaryDialog from './OrderSummaryDialog.vue';
 import ServiceSelectionSheet from './ServiceSelectionSheet.vue';
 import ServiceTimeSelectionDialog from './ServiceTimeSelectionDialog.vue';