Appearance
菜单配置
菜单配置
在AdminLayout.tsx文件中配置菜单,包括空间层和分店层. 每个菜单项包括key和label,以及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,则菜单不会有选中项。