用途:把本文件放入项目(建议
docs/codex-dev-playbook.md或根目录CODEX_DEV_PROMPT.md),用于驱动 Codex 自行开发 + 自行校验。
目标:在当前系统(WSL2 + VS Code Remote-WSL + 多模块 Maven + pnpm 前端)下,快速、稳定地完成“需求→代码→联调→验收”。
你是项目的“全栈工程助手”,需要在不遗漏工程化细节的前提下完成开发任务。每次改动必须满足:
输出格式固定为:
1) 你要做什么(任务拆解清单)
2) 你改了哪些文件(文件路径列表 + 关键 diff)
3) 你如何验证(命令 + 预期结果)
4) 风险与回滚(潜在影响 + 如何撤销)
javac 单文件,会导致 org.springframework.boot 等依赖找不到)。spring-boot 插件,根目录直接 mvn spring-boot:run 可能失败。cd yudao-server && mvn -DskipTests spring-boot:runmvn -pl yudao-server -am -DskipTests org.springframework.boot:spring-boot-maven-plugin:runyudao-module-xxx 或改依赖后:
mvn -pl yudao-module-xxx -am -DskipTests install~/.m2 不存在)。.env.local 必须配置(示例):
VITE_BASE_URL='http://127.0.0.1:48080'VITE_API_URL=/admin-api当你接到一个业务模块(如 IQC 申请列表)需求时,按以下顺序执行:
1) 明确前端需要的字段与含义(含显示名/枚举中文/时间格式)。
2) 先创建 VO:*RespVO / *PageReqVO 等。
3) 之后再考虑 DO / entity / 表字段映射(如果需要)。
yudao-module-qms(质量相关)system 等核心模块。1) Controller:定义路由与入参(分页、筛选)。
2) Service:定义业务接口与实现(先跑通空分页也行)。
3) Mapper + XML:落地 SQL(再逐步补齐 join/聚合)。
4) 权限/租户:对齐项目现有注解与过滤器,不要私自绕过。
5) Swagger/Knife4j:确保接口可在文档里调通。
1) API 封装:src/api/... 定义请求与返回类型。
2) 页面与路由:保证 list/detail/edit 等页面可访问。
3) 菜单/权限:如走动态路由,确保后端菜单配置可生成路由。
4) 联调:Network 检查 URL 是否正确(不是 5173)。
roleRouters(或类似字段)。当你发现“新增/编辑/查看后返回列表 404”:
1) 打开控制台打印当前注册 routes,确认是否存在 /xxx/list。
2) 若只有 new/edit/view,而没有 list,则:
id 用 FBILLNO(或按需求指定的业务单号),而非数据库自增 id(除非前端明确要求)。FAPPLYUSER 存用户 id,列表显示需要 join system_users.id -> system_users.username。注意:状态中文化建议由后端返回中文(避免前端二次映射出错),除非项目规范要求前端映射。
mvn -pl yudao-server -am -DskipTests packagemvn -pl yudao-module-qms -am -DskipTests installcd yudao-server && mvn -DskipTests spring-boot:runpnpm ipnpm dev你可以直接把下面这一段当作每次给 Codex 的 Prompt 开头。
mvn -pl <module> -am -DskipTests install。
3) 前端 baseURL 必须指向 http://127.0.0.1:48080(或项目实际端口)。
4) 动态路由:子菜单 path 不能以 / 开头;改菜单后清缓存验证。FBILLNO(作为 id)。FAPPLYUSER 关联 system_users 显示申请人 username。package org.springframework.boot does not exist:
No plugin found for prefix 'spring-boot':
yudao-server 或用插件全坐标。mvn -pl <module> -am -DskipTests install.env.local,重启 dev。roleRouters 等缓存,硬刷新。只有同时满足以下条件才算完成:
/admin-api/qms/ipqc-task/page 报 500,日志里出现 Unknown column 'tenant_id'。tenant_id,但 WorkOrdMaster / ItemMaster / mes_morder / qms_gcjyd 无该字段。yudao-server/src/main/resources/application.yaml 的 yudao.tenant.ignore-tables 增加这四张表,避免注入。127.0.0.1:48080 仍返回 {"code":404,"msg":"请求地址不存在:admin-api/qms/ipqc-task/page"}。yudao-module-qms jar 不是最新,IpqcTaskController 未被打包进运行时。mvn -pl yudao-module-qms -am -DskipTests installyudao-server
3) 可用 jar tf ~/.m2/repository/.../yudao-module-qms-*.jar | rg IpqcTaskController 验证Port 48080 was already in use。ss -ltnp | rg :48080 找 PID,再 kill <pid>),再启动。Failed to refresh live data from process service:jmx...curl "http://127.0.0.1:48080/admin-api/qms/ipqc-task/page?pageNo=1&pageSize=20&status=pending"预期返回:
未登录返回 401;登录后应返回 code=0 且有分页结构。
[ ] 后端 mvn -pl yudao-server -am -DskipTests package 通过
[ ] 后端启动后接口可访问(Swagger/curl)
[ ] 前端启动后列表页可打开、可加载数据
[ ] 新增/编辑/查看后返回列表不 404
[ ] 文档包含:改动文件列表 + 验证步骤 + 回滚方式
维护建议:每做完一个模块,把“字段口径/状态规则/路由菜单坑点”沉淀在本文件的对应章节,逐步形成团队的工程手册。