|
|
@@ -0,0 +1,60 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <DefaultHeaderPage title="Pacotes" />
|
|
|
+
|
|
|
+ <div class="q-px-sm">
|
|
|
+ <!-- Loading skeleton -->
|
|
|
+ <div v-if="loading" class="row q-col-gutter-sm">
|
|
|
+ <div v-for="n in 6" :key="n" class="col-12 col-sm-6 col-md-4">
|
|
|
+ <q-card flat bordered style="border-radius: 12px">
|
|
|
+ <q-card-section>
|
|
|
+ <q-skeleton type="text" width="60%" />
|
|
|
+ <q-skeleton type="text" width="30%" class="q-mb-sm" />
|
|
|
+ <q-skeleton type="text" width="80%" />
|
|
|
+ <q-skeleton type="text" width="70%" />
|
|
|
+ <q-skeleton type="text" width="50%" />
|
|
|
+ </q-card-section>
|
|
|
+ </q-card>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- Packages grid -->
|
|
|
+ <div v-else class="row q-col-gutter-sm">
|
|
|
+ <div
|
|
|
+ v-for="pkg in packages"
|
|
|
+ :key="pkg.id"
|
|
|
+ class="col-12 col-sm-6 col-md-4"
|
|
|
+ >
|
|
|
+ <PackageCard :pkg="pkg" />
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div v-if="packages.length === 0" class="col-12 text-center text-grey-5 q-py-xl">
|
|
|
+ Nenhum pacote disponível para sua unidade
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { ref, onMounted } from "vue";
|
|
|
+
|
|
|
+import DefaultHeaderPage from "src/components/layout/DefaultHeaderPage.vue";
|
|
|
+import PackageCard from "./components/PackageCard.vue";
|
|
|
+
|
|
|
+import { getUnitPackages } from "src/api/package";
|
|
|
+
|
|
|
+const loading = ref(false);
|
|
|
+const packages = ref([]);
|
|
|
+
|
|
|
+const fetchPackages = async () => {
|
|
|
+ loading.value = true;
|
|
|
+ try {
|
|
|
+ packages.value = await getUnitPackages();
|
|
|
+ } finally {
|
|
|
+ loading.value = false;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+onMounted(fetchPackages);
|
|
|
+</script>
|