Files
pleno-vue/src/router.js
T
Jeppe B aaecffbdfa Finish Sæby demo registration and limited backoffice (#242)
Unify truckwash.dk Kundeoprettelse and QR traffic on the shared customer page, add protected registration UX, and complete the limited-backoffice demo flow.
2026-08-02 11:50:58 +02:00

1468 lines
52 KiB
JavaScript

/**
* Router
*/
import { createRouter, createWebHistory } from 'vue-router';
/** Middleware */
import authMiddleware from './middleware/authMiddleware.js';
import guestMiddleware from "@/middleware/guestMiddleware.js";
import adminMiddleware from './middleware/adminMiddleware.js';
import superUserMiddleware from "@/middleware/superUserMiddleware.js";
import GuestBookExteriorWash from "@/views/guest/book/GuestBookExteriorWash.vue";
const lazyModules = import.meta.glob('/src/views/**/*.vue');
function lazyView(importPath) {
let normalizedPath = importPath;
if (importPath.startsWith('@/')) {
normalizedPath = '/src/' + importPath.slice(2);
} else if (importPath.startsWith('./')) {
normalizedPath = '/src/' + importPath.slice(2);
}
const loader = lazyModules[normalizedPath];
if (!loader) {
throw new Error(`Unable to lazy load route component: ${importPath}`);
}
return loader;
}
/** Views */
/**
* Default page
*/
const DefaultPage = lazyView('@/views/DefaultPage.vue');
/** Auth */
const Login = lazyView('./views/auth/Login.vue');
const Register = lazyView('./views/auth/Register.vue');
const LoginQR = lazyView('@/views/auth/LoginQR.vue');
/** Dashboards */
const SuperUserDashboard = lazyView('./views/dashboards/SuperUserDashboard.vue');
const DepartmentDashboard = lazyView('./views/dashboards/DepartmentDashboard.vue');
const UserDashboard = lazyView('./views/dashboards/UserDashboard.vue');
/** Dashboard: SuperUser */
const Departments = lazyView('@/views/dashboards/superUserDashboard/Departments.vue');
const DepartmentLanes = lazyView('@/views/dashboards/superUserDashboard/DepartmentLanes.vue');
const DepartmentGates = lazyView('@/views/dashboards/superUserDashboard/DepartmentGates.vue');
const DepartmentRelays = lazyView('@/views/dashboards/superUserDashboard/DepartmentRelays.vue');
const DepartmentLane = lazyView('@/views/dashboards/superUserDashboard/department/lanes/DepartmentLane.vue');
const Users = lazyView('@/views/dashboards/superUserDashboard/Users.vue');
const Products = lazyView('@/views/dashboards/superUserDashboard/Products.vue');
const CustomerRuleProductRestrictions = lazyView('@/views/dashboards/superUserDashboard/CustomerRuleProductRestrictions.vue');
const Orders = lazyView('@/views/dashboards/superUserDashboard/Orders.vue');
const OrdersDrafts = lazyView('@/views/dashboards/superUserDashboard/OrdersDrafts.vue');
const Bookings = lazyView('@/views/dashboards/superUserDashboard/Bookings.vue');
const NumberPlateScanners = lazyView('@/views/dashboards/superUserDashboard/NumberPlateScanners.vue');
const Statistics = lazyView('@/views/dashboards/superUserDashboard/statistics/Statistics.vue');
const DepartmentSelfServe = lazyView('@/views/dashboards/superUserDashboard/DepartmentSelfServe.vue');
const SelfServeSessions = lazyView('@/views/dashboards/superUserDashboard/SelfServeSessions.vue');
const EdgeAgents = lazyView('@/views/dashboards/superUserDashboard/selfserve/EdgeAgents.vue');
const EdgeGatewaysWorkspacePage = lazyView('@/views/dashboards/superUserDashboard/EdgeGatewaysWorkspacePage.vue');
const Invoicing = lazyView('@/views/dashboards/superUserDashboard/Invoicing.vue');
/** Dashboard: Department */
const DepartmentPos = lazyView('@/views/dashboards/departmentDashboard/modules/Pos/DepartmentPos.vue');
const DepartmentPosDrafts = lazyView('@/views/dashboards/departmentDashboard/modules/Pos/DepartmentPosDrafts.vue');
const DepartmentPosOrders = lazyView('@/views/dashboards/departmentDashboard/modules/Pos/DepartmentPosOrders.vue');
const DepartmentPosOrder = lazyView('@/views/dashboards/departmentDashboard/modules/Pos/DepartmentPosOrder.vue');
const DepartmentPosSyncDuplicates = lazyView('@/views/dashboards/departmentDashboard/modules/Pos/DepartmentPosSyncDuplicates.vue');
//const DepartmentIntranet = lazyView('@/views/dashboards/departmentDashboard/modules/intranet/DepartmentIntranet.vue');
/**
* Dashboard: User
*/
const MyVehicles = lazyView('@/views/dashboards/userDashboard/vehicles/MyVehicles.vue');
const MyMaterials = lazyView('@/views/dashboards/userDashboard/materials/MyMaterials.vue');
/** Errors */
const NotFound = lazyView('./views/errors/NotFound.vue');
const ConnectivityIssue = lazyView('./views/errors/ConnectivityIssue.vue');
const OutdatedInstallation = lazyView('@/views/errors/OutdatedInstallation.vue');
const OutdatedGateway = lazyView('@/views/errors/OutdatedGateway.vue');
const MyOrders = lazyView('@/views/dashboards/userDashboard/orders/MyOrders.vue');
const NewVehicle = lazyView('@/views/dashboards/userDashboard/vehicles/NewVehicle.vue');
const MyBookings = lazyView('@/views/dashboards/userDashboard/bookings/MyBookings.vue');
const DatabaseOverview = lazyView('@/views/dashboards/superUserDashboard/system/DatabaseOverview.vue');
const RedisOverview = lazyView('@/views/dashboards/superUserDashboard/system/RedisOverview.vue');
const MinioOverview = lazyView('@/views/dashboards/superUserDashboard/system/MinioOverview.vue');
const CronOperations = lazyView('@/views/dashboards/superUserDashboard/system/CronOperations.vue');
const SystemSecurity = lazyView('@/views/dashboards/superUserDashboard/system/SystemSecurity.vue');
const DepartmentBookings = lazyView('@/views/dashboards/departmentDashboard/modules/bookings/DepartmentBookings.vue');
const Employee = lazyView('@/views/auth/Employee.vue');
const User = lazyView('@/views/dashboards/superUserDashboard/user/User.vue');
const UserOrders = lazyView('@/views/dashboards/superUserDashboard/user/UserOrders.vue');
const UserPricing = lazyView('@/views/dashboards/superUserDashboard/user/UserPricing.vue');
const UserSubusers = lazyView('@/views/dashboards/superUserDashboard/user/UserSubusers.vue');
const Department = lazyView('@/views/dashboards/superUserDashboard/department/Department.vue');
const DepartmentPricing = lazyView('@/views/dashboards/superUserDashboard/department/DepartmentPricing.vue');
const DepartmentCustomerPricing = lazyView('@/views/dashboards/superUserDashboard/department/DepartmentCustomerPricing.vue');
const DepartmentEmployees = lazyView('@/views/dashboards/superUserDashboard/department/DepartmentEmployees.vue');
const MyOrder = lazyView('@/views/dashboards/userDashboard/orders/MyOrder.vue');
const StatisticsOverview = lazyView('@/views/dashboards/superUserDashboard/statistics/StatisticsOverview.vue');
const Configuration = lazyView('@/views/dashboards/superUserDashboard/configuration/Configuration.vue');
const ConfigurationEconomic = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationEconomic.vue');
const ConfigurationReCAPTCHA = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationReCAPTCHA.vue');
const ConfigurationEmail = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationEmail.vue');
const ConfigurationSlack = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationSlack.vue');
const ConfigurationBackups = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationBackups.vue');
const ConfigurationReleaseManager = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationReleaseManager.vue');
const Categories = lazyView('@/views/dashboards/superUserDashboard/Categories.vue');
const Customers = lazyView('@/views/dashboards/superUserDashboard/Customers.vue');
const CustomerComplaints = lazyView('@/views/dashboards/superUserDashboard/CustomerComplaints.vue');
const ErrorReports = lazyView('@/views/dashboards/superUserDashboard/ErrorReports.vue');
const DepartmentCategories = lazyView('@/views/dashboards/superUserDashboard/department/DepartmentCategories.vue');
const ConfigurationMotorAPI = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationMotorAPI.vue');
const ConfigurationStripe = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationStripe.vue');
const Roles = lazyView('@/views/dashboards/superUserDashboard/roles/Roles.vue');
const SuperUserRolesPermissions = lazyView('@/views/dashboards/superUserDashboard/roles/SuperUserRolesPermissions.vue');
const DepartmentStripeTerminalsReaders = lazyView('@/views/dashboards/superUserDashboard/department/stripe/DepartmentStripeTerminalsReaders.vue');
const DepartmentStripeSetup = lazyView('@/views/dashboards/superUserDashboard/department/stripe/DepartmentStripeSetup.vue');
const CollectedOrderInvoices = lazyView('@/views/dashboards/superUserDashboard/CollectedOrderInvoices.vue');
const CollectedOrderInvoice = lazyView('@/views/dashboards/superUserDashboard/collectedOrderInvoice/collectedOrderInvoice.vue');
const InvoiceDistributionMonthView = lazyView('@/views/dashboards/superUserDashboard/invoiceDistribution/InvoiceDistributionMonthView.vue');
const DepartmentDailyReport = lazyView('@/views/dashboards/departmentDashboard/modules/daily-report/DepartmentDailyReport.vue');
const SuperUserDashboardProduct = lazyView('@/views/dashboards/superUserDashboard/products/SuperUserDashboardProduct.vue');
const UserOther = lazyView('@/views/dashboards/superUserDashboard/user/UserOther.vue');
const UserSecurity = lazyView('@/views/dashboards/superUserDashboard/user/UserSecurity.vue');
//const MyBookingsNew = lazyView('@/views/dashboards/userDashboard/bookings/MyBookingsNew.vue');
const DepartmentCompleteBooking = lazyView('@/views/dashboards/departmentDashboard/modules/bookings/DepartmentCompleteBooking.vue');
const GuestHome = lazyView('@/views/guest/GuestHome.vue');
const DepartmentProfile = lazyView('@/views/dashboards/superUserDashboard/department/DepartmentProfile.vue');
const DepartmentGatewaysWorkspacePage = lazyView('@/views/dashboards/superUserDashboard/department/DepartmentGatewaysWorkspacePage.vue');
const ConfigurationFXRatesAPI = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationFXRatesAPI.vue');
const ConfigurationWeatherAPI = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationWeatherAPI.vue');
const ConfigurationWorkfeed = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationWorkfeed.vue');
const ConfigurationGatewayAPI = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationGatewayAPI.vue');
const UserVehicles = lazyView('@/views/dashboards/superUserDashboard/user/UserVehicles.vue');
const UserProfile = lazyView('@/views/dashboards/userDashboard/profile/UserProfile.vue');
const DepartmentNotifications = lazyView('@/views/dashboards/departmentDashboard/modules/notifications/DepartmentNotifications.vue');
const Vehicles = lazyView('@/views/dashboards/superUserDashboard/Vehicles.vue');
const ConfigurationXLVask = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationXLVask.vue');
const UserXLVask = lazyView('@/views/dashboards/superUserDashboard/user/UserXLVask.vue');
const DepartmentTimeBookings = lazyView('@/views/dashboards/departmentDashboard/modules/time-bookings/DepartmentTimeBookings.vue');
const DepartmentTimeBookingsOpeningHours = lazyView('@/views/dashboards/departmentDashboard/modules/time-bookings/DepartmentTimeBookingsOpeningHours.vue');
const DepartmentTimeBookingsTypes = lazyView('@/views/dashboards/departmentDashboard/modules/time-bookings/DepartmentTimeBookingsTypes.vue');
const DepartmentModulesSetup = lazyView('@/views/dashboards/superUserDashboard/department/modules/DepartmentModulesSetup.vue');
const Vehicle = lazyView('@/views/dashboards/superUserDashboard/vehicle/Vehicle.vue');
const MyInvoices = lazyView('@/views/dashboards/userDashboard/invoices/MyInvoices.vue');
const MicrosoftCallbackToken = lazyView('@/views/callback/microsoft/MicrosoftCallbackToken.vue');
const ConfigurationEntra = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationEntra.vue');
const DepartmentTimeBookingsNew = lazyView('@/views/dashboards/departmentDashboard/modules/time-bookings/book/DepartmentTimeBookingsNew.vue');
const DepartmentWashLanes = lazyView('@/views/dashboards/departmentDashboard/modules/wash-lanes/DepartmentWashLanes.vue');
const DepartmentWashLane = lazyView('@/views/dashboards/departmentDashboard/modules/wash-lanes/DepartmentWashLane.vue');
const DepartmentSelfServeStudio = lazyView('@/views/dashboards/departmentDashboard/modules/self-serve/DepartmentSelfServeStudio.vue');
const DepartmentGoals = lazyView('@/views/dashboards/departmentDashboard/modules/goals/DepartmentGoals.vue');
const ConfigurationLimble = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationLimble.vue');
const MyVehicle = lazyView('@/views/dashboards/userDashboard/vehicles/MyVehicle.vue');
const XLVaskPage = lazyView('@/views/dashboards/superUserDashboard/XLVaskPage.vue');
const XLVaskCustomersPage = lazyView('@/views/dashboards/superUserDashboard/xlvask/pages/XLVaskCustomersPage.vue');
const XLVaskUsageLogsPage = lazyView('@/views/dashboards/superUserDashboard/xlvask/pages/XLVaskUsageLogsPage.vue');
const DepartmentPosSync = lazyView('@/views/dashboards/departmentDashboard/modules/Pos/DepartmentPosSync.vue');
const PWADownload = lazyView('@/views/guest/pwa/PWADownload.vue');
const Logout = lazyView('@/views/auth/Logout.vue');
//const ReaderReliabilityTest = lazyView('@/views/dashboards/departmentDashboard/modules/debug/ReaderReliabilityTest.vue');
const ConfigurationOcrSpace = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationOcrSpace.vue');
const ConfigurationOpenAI = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationOpenAI.vue');
const ConfigurationLicensePlateRecognizer = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationLicensePlateRecognizer.vue');
const ConfigurationVirkData = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationVirkData.vue');
const ConfigurationShelly = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationShelly.vue');
const MyBookingsBook = lazyView('@/views/dashboards/userDashboard/bookings/MyBookingsBook.vue');
const ReturnToOwnAccount = lazyView('@/views/auth/ReturnToOwnAccount.vue');
const DepartmentDashboardOrderBooking = lazyView('@/views/dashboards/departmentDashboard/modules/order-bookings/DepartmentDashboardOrderBooking.vue');
const DepartmentBookingsLegacy = lazyView('@/views/dashboards/departmentDashboard/modules/bookings/DepartmentBookingsLegacy.vue');
const MyBookingsLegacy = lazyView('@/views/dashboards/userDashboard/bookings/MyBookingsLegacy.vue');
const ConfigurationSelfServe = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationSelfServe.vue');
const ConfigurationBird = lazyView('@/views/dashboards/superUserDashboard/configuration/ConfigurationBird.vue');
const MyWash = lazyView('@/views/dashboards/userDashboard/wash/MyWash.vue');
const MyWashStart = lazyView('@/views/dashboards/userDashboard/wash/MyWashStart.vue');
const LandingPage = lazyView('@/views/pages/LandingPage.vue');
const BookDemoPage = lazyView('@/views/pages/BookDemoPage.vue');
const AboutUsPage = lazyView('@/views/pages/AboutUsPage.vue');
const PrivacyPolicyPage = lazyView('@/views/pages/PrivacyPolicyPage.vue');
const SupportPage = lazyView('@/views/pages/SupportPage.vue');
const PasswordResetPage = lazyView('@/views/pages/auth/PasswordResetPage.vue');
const PasswordResetConfirmationPage = lazyView('@/views/pages/auth/PasswordResetConfirmationPage.vue');
const SubuserCompleteRegistrationPage = lazyView('@/views/pages/auth/SubuserCompleteRegistrationPage.vue');
const GuestQRNewBooking = lazyView('@/views/guest/qr/GuestQRNewBooking.vue');
const CustomerCreationPage = lazyView('@/views/pages/auth/CustomerCreationPage.vue');
const Subusers = lazyView('@/views/dashboards/superUserDashboard/Subusers.vue');
const SubuserLogin = lazyView('@/views/auth/SubuserLogin.vue');
const SystemSearchRecordPage = lazyView('@/views/search/SystemSearchRecordPage.vue');
const EconomicQueuePlaywrightHarness = lazyView('@/views/testing/EconomicQueuePlaywrightHarness.vue');
const DatePeriodSelectorPlaywrightHarness = lazyView('@/views/testing/DatePeriodSelectorPlaywrightHarness.vue');
const LimitedBackofficeHome = lazyView('@/views/backoffice/LimitedBackofficeHome.vue');
const LimitedBackofficePrices = lazyView('@/views/backoffice/LimitedBackofficePrices.vue');
const LimitedBackofficeCustomerPricing = lazyView('@/views/backoffice/LimitedBackofficeCustomerPricing.vue');
const LimitedBackofficeEmployees = lazyView('@/views/backoffice/LimitedBackofficeEmployees.vue');
/**
* Meta data for routes
* departmentSelection: true if the department selection should be possible for the route
*/
export const releaseFrontendRouterBase = (pathname = globalThis?.location?.pathname || '/') => {
const match = String(pathname || '/').match(/^\/[^/]+\/frontend(?:\/|$)/);
return match ? `${match[0].replace(/\/+$/, '')}/` : '/';
};
// Export the router as router
export const router = createRouter({
history: createWebHistory(releaseFrontendRouterBase()),
routes: [
...((import.meta.env.DEV || import.meta.env.MODE === 'test') ? [
{
name: 'e2eEconomicQueueHarness',
path: '/__e2e/economic-queue',
component: EconomicQueuePlaywrightHarness,
meta: { template: 'clear-main' }
},
{
name: 'e2eDatePeriodSelectorHarness',
path: '/__e2e/date-period-selector',
component: DatePeriodSelectorPlaywrightHarness,
meta: { template: 'clear-main' }
}
] : []),
{
name: 'landing',
path: '/',
component: LandingPage,
meta: { template: 'with-header', middleware: guestMiddleware }
},
{
name: 'book-a-demo',
path: '/book-a-demo',
component: BookDemoPage,
meta: { template: 'with-header' }
},
{
name: 'customer-creation',
path: '/customer-creation',
alias: '/kundeoprettelse',
component: CustomerCreationPage,
meta: { template: 'with-header' }
},
{
name: 'about-us',
path: '/about-us',
component: AboutUsPage,
meta: { template: 'with-header' }
},
{
name: 'password-reset',
path: '/auth/password-reset',
component: PasswordResetPage,
meta: { template: 'with-header', middleware: guestMiddleware }
},
{
name: 'password-reset-confirmation',
path: '/auth/password-reset/:token',
component: PasswordResetConfirmationPage,
meta: { template: 'with-header', middleware: guestMiddleware }
},
{
name: 'complete-registration',
path: '/complete-registration',
component: SubuserCompleteRegistrationPage,
meta: { template: 'with-header' }
},
{
name: 'subuser-access-decision',
path: '/subuser-access/decision',
component: () => import('@/views/pages/auth/SubuserAccessDecisionPage.vue'),
meta: { template: 'with-header' }
},
{
name: 'privacy-policy',
path: '/privacy-policy',
component: PrivacyPolicyPage,
meta: { template: 'with-header' }
},
{
name: 'support',
path: '/support',
component: SupportPage,
meta: { template: 'with-header' }
},
{
name: 'default',
path: '/redirect',
component: DefaultPage,
meta: { middleware: authMiddleware }
},
{
name: 'systemsearchrecord',
path: '/search/system/record/:entityType/:entityId',
component: SystemSearchRecordPage,
meta: { middleware: authMiddleware }
},
{
name: 'callbackMicrosoftToken',
path: '/callback/microsoft/token',
component: MicrosoftCallbackToken,
meta: { middleware: authMiddleware }
},
{
name: 'dashboard',
path: '/user',
component: UserDashboard,
meta: { middleware: authMiddleware }
},
{
name: 'myprofile',
path: '/user/profile',
component: UserProfile,
meta: { middleware: authMiddleware }
},
{
name: 'myvehicles',
path: '/user/vehicles',
component: MyVehicles,
meta: { middleware: authMiddleware }
},
{
name: 'myvehicle',
path: '/user/vehicles/:vehicleId',
component: MyVehicle,
meta: { middleware: authMiddleware }
},
{
name: 'myvehiclesnew',
path: '/user/vehicles/new',
component: NewVehicle,
meta: { middleware: authMiddleware }
},
{
name: 'mybookings',
path: '/user/bookings',
component: MyBookings,
meta: { middleware: authMiddleware }
},
{
name: 'mybookingslegacy',
path: '/user/bookings-legacy',
component: MyBookingsLegacy,
meta: { middleware: authMiddleware }
},
{
name: 'mybookingsnew',
path: '/user/bookings/new',
component: MyBookingsBook,
meta: { middleware: authMiddleware }
},
{
name: 'mybookingsbook',
path: '/user/bookings/book',
component: MyBookingsBook,
meta: { middleware: authMiddleware }
},
{
name: 'myorders',
path: '/user/orders',
component: MyOrders,
meta: { middleware: authMiddleware }
},
{
name: 'myinvoices',
path: '/user/invoices',
component: MyInvoices,
meta: { middleware: authMiddleware }
},
{
name: 'myorder',
path: '/user/orders/:orderId',
component: MyOrder,
meta: { middleware: authMiddleware }
},
{
name: 'mymaterials',
path: '/user/materials',
component: MyMaterials,
meta: { middleware: authMiddleware }
},
{
name: 'mywash',
path: '/user/wash',
component: MyWash,
meta: { middleware: authMiddleware }
},
{
name: 'mywashstart',
path: '/user/wash/start',
component: MyWashStart,
meta: { middleware: authMiddleware }
},
{
name: 'login',
path: '/login',
component: Login,
meta: { template: 'with-header', middleware: guestMiddleware }
},
{
name: 'subuserlogin',
path: '/login/driver',
component: SubuserLogin,
meta: { template: 'with-header', middleware: guestMiddleware }
},
{
name: 'logout',
path: '/logout',
component: Logout,
meta: { middleware: authMiddleware }
},
{
// Used on legacy QR codes
name: 'qrregister',
path: '/qr/new-customer',
redirect: { path: '/kundeoprettelse', hash: '#customer' },
meta: { middleware: guestMiddleware }
},
{
name: 'qrdriver',
path: '/qr/new-driver',
redirect: { path: '/kundeoprettelse', hash: '#driver' },
meta: { middleware: guestMiddleware }
},
{
name: 'qrbooking',
path: '/qr/new-booking',
component: GuestQRNewBooking,
meta: { middleware: authMiddleware }
},
{
name: 'loginqr',
path: '/login/qr',
component: LoginQR,
// This route does not require authentication, so it uses guestMiddleware
meta: { middleware: guestMiddleware }
},
{
name: 'register',
path: '/register',
component: Register,
meta: { middleware: guestMiddleware }
},
{
name: 'returntoownaccount',
path: '/auth/return',
component: ReturnToOwnAccount,
},
{
name: 'adminlogin',
path: '/admin/login',
component: Employee,
meta: { template: 'with-header', middleware: guestMiddleware }
},
{
name: 'limitedBackoffice',
path: '/backoffice',
component: LimitedBackofficeHome,
meta: { middleware: authMiddleware, titleKey: 'templates.limited_backoffice.title' }
},
{
name: 'limitedBackofficePrices',
path: '/backoffice/departments/:departmentId/prices',
component: LimitedBackofficePrices,
meta: { middleware: authMiddleware, titleKey: 'templates.limited_backoffice.prices.title' }
},
{
name: 'limitedBackofficeCustomerPricing',
path: '/backoffice/departments/:departmentId/customer-pricing',
component: LimitedBackofficeCustomerPricing,
meta: { middleware: authMiddleware, titleKey: 'departments.customer_pricing.title' }
},
{
name: 'limitedBackofficeEmployees',
path: '/backoffice/departments/:departmentId/employees',
component: LimitedBackofficeEmployees,
meta: { middleware: authMiddleware, titleKey: 'templates.limited_backoffice.employees.title' }
},
{
name: 'limitedBackofficeEmployeesLegacy',
path: '/backoffice/employees',
component: LimitedBackofficeEmployees,
meta: { middleware: authMiddleware, titleKey: 'templates.limited_backoffice.employees.title' }
},
{
name: 'limitedBackofficeAccess',
path: '/backoffice/access',
redirect: '/backoffice/employees',
meta: { middleware: authMiddleware, titleKey: 'templates.limited_backoffice.employees.title' }
},
{
name: 'admin',
path: '/admin',
component: DepartmentDashboard,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'department',
path: '/admin/:departmentId',
component: DepartmentDashboard,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'pos',
path: '/admin/:departmentId/modules/pos',
component: DepartmentPos,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
/**
{
name: 'departmentintranet',
path: '/admin/:departmentId/modules/intranet',
component: DepartmentIntranet,
meta: { middleware: adminMiddleware, departmentSelection: true }
},*/
{
name: 'departmentnotifications',
path: '/admin/:departmentId/modules/notifications',
component: DepartmentNotifications,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'posorders',
path: '/admin/:departmentId/modules/pos/orders',
component: DepartmentPosOrders,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'posdrafts',
path: '/admin/:departmentId/modules/pos/drafts',
component: DepartmentPosDrafts,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'possync',
path: '/admin/:departmentId/modules/pos/sync',
component: DepartmentPosSync,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'possyncduplicates',
path: '/admin/:departmentId/modules/pos/sync/duplicates',
component: DepartmentPosSyncDuplicates,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'posorder',
path: '/admin/:departmentId/modules/pos/orders/:orderId',
component: DepartmentPosOrder,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'bookings',
path: '/admin/:departmentId/modules/bookings',
component: DepartmentBookings,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'bookingslegacy',
path: '/admin/:departmentId/modules/bookings-legacy',
component: DepartmentBookingsLegacy,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'bookingsbooking',
path: '/admin/:departmentId/modules/bookings/:bookingId',
component: DepartmentCompleteBooking,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'orderbookingsbooking',
path: '/admin/:departmentId/modules/bookings/order/:bookingId',
component: DepartmentDashboardOrderBooking,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'dailyreport',
path: '/admin/:departmentId/modules/daily-report',
component: DepartmentDailyReport,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'goals',
path: '/admin/:departmentId/modules/goals',
component: DepartmentGoals,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'timebookings',
path: '/admin/:departmentId/modules/time-bookings',
component: DepartmentTimeBookings,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'timebookingsopeninghours',
path: '/admin/:departmentId/modules/time-bookings/opening-hours',
component: DepartmentTimeBookingsOpeningHours,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'timebookingstypes',
path: '/admin/:departmentId/modules/time-bookings/types',
component: DepartmentTimeBookingsTypes,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'timebookingsnew',
path: '/admin/:departmentId/modules/time-bookings/new',
component: DepartmentTimeBookingsNew,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'washlanes',
path: '/admin/:departmentId/modules/wash-lanes',
component: DepartmentWashLanes,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'washlane',
path: '/admin/:departmentId/modules/wash-lanes/:id',
component: DepartmentWashLane,
meta: { middleware: adminMiddleware, departmentSelection: true }
},
{
name: 'selfservestudio',
path: '/admin/:departmentId/modules/self-serve/studio',
component: DepartmentSelfServeStudio,
meta: { middleware: adminMiddleware, departmentSelection: true, title: 'Self-Serve Studio' }
},
{
name: 'selfservequestions',
path: '/admin/:departmentId/modules/self-serve/questions',
redirect: (to) => ({
name: 'selfservestudio',
params: to.params,
query: { ...to.query, tab: 'questions' }
}),
meta: { middleware: adminMiddleware, departmentSelection: true, title: 'Self-Serve Studio' }
},
{
name: 'selfservetasks',
path: '/admin/:departmentId/modules/self-serve/tasks',
redirect: (to) => ({
name: 'selfservestudio',
params: to.params,
query: { ...to.query, tab: 'tasks' }
}),
meta: { middleware: adminMiddleware, departmentSelection: true, title: 'Self-Serve Studio' }
},
{
name: 'selfserveconditions',
path: '/admin/:departmentId/modules/self-serve/conditions',
redirect: (to) => ({
name: 'selfservestudio',
params: to.params,
query: { ...to.query, tab: 'conditions' }
}),
meta: { middleware: adminMiddleware, departmentSelection: true, title: 'Self-Serve Studio' }
},
{
name: 'selfserveconditionrules',
path: '/admin/:departmentId/modules/self-serve/condition-rules',
redirect: (to) => ({
name: 'selfservestudio',
params: to.params,
query: { ...to.query, tab: 'conditions' }
}),
meta: { middleware: adminMiddleware, departmentSelection: true, title: 'Self-Serve Studio' }
},
{
name: 'selfservevehicleconditions',
path: '/admin/:departmentId/modules/self-serve/vehicle-conditions',
redirect: (to) => ({
name: 'selfservestudio',
params: to.params,
query: { ...to.query, tab: 'conditions', compat_view: 'vehicle-conditions' }
}),
meta: { middleware: adminMiddleware, departmentSelection: true, title: 'Self-Serve Studio' }
},
{
name: 'selfservemachinetypes',
path: '/admin/:departmentId/modules/self-serve/machine-types',
redirect: (to) => ({
name: 'selfservestudio',
params: to.params,
query: { ...to.query, tab: 'conditions', compat_view: 'machine-types' }
}),
meta: { middleware: adminMiddleware, departmentSelection: true, title: 'Self-Serve Studio' }
},
{
name: 'superuser',
path: '/superuser',
component: SuperUserDashboard,
meta: { middleware: superUserMiddleware }
},
{
name: 'departments',
path: '/superuser/departments',
component: Departments,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentlanes',
path: '/superuser/department/lanes',
component: DepartmentLanes,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentgates',
path: '/superuser/department/gates',
component: DepartmentGates,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentselfserve',
path: '/superuser/selfserve',
component: DepartmentSelfServe,
meta: { middleware: superUserMiddleware }
},
{
name: 'selfservesessions',
path: '/superuser/selfserve/sessions',
component: SelfServeSessions,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagents',
path: '/superuser/selfserve/edge-agents',
component: EdgeAgents,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagentdetail',
path: '/superuser/selfserve/edge-agents/:id',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/overview`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagentoverview',
path: '/superuser/selfserve/edge-agents/:id/overview',
component: EdgeAgents,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagenttasks',
path: '/superuser/selfserve/edge-agents/:id/tasks',
component: EdgeAgents,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagentlogs',
path: '/superuser/selfserve/edge-agents/:id/logs',
component: EdgeAgents,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagentstatistics',
path: '/superuser/selfserve/edge-agents/:id/statistics',
component: EdgeAgents,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagentterminal',
path: '/superuser/selfserve/edge-agents/:id/terminal',
component: EdgeAgents,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagentinventory',
path: '/superuser/selfserve/edge-agents/:id/inventory',
component: EdgeAgents,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagentoperations',
path: '/superuser/selfserve/edge-agents/:id/operations',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/tasks`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagentsettings',
path: '/superuser/selfserve/edge-agents/:id/settings',
component: EdgeAgents,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgeagentmanage',
path: '/superuser/selfserve/edge-agents/:id/manage',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/settings`,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentrelays',
path: '/superuser/department/relays',
component: DepartmentRelays,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegateways',
path: '/superuser/configuration/edgegateway',
component: EdgeGatewaysWorkspacePage,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewaydetail',
path: '/superuser/configuration/edgegateway/:id',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/overview`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewayoverview',
path: '/superuser/configuration/edgegateway/:id/overview',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/overview`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewaytasks',
path: '/superuser/configuration/edgegateway/:id/tasks',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/tasks`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewaylogs',
path: '/superuser/configuration/edgegateway/:id/logs',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/logs`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewaystatistics',
path: '/superuser/configuration/edgegateway/:id/statistics',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/statistics`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewayterminal',
path: '/superuser/configuration/edgegateway/:id/terminal',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/terminal`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewayinventory',
path: '/superuser/configuration/edgegateway/:id/inventory',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/inventory`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewayoperations',
path: '/superuser/configuration/edgegateway/:id/operations',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/tasks`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewaysettings',
path: '/superuser/configuration/edgegateway/:id/settings',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/settings`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewaymanage',
path: '/superuser/configuration/edgegateway/:id/manage',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/settings`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewayslegacy',
path: '/superuser/gateways',
redirect: '/superuser/selfserve/edge-agents',
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewaydetaillegacyroot',
path: '/superuser/gateways/:id',
redirect: (to) => `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/overview`,
meta: { middleware: superUserMiddleware }
},
{
name: 'edgegatewaydetaillegacy',
path: '/superuser/gateways/:id/:subPage',
redirect: (to) => {
const mapping = {
assess: 'overview',
overview: 'overview',
tasks: 'tasks',
logs: 'logs',
statistics: 'statistics',
terminal: 'terminal',
configure: 'inventory',
inventory: 'inventory',
operations: 'tasks',
history: 'tasks',
manage: 'settings',
settings: 'settings',
};
const subPage = mapping[String(to.params.subPage || '').toLowerCase()] || 'overview';
return `/superuser/selfserve/edge-agents/${encodeURIComponent(String(to.params.id))}/${subPage}`;
},
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentlane',
path: '/superuser/department/lanes/:id',
component: DepartmentLane,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentsoverview',
path: '/superuser/departments/:departmentId',
component: Department,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentspricing',
path: '/superuser/departments/:departmentId/pricing',
redirect: (to) => `/superuser/departments/${encodeURIComponent(String(to.params.departmentId))}/prices`,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentsprices',
path: '/superuser/departments/:departmentId/prices',
component: DepartmentPricing,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentscustomerpricing',
path: '/superuser/departments/:departmentId/customer-pricing',
component: DepartmentCustomerPricing,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentsemployees',
path: '/superuser/departments/:departmentId/employees',
component: DepartmentEmployees,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentsbranding',
path: '/superuser/departments/:departmentId/branding',
component: DepartmentProfile,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentscategories',
path: '/superuser/departments/:departmentId/categories',
component: DepartmentCategories,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentsterminalsreaders',
path: '/superuser/departments/:departmentId/stripe/terminals/readers',
component: DepartmentStripeTerminalsReaders,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentsstripesetup',
path: '/superuser/departments/:departmentId/stripe/setup',
component: DepartmentStripeSetup,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentsmodules',
path: '/superuser/departments/:departmentId/modules',
component: DepartmentModulesSetup,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentsopeninghours',
path: '/superuser/departments/:departmentId/opening-hours',
component: DepartmentTimeBookingsOpeningHours,
meta: { middleware: superUserMiddleware }
},
{
name: 'departmentsgateways',
path: '/superuser/departments/:departmentId/gateways',
component: DepartmentGatewaysWorkspacePage,
props: (route) => ({ departmentId: Number(route.params.departmentId) }),
meta: { middleware: superUserMiddleware }
},
{
name: 'users',
path: '/superuser/users',
component: Users,
meta: { middleware: superUserMiddleware }
},
{
name: 'superusersubusers',
path: '/superuser/subusers',
component: Subusers,
props: { mode: 'superuser' },
meta: { middleware: superUserMiddleware }
},
{
name: 'subusers',
path: '/user/subusers',
component: Subusers,
meta: { middleware: authMiddleware }
},
{
name: 'subusergrants',
path: '/user/subusers/grants',
redirect: '/user/subusers',
meta: { middleware: authMiddleware }
},
{
name: 'user',
path: '/superuser/users/:userId',
component: User,
meta: { middleware: superUserMiddleware }
},
{
name: 'userorders',
path: '/superuser/users/:userId/orders',
component: UserOrders,
meta: { middleware: superUserMiddleware }
},
{
name: 'userpricing',
path: '/superuser/users/:userId/pricing',
component: UserPricing,
meta: { middleware: superUserMiddleware }
},
{
name: 'userother',
path: '/superuser/users/:userId/other',
component: UserOther,
meta: { middleware: superUserMiddleware }
},
{
name: 'usersecurity',
path: '/superuser/users/:userId/security',
component: UserSecurity,
meta: { middleware: superUserMiddleware }
},
{
name: 'usersubusers',
path: '/superuser/users/:userId/subusers',
component: UserSubusers,
meta: { middleware: superUserMiddleware }
},
{
name: 'uservehicles',
path: '/superuser/users/:userId/vehicles',
component: UserVehicles,
meta: { middleware: superUserMiddleware }
},
{
name: 'userxlvask',
path: '/superuser/users/:userId/xlvask',
component: UserXLVask,
meta: { middleware: superUserMiddleware }
},
{
name: 'products',
path: '/superuser/products',
component: Products,
meta: { middleware: superUserMiddleware }
},
{
name: 'customerRuleProductRestrictions',
path: '/superuser/customer-rules',
component: CustomerRuleProductRestrictions,
meta: { middleware: superUserMiddleware }
},
{
name: 'productsproduct',
path: '/superuser/products/:productId',
component: SuperUserDashboardProduct,
meta: { middleware: superUserMiddleware }
},
{
name: 'collectedorderinvoices',
path: '/superuser/invoices',
component: CollectedOrderInvoices,
meta: { middleware: superUserMiddleware }
},
{
name: 'collectedorderinvoicesdistribution',
path: '/superuser/invoices/distribution/:year/:month',
component: InvoiceDistributionMonthView,
meta: { middleware: superUserMiddleware }
},
{
name: 'collectedorderinvoicesdistributiontab',
path: '/superuser/invoices/distribution/:year/:month/:tab',
component: InvoiceDistributionMonthView,
meta: { middleware: superUserMiddleware }
},
{
name: 'collectedorderinvoice',
path: '/superuser/invoices/:collectedOrderInvoiceId',
component: CollectedOrderInvoice,
meta: { middleware: superUserMiddleware }
},
{
name: 'superuserinvoicing',
path: '/superuser/invoicing',
component: Invoicing,
meta: { middleware: superUserMiddleware }
},
{
name: 'objects',
path: '/superuser/orders',
component: Orders,
meta: { middleware: superUserMiddleware }
},
{
name: 'objectsdrafts',
path: '/superuser/orders/drafts',
component: OrdersDrafts,
meta: { middleware: superUserMiddleware }
},
{
name: 'superuserbookings',
path: '/superuser/bookings',
component: Bookings,
meta: { middleware: superUserMiddleware }
},
{
name: 'scanners',
path: '/superuser/scanners',
component: NumberPlateScanners,
meta: { middleware: superUserMiddleware }
},
{
name: 'categories',
path: '/superuser/categories',
component: Categories,
meta: { middleware: superUserMiddleware }
},
{
name: 'customercomplaints',
path: '/superuser/complaints',
component: CustomerComplaints,
meta: { middleware: superUserMiddleware }
},
{
name: 'superusererrorreports',
path: '/superuser/error-reports',
component: ErrorReports,
meta: { middleware: superUserMiddleware }
},
{
name: 'systemdatabase',
path: '/superuser/system/database',
component: DatabaseOverview,
meta: { middleware: superUserMiddleware }
},
{
name: 'systemcron',
path: '/superuser/system/cron',
component: CronOperations,
meta: { middleware: superUserMiddleware }
},
{
name: 'systemminio',
path: '/superuser/system/minio',
component: MinioOverview,
meta: { middleware: superUserMiddleware }
},
{
name: 'systemredis',
path: '/superuser/system/redis',
component: RedisOverview,
meta: { middleware: superUserMiddleware }
},
{
path: '/superuser/system/security',
redirect: '/superuser/system/security/overview',
meta: { middleware: superUserMiddleware }
},
{
name: 'systemsecurityoverview',
path: '/superuser/system/security/overview',
component: SystemSecurity,
props: { page: 'overview' },
meta: { middleware: superUserMiddleware }
},
{
name: 'systemsecurityfirewall',
path: '/superuser/system/security/firewall',
component: SystemSecurity,
props: { page: 'firewall' },
meta: { middleware: superUserMiddleware }
},
{
name: 'systemsecuritysettings',
path: '/superuser/system/security/settings',
component: SystemSecurity,
props: { page: 'settings' },
meta: { middleware: superUserMiddleware }
},
{
name: 'systemsecurityincidents',
path: '/superuser/system/security/incidents',
component: SystemSecurity,
props: { page: 'incidents' },
meta: { middleware: superUserMiddleware }
},
{
path: '/superuser/system/replication',
redirect: '/superuser',
meta: { middleware: superUserMiddleware }
},
{
name: 'statistics',
path: '/superuser/statistics',
component: StatisticsOverview,
meta: { middleware: superUserMiddleware }
},
{
name: 'statisticsOther',
path: '/superuser/statistics/other',
component: Statistics,
meta: { middleware: superUserMiddleware }
},
{
name: 'configuration',
path: '/superuser/configuration',
component: Configuration,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationEconomic',
path: '/superuser/configuration/economic',
component: ConfigurationEconomic,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationReCAPTCHA',
path: '/superuser/configuration/recaptcha',
component: ConfigurationReCAPTCHA,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationEmail',
path: '/superuser/configuration/email',
component: ConfigurationEmail,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationSlack',
path: '/superuser/configuration/slack',
component: ConfigurationSlack,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationBackup',
path: '/superuser/configuration/backup',
component: ConfigurationBackups,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationFailover',
path: '/superuser/configuration/failover',
redirect: { path: '/superuser/configuration/releases/data-services', query: { panel: 'failover' } },
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationCoolify',
path: '/superuser/configuration/coolify',
redirect: { path: '/superuser/configuration/releases/integrations', query: { panel: 'coolify' } },
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationReleaseManager',
path: '/superuser/configuration/releases',
redirect: { path: '/superuser/configuration/releases/overview' },
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationReleaseManagerPanel',
path: '/superuser/configuration/releases/:panel(overview|channels|deployments|operations|integrations|data-services|assignments|settings)',
component: ConfigurationReleaseManager,
props: (route) => ({ panel: route.params.panel }),
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationMotorAPI',
path: '/superuser/configuration/motorapi',
component: ConfigurationMotorAPI,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationStripe',
path: '/superuser/configuration/stripe',
component: ConfigurationStripe,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationFXRatesAPI',
path: '/superuser/configuration/fxratesapi',
component: ConfigurationFXRatesAPI,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationWeatherAPI',
path: '/superuser/configuration/weatherapi',
component: ConfigurationWeatherAPI,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationWorkfeed',
path: '/superuser/configuration/workfeed',
component: ConfigurationWorkfeed,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationGatewayAPI',
path: '/superuser/configuration/gatewayapi',
component: ConfigurationGatewayAPI,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationXLVask',
path: '/superuser/configuration/xlvask',
component: ConfigurationXLVask,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationEntra',
path: '/superuser/configuration/entra',
component: ConfigurationEntra,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationLimble',
path: '/superuser/configuration/limble',
component: ConfigurationLimble,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationOcrSpace',
path: '/superuser/configuration/ocrspace',
component: ConfigurationOcrSpace,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationOpenAI',
path: '/superuser/configuration/openai',
component: ConfigurationOpenAI,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationLicensePlateRecognizer',
path: '/superuser/configuration/licenseplaterecognizer',
component: ConfigurationLicensePlateRecognizer,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationVirkData',
path: '/superuser/configuration/virkdata',
component: ConfigurationVirkData,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationShelly',
path: '/superuser/configuration/shelly',
component: ConfigurationShelly,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationSelfServe',
path: '/superuser/configuration/selfserve',
component: ConfigurationSelfServe,
meta: { middleware: superUserMiddleware }
},
{
name: 'configurationBird',
path: '/superuser/configuration/bird',
component: ConfigurationBird,
meta: { middleware: superUserMiddleware }
},
{
name: 'customers',
path: '/superuser/customers',
component: Customers,
meta: { middleware: superUserMiddleware }
},
{
name: 'roles',
path: '/superuser/roles',
component: Roles,
meta: { middleware: superUserMiddleware }
},
{
name: 'vehicles',
path: '/superuser/vehicles',
component: Vehicles,
meta: { middleware: superUserMiddleware }
},
{
name: 'xlvask',
path: '/superuser/xlvask',
component: XLVaskPage,
meta: { middleware: superUserMiddleware }
},
{
name: 'xlvaskcustomers',
path: '/superuser/xlvask/customers',
component: XLVaskCustomersPage,
meta: { middleware: superUserMiddleware }
},
{
name: 'xlvaskusagelogs',
path: '/superuser/xlvask/usagelogs',
component: XLVaskUsageLogsPage,
meta: { middleware: superUserMiddleware }
},
{
name: 'vehiclesvehicle',
path: '/superuser/vehicles/:registrationnumber',
component: Vehicle,
meta: { middleware: superUserMiddleware }
},
{
name: 'rolesPermissions',
path: '/superuser/roles/:roleId',
component: SuperUserRolesPermissions,
meta: { middleware: superUserMiddleware }
},
{
name: 'PwaDownload',
path: '/download',
component: PWADownload,
},
{
name: 'guestHome',
path: '/guest/home',
component: GuestHome,
},
{
name: 'guestBookWash',
path: '/guest/book/wash',
component: GuestBookExteriorWash,
meta: { template: 'clear-main', titleKey: 'book_wash.title' }
},
{
name: 'outdated-installation',
path: '/outdated-installation',
component: OutdatedInstallation,
meta: { template: 'clear-main', titleKey: 'outdated.installation.title' }
},
{
name: 'outdated-gateway',
path: '/outdated-gateway',
component: OutdatedGateway,
meta: { template: 'clear-main', titleKey: 'outdated.gateway.title' }
},
{
name: 'connectivity-issue',
path: '/connectivity-issue',
component: ConnectivityIssue,
meta: { template: 'clear-main', titleKey: 'connectivity.title' }
},
{
name: 'notfound',
path: '/:pathMatch(.*)*',
component: NotFound
}
]
});
export default router;