import Vue from 'vue' import VueRouter from 'vue-router' import store from './store/index.js' /* |-------------------------------------------------------------------------- | Admin Views |--------------------------------------------------------------------------| */ // Layouts import LayoutBasic from './views/layouts/LayoutBasic.vue' import LayoutLogin from './views/layouts/LayoutLogin.vue' import LayoutWizard from './views/layouts/LayoutWizard.vue' // Auth import Login from './views/auth/Login.vue' import ForgotPassword from './views/auth/ForgotPassword.vue' import ResetPassword from './views/auth/ResetPassword.vue' import Register from './views/auth/Register.vue' import NotFoundPage from './views/errors/404.vue' /* |-------------------------------------------------------------------------- | Admin Views |--------------------------------------------------------------------------| */ // Dashbord import Dashboard from './views/dashboard/Dashboard.vue' // Customers import CustomerIndex from './views/customers/Index.vue' import CustomerCreate from './views/customers/Create.vue' // Items import ItemsIndex from './views/items/Index.vue' import ItemCreate from './views/items/Create.vue' // Invoices import InvoiceIndex from './views/invoices/Index.vue' import InvoiceCreate from './views/invoices/Create.vue' import InvoiceView from './views/invoices/View.vue' // Payments import PaymentsIndex from './views/payments/Index.vue' import PaymentCreate from './views/payments/Create.vue' // Estimates import EstimateIndex from './views/estimates/Index.vue' import EstimateCreate from './views/estimates/Create.vue' import EstimateView from './views/estimates/View.vue' // Expenses import ExpensesIndex from './views/expenses/Index' import ExpenseCreate from './views/expenses/Create.vue' // Report import SalesReports from './views/reports/SalesReports' import ExpensesReport from './views/reports/ExpensesReport' import ProfitLossReport from './views/reports/ProfitLossReport' import TaxReport from './views/reports/TaxReport.vue' import ReportLayout from './views/reports/layout/Index.vue' // Settings import SettingsLayout from './views/settings/layout/Index.vue' import CompanyInfo from './views/settings/CompanyInfo.vue' import Notifications from './views/settings/Notifications.vue' import Preferences from './views/settings/Preferences.vue' import UserProfile from './views/settings/UserProfile.vue' import TaxTypes from './views/settings/TaxTypes.vue' import ExpenseCategory from './views/settings/ExpenseCategory.vue' import MailConfig from './views/settings/MailConfig.vue' import Wizard from './views/wizard/Index.vue' Vue.use(VueRouter) const routes = [ /* |-------------------------------------------------------------------------- | Frontend Routes |--------------------------------------------------------------------------| */ /* |-------------------------------------------------------------------------- | Auth & Registration Routes |--------------------------------------------------------------------------| */ { path: '/', component: LayoutLogin, meta: { redirectIfAuthenticated: true }, children: [ { path: '/', component: Login }, { path: 'login', component: Login, name: 'login' }, { path: '/forgot-password', component: ForgotPassword, name: 'forgot-password' }, { path: '/reset-password/:token', component: ResetPassword, name: 'reset-password' }, { path: 'register', component: Register, name: 'register' } ] }, /* |-------------------------------------------------------------------------- | Onboarding Routes |--------------------------------------------------------------------------| */ { path: '/on-boarding', component: LayoutWizard, children: [ { path: '/', component: Wizard, name: 'wizard' } ] }, /* |-------------------------------------------------------------------------- | Admin Backend Routes |--------------------------------------------------------------------------| */ { path: '/admin', component: LayoutBasic, // Change the desired Layout here meta: { requiresAuth: true }, children: [ // Dashbord { path: '/', component: Dashboard, name: 'dashboard' }, { path: 'dashboard', component: Dashboard }, // Customer { path: 'customers', component: CustomerIndex }, { path: 'customers/create', name: 'customers.create', component: CustomerCreate }, { path: 'customers/:id/edit', name: 'customers.edit', component: CustomerCreate }, // Items { path: 'items', component: ItemsIndex }, { path: 'items/create', name: 'items.create', component: ItemCreate }, { path: 'items/:id/edit', name: 'items.edit', component: ItemCreate }, // Estimate { path: 'estimates', name: 'estimates.index', component: EstimateIndex }, { path: 'estimates/create', name: 'estimates.create', component: EstimateCreate }, { path: 'estimates/:id/view', name: 'estimates.view', component: EstimateView }, { path: 'estimates/:id/edit', name: 'estimates.edit', component: EstimateCreate }, // Invoice { path: 'invoices', name: 'invoices.index', component: InvoiceIndex }, { path: 'invoices/create', name: 'invoices.create', component: InvoiceCreate }, { path: 'invoices/:id/view', name: 'invoices.view', component: InvoiceView }, { path: 'invoices/:id/edit', name: 'invoices.edit', component: InvoiceCreate }, // Payments { path: 'payments', name: 'payments.index', component: PaymentsIndex }, { path: 'payments/create', name: 'payments.create', component: PaymentCreate }, { path: 'payments/:id/create', name: 'invoice.payments.create', component: PaymentCreate }, { path: 'payments/:id/edit', name: 'payments.edit', component: PaymentCreate }, // Expenses { path: 'expenses', component: ExpensesIndex }, { path: 'expenses/create', name: 'expenses.create', component: ExpenseCreate }, { path: 'expenses/:id/edit', name: 'expenses.edit', component: ExpenseCreate }, // Reports { path: 'reports', component: ReportLayout, children: [ { path: 'sales', component: SalesReports }, { path: 'expenses', component: ExpensesReport }, { path: 'profit-loss', component: ProfitLossReport }, { path: 'taxes', component: TaxReport } ] }, // Settings { path: 'settings', component: SettingsLayout, children: [ { path: 'company-info', name: 'company.info', component: CompanyInfo }, { path: 'user-profile', name: 'user.profile', component: UserProfile }, { path: 'preferences', name: 'preferences', component: Preferences }, { path: 'tax-types', name: 'tax.types', component: TaxTypes }, { path: 'expense-category', name: 'expense.category', component: ExpenseCategory }, { path: 'mail-configuration', name: 'mailconfig', component: MailConfig }, { path: 'notifications', name: 'notifications', component: Notifications } ] } ] }, // DEFAULT ROUTE { path: '*', component: NotFoundPage } ] const router = new VueRouter({ routes, mode: 'history', linkActiveClass: 'active' }) router.beforeEach((to, from, next) => { // Redirect if not authenticated on secured routes if (to.matched.some(m => m.meta.requiresAuth)) { if (!store.getters['auth/isAuthenticated']) { return next('/login') } } if (to.matched.some(m => m.meta.redirectIfAuthenticated) && store.getters['auth/isAuthenticated']) { return next('/admin/dashboard') } return next() }) export default router