Начал писать фичу с прелоадером, но vue dev tools не работают
This commit is contained in:
parent
4018fd3334
commit
be218a5fea
|
@ -7,6 +7,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mdi/font": "^7.4.47",
|
"@mdi/font": "^7.4.47",
|
||||||
"axios": "^1.6.4",
|
"axios": "^1.6.4",
|
||||||
|
"pinia": "^2.1.7",
|
||||||
"typescript": "^5.3.3",
|
"typescript": "^5.3.3",
|
||||||
"vue": "^3.4.14",
|
"vue": "^3.4.14",
|
||||||
"vuetify": "^3.4.10"
|
"vuetify": "^3.4.10"
|
||||||
|
@ -605,6 +606,11 @@
|
||||||
"@vue/shared": "3.4.14"
|
"@vue/shared": "3.4.14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@vue/devtools-api": {
|
||||||
|
"version": "6.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz",
|
||||||
|
"integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA=="
|
||||||
|
},
|
||||||
"node_modules/@vue/reactivity": {
|
"node_modules/@vue/reactivity": {
|
||||||
"version": "3.4.14",
|
"version": "3.4.14",
|
||||||
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.14.tgz",
|
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.14.tgz",
|
||||||
|
@ -906,6 +912,56 @@
|
||||||
"url": "https://github.com/sponsors/jonschlinkert"
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pinia": {
|
||||||
|
"version": "2.1.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz",
|
||||||
|
"integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/devtools-api": "^6.5.0",
|
||||||
|
"vue-demi": ">=0.14.5"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/posva"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.4.0",
|
||||||
|
"typescript": ">=4.4.4",
|
||||||
|
"vue": "^2.6.14 || ^3.3.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"typescript": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/pinia/node_modules/vue-demi": {
|
||||||
|
"version": "0.14.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz",
|
||||||
|
"integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||||
|
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.0.0-rc.1",
|
||||||
|
"vue": "^3.0.0-0 || ^2.6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.33",
|
"version": "8.4.33",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@mdi/font": "^7.4.47",
|
"@mdi/font": "^7.4.47",
|
||||||
"axios": "^1.6.4",
|
"axios": "^1.6.4",
|
||||||
|
"pinia": "^2.1.7",
|
||||||
"typescript": "^5.3.3",
|
"typescript": "^5.3.3",
|
||||||
"vue": "^3.4.14",
|
"vue": "^3.4.14",
|
||||||
"vuetify": "^3.4.10"
|
"vuetify": "^3.4.10"
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
import {defineStore} from "pinia";
|
||||||
|
|
||||||
|
export const useScheduleStore = defineStore('Schedule', {
|
||||||
|
state: () => ({
|
||||||
|
fetchingDates: true,
|
||||||
|
fetchingTable: true,
|
||||||
|
fetchingLinks: true
|
||||||
|
}),
|
||||||
|
getters: {
|
||||||
|
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
|
||||||
|
},
|
||||||
|
})
|
|
@ -0,0 +1,22 @@
|
||||||
|
<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>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<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>
|
|
@ -1,12 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<v-sheet class="bg-gradient h-100 w-100 d-flex justify-center">
|
<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>
|
||||||
<p 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/>
|
|
||||||
</v-sheet>
|
|
||||||
</v-sheet>
|
</v-sheet>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -14,6 +12,7 @@
|
||||||
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",
|
||||||
|
@ -30,20 +29,16 @@ export default {
|
||||||
mounted() {
|
mounted() {
|
||||||
axios
|
axios
|
||||||
.get('/api/v1/dates')
|
.get('/api/v1/dates')
|
||||||
.then(response => (this.dates = response.data));
|
.then(response => {
|
||||||
|
this.dates = response.data;
|
||||||
|
useScheduleStore().fetchingDates = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
.bg-gradient {
|
|
||||||
background: linear-gradient(-45deg, #f103b0, #f0a068, #4fdbfeff);
|
|
||||||
background-size: 200% 200%;
|
|
||||||
animation: gradient 15s ease infinite;
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes gradient {
|
@keyframes gradient {
|
||||||
0% {
|
0% {
|
||||||
background-position: 0 50%;
|
background-position: 0 50%;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<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: () => ({
|
||||||
|
@ -8,7 +10,10 @@
|
||||||
mounted() {
|
mounted() {
|
||||||
axios
|
axios
|
||||||
.get('/api/v1/links')
|
.get('/api/v1/links')
|
||||||
.then(response => (this.links = response.data));
|
.then(response => {
|
||||||
|
this.links = response.data;
|
||||||
|
useScheduleStore().fetchingLinks = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<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: () => ({
|
||||||
|
@ -14,7 +16,10 @@
|
||||||
mounted() {
|
mounted() {
|
||||||
axios
|
axios
|
||||||
.get('/api/v1/schedules')
|
.get('/api/v1/schedules')
|
||||||
.then(response => (this.schedules = response.data));
|
.then(response => {
|
||||||
|
this.schedules = response.data;
|
||||||
|
useScheduleStore().fetchingTable = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,18 +1,34 @@
|
||||||
<template>
|
<template>
|
||||||
<v-app>
|
<v-app>
|
||||||
<Schedule></Schedule>
|
<v-sheet class="bg-gradient h-100 w-100 d-flex justify-center">
|
||||||
|
<Preloader v-if="fetching.value" />
|
||||||
|
<Schedule v-else />
|
||||||
|
</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: {Schedule}
|
components: {Preloader, Schedule},
|
||||||
|
data: () => ({
|
||||||
|
fetching: ref(useScheduleStore().fetchingDates || useScheduleStore().fetchingLinks || useScheduleStore().fetchingTable)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
|
.bg-gradient {
|
||||||
|
background: linear-gradient(-45deg, #f103b0, #f0a068, #4fdbfeff);
|
||||||
|
background-size: 200% 200%;
|
||||||
|
animation: gradient 15s ease infinite;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import './js/bootstrap';
|
import './js/bootstrap';
|
||||||
import {createApp} from 'vue'
|
import { createApp } from 'vue'
|
||||||
|
import { createPinia } from 'pinia'
|
||||||
import App from './views/Welcome.vue'
|
import App from './views/Welcome.vue'
|
||||||
import { createVuetify } from 'vuetify'
|
import { createVuetify } from 'vuetify'
|
||||||
import 'vuetify/styles'
|
import 'vuetify/styles'
|
||||||
|
@ -7,9 +8,11 @@ import * as components from 'vuetify/components'
|
||||||
import * as directives from 'vuetify/directives'
|
import * as directives from 'vuetify/directives'
|
||||||
import '@mdi/font/css/materialdesignicons.css'
|
import '@mdi/font/css/materialdesignicons.css'
|
||||||
|
|
||||||
|
const pinia = createPinia();
|
||||||
|
|
||||||
const vuetify = createVuetify({
|
const vuetify = createVuetify({
|
||||||
components,
|
components,
|
||||||
directives
|
directives
|
||||||
})
|
});
|
||||||
|
|
||||||
createApp(App).use(vuetify).mount("#app")
|
createApp(App).use(vuetify).use(pinia).mount("#app");
|
||||||
|
|
Loading…
Reference in New Issue