From 819199864d64538eada488207368d016803af729 Mon Sep 17 00:00:00 2001 From: chiayin Date: Wed, 15 Feb 2023 16:26:07 +0800 Subject: [PATCH] Global loading done. --- src/assets/loader.css | 31 ++++++++++++++++++++++ src/assets/main.css | 1 + src/components/Loading.vue | 5 ++++ src/main.js | 4 +-- src/stores/files.js | 15 +++++++++-- src/stores/loading.js | 7 +++++ src/stores/main.js | 3 +++ src/views/Files/index.vue | 51 +++++++++++++++++++++++++++++-------- src/views/MainContainer.vue | 12 ++++++--- 9 files changed, 110 insertions(+), 19 deletions(-) create mode 100644 src/assets/loader.css create mode 100644 src/components/Loading.vue create mode 100644 src/stores/loading.js create mode 100644 src/stores/main.js diff --git a/src/assets/loader.css b/src/assets/loader.css new file mode 100644 index 0000000..f8a0b19 --- /dev/null +++ b/src/assets/loader.css @@ -0,0 +1,31 @@ +.loader { + width: 64px; + height: 64px; + position: relative; + background-image: + linear-gradient(#FFF 16px, transparent 0) , + linear-gradient(#FF3D00 16px, transparent 0) , + linear-gradient(#FF3D00 16px, transparent 0) , + linear-gradient(#FFF 16px, transparent 0); + background-repeat: no-repeat; + background-size: 16px 16px; + background-position: left top , left bottom , right top , right bottom; + animation: rotate 1s linear infinite; +} +@keyframes rotate { + 0% { + width: 64px; + height: 64px; + transform: rotate(0deg) + } + 50% { + width: 30px; + height: 30px; + transform: rotate(180deg) + } + 100% { + width: 64px; + height: 64px; + transform: rotate(360deg) + } +} diff --git a/src/assets/main.css b/src/assets/main.css index 242bf8f..8887bb7 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -1 +1,2 @@ @import './tailwind.css'; +@import './loader.css'; diff --git a/src/components/Loading.vue b/src/components/Loading.vue new file mode 100644 index 0000000..14d971b --- /dev/null +++ b/src/components/Loading.vue @@ -0,0 +1,5 @@ + diff --git a/src/main.js b/src/main.js index 886a6e3..4262ad2 100644 --- a/src/main.js +++ b/src/main.js @@ -1,8 +1,8 @@ import { createApp, markRaw } from "vue"; -import { createPinia } from "pinia"; import App from "./App.vue"; import router from "./router"; +import pinia from '@/stores/main.js' import axios from 'axios'; import VueAxios from 'vue-axios'; import moment from 'moment'; @@ -11,7 +11,6 @@ import mitt from 'mitt'; import "./assets/main.css"; const emitter = mitt(); -const pinia = createPinia(); const app = createApp(App); pinia.use(({ store }) => { @@ -25,5 +24,4 @@ app.use(pinia); app.use(router); app.use(VueAxios, axios); - app.mount("#app"); diff --git a/src/stores/files.js b/src/stores/files.js index c70f8e6..8115504 100644 --- a/src/stores/files.js +++ b/src/stores/files.js @@ -1,7 +1,11 @@ import { defineStore } from "pinia"; +import loadingStore from './loading.js'; +import pinia from '@/stores/main.js' import axios from "axios"; import moment from 'moment'; +const loading = loadingStore(pinia); + export default defineStore('filesStore', { state: () => ({ allFilter: [ @@ -23,6 +27,7 @@ export default defineStore('filesStore', { DESIGN: ['Log', 'Design'], }, filesTag: 'ALL', + httpStatus: 200, }), getters: { /** @@ -60,8 +65,11 @@ export default defineStore('filesStore', { o.accessed_at = moment(o.accessed_at).format('YYYY-MM-DD HH:MM'); return this.allEventLog }) + if(this.httpStatus < 300) loading.isLoading = false; } catch(error) { - } finally {}; + loading.isLoading = true; + this.httpStatus = error.request.status; + }; }, /** * Fetch filters api @@ -78,8 +86,11 @@ export default defineStore('filesStore', { o.updated_at = moment(o.updated_at).format('YYYY-MM-DD HH:MM'); o.accessed_at = moment(o.accessed_at).format('YYYY-MM-DD HH:MM'); }); + if(this.httpStatus < 300) loading.isLoading = false; } catch(error) { - } finally {}; + loading.isLoading = true; + this.httpStatus = error.request.status; + }; }, } }) diff --git a/src/stores/loading.js b/src/stores/loading.js new file mode 100644 index 0000000..6cafe6b --- /dev/null +++ b/src/stores/loading.js @@ -0,0 +1,7 @@ +import { defineStore } from "pinia"; + +export default defineStore('loadingStore', { + state: () => ({ + isLoading: true, + }) +}); diff --git a/src/stores/main.js b/src/stores/main.js new file mode 100644 index 0000000..63280c1 --- /dev/null +++ b/src/stores/main.js @@ -0,0 +1,3 @@ +import { createPinia } from 'pinia'; +const pinia = createPinia(); +export default pinia; diff --git a/src/views/Files/index.vue b/src/views/Files/index.vue index 0d4f9d6..0503189 100644 --- a/src/views/Files/index.vue +++ b/src/views/Files/index.vue @@ -1,4 +1,6 @@