local.ts 8.88 KB
import type { RouteRecordStringComponent } from '@vben/types';

import { $t } from '@vben/locales';

const {
  version,
  // vite inject-metadata 插件注入的全局变量
} = __VBEN_ADMIN_METADATA__ || {};

/**
 * 该文件放非后台返回的路由 比如个人中心 等需要跳转显示的页面
 * 也可以直接在菜单管理配置
 */
const localRoutes: RouteRecordStringComponent[] = [
  {
    component: '/_core/profile/index',
    meta: {
      icon: 'mingcute:profile-line',
      title: $t('ui.widgets.profile'),
      hideInMenu: true,
      requireHomeRedirect: true,
    },
    name: 'Profile',
    path: '/profile',
  },
  {
    component: '/food-labeling/labeling/label-templates/editor/index',
    meta: {
      hideInMenu: true,
      title: 'foodLabeling.labeling.labelTemplates',
      activePath: '/label-templates',
      requireHomeRedirect: true,
    },
    name: 'FoodLabelingLabelTemplateEditor',
    path: '/label-templates/editor',
  },
];

/** 泰额业务页统一关闭路由 KeepAlive,避免多标签切换时 tabbar parentNode 报错 */
const foodLabelingRouteMeta = {
  keepAlive: false,
  noCache: true,
};

const managementRouteMeta = foodLabelingRouteMeta;
const labelingRouteMeta = foodLabelingRouteMeta;

/**
 * 泰额版本地菜单(对齐美国版平台端侧边栏,JWT 暂不支持 Yi 后台菜单接口)
 */
export const localMenuList: RouteRecordStringComponent[] = [
  {
    meta: {
      order: -1,
      title: 'page.dashboard.title',
    },
    name: 'Dashboard',
    path: '/',
    redirect: '/analytics',
    children: [
      {
        name: 'Analytics',
        path: '/analytics',
        component: '/food-labeling/dashboard/index',
        meta: {
          affixTab: true,
          title: 'foodLabeling.dashboard.title',
          ...foodLabelingRouteMeta,
        },
      },
      {
        name: 'Workspace',
        path: '/workspace',
        component: '/dashboard/workspace/index',
        meta: {
          hideInMenu: true,
          title: 'page.dashboard.workspace',
        },
      },
    ],
  },
  {
    meta: {
      icon: 'lucide:tags',
      order: 10,
      title: 'foodLabeling.labeling.root',
    },
    name: 'FoodLabelingLabeling',
    path: '/labeling',
    redirect: '/labels',
    children: [
      {
        name: 'FoodLabelingLabels',
        path: '/labels',
        component: '/food-labeling/labeling/labels/index',
        meta: {
          icon: 'lucide:tag',
          title: 'foodLabeling.labeling.labels',
          ...labelingRouteMeta,
        },
      },
      {
        name: 'FoodLabelingLabelCategories',
        path: '/label-categories',
        component: '/food-labeling/labeling/label-categories/index',
        meta: {
          icon: 'lucide:folder-tree',
          title: 'foodLabeling.labeling.labelCategories',
          ...labelingRouteMeta,
        },
      },
      {
        name: 'FoodLabelingLabelTypes',
        path: '/label-types',
        component: '/food-labeling/labeling/label-types/index',
        meta: {
          icon: 'lucide:layers',
          title: 'foodLabeling.labeling.labelTypes',
          ...labelingRouteMeta,
        },
      },
      {
        name: 'FoodLabelingLabelTemplates',
        path: '/label-templates',
        component: '/food-labeling/labeling/label-templates/index',
        meta: {
          icon: 'lucide:layout-template',
          title: 'foodLabeling.labeling.labelTemplates',
          ...labelingRouteMeta,
        },
      },
      {
        name: 'FoodLabelingMultipleOptions',
        path: '/multiple-options',
        component: '/food-labeling/labeling/multiple-options/index',
        meta: {
          icon: 'lucide:list-checks',
          title: 'foodLabeling.labeling.multipleOptionSets',
          ...labelingRouteMeta,
        },
      },
    ],
  },
  {
    meta: {
      icon: 'lucide:boxes',
      order: 15,
      title: 'foodLabeling.modules.section',
    },
    name: 'FoodLabelingModules',
    path: '/modules',
    redirect: '/training',
    children: [
      {
        name: 'FoodLabelingTraining',
        path: '/training',
        component: '/food-labeling/modules/training/index',
        meta: {
          icon: 'lucide:graduation-cap',
          title: 'foodLabeling.modules.menuTraining',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingAlerts',
        path: '/alerts',
        component: '/food-labeling/modules/alerts/index',
        meta: {
          icon: 'lucide:bell',
          title: 'foodLabeling.modules.menuAlerts',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingTasks',
        path: '/tasks',
        component: '/food-labeling/modules/tasks/index',
        meta: {
          icon: 'lucide:list-todo',
          title: 'foodLabeling.modules.menuTasks',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingSensors',
        path: '/sensors',
        component: '/food-labeling/modules/sensors/index',
        meta: {
          icon: 'lucide:activity',
          title: 'foodLabeling.modules.menuSensors',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingFoodWaste',
        path: '/food-waste',
        component: '/food-labeling/modules/food-waste/index',
        meta: {
          icon: 'lucide:apple',
          title: 'foodLabeling.modules.menuFoodWaste',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingELabelModule',
        path: '/e-label-module',
        component: '/food-labeling/modules/e-label/index',
        meta: {
          icon: 'lucide:file-digit',
          title: 'foodLabeling.modules.menuELabel',
          ...managementRouteMeta,
        },
      },
    ],
  },
  {
    meta: {
      icon: 'lucide:cloud-cog',
      order: 5,
      title: 'foodLabeling.platform.section',
    },
    name: 'FoodLabelingPlatform',
    path: '/platform',
    redirect: '/platform/tenants',
    children: [
      {
        name: 'FoodLabelingPlatformTenants',
        path: '/platform/tenants',
        component: '/food-labeling/platform/tenants/index',
        meta: {
          icon: 'lucide:building',
          title: 'foodLabeling.platform.tenants',
          ...managementRouteMeta,
        },
      },
    ],
  },
  {
    meta: {
      icon: 'lucide:building-2',
      order: 20,
      title: 'foodLabeling.management.section',
    },
    name: 'FoodLabelingManagement',
    path: '/management',
    redirect: '/account-management',
    children: [
      {
        name: 'FoodLabelingAccountManagement',
        path: '/account-management',
        component: '/food-labeling/management/account-management/index',
        meta: {
          icon: 'lucide:users',
          title: 'foodLabeling.management.accountManagement',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingMenuManagement',
        path: '/menu-management',
        component: '/food-labeling/management/menu-management/index',
        meta: {
          icon: 'lucide:utensils',
          title: 'foodLabeling.management.menuManagement',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingDevices',
        path: '/devices',
        component: '/food-labeling/modules/devices/index',
        meta: {
          icon: 'lucide:smartphone',
          title: 'foodLabeling.modules.menuDevices',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingReports',
        path: '/reports',
        component: '/food-labeling/management/reports/index',
        meta: {
          icon: 'lucide:file-bar-chart',
          title: 'foodLabeling.management.reports',
          /** 报表含 ECharts,标记已加载以减少过渡动画 */
          loaded: true,
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingInvoices',
        path: '/invoices',
        component: '/food-labeling/modules/invoices/index',
        meta: {
          icon: 'lucide:receipt',
          title: 'foodLabeling.modules.menuInvoices',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingQrCodes',
        path: '/qr-codes',
        component: '/food-labeling/modules/qr-codes/index',
        meta: {
          icon: 'lucide:qr-code',
          title: 'foodLabeling.modules.menuQrCodes',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingSupport',
        path: '/support',
        component: '/food-labeling/management/support/index',
        meta: {
          icon: 'lucide:life-buoy',
          title: 'foodLabeling.management.support',
          ...managementRouteMeta,
        },
      },
      {
        name: 'FoodLabelingApi',
        path: '/api-settings',
        component: '/food-labeling/modules/api/index',
        meta: {
          icon: 'lucide:code-2',
          title: 'foodLabeling.modules.menuApi',
          ...managementRouteMeta,
        },
      },
    ],
  },
  ...localRoutes,
];