This commit is contained in:
Xuan Loi
2026-01-09 17:25:23 +07:00
commit ae1ea57130
315 changed files with 57694 additions and 0 deletions

59
layouts/default.vue Normal file
View File

@@ -0,0 +1,59 @@
<template>
<div class="has-background-light fullheight" data-theme="light" lang="vi" v-if="authorized">
<NuxtPage />
<SnackBar @close="snackbar=undefined" v-bind="snackbar" v-if="snackbar" />
<Modal @close="showmodal=undefined" v-bind="showmodal" v-if="showmodal" />
</div>
</template>
<script setup>
import SnackBar from '~/components/snackbar/SnackBar'
import { onMounted } from 'vue'
import { useStore } from '~/stores/index'
import { useRoute } from 'vue-router'
const route = useRoute()
const store = useStore()
const { $getdata, $requestLogin } = useNuxtApp()
var snackbar = ref()
var showmodal = ref()
var authorized = ref()
function getViewport() {
let viewport
var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth
if(width<=768) viewport = 1 //'mobile'
else if(width>=769 && width<=1023) viewport = 2 //'tablet'
else if(width>=1024 && width<=1215) viewport = 3 //'desktop'
else if(width>=1216 && width<=1407) viewport = 4 //'widescreen'
else if(width>=1408) viewport = 5 //'fullhd'
store.commit('viewport', viewport)
}
async function checkRedirect() {
if(route.query.username && route.query.token) {
let row = await $getdata('user', null, {filter: {username: route.query.username},
values: 'id,avatar,username,fullname,type__code,type__name'}, true)
if(row==='error' || row===undefined) $requestLogin()
else {
row.token = route.query.token
store.commit('login', row)
}
} else if(!store.login) return $requestLogin()
await checkLogin()
}
async function checkLogin() {
if(store.login? store.login.token : false) {
let authtoken = await $getdata('token', {token: store.login.token}, undefined, true)
if(authtoken? authtoken.expiry : true) return $requestLogin()
authorized.value = true
} else $requestLogin()
}
onMounted(()=> {
checkRedirect()
getViewport()
})
watch(() => store.snackbar, (newVal, oldVal) => {
snackbar.value = newVal
})
watch(() => store.showmodal, (newVal, oldVal) => {
showmodal.value = newVal
})
</script>