From d15c0a23c43946813ced0a169f7b3cc1feac55cd Mon Sep 17 00:00:00 2001
From: lyq0314 <2169694180@qq.com>
Date: Wed, 10 Jun 2026 08:14:26 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 270 +++++--
app.html | 1 +
assets/css/style.css | 783 +++++++++++++++++++-
assets/js/app-main.js | 1591 ++++++++++++++++++++++++++++++++++-------
assets/js/app.js | 760 --------------------
assets/js/common.js | 29 +-
assets/js/config.js | 7 +
assets/js/login.js | 139 +++-
assets/js/register.js | 10 +-
login.html | 38 +-
register.html | 11 +-
11 files changed, 2468 insertions(+), 1171 deletions(-)
delete mode 100644 assets/js/app.js
create mode 100644 assets/js/config.js
diff --git a/README.md b/README.md
index 2c86140..e252409 100644
--- a/README.md
+++ b/README.md
@@ -1,53 +1,107 @@
-
# 运动会报名系统
## 项目简介
-这是一个基于 Spring Boot 和前端技术栈开发的运动会报名系统,用于管理学校运动会的项目报名工作。
+这是一个基于 Spring Boot + 原生 Web 前端技术栈开发的运动会报名管理系统,支持学生在线报名运动会项目、管理员统一管理用户与报名数据。
+
+---
## 技术栈
### 后端
-- Java 8+
-- Spring Boot 2.x
-- MyBatis
-- MySQL 数据库
+| 技术 | 版本 | 说明 |
+|------|------|------|
+| Java | 8+ | 开发语言 |
+| Spring Boot | 2.x | 核心框架 |
+| MyBatis | 3.x | ORM 框架 |
+| MySQL | 5.7+ | 关系型数据库 |
+| Maven | 3.6+ | 项目构建 |
### 前端
-- HTML5 / CSS3 / JavaScript
-- Bootstrap 样式框架
+| 技术 | 说明 |
+|------|------|
+| HTML5 | 页面结构 |
+| CSS3 | 样式设计(纯原生,无框架依赖) |
+| JavaScript (ES5) | 交互逻辑(纯原生,无框架依赖) |
+
+---
## 项目结构
```
运动会报名/
-├── backend/ # 后端代码
-│ ├── src/main/java/ # Java 源代码
-│ ├── src/main/resources/ # 配置文件
-│ └── pom.xml # Maven 配置
-├── frontend/ # 前端代码
-│ ├── assets/ # 静态资源
-│ │ ├── css/ # 样式文件
-│ │ └── js/ # JavaScript 文件
-│ ├── index.html # 首页
-│ ├── login.html # 登录页
-│ ├── register.html # 注册页
-│ └── app.html # 主应用页面
-└── README.md # 项目说明
+├── backend/ # 后端 Spring Boot 项目
+│ ├── src/main/java/ # Java 源代码
+│ │ └── com/sports/ # 主包
+│ │ ├── controller/ # 控制器层
+│ │ ├── service/ # 业务逻辑层
+│ │ ├── mapper/ # 数据访问层
+│ │ ├── entity/ # 实体类
+│ │ ├── vo/ # 视图对象
+│ │ ├── dto/ # 数据传输对象
+│ │ └── config/ # 配置类
+│ ├── src/main/resources/ # 配置文件
+│ │ ├── application.properties # 应用配置
+│ │ ├── schema.sql # 数据库表结构
+│ │ └── data.sql # 初始数据
+│ ├── API文档.md # 接口文档
+│ └── pom.xml # Maven 配置
+│
+└── frontend/ # 前端项目
+ ├── assets/
+ │ ├── css/
+ │ │ ├── style.css # 全局样式(830 行)
+ │ │ ├── login.css # 登录/注册页样式
+ │ │ └── app.css # 主应用页样式
+ │ └── js/
+ │ ├── common.js # 公共工具库(API 请求、消息提示等)
+ │ ├── login.js # 登录页逻辑
+ │ ├── register.js # 注册页逻辑
+ │ ├── app-main.js # 主应用页核心逻辑(714 行)
+ │ └── app.js # 备用页面逻辑
+ ├── login.html # 登录页面
+ ├── register.html # 注册页面
+ ├── app.html # 主应用页面(登录后跳转)
+ └── README.md # 项目说明(本文件)
```
-## 功能模块
+---
+
+## 页面说明
-### 用户功能
-- 用户注册与登录
-- 个人信息管理
-- 运动会项目浏览
-- 项目报名与取消
+### login.html — 登录页
+- 用户输入 **登录账号** + **密码** + **图形验证码**
+- 验证码为 Canvas 绘制的 4 位随机字符
+- 登录成功后将用户信息存入 `sessionStorage`,跳转至 `app.html`
+- 包含"去注册"按钮跳转至注册页
-### 管理员功能
-- 用户信息管理
-- 报名总览查看
-- 报名记录统计
+### register.html — 注册页
+- 填写完整的个人信息(身份证号、姓名、手机号、性别、学院、班级、学号、类别)
+- 注册成功后自动登录并跳转至 `app.html`
+- 包含"返回登录"按钮
+
+### app.html — 主应用页
+- **顶栏**:系统标题 + 当前用户名 + 退出登录按钮
+- **左侧导航**:根据角色(学生/管理员)显示对应菜单
+- **右侧内容区**:动态渲染对应功能模块
+
+#### 学生菜单
+| 菜单项 | 功能 |
+|--------|------|
+| 个人信息 | 查看并维护当前登录人员的基础资料 |
+| 运动会报名 | 浏览所有项目并完成报名,也可查看自己的报名信息 |
+
+#### 管理员菜单
+| 菜单项 | 功能 |
+|--------|------|
+| 运动会管理 | 查看后台首页和系统概览 |
+| 团体信息管理 | 维护参赛团体与组织信息 |
+| 用户信息管理 | 查看、维护用户资料并执行账号管理操作 |
+| 报名管理 | 查看全部报名记录并进行管理 |
+| 赛事管理 | 管理所有运动会赛事项目 |
+| 系统管理 | 系统配置、权限设置和运行维护 |
+
+---
## 快速开始
@@ -55,53 +109,161 @@
- JDK 8 或更高版本
- Maven 3.6+
- MySQL 5.7+
+- 任意现代浏览器(推荐 Chrome / Edge)
-### 数据库配置
-
-创建数据库并导入初始数据:
+### 1. 数据库配置
```sql
-CREATE DATABASE sports_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
+CREATE DATABASE IF NOT EXISTS sports_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE sports_db;
```
-导入 `backend/src/main/resources/schema.sql` 和 `backend/src/main/resources/data.sql`
+然后导入 `backend/src/main/resources/schema.sql` 和 `data.sql` 初始化表结构和数据。
-### 启动后端服务
+### 2. 修改后端配置
+
+编辑 `backend/src/main/resources/application.properties`:
+
+```properties
+spring.datasource.url=jdbc:mysql://localhost:3306/sports_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
+spring.datasource.username=你的数据库用户名
+spring.datasource.password=你的数据库密码
+server.port=8080
+```
+
+### 3. 启动后端
```bash
cd backend
mvn spring-boot:run
```
-### 启动前端服务
+后端默认运行在 `http://localhost:8080`。
-使用任意 HTTP 服务器启动前端,例如:
+### 4. 启动前端
+**方式一:Python HTTP 服务器**
```bash
cd frontend
-python -m http.server 8080
+python -m http.server 5500
```
+访问 `http://localhost:5500/login.html`
+
+**方式二:VS Code Live Server**
+- 安装 Live Server 插件
+- 右键 `login.html` → "Open with Live Server"
-### 访问地址
+**方式三:直接打开文件(file:// 协议)**
+- 直接双击 `login.html`
+- 前端会自动将 API 请求指向 `http://localhost:8080`
-- 前端页面: http://localhost:8080
-- 后端 API: http://localhost:8081
+> **注意**:前端 JS 会自动检测协议——如果通过 `file://` 打开,API 地址自动指向 `http://localhost:8080`;否则指向当前域名 + 端口 8080。
+
+---
## 默认账号
-| 账号 | 密码 | 角色 |
-|------|------|------|
+| 登录账号 | 密码 | 角色 |
+|----------|------|------|
| admin | admin | 管理员 |
-| student | student | 普通用户 |
+| student | student | 普通学生 |
+
+---
+
+## 系统架构
+
+```
+┌─────────────────────────────────────┐
+│ 前端 (Native Web) │
+│ login.html → app.html │
+│ common.js 提供 Ajax 工具库 │
+└──────────────┬──────────────────────┘
+ │ HTTP (JSON)
+ │ Session + Cookie 认证
+┌──────────────▼──────────────────────┐
+│ 后端 (Spring Boot) │
+│ Controller → Service → Mapper │
+│ /api/auth/* 无需认证 │
+│ /api/** 需登录 │
+│ /api/admin/** 需 ADMIN 角色 │
+└──────────────┬──────────────────────┘
+ │ JDBC
+┌──────────────▼──────────────────────┐
+│ MySQL 数据库 │
+└─────────────────────────────────────┘
+```
+
+### 认证流程
+
+1. 用户在登录页提交账号密码
+2. 后端验证通过后写入 Session(`session.currentUserId`)
+3. 前端收到用户信息后存入 `sessionStorage`,跳转至 `app.html`
+4. `app.html` 加载后调用 `/api/auth/me` 验证登录状态
+5. 验证通过则初始化用户数据、加载侧边栏和主页内容
+6. 后续 API 请求自动携带 Cookie(Session)
+
+### 前端核心逻辑 (app-main.js)
+
+- `loadCurrentUser()` → 调用 `/api/auth/me` 获取当前用户
+- `buildApp()` → 渲染侧边栏 + 初始化数据
+- `renderSidebar()` → 根据角色(学生/管理员)渲染导航菜单
+- `renderCurrentView()` → 根据当前选中菜单渲染内容区域
+- `loadEventData()` → 加载赛事数据
+- `loadAdminData()` → 加载管理员相关数据
+
+---
+
+## API 接口概览
+
+详细的接口文档请参考 `backend/API文档.md`。
+
+### 认证接口 `/api/auth`
+| 方法 | 路径 | 说明 |
+|------|------|------|
+| POST | /api/auth/login | 用户登录 |
+| POST | /api/auth/register | 用户注册 |
+| GET | /api/auth/me | 获取当前登录用户信息 |
+| POST | /api/auth/logout | 退出登录 |
+
+### 赛事接口 `/api/events`
+| 方法 | 路径 | 说明 |
+|------|------|------|
+| GET | /api/events | 获取所有赛事 |
+| GET | /api/events/my | 获取我的报名 |
+| POST | /api/events/{id}/register | 报名赛事 |
+| DELETE | /api/events/{id}/register | 取消报名 |
+
+### 管理员接口 `/api/admin`
+| 方法 | 路径 | 说明 |
+|------|------|------|
+| GET | /api/admin/users | 获取所有用户 |
+| GET | /api/admin/registrations | 获取所有报名记录 |
+| GET | /api/admin/events | 获取赛事管理数据 |
+| POST | /api/admin/users/{id}/reset-password | 重置用户密码 |
+| POST | /api/admin/users/{id}/disable | 禁用用户 |
+| POST | /api/admin/users/{id}/enable | 启用用户 |
+| DELETE | /api/admin/users/{id} | 删除用户 |
+
+---
+
+## 编码说明
+
+- 所有前端 HTML/CSS/JS 文件均使用 **UTF-8 编码**
+- 如遇中文乱码,请检查文件是否以 UTF-8 格式保存
+- 后端使用 UTF-8 编码,数据库使用 utf8mb4
+
+---
+
+## 常见问题
-## 开发说明
+### Q: 登录后页面卡在"加载中..."
+**A:** 请检查:
+1. 后端服务是否已启动(`http://localhost:8080`)
+2. 浏览器控制台是否有跨域或网络错误
+3. JS 文件编码是否为 UTF-8(不是 GBK)
-### 代码规范
-- Java 代码遵循 Spring 编码规范
-- JavaScript 代码使用 ES6+ 语法
-- 数据库表名使用下划线命名
+### Q: 注册时身份证号怎么填?
+**A:** 15 位或 18 位的有效身份证号,如 `110101200001010000`。
-### 注意事项
-- 开发环境下请确保 MySQL 服务已启动
-- 修改配置文件后需要重启服务才能生效
+### Q: 如何添加新的赛事项目?
+**A:** 使用管理员账号登录,在"赛事管理"模块中操作,或直接在数据库中插入数据。
\ No newline at end of file
diff --git a/app.html b/app.html
index a239687..c54263b 100644
--- a/app.html
+++ b/app.html
@@ -35,6 +35,7 @@
+