# 健身房管理系统基础设施重构实现计划 > **面向 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. 类型一致性 ✅ 类型一致: - 所有文件路径使用统一的命名规范 - 所有代码示例使用一致的语法 - 所有命令使用一致的格式 --- **计划已完成。**