用法:新对话开始后,先读本文件 + 项目根目录
AGENTS.md,即可无缝接力。
每天结束时:把当天进展、踩过的坑、新需求、未完成事项更新到本文件,然后可以放心开新对话。
协作约定(2026-08-31):说「提交」= 本地 commit + 推送到远端 git(origin main,Gitblit),不再只做本地 commit。
92528d9(同事):数据导入页模板名/下载路径对齐实际模板文件(.xls→.xlsx、补个体客运模板路径)b1be169(我方):2 个模板文件入库推送(docs/城市客运/导入模板_出租车信息(运政车辆信息).xlsx、docs/公路旅客/个体客运量汇总.xlsx;同事本地放好后我方核对后按惯例入库)053ebfe(同事):数据导入页分组改名(道路货运/站场投资/货运能耗季报)+ 新增「年报」分组 11 类选项0c16e56(同事):6 个年报模板入库(docs/年报/,.xls)app.captcha.required 开关(缺省 true=启用);本机 application.yml 与 example 现为 false(测试阶段跳过,**正式发布前改回 true**)。captchaRequired=false 时登录不校验验证码;新增公开接口 GET /api/auth/captcha-config 返回 {required}。required=false 时隐藏验证码区域并显示「测试模式:行为验证码已跳过」提示,登录跳过验证;配置请求失败时默认按启用处理(安全兜底)。app.captcha.required 改回 true。<el-tabs> 触发 Element UI 布局无限循环(详见下面第 4 节,commit 684da41)。此前「线程池占满/batches pending/慢上传」是另一条可复现机制,但不是用户场景的实锤根因;/import/batches pending 只是表象**——el-tabs 布局风暴阻塞主线程后,页面后续请求(含 batches)全部发不出去/排队,表现为「batches pending + 浏览器无响应」。修复 el-tabs 后 dev 与打包形态均正常。listDirs 子目录/文件列表各限 300(新增 dirsTruncated/filesTruncated 标记,excelCount 仍为真实总数);前端「从目录批量导入」每批限 60 个文件(超限提示分批);目录浏览弹窗显示截断提示。chrome://crashes 记下原因码(OOM / GPU / STATUS_ACCESS_VIOLATION 等),并确认崩溃时点的是侧边栏「数据导入」菜单还是页面上某个按钮;据此决定下一步。/api/import/batches 接口(页面已进入,loadBatches+loadOverview 两个 batches 请求全部 pending);后端无日志=请求卡在 Tomcat 连接/线程层、未执行到 SQL。server.tomcat.basedir: . + accesslog,jar 同级 logs/access.*.log,pattern 含 %D 耗时,静态资源也记录)——本地实测 chunk 请求 3ms。**重新打包发布后**,下次崩溃看 access log:chunk 请求是否到达、耗时多少 → 直接定位「服务器慢」还是「客户端没发出请求」。logs/access.*.log ②客户端 F12 Network 中 chunk-*.js 请求状态(pending/stalled/耗时)。server.tomcat.threads.max: 500(application.yml + example);② 数据导入页 loadBatches+loadOverview 合并为 loadData(进页/刷新/导入后只发 1 个 limit=200 请求,表格取前 50,概览复用同批数据)。**修复验证**:同样 240 慢上传压力下,batches 0.2s、chunk 0.1s 正常。logs/access.*.log(chunk/batches 是否到达、%D 耗时)②对方 dev 机(单用户也 pending 的复现机)后端日志(是否 DB 连接/锁/SQL 卡住)。src/api/index.js axios 实例默认 timeout: 15000;响应拦截器里 ECONNABORTED → 弹「请求超时:服务器繁忙或无响应,请稍后重试」、无 response → 弹「网络异常:无法连接服务器」,并给 error 打 _toast 标记,页面 catch 里 if (e && e._toast) return 避免重复弹;401 跳登录逻辑不变。/audit/execute 120s、/audit/review /audit/markAudited /explain/save 60s、/llm/chat 120s、报表导出 120s、报表预览/就绪 60s、验证码接口 10s、登录 15s。components 键覆盖({ AppHeader } 被 { AiChatDialog } 覆盖)→ 企业解释页 app-header 未注册无横栏;已合并。RuleManage/UserManage 旧版布局(无 app-header、退出藏菜单且失效)→ 统一为 app-header 上下布局。dirLast_*、ReportExport report_note_*)保留 localStorage。实测:新标签页直访 #/dashboard 被守卫重定向到 /login ✓;F5 后保持登录 ✓。<el-tabs> 触发 Element UI 布局无限循环(Chrome Trace 实测:主线程每秒 1000+ 次 Layout/UpdateLayoutTree,无 JS FunctionCall,组件挂载未完成→ batches 请求不发出→ batchLoading 永 true → el-loading 动画永转)。这就是用户「点数据导入菜单就浏览器无响应」和「点审核结果不高亮」的真正根因(与此前线程池/上传压力无关!)。 <el-radio-group> + <el-radio-button> 模块切换 + v-show 面板(功能等价,回避 el-tabs 触发器)。验证:★ dev + 打包形态(dist + 静态代理 8091) 均正常:/import 进入 8ms 发出 batches,无长任务;完整点击 8 个菜单高亮全部正常。D:\Codex\_tools\pptr-core\ 下 import_probe2.js / import_verify.js / menu_final.js / session_test.js / prod_import_test2.js / prod_server.js(打包静态+API 代理,用于本地验证 dist)。trace 分析脚本在 %TEMP%\analyze_trace*.py。components 键({ AppHeader } 被后面的 { AiChatDialog } 覆盖)→ app-header 未注册、企业解释页顶部横栏丢失;已合并为 { AppHeader, AiChatDialog }。RuleManage.vue / UserManage.vue 还是旧版布局(<el-container> 无 direction、<el-header> 无用户/登出、退出登录藏在菜单里且 RuleManage 根本没有 logout 方法)→ 统一改为 <app-header> 上下布局、删菜单内退出项,与其余 6 页一致。dirLast_*、ReportExport 的 report_note_* 属偏好记忆保留 localStorage。注意:同标签页 F5 刷新保持登录、新开标签页需重登。D:\Codex\_tools\pptr-core\menu_test3.js(点击遍历)、menu_test4.js(逐路由访问,推荐)、login_debug.js;node24 运行(C:\Users\jcxiong\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin\node.exe)。docs/打包部署说明.docx 第六节「外置 application.yml 需包含完整配置」改为「属性级合并」后重新导出 docx(未做)。cf57c2b 中「指向客户端环境」的旧结论。admin/admin123 登录application.yml 与 jar 内置是**属性级合并**(外置只需写要覆盖的项,其余自动沿用内置),file:./config/ > classpath:/config/ > file:./ > classpath:/),java -jar app.jar 即可命中外部配置;推荐放 config\ 子目录。docs/打包部署说明.docx 第六节"外置 application.yml 需包含完整配置"表述不准确,web\(前端 dist 内容)+ docs\(模板目录);java -jar app.jar 启动后访问 http://<服务器>:8090。docs/打包部署说明.md / .docx(含 nginx 备选方案、IIS 反代示例 docs/iis-web.config.example)。traffic_audit.sql(27 表、约 6 万行,来自其 mysql80:3308)已全量导入本机库(MySQL 8.0.29,localhost:3305,root/root)。D:\03_公司\02_项目\27_湖北省道路运输事业发展中心\05_开发测试\00_开发\_db_backup_20260827.sql。sys_user 现有 4 账号(admin + zhangsan/lisi/wangwu,均带 modules);admin 密码已恢复为 BCrypt(admin/admin123),其余账号密码为同事原 hash。C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe),不要用 5.7 客户端(D:\mysql\mysql-5.7.41-winx64)。SecurityConfig 放行静态资源(/、/js/** 等)+ application.yml 加spring.web.resources.static-locations: file:./web/(application.yml 不入库,重打包时需保留该配置)。trafficAudit.git(见第九节),旧 Gitee 仓库弃用;~xyc/trafficAudit.git 临时仓库已删。el-menu 的 handleItemClick 在**同路由导航**(vue-router NavigationDuplicated)时,routeToItem 的 onError 回调把 activeIndex 恢复为点击前旧值(其只排除了 push 抛异常路径,未排除同路由回调路径)。触发场景:上一次菜单导航未完成时快速点另一个菜单(如「数据导入」未切完就点「审核结果」)→ 页面已是目标页但高亮停留在旧菜单,**间歇性、时好时坏**(复现:puppeteer 快速连点,puppeteer 用 node24:C:\Users\jcxiong\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin\node.exe)。ref="sideMenu" + :default-active="$route.path" + @select="onMenuSelect";onMenuSelect 加在 main.js 全局 mixin(setTimeout 宏任务强制纠正 activeIndex,宏任务晚于 push 的微任务 onError 回调,保证最终高亮正确)。验证:6 轮×3 场景(顺序点/快速连点/同路由往返)全部高亮正确。POST /api/auth/change-password(用户改自己密码,需旧密码校验、新密码≥6位、新旧不同)+ POST /api/user/reset-password(仅 admin,重置他人为 123456,admin 自身禁止重置);JwtUtils 新增 resolveUsername(Authorization头)。前端 AppHeader 公共顶栏加「修改密码」弹窗(旧/新/确认),UserManage 操作列加「重置密码」按钮(isAdmin 控制显示,非 admin 隐藏+后端 403 双保险)。API 与 UI(admin/非admin 双视角)均已验证,**测试后数据库密码已恢复原状**(admin/admin123 有效,chenzj 等原 hash 未变)。D:\Codex\_tools\pptr-core\menu_audit_rounds.js(高亮回归)、pwd_ui_test.js(改密 UI)。traffic-audit-web/src/views/DataImport.vue(累计 +119/-380)。前端 dev 编译 ✅ + puppeteer 双场景验证 ✅(真实无失败数据→空态;拦截 mock 失败数据→明细表渲染;侧栏 34px⇄342px 往返、5 组 18 项、内部滚动独立)。parseFailDetails 曾误加在 methods 对象**外面**(mounted 前),Vue 不识别 → 展开行渲染时抛 TypeError、el-table 展开行不渲染(现象像 Element UI expand 失效),报错是 [Vue warn] 只在 console 出现、pageerror 抓不到(puppeteer 须监听 console 事件);移入 methods 后恢复。②puppeteer 验证 el-table 展开行不要用合成 click 点图标(时灵时不灵),直接拦截接口 mock 数据验证渲染更可靠。D:\Codex\_tools\pptr-core\_tmp_import_ui_final*.js(mock 拦截验证)、_tmp_import_ui_check*.js;项目根 _tmp_patch*.py/_tmp_probe*.py/_tmp_fix*.py(改造脚本,按约定未删)。791e70f(数据导入页重构)。D:\trafficAudit 的 app.jar/web 还是 08-27 旧包,不包含:el-tabs 修复(d42a044)、超时保护、菜单高亮修复(b051f00)、修改密码、验证码跳过、**数据导入页重构(791e70f)**。打包方法见 docs/打包部署说明.md(SpringBoot 托管 web/ + docs/,单端口 8090)。app.captcha.required 改回 true(现在 application.yml 为 false 测试跳过)。logs/access.*.log(%D 耗时)+ 客户端 F12 Network(chunk/batches 状态),此前 el-tabs 根因(684da41/d42a044)应已消除。D:\Codex\_tools\pptr-core\ 下 menu_audit_rounds.js(菜单高亮回归)、pwd_ui_test.js(改密 UI)、prod_server.js(打包静态+代理 8091)。puppeteer 用 node24 跑:C:\Users\jcxiong\.cache\codex-runtimes\codex-primary-runtime\dependencies\node\bin\node.exe。统一用一键脚本(必须沙箱外/提权运行): powershell -NoProfile -ExecutionPolicy Bypass -File start-dev.ps1
- 脚本会自动检测 8090/8080 是否已监听并跳过重复启动,等待就绪后打印结果。
- 成功标志:backend.log 出现 Started TrafficAuditApplication;frontend.log 出现 Compiled successfully + App running at:。
- 访问地址:前端 http://localhost:8080(/api 代理到后端 8090)。
- 启动的三个历史坑及对策:见 AGENTS.md(Path/PATH 重复→不用 Start-Process;node 沙箱 EPERM→必须提权;不嵌套 powershell -Command)。
traffic-audit-web,端口 8080。traffic-audit-server,端口 8090。traffic_audit;账号密码见 traffic-audit-server/src/main/resources/application.yml)。deepseek-chat,配置同样在 application.yml;注意不要把 API Key 写进任何文档)。docs/同事开发记录-20260827.md(含报表 Tab 工作台、目录导入、AiChatDialog.vue):结构化 Markdown 排版、逐字打字动画(约70字符/秒)、打字时同步平滑滚动、思考中蹦跳小人(发送后也显示)、语音输入+语音播报、对话可查数据库、弹窗固定屏幕居中圆角。.el-tooltip__popper max-width)。AGENTS.md、start-dev.ps1、docs/Codex功能清单.md、docs/每日反思任务.md、docs/architecture.md、docs/database.md、docs/init.sql。docs/各市州所属组织机构.xlsx),规下=合计−规上。requirement/货运简化.docx 第78行;设计见 docs/database.md 第七章 llm_desensitize_map)。requirement/货运简化.docx(+ docs/ 副本)、docs/01-交通运输部门统计调查制度.docx、docs/02-交通运输企业统计调查制度.docx。docs/模板_*.xlsx、docs/生成_*.xlsx。docs/architecture.md、docs/database.md、docs/init.sql。AGENTS.md、start-dev.ps1、docs/每日反思任务.md(每日反思自动化待启用)。docs/每日反思任务.md;需要 automation 工具可用的会话)。docs/Codex功能清单.md 待网络恢复后补官方核实版。GET /api/import/batches——后端 limit 上限 200;全表 81 条、error_detail 最长 2.6KB、全量响应约 17KB(前端只取 50 条);前端表格仅 8 列短字段(errorDetail 不渲染)、无轮询/定时器。**结论:接口不是崩溃根因**(若接口有问题,所有用户都会崩,而非"部分用户")。现象符合客户端环境差异(第三方扩展注入/旧显卡驱动/低配内存,与 08-27 迅雷扩展+Intel 旧驱动结论一致)。建议对崩溃用户依次验证:无痕模式→换 Edge→禁扩展,并看 chrome://crashes。AGENTS.md + HANDOFF.md;涉及 AI 分析/审核时参考 docs/ 与数据库表结构。HANDOFF.md(进展、坑、新需求、待办),再关对话。跨项目可复用经验沉淀到机器级顶层 AGENTS.md(本项目不再重复)。
61.183.254.94:3000(HTTP),仓库 trafficAudit.git(根目录命名空间,非 ~xyc/ 个人空间)。http://xyc@61.183.254.94:3000/r/trafficAudit.git(账号 xyc 密码 gitP@ssw0rd,已存本机 GCM 凭据管理器,直接 git push 即可)。xyc 授权该仓库推送(RW+),2026-08-27 已验证 xyc 推送成功;日常推送用 xyc。~xyc/trafficAudit.git 个人仓库已删除(2026-08-27,admin 在 Web 编辑页删除)。origin = http://xyc@61.183.254.94:3000/r/trafficAudit.git(不用 SSH,ssh-alt 已删)。715e9e1)+ 对方开发结果分支(f713166,partner-work)+ 合并提交 ec9b25a;对方未用 git,其代码经独立分支合入。traffic-audit-server/src/main/resources/application.yml 已在 .gitignore 中,application.yml.example(${DEEPSEEK_API_KEY} 等)。新环境:复制模板为 application.yml 并填真实值。git add -A → git commit -m "..." → git push(HTTPS 推送免输密码)。backend.log、frontend.log、node_modules/、dist/、target/ 等不入库;docs/sql_city_bus.sql、docs/sql_city_taxi.sql 已入库(建表+审核规则,MySQL 8 可用)。.gitignore、脱敏模板 application.yml.example,真实 application.yml 不入库),创建 Gitee 私有仓库 jichengxiong/trafficAudit 并推送 main(2 commits:初始提交 + HANDOFF 补充 git 说明)。2026-08-27(续3,双方合并):合并流程——① 我方改动先提交(验证码+登出+布局,commit 前缀 feat:);② 从 08-23 基线
建 partner-work 分支,镜像对方目录 D:\03_公司\02_项目\27_湖北省道路运输事业发展中心\05_开发测试\00_开发\traffic-audit-project-20260827
(排除 .git/dist/日志/对方验证码相关文件:ShapeCaptcha.vue、security/captcha/*、CAPTCHA.md、cp.txt、t_test.js),提交为对方开发结果;
③ git merge partner-work 解决冲突:LoginController=我方验证码+对方数据库校验(UserMapper+PasswordEncoder+modules/realName);
Login.vue=我方 Captcha3D 版(补存 realName/modules);router 守卫用我方版本;6 个业务页=对方功能版+我方 AppHeader 上下布局
(根容器 direction="vertical"、el-header 换 app-header、删菜单内退出登录、注册 AppHeader 组件);HANDOFF.md 重写为合并版。
④ pom.xml 去掉对方加的 spring-boot-starter-data-redis(验证码用我方内存版,无需 Redis);application.yml 本地合并
(保留我方 3305 数据库参数,加 multipart 100MB、docs 模板目录配置;example 模板同步)。⑤ 数据库补齐(见第一节);init.sql
补 sys_user.modules 列、修正 admin 密码为真实 BCrypt、追加 passenger_individual_monthly 与 audit_run 表;城市客运两个
sql 的规则 INSERT 改写为 INSERT IGNORE VALUES(兼容 MySQL 5.7/8.0,原派生表写法在 8.0.29 报 Unknown column t.rule_code)。
⑥ 验证:后端 mvn compile ✅、前端 npm run build ✅。坑:链接工作区 .git 是文件,robocopy /MIR 会把它删掉导致"not a git
repository",需重建 gitdir 文件;PowerShell 的 -e "..." 字符串里 $ 会被当变量展开,写 SQL 密码哈希要用 SQL 文件。