feat(工作台): 三列表(账号/视频/AI写脚本)批量操作——左下角图标按钮+勾选批量删除

- 后端: dsh-data.js batchDelete(kind,ids)——accounts 软删(del_flag=1)+连坐清 persona/analysis/videos/source/analysis/rewrite_log; videos|rewrites 删视频行+关联(video_id 与 aweme_id 双键,兼容 video_id=null 历史行); server.js POST /api/dsh/batch-delete(kind 校验+空 ids 幂等)
- 前端: data-pages.js batchBarHtml/bindBatchBar + 三列表勾选列+左下角批量操作条; 图标版——app.js 新增 check-square/trash 图标, 批量模式图标右侧出 trash/x+全选+计数; style.css 批量样式+--danger
- 修复 P0: 账号连坐删除漏删 account_videos 行(孤儿残留), 已补并复验
- 验证: API 实测(删测试账号/视频连坐全清+非法kind+空ids) + CDP UI 33项PASS + 端到端删除 PASS(cdp-verify-batch.mjs / cdp-verify-batch-e2e.mjs)
This commit is contained in:
maogeigei committed 2026-09-01 14:31:46 +08:00
1 parent 838aa4d443
commit b049cca766
11 files changed
+390 -9

No files matched your search

+8
View File
@@ -196,3 +196,11 @@
- **实现(server.js 启动段)**:`cleanupExpiredSessions()` 软删除(置 deleted_at)workbuddy.db sessions 表——cwd LIKE '%mcn-workshop%'(与 /api/run cwd 常量一致)+ status='completed'(working 执行中绝不删)+ deleted_at IS NULL + COALESCE(last_activity_at, updated_at, created_at, 0) < now-6h;启动时执行一次 + setInterval 每小时自动检查;删除条数 log 输出
- **字段判定依据**:sessions 表 cwd 区分空间(mcn-workshop 10 条);时间用 last_activity_at(最后活动)最准——442280f0 的 updated_at 曾被系统触碰(3h 前)但 last_activity 实为 14.1h 前,故以 last_activity 优先
- **实测**:重启服务 → 清除 9 条(13.6h~114.8h)保留 1 条(俊希创作 1.5h)working 零误删
## 09-01 14:3x 三列表批量操作(用户:账号列表/视频列表/AI写脚本列表 左下角批量操作,图标按钮,勾选批量删除)
- **需求**:三列表左下角批量操作(图标),点击后每行出现勾选框,勾选后批量删除
- **后端**:dsh-data.js 新增 `batchDelete(kind, ids)`——accounts=软删(del_flag=1)+连坐清 persona/analysis/videos/source/analysis/rewrite_log;videos|rewrites=删视频行+关联(video_id 与 aweme_id 双键,因 source/analysis 有 video_id=null 行);server.js 新增 `POST /api/dsh/batch-delete`(kind 校验+空 ids 幂等)
- **前端**:data-pages.js 新增 batchBarHtml/bindBatchBar helpers + 三列表插入勾选列(cb-cell)+ 左下角批量操作条;**图标版**(用户要求)——app.js ICON_PATHS 新增 check-square(批量操作入口)/trash(删除所选),取消用 x;批量模式下图标右侧出现 trash/x 图标 + 全选 + 已选计数;style.css 加 .list-batchbar/.btn-danger/.cb-cell 等 + --danger 变量
- **发现并修复 P0 bug**:账号连坐删除漏删 account_videos 行(只删了关联表,孤儿视频残留)——补 `DELETE FROM account_videos WHERE account_id IN (...)`,用测试数据复验全 0 残留
- **验证三层闭环**:①API 实测(删测试账号 1632/1634+视频 682:deleted=1、连坐全清、非法 kind 400、空 ids 幂等)②CDP UI 33 项 PASS(cdp-verify-batch.mjs:三列表批量图标/勾选列/trash/x/全选/计数/取消恢复,纯图标无文字)③端到端删除 PASS(cdp-verify-batch-e2e.mjs:UI 勾选→confirm→API→列表刷新→测试行消失+库零残留;测试视频置顶技巧:publish_time='2099-01-01' 排第一页)
- **沙箱代理发现(重要)**:Bash 会话环境有 HTTP_PROXY/HTTPS_PROXY=http://127.0.0.1:7505(sandbox-cli.exe 监听,WorkBuddy 沙箱运行时注入,非用户系统配置)——curl localhost 会走代理转发失败(502/连接拒绝)→ **curl 工作台 API 必须加 --noproxy '*'**
+1
View File
@@ -42,6 +42,7 @@
- **技能版本标签(08-26)**:frontmatter 存 `updated_at`+`last_change`+`deployment`;源=`source`+`created_at`+`updated_at`,副本=`dsh`+`updated_at`+`deployed_at`;副本 deployed_at<源updated_at=滞后
- **.dsh 单向只读(08-22 强约束)**:`.dsh` 副本只能「读取→回流源技能」,禁止反向写回(除非用户明确授权);允许1处环境差异
- **git(09-01 改)**:**2 小时 push 一次**(不要改一点就推;2026-08-31 原定「半天一次」,09-01 用户改为 2 小时);本地可随时 commit,push 攒到 2 小时统一推;push 前先 fetch 确认无分叉;Windows 下 PowerShell Stop-Process 关后台 node;全局代理 socks5 会破坏 git 连接需清空
- **沙箱代理(09-01)**:Bash 会话环境有 `HTTP_PROXY/HTTPS_PROXY=http://127.0.0.1:7505`(sandbox-cli.exe 监听,WorkBuddy 沙箱注入,非用户系统配置)——**curl 本地 localhost 服务必须加 `--noproxy '*'`**,否则走代理转发失败(502/连接拒绝);工作台服务用 `node server.js` + Bash run_in_background 启动(`(cmd &)` 子 shell 方式进程会被回收)
- **生成网页必参考设计技能(08-27 强约束)**:先读 `.workbuddy/skills/` 下 taste-skill 与 impeccable 再动手
## 历史事件(摘要)