Files
2026-05-06 09:42:29 +08:00

111 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Route Alias 约束文档
## 目标
`app/utils/route-alias.shared.js` 只解决一类问题:
“功能子页没有独立菜单入口,但它在权限上应明确复用某个父页面/父模块的能力”。
它不是通用兜底,也不应该替代真正的菜单建模。
---
## 什么时候应该加 alias
满足以下条件时,优先加 alias
1. 页面是父页面的派生操作页
- 例如:`/document-types/new``/rules/new``/documents/edit`
- 这类页面本质上是列表页的“新建 / 编辑 / 复制 / 查看详情”能力延伸
2. 页面不需要在侧边栏单独展示
- 用户不需要从菜单直接点击进入
- 通常只会从父列表页按钮跳转进入
3. 页面权限应该与父页面完全一致
- 例如“能看列表的人才能进编辑页”
- 不需要单独拆出新的菜单权限或模块权限
4. 页面属于同一业务模块内部流转
- 例如:搜索结果页、详情页、起草页,统一归属合同模板模块
---
## 什么时候不应该加 alias,而应该直接补菜单路由
出现以下任一情况时,不要加 alias,要去补菜单路由 / 后端路由定义 / permissionMap
1. 页面本身应该在导航中独立出现
- 例如:`/cross-checking/upload`
- 用户需要从侧边栏或首页快捷入口直接访问
2. 页面权限和父页面不一致
- 例如列表可看,但新建需要更高权限
- 这时必须单独建权限点,不能简单复用父页
3. 页面是稳定的一级/二级业务页面
- 不是“新建 / 编辑 / 详情”这类派生页
- 而是一个真实存在、长期运营的功能节点
4. 页面需要独立的按钮权限、接口权限或审计语义
- 如果未来要单独授权、单独统计、单独审计,就不该藏在 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 时必须同步做的事
1.`app/utils/route-alias.shared.js` 添加规则
2. 写清 `note`
3. 为该规则添加 `examples`
4. 执行:
```bash
cd new_doc_review
npm run test:route-aliases
```
---
## 反例
以下情况不要用 alias 硬压过去:
- 访问 `/some-page/create` 被拒,就直接映射到 `/some-page`
- 访问 `/settings/xxx` 被拒,就全部映射到 `/settings`
如果这个子页未来可能独立授权、独立显示、独立审计,那就应该补真实路由,而不是继续堆 alias。