Branch: cfclub Updated: 2026-06-19
三方平台型家庭教育服务平台。家长 + 孩子 + 服务商(成长规划师/供应商) + 平台运营。三端架构:Spring Boot 2.7.18 (Java 8) 后端 + uni-app Vue 2 微信小程序 + Vue 2 + Element UI Web 管理端。
关键数字:100+ Java 文件、~50 小程序页面、29 Web 管理页面、47+ 数据实体、60+ 控制器。
cfc/
├── cfc-backend/ # Spring Boot 后端 (port 9082)
│ └── src/main/java/com/etotem/cfc/
│ ├── controller/ # 60+ 控制器,按功能子包分组
│ ├── service/ # 业务逻辑层
│ ├── entity/ # MyBatis-Plus 实体 (@Data + @TableName)
│ ├── mapper/ # MyBatis-Plus Mapper 接口
│ ├── dto/ # 数据传输对象 (~120 个)
│ ├── config/ # JWT / 多数据源 / DatabaseInitializer / WebConfig
│ ├── common/ # Result, ProductStatus
│ └── task/ # 定时任务 (RepeatTaskGenerator, PointsExpireTask 等)
│
├── cfc-frontend/ # uni-app 微信小程序
│ ├── pages/ # ~50 页面
│ ├── components/ # 29 个可复用组件
│ ├── store/index.js # Vuex 角色状态管理
│ ├── utils/api.js # 1247 行 API 封装
│ ├── config.js # 环境感知 API 地址
│ └── pages.json # 5-Tab: 首页/身体/心智/关系/我的(TabBar 文案,非五维维度名)
│
├── cfc-web/ # Vue 2 + Element UI Web 管理端
│ └── src/
│ ├── views/ # admin/ + teacher/
│ ├── router/ # 角色权限守卫
│ └── store/ # 认证状态
│
├── docs/ # 需求/设计/测试文档
├── tests/ # unit/integration/e2e (基础设施不完整)
└── .superpowers/ # superpowers 配置
| Task | Location | Notes |
|---|---|---|
| REST API | cfc-backend/.../controller/ |
按功能模块分组子目录 |
| 业务逻辑 | cfc-backend/.../service/ |
命名: XxxService.java |
| 数据实体 | cfc-backend/.../entity/ |
MyBatis-Plus @TableName + @Data |
| 配置 | cfc-backend/.../config/ |
JWT / 多数据源 / DatabaseInitializer / WebConfig |
| 通用响应 | cfc-backend/.../common/Result.java |
Result<T> (code/message/data) |
| 小程序页面 | cfc-frontend/pages/ |
需在 pages.json 注册 |
| 小程序 API | cfc-frontend/utils/api.js |
统一 request() 封装,含自定义 header |
| 小程序配置 | cfc-frontend/config.js |
环境自动检测 (develop/trial/release) |
| 小程序状态 | cfc-frontend/store/index.js |
Vuex: token/role/currentRole/isSwitchedChild |
| Web 前端 | cfc-web/src/views/ + router/index.js |
角色权限路由 |
| Web API | cfc-web/src/api/ |
axios 封装 |
| 数据库配置 | cfc-backend/src/main/resources/application.yml |
主库 zxyj + sfms 源库 |
| SQL 迁移 | cfc-backend/src/main/resources/schema*.sql + DatabaseInitializer.java |
启动时自动执行 |
| 测试 | tests/ |
unit/integration/e2e |
zxyj(不是 cfc),地址 192.168.16.251:3306,账号 zxyj / zxyj@123bianwoyou.mysql.rds.aliyuncs.com:3305/sfms,账号 sfms / sfms@123cfc-secret-key-2026-spring-boot-jwt-token,过期 24hwechat.test-mode: true,使用 13800138000 模拟手机号http://dify.bianwoyou.cn/v1 with API keywx5ba8038ef16fb245# 后端
cd cfc-backend && mvn clean compile # 编译验证(必做)
mvn spring-boot:run # 启动 localhost:9082
mvn test # 运行测试(目前只有1个测试类)
# 小程序(需微信开发者工具)
cd cfc-frontend && npm install && npm run dev:mp-weixin
# Web 管理端
cd cfc-web && npm install && npm run serve # localhost:8082
# 数据迁移
curl -X POST http://localhost:9082/api/migration/run
@TableName + @TableId(type = IdType.AUTO)Result<T>(code/message/data),成功 code=200,错误 code=500/400JwtInterceptor 拦截 /api/**,约 15 个公开路径放行GlobalExceptionHandler 处理 IllegalArgumentException → 400@Resource 优先(180+ 处),@Autowired 仅 3 处(AdminGuideController.java)@Tag,62 个文件含 Swagger 注解WebConfig 全放通./uploads/ 目录,通过 /uploads/** 静态资源访问task/ 包下,含任务重复生成器、积分过期、连续签到重置 等声明的规则:统一 @PostMapping,禁止 @GetMapping/@PutMapping/@DeleteMapping。
实际情况:9 个控制器违反此规则,主要分布在:
DanAssessmentController — 12 个 @GetMapping(测评结果查询)WishController — 6 个 @PutMapping/@DeleteMapping(心愿状态变更)GuideManagementController、GuideFamilyTaskController — PUT/DELETETaskTemplatePackageController — PUT/DELETE→ 新代码尽量用 @PostMapping,但改造已有 @GetMapping/@PutMapping/@DeleteMapping 前需确认。
onLoad/onShow(非 mounted)?. — 仅 1 个文件违规(teacher-profile.vue 2 处),一律用 && 替代uni.request + 自定义 header X-User-Id + Authorization: Beareruni.getAccountInfoSync().miniProgram.envVersion(develop/trial/release)danshopRequest() 调用pages.jsonmain.js 中修补 el-submenu 的 removeTabindex null 错误router.beforeEach 验证 token → 调 /api/admin-auth/info → 角色分流v-modal { display: none !important }VueRouter.prototype.push 捕获 Redirected 导航错误parent ↔ 孩子 child 切换,currentRole 状态标记,切回需密码teacher 独立角色,可登录规划师端,也可切回家长视角;isSwitchedTeacher 状态标记role ENUM + 多角色 roles 字段;vendor_type 次级角色PointsService 处理StreetController 提供 APIDanAssessmentResultEnergyService
AIChatController + 独立 pages/ai/chat.vuedanshopRequest() 调用,含完整购物车/订单/物流CommissionController/WithdrawalControllerconfig.js 或 application.yml)@Resource(name="xxx") 与字段名不一致@GetMapping/@PutMapping/@DeleteMapping — 统一 @PostMapping(除非确认改造范围)?.(用 &&)awk '!seen[$0]++' 去重(会删合法重复行)new XxxMapper() — 必须通过 @Resource 注入mvn clean compile 确认编译通过mvn spring-boot:run 确认应用正常启动(显示 Started)npm run dev:mp-weixin 或 npm run serve(Web 端)lsp_diagnostics 检查改过的文件cfc/
├── AGENTS.md # 本文件
├── cfc-backend/AGENTS.md # 后端详细文档
├── cfc-frontend/AGENTS.md # 小程序前端文档
├── cfc-web/AGENTS.md # Web管理端文档
├── tests/AGENTS.md # 测试策略文档(基础设施不完整)
└── docs/ # 需求/设计/测试文档