瀏覽代碼

feat: redireciona e abre dealhes do agendamento no bloco servicos do dia

Gustavo Zanatta 1 周之前
父節點
當前提交
2673badec4

+ 5 - 3
src/components/dashboard/DashboardTodayServices.vue

@@ -23,7 +23,8 @@
           :key="item.id"
           :class="{ 'today-card--single': visibleItems.length === 1 }"
           :flat="false"
-          class="today-card card-border shadow-card bg-surface"
+          class="today-card card-border shadow-card bg-surface cursor-pointer"
+          @click="emit('view-details', item)"
         >
           <q-card-section class="column justify-between q-pa-sm full-height">
             <div class="row no-wrap items-center q-mb-xs">
@@ -108,6 +109,7 @@
                     inputmode="numeric"
                     maxlength="1"
                     type="tel"
+                    @click.stop
                     @input="onCodeInput(item, idx)"
                     @keydown.delete="onCodeDelete(item.id, idx)"
                     @paste.prevent="onCodePaste(item, $event)"
@@ -219,7 +221,7 @@
                 color="primary"
                 name="mdi-content-copy"
                 size="16px"
-                @click="copyAddress(item.address)"
+                @click.stop="copyAddress(item.address)"
               />
             </div>
           </template>
@@ -268,7 +270,7 @@ import { verifyScheduleCode } from 'src/api/schedule'
 import ProfileHelpDialog from 'src/components/profile/ProfileHelpDialog.vue'
 
 const props = defineProps({ data: { type: Array, default: () => [] } })
-const emit  = defineEmits(['rate', 'refresh'])
+const emit  = defineEmits(['rate', 'refresh', 'view-details'])
 
 const { t } = useI18n()
 const $q    = useQuasar()

+ 21 - 1
src/pages/calendar/CalendarPage.vue

@@ -257,14 +257,17 @@
 import { avatarColors, formatCurrency, getFirstName } from 'src/helpers/utils';
 import { getProviderCalendar } from 'src/api/providerCalendar';
 import { labelsPeriodTypes } from 'src/helpers/labelsPeriodTypes.js';
-import { onMounted, ref } from 'vue';
+import { nextTick, onMounted, ref } from 'vue';
 import { useI18n } from 'vue-i18n';
 import { useQuasar } from 'quasar';
+import { useRoute, useRouter } from 'vue-router';
 
 import NextSchedulesDetailsDialog from 'src/components/dashboard/NextSchedulesDetailsDialog.vue';
 import ScheduleRatingDialog from 'src/components/dashboard/ScheduleRatingDialog.vue';
 
 const $q = useQuasar();
+const route = useRoute();
+const router = useRouter();
 const { t } = useI18n();
 
 
@@ -390,9 +393,26 @@ const openRatingDialog = (schedule) => {
   });
 };
 
+const openScheduleFromQuery = async () => {
+  const scheduleId = Number(route.query.scheduleId);
+
+  if (!scheduleId) return;
+
+  await router.replace({ path: route.path, query: {} });
+  await nextTick();
+
+  const schedule = [...upcomingSchedules.value, ...completedSchedules.value].find(
+    (item) => item.id === scheduleId,
+  );
+
+  if (schedule) openDetailsDialog(schedule);
+};
+
 onMounted(async () => {
   await loadCalendar();
   loading.value = false;
+
+  await openScheduleFromQuery();
 });
 </script>
 

+ 8 - 2
src/pages/dashboard/DashboardPage.vue

@@ -25,6 +25,7 @@
             :data="todayServices"
             @refresh="loadDashboard"
             @rate="openRatingDialog"
+            @view-details="openScheduleOnCalendar"
           />
 
           <DashboardScrollAreaSchedules />
@@ -237,6 +238,13 @@ const openNextScheduleDialog = (schedule) => {
   });
 };
 
+const openScheduleOnCalendar = (schedule) => {
+  router.push({
+    name: "CalendarPage",
+    query: { scheduleId: schedule.id },
+  });
+};
+
 const openRatingDialog = (schedule) => {
   $q.dialog({
     component: ScheduleRatingDialog,
@@ -246,8 +254,6 @@ const openRatingDialog = (schedule) => {
   });
 };
 
-// Chegada pela push de cadastro aprovado: o status já foi revalidado no boot,
-// aqui só recarregamos a dashboard liberada e avisamos o prestador.
 watch(
   () => route.query.approved,
   async (val) => {