feat(login): refactor login page code, trim excess logic, refine UI, use innate Quasar and Vue utils and components
This commit is contained in:
parent
984ac83f67
commit
7317f35df3
|
|
@ -67,6 +67,12 @@ export default defineConfigWithVueTs(
|
||||||
rules: {
|
rules: {
|
||||||
'prefer-promise-reject-errors': 'off',
|
'prefer-promise-reject-errors': 'off',
|
||||||
|
|
||||||
|
// warn about unused but underscored variables
|
||||||
|
'no-unused-vars': [
|
||||||
|
'warn',
|
||||||
|
{ argsIgnorePattern: '^_' }
|
||||||
|
],
|
||||||
|
|
||||||
// allow debugger during development only
|
// allow debugger during development only
|
||||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -126,7 +126,9 @@ export default defineConfig((ctx) => {
|
||||||
|
|
||||||
// animations: 'all', // --- includes all animations
|
// animations: 'all', // --- includes all animations
|
||||||
// https://v2.quasar.dev/options/animations
|
// https://v2.quasar.dev/options/animations
|
||||||
animations: [],
|
animations: [
|
||||||
|
'fadeInUp',
|
||||||
|
],
|
||||||
|
|
||||||
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#sourcefiles
|
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#sourcefiles
|
||||||
// sourceFiles: {
|
// sourceFiles: {
|
||||||
|
|
@ -219,7 +221,7 @@ export default defineConfig((ctx) => {
|
||||||
builder: {
|
builder: {
|
||||||
// https://www.electron.build/configuration/configuration
|
// https://www.electron.build/configuration/configuration
|
||||||
|
|
||||||
appId: 'quasar-project'
|
appId: 'App Targo'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
BIN
src/assets/login-background.png
Normal file
BIN
src/assets/login-background.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 938 KiB |
|
|
@ -14,7 +14,7 @@ declare module 'vue' {
|
||||||
// good idea to move this instance creation inside of the
|
// good idea to move this instance creation inside of the
|
||||||
// "export default () => {}" function below (which runs individually
|
// "export default () => {}" function below (which runs individually
|
||||||
// for each client)
|
// for each client)
|
||||||
const api = axios.create({ baseURL: 'https://api.example.com' });
|
const api = axios.create({ baseURL: import.meta.env.VITE_TARGO_BACKEND_URL });
|
||||||
|
|
||||||
export default defineBoot(({ app }) => {
|
export default defineBoot(({ app }) => {
|
||||||
// for use inside Vue files (Options API) through this.$axios and this.$api
|
// for use inside Vue files (Options API) through this.$axios and this.$api
|
||||||
|
|
|
||||||
|
|
@ -1 +1,6 @@
|
||||||
// app global css in SCSS form
|
// app global css in SCSS form
|
||||||
|
@each $size in (5, 10, 15, 20, 25) {
|
||||||
|
.rounded-#{$size} {
|
||||||
|
border-radius: #{$size}px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -13,13 +13,13 @@
|
||||||
// Tip: Use the "Theme Builder" on Quasar's documentation website.
|
// Tip: Use the "Theme Builder" on Quasar's documentation website.
|
||||||
|
|
||||||
$primary: #019547;
|
$primary: #019547;
|
||||||
$secondary: #dadded;
|
$secondary: #EFFFEF;
|
||||||
$accent: #1976d2;
|
$accent: #ADEAC6;
|
||||||
|
|
||||||
$dark-font: #305530;
|
$dark-font: #305530;
|
||||||
|
|
||||||
$dark: #111212;
|
$dark: #323232;
|
||||||
$dark-page: #121212;
|
$dark-page: #323232;
|
||||||
|
|
||||||
$positive: #21ba45;
|
$positive: #21ba45;
|
||||||
$negative: #c10015;
|
$negative: #c10015;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
export default {
|
export default {
|
||||||
mainLayout: {
|
footerLayout: {
|
||||||
backButton: 'Back to home',
|
title: `Targo Communications, 2005 - 2025)}. All rights reserved.`,
|
||||||
clearFilter: 'Clear filter',
|
|
||||||
},
|
},
|
||||||
helpPage: {
|
helpPage: {
|
||||||
title_1: 'Contact Us',
|
title_1: 'Contact Us',
|
||||||
|
|
@ -19,6 +18,10 @@ export default {
|
||||||
messageValidation: 'Message must be a valid email.',
|
messageValidation: 'Message must be a valid email.',
|
||||||
submit: 'Send',
|
submit: 'Send',
|
||||||
},
|
},
|
||||||
|
mainLayout: {
|
||||||
|
backButton: 'Back to home',
|
||||||
|
clearFilter: 'Clear filter',
|
||||||
|
},
|
||||||
navBar: {
|
navBar: {
|
||||||
navItem_1: 'Users list',
|
navItem_1: 'Users list',
|
||||||
navItem_2: 'Shift validations',
|
navItem_2: 'Shift validations',
|
||||||
|
|
@ -33,9 +36,6 @@ export default {
|
||||||
pageTitle: 'Oops. Nothing here...',
|
pageTitle: 'Oops. Nothing here...',
|
||||||
backButton: 'Go to the home page',
|
backButton: 'Go to the home page',
|
||||||
},
|
},
|
||||||
footerLayout: {
|
|
||||||
title: `Targo Communications, 2005 - 2025)}. All rights reserved.`,
|
|
||||||
},
|
|
||||||
loginPage: {
|
loginPage: {
|
||||||
title: 'Log in to Targo',
|
title: 'Log in to Targo',
|
||||||
forgotPassword: 'Forgot Password?',
|
forgotPassword: 'Forgot Password?',
|
||||||
|
|
@ -43,9 +43,10 @@ export default {
|
||||||
email: 'Email',
|
email: 'Email',
|
||||||
password: 'Password',
|
password: 'Password',
|
||||||
submit: 'Sign in ',
|
submit: 'Sign in ',
|
||||||
authentik: 'Targo authentication',
|
employeeLoginButton: 'Targo employee login',
|
||||||
emailValidation: 'Email must be a valid email.',
|
emailValidation: 'Email must be a valid email.',
|
||||||
passwordValidation: 'Password must be a valid email.',
|
passwordValidation: 'Password must be a valid email.',
|
||||||
|
rememberMe: 'Remember me',
|
||||||
},
|
},
|
||||||
signUpPage: {
|
signUpPage: {
|
||||||
title: 'Create a new account',
|
title: 'Create a new account',
|
||||||
|
|
|
||||||
|
|
@ -1,102 +1,4 @@
|
||||||
export default {
|
export default {
|
||||||
mainLayout: {
|
|
||||||
backButton: 'Retour à la page d’accueil',
|
|
||||||
clearFilter: 'Effacer le filtre',
|
|
||||||
},
|
|
||||||
helpPage: {
|
|
||||||
title_1: 'Contactez-nous',
|
|
||||||
title_2:
|
|
||||||
'Veuillez remplir le formulaire ci-dessous et nous vous communiquerons dès que possible.',
|
|
||||||
fullName: 'Nom complet*',
|
|
||||||
email: 'Adresse e-mail*',
|
|
||||||
phoneNumber: 'Numéro de téléphone*',
|
|
||||||
message:
|
|
||||||
'Comment pouvons-nous vous aider? S’il vous plaît utiliser cette zone pour fournir un message détaillé, Merci!*',
|
|
||||||
//form validation
|
|
||||||
fullNameValidation: 'Le nom complet doit être rempli.',
|
|
||||||
emailValidation: 'L’e-mail doit être un e-mail valide.',
|
|
||||||
phoneNumberValidation: 'Le numéro de téléphone doit être rempli.',
|
|
||||||
messageValidation: 'Message doit être rempli.',
|
|
||||||
submit: 'Envoyer',
|
|
||||||
},
|
|
||||||
navBar: {
|
|
||||||
navItem_1: 'Liste des utilisateurs',
|
|
||||||
navItem_2: 'Validations des quarts de travail',
|
|
||||||
menuItem_1: 'Profil',
|
|
||||||
menuItem_2: 'Aide',
|
|
||||||
menuItem_3: 'Déconnexion',
|
|
||||||
menuItem_4: 'Carte de temps',
|
|
||||||
menuItem_5: 'Calendrier annuel',
|
|
||||||
mobileIndexTitle: 'Bonjour',
|
|
||||||
},
|
|
||||||
notFoundPage: {
|
|
||||||
pageTitle: 'Oops. Rien ici...',
|
|
||||||
backButton: 'Aller à la page d’accueil',
|
|
||||||
},
|
|
||||||
footerLayout: {
|
|
||||||
title: `Targo Canada, 2005 - 2025. Tous droits réservés.`,
|
|
||||||
},
|
|
||||||
loginPage: {
|
|
||||||
title: 'Se connecter à Targo',
|
|
||||||
forgotPassword: 'Mot de passe oublié?',
|
|
||||||
signUp: 'Vous n’avez pas encore de compte?',
|
|
||||||
email: 'Email',
|
|
||||||
password: 'Mot de passe',
|
|
||||||
submit: 'Se connecter',
|
|
||||||
authentik: 'Authentification Targo',
|
|
||||||
emailValidation: 'Email doit être un e-mail valide.',
|
|
||||||
passwordValidation: 'Mot de passe doit être rempli.',
|
|
||||||
},
|
|
||||||
signUpPage: {
|
|
||||||
title: 'Créer un nouveau compte',
|
|
||||||
firstName: 'Prénom',
|
|
||||||
lastName: 'Nom de famille',
|
|
||||||
email: 'Email',
|
|
||||||
phoneNumber: 'Numéro de téléphone',
|
|
||||||
password: 'Nouveau mot de passe',
|
|
||||||
confirmedPassword: 'Confirmez votre mot de passe',
|
|
||||||
signIn: 'Vous avez déjà un compte?',
|
|
||||||
submit: 'S’inscrire',
|
|
||||||
firstNameValidation: 'Le prénom doit être rempli.',
|
|
||||||
lastNameValidation: 'Le nom de famille doit être rempli.',
|
|
||||||
emailValidation: 'Email doit être un e-mail valide.',
|
|
||||||
phoneNumberValidation: 'Numéro de téléphone doit être rempli.',
|
|
||||||
passwordValidationTitle: 'Critères de mot de passe :',
|
|
||||||
passwordValidation: 'Le mot de passe doit répondre à tous les critères.',
|
|
||||||
passwordLengthValidation: 'Doit être d’au moins 8 caractères de long.',
|
|
||||||
passwordCapitalValidation: 'Doit contenir au moins une lettre majuscule.',
|
|
||||||
passwordNumberValidation: 'Doit contenir au moins un numéro.',
|
|
||||||
passwordSpecialCharacterValidation:
|
|
||||||
'Doit contenir au moins un caractère spécial : !@#$%^&*()-_+=',
|
|
||||||
confirmPasswordValidation:
|
|
||||||
'Le mot de passe doit correspondre au nouveau mot de passe.',
|
|
||||||
},
|
|
||||||
forgotPage: {
|
|
||||||
title:
|
|
||||||
'Veuillez saisir votre e-mail pour rechercher votre compte et envoyer un code de vérification.',
|
|
||||||
email: 'Email',
|
|
||||||
emailValidation: 'Email doit être un e-mail valide.',
|
|
||||||
submit: 'Envoyer code',
|
|
||||||
cancel: 'Annuler',
|
|
||||||
},
|
|
||||||
resetPage: {
|
|
||||||
title: 'Réinitialiser votre mot de passe',
|
|
||||||
code: 'code',
|
|
||||||
codeValidation: 'Le code doit être rempli avec 4 chiffres.',
|
|
||||||
newPassword: 'Nouveau mot de passe',
|
|
||||||
confirmedPassword: 'Confirmez votre mot de passe',
|
|
||||||
newPasswordValidation: 'Le mot de passe doit répondre à tous les critères.',
|
|
||||||
newPasswordLengthValidation: 'Doit être d’au moins 8 caractères de long.',
|
|
||||||
newPasswordCapitalValidation:
|
|
||||||
'Doit contenir au moins une lettre majuscule.',
|
|
||||||
newPasswordNumberValidation: 'Doit contenir au moins un numéro.',
|
|
||||||
newPasswordSpecialCharacterValidation:
|
|
||||||
'Doit contenir au moins un caractère spécial : !@#$%^&*()-_+=',
|
|
||||||
confirmNewPasswordValidation:
|
|
||||||
'Le mot de passe doit correspondre au nouveau mot de passe.',
|
|
||||||
submit: 'Envoyer',
|
|
||||||
cancel: 'Annuler',
|
|
||||||
},
|
|
||||||
accountDialog: {
|
accountDialog: {
|
||||||
title: 'Plus',
|
title: 'Plus',
|
||||||
item_1: 'Langue',
|
item_1: 'Langue',
|
||||||
|
|
@ -105,97 +7,6 @@ export default {
|
||||||
item_4: 'Carte de temps',
|
item_4: 'Carte de temps',
|
||||||
item_5: 'Calendrier annuel',
|
item_5: 'Calendrier annuel',
|
||||||
},
|
},
|
||||||
notificationDialog: {
|
|
||||||
notice: 'Notification',
|
|
||||||
markAllRead: 'Marquer tout comme lu',
|
|
||||||
deleteAll: 'Supprimer tout',
|
|
||||||
close: 'Fermer',
|
|
||||||
},
|
|
||||||
profilePage: {
|
|
||||||
title: 'Profil',
|
|
||||||
firstName: 'Prénom',
|
|
||||||
lastName: 'Nom de famille',
|
|
||||||
email: 'Email',
|
|
||||||
phoneNumber: 'Numéro de téléphone',
|
|
||||||
job_title: 'Titre du poste',
|
|
||||||
company: 'Entreprise',
|
|
||||||
supervisor: 'Superviseur',
|
|
||||||
role: 'Role',
|
|
||||||
address: 'Adresse',
|
|
||||||
job_titleValidation: 'Le champ "titre du poste" doit être rempli.',
|
|
||||||
companyValidation: 'Le champ "entreprise" doit être rempli.',
|
|
||||||
supervisorValidation: 'Un employé qui n’a pas le rôle de superviseur doit être attribué à un superviseur.',
|
|
||||||
roleValidation: 'Le champ "rôle" doit être rempli.',
|
|
||||||
addressValidation: 'Le champ "adresse" doit être rempli.',
|
|
||||||
firstNameValidation: 'Le champ "prénom" doit être rempli.',
|
|
||||||
lastNameValidation: 'Le champ "nom de famille" doit être rempli.',
|
|
||||||
phoneNumberValidation: 'Le champ "numéro de téléphone" doit être rempli.',
|
|
||||||
submit: 'Modifier Profil',
|
|
||||||
},
|
|
||||||
indexAdminPage: {
|
|
||||||
card_1: 'Administrateurs',
|
|
||||||
card_2: 'Techniciens',
|
|
||||||
card_3: 'Marchand',
|
|
||||||
card_4: 'Clients',
|
|
||||||
},
|
|
||||||
usersListPage: {
|
|
||||||
tableHeader: 'Liste des utilisateurs',
|
|
||||||
search_input: 'Rechercher',
|
|
||||||
tableCol_1: 'État',
|
|
||||||
tableCol_2: 'Prénom',
|
|
||||||
tableCol_3: 'Nom de famille',
|
|
||||||
tableCol_4: 'Email',
|
|
||||||
tableCol_5: 'Numéro de téléphone',
|
|
||||||
tableCol_6: 'Type d’utilisateur',
|
|
||||||
tableCol_7: 'Role',
|
|
||||||
tableCol_8: 'Créé par',
|
|
||||||
tableCol_9: 'Superviseur',
|
|
||||||
activeStatus: 'Actif',
|
|
||||||
unActiveStatus: 'Inactif',
|
|
||||||
addButton: 'Cliquez ici pour ajouter un nouvel utilisateur',
|
|
||||||
customer: 'Client',
|
|
||||||
dealer: 'Marchand',
|
|
||||||
employee: 'Employé',
|
|
||||||
technician: 'Technicien',
|
|
||||||
admin: 'Administrateur',
|
|
||||||
support: 'Support',
|
|
||||||
},
|
|
||||||
editUserPage: {
|
|
||||||
title: 'Modifier le compte',
|
|
||||||
passwordTitle: 'Réinitialiser le mot de passe',
|
|
||||||
firstName: 'Prénom',
|
|
||||||
lastName: 'Nom de famille',
|
|
||||||
email: 'Email',
|
|
||||||
phoneNumber: 'Numéro de téléphone',
|
|
||||||
type: 'Choisir un type',
|
|
||||||
role: 'Choisir un role',
|
|
||||||
job_title: 'Titre d’emploi',
|
|
||||||
company: 'Entreprise',
|
|
||||||
supervisor: 'Superviseur',
|
|
||||||
isSupervisor: 'Est un superviseur',
|
|
||||||
hours_bank_max: 'Maximum de banque d’heures ',
|
|
||||||
address: 'Adresse',
|
|
||||||
verifiedAccountStatus: 'Compte vérifié',
|
|
||||||
unVerifiedAccountStatus: 'Compte non vérifié',
|
|
||||||
password: 'Nouveau mot de passe',
|
|
||||||
confirmedPassword: 'Confirmez votre mot de passe',
|
|
||||||
submit: 'Modifier le compte',
|
|
||||||
//Form Validaiton
|
|
||||||
firstNameValidation: 'Le prénom doit être rempli.',
|
|
||||||
lastNameValidation: 'Le nom de famille doit être rempli.',
|
|
||||||
emailValidation: 'Email doit être un e-mail valide.',
|
|
||||||
phoneNumberValidation: 'Numéro de téléphone doit être rempli.',
|
|
||||||
typeValidation: 'Type doit être rempli.',
|
|
||||||
roleValidation: 'Role doit être rempli.',
|
|
||||||
job_titleValidation: 'Le Titre d’emploi doit être rempli.',
|
|
||||||
companyValidation: 'Entreprise doit être rempli.',
|
|
||||||
supervisorValidation: 'Superviseur doit être rempli.',
|
|
||||||
hours_bank_maxValidation: 'Maximum de banque d’heures doit être rempli.',
|
|
||||||
addressValidation: 'Adresse doit être rempli.',
|
|
||||||
passwordValidation: 'Le mot de passe doit répondre à tous les critères.',
|
|
||||||
confirmPasswordValidation:
|
|
||||||
'Le mot de passe doit correspondre au nouveau mot de passe.',
|
|
||||||
},
|
|
||||||
addUserPage: {
|
addUserPage: {
|
||||||
title: 'Créer un utilisateur',
|
title: 'Créer un utilisateur',
|
||||||
firstName: 'Prénom',
|
firstName: 'Prénom',
|
||||||
|
|
@ -239,12 +50,243 @@ export default {
|
||||||
confirmPasswordValidation:
|
confirmPasswordValidation:
|
||||||
'Le mot de passe doit correspondre au nouveau mot de passe.',
|
'Le mot de passe doit correspondre au nouveau mot de passe.',
|
||||||
},
|
},
|
||||||
|
autoLogout: {
|
||||||
|
title: 'Alerte',
|
||||||
|
message_start: 'Attention : vous serez automatiquement déconnecté dans',
|
||||||
|
message_end: 'secondes si vous n’interagissez pas avec l’écran.',
|
||||||
|
},
|
||||||
|
daysOfWeek: {
|
||||||
|
Sunday: 'dimanche',
|
||||||
|
Monday: 'lundi',
|
||||||
|
Tuesday: 'mardi',
|
||||||
|
Wednesday: 'mercredi',
|
||||||
|
Thursday: 'jeudi',
|
||||||
|
Friday: 'vendredi',
|
||||||
|
Saturday: 'samedi',
|
||||||
|
},
|
||||||
|
editUserPage: {
|
||||||
|
title: 'Modifier le compte',
|
||||||
|
passwordTitle: 'Réinitialiser le mot de passe',
|
||||||
|
firstName: 'Prénom',
|
||||||
|
lastName: 'Nom de famille',
|
||||||
|
email: 'Email',
|
||||||
|
phoneNumber: 'Numéro de téléphone',
|
||||||
|
type: 'Choisir un type',
|
||||||
|
role: 'Choisir un role',
|
||||||
|
job_title: 'Titre d’emploi',
|
||||||
|
company: 'Entreprise',
|
||||||
|
supervisor: 'Superviseur',
|
||||||
|
isSupervisor: 'Est un superviseur',
|
||||||
|
hours_bank_max: 'Maximum de banque d’heures ',
|
||||||
|
address: 'Adresse',
|
||||||
|
verifiedAccountStatus: 'Compte vérifié',
|
||||||
|
unVerifiedAccountStatus: 'Compte non vérifié',
|
||||||
|
password: 'Nouveau mot de passe',
|
||||||
|
confirmedPassword: 'Confirmez votre mot de passe',
|
||||||
|
submit: 'Modifier le compte',
|
||||||
|
//Form Validaiton
|
||||||
|
firstNameValidation: 'Le prénom doit être rempli.',
|
||||||
|
lastNameValidation: 'Le nom de famille doit être rempli.',
|
||||||
|
emailValidation: 'Email doit être un e-mail valide.',
|
||||||
|
phoneNumberValidation: 'Numéro de téléphone doit être rempli.',
|
||||||
|
typeValidation: 'Type doit être rempli.',
|
||||||
|
roleValidation: 'Role doit être rempli.',
|
||||||
|
job_titleValidation: 'Le Titre d’emploi doit être rempli.',
|
||||||
|
companyValidation: 'Entreprise doit être rempli.',
|
||||||
|
supervisorValidation: 'Superviseur doit être rempli.',
|
||||||
|
hours_bank_maxValidation: 'Maximum de banque d’heures doit être rempli.',
|
||||||
|
addressValidation: 'Adresse doit être rempli.',
|
||||||
|
passwordValidation: 'Le mot de passe doit répondre à tous les critères.',
|
||||||
|
confirmPasswordValidation:
|
||||||
|
'Le mot de passe doit correspondre au nouveau mot de passe.',
|
||||||
|
},
|
||||||
|
expenseColumns: {
|
||||||
|
title: 'Dépenses',
|
||||||
|
column_1: 'Type',
|
||||||
|
column_2: 'Montant',
|
||||||
|
column_3: 'Attachement',
|
||||||
|
column_4: 'Description',
|
||||||
|
column_5: 'État',
|
||||||
|
column_6: 'Rapport du superviseur',
|
||||||
|
},
|
||||||
|
footerLayout: {
|
||||||
|
title: `Targo Canada, 2005 - 2025. Tous droits réservés.`,
|
||||||
|
},
|
||||||
|
forgotPage: {
|
||||||
|
title:
|
||||||
|
'Veuillez saisir votre e-mail pour rechercher votre compte et envoyer un code de vérification.',
|
||||||
|
email: 'Email',
|
||||||
|
emailValidation: 'Email doit être un e-mail valide.',
|
||||||
|
submit: 'Envoyer code',
|
||||||
|
cancel: 'Annuler',
|
||||||
|
},
|
||||||
|
helpPage: {
|
||||||
|
title_1: 'Contactez-nous',
|
||||||
|
title_2:
|
||||||
|
'Veuillez remplir le formulaire ci-dessous et nous vous communiquerons dès que possible.',
|
||||||
|
fullName: 'Nom complet*',
|
||||||
|
email: 'Adresse e-mail*',
|
||||||
|
phoneNumber: 'Numéro de téléphone*',
|
||||||
|
message:
|
||||||
|
'Comment pouvons-nous vous aider? S’il vous plaît utiliser cette zone pour fournir un message détaillé, Merci!*',
|
||||||
|
//form validation
|
||||||
|
fullNameValidation: 'Le nom complet doit être rempli.',
|
||||||
|
emailValidation: 'L’e-mail doit être un e-mail valide.',
|
||||||
|
phoneNumberValidation: 'Le numéro de téléphone doit être rempli.',
|
||||||
|
messageValidation: 'Message doit être rempli.',
|
||||||
|
submit: 'Envoyer',
|
||||||
|
},
|
||||||
|
indexAdminPage: {
|
||||||
|
card_1: 'Administrateurs',
|
||||||
|
card_2: 'Techniciens',
|
||||||
|
card_3: 'Marchand',
|
||||||
|
card_4: 'Clients',
|
||||||
|
},
|
||||||
|
loginPage: {
|
||||||
|
title: 'Se connecter à Targo',
|
||||||
|
forgotPassword: 'Mot de passe oublié?',
|
||||||
|
signUp: 'Vous n’avez pas encore de compte?',
|
||||||
|
email: 'Email',
|
||||||
|
password: 'Mot de passe',
|
||||||
|
submit: 'Se connecter',
|
||||||
|
employeeLoginButton: 'Login employé Targo',
|
||||||
|
emailValidation: 'Email doit être un e-mail valide.',
|
||||||
|
passwordValidation: 'Mot de passe doit être rempli.',
|
||||||
|
rememberMe: 'Rester connecté',
|
||||||
|
},
|
||||||
|
mainLayout: {
|
||||||
|
backButton: 'Retour à la page d’accueil',
|
||||||
|
clearFilter: 'Effacer le filtre',
|
||||||
|
},
|
||||||
|
navBar: {
|
||||||
|
navItem_1: 'Liste des utilisateurs',
|
||||||
|
navItem_2: 'Validations des quarts de travail',
|
||||||
|
menuItem_1: 'Profil',
|
||||||
|
menuItem_2: 'Aide',
|
||||||
|
menuItem_3: 'Déconnexion',
|
||||||
|
menuItem_4: 'Carte de temps',
|
||||||
|
menuItem_5: 'Calendrier annuel',
|
||||||
|
mobileIndexTitle: 'Bonjour',
|
||||||
|
},
|
||||||
|
notFoundPage: {
|
||||||
|
pageTitle: 'Oops. Rien ici...',
|
||||||
|
backButton: 'Aller à la page d’accueil',
|
||||||
|
},
|
||||||
|
notificationDialog: {
|
||||||
|
notice: 'Notification',
|
||||||
|
markAllRead: 'Marquer tout comme lu',
|
||||||
|
deleteAll: 'Supprimer tout',
|
||||||
|
close: 'Fermer',
|
||||||
|
},
|
||||||
pagesTitles: {
|
pagesTitles: {
|
||||||
newUserPageTitle: 'Nouvel utilisateur',
|
newUserPageTitle: 'Nouvel utilisateur',
|
||||||
updateUserPageTitle: 'Mettre à jour l’utilisateur',
|
updateUserPageTitle: 'Mettre à jour l’utilisateur',
|
||||||
timeSheetPageTitle: 'Carte de temps',
|
timeSheetPageTitle: 'Carte de temps',
|
||||||
timeSheetValidationsIdPageTitle: 'Carte de temps',
|
timeSheetValidationsIdPageTitle: 'Carte de temps',
|
||||||
},
|
},
|
||||||
|
profilePage: {
|
||||||
|
title: 'Profil',
|
||||||
|
firstName: 'Prénom',
|
||||||
|
lastName: 'Nom de famille',
|
||||||
|
email: 'Email',
|
||||||
|
phoneNumber: 'Numéro de téléphone',
|
||||||
|
job_title: 'Titre du poste',
|
||||||
|
company: 'Entreprise',
|
||||||
|
supervisor: 'Superviseur',
|
||||||
|
role: 'Role',
|
||||||
|
address: 'Adresse',
|
||||||
|
job_titleValidation: 'Le champ "titre du poste" doit être rempli.',
|
||||||
|
companyValidation: 'Le champ "entreprise" doit être rempli.',
|
||||||
|
supervisorValidation: 'Un employé qui n’a pas le rôle de superviseur doit être attribué à un superviseur.',
|
||||||
|
roleValidation: 'Le champ "rôle" doit être rempli.',
|
||||||
|
addressValidation: 'Le champ "adresse" doit être rempli.',
|
||||||
|
firstNameValidation: 'Le champ "prénom" doit être rempli.',
|
||||||
|
lastNameValidation: 'Le champ "nom de famille" doit être rempli.',
|
||||||
|
phoneNumberValidation: 'Le champ "numéro de téléphone" doit être rempli.',
|
||||||
|
submit: 'Modifier Profil',
|
||||||
|
},
|
||||||
|
resetPage: {
|
||||||
|
title: 'Réinitialiser votre mot de passe',
|
||||||
|
code: 'code',
|
||||||
|
codeValidation: 'Le code doit être rempli avec 4 chiffres.',
|
||||||
|
newPassword: 'Nouveau mot de passe',
|
||||||
|
confirmedPassword: 'Confirmez votre mot de passe',
|
||||||
|
newPasswordValidation: 'Le mot de passe doit répondre à tous les critères.',
|
||||||
|
newPasswordLengthValidation: 'Doit être d’au moins 8 caractères de long.',
|
||||||
|
newPasswordCapitalValidation:
|
||||||
|
'Doit contenir au moins une lettre majuscule.',
|
||||||
|
newPasswordNumberValidation: 'Doit contenir au moins un numéro.',
|
||||||
|
newPasswordSpecialCharacterValidation:
|
||||||
|
'Doit contenir au moins un caractère spécial : !@#$%^&*()-_+=',
|
||||||
|
confirmNewPasswordValidation:
|
||||||
|
'Le mot de passe doit correspondre au nouveau mot de passe.',
|
||||||
|
submit: 'Envoyer',
|
||||||
|
cancel: 'Annuler',
|
||||||
|
},
|
||||||
|
shiftColumns: {
|
||||||
|
title: 'Quarts de travail',
|
||||||
|
column_1: 'Type',
|
||||||
|
column_2: 'Entrée',
|
||||||
|
column_3: 'Sortie',
|
||||||
|
column_4: 'Commentaire',
|
||||||
|
column_5: 'État',
|
||||||
|
column_6: 'Rapport du superviseur',
|
||||||
|
},
|
||||||
|
shiftsTemplate: {
|
||||||
|
tabTitle1: 'Quarts de travail',
|
||||||
|
tabTitle2: 'Modèles de quarts de travail',
|
||||||
|
saveButton: 'Enregistrer',
|
||||||
|
emptyShiftsMessage: 'Aucun modèle disponible.',
|
||||||
|
emptyTemplateMessage: 'Aucun quarts de travail disponible.',
|
||||||
|
selectTemplate: 'Sélectionnez un modèle',
|
||||||
|
selectTemplateNoResult: 'Aucun modele disponible.',
|
||||||
|
selectDay: 'Jour',
|
||||||
|
startTime: 'Heure de début',
|
||||||
|
endTime: 'Heure de fin',
|
||||||
|
templateTitle: 'Titre',
|
||||||
|
templateDescription: 'Description',
|
||||||
|
createButton: 'Créer',
|
||||||
|
updateButton: 'Mettre à jour',
|
||||||
|
deleteButton: 'Supprimer',
|
||||||
|
resetButton: 'Réinitialiser',
|
||||||
|
dayValidation: 'Jour doit être rempli.',
|
||||||
|
startTimeValidation: 'Heure de début doit être rempli.',
|
||||||
|
endTimeValidation: 'Heure de fin doit être rempli.',
|
||||||
|
startTimeAfterEndTimeValidation:
|
||||||
|
'L’heure de début ne peut pas être après l’heure de fin',
|
||||||
|
endTimeBeforeStartTimeValidation:
|
||||||
|
'L’heure de fin ne peut pas être précédente à l’heure de debut',
|
||||||
|
existingTimeShift: 'Ce temps est déjà utilisé',
|
||||||
|
},
|
||||||
|
signUpPage: {
|
||||||
|
title: 'Créer un nouveau compte',
|
||||||
|
firstName: 'Prénom',
|
||||||
|
lastName: 'Nom de famille',
|
||||||
|
email: 'Email',
|
||||||
|
phoneNumber: 'Numéro de téléphone',
|
||||||
|
password: 'Nouveau mot de passe',
|
||||||
|
confirmedPassword: 'Confirmez votre mot de passe',
|
||||||
|
signIn: 'Vous avez déjà un compte?',
|
||||||
|
submit: 'S’inscrire',
|
||||||
|
firstNameValidation: 'Le prénom doit être rempli.',
|
||||||
|
lastNameValidation: 'Le nom de famille doit être rempli.',
|
||||||
|
emailValidation: 'Email doit être un e-mail valide.',
|
||||||
|
phoneNumberValidation: 'Numéro de téléphone doit être rempli.',
|
||||||
|
passwordValidationTitle: 'Critères de mot de passe :',
|
||||||
|
passwordValidation: 'Le mot de passe doit répondre à tous les critères.',
|
||||||
|
passwordLengthValidation: 'Doit être d’au moins 8 caractères de long.',
|
||||||
|
passwordCapitalValidation: 'Doit contenir au moins une lettre majuscule.',
|
||||||
|
passwordNumberValidation: 'Doit contenir au moins un numéro.',
|
||||||
|
passwordSpecialCharacterValidation:
|
||||||
|
'Doit contenir au moins un caractère spécial : !@#$%^&*()-_+=',
|
||||||
|
confirmPasswordValidation:
|
||||||
|
'Le mot de passe doit correspondre au nouveau mot de passe.',
|
||||||
|
},
|
||||||
|
table: {
|
||||||
|
recordsTitle: 'Enregistrements par page:',
|
||||||
|
noResultsLabel: 'Le filtre n’a révélé aucun résultat',
|
||||||
|
noDataLabel: 'Je n’ai rien trouvé pour toi',
|
||||||
|
},
|
||||||
timeSheet: {
|
timeSheet: {
|
||||||
timeSheetTab_1: 'Quarts de travail',
|
timeSheetTab_1: 'Quarts de travail',
|
||||||
timeSheetTab_2: 'Dépenses',
|
timeSheetTab_2: 'Dépenses',
|
||||||
|
|
@ -277,9 +319,7 @@ export default {
|
||||||
shiftTypeValidation: 'Le type doit être rempli.',
|
shiftTypeValidation: 'Le type doit être rempli.',
|
||||||
shiftStartTimeValidation: 'Entrée doit être rempli.',
|
shiftStartTimeValidation: 'Entrée doit être rempli.',
|
||||||
shiftEndTimeValidation: 'Sortie doit être rempli.',
|
shiftEndTimeValidation: 'Sortie doit être rempli.',
|
||||||
endTimeValidation:
|
endTimeValidation:'L’heure de fin doit suivre l’heure de début.',
|
||||||
'L’heure de fin ne peut pas être antérieure ou égale à l’heure de début',
|
|
||||||
|
|
||||||
expensesTile: 'Dépenses du jour',
|
expensesTile: 'Dépenses du jour',
|
||||||
expensesType: 'Type',
|
expensesType: 'Type',
|
||||||
expensesValue: 'Montant',
|
expensesValue: 'Montant',
|
||||||
|
|
@ -319,83 +359,37 @@ export default {
|
||||||
accumulatedVacationTotal: 'Accumulées de vacances',
|
accumulatedVacationTotal: 'Accumulées de vacances',
|
||||||
consumedVacationTotal: 'Consommées de vacances',
|
consumedVacationTotal: 'Consommées de vacances',
|
||||||
maxVacationPerYear: 'Maximum de vacances par année',
|
maxVacationPerYear: 'Maximum de vacances par année',
|
||||||
accumulatedSicknessTotalValidation:
|
accumulatedSicknessTotalValidation: 'Cumulatif maladie doit être positif',
|
||||||
'Accumulées de maladies doit être positive.',
|
consumedSicknessTotalValidation: 'Maladie utilisé doit être positif',
|
||||||
consumedSicknessTotalValidation:
|
accumulatedVacationTotalValidation: 'Cumulatif vacances doit être positif',
|
||||||
'Consommées de maladies doit être positive.',
|
consumedVacationTotalValidation: 'Vacances utilisées doit être positif',
|
||||||
accumulatedVacationTotalValidation:
|
maxVacationPerYearValidation: 'Maximum vacances annuel doit être positif.',
|
||||||
'Accumulées de vacances doit être positive.',
|
|
||||||
consumedVacationTotalValidation:
|
|
||||||
'Consommées de vacances doit être positive.',
|
|
||||||
maxVacationPerYearValidation:
|
|
||||||
'Le nombre maximum de vacances par an doit être positif.',
|
|
||||||
resteVacationTotal: 'Reste des vacances',
|
resteVacationTotal: 'Reste des vacances',
|
||||||
validateToolTip: 'Valider',
|
validateToolTip: 'Valider',
|
||||||
unvalidateToolTip: 'Invalider',
|
unvalidateToolTip: 'Invalider',
|
||||||
lockToolTip: 'Verrouiller la semaine',
|
lockToolTip: 'Verrouiller la semaine',
|
||||||
unlockToolTip: 'Déverrouiller la semaine',
|
unlockToolTip: 'Déverrouiller la semaine',
|
||||||
},
|
},
|
||||||
shiftColumns: {
|
usersListPage: {
|
||||||
title: 'Quarts de travail',
|
tableHeader: 'Liste des utilisateurs',
|
||||||
column_1: 'Type',
|
search_input: 'Rechercher',
|
||||||
column_2: 'Entrée',
|
tableCol_1: 'État',
|
||||||
column_3: 'Sortie',
|
tableCol_2: 'Prénom',
|
||||||
column_4: 'Commentaire',
|
tableCol_3: 'Nom de famille',
|
||||||
column_5: 'État',
|
tableCol_4: 'Email',
|
||||||
column_6: 'Rapport du superviseur',
|
tableCol_5: 'Numéro de téléphone',
|
||||||
},
|
tableCol_6: 'Type d’utilisateur',
|
||||||
expenseColumns: {
|
tableCol_7: 'Role',
|
||||||
title: 'Dépenses',
|
tableCol_8: 'Créé par',
|
||||||
column_1: 'Type',
|
tableCol_9: 'Superviseur',
|
||||||
column_2: 'Montant',
|
activeStatus: 'Actif',
|
||||||
column_3: 'Attachement',
|
unActiveStatus: 'Inactif',
|
||||||
column_4: 'Description',
|
addButton: 'Cliquez ici pour ajouter un nouvel utilisateur',
|
||||||
column_5: 'État',
|
customer: 'Client',
|
||||||
column_6: 'Rapport du superviseur',
|
dealer: 'Marchand',
|
||||||
},
|
employee: 'Employé',
|
||||||
table: {
|
technician: 'Technicien',
|
||||||
recordsTitle: 'Enregistrements par page:',
|
admin: 'Administrateur',
|
||||||
noResultsLabel: 'Le filtre n’a révélé aucun résultat',
|
support: 'Support',
|
||||||
noDataLabel: 'Je n’ai rien trouvé pour toi',
|
|
||||||
},
|
|
||||||
autoLogout: {
|
|
||||||
title: 'Alerte',
|
|
||||||
message_start: 'Attention : vous serez automatiquement déconnecté dans',
|
|
||||||
message_end: 'secondes si vous n’interagissez pas avec l’écran.',
|
|
||||||
},
|
|
||||||
daysOfWeek: {
|
|
||||||
Sunday: 'dimanche',
|
|
||||||
Monday: 'lundi',
|
|
||||||
Tuesday: 'mardi',
|
|
||||||
Wednesday: 'mercredi',
|
|
||||||
Thursday: 'jeudi',
|
|
||||||
Friday: 'vendredi',
|
|
||||||
Saturday: 'samedi',
|
|
||||||
},
|
|
||||||
shiftsTemplate: {
|
|
||||||
tabTitle1: 'Quarts de travail',
|
|
||||||
tabTitle2: 'Modèles de quarts de travail',
|
|
||||||
saveButton: 'Enregistrer',
|
|
||||||
emptyShiftsMessage: 'Aucun modèle disponible.',
|
|
||||||
emptyTemplateMessage: 'Aucun quarts de travail disponible.',
|
|
||||||
selectTemplate: 'Sélectionnez un modèle',
|
|
||||||
selectTemplateNoResult: 'Aucun modele disponible.',
|
|
||||||
selectDay: 'Jour',
|
|
||||||
startTime: 'Heure de début',
|
|
||||||
endTime: 'Heure de fin',
|
|
||||||
templateTitle: 'Titre',
|
|
||||||
templateDescription: 'Description',
|
|
||||||
createButton: 'Créer',
|
|
||||||
updateButton: 'Mettre à jour',
|
|
||||||
deleteButton: 'Supprimer',
|
|
||||||
resetButton: 'Réinitialiser',
|
|
||||||
dayValidation: 'Jour doit être rempli.',
|
|
||||||
startTimeValidation: 'Heure de début doit être rempli.',
|
|
||||||
endTimeValidation: 'Heure de fin doit être rempli.',
|
|
||||||
startTimeAfterEndTimeValidation:
|
|
||||||
'L’heure de début ne peut pas être après l’heure de fin',
|
|
||||||
endTimeBeforeStartTimeValidation:
|
|
||||||
'L’heure de fin ne peut pas être précédente à l’heure de debut',
|
|
||||||
existingTimeShift: 'Ce temps est déjà utilisé',
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { RouterView } from 'vue-router';
|
import { RouterView } from 'vue-router';
|
||||||
import NavBar from 'src/pages/nav-bars/nav-bar.vue';
|
import HeaderBar from 'src/modules/shared/components/navigation/header-bars/header-bar.vue';
|
||||||
import FooterBar from 'src/pages/footer-bars/footer-bar.vue';
|
import FooterBar from 'src/modules/shared/components/navigation/footer-bars/footer-bar.vue';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<q-layout view="hHh lpR fFf">
|
<q-layout view="hHh lpR fFf">
|
||||||
<NavBar />
|
<HeaderBar />
|
||||||
<q-page-container>
|
<q-page-container>
|
||||||
<router-view class="q-pa-sm" />
|
<router-view class="q-pa-sm" />
|
||||||
</q-page-container>
|
</q-page-container>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
import { defineStore } from "pinia";
|
import { defineStore } from "pinia";
|
||||||
import router from "src/router";
|
|
||||||
import { api } from "src/boot/axios";
|
import { api } from "src/boot/axios";
|
||||||
import { User } from "src/modules/users/types/user-interface";
|
import { User } from "src/modules/users/types/user-interface";
|
||||||
import { AuthState } from "./types/auth-interface";
|
import { AuthState } from "./types/auth-interface";
|
||||||
|
|
@ -10,8 +9,8 @@ export const useAuthStore = defineStore('auth', {
|
||||||
state: (): AuthState => ({
|
state: (): AuthState => ({
|
||||||
token: "",
|
token: "",
|
||||||
user: {
|
user: {
|
||||||
firstName: 'Guest',
|
firstName: 'Unknown',
|
||||||
lastName: 'Guest',
|
lastName: 'Unknown',
|
||||||
email: 'guest@guest.com',
|
email: 'guest@guest.com',
|
||||||
role: 'guest'
|
role: 'guest'
|
||||||
} as User,
|
} as User,
|
||||||
|
|
@ -25,7 +24,7 @@ export const useAuthStore = defineStore('auth', {
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
async login() {
|
async login() {
|
||||||
return "standard login";
|
api.get('v1/');
|
||||||
},
|
},
|
||||||
|
|
||||||
async oidcLogin() {
|
async oidcLogin() {
|
||||||
|
|
@ -44,8 +43,8 @@ export const useAuthStore = defineStore('auth', {
|
||||||
return "setting user info";
|
return "setting user info";
|
||||||
},
|
},
|
||||||
|
|
||||||
isAuthorizedUser(email: string) {
|
isAuthorizedUser(): boolean {
|
||||||
return "checking user authorization";
|
return this.$state.user.role.toLowerCase() != 'guest';
|
||||||
},
|
},
|
||||||
|
|
||||||
async forgotPassword(email: string) {
|
async forgotPassword(email: string) {
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,11 @@
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
import { useAuthStore } from "src/modules/auth/auth-store";
|
|
||||||
|
|
||||||
export const useAuthAccess = () => {
|
export const useAuthAccess = () => {
|
||||||
const authStore = useAuthStore();
|
|
||||||
|
|
||||||
const isLoggedIn = async () => {
|
const isLoggedIn = async () => {
|
||||||
return authStore.hasAuthToken;
|
return authStore.hasAuthToken;
|
||||||
};
|
};
|
||||||
|
|
||||||
const isAuthorizedUser = async (email: string) => {
|
const isAuthorizedUser = async () => {
|
||||||
return authStore.isAuthorizedUser(email);
|
return authStore.isAuthorizedUser();
|
||||||
};
|
};
|
||||||
|
|
||||||
const forgotPassword = async (email: string) => {
|
const forgotPassword = async (email: string) => {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,7 @@
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
import { useAuthStore } from "src/modules/auth/auth-store";
|
|
||||||
|
|
||||||
export const useAuthSession = () => {
|
export const useAuthSession = () => {
|
||||||
const authStore = useAuthStore();
|
|
||||||
|
|
||||||
const login = async () => {
|
const login = async () => {
|
||||||
return authStore.login();
|
return {status: 200, message: 'sent a login request'};
|
||||||
};
|
};
|
||||||
|
|
||||||
const oidcLogin = async () => {
|
const oidcLogin = async () => {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref, watch } from 'vue';
|
||||||
|
import { useAuthSession } from 'src/modules/auth/composables/use-auth-session';
|
||||||
|
|
||||||
|
const { login } = useAuthSession();
|
||||||
|
const email = ref('');
|
||||||
|
const isShowingEmployeeLoginButton = ref(false);
|
||||||
|
const isRemembered = ref(false);
|
||||||
|
|
||||||
|
watch(email, (value) => {
|
||||||
|
if (!isShowingEmployeeLoginButton.value && value.includes('@targoint')) {
|
||||||
|
isShowingEmployeeLoginButton.value = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<q-layout view="hHh lpR fFf" class="flex flex-center bg-secondary">
|
||||||
|
<q-img src="src/assets/login-background.png" fit="cover" position="50% 100%" class="absolute-full" />
|
||||||
|
<q-page-container>
|
||||||
|
<q-card class="rounded-20">
|
||||||
|
<q-card-section class="text-center bg-primary">
|
||||||
|
<q-img src="/src/assets/logo-targo-white.svg" ratio="4.6" fit="contain" class="full-width" />
|
||||||
|
</q-card-section>
|
||||||
|
<div class="q-pt-sm q-px-xl q-pb-lg">
|
||||||
|
<q-card-section class="text-center">
|
||||||
|
<div class="text-h6 text-grey-9 text-weight-bold">
|
||||||
|
{{ $t('loginPage.title') }}
|
||||||
|
</div>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-form class="q-gutter-sm" @submit="login">
|
||||||
|
<q-input dense outlined label-color="primary" v-model="email" :label="$t('loginPage.email')" />
|
||||||
|
|
||||||
|
<q-card-section class="q-ma-none q-pa-none">
|
||||||
|
<q-toggle v-model="isRemembered" :label="$t('loginPage.rememberMe')" color="primary" />
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-card-section>
|
||||||
|
<q-btn :label="$t('loginPage.submit')" type="submit" color="primary" rounded size="md" class="full-width q-mt-md" />
|
||||||
|
</q-card-section>
|
||||||
|
</q-form>
|
||||||
|
|
||||||
|
<q-card-section class="text-center q-pt-none">
|
||||||
|
<RouterLink class="text-primary text-weight-bold" style="text-decoration: none" to="/signup">{{ $t('loginPage.signUp') }}</RouterLink>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-card-section v-if="isShowingEmployeeLoginButton">
|
||||||
|
<q-btn class="full-width" :label="$t('loginPage.employeeLoginButton')" icon="login" />
|
||||||
|
</q-card-section>
|
||||||
|
</div>
|
||||||
|
</q-card>
|
||||||
|
</q-page-container>
|
||||||
|
</q-layout>
|
||||||
|
</template>
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
import { useQuasar } from 'quasar';
|
import { useQuasar } from 'quasar';
|
||||||
// import { getInitials } from 'src/helpers/object';
|
// import { getInitials } from 'src/helpers/object';
|
||||||
import { useAuthStore } from 'src/modules/auth/auth-store';
|
import { useAuthStore } from 'src/modules/auth/auth-store';
|
||||||
import LanguageSwitch from 'src/shared/components/language-switch.vue';
|
import LanguageSwitch from 'src/modules/shared/components/language-switch.vue';
|
||||||
// import dialogs from 'src/components/dialogs';
|
// import dialogs from 'src/components/dialogs';
|
||||||
// import authenticationApi from 'src/composables/useAuthentication';
|
// import authenticationApi from 'src/composables/useAuthentication';
|
||||||
|
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
<script lang="ts" setup>
|
||||||
|
// import HeaderBarMobile from './header-bar-mobile.vue';
|
||||||
|
import HeaderBarWeb from './header-bar-web.vue';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<q-header elevated>
|
||||||
|
<!-- <HeaderBarMobile /> -->
|
||||||
|
<HeaderBarWeb />
|
||||||
|
</q-header>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
<script lang="ts" setup>
|
|
||||||
// import NavBarMobile from './nav-bar-mobile.vue';
|
|
||||||
import NavBarWeb from './nav-bar-web.vue';
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<q-header elevated>
|
|
||||||
<!-- <NavBarMobile /> -->
|
|
||||||
<NavBarWeb />
|
|
||||||
</q-header>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
|
|
@ -1,11 +1,7 @@
|
||||||
import { defineRouter } from '#q-app/wrappers';
|
import { defineRouter } from '#q-app/wrappers';
|
||||||
import {
|
import { createMemoryHistory, createRouter, createWebHashHistory, createWebHistory, } from 'vue-router';
|
||||||
createMemoryHistory,
|
|
||||||
createRouter,
|
|
||||||
createWebHashHistory,
|
|
||||||
createWebHistory,
|
|
||||||
} from 'vue-router';
|
|
||||||
import routes from './routes';
|
import routes from './routes';
|
||||||
|
import { useAuthStore } from 'src/modules/auth/auth-store';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If not building with SSR mode, you can
|
* If not building with SSR mode, you can
|
||||||
|
|
@ -31,5 +27,13 @@ export default defineRouter(function (/* { store, ssrContext } */) {
|
||||||
history: createHistory(process.env.VUE_ROUTER_BASE),
|
history: createHistory(process.env.VUE_ROUTER_BASE),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Router.beforeEach((destinationPage) => {
|
||||||
|
const authStore = useAuthStore();
|
||||||
|
|
||||||
|
if (destinationPage.meta.requiresAuth && !authStore.isAuthorizedUser()) {
|
||||||
|
return { name: 'login' };
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
return Router;
|
return Router;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,20 @@ const routes: RouteRecordRaw[] = [
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
component: () => import('src/layouts/main-layout.vue'),
|
component: () => import('src/layouts/main-layout.vue'),
|
||||||
children: [{ path: '', component: () => import('src/pages/test-page.vue') }],
|
meta: { requiresAuth: true },
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
component: () => import('src/pages/test-page.vue'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
path: '/v1/login',
|
||||||
|
name: 'login',
|
||||||
|
component: () => import('src/modules/auth/pages/auth-login.vue'),
|
||||||
|
meta: { requiresAuth: false },
|
||||||
},
|
},
|
||||||
|
|
||||||
// Always leave this as last one,
|
// Always leave this as last one,
|
||||||
|
|
@ -12,6 +25,7 @@ const routes: RouteRecordRaw[] = [
|
||||||
{
|
{
|
||||||
path: '/:catchAll(.*)*',
|
path: '/:catchAll(.*)*',
|
||||||
component: () => import('src/pages/error-page.vue'),
|
component: () => import('src/pages/error-page.vue'),
|
||||||
|
meta: { requiresAuth: false },
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user