Commit Graph

413 Commits

Author SHA1 Message Date
huangzd1997 51fb77ec25 perf(紫鸟): 店铺索引刷新提速——间隔 10→5 分钟、每轮批量 100→200 个 apiKey,新店铺未命中等待时间约缩短 3/4 2026-09-11 16:38:56 +08:00
huangzd1997 cd055f8ccd fix(内存): 两处无界内存风险加固——brand-check 线程池改有界队列+CallerRuns(大批量检查不再无界堆积 OOM);OSS readObjectBytes 加 20MB 读取上限防大对象误用 OOM 2026-09-11 16:09:50 +08:00
huangzd1997 c2915036d6 fix(调度): 双节点下 collect-data/publish/image-video 定时调度加 Redis 分布式锁互斥——双活原来各自扫描执行同一批任务,重复派发/重复终态判定 2026-09-11 16:09:46 +08:00
huangzd1997 8dc03df95b feat(task): 客户端崩溃恢复接口 POST /heartbeat/{taskId}/interrupted——客户端重启发现上次进程崩溃时立即把残留 RUNNING 任务标终态,替代最长等 30 分钟的心跳超时兜底 2026-09-11 16:09:42 +08:00
huangzd1997 bb74c9a192 fix(task): 新增陈旧任务自动修复兜底——历史任务永久停留中间状态的排查与兜底
生产库排查发现三类脏状态:陈旧 PENDING/SCHEDULED 无调度器再捞(243条)、
心跳残留的万年 RUNNING、SUCCESS 但结果报错(上报契约问题)。
已手工修复 269 条;本提交补常驻兜底:每 10 分钟检查 PENDING/SCHEDULED/RUNNING
心跳(updated_at)超 120 分钟即标 FAILED,分布式锁防双实例重复。
只用心跳线、不限制总时长——超长真活任务不会被误杀。
2026-09-11 16:03:01 +08:00
huangzd1997 8e684b92dd fix(下载): 各模块结果下载由流式代理改 302 重定向到对象存储直链——原实现在 Controller 内边读边写代理整个文件,请求线程被下载时长占满;且恒回 200 全量,客户端 Range 断点续传实际失效
覆盖 brand(/tasks/{taskId}/download)、delete-brand(任务 + 结果两处)、appearance-patent、
patrol-delete、price-track、withdraw、query-asin、product-risk、shop-match、shop-data-crawl
共 10 个 Controller,与既有的 convert/dedupe/split 302 实现对齐(ResponseEntity.status(FOUND)
.location(直链) + Cache-Control no-store),并补重定向 info 日志便于排查。

前端各 tab 本就通过 saveUrlWithProgress(url, filename) 传入文件名与下载 id,不依赖
Content-Disposition,故无需前端改动即可同时获得断点续传与进度回调。
验证:两节点重启后逐个实测 11 个端点均 302(含 brand 任务下载与巡店/跟价的有文件记录);
无文件时保持既有业务错误响应(HTTP 200 + success:false)。
2026-09-11 15:43:46 +08:00
huangzd1997 d54dbf72c9 fix(similar-asin): 结果文件下载改 302 重定向到对象存储直链——原流式代理让请求线程被整个下载时长占满,货源结果单文件常见 100MB+(任务 27609 达 130MB),并发下载即拖垮 Tomcat 线程池;且代理恒回 200 全量,客户端 Range 断点续传实际失效
原实现在 Controller 内 openStream 边读边写把整个对象代理给客户端,改为
ResponseEntity.status(FOUND).location(直链) 后:① 请求线程立即释放(实测响应
从"随下载时长占用"降到 ~10ms);② 直链支持 Range,save_file_from_url_new 的
断点续传才真正生效。前端本就优先用 item.downloadUrl 直链、该接口仅兜底且客户端
保存名由前端传入不依赖响应头,故无需前端改动。补一条重定向 info 日志便于排查。
2026-09-11 12:03:57 +08:00
huangzd1997 47b2758fe8 fix(security): /debug/** 纳入兜底鉴权——修复 debug 端点可被匿名调用(含写操作)
2026-09-11 实测确认(本机公网直连):
  http://47.110.241.161:18080/debug/request-info        → 200 匿名返回实例元数据
  http://api.aishufu.top:18080/debug/request-info       → 200
  https://api.aishufu.top/debug/request-info            → 200
根因:SecurityConfig 是 anyRequest().permitAll(),唯一兜底过滤器 AdminApiGuardFilter 只覆盖
/api/admin/**(shouldNotFilter 对其它路径一律放行),而 modules/debug 两个控制器均无
@Profile/@ConditionalOn*/@PreAuthorize。其中 POST /debug/task-recovery/run-stale-finalize
是强制收尾指定 task 的写操作。

修法:不删端点(stale-task-finalize-guidelines.md 明确把该接口列为线上应急工具),
改为把 /debug 前缀纳入既有兜底过滤器——URL 不变、runbook 不破、复用已测鉴权逻辑,
应急调用方改用 X-Internal-Token 或管理员 JWT 即可通过。
另加 /debug 放行审计日志,便于事后追溯这类低频敏感调用。

单测 13 个全绿(新增 5 个):匿名调 /debug/request-info 与 run-stale-finalize 均被 401 拒绝、
带内部令牌可直达 controller、/debug 裸前缀纳入保护、/debugging 与 /debug-tools 等
同前缀不同段的路径不被误伤。
2026-09-11 01:33:58 +08:00
huangzd1997 dd45ffe34c chore(清理): 删除死代码与过期文件——7个无引用DTO+图片工作台整棵子树(16文件)+冗余副本+一次性脚本+可再生审计快照
每项删除前均做过全仓库引用核对(含 tests/、两个前端、Python 侧):
- Java 7 个 DTO:BrandTaskRunRequest、LegacyBrandTaskCreateVo、Ziniao{SwitchShopRequest,CurrentShopVo,LoginUrlVo,SwitchShopVo}、
  AppearancePatentParsedGroupManifestDto —— 全仓库仅命中声明行本身
- frontend-vue 整棵 src/pages/image/(16 文件):9a487ae9 起首页一级入口已删("图片已并入视频页"),
  该子树完全自闭环;同步移除 /image 路由与 ImageVideoPage 的图片入口
- frontend-vue 两个孤儿组件 AiModuleSwitch/AiWorkflowShell:无引用,且位于 src/shared/components
  而非 unplugin-vue-components 默认扫描的 src/components,不存在自动注册
- backend/tool/devices.py + .device_id:app_client/tool/devices.py 的冗余副本(活的是 app_client 那份),
  app.py 只注册 version_bp,无任何引用
- admin-frontend-vue 的一次性 Playwright 调试脚本 rescan.tmp.mjs / diag-role-price.mjs
- backend-java/scripts/*_report.json ×4:可由 n1_scan.py 等重跑的审计快照
- frontend-vue/DESIGN.md:Last refreshed 2026-06-09,仍是 MPA 时代内容
- backend/requirement.txt:pip freeze 63 条裁剪为实际 import 的 5 条;run.sh 硬依赖该文件存在,故保留文件本身

验证:mvn compile 通过、vue-tsc --noEmit 通过、残留引用 grep 零命中。
注:仓库既有的 4 个失败测试类(FlywayMigration*DocTest、MigrationInventoryTest、HttpClientTimeoutEffectiveTest)
经 stash 对照实验确认与本次改动无关(相同 Failures/Errors 计数)。
2026-09-11 01:33:54 +08:00
huangzd1997 b9768aac5e test(shop-data-crawl): 修复 ShopDataCrawlTaskServiceRetentionTest 因构造依赖漏 mock 导致的 NPE——Task 35 给 ShopDataCrawlTaskService 新增了 shopDataCrawlItemStoreService(行级明细落库)与 TaskProgressLightAssembler 两个构造依赖,而本测试的 @Mock 列表未同步更新;@InjectMocks 走构造注入时没有对应 @Mock 的构造参数会被传 null,于是 assembleDailyWorkbook 里的 saveShopBatchFromSnapshot 调用直接 NPE(11 用例 2 失败 5 错误,表现含'期望 IllegalStateException 实为 NullPointerException')。补两个 @Mock 后 11/11 通过,相关模块 310 用例全绿 2026-09-10 14:34:55 +08:00
huangzd1997 08e78ebe55 fix(shop-data-crawl): 累计档迁独立桶 shufu-shop-data 脱离默认桶30天过期规则+修复批量下载zip恒失败——① 新增 aiimage.oss.shop-data-bucket(默认 shufu-shop-data):上传侧 resolveBucket 按 SHOP_DATA_CRAWL、读取/删除/直链侧 bucketForObjectKey 按 result/shop_data_crawl/ 前缀双路路由(DB 里存的是裸 objectKey 不含桶名,key 不变故存量对象 mc mirror 即无缝切换),configuredBuckets 纳入新桶,启动自检未配置时告警 ② 批量下载 zip 原直接把 df.result_file_url 当绝对 URL(URI.create().toURL()),裸 objectKey 必抛 no protocol 导致整包 100% 失败,改由 loadDownloadRows 统一走 generateFreshDownloadUrl 拼直链 ③ 补 OssStorageServiceTest 5 用例覆盖此前零覆盖的上传选桶/裸key前缀路由 2026-09-10 14:31:00 +08:00
huangzd1997 96e93944d9 fix(patrol-delete): 删除条件为空的任务四层拦截——①前端启动前拦截(不再先创建后失败,避免任务残留执行中)并创建时上传delete_conditions ②Java服务端校验删除条件非空(旧版本/直调兜底) ③Python端空条件直接按失败上报,不再逐店空转 2026-09-09 18:59:45 +08:00
huangzd1997 b3f7b81b9c fix(similar-asin): 货源结果图回WPS DISPIMG并修正协议,WPS打开不再#REF/破损
task-284 曾把图片协议改为 WPS DISPIMG(cellimages.xml),WPS 打开显示 #REF;
9/8 切回 Excel 365 richData 单元格图片后,WPS(用户主环境,12.1 实测)仍不识别,
单元格显示为 #VALUE! 错误值即图片破损。

根因:两套协议都只被单方支持——DISPIMG 是 WPS 私有协议,richData 是 Excel 365 私有协议。
本次回到 WPS DISPIMG(WPS 原生),并修复 WpsCellImageWriter 三处与 WPS 原生产物不一致的
协议细节(此前即 #REF 根因,已在 WPS 12.1.0.28505 实测三图渲染正常):
1. [Content_Types].xml 应为 application/vnd.wps-officedocument.cellimage+xml
2. workbook.xml.rels 关系类型应为 wps.cn/officeDocument/2020/cellImage
3. 公式格需 f t=shared ref + v=公式字符串(POI 输出裸 <f> 且引号转义为 &quot;,
   patch 阶段统一规范化;保留原格样式)
另 spPr 补 a:xfrm(原图尺寸)/a:noFill/a:ln w=9525(实测样本对齐);
patch 幂等(重复 patch 不再 duplicate entry);失败图留空不再写 URL 文本。
新增 WpsCellImageWriterProtocolTest 锁死协议契约防回归。
2026-09-09 14:25:41 +08:00
huangzd1997 11d1951c7f fix(collect-data): 品牌检测查询失败不再写入无效品牌表,避免故障期误杀永久拉黑
线上 task-27265 采集结果 0 行的根因:.env 缺 export 导致 Java 请求
16890 不带 X-Token 全线 422 -> 整批 queryFailed,而 filterByBrandCheck
把 queryFailed 与 rejected 一并写入 biz_invalid_asin_data,故障品牌被
永久拉黑,后续任务同品牌商品全部被 invalidFiltered 误杀(9-01 起所有
采集任务均 0 行)。改为仅真正判定无效的 rejected 才写表,rejected 为空
不触发写入;新增 2 个单测固化契约。
2026-09-09 10:26:56 +08:00
huangzd1997 45fdd8a294 feat(software-version): 安装包改浏览器直传 MinIO,支持批量删除
- 后端新增 /api/admin/version/presign、confirm、delete 端点;直传后服务端校验对象并写 web_config
- OSS 层新增软件版本对象 presign PUT/大小校验/删除与 client 桶 URL 识别
- 后台前端上传改 presign→PUT→confirm 三段式直传,带进度条;成功提示精简为"发布成功"
- 版本列表加勾选/表头全选、批量删除与单行删除;操作按钮样式对齐其他子菜单
2026-09-08 23:51:18 +08:00
huangzd1997 197643a8fa fix: 商标查询失败自动重试、货源结果图切回Excel内嵌防WPS #REF、外观专利标题模型改gemini-3.8-flash
- brand-check: 单品牌商标查询失败(异常/空响应/query_faild_data 非空)自动重试,
  次数与间隔可配(retry-times 默认3含首次 / retry-interval-millis 1000),命中侵权不重试;
  collectdata 品牌过滤与外观专利商标核验两侧同时受益
- similarasin: 货源结果Excel图片由WPS DISPIMG 切回 Excel 365 richData 单元格内嵌,
  修复 WPS 打开 DISPIMG 显示 #REF 的兼容回归;下载失败单元格回退为URL文本
- appearance-patent: 标题商标提取模型由 deepseek-v4-flash 切 gemini-3.8-flash
2026-09-08 19:01:08 +08:00
huangzd1997 630bfc3eee fix(shop-data-crawl): 后台店铺数据记录改读每店最新累计档,删除任务不再连坐后台
后台“店铺数据记录”此前以每次抓取的 file_result/file_task 为源,前台删除任务会物理删
这两张表,导致该店在后台退档/消失。现改为以采集归档维护、删除任务时保留的
biz_shop_data_crawl_daily_file 每店最新一档为数据源:
- V113:daily_file 冗余 shop_name 列并回填;归档写档三处入口同步写入
- 列表/批量下载/单档下载/删除端点改按每日累计档 id(daily-files/{id})
- 管理端删除=真删该店这条数据记录(档+文件+明细),前台任务历史保留但清文件指针
- 明细行 daily_file_id 跨天滚动删旧档时改指新档,修存量悬空引用(另附修复脚本)
2026-09-08 15:02:25 +08:00
huangzd1997 4ac8f8b472 fix(pricetrack): ASIN文件路径防本地路径误提交+fileKey兜底反查 2026-09-08 13:34:08 +08:00
huangzd1997 7b6f62f1bc fix(brand): 品牌检测补上传链+新增 /api/brand/run 端点+文件夹展开桥
- BrandBrandTab 对齐其它工具页:选文件/文件夹后先 upload_file_to_java 再提交(服务器可读路径),修复本地路径直传导致的「请先上传待处理文件/没有有效的xlsx文件路径」
- runBrandNow/createBrandTask 改为 files 契约(fileUrl=临时路径 localPath)+ 传 userId
- Java 新增 POST /api/brand/run(等价 /tasks 并返回待爬取数据),修复前端「立即运行」No static resource
- 选择文件夹改走新版桌面客户端桥 expand_brand_folder(本机展开);旧客户端提示改用文件多选
- 生产 .env 已另配 AIIMAGE_BRAND_CHECK_TOKEN(上游 16890 鉴权),非代码变更
2026-09-08 13:18:58 +08:00
huangzd1997 f2906e8d6f fix(delete-brand): 分片缺失降级组装收尾+失败兜底生成可下载结果
- 结果分片缺失 ≤ missingChunkFallbackLimit(默认20) 时降级组装,缺失行标「未回传」,任务不再整体白跑
- 超阈值失败/组装异常时通过 ResultFileJobHandler.fallbackAssembleOnFailure 兜底生成部分结果文件
- 组装失败文案带缺失分片号明细(如 缺失分片: [247](已收 4283/4284))
- 新增 GET /api/delete-brand/tasks/{taskId}/missing-chunks,补传后自动恢复终态失败组装 job
- stale-check 失败文案改为含最后心跳时间与最近组装失败真实原因(修复误导性「回传长时间无响应」)
- 新增降级合并/缺失分片单测,Handler/Worker 日志审计 stage 白名单补 FALLBACK
2026-09-08 13:18:58 +08:00
huangzd1997 d9e3f34d37 chore: 移除项目内无用代码(28 文件)
- 清理任务面板/SPA 化改造遗留的未使用变量与函数(模板管理配套 6 函数、
  payloadForDisplay/showTip/hasRunning/schedulePoll/removeMatchedRowLocally 等 30+ 处)
- 清理未使用 import(getBrandTemplateXlsxUrl/uploadTempFileToJava/getProductRiskTasksBatch 等)
- useTaskProgressLoop 改为仅类型导入;progress/task-request 缓存未用参数精简
- DeleteBrandRunService 删除永不执行的 taskItems 死分支
- 全量 vue-tsc(含 --noUnusedLocals/--noUnusedParameters)0 错误;648 测试全过
2026-09-08 10:20:30 +08:00
huangzd1997 e248b6e43a feat(web): 前端 SPA 化 + 工具页任务面板统一与历史批量删除
- SPA 化:22 个 MPA html 入口与 *-main.ts 合并为 index.html + vue-router(URL 无 .html 后缀),
  页面跳转全部 router-link,/new_web_source/xxx.html 旧路径归一为 /xxx
- 任务面板统一:共享 TaskCenterPanel/TaskItemCard/TaskStatCards/HistoryTaskLayer,
  16 个工具页右侧统一为统计卡 + 当前任务 + 历史任务弹层(任务ID/开始/结束/状态必展示)
- 历史记录支持单条删除 + 批量勾选删除(确认框/全选/失败提示)
- Java 7 模块(dedupe/convert/split/productrisk/shopmatch/pricetrack/deletebrand)
  history 接口补齐任务时间字段(VO+Service,复用 biz_file_task 列)
- 图片工作台/API 层(brand/permission/user)既有未提交改动一并提交
2026-09-08 10:02:55 +08:00
huangzd1997 abcfa5bef7 perf(similarasin): LLM 输入图转存前压缩,规避网关拉图超时
- 主图/拼图转存 MinIO supply_images 前统一走 SimilarAsinImageEmbedder.resizeImage
  (长边 1280 / JPEG q0.75 / 迭代降质至 ≤150KB),体积 1~5MB → 100~300KB
- 根因:LLM 网关按 URL 拉取 OSS 图片,原图过大偶发 context deadline exceeded
  (convert_request_failed),27117 等任务 1 行 LLM 500 即整任务卡死
- 压缩失败降级原字节不阻断行处理;压缩前后字节数 INFO 日志便于线上排查
- SimilarAsinImageEmbedder.resizeImage 由包私有改 public 供复用
2026-09-07 22:28:13 +08:00
huangzd1997 83e38d4278 fix(similarasin): LLM 切换 gemini-3.8-flash + 修复双实例 stale 判死盲区
- 模型切换:glm-5.3-flash / gemini-3.7-flash(类目/合规/图片对比,appearancepatent)→ gemini-3.8-flash
  涉及 SimilarAsinProperties、AppearancePatentProperties、application.yml、TLS 探针与测试断言
- stale 判死盲区:finalizeStaleTasks 去掉 isOwnerCurrent 过滤,改由 job 锁持有实例全局判死
  (任务 27117 线上死因:客户端 done 信号被任务锁拒后断线,owner 过滤导致无人判死,
  被另一实例 job stuck 扫描误判为"文件生成任务运行超时";appearancepatent 同源盲区一并修复)
- 客户端回传重试:3x2s → 8 次,40902 锁忙固定等 15s(app_client/similar_asin.py,随客户端发包生效)
2026-09-07 22:10:20 +08:00
huangzd1997 c5982dd900 feat(admin): 最低价ASIN列表操作列新增整条删除按钮——后端DELETE /skip-price-asins/{id}(权限校验+日志),前端确认弹窗+删空页回退,补单测与对齐测试 2026-09-07 16:05:57 +08:00
huangzd1997 6d6cfcb6ff fix(权限): 店铺数据重复检查仅勾菜单无「店铺数据记录」仍403——校验口径与自动补权对齐(任务/重复检查任一菜单+数据权限即可放行,镜像魏振峰反馈: 只勾103未勾94且数据权限已补仍被拒); 顺带修复 controller 直连 mapper 架构违规 resolveVisibleShopNameKeys 下沉 ShopDataCrawlAdminTasksService 2026-09-07 15:08:43 +08:00
huangzd1997 4994142a67 feat(需求): ①创建/编辑用户菜单权限勾选父菜单自动全选子菜单(el-tree去check-strictly走父子联动,提交前压缩为最小直接授权集,父勾选时后代不重复落库) ②修复管理员勾选店铺数据菜单仍提示'无权查看店铺数据任务'——admin分区授权后若有效授权含店铺数据任务/重复检查菜单(含经'店铺管理'分组展开),自动补内部数据权限 admin_shop_data_crawl_task_data(镜像V84惯例只增不删,回收仍走超管数据范围授权UI) 2026-09-07 14:22:53 +08:00
huangzd1997 e6cf4c2461 fix: 停用登录设备绑定(注释 machine 写入/重绑与 check_login 不一致拒绝)便于多设备/联调;Vue 首页背景图改 /bg.jpg 并补 public 资源、首页/登录布局居中修复 2026-09-07 11:19:42 +08:00
huangzd1997 23e749c973 fix(撞款): 存量迁移修复——①POI zip安全限制放宽(setMaxFileCount/minInflateRatio,旧文件条目数超限整店失败) ②明细批次唯一键放宽(V112 uk→普通索引,同店同日同国同ASIN允许多行) ③迁移失败日志补全堆栈 2026-09-07 03:11:48 +08:00
huangzd1997 5f8c469b8e feat(需求): 撞款重复检查改查数据库——①采集明细先落库再更新文件(V111 biz_shop_data_crawl_item行级明细,归档时countryResults展开,同店同日幂等替换) ②撞款扫描换源直接查明细表(不再解析OSS xlsx,修复旧文件表头差异致4家店静默丢弃) ③存量Excel数据自动迁移(日报快照row_payload优先+OSS宽松表头回退:ASIN码/小写兼容) ④移除84家店铺全量空态注入(重复检查基数=已采集店,超管口径8家) ⑤新增明细聚合/宽松解析单测6个 2026-09-07 02:43:37 +08:00
huangzd1997 d3f5a371e3 feat(撞款+用户): ①扫描基线与店铺表全量对齐——无结果文件的店以空态(0记录+分组标签)注入扫描,撞款控制台超管可见全部店铺(实测 shop_count 83=全量) ②用户列表支持 role 筛选参数 ③修复 toItem creatorMap.getOrDefault(null) 在不可变 Map 的 NPE 2026-09-07 02:43:37 +08:00
huangzd1997 35bed42b73 fix(筛选契约): 去重汇总/品牌库/查询ASIN 列表与导出接口 @RequestParam 显式 snake_case(page_size/group_id/data_value/shop_name/start_date/end_date),与前端 asin-filter 序列化对齐——修复全站筛选/分页不生效(前端snake vs 后端裸camel全不匹配) 2026-09-07 02:43:37 +08:00
huangzd1997 26e062d32c task-284(收尾/在途批次): 页头按钮归位卡内toolbar+店铺数据记录改名+弹窗报错清除; Java page_size配对/按角色数据范围过滤/撞款导出XLSX/Excel图改WPS DISPIMG/V110查询索引 2026-09-07 02:43:36 +08:00
huangzd1997 898fae4cb3 align(用户菜单授权): 创建/编辑用户菜单权限补齐前端客户端(app)菜单并按类型分区落库
用户管理菜单权限此前只含后台 admin(单类型):前端授权树/回显仅拉 menuType=admin,
后端 replaceDirectPermissions 也固定用 ADMIN 作用域写。现改为同时覆盖 后台(admin)+前端客户端(app):
- 前端 user-menu-auth 节点携带 type,api 并行拉取 admin/app 两类可授权树与已授权 id 合并去重,树内两类根并存(账号与权限/视频/前端工具/运营工具/后勤工具等)
- 后端 PermissionMenuService 新增 resolveMenuTypes(按 id 解析类型);AdminUserService create/update 把勾选 id 拆 admin/app 分区整树替换(internal 不纳入)
- 前端 1556 测试全绿 + build 通过;后端单测(AdminUserServiceTest/PermissionMenuServiceTest/Controller/PermissionMenuResolveTypeTest) EXIT 0
- 本地 E2E:创建用户写入 admin=7+app=3 → 按类型回读 admin[7]/app[3],删除正常
2026-09-07 02:43:36 +08:00
huangzd1997 1da4511dd9 fix(admin): 后台入口 /admin /login 用 sendRedirect 产生真实 302
@RestController 下返回 redirect: 字符串只会原样写进 200 响应体,
浏览器不会跳转。页面入口方法改为 HttpServletResponse.sendRedirect 302
到 /admin-vue/,旧 /admin.html、/login.html 一并兜底。
2026-09-06 11:01:04 +08:00
huangzd1997 4c88964473 task-283(后台迁移收尾/发布): admin-vue 后台工程入库 + Flask 后台整体退役
- 新后台 admin-frontend-vue 整工程入库(base=/admin-vue/、History 路由、Nginx 静态托管方案与 verify-dist 校验)
- Java AdminConsoleController 改为入口重定向: /admin|/admin.html、/login|/login.html -> /admin-vue/; 删除 classpath:static 旧 admin.html/login.html 单页与 admin.js 副本
- Flask 后台整体退役: 删除 admin_api/auth/main 蓝图、web_source 页面、static 脚本与 admin 相关测试; app.py 收敛为仅注册 version_bp(/api/version、/api/version/latest, 供桌面端更新检查)
- AdminApiGuardFilterTest 豁免样例路径 /admin.html -> /admin-vue/
2026-09-06 10:41:47 +08:00
huangzd1997 ab787ceff7 task-280(验收反馈): 重复检测对齐reference P0(分组筛选生效/抽屉聚合+汇总徽章/台账计数预载/total_dup计数/矩阵表头吸顶;后端含工作区在途console化代码) 2026-09-06 02:41:44 +08:00
huangzd1997 648935e757 task-278(验收反馈): 生成记录加清理数据功能(DELETE /api/admin/history 二次确认+条数提示;含工作区在途的 imagehistory 分页优化) 2026-09-06 02:25:44 +08:00
huangzd1997 6e2e4bf8e7 task-275(验收反馈): 菜单权限标识/路由后台自动生成(menu_auto_/auto/ 前缀),表单移除两项输入;编辑缺省保持原值 2026-09-06 01:57:17 +08:00
huangzd1997 5e5658b00d fix(backend-java): Flyway V100 撞号修复配套(迁移矩阵补全16键/测试引用改指V109) 2026-09-06 01:44:14 +08:00
huangzd1997 9ac4eda054 task-271(验收反馈): Element Plus 全局接入 zh-cn 语言包(日期控件/分页组件中文) 2026-09-06 01:44:06 +08:00
huangzd1997 e45ab1da9e task-179(客户端公开版本接口兼容): Task179Test 契约测试 RED→GREEN。 2026-09-05 18:06:28 +08:00
huangzd1997 05d19626a1 task-178(客户端公开版本接口兼容): Task178Test 契约测试 RED→GREEN。 2026-09-05 18:06:28 +08:00
huangzd1997 cf750a26d4 task-177(客户端公开版本接口兼容): Task177Test 契约测试 RED→GREEN。 2026-09-05 18:06:28 +08:00
huangzd1997 656dc7ce2f task-176(客户端公开版本接口兼容): Task176Test 契约测试 RED→GREEN。 2026-09-05 18:06:27 +08:00
huangzd1997 37d3dc8a4c task-175(客户端公开版本接口兼容): Task175Test 契约测试 RED→GREEN。 2026-09-05 18:06:27 +08:00
huangzd1997 74691acdf9 task-174(客户端公开版本接口兼容): Task174Test 契约测试 RED→GREEN。 2026-09-05 18:06:27 +08:00
huangzd1997 46f1d27478 task-173(客户端公开版本接口兼容): Task173Test 契约测试 RED→GREEN。 2026-09-05 18:06:26 +08:00
huangzd1997 ea9b263af3 task-172(客户端公开版本接口兼容): Task172Test 契约测试 RED→GREEN。 2026-09-05 18:06:26 +08:00
huangzd1997 95af9667f6 task-171(客户端公开版本接口兼容): Task171Test 契约测试 RED→GREEN。 2026-09-05 18:06:26 +08:00