Files
bssapp/ui/src/router/routes.js
2026-06-17 21:57:02 +03:00

463 lines
13 KiB
JavaScript

import { activityLogsRoute } from 'src/modules/activityLogs'
// src/router/routes.js
const routes = [
/* ==========================================================
🌍 ROOT
========================================================== */
{
path: '/',
redirect: '/login'
},
/* ==========================================================
🔐 PUBLIC
========================================================== */
{
path: '/login',
component: () => import('layouts/EmptyLayout.vue'),
meta: { public: true },
children: [
{
path: '',
name: 'login',
component: () => import('pages/MainPage.vue')
}
]
},
{
path: '/first-password-change',
component: () => import('layouts/EmptyLayout.vue'),
meta: { public: true },
children: [
{
path: '',
name: 'first-password-change',
component: () => import('pages/FirstPasswordChange.vue')
}
]
},
{
path: '/password-reset/:token',
component: () => import('layouts/EmptyLayout.vue'),
meta: { public: true },
children: [
{
path: '',
name: 'password-reset',
component: () => import('pages/ResetPassword.vue')
}
]
},
/* ==========================================================
🚫 UNAUTHORIZED
========================================================== */
{
path: '/unauthorized',
component: () => import('layouts/EmptyLayout.vue'),
children: [
{
path: '',
name: 'unauthorized',
component: () => import('pages/Unauthorized.vue')
}
]
},
/* ==========================================================
🏠 MAIN APP
========================================================== */
{
path: '/app',
component: () => import('layouts/MainLayout.vue'),
children: [
/* ================= DASHBOARD ================= */
{
path: '',
name: 'dashboard',
component: () => import('pages/Dashboard.vue'),
meta: {}
},
/* ================= PERMISSIONS ================= */
{
path: 'permissions',
name: 'permissions',
component: () => import('pages/PermissionMatrix.vue'),
meta: { permission: 'system:read' }
},
{
path: 'role-dept-permissions',
name: 'role-dept-permissions',
component: () => import('pages/RoleDepartmentPermissionGateway.vue'),
meta: { permission: 'system:update' }
},
{
path: 'role-dept-permissions/list',
name: 'role-dept-permissions-list',
component: () => import('pages/RoleDepartmentPermissionList.vue'),
meta: { permission: 'system:update' }
},
{
path: 'role-dept-permissions/editor',
name: 'role-dept-permissions-editor',
component: () => import('pages/RoleDepartmentPermissionPage.vue'),
meta: { permission: 'system:update' }
},
{
path: 'user-permissions',
name: 'user-permissions',
component: () => import('pages/UserPermissionPage.vue'),
meta: { permission: 'system:update' }
},
/* ================= ACTIVITY LOGS ================= */
activityLogsRoute,
/* ================= FINANCE ================= */
{
path: 'statementofaccount',
name: 'statementofaccount',
component: () => import('pages/statementofaccount.vue'),
meta: { permission: 'finance:view' }
},
{
path: 'statementreport',
name: 'statementreport',
component: () => import('pages/StatementReport.vue'),
meta: { permission: 'finance:view' }
},
{
path: 'statementheaderreport',
name: 'statementheaderreport',
component: () => import('pages/StatementHeaderReport.vue'),
meta: { permission: 'finance:view' }
},
{
path: 'customer-balance-list',
name: 'customer-balance-list',
component: () => import('pages/CustomerBalanceList.vue'),
meta: { permission: 'finance:view' }
},
{
path: 'account-aging-statement',
name: 'account-aging-statement',
component: () => import('pages/AccountAgingStatement.vue'),
meta: { permission: 'finance:view' }
},
{
path: 'aged-customer-balance-list',
name: 'aged-customer-balance-list',
component: () => import('pages/AgingCustomerBalancelist.go.vue'),
meta: { permission: 'finance:view' }
},
/* ================= USERS ================= */
{
path: 'users',
name: 'user-gateway',
component: () => import('pages/UserGateway.vue'),
meta: { permission: 'user:view' }
},
{
path: 'users/list',
name: 'user-list',
component: () => import('pages/UserList.vue'),
meta: { permission: 'user:view' }
},
{
path: 'users/new',
name: 'user-new',
component: () => import('pages/UserDetail.vue'),
meta: {
mode: 'new',
permission: 'user:insert'
}
},
{
path: 'users/edit/:id',
name: 'user-edit',
component: () => import('pages/UserDetail.vue'),
props: true,
meta: {
mode: 'edit',
permission: 'user:update'
}
},
{
path: 'users/view/:id',
name: 'user-view',
component: () => import('pages/UserDetail.vue'),
props: true,
meta: {
mode: 'view',
permission: 'user:view'
}
},
/* ================= TEST MAIL ================= */
{
path: 'test-mail',
name: 'test-mail',
component: () => import('pages/TestMail.vue'),
meta: { permission: 'system:update', onlyUserIds: [5] }
},
{
path: 'market-mail-mapping',
name: 'market-mail-mapping',
component: () => import('../pages/MarketMailMapping.vue'),
meta: { permission: 'system:update' }
},
{
path: 'costing-mail-mapping',
name: 'costing-mail-mapping',
component: () => import('../pages/CostingMailMapping.vue'),
meta: { permission: 'system:update' }
},
{
path: 'pricing-mail-mapping',
name: 'pricing-mail-mapping',
component: () => import('../pages/PricingMailMapping.vue'),
meta: { permission: 'system:update' }
},
{
path: 'language/translations',
name: 'translation-table',
component: () => import('pages/TranslationTable.vue'),
meta: { permission: 'language:update' }
},
/* ================= ORDERS ================= */
{
path: 'order-gateway',
name: 'order-gateway',
component: () => import('pages/OrderGateway.vue'),
meta: { permission: 'order:view' }
},
{
path: 'order-entry/:orderHeaderID',
name: 'order-entry',
component: () => import('pages/OrderEntry.vue'),
props: true,
meta: {
mode: 'new',
permission: 'order:insert'
}
},
{
path: 'order-edit/:orderHeaderID',
name: 'order-edit',
component: () => import('pages/OrderEntry.vue'),
props: true,
meta: {
mode: 'edit',
permission: 'order:update'
}
},
{
path: 'order-list',
name: 'order-list',
component: () => import('pages/OrderList.vue'),
meta: { permission: 'order:view' }
},
{
path: 'orderproductionupdate',
name: 'orderproductionupdate-list',
component: () => import('pages/OrderProductionUpdateList.vue'),
meta: { permission: 'order:update' }
},
{
path: 'orderproductionupdate/:orderHeaderID',
name: 'orderproductionupdate',
component: () => import('pages/OrderProductionUpdate.vue'),
props: true,
meta: { permission: 'order:update' }
},
{
path: 'order-bulk-close',
name: 'order-bulk-close',
component: () => import('pages/OrderBulkClose.vue'),
meta: { permission: 'order:update' }
},
{
path: 'order-pdf/:id',
name: 'order-pdf',
component: () => import('pages/OrderPdf.vue'),
props: true,
meta: { permission: 'order:export' }
},
/* ================= PRODUCTS ================= */
{
path: 'product-stock-query',
name: 'product-stock-query',
component: () => import('pages/ProductStockQuery.vue'),
meta: { permission: 'order:view' }
},
{
path: 'product-stock-by-attributes',
name: 'product-stock-by-attributes',
component: () => import('pages/ProductStockByAttributes.vue'),
meta: { permission: 'order:view' }
},
/* ================= PRICING ================= */
// Backward-compatible redirects (old "pricing/production-product-costing" URLs).
{
path: 'pricing/production-product-costing',
redirect: { name: 'production-product-costing' }
},
{
path: 'pricing/production-product-costing/has-cost',
redirect: { name: 'production-product-costing-has-cost' }
},
{
path: 'pricing/production-product-costing/has-cost/history',
redirect: { name: 'production-product-costing-has-cost-history' }
},
{
path: 'pricing/production-product-costing/has-cost/detail',
redirect: { name: 'production-product-costing-has-cost-detail' }
},
{
path: 'pricing/production-product-costing/no-cost',
redirect: { name: 'production-product-costing-no-cost' }
},
{
path: 'pricing/production-product-costing/maliyet-parca-eslestirme',
redirect: { name: 'production-product-costing-maliyet-parca-eslestirme' }
},
{
path: 'pricing/production-product-costing/default-quantities',
redirect: { name: 'production-product-costing-default-quantities' }
},
{
path: 'pricing/product-pricing',
name: 'product-pricing',
component: () => import('pages/ProductPricing.vue'),
meta: { permission: 'pricing:view' }
},
{
path: 'pricing/brand-classification',
name: 'brand-classification',
component: () => import('pages/BrandClassification.vue'),
meta: { permission: 'pricing:view' }
},
{
path: 'pricing/brandgroupcurrency',
alias: ['pricing/brandproupcurrency', 'pricing/brand-group-currency'],
name: 'brandgroupcurrency',
component: () => import('pages/BrandGroupCurrency.vue'),
meta: { permission: 'pricing:view' }
},
{
path: 'pricing/pricing-rules',
name: 'pricing-rules',
component: () => import('pages/PricingRules.vue'),
meta: { permission: 'pricing:view' }
},
{
path: 'costing/production-product-costing',
name: 'production-product-costing',
component: () => import('pages/ProductionProductCosting.vue'),
meta: { permission: 'costing:view' }
},
{
path: 'costing/production-product-costing/has-cost',
name: 'production-product-costing-has-cost',
component: () => import('pages/ProductionProductCostingHasCost.vue'),
meta: { permission: 'costing:view' }
},
{
path: 'costing/production-product-costing/has-cost/history',
name: 'production-product-costing-has-cost-history',
component: () => import('pages/ProductionProductCostingHasCostHistory.vue'),
meta: { permission: 'costing:view' }
},
{
path: 'costing/production-product-costing/has-cost/detail',
name: 'production-product-costing-has-cost-detail',
component: () => import('pages/ProductionProductCostingHasCostDetail.vue'),
meta: { permission: 'costing:view' }
},
{
path: 'costing/production-product-costing/no-cost',
name: 'production-product-costing-no-cost',
component: () => import('pages/ProductionProductCostingNoCost.vue'),
meta: { permission: 'costing:view' }
},
{
path: 'costing/production-product-costing/maliyet-parca-eslestirme',
name: 'production-product-costing-maliyet-parca-eslestirme',
component: () => import('pages/ProductionProductCostingMTBolumMapping.vue'),
meta: { permission: 'costing:view' }
},
{
path: 'costing/production-product-costing/default-quantities',
name: 'production-product-costing-default-quantities',
component: () => import('pages/ProductionProductCostingDefaultQuantities.vue'),
meta: { permission: 'costing:view' }
},
/* ================= PASSWORD ================= */
{
path: 'change-password',
name: 'change-password',
component: () => import('pages/ChangePassword.vue')
}
]
},
/* ==========================================================
❌ 404
========================================================== */
{
path: '/:catchAll(.*)*',
component: () => import('pages/ErrorNotFound.vue')
}
]
export default routes