一个完整的企业级数据资产管理平台,涵盖元数据管理、数据标准管理、数据质量管理、数据服务管理和系统管理五大核心模块。产品镜像和容器名称均为 healthcloud-data-assets。
- 用户管理 — 用户 CRUD、状态启用/禁用、部门归属、多角色分配
- 角色管理 — 角色定义、菜单权限分配、数据权限控制
- 菜单管理 — 目录/菜单/按钮三级结构,支持图标和排序
- 部门管理 — 组织架构树形管理
- 操作日志 — 全量操作记录,支持按用户/模块/时间查询
- 数据源管理 — 多类型数据源接入(SQLite / MySQL / PostgreSQL),连接测试、密码 AES-256 加密
- 元数据采集 — 自动采集库/表/字段元数据,增量更新,变更对比
- 目录浏览 — 按数据源→库→表层级浏览,字段详情查看
- 血缘关系 — 表级血缘可视化(ReactFlow 图谱),手动添加/编辑关系
- 变更历史 — 采集前后的表/字段变更记录追踪
- 标准文件 — PDF 标准文件上传、预览、分类和元信息维护
- 标准数据元 — 数据元编号、名称、类型、长度、精度、版本和状态维护
- 标准代码 — 标准代码及代码值维护(如:性别、证件类型、地区)
- 标准映射 — 将数据元与物理表字段建立映射关系
- 规则引擎 — 6 种内置模板(非空/唯一/正则/范围/枚举/行数),支持自定义 SQL 规则
- 质检任务 — 绑定规则和数据源,支持 Cron 定时调度
- 质检结果 — 执行记录、通过率统计、失败样本详情、问题工单创建
- 质量看板 — ECharts 可视化图表(通过率趋势、问题分布、规则排行)
- 报告导出 — 一键导出 Excel 质检报告
- 服务发布 — 版本管理、上下线控制
- 应用授权 — AppKey 分发、QPS 限制、日调用量上限、到期时间
- 网关调用 —
POST /ds/:serviceCode+X-App-Key鉴权 - 监控日志 — 调用量统计、响应时间、成功率监控
┌─────────────────────────────────────────────────────────────┐
│ 前端 (React 18 + Vite) │
│ Ant Design 5 · ECharts · ReactFlow · TanStack Query │
│ Zustand · Axios · Tailwind CSS · Day.js │
└─────────────────────────┬───────────────────────────────────┘
│ HTTP /api/*
▼
┌─────────────────────────────────────────────────────────────┐
│ 后端 (Node.js + Express) │
│ JWT 鉴权 · RBAC 权限 · Zod 校验 · Pino 日志 │
│ ExcelJS 报告 · node-cron 调度 · AES-256 加密 │
└─────────────────────────┬───────────────────────────────────┘
│ Prisma ORM
▼
┌─────────────────────────────────────────────────────────────┐
│ 数据库 │
│ 当前: SQLite │ 可迁移: MySQL / PostgreSQL │
└─────────────────────────────────────────────────────────────┘
data-assets/
├── docs/ # 项目文档
│ ├── PRD.md # 产品需求文档
│ ├── TECH_ARCHITECTURE.md # 技术架构文档
│ └── DATABASE_DESIGN.md # 数据库设计文档
├── backend/ # 后端服务
│ ├── prisma/
│ │ ├── schema.prisma # 数据模型定义(47 个模型)
│ │ └── seed.ts # 初始数据(admin/菜单/角色/标准代码)
│ └── src/
│ ├── config/ # 环境变量、Prisma、日志配置
│ ├── middleware/ # 鉴权、操作日志、校验、错误处理
│ ├── modules/
│ │ ├── auth/ # 登录鉴权模块
│ │ ├── system/ # 系统管理(用户/角色/菜单/部门/日志)
│ │ ├── metadata/ # 元数据管理(数据源/目录/血缘/变更历史)
│ │ ├── standard/ # 数据标准管理(文件/数据元/代码/映射)
│ │ ├── quality/ # 数据质量管理(规则/任务/看板/报告/工单)
│ │ └── service/ # 数据服务管理(服务/授权/网关/监控)
│ ├── utils/ # JWT、密码、加密、数据源、响应封装
│ └── app.ts # Express 应用入口
├── frontend/ # 前端应用
│ └── src/
│ ├── api/ # 6 个模块的 API 封装
│ ├── components/ # 权限组件、路由守卫、通用组件
│ ├── layouts/ # 主布局(侧边栏+顶栏)
│ ├── pages/ # 22 个业务页面
│ │ ├── login/ # 登录页
│ │ ├── dashboard/ # 仪表盘
│ │ ├── system/ # 用户/角色/菜单/部门/日志
│ │ ├── metadata/ # 数据源/浏览/血缘/变更
│ │ ├── standard/ # 文件/数据元/代码/映射
│ │ ├── quality/ # 规则/任务/结果/看板/报告
│ │ └── service/ # 目录/发布/授权/监控
│ ├── router/ # 前端路由配置
│ ├── store/ # Zustand 状态管理
│ └── types/ # TypeScript 类型定义
└── README.md
| 环境 | 版本要求 |
|---|---|
| Node.js | >= 18.0.0 |
| pnpm | >= 8.0.0(推荐)或 npm >= 9.0.0 |
| 数据库 | SQLite(默认)/ MySQL 8.0+ / PostgreSQL 14+ |
本地开发与 Docker 部署使用不同的访问方式:
| 运行方式 | 前端页面 | 后端 API | 说明 |
|---|---|---|---|
| 本地开发 | http://localhost:5173 | http://localhost:3000/api | Vite 提供前端开发服务,并将 /api 请求代理到 Express |
| Docker 部署 | http://localhost:3000 | http://localhost:3000/api | 前端先构建为静态文件,再由 Express 在同一端口统一提供页面和 API |
因此,5173 只用于本地前端开发;使用 Docker 启动后,应通过 http://localhost:3000 访问系统。
git clone https://github.com/wikithink/data-assets.git
cd data-assetscd backend
# 安装依赖
pnpm install
# 配置环境变量
cp .env.example .env
# 如需修改 JWT 密钥等配置,编辑 .env 文件
# 生成 Prisma Client
npx prisma generate
# 创建数据库表结构(SQLite 自动创建 dev.db 文件)
npx prisma db push
# 写入初始数据(管理员账号、菜单、角色、标准代码)
npx tsx prisma/seed.ts
# 启动开发服务器
pnpm dev后端 API 运行在 http://localhost:3000/api
# 新开终端窗口
cd frontend
# 安装依赖
pnpm install
# 启动开发服务器
pnpm dev前端开发服务器运行在 http://localhost:5173,并通过 Vite 代理访问后端 API。
本地开发模式下,打开浏览器访问 http://localhost:5173
| 账号 | 密码 |
|---|---|
| admin | admin123 |
系统使用 Prisma ORM,切换数据库只需两步:
MySQL 示例:
# 1. 修改 backend/.env
DATABASE_URL="mysql://用户名:密码@localhost:3306/data_asset"
# 2. 修改 backend/prisma/schema.prisma 第 4 行
provider = "mysql"
# 3. 重新推送表结构
npx prisma db push
npx tsx prisma/seed.tsPostgreSQL 同理,只需将 provider 改为 "postgresql" 并修改 DATABASE_URL 格式。
| 角色 | 权限范围 |
|---|---|
| 超级管理员 | 全部模块、全部操作 |
| 系统管理员 | 系统管理 + 日志查看 |
| 数据管理员 | 元数据 + 标准 + 质量管理 |
| 数据开发 | 数据服务管理 + 数据集管理 |
| 普通用户 | 仅仪表盘查看 |
| 变量 | 说明 | 默认值 |
|---|---|---|
DATABASE_URL |
Prisma 数据库连接串 | file:./dev.db |
JWT_SECRET |
JWT 签名密钥 | 生产环境务必修改 |
JWT_EXPIRES_IN |
Token 过期时间 | 2h |
DATASOURCE_ENC_KEY |
数据源密码加密密钥(32字符) | 生产环境务必修改 |
CORS_ORIGIN |
跨域允许来源 | * |
LOG_LEVEL |
日志级别 | info |
项目已提供开箱即用的 Docker 配置。Docker 镜像会构建前端静态文件,并由后端 Express 在 3000 端口同时提供前端页面和 API;配置通过挂卷加载,SQLite 数据持久化保存。
cd data-assets/docker
# 1. 根据需要修改环境变量(JWT 密钥等)
vim .env.docker
# 2. 构建并启动
docker compose up -d
# 3. 查看日志
docker compose logs -f
# 4. 停止
docker compose down不使用 Docker Compose 时,可通过产品启动脚本运行同一镜像:
cd data-assets/docker
chmod +x startup.sh
./startup.shstartup.sh 内部使用 docker run,默认配置如下:
| 配置 | 默认值 | 覆盖方式 |
|---|---|---|
| 镜像 | healthcloud-data-assets:latest |
IMAGE_NAME=... ./startup.sh |
| 容器 | healthcloud-data-assets |
CONTAINER_NAME=... ./startup.sh |
| 宿主机端口 | 3000 |
HOST_PORT=... ./startup.sh |
| SQLite 数据 | docker/data/ |
自动挂载到 /app/data |
| 上传文件 | docker/uploads/ |
自动挂载到 /app/backend/uploads |
| 环境配置 | docker/.env.docker |
只读挂载到 /etc/app/.env |
Docker 模式不再启动 Vite 的 5173 端口。访问 http://localhost:3000,默认账号 admin / admin123。
Docker 部署说明:
| 项目 | 说明 |
|---|---|
| 端口 | 3000(同时服务 API 和前端页面) |
| 数据持久化 | SQLite 文件存储在 ./data/ 目录,容器删除不丢失 |
| 环境变量 | 修改 ./.env.docker 后 docker compose restart 即可生效 |
| 自动初始化 | 首次启动自动建表 + 写入种子数据 |
# 前端构建
cd frontend
pnpm build # 产出 dist/ 目录
# 后端编译
cd backend
pnpm build # 产出 dist/ 目录
pnpm start # 运行编译后的代码