Files
hrm/app/layouts/default.vue
2026-04-06 15:53:14 +07:00

120 lines
2.8 KiB
Vue

<template>
<div
style="min-height: 100vh"
class="has-background-white"
data-theme="light"
lang="vi"
v-if="authorized"
>
<slot />
<SnackBar
v-if="snackbar"
v-bind="snackbar"
@close="$store.removeSnackbar()"
/>
<Modal v-if="showmodal" v-bind="showmodal" @close="showmodal = undefined" />
</div>
</template>
<script setup>
import { onMounted } from 'vue';
import { useRoute } from 'vue-router';
import SnackBar from '@/components/snackbar/SnackBar.vue';
import Modal from '@/components/Modal.vue';
const route = useRoute();
const { $getdata, $requestLogin, $store } = useNuxtApp();
var authorized = ref(false);
const snackbar = ref(undefined);
const showmodal = ref(undefined);
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,type__code,type__name,is_admin',
},
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) {
$store.commit(
'rights',
await $getdata('grouprights', { group: $store.login.type }),
);
$store.commit(
'dealer',
await $getdata(
'dealer',
undefined,
{
filter: { user: $store.login.id },
values: 'id,code,name,phone,email,create_time',
},
true,
),
);
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) => {
snackbar.value = newVal;
},
{ deep: true },
);
watch(
() => $store.showmodal,
(newVal, oldVal) => {
showmodal.value = newVal;
},
);
</script>
<style scoped>
:deep(.card) {
box-shadow: none;
outline: 1px solid hsl(0, 0%, 85%);
}
</style>