19c70d23be
Record the internal-document entry module issue where /home was missing from role_route, causing the entry to be filtered out. Add troubleshooting order and cross-reference between entry modules, sys_routes, and role_route.
5.6 KiB
5.6 KiB
首页入口接口落地说明
1. 已落地内容
- 后端新增统一接口:
GET /api/home/entry-modules - 后端来源统一收口到:
leaudit_entry_modulesleaudit_document_typessys_routes + role_route(仅做页面可见性补充校验)
- 前端首页改为只调用后端统一接口,不再直接查 PostgREST 的
entry_modules + document_types - 前端首页不再手工注入“智慧法务助手”模块
2. 当前接口返回语义
返回结构:
{
"code": 200,
"message": "ok",
"data": [
{
"id": 1,
"name": "合同智能审查",
"description": "合同类文档入口,进入合同检索与评查主页",
"targetPath": "/contract-template/search",
"routePath": "/contract-template/search",
"iconPath": "entryModule/contract.png",
"sortOrder": 10,
"requiresDocumentTypes": true,
"areas": [],
"documentTypes": [
{
"id": 1,
"name": "建设工程合同",
"code": "contract.construction.general"
}
]
}
]
}
字段说明:
targetPath- 首页点击后真正跳转的前端路由
routePath- 当前阶段与
targetPath同值 - 预留给后续把“展示路径”和“权限判断路径”拆开
- 当前阶段与
iconPath- 模块图标路径
- 若以
/images/开头,前端按静态资源处理 - 否则前端按
DOCUMENT_URL + iconPath处理
requiresDocumentTypestrue:模块必须挂文档类型才能进入false:允许零文档类型直接进入- 当前兼容规则:
/chat-with-llm/chat→false/cross-checking→false- 其他路径 →
true
3. 当前过滤逻辑
后端按以下顺序过滤首页入口:
leaudit_entry_modules.is_enabled = trueleaudit_entry_modules.deleted_at is null- 地区过滤
super_admin / provincial_admin跳过地区过滤- 其他用户按
sso_users.area匹配leaudit_entry_modules.areas - 若
areas为空,则视为全地区可见
- 页面权限过滤
- 若
sys_routes里存在与path相同的页面路由,则要求当前用户角色在role_route中已授权 - 若
sys_routes尚未配置该路由,则当前阶段放行,不阻塞首页展示
- 若
3.1 /home 路由补充说明(2026-04-29)
这次联调里出现过一个容易忘的问题:
leaudit_entry_modules里的内部公文入口配置本身是存在的- 它当前配置的跳转路径是
path = /home - 但如果当前角色在
role_route里没有/home的启用记录,首页接口会把这个入口过滤掉
实际排查结论:
- 不是“内部公文入口模块丢了”
- 也不是“地区过滤没命中”
- 而是“入口模块目标路径存在,但角色没有对应页面路由授权”
本次已补充:
- 给
provincial_admin角色补上/home的role_route
因此后续如果再次出现“首页某个入口配置明明在库里,但前端没显示”,优先按下面顺序排查:
leaudit_entry_modules里该入口是否存在且is_enabled = true- 该入口
areas是否覆盖当前用户地区 - 该入口
path对应的页面路由是否存在于sys_routes - 当前角色是否在
role_route中对该path有status = 1
特别注意:
内部公文 -> /home这类首页型入口,对role_route很敏感- 只配入口模块、不配页面路由授权,首页接口不会放出来
4. 当前表语义
leaudit_entry_modules
当前阶段它只负责“首页业务入口配置”,核心字段语义如下:
name:首页模块名称description:首页模块描述path:当前阶段同时承担targetPath / routePathicon_path:首页卡片图标areas:地区可见范围sort_order:首页排序is_enabled:是否启用
leaudit_document_types
entry_module_id:文档类型归属的首页入口模块- 首页进入某模块后,前端把该模块下的
documentTypes[].id写入sessionStorage.documentTypeIds - 后续列表、首页统计、规则页面仍复用现有
documentTypeIds逻辑
5. 前端改造点
已改造:
new_doc_review/app/api/home/home.ts- 改为请求
/home/entry-modules
- 改为请求
new_doc_review/app/routes/_index.tsx- 直接使用后端返回的
targetPath - 直接使用后端返回的
iconPath - 按
requiresDocumentTypes判断是否允许进入
- 直接使用后端返回的
未改造但仍兼容:
- 系统设置入口仍沿用现有
getUserRoutesByRole()逻辑 - 交叉评查专属端口模式仍保留
6. 初始化数据
已补脚本:
scripts/seed_home_entry_modules.sql
脚本内容:
- 按老系统真实数据初始化 5 个入口模块:
合同管理案卷智能评查内部公文智慧法务助手交叉评查
- 其中:
path存前端跳转路由icon_path存老系统入口图片路径
- 自动把:
contract.%绑定到合同管理行政卷宗.%绑定到案卷智能评查NBGW / internal.document绑定到内部公文
7. 当前兼容性取舍
这次落地刻意没有直接改库结构新增:
module_keymodule_typeallow_empty_typestarget_pathroute_path
而是先用现有字段完成可运行版本:
path兼容成targetPath + routePath- 特殊模块是否允许空文档类型,先按路径规则判断
同时和老系统保持语义对齐:
icon_path承接老库entry_modules.path的图片路径语义
这样做的目的:
- 先把首页入口能力真正跑起来
- 不阻塞当前前后端联调
- 后续若需要长期治理,再补结构性字段升级