Routing

VueRouter index file structure

As a routing system for Vue Balance uses VueRouter, whose definition is written in index.ts inside the router folder.

In this file we can define the hierarchical structure of the routes and specify the components to use when we visit each route, together with any eventual route params.

const router = createRouter({
    history: createWebHistory(),
    routes: [
        {
            path: '/',
            component: () => import('../views/layouts/AppLayout.vue'),
            redirect: 'timesheets',
            children: [
                {
                    path: 'timesheets',
                    name: TimesheetsRoutesNamesEnum.INDEX,
                    component: () => import('../cruds/timesheets/Index.vue'),
                },
                {
                    path: 'profile',
                    name: RouterNamesEnum.PROFILE,
                    component: () => import('../views/profile/Profile.vue'),
                },
                {
                    path: 'edit-profile',
                    name: RouterNamesEnum.EDIT_PROFILE,
                    component: () => import('../views/profile/EditProfile.vue'),
                },
                {
                    path: 'user-management',
                    name: RouterNamesEnum.USER_MANAGEMENT,
                    redirect: { name: 'users.index' },
                    children: [
                        {
                            path: 'users',
                            name: UserRoutesNamesEnum.INDEX,
                            component: () => import('../cruds/users/Index.vue'),
                        },
                        {
                            path: 'users/create',
                            name: UserRoutesNamesEnum.CREATE,
                            component: () =>
                                import('../cruds/users/Create.vue'),
                        },
                        {
                            path: 'users/:userId',
                            name: UserRoutesNamesEnum.SHOW,
                            component: () => import('../cruds/users/Show.vue'),
                        },
                        {
                            path: 'users/:userId/edit',
                            name: UserRoutesNamesEnum.EDIT,
                            component: () => import('../cruds/users/Edit.vue'),
                        },
                    ],
                },
                {
                    path: 'projects',
                    name: ProjectRoutesNamesEnum.INDEX,
                    component: () => import('../cruds/projects/Index.vue'),
                },
                {
                    path: 'projects/create',
                    name: ProjectRoutesNamesEnum.CREATE,
                    component: () => import('../cruds/projects/Create.vue'),
                },
                {
                    path: 'projects',
                    redirect: ProjectRoutesNamesEnum.INDEX,
                    children: [
                        {
                            path: ':projectId',
                            name: ProjectRoutesNamesEnum.SHOW,
                            component: () =>
                                import('../cruds/projects/Show.vue'),
                        },
                        {
                            path: ':projectId/spendings/create',
                            name: ProjectRoutesNamesEnum.SPEDINGS_CREATE,
                            component: () =>
                                import('../cruds/spendings/Create.vue'),
                        },
                        {
                            path: ':projectId/spendings/:spendingId',
                            name: ProjectRoutesNamesEnum.SPEDINGS_SHOW,
                            component: () =>
                                import('../cruds/spendings/Show.vue'),
                        },
                        {
                            path: ':projectId/spendings/:spendingId/edit',
                            name: ProjectRoutesNamesEnum.SPEDINGS_EDIT,
                            component: () =>
                                import('../cruds/spendings/Edit.vue'),
                        },
                    ],
                },
                {
                    path: 'projects/:projectId/edit',
                    name: ProjectRoutesNamesEnum.EDIT,
                    component: () => import('../cruds/projects/Edit.vue'),
                },
                {
                    path: 'orders',
                    name: OrdersRoutesNamesEnum.INDEX,
                    component: () => import('../cruds/orders/Index.vue'),
                },
                {
                    path: 'orders/reports',
                    name: OrdersRoutesNamesEnum.REPORTS,
                    component: () => import('../cruds/orders/Reports.vue'),
                },
                {
                    path: 'orders/create',
                    name: OrdersRoutesNamesEnum.CREATE,
                    component: () => import('../cruds/orders/Create.vue'),
                },
                {
                    path: 'orders',
                    redirect: { name: OrdersRoutesNamesEnum.SHOW },
                    children: [
                        {
                            path: ':orderId',
                            name: OrdersRoutesNamesEnum.SHOW,
                            component: () => import('../cruds/orders/Show.vue'),
                        },
                        {
                            path: ':orderId/spendings/create',
                            name: OrdersRoutesNamesEnum.SPEDINGS_CREATE,
                            component: () =>
                                import('../cruds/spendings/Create.vue'),
                        },
                        {
                            path: ':orderId/spendings/:spendingId',
                            name: OrdersRoutesNamesEnum.SPEDINGS_SHOW,
                            component: () =>
                                import('../cruds/spendings/Show.vue'),
                        },
                        {
                            path: ':orderId/spendings/:spendingId/edit',
                            name: OrdersRoutesNamesEnum.SPEDINGS_EDIT,
                            component: () =>
                                import('../cruds/spendings/Edit.vue'),
                        },
                    ],
                },
            ],
        },
    ],
})

export default router

For convenience, this file specifies route names through enums contained in the RouterNamesEnum.ts file.

Last updated