Files
leaudit-platform-backend/docs/接口/首页入口接口落地说明.md
T
wren 19c70d23be docs: document /home route fix and entry-module troubleshooting guide
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.
2026-04-30 10:35:18 +08:00

5.6 KiB
Raw Blame History

首页入口接口落地说明

1. 已落地内容

  • 后端新增统一接口:GET /api/home/entry-modules
  • 后端来源统一收口到:
    • leaudit_entry_modules
    • leaudit_document_types
    • sys_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 处理
  • requiresDocumentTypes
    • true:模块必须挂文档类型才能进入
    • false:允许零文档类型直接进入
    • 当前兼容规则:
      • /chat-with-llm/chatfalse
      • /cross-checkingfalse
      • 其他路径 → true

3. 当前过滤逻辑

后端按以下顺序过滤首页入口:

  1. leaudit_entry_modules.is_enabled = true
  2. leaudit_entry_modules.deleted_at is null
  3. 地区过滤
    • super_admin / provincial_admin 跳过地区过滤
    • 其他用户按 sso_users.area 匹配 leaudit_entry_modules.areas
    • areas 为空,则视为全地区可见
  4. 页面权限过滤
    • sys_routes 里存在与 path 相同的页面路由,则要求当前用户角色在 role_route 中已授权
    • sys_routes 尚未配置该路由,则当前阶段放行,不阻塞首页展示

3.1 /home 路由补充说明(2026-04-29

这次联调里出现过一个容易忘的问题:

  • leaudit_entry_modules 里的 内部公文 入口配置本身是存在的
  • 它当前配置的跳转路径是 path = /home
  • 但如果当前角色在 role_route 里没有 /home 的启用记录,首页接口会把这个入口过滤掉

实际排查结论:

  • 不是“内部公文入口模块丢了”
  • 也不是“地区过滤没命中”
  • 而是“入口模块目标路径存在,但角色没有对应页面路由授权”

本次已补充:

  • provincial_admin 角色补上 /homerole_route

因此后续如果再次出现“首页某个入口配置明明在库里,但前端没显示”,优先按下面顺序排查:

  1. leaudit_entry_modules 里该入口是否存在且 is_enabled = true
  2. 该入口 areas 是否覆盖当前用户地区
  3. 该入口 path 对应的页面路由是否存在于 sys_routes
  4. 当前角色是否在 role_route 中对该 pathstatus = 1

特别注意:

  • 内部公文 -> /home 这类首页型入口,对 role_route 很敏感
  • 只配入口模块、不配页面路由授权,首页接口不会放出来

4. 当前表语义

leaudit_entry_modules

当前阶段它只负责“首页业务入口配置”,核心字段语义如下:

  • name:首页模块名称
  • description:首页模块描述
  • path:当前阶段同时承担 targetPath / routePath
  • icon_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_key
  • module_type
  • allow_empty_types
  • target_path
  • route_path

而是先用现有字段完成可运行版本:

  • path 兼容成 targetPath + routePath
  • 特殊模块是否允许空文档类型,先按路径规则判断

同时和老系统保持语义对齐:

  • icon_path 承接老库 entry_modules.path 的图片路径语义

这样做的目的:

  • 先把首页入口能力真正跑起来
  • 不阻塞当前前后端联调
  • 后续若需要长期治理,再补结构性字段升级