Реализовал прелоадеры на страницу расписания

This commit is contained in:
p.belezov 2024-03-07 12:35:07 +08:00
parent be218a5fea
commit e10b5abe90
6 changed files with 25 additions and 63 deletions

View File

@ -1,22 +0,0 @@
<template>
<v-dialog
class=""
:model-value="true"
width="auto"
persistent
>
<PreloaderWindow/>
</v-dialog>
</template>
<script>
import PreloaderWindow from "./PreloaderWindow.vue";
export default {
name: "Preloader"
}
</script>
<style scoped>
</style>

View File

@ -1,15 +0,0 @@
<template>
<div class="window glass rounded-lg d-flex flex-column justify-center align-center px-2">
<v-progress-linear indeterminate rounded="lg"/>
</div>
</template>
<script>
export default {
name: "PreloaderWindow"
}
</script>
<style scoped>
</style>

View File

@ -1,7 +1,8 @@
<template> <template>
<v-sheet class="mt-5 mb-5 rounded-lg w-75"> <v-sheet class="mt-5 mb-5 rounded-lg w-75">
<p class="text-h3 ma-5">Расписание стримов</p> <p class="text-h3 ma-5">Расписание стримов</p>
<p class="ma-5 text-h4">{{ parseDate(dates[0].current_date) }} - {{ parseDate(dates[1].current_date) }}</p> <v-skeleton-loader v-if="fetching" type="text" />
<p v-else class="ma-5 text-h4"> {{ parseDate(dates[0].current_date) }} - {{ parseDate(dates[1].current_date) }}</p>
<ScheduleTable/> <ScheduleTable/>
<p class="text-h3 ma-5">Ссылочки</p> <p class="text-h3 ma-5">Ссылочки</p>
<Links/> <Links/>
@ -12,27 +13,30 @@
import axios from "axios"; import axios from "axios";
import ScheduleTable from "./Schedule/ScheduleTable.vue"; import ScheduleTable from "./Schedule/ScheduleTable.vue";
import Links from "./Schedule/Links.vue"; import Links from "./Schedule/Links.vue";
import {useScheduleStore} from '../stores/Schedule.js';
export default { export default {
name: "Schedule", name: "Schedule",
components: {Links, ScheduleTable}, components: {Links, ScheduleTable},
data: () => ({ data: () => ({
dates: [] dates: [],
fetching: true
}), }),
methods: { methods: {
parseDate(date){ parseDate(date){
let dateArr = date.split("-"); let dateArr = date.split("-");
return dateArr[2] + "." + dateArr[1]; return dateArr[2] + "." + dateArr[1];
},
async getDates(){
await axios
.get('/api/v1/dates')
.then(response => {
this.dates = response.data;
this.fetching = false;
});
} }
}, },
mounted() { mounted() {
axios this.getDates();
.get('/api/v1/dates')
.then(response => {
this.dates = response.data;
useScheduleStore().fetchingDates = false;
});
} }
} }
</script> </script>

View File

@ -1,18 +1,18 @@
<script> <script>
import axios from "axios"; import axios from "axios";
import {useScheduleStore} from '../../stores/Schedule.js';
export default { export default {
name: "Links", name: "Links",
data: () => ({ data: () => ({
links: [] links: [],
fetching: true
}), }),
mounted() { mounted() {
axios axios
.get('/api/v1/links') .get('/api/v1/links')
.then(response => { .then(response => {
this.links = response.data; this.links = response.data;
useScheduleStore().fetchingLinks = false; this.fetching = false;
}); });
} }
} }
@ -21,7 +21,8 @@
<template> <template>
<div class="w-100 d-flex justify-center"> <div class="w-100 d-flex justify-center">
<v-list class="w-66"> <v-list class="w-66">
<v-list-item class="ma-5 bg-gradient-noh" elevation="6" v-for="link in links" :href="link.link"> <!-- style="background-color: #E57373; color: #FFFFFF" --> <v-skeleton-loader v-if="fetching" type="list-item"/>
<v-list-item v-else class="ma-5 bg-gradient-noh" elevation="6" v-for="link in links" :href="link.link"> <!-- style="background-color: #E57373; color: #FFFFFF" -->
<template v-slot:prepend> <template v-slot:prepend>
<v-avatar :image="link.image" rounded="0"></v-avatar> <v-avatar :image="link.image" rounded="0"></v-avatar>
</template> </template>

View File

@ -1,11 +1,11 @@
<script> <script>
import axios from "axios"; import axios from "axios";
import {useScheduleStore} from '../../stores/Schedule.js';
export default { export default {
name: "ScheduleTable", name: "ScheduleTable",
data: () => ({ data: () => ({
schedules: [] schedules: [],
fetching: true
}), }),
methods: { methods: {
parseDate(date){ parseDate(date){
@ -18,7 +18,7 @@
.get('/api/v1/schedules') .get('/api/v1/schedules')
.then(response => { .then(response => {
this.schedules = response.data; this.schedules = response.data;
useScheduleStore().fetchingTable = false; this.fetching = false;
}); });
} }
} }
@ -26,7 +26,8 @@
<template> <template>
<div class="w-100 d-flex justify-center"> <div class="w-100 d-flex justify-center">
<v-table class="text-h5 w-66"> <v-skeleton-loader v-if="fetching" type="table"/>
<v-table v-else class="text-h5 w-66">
<tbody> <tbody>
<tr v-for="schedule in schedules"> <tr v-for="schedule in schedules">
<td>{{ parseDate(schedule.current_date) }} {{ schedule.weekday_name }} {{ schedule.stream_time }}</td> <td>{{ parseDate(schedule.current_date) }} {{ schedule.weekday_name }} {{ schedule.stream_time }}</td>

View File

@ -1,24 +1,17 @@
<template> <template>
<v-app> <v-app>
<v-sheet class="bg-gradient h-100 w-100 d-flex justify-center"> <v-sheet class="bg-gradient h-100 w-100 d-flex justify-center">
<Preloader v-if="fetching.value" /> <Schedule/>
<Schedule v-else />
</v-sheet> </v-sheet>
</v-app> </v-app>
</template> </template>
<script> <script>
import Schedule from "./Schedule.vue"; import Schedule from "./Schedule.vue";
import Preloader from "./Preloader/Preloader.vue";
import {ref} from "vue";
import {useScheduleStore} from '../stores/Schedule.js';
export default { export default {
name: "Welcome", name: "Welcome",
components: {Preloader, Schedule}, components: {Schedule}
data: () => ({
fetching: ref(useScheduleStore().fetchingDates || useScheduleStore().fetchingLinks || useScheduleStore().fetchingTable)
})
} }
</script> </script>