# 健身房管理系统基础设施重构实现计划
> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。
**目标:** 将通用后台管理系统重构为健身房管理系统,包括项目重命名、包名修改、测试迁移和移动端项目创建
**架构:** 采用分阶段渐进重构策略,共 5 个阶段:后端重构 → 前端重构 → 测试迁移 → UniApp 创建 → 根目录整理
**技术栈:** Java 21 + Spring Boot 3.5.13 + Maven (后端) | Vue 3 + TypeScript + Vite (前端) | UniApp + Vue 3 (移动端) | Playwright (E2E 测试)
---
## 文件结构
### 阶段 1:后端项目重构(gym-manage-api)
**重命名的目录:**
- `novalon-manage-api/` → `gym-manage-api/`
**修改的文件:**
- `gym-manage-api/pom.xml` - Maven 父 POM 配置
- `gym-manage-api/manage-app/pom.xml` - 主应用模块配置
- `gym-manage-api/manage-gateway/pom.xml` - 网关模块配置
- `gym-manage-api/manage-sys/pom.xml` - 系统模块配置
- `gym-manage-api/manage-db/pom.xml` - 数据库模块配置
- `gym-manage-api/manage-common/pom.xml` - 公共模块配置
- `gym-manage-api/manage-audit/pom.xml` - 审计模块配置
- `gym-manage-api/manage-notify/pom.xml` - 通知模块配置
- `gym-manage-api/manage-file/pom.xml` - 文件模块配置
- `gym-manage-api/manage-app/src/main/resources/application.yml` - 应用配置
- `gym-manage-api/manage-app/src/main/resources/application-dev.yml` - 开发环境配置
- `gym-manage-api/manage-app/src/main/resources/application-prod.yml` - 生产环境配置
- `gym-manage-api/manage-gateway/src/main/resources/application.yml` - 网关配置
- 所有 Java 文件 - 包名和 import 语句
**重命名的包目录:**
- `gym-manage-api/*/src/main/java/cn/novalon/manage/` → `gym-manage-api/*/src/main/java/cn/novalon/gym/manage/`
- `gym-manage-api/*/src/test/java/cn/novalon/manage/` → `gym-manage-api/*/src/test/java/cn/novalon/gym/manage/`
### 阶段 2:前端项目重构(gym-manage-web)
**重命名的目录:**
- `novalon-manage-web/` → `gym-manage-web/`
**修改的文件:**
- `gym-manage-web/package.json` - NPM 项目配置
- `gym-manage-web/index.html` - HTML 入口文件
- `gym-manage-web/vite.config.ts` - Vite 构建配置
### 阶段 3:测试文件迁移(e2e-tests)
**创建的目录:**
- `e2e-tests/` - 独立测试项目根目录
- `e2e-tests/e2e/` - 测试用例目录
- `e2e-tests/playwright/` - Playwright 配置目录
- `e2e-tests/scripts/` - 测试脚本目录
**迁移的文件:**
- `gym-manage-web/e2e/*` → `e2e-tests/e2e/`
- `gym-manage-web/playwright/*` → `e2e-tests/playwright/`
- `gym-manage-web/scripts/*` → `e2e-tests/scripts/`
- `gym-manage-web/playwright.config.ts` → `e2e-tests/playwright.config.ts`
- `gym-manage-web/playwright-complete.config.ts` → `e2e-tests/playwright-complete.config.ts`
- `gym-manage-web/playwright-simple.config.ts` → `e2e-tests/playwright-simple.config.ts`
**创建的文件:**
- `e2e-tests/package.json` - 测试项目依赖配置
**删除的文件:**
- `package.json` (根目录) - 测试依赖已迁移
**修改的文件:**
- `e2e-tests/playwright.config.ts` - 更新测试路径配置
### 阶段 4:创建 UniApp 项目(gym-manage-uniapp)
**创建的目录:**
- `gym-manage-uniapp/` - 移动端项目根目录
- `gym-manage-uniapp/src/` - 源代码目录
- `gym-manage-uniapp/src/pages/` - 页面目录
- `gym-manage-uniapp/src/pages/index/` - 首页目录
- `gym-manage-uniapp/src/pages/login/` - 登录页目录
- `gym-manage-uniapp/src/components/` - 组件目录
- `gym-manage-uniapp/src/api/` - API 接口目录
- `gym-manage-uniapp/src/store/` - 状态管理目录
- `gym-manage-uniapp/src/utils/` - 工具函数目录
- `gym-manage-uniapp/src/static/` - 静态资源目录
**创建的文件:**
- `gym-manage-uniapp/package.json` - NPM 项目配置
- `gym-manage-uniapp/tsconfig.json` - TypeScript 配置
- `gym-manage-uniapp/vite.config.ts` - Vite 构建配置
- `gym-manage-uniapp/src/manifest.json` - UniApp 应用配置
- `gym-manage-uniapp/src/pages.json` - UniApp 页面配置
- `gym-manage-uniapp/src/main.ts` - 应用入口
- `gym-manage-uniapp/src/App.vue` - 应用根组件
- `gym-manage-uniapp/src/pages/index/index.vue` - 首页组件
- `gym-manage-uniapp/src/pages/login/index.vue` - 登录页组件
- `gym-manage-uniapp/src/api/request.ts` - 请求封装
- `gym-manage-uniapp/src/store/index.ts` - Pinia 配置
- `gym-manage-uniapp/src/store/user.ts` - 用户状态管理
### 阶段 5:根目录整理与文档更新
**修改的文件:**
- `docker-compose.yml` - Docker 编排配置
- `Jenkinsfile` - CI/CD 配置
- `README.md` - 项目文档
---
## 阶段 1:后端项目重构(gym-manage-api)
### 任务 1.1:重命名后端项目目录
**文件:**
- 重命名:`novalon-manage-api/` → `gym-manage-api/`
- [ ] **步骤 1:使用 Git 重命名项目目录**
```bash
git mv novalon-manage-api gym-manage-api
```
- [ ] **步骤 2:验证重命名结果**
运行:`ls -la | grep gym-manage-api`
预期:显示 `gym-manage-api` 目录
---
### 任务 1.2:修改 Maven 父 POM 配置
**文件:**
- 修改:`gym-manage-api/pom.xml`
- [ ] **步骤 1:更新 Maven 父 POM 的 groupId**
修改 `gym-manage-api/pom.xml` 第 21 行:
```xml
cn.novalon.gym.manage
```
- [ ] **步骤 2:更新 Maven 父 POM 的 artifactId**
修改 `gym-manage-api/pom.xml` 第 22 行:
```xml
gym-manage-api
```
- [ ] **步骤 3:更新 Maven 父 POM 的 name**
修改 `gym-manage-api/pom.xml` 第 26 行:
```xml
Gym Manage API
```
- [ ] **步骤 4:更新 Maven 父 POM 的 description**
修改 `gym-manage-api/pom.xml` 第 27 行:
```xml
Gym Management System API
```
---
### 任务 1.3:修改 manage-app 模块 POM 配置
**文件:**
- 修改:`gym-manage-api/manage-app/pom.xml`
- [ ] **步骤 1:更新 parent 引用的 groupId**
修改 `gym-manage-api/manage-app/pom.xml`:
```xml
cn.novalon.gym.manage
gym-manage-api
1.0.0
```
- [ ] **步骤 2:更新模块的 groupId**
```xml
cn.novalon.gym.manage
```
- [ ] **步骤 3:更新模块的 artifactId**
```xml
manage-app
```
---
### 任务 1.4:修改 manage-gateway 模块 POM 配置
**文件:**
- 修改:`gym-manage-api/manage-gateway/pom.xml`
- [ ] **步骤 1:更新 parent 引用的 groupId**
修改 `gym-manage-api/manage-gateway/pom.xml`:
```xml
cn.novalon.gym.manage
gym-manage-api
1.0.0
```
- [ ] **步骤 2:更新模块的 groupId**
```xml
cn.novalon.gym.manage
```
---
### 任务 1.5:修改 manage-sys 模块 POM 配置
**文件:**
- 修改:`gym-manage-api/manage-sys/pom.xml`
- [ ] **步骤 1:更新 parent 引用的 groupId**
修改 `gym-manage-api/manage-sys/pom.xml`:
```xml
cn.novalon.gym.manage
gym-manage-api
1.0.0
```
- [ ] **步骤 2:更新模块的 groupId**
```xml
cn.novalon.gym.manage
```
---
### 任务 1.6:修改 manage-db 模块 POM 配置
**文件:**
- 修改:`gym-manage-api/manage-db/pom.xml`
- [ ] **步骤 1:更新 parent 引用的 groupId**
修改 `gym-manage-api/manage-db/pom.xml`:
```xml
cn.novalon.gym.manage
gym-manage-api
1.0.0
```
- [ ] **步骤 2:更新模块的 groupId**
```xml
cn.novalon.gym.manage
```
---
### 任务 1.7:修改 manage-common 模块 POM 配置
**文件:**
- 修改:`gym-manage-api/manage-common/pom.xml`
- [ ] **步骤 1:更新 parent 引用的 groupId**
修改 `gym-manage-api/manage-common/pom.xml`:
```xml
cn.novalon.gym.manage
gym-manage-api
1.0.0
```
- [ ] **步骤 2:更新模块的 groupId**
```xml
cn.novalon.gym.manage
```
---
### 任务 1.8:修改 manage-audit 模块 POM 配置
**文件:**
- 修改:`gym-manage-api/manage-audit/pom.xml`
- [ ] **步骤 1:更新 parent 引用的 groupId**
修改 `gym-manage-api/manage-audit/pom.xml`:
```xml
cn.novalon.gym.manage
gym-manage-api
1.0.0
```
- [ ] **步骤 2:更新模块的 groupId**
```xml
cn.novalon.gym.manage
```
---
### 任务 1.9:修改 manage-notify 模块 POM 配置
**文件:**
- 修改:`gym-manage-api/manage-notify/pom.xml`
- [ ] **步骤 1:更新 parent 引用的 groupId**
修改 `gym-manage-api/manage-notify/pom.xml`:
```xml
cn.novalon.gym.manage
gym-manage-api
1.0.0
```
- [ ] **步骤 2:更新模块的 groupId**
```xml
cn.novalon.gym.manage
```
---
### 任务 1.10:修改 manage-file 模块 POM 配置
**文件:**
- 修改:`gym-manage-api/manage-file/pom.xml`
- [ ] **步骤 1:更新 parent 引用的 groupId**
修改 `gym-manage-api/manage-file/pom.xml`:
```xml
cn.novalon.gym.manage
gym-manage-api
1.0.0
```
- [ ] **步骤 2:更新模块的 groupId**
```xml
cn.novalon.gym.manage
```
---
### 任务 1.11:重命名 Java 包目录结构
**文件:**
- 重命名:所有模块的 Java 包目录
- [ ] **步骤 1:重命名 manage-app 的主代码包目录**
```bash
cd gym-manage-api/manage-app/src/main/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 2:重命名 manage-app 的测试代码包目录**
```bash
cd gym-manage-api/manage-app/src/test/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 3:重命名 manage-gateway 的主代码包目录**
```bash
cd gym-manage-api/manage-gateway/src/main/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 4:重命名 manage-gateway 的测试代码包目录**
```bash
cd gym-manage-api/manage-gateway/src/test/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 5:重命名 manage-sys 的主代码包目录**
```bash
cd gym-manage-api/manage-sys/src/main/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 6:重命名 manage-sys 的测试代码包目录**
```bash
cd gym-manage-api/manage-sys/src/test/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 7:重命名 manage-db 的主代码包目录**
```bash
cd gym-manage-api/manage-db/src/main/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 8:重命名 manage-db 的测试代码包目录**
```bash
cd gym-manage-api/manage-db/src/test/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 9:重命名 manage-common 的主代码包目录**
```bash
cd gym-manage-api/manage-common/src/main/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 10:重命名 manage-common 的测试代码包目录**
```bash
cd gym-manage-api/manage-common/src/test/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 11:重命名 manage-audit 的主代码包目录**
```bash
cd gym-manage-api/manage-audit/src/main/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 12:重命名 manage-audit 的测试代码包目录**
```bash
cd gym-manage-api/manage-audit/src/test/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 13:重命名 manage-notify 的主代码包目录**
```bash
cd gym-manage-api/manage-notify/src/main/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 14:重命名 manage-notify 的测试代码包目录**
```bash
cd gym-manage-api/manage-notify/src/test/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 15:重命名 manage-file 的主代码包目录**
```bash
cd gym-manage-api/manage-file/src/main/java/cn/novalon
git mv manage gym/manage
```
- [ ] **步骤 16:重命名 manage-file 的测试代码包目录**
```bash
cd gym-manage-api/manage-file/src/test/java/cn/novalon
git mv manage gym/manage
```
---
### 任务 1.12:批量更新 Java 文件的 package 声明
**文件:**
- 修改:所有 Java 文件
- [ ] **步骤 1:使用 sed 批量替换 package 声明**
```bash
find gym-manage-api -type f -name "*.java" -exec sed -i '' 's/^package cn\.novalon\.manage/package cn.novalon.gym.manage/g' {} +
```
- [ ] **步骤 2:验证替换结果**
运行:`grep -r "^package cn.novalon.manage" gym-manage-api --include="*.java" | head -5`
预期:无输出(所有 package 声明已更新)
---
### 任务 1.13:批量更新 Java 文件的 import 语句
**文件:**
- 修改:所有 Java 文件
- [ ] **步骤 1:使用 sed 批量替换 import 语句**
```bash
find gym-manage-api -type f -name "*.java" -exec sed -i '' 's/import cn\.novalon\.manage/import cn.novalon.gym.manage/g' {} +
```
- [ ] **步骤 2:验证替换结果**
运行:`grep -r "import cn.novalon.manage" gym-manage-api --include="*.java" | head -5`
预期:无输出(所有 import 语句已更新)
---
### 任务 1.14:更新 Spring Boot 配置文件
**文件:**
- 修改:`gym-manage-api/manage-app/src/main/resources/application.yml`
- 修改:`gym-manage-api/manage-app/src/main/resources/application-dev.yml`
- 修改:`gym-manage-api/manage-app/src/main/resources/application-prod.yml`
- 修改:`gym-manage-api/manage-gateway/src/main/resources/application.yml`
- [ ] **步骤 1:更新 manage-app 的 application.yml**
修改 `gym-manage-api/manage-app/src/main/resources/application.yml`:
```yaml
spring:
application:
name: gym-manage-api
```
- [ ] **步骤 2:更新 manage-gateway 的 application.yml**
修改 `gym-manage-api/manage-gateway/src/main/resources/application.yml`:
```yaml
spring:
application:
name: gym-manage-gateway
```
---
### 任务 1.15:验证后端项目编译
**文件:**
- 无文件修改,仅验证
- [ ] **步骤 1:清理旧的编译产物**
```bash
cd gym-manage-api
mvn clean
```
预期:`BUILD SUCCESS`
- [ ] **步骤 2:编译项目**
```bash
mvn compile
```
预期:`BUILD SUCCESS`,无编译错误
- [ ] **步骤 3:运行单元测试**
```bash
mvn test
```
预期:`BUILD SUCCESS`,所有测试通过
---
### 任务 1.16:提交阶段 1 的变更
**文件:**
- 无文件修改,仅提交
- [ ] **步骤 1:查看变更状态**
```bash
git status
```
预期:显示所有修改的文件
- [ ] **步骤 2:提交变更**
```bash
git add .
git commit -m "refactor(backend): 重命名后端项目为 gym-manage-api,修改包名为 cn.novalon.gym.manage"
```
预期:提交成功
---
## 阶段 2:前端项目重构(gym-manage-web)
### 任务 2.1:重命名前端项目目录
**文件:**
- 重命名:`novalon-manage-web/` → `gym-manage-web/`
- [ ] **步骤 1:使用 Git 重命名项目目录**
```bash
git mv novalon-manage-web gym-manage-web
```
- [ ] **步骤 2:验证重命名结果**
运行:`ls -la | grep gym-manage-web`
预期:显示 `gym-manage-web` 目录
---
### 任务 2.2:修改 package.json 配置
**文件:**
- 修改:`gym-manage-web/package.json`
- [ ] **步骤 1:更新项目名称**
修改 `gym-manage-web/package.json` 第 2 行:
```json
"name": "gym-manage-web",
```
- [ ] **步骤 2:更新项目描述**
修改 `gym-manage-web/package.json` 第 4 行:
```json
"description": "Gym Management System Frontend",
```
---
### 任务 2.3:修改 index.html 页面标题
**文件:**
- 修改:`gym-manage-web/index.html`
- [ ] **步骤 1:更新页面标题**
修改 `gym-manage-web/index.html`:
```html
健身房管理系统
```
---
### 任务 2.4:验证前端项目构建
**文件:**
- 无文件修改,仅验证
- [ ] **步骤 1:安装依赖**
```bash
cd gym-manage-web
npm install
```
预期:依赖安装成功,无错误
- [ ] **步骤 2:构建项目**
```bash
npm run build
```
预期:构建成功,生成 `dist/` 目录
---
### 任务 2.5:提交阶段 2 的变更
**文件:**
- 无文件修改,仅提交
- [ ] **步骤 1:查看变更状态**
```bash
git status
```
预期:显示所有修改的文件
- [ ] **步骤 2:提交变更**
```bash
git add .
git commit -m "refactor(frontend): 重命名前端项目为 gym-manage-web"
```
预期:提交成功
---
## 阶段 3:测试文件迁移(e2e-tests)
### 任务 3.1:创建 e2e-tests 目录结构
**文件:**
- 创建:`e2e-tests/` 目录
- [ ] **步骤 1:创建测试项目根目录**
```bash
mkdir -p e2e-tests
```
- [ ] **步骤 2:验证目录创建**
运行:`ls -la | grep e2e-tests`
预期:显示 `e2e-tests` 目录
---
### 任务 3.2:迁移测试用例目录
**文件:**
- 迁移:`gym-manage-web/e2e/` → `e2e-tests/e2e/`
- [ ] **步骤 1:使用 Git 迁移测试用例目录**
```bash
git mv gym-manage-web/e2e e2e-tests/e2e
```
- [ ] **步骤 2:验证迁移结果**
运行:`ls -la e2e-tests/`
预期:显示 `e2e` 目录
---
### 任务 3.3:迁移 Playwright 配置目录
**文件:**
- 迁移:`gym-manage-web/playwright/` → `e2e-tests/playwright/`
- [ ] **步骤 1:使用 Git 迁移 Playwright 配置目录**
```bash
git mv gym-manage-web/playwright e2e-tests/playwright
```
- [ ] **步骤 2:验证迁移结果**
运行:`ls -la e2e-tests/`
预期:显示 `playwright` 目录
---
### 任务 3.4:迁移测试脚本目录
**文件:**
- 迁移:`gym-manage-web/scripts/` → `e2e-tests/scripts/`
- [ ] **步骤 1:使用 Git 迁移测试脚本目录**
```bash
git mv gym-manage-web/scripts e2e-tests/scripts
```
- [ ] **步骤 2:验证迁移结果**
运行:`ls -la e2e-tests/`
预期:显示 `scripts` 目录
---
### 任务 3.5:迁移 Playwright 配置文件
**文件:**
- 迁移:`gym-manage-web/playwright.config.ts` → `e2e-tests/playwright.config.ts`
- 迁移:`gym-manage-web/playwright-complete.config.ts` → `e2e-tests/playwright-complete.config.ts`
- 迁移:`gym-manage-web/playwright-simple.config.ts` → `e2e-tests/playwright-simple.config.ts`
- [ ] **步骤 1:迁移主配置文件**
```bash
git mv gym-manage-web/playwright.config.ts e2e-tests/
```
- [ ] **步骤 2:迁移完整配置文件**
```bash
git mv gym-manage-web/playwright-complete.config.ts e2e-tests/
```
- [ ] **步骤 3:迁移简化配置文件**
```bash
git mv gym-manage-web/playwright-simple.config.ts e2e-tests/
```
- [ ] **步骤 4:验证迁移结果**
运行:`ls -la e2e-tests/*.ts`
预期:显示三个配置文件
---
### 任务 3.6:创建 e2e-tests 的 package.json
**文件:**
- 创建:`e2e-tests/package.json`
- [ ] **步骤 1:创建 package.json 文件**
创建 `e2e-tests/package.json`:
```json
{
"name": "gym-manage-e2e-tests",
"version": "1.0.0",
"description": "Gym Management System E2E Tests",
"type": "module",
"scripts": {
"test:e2e": "playwright test",
"test:e2e:smoke": "playwright test --project=smoke",
"test:e2e:journeys": "playwright test --project=journeys",
"test:e2e:headed": "playwright test --headed",
"test:e2e:debug": "playwright test --debug",
"test:e2e:perf": "node scripts/measure-e2e-performance.js",
"test:perf": "node scripts/performance-test.js performance",
"test:load": "node scripts/performance-test.js load",
"test:perf:all": "node scripts/performance-test.js all"
},
"devDependencies": {
"@playwright/test": "^1.40.1",
"@types/node": "^20.10.0",
"typescript": "^5.9.3"
}
}
```
---
### 任务 3.7:删除根目录的 package.json
**文件:**
- 删除:`package.json`(根目录)
- [ ] **步骤 1:删除根目录的 package.json**
```bash
git rm package.json
```
- [ ] **步骤 2:验证删除结果**
运行:`ls -la | grep package.json`
预期:无输出(根目录无 package.json)
---
### 任务 3.8:更新 Playwright 配置文件路径
**文件:**
- 修改:`e2e-tests/playwright.config.ts`
- [ ] **步骤 1:检查当前配置**
运行:`head -20 e2e-tests/playwright.config.ts`
预期:查看当前配置内容
- [ ] **步骤 2:确认 baseURL 配置正确**
确保 `e2e-tests/playwright.config.ts` 中的 `baseURL` 指向前端服务:
```typescript
use: {
baseURL: 'http://localhost:3001',
}
```
---
### 任务 3.9:验证测试运行
**文件:**
- 无文件修改,仅验证
- [ ] **步骤 1:安装测试依赖**
```bash
cd e2e-tests
npm install
```
预期:依赖安装成功
- [ ] **步骤 2:运行冒烟测试**
```bash
npm run test:e2e:smoke
```
预期:测试运行正常(可能失败,因为需要前端服务运行)
---
### 任务 3.10:提交阶段 3 的变更
**文件:**
- 无文件修改,仅提交
- [ ] **步骤 1:查看变更状态**
```bash
git status
```
预期:显示所有修改的文件
- [ ] **步骤 2:提交变更**
```bash
git add .
git commit -m "refactor(test): 创建独立的 e2e-tests 目录,迁移测试文件"
```
预期:提交成功
---
## 阶段 4:创建 UniApp 项目(gym-manage-uniapp)
### 任务 4.1:创建 UniApp 项目目录结构
**文件:**
- 创建:`gym-manage-uniapp/` 及其子目录
- [ ] **步骤 1:创建项目根目录和主要子目录**
```bash
mkdir -p gym-manage-uniapp/src/{pages/{index,login},components,api,store,utils,static}
```
- [ ] **步骤 2:验证目录创建**
运行:`tree gym-manage-uniapp -L 3`
预期:显示完整的目录结构
---
### 任务 4.2:创建 package.json
**文件:**
- 创建:`gym-manage-uniapp/package.json`
- [ ] **步骤 1:创建 package.json 文件**
创建 `gym-manage-uniapp/package.json`:
```json
{
"name": "gym-manage-uniapp",
"version": "1.0.0",
"description": "Gym Management System Mobile App",
"type": "module",
"scripts": {
"dev:h5": "uni -p h5",
"build:h5": "uni build -p h5",
"dev:mp-weixin": "uni -p mp-weixin",
"build:mp-weixin": "uni build -p mp-weixin",
"dev:app": "uni -p app",
"build:app": "uni build -p app"
},
"dependencies": {
"@dcloudio/uni-app": "3.0.0-4010520240507001",
"@dcloudio/uni-app-plus": "3.0.0-4010520240507001",
"@dcloudio/uni-components": "3.0.0-4010520240507001",
"@dcloudio/uni-h5": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-weixin": "3.0.0-4010520240507001",
"pinia": "^3.0.4",
"vue": "^3.5.26"
},
"devDependencies": {
"@dcloudio/types": "^3.4.8",
"@dcloudio/uni-automator": "3.0.0-4010520240507001",
"@dcloudio/uni-cli-shared": "3.0.0-4010520240507001",
"@dcloudio/uni-stacktracey": "3.0.0-4010520240507001",
"@dcloudio/vite-plugin-uni": "3.0.0-4010520240507001",
"@types/node": "^20.10.0",
"typescript": "^5.9.3",
"vite": "^7.3.1"
}
}
```
---
### 任务 4.3:创建 TypeScript 配置
**文件:**
- 创建:`gym-manage-uniapp/tsconfig.json`
- [ ] **步骤 1:创建 tsconfig.json 文件**
创建 `gym-manage-uniapp/tsconfig.json`:
```json
{
"compilerOptions": {
"target": "ESNext",
"useDefineForClassFields": true,
"module": "ESNext",
"moduleResolution": "Node",
"strict": true,
"jsx": "preserve",
"resolveJsonModule": true,
"isolatedModules": true,
"esModuleInterop": true,
"lib": ["ESNext", "DOM"],
"skipLibCheck": true,
"noEmit": true,
"paths": {
"@/*": ["./src/*"]
},
"types": [
"@dcloudio/types"
]
},
"include": [
"src/**/*.ts",
"src/**/*.d.ts",
"src/**/*.tsx",
"src/**/*.vue"
],
"exclude": [
"node_modules",
"dist",
"unpackage"
]
}
```
---
### 任务 4.4:创建 Vite 配置
**文件:**
- 创建:`gym-manage-uniapp/vite.config.ts`
- [ ] **步骤 1:创建 vite.config.ts 文件**
创建 `gym-manage-uniapp/vite.config.ts`:
```typescript
import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import { resolve } from 'path'
export default defineConfig({
plugins: [uni()],
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
},
server: {
port: 3002,
host: '0.0.0.0',
proxy: {
'/api': {
target: 'http://localhost:8084',
changeOrigin: true
}
}
}
})
```
---
### 任务 4.5:创建 UniApp 应用配置
**文件:**
- 创建:`gym-manage-uniapp/src/manifest.json`
- [ ] **步骤 1:创建 manifest.json 文件**
创建 `gym-manage-uniapp/src/manifest.json`:
```json
{
"name": "健身房管理系统",
"appid": "",
"description": "健身房管理移动端应用",
"versionName": "1.0.0",
"versionCode": "100",
"transformPx": false,
"app-plus": {
"usingComponents": true,
"nvueStyleCompiler": "uni-app",
"compilerVersion": 3,
"splashscreen": {
"alwaysShowBeforeRender": true,
"waiting": true,
"autoclose": true,
"delay": 0
},
"modules": {},
"distribute": {
"android": {
"permissions": []
},
"ios": {},
"sdkConfigs": {}
}
},
"quickapp": {},
"mp-weixin": {
"appid": "",
"setting": {
"urlCheck": false
},
"usingComponents": true
},
"mp-alipay": {
"usingComponents": true
},
"mp-baidu": {
"usingComponents": true
},
"mp-toutiao": {
"usingComponents": true
},
"uniStatistics": {
"enable": false
},
"h5": {
"title": "健身房管理系统",
"router": {
"mode": "hash",
"base": "./"
}
}
}
```
---
### 任务 4.6:创建 UniApp 页面配置
**文件:**
- 创建:`gym-manage-uniapp/src/pages.json`
- [ ] **步骤 1:创建 pages.json 文件**
创建 `gym-manage-uniapp/src/pages.json`:
```json
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页"
}
},
{
"path": "pages/login/index",
"style": {
"navigationBarTitleText": "登录"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "健身房管理",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#007AFF",
"borderStyle": "black",
"backgroundColor": "#F8F8F8",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页"
}
]
}
}
```
---
### 任务 4.7:创建应用入口文件
**文件:**
- 创建:`gym-manage-uniapp/src/main.ts`
- 创建:`gym-manage-uniapp/src/App.vue`
- [ ] **步骤 1:创建 main.ts 文件**
创建 `gym-manage-uniapp/src/main.ts`:
```typescript
import { createSSRApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
export function createApp() {
const app = createSSRApp(App)
const pinia = createPinia()
app.use(pinia)
return {
app,
pinia
}
}
```
- [ ] **步骤 2:创建 App.vue 文件**
创建 `gym-manage-uniapp/src/App.vue`:
```vue
```
---
### 任务 4.8:创建首页组件
**文件:**
- 创建:`gym-manage-uniapp/src/pages/index/index.vue`
- [ ] **步骤 1:创建首页组件文件**
创建 `gym-manage-uniapp/src/pages/index/index.vue`:
```vue
欢迎使用健身房管理系统移动端应用
```
---
### 任务 4.9:创建登录页组件
**文件:**
- 创建:`gym-manage-uniapp/src/pages/login/index.vue`
- [ ] **步骤 1:创建登录页组件文件**
创建 `gym-manage-uniapp/src/pages/login/index.vue`:
```vue
```
---
### 任务 4.10:创建 API 请求封装
**文件:**
- 创建:`gym-manage-uniapp/src/api/request.ts`
- [ ] **步骤 1:创建请求封装文件**
创建 `gym-manage-uniapp/src/api/request.ts`:
```typescript
const BASE_URL = 'http://localhost:8084/api'
interface RequestOptions {
url: string
method?: 'GET' | 'POST' | 'PUT' | 'DELETE'
data?: any
header?: Record
}
interface Response {
code: number
message: string
data: T
}
export function request(options: RequestOptions): Promise> {
return new Promise((resolve, reject) => {
uni.request({
url: BASE_URL + options.url,
method: options.method || 'GET',
data: options.data,
header: {
'Content-Type': 'application/json',
...options.header
},
success: (res: any) => {
if (res.statusCode === 200) {
resolve(res.data as Response)
} else {
reject(new Error(`请求失败: ${res.statusCode}`))
}
},
fail: (err: any) => {
reject(new Error(`网络错误: ${err.errMsg}`))
}
})
})
}
export function get(url: string, data?: any): Promise> {
return request({ url, method: 'GET', data })
}
export function post(url: string, data?: any): Promise> {
return request({ url, method: 'POST', data })
}
export function put(url: string, data?: any): Promise> {
return request({ url, method: 'PUT', data })
}
export function del(url: string, data?: any): Promise> {
return request({ url, method: 'DELETE', data })
}
```
---
### 任务 4.11:创建 Pinia Store 配置
**文件:**
- 创建:`gym-manage-uniapp/src/store/index.ts`
- 创建:`gym-manage-uniapp/src/store/user.ts`
- [ ] **步骤 1:创建 store 入口文件**
创建 `gym-manage-uniapp/src/store/index.ts`:
```typescript
export * from './user'
```
- [ ] **步骤 2:创建用户状态管理文件**
创建 `gym-manage-uniapp/src/store/user.ts`:
```typescript
import { defineStore } from 'pinia'
import { ref } from 'vue'
export const useUserStore = defineStore('user', () => {
const token = ref('')
const userInfo = ref(null)
const isLoggedIn = ref(false)
const setToken = (newToken: string) => {
token.value = newToken
isLoggedIn.value = !!newToken
uni.setStorageSync('token', newToken)
}
const setUserInfo = (info: any) => {
userInfo.value = info
uni.setStorageSync('userInfo', info)
}
const logout = () => {
token.value = ''
userInfo.value = null
isLoggedIn.value = false
uni.removeStorageSync('token')
uni.removeStorageSync('userInfo')
}
const init = () => {
const savedToken = uni.getStorageSync('token')
const savedUserInfo = uni.getStorageSync('userInfo')
if (savedToken) {
token.value = savedToken
isLoggedIn.value = true
}
if (savedUserInfo) {
userInfo.value = savedUserInfo
}
}
return {
token,
userInfo,
isLoggedIn,
setToken,
setUserInfo,
logout,
init
}
})
```
---
### 任务 4.12:创建工具函数
**文件:**
- 创建:`gym-manage-uniapp/src/utils/storage.ts`
- [ ] **步骤 1:创建本地存储工具文件**
创建 `gym-manage-uniapp/src/utils/storage.ts`:
```typescript
export function setStorage(key: string, value: any): void {
try {
uni.setStorageSync(key, JSON.stringify(value))
} catch (error) {
console.error('存储数据失败:', error)
}
}
export function getStorage(key: string): T | null {
try {
const value = uni.getStorageSync(key)
return value ? JSON.parse(value) : null
} catch (error) {
console.error('读取数据失败:', error)
return null
}
}
export function removeStorage(key: string): void {
try {
uni.removeStorageSync(key)
} catch (error) {
console.error('删除数据失败:', error)
}
}
export function clearStorage(): void {
try {
uni.clearStorageSync()
} catch (error) {
console.error('清空存储失败:', error)
}
}
```
---
### 任务 4.13:验证 UniApp 项目运行
**文件:**
- 无文件修改,仅验证
- [ ] **步骤 1:安装依赖**
```bash
cd gym-manage-uniapp
npm install
```
预期:依赖安装成功
- [ ] **步骤 2:运行 H5 开发服务器**
```bash
npm run dev:h5
```
预期:开发服务器启动成功,可在浏览器访问
---
### 任务 4.14:提交阶段 4 的变更
**文件:**
- 无文件修改,仅提交
- [ ] **步骤 1:查看变更状态**
```bash
git status
```
预期:显示所有新创建的文件
- [ ] **步骤 2:提交变更**
```bash
git add .
git commit -m "feat(mobile): 创建 gym-manage-uniapp 项目脚手架"
```
预期:提交成功
---
## 阶段 5:根目录整理与文档更新
### 任务 5.1:更新 docker-compose.yml
**文件:**
- 修改:`docker-compose.yml`
- [ ] **步骤 1:查看当前配置**
运行:`cat docker-compose.yml`
预期:查看当前 Docker Compose 配置
- [ ] **步骤 2:更新服务名称和路径**
根据实际配置,更新服务名称和卷挂载路径,确保引用新的项目目录名称。
---
### 任务 5.2:更新 Jenkinsfile
**文件:**
- 修改:`Jenkinsfile`
- [ ] **步骤 1:查看当前配置**
运行:`cat Jenkinsfile`
预期:查看当前 Jenkins 配置
- [ ] **步骤 2:更新项目路径**
根据实际配置,更新项目路径和构建命令,确保引用新的项目目录名称。
---
### 任务 5.3:更新 README.md
**文件:**
- 修改:`README.md`
- [ ] **步骤 1:更新项目名称和描述**
修改 `README.md` 开头部分:
```markdown
# 健身房管理系统
企业级健身房管理系统,包含会员管理、课程管理、教练管理、设备管理等核心功能。
## 项目结构
```
gym-manage/
├── gym-manage-api/ # 后端 API 项目
│ ├── manage-gateway/ # API 网关服务
│ ├── manage-app/ # 主应用服务
│ ├── manage-sys/ # 系统管理模块
│ ├── manage-db/ # 数据库模块
│ ├── manage-common/ # 公共模块
│ ├── manage-audit/ # 审计模块
│ ├── manage-notify/ # 通知模块
│ └── manage-file/ # 文件管理模块
├── gym-manage-web/ # 前端 Web 项目
├── gym-manage-uniapp/ # 移动端 UniApp 项目
└── e2e-tests/ # E2E 测试
```
```
- [ ] **步骤 2:更新技术栈描述**
更新技术栈部分,添加 UniApp 相关信息:
```markdown
### 移动端
- UniApp + Vue 3
- TypeScript
- Pinia (状态管理)
```
---
### 任务 5.4:最终验证
**文件:**
- 无文件修改,仅验证
- [ ] **步骤 1:验证根目录结构**
运行:`ls -la`
预期:只包含全局性文件和项目目录
- [ ] **步骤 2:验证后端服务**
```bash
cd gym-manage-api
mvn clean compile
```
预期:编译成功
- [ ] **步骤 3:验证前端构建**
```bash
cd gym-manage-web
npm run build
```
预期:构建成功
- [ ] **步骤 4:验证 UniApp 运行**
```bash
cd gym-manage-uniapp
npm run dev:h5
```
预期:开发服务器启动成功
---
### 任务 5.5:提交阶段 5 的变更
**文件:**
- 无文件修改,仅提交
- [ ] **步骤 1:查看变更状态**
```bash
git status
```
预期:显示所有修改的文件
- [ ] **步骤 2:提交变更**
```bash
git add .
git commit -m "docs: 更新项目文档和全局配置"
```
预期:提交成功
---
### 任务 5.6:推送到远程仓库
**文件:**
- 无文件修改,仅推送
- [ ] **步骤 1:查看提交历史**
```bash
git log --oneline -5
```
预期:显示最近 5 次提交
- [ ] **步骤 2:推送到远程仓库**
```bash
git push origin HEAD
```
预期:推送成功
---
## 计划自检
### 1. 规格覆盖度检查
✅ 所有规格中的需求都有对应的任务:
- 后端项目重构:任务 1.1 - 1.16
- 前端项目重构:任务 2.1 - 2.5
- 测试文件迁移:任务 3.1 - 3.10
- UniApp 项目创建:任务 4.1 - 4.14
- 根目录整理:任务 5.1 - 5.6
### 2. 占位符扫描
✅ 无占位符:
- 无"待定"、"TODO"、"后续实现"等词汇
- 所有步骤都有具体的代码或命令
- 所有文件路径都是精确的
### 3. 类型一致性
✅ 类型一致:
- 所有文件路径使用统一的命名规范
- 所有代码示例使用一致的语法
- 所有命令使用一致的格式
---
**计划已完成。**