This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
羽毛球活动管理系统 - 基于若依(RuoYi)框架的前后端分离项目,用于管理羽毛球俱乐部的签到、活动记录、采购管理和账单结算。
claude-badminton/
├── backend/ # 后端 (Spring Boot + MyBatis + PostgreSQL)
│ ├── ruoyi-admin/ # 主应用模块 (端口: 8081)
│ ├── ruoyi-common/ # 通用工具模块
│ ├── ruoyi-framework/ # 框架核心模块
│ ├── ruoyi-system/ # 系统管理模块
│ ├── ruoyi-service/ # 业务服务模块 (羽毛球管理)
│ ├── ruoyi-generator/ # 代码生成模块
│ ├── ruoyi-quartz/ # 定时任务模块
│ ├── ruoyi-ui/ # 旧版前端 (Vue 2)
│ └── sql/ # 数据库脚本
└── frontend/ # 新版前端 (Vue 3 + Vite + Element Plus)
# 进入后端目录
cd backend
# Maven 构建
mvn clean package -DskipTests # 打包(跳过测试)
mvn clean install # 安装到本地仓库
# 运行(开发环境)
cd ruoyi-admin
mvn spring-boot:run
# 运行(生产环境)
java -jar ruoyi-admin/target/ruoyi-admin.jar --spring.profiles.active=prod
# Windows 快捷脚本
bin\run.bat # 启动服务
bin\clean.bat # 清理编译
bin\package.bat # 打包
# 进入前端目录
cd frontend
# 安装依赖
npm install
# 或使用国内镜像
npm install --registry=https://registry.npmmirror.com
# 开发环境 (端口: 80, 代理到 http://localhost:8081)
npm run dev
# 构建
npm run build:prod # 生产环境
npm run build:stage # 预发布环境
# 预览构建产物
npm run preview
# 使用 PostgreSQL,按顺序执行:
# 1. backend/sql/postgresql.sql - 基础表结构
# 2. backend/sql/postgresql_view.sql - 视图和代码生成支持
# 注意:quartz.sql 和 ry_20250522.sql 是 MySQL 语法,仅用于参考
ruoyi-admin (主应用)
├─> ruoyi-framework (框架核心: 安全、缓存、配置)
├─> ruoyi-system (系统管理: 用户、角色、菜单、字典)
├─> ruoyi-service (业务服务: 羽毛球管理模块)
├─> ruoyi-generator (代码生成器)
└─> ruoyi-quartz (定时任务)
ruoyi-framework
└─> ruoyi-common (通用工具: 注解、常量、异常、工具类)
ruoyi-system, ruoyi-service, ruoyi-generator, ruoyi-quartz
└─> ruoyi-common
羽毛球管理系统的业务逻辑位于 ruoyi-service 模块,包含:
badminton_signin): 用户每日签到,自动创建活动记录badminton_activity): 活动信息、参与人员、费用计算badminton_procurement): 羽毛球及耗材采购、批次管理badminton_shuttlecock_batch): 按批次核算成本,FIFO 消耗badminton_shuttlecock_usage): 活动消耗与批次关联badminton_bill): 月度账单生成、费用分摊、付款记录多批次羽毛球消耗:
账单生成:
application.yml: 主配置(端口 8081,context-path: /)application-dev.yml: 开发环境(数据库、Redis 连接)application-prod.yml: 生产环境postgresqlsrc/router/index.js): 登录、注册、404、401、首页GET /getRouters 获取,根据用户权限动态加载import.meta.glob('./../../views/**/*.vue') 映射后端路由字符串到 Vue 组件Layout (主外壳), ParentView (嵌套路由), InnerLink (iframe)Admin-Token)src/permission.js 全局路由守卫检查令牌/getInfo),生成动态路由Authorization: Bearer {token} 头部模块:实体:操作 (如 system:user:edit),*:*:* = 全部权限src/utils/request.js)VITE_APP_BASE_API (开发环境 /dev-api, 生产环境 /prod-api)download() 方法处理 blob 验证src/
├── api/ # API 接口定义(按后端模块组织)
│ ├── badminton/ # 羽毛球管理 API
│ │ ├── activity.js # 活动记录
│ │ ├── billing.js # 账单管理
│ │ ├── procurement.js # 采购管理
│ │ └── signin.js # 签到管理
│ ├── system/ # 系统管理 API
│ ├── monitor/ # 监控 API
│ └── tool/ # 工具 API
├── views/ # 页面组件
│ ├── badminton/ # 羽毛球管理页面
│ │ ├── signin/ # 签到页面
│ │ ├── activity/ # 活动记录页面
│ │ ├── procurement/ # 采购管理页面
│ │ ├── billing/ # 账单管理页面
│ │ └── statistics/ # 统计分析页面
│ ├── system/ # 系统管理页面
│ ├── monitor/ # 监控页面
│ └── tool/ # 工具页面
├── store/modules/ # Pinia 状态管理
│ ├── user.js # 用户状态
│ ├── permission.js # 权限路由
│ ├── app.js # 应用配置
│ ├── settings.js # 界面设置
│ ├── tagsView.js # 标签视图
│ └── dict.js # 字典缓存
├── layout/ # 布局组件
│ ├── components/ # 侧边栏、导航栏、标签视图
│ └── index.vue # 主布局
├── components/ # 全局组件
│ ├── Pagination/ # 分页组件
│ ├── DictTag/ # 字典标签
│ ├── Editor/ # 富文本编辑器
│ ├── FileUpload/ # 文件上传
│ └── RightToolbar/ # 右侧工具栏
├── plugins/ # 插件系统
│ ├── auth.js # 权限指令
│ ├── cache.js # 缓存操作
│ ├── modal.js # 弹窗封装
│ ├── tab.js # 标签页操作
│ └── download.js # 文件下载
├── directive/ # 自定义指令
│ └── permission/ # 权限指令 (v-permission)
├── utils/ # 工具函数
│ ├── request.js # Axios 封装
│ ├── auth.js # Token 操作
│ ├── ruoyi.js # 若依工具函数
│ ├── validate.js # 表单验证
│ └── dict.js # 字典工具
└── assets/ # 静态资源
├── icons/svg/ # SVG 图标 (vite-plugin-svg-icons)
└── styles/ # 全局样式
getCurrentInstance() 访问)useDict: 字典加载download: 文件下载parseTime: 时间格式化resetForm: 表单重置handleTree: 树形数据处理addDateRange: 日期范围查询getConfigKey: 获取系统配置selectDictLabel: 字典标签转换将 SVG 文件放在 src/assets/icons/svg/,自动注册,使用 <svg-icon icon-class="名称" />
com.ruoyi.{module}.{layer} (如 com.ruoyi.badminton.controller)BaseController,使用 AjaxResult 统一响应@Transactionalresources/mapper/@PreAuthorize("@ss.hasPermi('system:user:list')")@Log(title = "用户管理", businessType = BusinessType.INSERT)@DataScope 注解自动过滤数据listUser, getUser, addUser)useDict() 加载,<dict-tag> 显示size),默认 'default'@ → ./src, ~ → 项目根目录后端:
ruoyi-service 创建包: com.ruoyi.{module}domain (实体类,继承 BaseEntity)mapper (接口 + XML)service (接口 + 实现类)controller (继承 BaseController)resources/mapper/{module}/ 创建 Mapper XML前端:
src/api/ 创建 API 模块文件src/views/ 创建页面组件后端:
application.yml 中设置 logging.level.com.ruoyi: debughttp://localhost:8081/swagger-ui/index.htmlhttp://localhost:8081/druid/index.html前端:
/dev-api 到 http://localhost:8081vite.config.js 中的 baseUrl 变量backend/pom.xml: Maven 父 POM,依赖版本管理backend/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java: 启动类backend/ruoyi-admin/src/main/resources/application.yml: 主配置backend/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java: 统一响应backend/ruoyi-framework/src/main/java/com/ruoyi/framework/security/: Spring Security 配置frontend/vite.config.js: Vite 配置(代理、插件、构建)frontend/src/main.js: 应用入口frontend/src/permission.js: 路由守卫frontend/src/settings.js: 界面配置frontend/src/utils/request.js: Axios 封装frontend/src/store/modules/permission.js: 动态路由生成application.yml 的 ruoyi.profilefrontend/docs/技术实现文档.md (详细的业务逻辑和数据库设计)frontend/CLAUDE.md (前端详细架构)