From 7e3d6c74fa92ef3e89a64dec5c1f0c3ad4f351a9 Mon Sep 17 00:00:00 2001 From: maogeigei Date: Tue, 1 Sep 2026 14:56:46 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=B7=A5=E4=BD=9C=E5=8F=B0):=20=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E5=88=97=E8=A1=A8=E5=8A=A0=E6=94=B6=E8=97=8F=E5=88=97?= =?UTF-8?q?+=E6=95=B0=E5=AD=97=E5=88=97=E5=8F=B3=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=EF=BC=8C=E8=A7=86=E9=A2=91=E8=AF=A6=E6=83=85=E9=A1=B5=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=B8=89=E8=A1=8C+=E6=A0=87=E7=AD=BE=E6=8E=92?= =?UTF-8?q?=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .workbuddy/memory/2026-09-01.md | 48 +++++++ .../V1.0/mcn-work-shop/cdp-measure-cols.mjs | 58 ++++++++ .../V1.0/mcn-work-shop/cdp-measure-cols2.mjs | 75 ++++++++++ .../V1.0/mcn-work-shop/cdp-measure-cols3.mjs | 80 +++++++++++ .../V1.0/mcn-work-shop/cdp-verify-collect.mjs | 74 ++++++++++ .../V1.0/mcn-work-shop/cdp-verify-footer.mjs | 130 ++++++++++++++++++ .../V1.0/mcn-work-shop/cdp-verify-noall.mjs | 83 +++++++++++ .../mcn-work-shop/cdp-verify-numalign.mjs | 72 ++++++++++ .../mcn-work-shop/cdp-verify-title-link.mjs | 90 ++++++++++++ .../mcn-work-shop/cdp-verify-videoinfo.mjs | 83 +++++++++++ .../V1.0/mcn-work-shop/public/data-pages.js | 47 ++++--- .../V1.0/mcn-work-shop/public/style.css | 17 ++- 12 files changed, 830 insertions(+), 27 deletions(-) create mode 100644 project/短视频脚本创作/V1.0/mcn-work-shop/cdp-measure-cols.mjs create mode 100644 project/短视频脚本创作/V1.0/mcn-work-shop/cdp-measure-cols2.mjs create mode 100644 project/短视频脚本创作/V1.0/mcn-work-shop/cdp-measure-cols3.mjs create mode 100644 project/短视频脚本创作/V1.0/mcn-work-shop/cdp-verify-collect.mjs create mode 100644 project/短视频脚本创作/V1.0/mcn-work-shop/cdp-verify-footer.mjs create mode 100644 project/短视频脚本创作/V1.0/mcn-work-shop/cdp-verify-noall.mjs create mode 100644 project/短视频脚本创作/V1.0/mcn-work-shop/cdp-verify-numalign.mjs create mode 100644 project/短视频脚本创作/V1.0/mcn-work-shop/cdp-verify-title-link.mjs create mode 100644 project/短视频脚本创作/V1.0/mcn-work-shop/cdp-verify-videoinfo.mjs diff --git a/.workbuddy/memory/2026-09-01.md b/.workbuddy/memory/2026-09-01.md index fa0ed3f..d0b735b 100644 --- a/.workbuddy/memory/2026-09-01.md +++ b/.workbuddy/memory/2026-09-01.md @@ -204,3 +204,51 @@ - **发现并修复 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 '*'** + +## 09-01 14:5x 清理误提交的 mcn-plugin.db(git 卫生) +- **发现**:提交 b049cca 时 `git add -A` 误纳入两个数据库文件——仓库根目录 `mcn-plugin.db`(0 字节空文件,测试误生成)+ `project/短视频脚本创作/V1.0/mcn-work-shop/mcn-plugin.db`(4.2MB 真实数据,俊希账号等) +- **处理(治本)**:`git rm --cached` 两个文件(工作区文件保留,真实数据库未动)+ 物理删除根目录 0 字节空文件 + .gitignore 追加 `mcn-plugin.db`/`**/mcn-plugin.db` 规则 → 提交 3d65774(3 files changed);验证 `git ls-files | grep mcn-plugin` = 0 跟踪 +- **教训**:`git add -A` 前必须检查是否有大文件/数据库/二进制文件混入;db 类文件应永不在版本库 + +## 09-01 14:36 批量操作条与分页组件同行(UI 微调) +- **需求**:批量操作和分页组件放一行,不需要换行 +- **实现**:data-pages.js 三处(renderAccounts/renderAccountDetail/renderRewrites)将 `batchBarHtml + pagerHtml` 包进 `

视频列表

-
${bstate.batch ? '' : ''}${rows || ``}
发布时间视频ID视频标题点赞评论分享时长操作
暂无视频数据
- ${batchBarHtml(bstate, 0)} - ${pagerHtml(dv.total, dv.page, 20, (p) => { page = p; load(); })}`; +
${bstate.batch ? '' : ''}${rows || ``}
发布时间视频标题点赞评论分享收藏时长操作
暂无视频数据
+ `; } else if (tab === 'persona') { if (!persona) { panel = `
@@ -541,12 +544,12 @@ async function renderVideoDetail(view, id) {
${toolbarBack()}${esc(cleanTitle(v.video_title) || '视频详情')}
-
- ${infoGrid('视频标题', titleVal, true, true)}${infoGrid('账号', v.account_name)}${infoGrid('视频ID', v.aweme_id)} - ${infoGrid('点赞', fmtWan(v.like_display || v.like_count))}${infoGrid('评论', fmtWan(v.comment_count))}${infoGrid('分享', fmtWan(v.share_count))} - ${infoGrid('收藏', v.collect_count)}${infoGrid('播放', (v.play_count == null || Number(v.play_count) === 0) ? null : v.play_count)}${infoGrid('时长', fmtDuration(v.duration))} - ${infoGrid('发布时间', v.publish_time)}${infoGrid('标签', v.tags, true)} -
+
+
${titleVal}
+
${infoGrid('账号', v.account_name)}${infoGrid('视频ID', v.aweme_id)}${infoGrid('时长', fmtDuration(v.duration))}${infoGrid('发布时间', v.publish_time)}
+
${infoGrid('点赞', fmtWan(v.like_display || v.like_count))}${infoGrid('评论', fmtWan(v.comment_count))}${infoGrid('分享', fmtWan(v.share_count))}${infoGrid('收藏', fmtWan(v.collect_count))}
+
${infoGrid('标签', v.tags, true)}
+
${tabBtns}
${body}
@@ -595,8 +598,10 @@ async function renderRewrites(view) { ${state.batch ? '' : ''}账号视频标题点赞评论分享时长发布时间状态AI脚本操作 ${rows || `暂无视频数据`}
- ${batchBarHtml(state, 0)} - ${pagerHtml(d.total, d.page, state.pageSize, (p) => { state.page = p; load(); })} +
`; bindBack(view); view.querySelector('#rwSearch').addEventListener('keydown', (e) => { if (e.key === 'Enter') { state.search = e.target.value; state.page = 1; load(); } }); diff --git a/project/短视频脚本创作/V1.0/mcn-work-shop/public/style.css b/project/短视频脚本创作/V1.0/mcn-work-shop/public/style.css index 2acbab7..98b2470 100644 --- a/project/短视频脚本创作/V1.0/mcn-work-shop/public/style.css +++ b/project/短视频脚本创作/V1.0/mcn-work-shop/public/style.css @@ -322,6 +322,7 @@ main#view { height: calc(100vh - 55px); overflow: auto; } /* 55px=topbar 实际 .sortable:hover { color: var(--primary); } .table th.th-wide { min-width: 90px; text-align: right; } /* 周榜数值列表头(综合得分/粉丝/新增粉丝/点赞/评论/分享):窄 + 右对齐(提特异性压过 .table th 默认左对齐) */ .table td.num { text-align: right; font-size: 13px; font-variant-numeric: tabular-nums; padding-left: 8px; padding-right: 8px; } /* 数值列单元格:右对齐 + 紧凑(等宽数字,内容窄于 90px 让 min-width 生效) */ +.table th.num { text-align: right; } /* 数值列表头(点赞/评论/分享/收藏/时长):与 td.num 右对齐配套 */ /* 周榜表:fixed 布局固定列宽(auto 布局下 100% 表格富余空间会按比例摊薄拉宽列,min-width 压不住;fixed 下 width 为硬约束,账号列吃剩余) */ .table.table-rank { table-layout: fixed; } .table.table-rank th, .table.table-rank td { overflow: hidden; text-overflow: ellipsis; } @@ -348,9 +349,11 @@ main#view { height: calc(100vh - 55px); overflow: auto; } /* 55px=topbar 实际 .tab-active { color: var(--primary); font-weight: 600; border-bottom-color: var(--primary); } /* 数据页列表标题(如账号视频列表):与上方内容间隔 20px */ .video-list-title { margin: 20px 0 10px; font-size: 17px; font-weight: 600; } -/* 视频ID 列紧凑:小号数字,宽度刚好容纳 ID */ -.td-id { font-size: 13px; font-variant-numeric: tabular-nums; padding-left: 8px; padding-right: 8px; } -th.th-id { width: 120px; } +/* 账号详情视频列表:发布时间列收窄 20px(155→135);标题列 th 不设固定宽度(auto 自然分配,避免钳制列宽), + td 内容显示上限 220→240px(标题多显示 20px 内容) */ +th.th-pub { width: 135px; } +td.td-pub { font-variant-numeric: tabular-nums; } +td.td-title { max-width: 240px; } /* ================= 账号设定 卡片版/文字版 切换(右上角图标按钮组) ================= */ .persona-wrap { position: relative; padding: 0 20px; } /* 账号设定内容左右各 20px 间隔 */ @@ -374,6 +377,8 @@ th.th-id { width: 120px; } .info-row .info-item.info-wide { flex: 1 1 auto; min-width: 0; max-width: 100%; } /* 09-01 修复横向溢出:info-wide 允许收缩,否则长内容把 main 撑出横向滚动条 */ .info-label { font-size: 14px; color: var(--dim); } .info-value { font-size: 15px; color: var(--text); word-break: break-word; white-space: pre-wrap; line-height: 1.6; } +/* 视频详情信息卡:标题独立一行(大字号),下方按行分组 */ +.video-info .video-detail-title { font-size: 18px; font-weight: 600; color: var(--text); margin-bottom: 14px; word-break: break-word; line-height: 1.5; } /* 长文本默认最多 10 行,可点击展开/收起(账号定位等) */ /* 09-01 改用 block+max-height 裁剪:display:-webkit-box 下长句不折行,内容宽被撑到 1896px 导致 main 横向滚动条 */ .clamp-text { display: block; max-height: 240px; overflow: hidden; word-break: break-word; overflow-wrap: anywhere; } /* 240px=10行×15px×1.6 */ @@ -478,12 +483,12 @@ th.th-id { width: 120px; } .top-actions .ghost .ic { color: var(--dim); } .top-actions .ghost:hover .ic { color: var(--primary); } -/* ================= 列表批量操作(左下角)================= */ -.list-batchbar { display: flex; align-items: center; gap: 10px; padding: 8px 4px 2px; min-height: 34px; } +/* ================= 列表批量操作(左下角,与分页同行)================= */ +.list-footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; } +.list-batchbar { display: flex; align-items: center; gap: 10px; padding: 12px 4px; min-height: 34px; } .btn-icon { display: inline-flex; align-items: center; justify-content: center; padding: 5px 9px; } .btn-danger { background: #fff; border-color: var(--danger); color: var(--danger); } .btn-danger:hover { background: var(--danger); border-color: var(--danger); color: #fff; } -.batch-all-label { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; user-select: none; font-size: 14px; color: var(--text); } .batch-count { font-size: 14px; color: var(--dim); } .batch-count-n { color: var(--danger); font-weight: 600; } .cb-cell { width: 36px; text-align: center; }