跳转至

Web 前端架构总览

源码:trunk2018/web(20 个子工程,独立 git 仓库集合)。后端总览见 [[../java/backend-architecture]]。

OBPM 前端按**使用者角色**分为四类工程,技术栈**三代并存**(历史演进未做统一迁移):

代际 技术栈 工程示例
一代(静态) 多页 HTML + jQuery,无构建,原样部署 obpm-signon-web、obpm-runtime-web(静态部分)、obpm-designer-web-camel
二代(webpack + npm 库) Webpack,产物发布为 **UMD npm 库**供宿主嵌入 obpm-designer-web-formbuilder2(表单设计器)、obpm-designer-bigscreen、obpm-report-olap
三代(Vite + Vue3 + TS) Vite 6、Vue 3、Element Plus、Pinia/Vuex、vue-i18n obpm-designer-vue3、obpm-runtime-web/portal/vue3、obpm-kms-pc 等

1. 工程地图(按角色)

flowchart TD
    subgraph LOGIN["登录(一代静态)"]
        SIGNON["obpm-signon-web<br/>登录/多域选择/扫码 jQuery"]
    end
    subgraph DESIGNER["设计器(宿主 + 嵌入库)"]
        VUE3["obpm-designer-vue3 ★宿主<br/>Vue3+Vite+ElementPlus"]
        FB2["obpm-designer-web-formbuilder2<br/>表单设计器(UMD 库)"]
        WF["obpm-designer-workflow<br/>流程编辑器(AntV G6 5)"]
        PRINT["obpm-designer-printer<br/>打印模板"]
        DM["obpm-designer-datamodelbuilder"]
        EXCEL["obpm-designer-excelimp<br/>Excel 导入配置"]
        BIG["obpm-designer-bigscreen(webpack)"]
        EDITOR["obpm-iscript-editor<br/>iScript Monaco 编辑器"]
        CAMEL["obpm-designer-web-camel<br/>旧设计器(jQuery,维护态)"]
    end
    subgraph RUNTIME["运行时(用户侧)"]
        PORTAL["obpm-runtime-web/portal/vue3 ★门户<br/>流程/表单渲染/视图/待办"]
        MOBILE["obpm-runtime-mobile-vue3<br/>移动端"]
        RTSTATIC["obpm-runtime-web 静态部分<br/>UEditor/viewer/login"]
    end
    subgraph BIZ["业务域前端"]
        KMS_PC["obpm-kms-pc"]
        KMS_MOB["obpm-kms-mobile"]
        MGR["obpm-manager-vue3<br/>管理中心"]
        MON["obpm-manager-monitor"]
        OLAP["obpm-report-olap(webpack 库)"]
        JOB["obpm-job-web"]
        CONV["obpm-converter-web<br/>预览转换静态页"]
    end

    SIGNON -->|登录成功| PORTAL
    VUE3 -->|"hostRequestBridge 嵌入"| FB2
    VUE3 -->|"embed 嵌入"| WF
    VUE3 -->|嵌入| PRINT & DM & EXCEL & BIG & EDITOR
    PORTAL -->|读设计产物| RTSTATIC

★ = 该角色的核心工程。obpm-designer-vue3 是设计器**宿主**(应用/模块/视图/菜单管理等页面自身实现),重编辑器以 npm 库/子应用嵌入(机制见 §3)。

2. 各工程速览

工程 代际 职责 备注
obpm-signon-web 一代 登录门户:账密/扫码(微信/钉钉)/多域选择 signon.config.js 全局路径配置;Api 对象 jQuery 封装;checkin→signin 两步登录
obpm-designer-vue3 三代 设计器宿主:软件/模块/表单列表/视图/菜单/角色/常用工具/高级工具 hash 路由 apps/:appId/...;Vuex(Pinia 仅示例);Axios PUT/DELETE 转 POST _method
obpm-designer-web-formbuilder2 二代 表单设计器画布(拖拽/属性面板/JsonTemplate) UMD 库 dist/formDesign.js,render() + 双桥契约
obpm-designer-workflow 三代(Vite) 流程图编辑器 AntV G6 5;src/editor/(propertyPanel/nodePanels/FlowEditor);经 embed.js 嵌入宿主
obpm-designer-printer 三代 打印模板设计器 宿主桥 ObpmPrintHostBridge
obpm-designer-excelimp 三代 Excel 导入配置(jsonTemplate 编辑) 桥 ObpmExcelHostBridge
obpm-designer-datamodelbuilder 二代 数据模型构建器(ESM/UMD 双产物)
obpm-designer-bigscreen 二代 大屏设计器 webpack;独立预览模式
obpm-iscript-editor 二代 iScript 编辑器 Monaco(editor.worker.bundle.js、baselib.api.ts iScript API 提示)
obpm-designer-web-camel 一代 **旧版**设计器(jQuery+Bootstrap) 维护态,勿新增功能
obpm-runtime-web 一代+三代 运行时静态资源集:portal/vue3(门户)、login/、UEditor/、viewer/(pdf/wps)、钉钉/飞书回调页
obpm-runtime-mobile-vue3 三代 移动端运行时 含天地图(TIANDITU)集成
obpm-kms-pc / obpm-kms-mobile 三代 KMS 知识管理 PC/移动 Vue 3.5 + CodeMirror
obpm-manager-vue3 三代 管理中心(域/用户/软件分配) 有 CLAUDE.md
obpm-manager-monitor 三代 监控面板 ECharts
obpm-report-olap 二代 OLAP 报表组件(lib/obpm-report.js) webpack 三配置;mondrian XMLA
obpm-job-web 三代 定时任务管理页
obpm-converter-web 一代 文件转换预览静态页(office/image/audio/3D glb/ifc) 按格式分目录

3. 宿主-嵌入桥接机制(设计器工程的核心模式)

重编辑器不整进宿主仓库,而是**独立构建为库 + 桥接契约**嵌入 obpm-designer-vue3:

flowchart TD
    HOST["宿主 obpm-designer-vue3<br/>src/service/*HostBridge.js"] -->|"render(el, options)<br/>options.hostRequestBridge / hostActionBridge"| LIB["嵌入库<br/>formbuilder2 / workflow / printer / excelimp …"]
    LIB -->|"hostRequestBridge.http(config)<br/>库内不发真实请求,全部转发宿主"| HOST
    LIB -->|"hostActionBridge.onXxx()<br/>通知宿主(保存/选资源等)"| HOST
    HOST -->|Axios| BE["后端 /api/designtime/*"]
桥 方向 职责
hostRequestBridge 库 → 宿主 库内所有 HTTP 经宿主 Axios 发出(统一鉴权/代理/上下文路径);宿主实现如 HostRequestBridgeImpl.js、HostWorkflowRequestBridge.js
hostActionBridge 库 → 宿主 动作回调(保存、打开资源选择器等),formbuilder2 挂在 FormApp 实例

价值:编辑器库零后端耦合(换宿主只换桥)、独立发版(npm pack)、可独立预览(FakeHostRequestBridge.js 假数据跑通)。

4. 前后端交互

端 后端入口 开发代理
设计器宿主 网关 /designer/* → designtime REST(/api/designtime/applications/{appId}/...) Vite 代理 /designer → localhost:8888
运行时门户 网关 /obpm/* → runtime REST;magic-static/{软件名}/ 静态托管 Vite 代理多前缀(/obpm、/static、/converter…)→ localhost:8888(Lite)
登录页 /signon/api/*(checkin/signin/getDomainList);signonPath/runtimePath 由 signon.config.js 配置 微服务/传统双模式路径解析
KMS 网关 /kms/* /static/kms/kmspc 代理

后端路由详见 [[../java/backend-architecture]] §3;workspace 设计产物(.form/.view…)机制见 [[../workspace-mechanism/overview]]。

5. 专题文档

文档 内容
[[designer-frontend]] 设计器宿主与嵌入库的工程细节(路由、桥契约、构建发布)
[[runtime-portal]] 运行时门户(表单渲染/视图/流程中心组件结构)