- Configured BOMs for all 585 master variants across 5 categories (Oil Ozone, Aroma Oil, Car Diffuser, Room Spray, Reed Diffuser) - Mapped 2,111 marketplace products (Shopee and Lazada) to master catalog variants - Added backend profitability routes (/api/profitability/matrix, /omnichannel, /mrp) - Added 3 admin pages under Product menu: Cost & Profitability Matrix, Omnichannel Margin, and MRP & Material Demand - Added comprehensive ledgers and production sync scripts
209 lines
13 KiB
TypeScript
209 lines
13 KiB
TypeScript
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
|
|
import AdminLayout from './components/AdminLayout'
|
|
import DashboardPage from './pages/DashboardPage'
|
|
import ProductsPage from './pages/ProductsPage'
|
|
import ProductEditPage from './pages/ProductEditPage'
|
|
import ProductBomPage from './pages/ProductBomPage'
|
|
import ProductCmsPage from './pages/ProductCmsPage'
|
|
import CategoriesPage from './pages/CategoriesPage'
|
|
import BrandsPage from './pages/BrandsPage'
|
|
import CategoryEditPage from './pages/CategoryEditPage'
|
|
import CategoryCmsPage from './pages/CategoryCmsPage'
|
|
import CustomersPage from './pages/CustomersPage'
|
|
import PageBuilderPage from './pages/PageBuilderPage'
|
|
import PageReorderPage from './pages/PageReorderPage'
|
|
import CmsMockupPage from './pages/CmsMockupPage'
|
|
import RawMaterialsPage from './pages/RawMaterialsPage'
|
|
import RawMaterialDetailPage from './pages/RawMaterialDetailPage'
|
|
import LoginPage from './pages/LoginPage'
|
|
import InstallSeedPage from './pages/InstallSeedPage'
|
|
import ProtectedRoute from './components/ProtectedRoute'
|
|
import OrdersPage from './pages/OrdersPage'
|
|
import OrderDetailPage from './pages/OrderDetailPage'
|
|
import StoreSettingsPage from './pages/StoreSettingsPage'
|
|
import BrandIntelligencePage from './pages/BrandIntelligencePage'
|
|
import PaymentSettingsPage from './pages/PaymentSettingsPage'
|
|
import ThemeSettingsPage from './pages/ThemeSettingsPage'
|
|
import ContentSettingsPage from './pages/ContentSettingsPage'
|
|
import SystemMaintenancePage from './pages/SystemMaintenancePage'
|
|
import MainNavigationPage from './pages/menu-manager/MainNavigationPage'
|
|
import FooterExplorePage from './pages/menu-manager/FooterExplorePage'
|
|
import FooterSupportPage from './pages/menu-manager/FooterSupportPage'
|
|
import FooterBrandPage from './pages/menu-manager/FooterBrandPage'
|
|
import FooterLayoutPage from './pages/menu-manager/FooterLayoutPage'
|
|
import NewsletterSubscribersPage from './pages/NewsletterSubscribersPage'
|
|
import ArticlesPage from './pages/ArticlesPage'
|
|
import ArticleEditPage from './pages/ArticleEditPage'
|
|
import CouponsPage from './pages/CouponsPage'
|
|
import PromotionsPage from './pages/PromotionsPage'
|
|
import TiktokPage from './pages/TiktokPage'
|
|
import TiktokAnalysisPage from './pages/TiktokAnalysisPage'
|
|
import ShopeePage from './pages/ShopeePage'
|
|
import ShopeeOrderDetailPage from './pages/ShopeeOrderDetailPage'
|
|
import ShopeeSalesMapPage from './pages/ShopeeSalesMapPage'
|
|
import ShopeeAnalyticsPage from './pages/ShopeeAnalyticsPage'
|
|
import ShopeeOverviewPage from './pages/ShopeeOverviewPage'
|
|
import TiktokOrderPage from './pages/TiktokOrderPage'
|
|
import TiktokOrderDetailPage from './pages/TiktokOrderDetailPage'
|
|
import TiktokSalesMapPage from './pages/TiktokSalesMapPage'
|
|
import TiktokAnalyticsPage from './pages/TiktokAnalyticsPage'
|
|
import TiktokOverviewPage from './pages/TiktokOverviewPage'
|
|
import LazadaOrderPage from './pages/LazadaOrderPage'
|
|
import LazadaAnalyticsPage from './pages/LazadaAnalyticsPage'
|
|
import LazadaOverviewPage from './pages/LazadaOverviewPage'
|
|
import GlobalAnalyticsPage from './pages/GlobalAnalyticsPage'
|
|
import MediaLibraryPage from './pages/MediaLibraryPage'
|
|
import ContactMessagesPage from './pages/ContactMessagesPage'
|
|
import ProductAttributesPage from './pages/ProductAttributesPage'
|
|
import ProductAttributeEditPage from './pages/ProductAttributeEditPage'
|
|
import TiktokPriceSimulatorPage from './pages/TiktokPriceSimulatorPage'
|
|
import TiktokShopCasePage from './pages/TiktokShopCasePage'
|
|
import ShopeeShopCasePage from './pages/ShopeeShopCasePage'
|
|
import BackupDashboardPage from './pages/backup/BackupDashboardPage'
|
|
import BackupDatabasePage from './pages/backup/BackupDatabasePage'
|
|
import BackupCatalogPage from './pages/backup/BackupCatalogPage'
|
|
import BackupOrdersPage from './pages/backup/BackupOrdersPage'
|
|
import BackupCmsPage from './pages/backup/BackupCmsPage'
|
|
import BackupMediaPage from './pages/backup/BackupMediaPage'
|
|
import OmnichannelSalesMapPage from './pages/analytics/OmnichannelSalesMapPage'
|
|
import ProductSalesMapPage from './pages/analytics/ProductSalesMapPage'
|
|
import MalaysiaSalesMapPage from './pages/analytics/MalaysiaSalesMapPage'
|
|
import VietnamSalesMapPage from './pages/analytics/VietnamSalesMapPage'
|
|
import RepeatCustomersPage from './pages/analytics/RepeatCustomersPage'
|
|
import RepeatCustomersCalendarPage from './pages/analytics/RepeatCustomersCalendarPage'
|
|
import RepeatCustomersTimelinePage from './pages/analytics/RepeatCustomersTimelinePage'
|
|
import RepeatCustomersActionPlanPage from './pages/analytics/RepeatCustomersActionPlanPage'
|
|
import RepeatCustomerDetailPage from './pages/analytics/RepeatCustomerDetailPage'
|
|
import MarketplaceProductsPage from './pages/tools/MarketplaceProductsPage'
|
|
import MarketplaceCrmPage from './pages/crm/MarketplaceCrmPage'
|
|
import MarketplaceCustomerDetailPage from './pages/crm/MarketplaceCustomerDetailPage'
|
|
import PosPage from './pages/PosPage'
|
|
import UserLlmPromptsPage from './pages/UserLlmPromptsPage'
|
|
import CostProfitabilityMatrixPage from './pages/profitability/CostProfitabilityMatrixPage'
|
|
import OmnichannelMarginPage from './pages/profitability/OmnichannelMarginPage'
|
|
import MrpPlanningPage from './pages/profitability/MrpPlanningPage'
|
|
import { StoreSettingsProvider } from './contexts/StoreSettingsContext'
|
|
|
|
function App() {
|
|
return (
|
|
<StoreSettingsProvider>
|
|
<BrowserRouter>
|
|
<Routes>
|
|
{/* Public Routes */}
|
|
<Route path="/login" element={<LoginPage />} />
|
|
<Route path="/install-seed" element={<InstallSeedPage />} />
|
|
|
|
{/* Guarded Admin Routes */}
|
|
<Route element={<ProtectedRoute />}>
|
|
{/* Fullscreen POS Route (no admin sidebar) */}
|
|
<Route path="/pos" element={<PosPage />} />
|
|
|
|
<Route element={<AdminLayout />}>
|
|
<Route path="/" element={<DashboardPage />} />
|
|
|
|
<Route path="/products" element={<ProductsPage />} />
|
|
<Route path="/product-attributes" element={<ProductAttributesPage />} />
|
|
<Route path="/product-attributes/new" element={<ProductAttributeEditPage />} />
|
|
<Route path="/product-attributes/:id" element={<ProductAttributeEditPage />} />
|
|
<Route path="/product-attributes/:id/edit" element={<ProductAttributeEditPage />} />
|
|
<Route path="/products/new" element={<ProductEditPage />} />
|
|
<Route path="/products/:id/edit" element={<ProductEditPage />} />
|
|
<Route path="/products/:id/cms" element={<ProductCmsPage />} />
|
|
<Route path="/products/:id/bom" element={<ProductBomPage />} />
|
|
<Route path="/categories" element={<CategoriesPage />} />
|
|
<Route path="/brands" element={<BrandsPage />} />
|
|
<Route path="/categories/new" element={<CategoryEditPage />} />
|
|
<Route path="/categories/:id" element={<CategoryEditPage />} />
|
|
<Route path="/categories/:id/edit" element={<CategoryEditPage />} />
|
|
<Route path="/categories/:id/cms" element={<CategoryCmsPage />} />
|
|
<Route path="/customers" element={<CustomersPage />} />
|
|
<Route path="/page-builder" element={<PageBuilderPage />} />
|
|
<Route path="/page-builder/:id/reorder" element={<PageReorderPage />} />
|
|
<Route path="/pages/:id/reorder" element={<PageReorderPage />} />
|
|
<Route path="/cms-mockup" element={<CmsMockupPage />} />
|
|
<Route path="/orders" element={<OrdersPage />} />
|
|
<Route path="/orders/:id" element={<OrderDetailPage />} />
|
|
<Route path="/media" element={<MediaLibraryPage />} />
|
|
<Route path="/promotions" element={<PromotionsPage />} />
|
|
<Route path="/coupons" element={<CouponsPage />} />
|
|
<Route path="/raw-materials" element={<RawMaterialsPage />} />
|
|
<Route path="/raw-materials/new" element={<RawMaterialDetailPage />} />
|
|
<Route path="/raw-materials/:id" element={<RawMaterialDetailPage />} />
|
|
<Route path="/profitability" element={<CostProfitabilityMatrixPage />} />
|
|
<Route path="/omnichannel-margin" element={<OmnichannelMarginPage />} />
|
|
<Route path="/mrp-planning" element={<MrpPlanningPage />} />
|
|
<Route path="/settings" element={<StoreSettingsPage />} />
|
|
<Route path="/settings/brand-intelligence" element={<BrandIntelligencePage />} />
|
|
<Route path="/brand-intelligence" element={<BrandIntelligencePage />} />
|
|
<Route path="/settings/payments" element={<PaymentSettingsPage />} />
|
|
<Route path="/settings/theme" element={<ThemeSettingsPage />} />
|
|
<Route path="/settings/content" element={<ContentSettingsPage />} />
|
|
<Route path="/settings/system" element={<SystemMaintenancePage />} />
|
|
<Route path="/menu-manager" element={<Navigate to="/menu-manager/main-navigation" replace />} />
|
|
<Route path="/menu-manager/main-navigation" element={<MainNavigationPage />} />
|
|
<Route path="/menu-manager/footer-explore" element={<FooterExplorePage />} />
|
|
<Route path="/menu-manager/footer-support" element={<FooterSupportPage />} />
|
|
<Route path="/menu-manager/footer-brand" element={<FooterBrandPage />} />
|
|
<Route path="/menu-manager/footer-layout" element={<FooterLayoutPage />} />
|
|
<Route path="/subscribers" element={<NewsletterSubscribersPage />} />
|
|
<Route path="/articles" element={<ArticlesPage />} />
|
|
<Route path="/articles/:id" element={<ArticleEditPage />} />
|
|
<Route path="/contacts" element={<ContactMessagesPage />} />
|
|
<Route path="/tiktok" element={<TiktokPage />} />
|
|
<Route path="/tiktok-analysis" element={<TiktokAnalysisPage />} />
|
|
<Route path="/tiktok-price-simulator" element={<TiktokPriceSimulatorPage />} />
|
|
<Route path="/tiktok-shop-case" element={<TiktokShopCasePage />} />
|
|
<Route path="/shopee-shop-case" element={<ShopeeShopCasePage />} />
|
|
<Route path="/shopee" element={<ShopeePage />} />
|
|
<Route path="/shopee/:orderId" element={<ShopeeOrderDetailPage />} />
|
|
<Route path="/shopee-sales-map" element={<ShopeeSalesMapPage />} />
|
|
<Route path="/shopee-analytics" element={<ShopeeAnalyticsPage />} />
|
|
<Route path="/shopee-overview" element={<ShopeeOverviewPage />} />
|
|
<Route path="/tiktok-order" element={<TiktokOrderPage />} />
|
|
<Route path="/tiktok-order/:orderId" element={<TiktokOrderDetailPage />} />
|
|
<Route path="/tiktok-sales-map" element={<TiktokSalesMapPage />} />
|
|
<Route path="/tiktok-analytics" element={<TiktokAnalyticsPage />} />
|
|
<Route path="/tiktok-overview" element={<TiktokOverviewPage />} />
|
|
<Route path="/lazada-order" element={<LazadaOrderPage />} />
|
|
<Route path="/lazada-analytics" element={<LazadaAnalyticsPage />} />
|
|
<Route path="/lazada-overview" element={<LazadaOverviewPage />} />
|
|
<Route path="/global-analytics" element={<GlobalAnalyticsPage />} />
|
|
{/* Business Analytics */}
|
|
<Route path="/business-analytics/sales-map" element={<OmnichannelSalesMapPage />} />
|
|
<Route path="/business-analytics/sales-map-products" element={<ProductSalesMapPage />} />
|
|
<Route path="/business-analytics/malaysia-map" element={<MalaysiaSalesMapPage />} />
|
|
<Route path="/business-analytics/vietnam-map" element={<VietnamSalesMapPage />} />
|
|
<Route path="/business-analytics/repeat-customers" element={<RepeatCustomersPage />} />
|
|
<Route path="/business-analytics/repeat-customers-calendar" element={<RepeatCustomersCalendarPage />} />
|
|
<Route path="/business-analytics/repeat-customers-timeline" element={<RepeatCustomersTimelinePage />} />
|
|
<Route path="/business-analytics/repeat-customers-action-plan" element={<RepeatCustomersActionPlanPage />} />
|
|
<Route path="/business-analytics/repeat-customer-detail" element={<RepeatCustomerDetailPage />} />
|
|
{/* Marketplace CRM */}
|
|
<Route path="/crm/marketplace-customers" element={<MarketplaceCrmPage />} />
|
|
<Route path="/crm/marketplace-customers/:id" element={<MarketplaceCustomerDetailPage />} />
|
|
{/* Tools */}
|
|
<Route path="/tools" element={<Navigate to="/tools/marketplace-products" replace />} />
|
|
<Route path="/tools/marketplace-products" element={<MarketplaceProductsPage />} />
|
|
{/* Backup & Restore */}
|
|
<Route path="/backup" element={<BackupDashboardPage />} />
|
|
<Route path="/backup/database" element={<BackupDatabasePage />} />
|
|
<Route path="/backup/catalog" element={<BackupCatalogPage />} />
|
|
<Route path="/backup/orders" element={<BackupOrdersPage />} />
|
|
<Route path="/backup/cms" element={<BackupCmsPage />} />
|
|
<Route path="/backup/media" element={<BackupMediaPage />} />
|
|
{/* User & LLM Prompts */}
|
|
<Route path="/user" element={<Navigate to="/user/llm-prompts" replace />} />
|
|
<Route path="/user/llm-prompts" element={<UserLlmPromptsPage />} />
|
|
</Route>
|
|
</Route>
|
|
|
|
{/* Catch-all fallback */}
|
|
<Route path="*" element={<Navigate to="/" replace />} />
|
|
</Routes>
|
|
</BrowserRouter>
|
|
</StoreSettingsProvider>
|
|
)
|
|
}
|
|
|
|
export default App
|