3.3 KiB
3.3 KiB
Route Alias 约束文档
目标
app/utils/route-alias.shared.js 只解决一类问题:
“功能子页没有独立菜单入口,但它在权限上应明确复用某个父页面/父模块的能力”。
它不是通用兜底,也不应该替代真正的菜单建模。
什么时候应该加 alias
满足以下条件时,优先加 alias:
-
页面是父页面的派生操作页
- 例如:
/document-types/new、/rules/new、/documents/edit - 这类页面本质上是列表页的“新建 / 编辑 / 复制 / 查看详情”能力延伸
- 例如:
-
页面不需要在侧边栏单独展示
- 用户不需要从菜单直接点击进入
- 通常只会从父列表页按钮跳转进入
-
页面权限应该与父页面完全一致
- 例如“能看列表的人才能进编辑页”
- 不需要单独拆出新的菜单权限或模块权限
-
页面属于同一业务模块内部流转
- 例如:搜索结果页、详情页、起草页,统一归属合同模板模块
什么时候不应该加 alias,而应该直接补菜单路由
出现以下任一情况时,不要加 alias,要去补菜单路由 / 后端路由定义 / permissionMap:
-
页面本身应该在导航中独立出现
- 例如:
/cross-checking/upload - 用户需要从侧边栏或首页快捷入口直接访问
- 例如:
-
页面权限和父页面不一致
- 例如列表可看,但新建需要更高权限
- 这时必须单独建权限点,不能简单复用父页
-
页面是稳定的一级/二级业务页面
- 不是“新建 / 编辑 / 详情”这类派生页
- 而是一个真实存在、长期运营的功能节点
-
页面需要独立的按钮权限、接口权限或审计语义
- 如果未来要单独授权、单独统计、单独审计,就不该藏在 alias 里
判断原则
可以用一句话判断:
- 如果这是“父页的一个动作结果页”,加 alias
- 如果这是“系统里一个真正独立的功能页”,补菜单路由
当前已覆盖的典型场景
-
新建/编辑类
/entry-modules/new->/entry-modules/document-types/new->/document-types/config-lists/new->/config-lists/prompts/new->/prompts/rule-groups/new->/rule-groups/rules/new->/rules/documents/list->/documents/documents/edit->/documents
-
模块内子页
/contract-template/search/results->/contract-template/search/contract-template/detail/:id->/contract-template/list/contract-draft/:id->/contract-template/list/chat-with-llm/chat->/chat-with-llm/chat-with-llm/dataset-manager->/chat-with-llm
-
历史兼容页
/reviewsTest->/reviews/rulesTest/list->/rules/rulesTest/detail->/rules
新增 alias 时必须同步做的事
- 在
app/utils/route-alias.shared.js添加规则 - 写清
note - 为该规则添加
examples - 执行:
cd new_doc_review
npm run test:route-aliases
反例
以下情况不要用 alias 硬压过去:
- 访问
/some-page/create被拒,就直接映射到/some-page - 访问
/settings/xxx被拒,就全部映射到/settings
如果这个子页未来可能独立授权、独立显示、独立审计,那就应该补真实路由,而不是继续堆 alias。