- 修复 sys-config 接口参数对齐(configKey/configValue) - 添加 dict 字典项管理 API - 修复 logs 接口参数格式(批量删除/清理日志) - 添加 request.ts postForm/putForm 方法支持 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.5 KiB
5.5 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
快速开始
# 安装所有依赖(前端 + 后端)
pnpm install
# 同时启动前后端开发服务器
pnpm dev
# 或分别启动
pnpm dev:frontend # 前端 http://localhost:3000
pnpm dev:backend # 后端 http://localhost:3001
技术栈
后端
- 框架: NestJS + TypeScript
- 数据库: MySQL 8.0 + Prisma ORM
- 认证: JWT + RBAC (基于角色的访问控制)
- 多租户: 数据隔离架构(每个租户独立 tenantId)
前端
- 框架: Vue 3 + TypeScript + Vite
- UI 组件: Ant Design Vue
- 状态管理: Pinia
- 样式: Tailwind CSS + SCSS
核心命令
开发
# 根目录
pnpm dev # 同时启动前后端
pnpm dev:frontend # 只启动前端
pnpm dev:backend # 只启动后端
# 前端目录
pnpm dev # 启动前端
# 后端目录
pnpm start:dev # 启动后端
pnpm prisma:studio # Prisma 数据库可视化
数据库迁移
cd backend
pnpm prisma:generate # 生成 Prisma Client
pnpm prisma:migrate # 开发环境迁移
pnpm prisma:migrate:deploy # 生产环境部署
构建
pnpm build # 构建前后端
pnpm build:frontend # 只构建前端
pnpm build:backend # 只构建后端
测试
cd backend
pnpm test # 运行单元测试
pnpm test:cov # 测试覆盖率
架构概览
目录结构
library-picturebook-activity/
├── backend/ # NestJS 后端
│ ├── prisma/ # Prisma schema 和 migrations
│ ├── src/
│ │ ├── auth/ # 认证模块 (JWT)
│ │ ├── users/ # 用户管理
│ │ ├── roles/ # 角色权限
│ │ ├── menus/ # 菜单管理
│ │ ├── tenants/ # 租户管理
│ │ ├── contests/ # 竞赛模块
│ │ │ ├── contests/ # 竞赛管理
│ │ │ ├── works/ # 作品管理
│ │ │ ├── teams/ # 团队管理
│ │ │ ├── registrations/ # 报名管理
│ │ │ └── reviews/ # 评审管理
│ │ ├── school/ # 学校模块
│ │ │ ├── schools/
│ │ │ ├── grades/
│ │ │ ├── classes/
│ │ │ ├── teachers/
│ │ │ └── students/
│ │ └── prisma/ # Prisma 服务
│ └── package.json
│
└── frontend/ # Vue 3 前端
├── src/
│ ├── api/ # API 接口
│ ├── views/ # 页面组件
│ ├── components/ # 公共组件
│ ├── stores/ # Pinia 状态
│ ├── router/ # 路由配置
│ └── composables/ # 组合式函数
└── package.json
模块结构(后端)
每个功能模块包含:
module.ts- 模块定义controller.ts- REST 控制器service.ts- 业务逻辑dto/- 数据传输对象
多租户架构
- 所有业务数据必须包含
tenantId字段 - 查询必须包含租户隔离条件
- 超级租户(
isSuper = 1)可访问所有数据
关键开发规范
后端规范
- 租户隔离(强制):所有数据库查询必须包含
tenantId
// ✅ 正确
const data = await prisma.model.findMany({ where: { tenantId } });
// ❌ 错误 - 缺少 tenantId
const data = await prisma.model.findMany({});
-
审计字段:所有表必须包含
tenantId- 租户 IDcreator/modifier- 创建/修改人createTime/modifyTime- 时间戳validState- 有效状态(1-有效,2-失效)
-
权限控制:使用
@RequirePermission('module:action')装饰器 -
DTO 验证:使用
class-validator装饰器
前端规范
-
路由包含租户编码:
/:tenantCode/xxx -
API 调用:放在
api/目录,按模块组织 -
状态管理:使用 Pinia,store 命名
xxxStore -
组件语法:使用
<script setup lang="ts">
环境变量
后端 (.env)
DATABASE_URL="mysql://user:password@localhost:3306/db_name"
JWT_SECRET="your-secret-key"
PORT=3001
前端 (.env.development)
VITE_API_BASE_URL=/api
初始化脚本(后端)
pnpm init:admin # 初始化管理员账户
pnpm init:menus # 初始化菜单
pnpm init:super-tenant # 初始化超级租户
pnpm init:tenant-admin # 初始化租户管理员
pnpm init:roles:all # 初始化所有角色权限
Cursor Rules
项目使用 .cursor/rules/ 目录定义开发规范:
project-overview.mdc- 项目概述backend-architecture.mdc- 后端架构规范frontend-architecture.mdc- 前端架构规范database-design.mdc- 数据库设计规范multi-tenant.mdc- 多租户数据隔离规范code-review-checklist.mdc- 代码审查清单
Git 提交规范
格式:类型: 描述
类型:
feat- 新功能fix- 修复 bugdocs- 文档更新style- 代码格式调整refactor- 代码重构test- 测试相关chore- 构建/工具相关