Go to file
2026-05-17 13:14:13 +08:00
.husky feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
ci/jenkins-agent chore: 迁出 fnOS K8s 协作文档 2026-05-16 16:53:47 +08:00
k8s/prod feat: 接入飞牛 NAS K8s 标准发布链路 2026-05-16 16:15:30 +08:00
scripts feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
sql feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
src feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
test feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
.dockerignore ci: 优化 Jenkins 构建产物打包 2026-05-16 03:25:22 +08:00
.env.example feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
.eslintrc.js first commit 2026-05-08 11:21:51 +08:00
.gitignore ci: 拆分 Jenkins 与 Agent 职责 2026-05-15 19:45:33 +08:00
.prettierrc first commit 2026-05-08 11:21:51 +08:00
API.md feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
dockerfile fix(api): 修复生产镜像依赖安装脚本 2026-05-17 13:14:13 +08:00
Jenkinsfile fix: 修复 K8s 发布 registry 空参数 2026-05-16 16:19:38 +08:00
nest-cli.json first commit 2026-05-08 11:21:51 +08:00
package.json feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
pnpm-lock.yaml feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
README.md feat(api): 完善后台管理能力 2026-05-16 20:14:02 +08:00
tsconfig.build.json first commit 2026-05-08 11:21:51 +08:00
tsconfig.json first commit 2026-05-08 11:21:51 +08:00

KT Template Online API

kt-template-online-api 是 KT Template Online 的后端服务,负责组件模板、数据库字典和 MinIO 文件能力。前台列表和 Playground 保存都通过本服务完成数据读写。

技术栈

  • Node.js + TypeScript
  • NestJS 9
  • TypeORM + MySQL
  • MinIO
  • Swagger / Knife4j
  • pnpm

功能模块

模块 说明
component Admin 下受保护的组件/图表模板列表、详情、新增、编辑、逻辑删除,数据表为 admin_component
dict 基于新 admin_dict 表的字典查询,维护组件一级类型和二级类型关系
admin Vben Admin 真实接口,包含登录、用户、菜单、角色、部门、时区、上传和示例表格
minio Bucket 检查/创建、文件上传、列表、临时访问地址、下载和删除
common 响应注解、字典翻译、POST */save 请求体规范化等通用能力

目录结构

src
  common/       # 通用装饰器、拦截器、服务、Swagger 封装
  admin/        # Vben Admin 后台认证、组件、字典、菜单、角色、部门等接口
  minio/        # MinIO 文件模块
  types/        # 全局类型声明
  app.module.ts # 全局模块、数据库、MinIO、拦截器注册
  main.ts       # Swagger、Knife4j、端口启动入口

环境变量

项目按 NODE_ENV 读取 .env.${NODE_ENV},未指定时默认读取 .env.development。仓库只提交 .env.example,真实 .env.development.env.production 保留在本地。

DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=
DB_DATABASE=shy_template
DB_SYNC=true

MINIO_ENDPOINT=localhost
MINIO_PORT=9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_BUCKET=kt-template-online

ADMIN_TOKEN_SECRET=change-me
ADMIN_COOKIE_SECURE=false
SNOWFLAKE_WORKER_ID=1
SNOWFLAKE_DATACENTER_ID=1

DB_SYNC=true 会让 TypeORM 根据实体同步表结构。生产环境建议关闭同步,改用迁移脚本维护表结构。 内网 HTTP 访问时保持 ADMIN_COOKIE_SECURE=false;如果未来切到 HTTPS 域名,再改为 true

启动

pnpm install
pnpm start:dev

服务默认监听 48085

常用命令:

pnpm start          # 普通启动
pnpm start:prod     # 按 production 环境运行已构建的 dist/main
pnpm run build      # Nest 构建
pnpm run lint       # ESLint 检查
pnpm test           # 单元测试
pnpm test:e2e       # e2e 测试

接口文档

  • Swagger UIhttp://localhost:48085/api
  • OpenAPI JSONhttp://localhost:48085/api-json
  • 根路径 / 会重定向到 Swagger 文档
  • 接口细节见 API.md

除文件下载接口外,业务接口统一返回:

{
  "code": 200,
  "msg": "操作成功",
  "data": {}
}

核心规则

  • admin_component 表保存组件/图表模板,admin_dict 表是统一字典翻译数据源,Component.typeMsgComponent.componentTypeMsg 查询后自动映射;旧 /dict/* 接口路径保持兼容。
  • 业务主键统一由 Snowflake 生成数字 ID数据库使用 BIGINT,接口按字符串返回以避免前端长整型精度问题。
  • 如果基础后台菜单的 meta 被旧数据覆盖为空,执行 sql/fix-admin-menu-meta.sql 可以恢复初始化菜单的 title/icon/order 等元数据。
  • component 表迁移到 admin_component 时,执行 sql/migrate-component-to-admin-component.sql,脚本会把旧表重命名为备份表。
  • 如果旧版本曾写入 admin_user.id=0,先执行 sql/fix-admin-user-zero-id.sql 修复脏数据,再重启服务。
  • Admin 与 Component 业务接口统一走 JwtAuthGuard;登录、刷新 token、退出登录和部分示例状态测试接口通过 @Public() 放行。
  • kt-template-admin 登录会写入 access token 与刷新 token cookiekt-template-online-webkt-template-online-playground 可在回跳后通过刷新 token 重新持久化登录态。
  • kt-template-admin 开发环境通过 /api 代理到本服务 48085,已关闭 Vben Nitro Mock。
  • POST /component/save 新增组件,POST /component/update 编辑组件。
  • 全局 SaveBodyInterceptor 会删除 POST */save 请求体里的 id,避免新增接口误用前端主键。
  • 如个别 save 接口必须保留 id,在 Controller 方法上使用 @SkipSaveBodyNormalize()
  • MinIO 上传接口返回的 url 会被 Playground 写入组件 image 字段。

联调关系

  • kt-template-online-web 读取 /component/list/component/detail/dict/* 展示组件列表,并生成 Playground 跳转链接;组件接口返回 401 时跳转到 kt-template-admin 登录。
  • kt-template-online-playground 读取 /dict/* 初始化分类,保存时上传截图到 /minio/upload,再调用 /component/save/component/update;组件接口返回 401 时跳转到 kt-template-admin 登录并在回跳后刷新 token。
  • 前端项目通过 Vite 代理把 /api 转发到 http://localhost:48085/

轻量验证

文档或小范围后端改动优先跑轻量命令:

pnpm run lint
pnpm test

完整构建只在发布前或改动影响构建链路时执行:

pnpm run build