diff --git a/.workbuddy/memory/2026-09-03.md b/.workbuddy/memory/2026-09-03.md index 743bcee..c6bba0e 100644 --- a/.workbuddy/memory/2026-09-03.md +++ b/.workbuddy/memory/2026-09-03.md @@ -420,3 +420,17 @@ - **冒烟断言口径坑(3 FAIL 全为此)**:**源列默认收起 → 打开弹窗初始可见列=2(AI+右侧)不是 3**;AI 宽度占比基准应取 `.rw-stack` 内容宽而非 `.rw-modal` 宽(modal 有 padding 26px×2,占 modal 宽 95% 即已满) - **回归**:R40 冒烟版本断言更新(ab/ac→ac/ad)后复跑 16/16 全绿——R41 未破坏 R40 就地刷新架构 - **R40-R41 待提交**:data-pages.js/style.css/app.js/index.html + 记忆日志本节;本地 HEAD=03de8be(R39 已 push origin/main) + +## R42 视频详情返回语义(09-03 定位中,未落地) +- **需求**:「账号详情 点击 视频列表 再点击列表中视频标题 打开视频详情页,点击返回,回到账号详情tab,而不是视频列表tab」 +- **代码事实**:账号详情 tab(info=账号信息/persona=视频列表/analysis=数据分析)纯 JS 切换**不写 hash**;视频标题 `` 标准 hash 导航;bindBack=history.back() → 返回前一 hash → renderAccountDetail 重新整页渲染(tab 闭包全新=info) +- **落点规律**:返回落哪个 tab 取决于账号详情历史条目的 hash——仅 `#/account/:id` → 落「账号信息」;若进入时带 `/persona` 第三段(测试深链习惯 `#/account/1629/persona`)→ 落「视频列表」 +- **方案候选**:A=tab 切换同步 replaceState 写第三段 hash(保持离开位置);B=从视频详情返回强制回账号信息。语义待用户澄清后再实施 + +## R43 网页改名 MCN热点雷达(09-03 19:20) +- **需求**:「MCN创意雷达 改为 MCN热点雷达」——纯显示层文字替换(R39 改名同款范围),技能注册名「短视频工作台」/目录名 mcn-work-shop 不动 +- **改动 6 文件**:index.html ``、app.js L1 注释+面包屑 2 处(无 name span 分支 + 有 name a 分支)、data-pages.js L1 注释、style.css L1 注释、server.js L1 注释+L974 启动日志、dsh-data.js L1 注释 +- **版本**:app.js 20260903x→y(面包屑渲染变化;**顺带修复 R41 改 ICON_PATHS 后 app.js 未 bump 的缓存隐患**);style.css ac / data-pages.js ad 仅注释变更不 bump +- **CDP 冒烟** `tmp/r43-brand.mjs`(9225)**8/8 PASS**:三资源版本(ac/y/ad)/ 标题=MCN热点雷达 / 首页面包屑无分隔=热点雷达 / #/accounts 面包屑 前缀+当前 两段 +- **坑**:首次运行瞬态退出码 23 无输出(重跑即过);页面为改动前旧加载需先 Page.navigate ignoreCache 强刷再断言;server.js 纯文字改动无需重启(文件服务即时生效,启动日志仅下次 boot 显示) +- **commit 52a5058 已 push origin/main**(dfef295..52a5058) diff --git a/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js b/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js index 54ba522..a1e9473 100644 --- a/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js +++ b/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js @@ -915,9 +915,17 @@ function updateFollowedAccounts(btn) { async function renderAccountDetail(view, id) { const accountId = Number(id); let page = 1, tab = 'info'; - // hash 第三段支持直达指定 tab:#/account/1629/persona → 视频列表(含趋势图) + // hash 第三段支持直达指定 tab:#/account/1629/persona → 视频列表(含趋势图);第四段=视频列表翻页页码 const seg = (location.hash || '').replace(/^#\/?/, '').split('/'); if (seg.length >= 3 && ['info', 'persona', 'analysis'].includes(seg[2])) tab = seg[2]; + if (seg.length >= 4 && tab === 'persona') { const p = Number(seg[3]); if (p >= 1) page = p; } + // 当前 tab/翻页 replaceState 同步进 hash(不进历史记录):从视频详情等页面返回时能恢复离开前的视图 + function syncHash() { + let h = '#/account/' + accountId; + if (tab !== 'info') h += '/' + tab; + if (tab === 'persona' && page > 1) h += '/' + page; + if (h !== location.hash) history.replaceState(null, '', h); + } const bstate = { batch: false }; const d = await api('/api/dsh/account-videos?accountId=' + accountId + '&page=1&pageSize=20').catch((e) => ({ ok: false, error: e.message })); if (!d.ok) { view.innerHTML = `<div class="page"><div class="page-toolbar">${toolbarBack()}</div><div class="empty">${esc(d.error || '账号不存在')}</div></div>`; bindBack(view); return; } @@ -1029,9 +1037,10 @@ async function renderAccountDetail(view, id) { view.querySelectorAll('[data-tab]').forEach((b) => b.addEventListener('click', async () => { tab = b.dataset.tab; if (tab === 'analysis' && analysis === null) await loadAnalysis(); + syncHash(); load(); // info tab 的账号设定加载已在 load() 内处理 })); - bindPager(view, (p) => { page = p; load(); }); + bindPager(view, (p) => { page = p; syncHash(); load(); }); bindBatchBar(view, { state: bstate, kind: 'videos', getSelected: () => [...view.querySelectorAll('.batch-cb:checked')].map((c) => Number(c.dataset.id)), diff --git a/project/短视频脚本创作/V1.0/mcn-work-shop/public/index.html b/project/短视频脚本创作/V1.0/mcn-work-shop/public/index.html index d0afe40..d88e9c1 100644 --- a/project/短视频脚本创作/V1.0/mcn-work-shop/public/index.html +++ b/project/短视频脚本创作/V1.0/mcn-work-shop/public/index.html @@ -42,6 +42,6 @@ </div> <script src="app.js?v=20260903y"></script> -<script src="data-pages.js?v=20260903ad"></script> +<script src="data-pages.js?v=20260903ae"></script> </body> </html>