diff --git a/src/components/Navbar.vue b/src/components/Navbar.vue
index d5382b264..d25fe43a2 100644
--- a/src/components/Navbar.vue
+++ b/src/components/Navbar.vue
@@ -32,7 +32,7 @@ defineEmits(['toggle-drawer']);
-
+
New customer
diff --git a/src/components/UserPanel.vue b/src/components/UserPanel.vue
index 679ec6859..1d97bfbc9 100644
--- a/src/components/UserPanel.vue
+++ b/src/components/UserPanel.vue
@@ -3,14 +3,15 @@ import { onMounted, computed } from 'vue';
import { Dark, useQuasar } from 'quasar';
import { useI18n } from 'vue-i18n';
import { useRouter } from 'vue-router';
-import axios from 'axios';
import { useState } from 'src/composables/useState';
import { useSession } from 'src/composables/useSession';
+import { useRole } from 'src/composables/useRole';
const quasar = useQuasar();
const state = useState();
const session = useSession();
+const role = useRole();
const router = useRouter();
const { t, locale } = useI18n();
@@ -28,11 +29,10 @@ const token = session.getToken();
onMounted(async () => {
try {
- const { data } = await axios.get('/api/accounts/acl');
- const roles = data.roles.map(userRoles => userRoles.role.name);
-
- state.setUser(data.user);
- state.setRoles(roles);
+ const stateRoles = state.getRoles().value
+ if (stateRoles.length === 0) {
+ await role.fetch();
+ }
} catch (error) {
quasar.notify({
message: t('errors.statusUnauthorized'),
diff --git a/src/composables/useRole.js b/src/composables/useRole.js
index 8d9ae8b8d..5cf4c3e29 100644
--- a/src/composables/useRole.js
+++ b/src/composables/useRole.js
@@ -1,9 +1,20 @@
import { useState } from './useState';
+import axios from 'axios';
+
+
+const state = useState();
export function useRole() {
+ async function fetch() {
+ const { data } = await axios.get('/api/accounts/acl');
+ const roles = data.roles.map(userRoles => userRoles.role.name);
+
+ state.setUser(data.user);
+ state.setRoles(roles);
+ }
+
function hasAny(roles) {
- const { getRoles } = useState();
- const roleStore = getRoles();
+ const roleStore = state.getRoles();
for (const role of roles) {
if (roleStore.value.indexOf(role) !== -1) return true;
@@ -13,6 +24,7 @@ export function useRole() {
}
return {
+ fetch,
hasAny,
};
}
diff --git a/src/composables/useSession.js b/src/composables/useSession.js
index 3a60c33b9..e52829ba7 100644
--- a/src/composables/useSession.js
+++ b/src/composables/useSession.js
@@ -1,4 +1,5 @@
import { useState } from './useState';
+import { useRole } from './useRole';
export function useSession() {
function getToken() {
@@ -29,6 +30,14 @@ export function useSession() {
});
}
+ async function login(token, keepLogin) {
+ const { fetch } = useRole();
+
+ setToken({ token, keepLogin });
+
+ await fetch();
+ }
+
function isLoggedIn() {
const localToken = localStorage.getItem('token');
const sessionToken = sessionStorage.getItem('token');
@@ -40,6 +49,7 @@ export function useSession() {
getToken,
setToken,
destroy,
+ login,
isLoggedIn,
};
}
diff --git a/src/pages/Customer/Card/CustomerBasicData.vue b/src/pages/Customer/Card/CustomerBasicData.vue
index 97af8c637..b4e913ad5 100644
--- a/src/pages/Customer/Card/CustomerBasicData.vue
+++ b/src/pages/Customer/Card/CustomerBasicData.vue
@@ -1,3 +1,3 @@
- asd
+ Basic Data
\ No newline at end of file
diff --git a/src/pages/Customer/Card/CustomerCard.vue b/src/pages/Customer/Card/CustomerCard.vue
index d386fb094..152c8cfdc 100644
--- a/src/pages/Customer/Card/CustomerCard.vue
+++ b/src/pages/Customer/Card/CustomerCard.vue
@@ -4,7 +4,7 @@
-
+ Descriptor
diff --git a/src/pages/Dashboard/Dashboard.vue b/src/pages/Dashboard/Dashboard.vue
index 3b1ac8f33..f02d33f3f 100644
--- a/src/pages/Dashboard/Dashboard.vue
+++ b/src/pages/Dashboard/Dashboard.vue
@@ -1,13 +1,9 @@
@@ -19,9 +15,8 @@ const isSalesPerson = computed(() => hasAny(['salesPerson']));
rounded
class="bg-orange text-white q-mb-lg"
>
- {{ isSalesPerson }}
+ Employee notification message
-
diff --git a/src/pages/Login/Login.vue b/src/pages/Login/Login.vue
index 2c18a4283..a49222ab4 100644
--- a/src/pages/Login/Login.vue
+++ b/src/pages/Login/Login.vue
@@ -32,17 +32,19 @@ async function onSubmit() {
password: password.value,
});
- session.setToken({
- token: data.token,
- keepLogin: keepLogin.value,
- });
+ await session.login(data.token, keepLogin.value);
quasar.notify({
message: t('login.loginSuccess'),
type: 'positive',
});
- await router.push({ path: '/dashboard' });
+ const currentRoute = router.currentRoute.value;
+ if (currentRoute.query && currentRoute.query.redirect) {
+ router.push(currentRoute.query.redirect);
+ } else {
+ router.push({ name: 'Dashboard' });
+ }
} catch (error) {
if (axios.isAxiosError(error)) {
const errorCode = error.response && error.response.status;
diff --git a/src/router/index.js b/src/router/index.js
index 476d34a81..221671eb0 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -36,18 +36,18 @@ export default route(function (/* { store, ssrContext } */) {
Router.beforeEach((to, from, next) => {
const { isLoggedIn } = session;
- if (!isLoggedIn && to.name !== 'Login') {
- next({ path: '/login', query: { redirect: to.fullPath } });
+ if (!isLoggedIn() && to.name !== 'Login') {
+ next({ name: 'Login', query: { redirect: to.fullPath } });
} else {
- const pathRoutes = to.matched;
- const droles = pathRoutes.every(route => {
+ const matches = to.matched;
+ const hasRequiredRoles = matches.every(route => {
const meta = route.meta;
- if (meta.roles)
+ if (meta && meta.roles)
return role.hasAny(meta.roles)
return true;
});
- if (droles) {
+ if (hasRequiredRoles) {
next();
} else {
next({ path: '/' });
diff --git a/src/router/routes.js b/src/router/routes.js
index e40a9ef89..d4b63df1d 100644
--- a/src/router/routes.js
+++ b/src/router/routes.js
@@ -6,7 +6,7 @@ const routes = [
path: '/login',
name: 'Login',
meta: { title: 'logIn' },
- component: () => import('../pages/Login/Login.vue'),
+ component: () => import('../pages/Login/Login.vue')
},
{
path: '/',