Skip to content

菜单配置

菜单配置

AdminLayout.tsx文件中配置菜单,包括空间层和分店层. 每个菜单项包括keylabel,以及children(子菜单)

tsx
        {
          key: 'apps/all',
          label: <Link to="/admin/apps/all">{tr('[intl]全部应用')}</Link>,
        },

TODO: 根据权限和订阅动态修改菜单

菜单和路由的对应

菜单项key是唯一的,不能重复,且必须和路由的path对应。

设置选中的菜单和Open的菜单项的逻辑处理,根据当前URL的path来和菜单中的key进行匹配。

path的规则是/admin/xxx(空间层)或/admin/locations/:id/xxx(分店层)

获取路径的代码:

ts
  // space: /admin/{key}, location: /admin/locations/:id/{key}
  const pathIndex = currentLocationId === 0 ? 2 : 4
  const currentPath = location.pathname
    .split('/')
    ?.slice(pathIndex, pathIndex + 2)
    ?.join('/')

currentPath的字段和routes/adminRoutes.tsx里面的path进行匹配:

tsx
  { path: 'apps/all', element: <AllAppsPage /> },
  { path: 'apps/installed', element: <InstalledApplications /> },

例如,如果当前路径是 /admin/apps/all, 那么currentPath就是{path: 'apps/all'}。会跳转AllAppsPage,同时根据apps/all搜索菜单配置,找到并高亮apps/all对应的菜单项。

  • 如果匹配成功的路由是子菜单,那么选中的菜单是子菜单,Open的菜单是父菜单
  • 如果匹配成功的路由是父菜单,那么选中的菜单是父菜单,Open的菜单是父菜单

如果没有匹配的path,则菜单不会有选中项。