Unify truckwash.dk Kundeoprettelse and QR traffic on the shared customer page, add protected registration UX, and complete the limited-backoffice demo flow.
1468 lines
52 KiB
JavaScript
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;
|