# lowcodeplatform **Repository Path**: kingecg/lowcodeplatform ## Basic Information - **Project Name**: lowcodeplatform - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-01 - **Last Updated**: 2026-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 低代码平台(Low-Code Platform) 元数据驱动的企业级低代码平台,支持表单设计、数据管理、流程编排与业务模块扩展。 ## 设计原则 | 原则 | 说明 | | -------------- | --------------------------------------------------------------------- | | 元数据驱动 | 运行期解释元数据(表单定义/视图/流程/权限),不生成代码、不重启即生效 | | 单一定义源 | `FormDefinition` 同时驱动前端渲染与服务端校验(编译为 JSON Schema) | | 契约式集成 | BPMN 引擎、存储、消息均以 Provider/Adapter 接口注入,可替换 | | 扩展优先于修改 | 复杂业务通过「业务模块 + 扩展点(Hook)」接入,不改平台内核 | | 默认安全 | 所有接口默认拒绝;权限 = 功能权限点 ∩ 数据范围 ∩ 字段级可见性 | | 多租户隔离 | 所有元数据与业务数据带 `tenantId`,查询强制注入租户条件 | ## 技术栈 | 层 | 选型 | 说明 | | ---------- | --------------------------------------------- | ---------------------------- | | 后端运行时 | Node.js 22 LTS + TypeScript 5 | Fastify 4 HTTP 框架 | | 存储 | MongoDB 5+(副本集) | 文档模型天然适配动态 Schema | | 前端框架 | Angular 13 | 复用 `@dyf/*` 动态表单组件库 | | 流程引擎 | `@dct/bpmn-engine`(后端)+ `bpmn-js`(前端) | BPMN 2.0 标准 | | 校验 | Ajv(JSON Schema draft-07) | 与 `@dyf/core` 转换产物一致 | | 认证 | JWT RS256(Access + Refresh)+ OIDC | 无状态、可水平扩展 | | 容器化 | Docker + Docker Compose | 一条命令起本地开发环境 | ## 项目结构 ``` lowcode-platform/ ├── apps/ │ ├── api/ # 后端服务(Fastify 4 + Node 22) │ │ └── src/ │ │ ├── iam/ # 租户、组织、用户、角色、权限、团队 │ │ ├── auth/ # JWT 认证、登录限流、会话管理、OIDC │ │ ├── meta/ # 元数据服务(表单定义、版本、视图、菜单) │ │ ├── data/ # 数据引擎(动态 CRUD、查询 DSL、钩子链) │ │ ├── flow/ # 流程服务(BPMN 部署、实例、任务中心) │ │ ├── module/ # 模块注册中心(清单校验、装载、隔离) │ │ ├── files/ # 文件上传(预签名、病毒扫描钩子) │ │ ├── observability/# 审计日志、Prometheus 指标、SSE │ │ └── platform/ # 字典、定时任务、通知、变更历史 │ └── web/ # 前端外壳(Angular 13) │ └── projects/shell/ # 平台外壳:登录、菜单、路由、权限指令 ├── packages/ │ ├── contracts/ # 前后端同源共享契约(错误码、权限点、DTO) │ ├── validation/ # Schema 编译与表达式沙箱 │ ├── buzform/ # 动态表单领域包(字段级覆盖、渲染定义、模板库) │ ├── flow/ # 业务流领域包(定义校验、办理人、任务表单、轨迹) │ └── testkit/ # 测试夹具(租户/用户工厂、Mongo 集成助手) ├── deploy/ │ ├── Dockerfile # 多阶段构建镜像(app/worker 同镜像不同 ROLE) │ ├── docker-compose.yml # 本地开发环境(Mongo + MinIO) │ ├── grafana/ # Grafana 看板 │ └── prometheus/ # Prometheus 配置 + 告警规则 ├── doc/ │ ├── design/ # 架构与各域详细设计文档 │ ├── delivery/ # 交付文档(部署、运维、开发者指南等) │ ├── require/ # 需求规格说明书 │ └── plan/ # 里程碑与 Sprint 任务拆解 ├── examples/ │ └── sample-module/ # 业务模块示例 └── scripts/ # 工具脚本(校验、测试、密钥生成等) ``` ## 核心功能 ### 平台底座(IAM + 认证) - 多租户、多根组织树、团队、角色、RBAC + 数据范围(ABAC 轻量) - JWT RS256 认证 + Refresh Token 旋转与重用检测 - 登录限流与锁定(5 次失败锁定 15 分钟) - 字段级权限(hidden / readonly) - SSO / OIDC 集成、API Key 管理 ### 表单与数据 - 元数据服务:表单定义 CRUD + 版本管理 - 发布流水线:定义 → 索引 → 缓存刷新 ≤ 5s 全集群生效 - 数据引擎:动态 CRUD + 查询 DSL + 五层校验 + 表达式沙箱 - 导入导出(CSV / XLSX)、100 万行数据集性能达标 ### 模块与流程 - 模块注册中心:manifest 校验 + 签名验证 + 进程级隔离 - BPMN 流程引擎:部署、推进、任务中心(待办/已办/催办) - 流程管理:挂起/恢复/终止/强制跳转 - 通知中心:站内信 / 邮件 / Webhook 三通道 ### 企业强化 - 审计日志(写操作 + 敏感读全量审计) - 变更历史、病毒扫描钩子、敏感字段脱敏 - 国际化(zh-CN / en-US)、暗色主题 - Prometheus 指标 + Grafana 看板 + 告警规则 ## 快速开始 ### 前置条件 - Node.js 22 LTS(`nvm use 22`) - Docker & Docker Compose - npm(随 Node.js 附带) ### 1. 启动本地环境 ```bash # 启动 MongoDB(单节点副本集 rs0)+ MinIO docker compose -f deploy/docker-compose.yml up -d ``` ### 2. 安装依赖 & 构建 ```bash npm install npm run build ``` ### 3. 初始化 ```bash # 生成 JWT 密钥对 npm run gen:jwt-keys # 复制环境变量 cp deploy/.env.example .env # 初始化数据库索引 npm run bootstrap:indexes # 填充种子数据 npm run seed ``` ### 4. 启动开发服务器 ```bash # 启动后端 API(http://localhost:3000) npm run dev # 启动前端(需 Node 16/18,另开终端) cd apps/web && npm start ``` ## 常用命令 | 命令 | 说明 | | --------------------------- | -------------------------------------- | | `npm run build` | 构建所有 workspace | | `npm run dev` | 启动后端开发服务器(热重载) | | `npm run test` | 运行全量测试 | | `npm run test:unit` | 仅单元测试 | | `npm run test:integration` | 集成测试 | | `npm run test:e2e` | 端到端测试 | | `npm run test:perf` | 性能压测 | | `npm run test:security` | 安全测试 | | `npm run typecheck` | TypeScript 类型检查 | | `npm run lint` | ESLint 检查 | | `npm run format` | Prettier 格式化 | | `npm run verify` | 快速验证(lint + typecheck + unit) | | `npm run verify:full` | 完整验证(含集成测试) | | `npm run drill:reliability` | 可靠性演练 | | `npm run publish:packages` | 预演发布 `packages/*`(不写 registry) | | `npm run version:packages` | 统一提升包版本并同步依赖声明(预演) | ## 包发布 `packages/*` 是 `UNLICENSED` 内部包,只发往私有 registry。`npm run publish:packages` 默认是**预演**(构建 → 校验 → `npm publish --dry-run`),加 `--publish` 才真正发布: ```bash # 1. 预演:看依赖顺序、预检结论与 tarball 内容 npm run publish:packages # 2. 真正发布(按依赖序:contracts → validation / buzform → flow / testkit) npm run publish:packages -- --publish # 其他:指定 dist-tag、只发一个包(依赖仍会构建)、跳过构建 npm run publish:packages -- --publish --tag next npm run publish:packages -- --only @lcp/flow npm run publish:packages -- --no-build ``` registry 取 `--registry` > `LCP_PUBLISH_REGISTRY` > npm 配置(`npm config get registry`): ```bash export LCP_PUBLISH_REGISTRY=https://npm.internal.example.com/ # 或写进 .npmrc:@lcp:registry=... 与 //npm.internal.example.com/:_authToken=... ``` 脚本会守住几件事:内部依赖的版本声明必须能满足本次要发的版本(改了版本号漏改依赖 会直接报错)、被依赖者先发、`main`/`types` 指向的 `dist` 产物必须存在、registry 上 已有的版本自动跳过,以及**拒绝**把 `UNLICENSED` 包发到 `registry.npmjs.org` (确要公开请先改 license 并加 `--allow-public`)。 ### 改版本 内部依赖写的是**字面量版本**(`"@lcp/buzform": "0.1.0"`),所以「改版本」和「同步依赖声明」 必须一起做 —— 漏掉任何一处,只有发出去或 `npm ci` 时才会发现。`npm run version:packages` 把这件事当成一件事做:`packages/*` 共用一条版本线(取现值最高者再提升),根 `package.json` 一起改,仓库内所有工作区(含 apps/api)的 `@lcp/*` 声明同步跟着改,最后让 npm 自己更新 lockfile,并复读它确认包版本确实落地。默认 dry-run,`--write` 才改文件: ```bash npm run version:packages # 列出当前版本与用法 npm run version:packages -- patch # 预演:统一 +patch(minor / major 同理) npm run version:packages -- patch --write # 应用 npm run version:packages -- --set 0.2.0 --write # 指定版本(可带 -rc.1 后缀) npm run version:packages -- --sync --write # 只修依赖声明,不改版本号 ``` 改完直接接预演发布:`npm run publish:packages`。`--no-root` 跳过根 `package.json`, `--no-lockfile` 跳过 lockfile 更新。 ## 部署 ### Docker 镜像构建 ```bash docker build -f deploy/Dockerfile -t lcp-api:0.1.0 . ``` 同一镜像通过 `ROLE` 环境变量区分运行模式: ```bash # HTTP 服务 docker run -e ROLE=app -e MONGO_URI=... lcp-api:0.1.0 # 后台 Worker(outbox 投递 / 定时任务) docker run -e ROLE=worker -e MONGO_URI=... lcp-api:0.1.0 ``` ### 生产环境要求 - MongoDB 副本集(至少 3 节点) - 全链路 HTTPS - JWT RS256 密钥对(从 Secret 注入,不入库不入日志) - 推荐:Grafana + Prometheus 监控 ## 性能指标 | 指标 | 目标 | | ------------------- | ------------------------------ | | 列表查询 P95 | ≤ 500ms(100 万行 + 数据范围) | | 写入 P95 | ≤ 800ms(含校验) | | 元数据缓存命中率 | ≥ 95% | | 发布生效时间 | ≤ 5s 全集群 | | 表单首屏(50 字段) | ≤ 1.5s | | 200 并发读写错误率 | < 0.1% | ## 安全基线 - argon2id 密码哈希 - JWT RS256 签名 + Refresh Token 旋转 - 查询 DSL 白名单编译(禁 `$where` / `$expr`) - 表达式 AST 沙箱(无 eval,节点数/超时限制) - 模块签名验证 + 全局污染检测 - 预签名文件上传 + 类型/大小校验 - 敏感字段脱敏(密码/token/身份证/手机号) ## 文档 - [架构总览](doc/design/00-architecture-overview.md) — 分层、技术选型、核心数据流、ADR - [需求规格说明书](doc/require/requirements-spec.md) — 角色、用例、FR/NFR、追踪矩阵 - [设计文档索引](doc/design/README.md) — 各域详细设计(IAM、元数据、数据引擎、流程、模块等) - [交付文档](doc/delivery/) — 部署运维手册、API 参考、开发者指南 ## License UNLICENSED — 内部项目,未经授权不得使用或分发。