R30: 列表页 toolbar 拆行 — 标题行只放返回+标题,tab/筛选/搜索/功能按钮一律放标题下一行

- renderAccounts:page-toolbar 内 toolbar-right(类型/赛道下拉 + 搜索 + 添加 + 更新)挪到独立 .acc-toolbar 行
- renderHot:page-toolbar 内 rank-tabs(3 tab) + toolbar-right(赛道/日期)挪到独立 .rank-toolbar 行
- 间距差异化:账号列表 4px(工具栏紧贴标题,功能性组合)/ 热点数据 16px(tab 区段独立感);微调自 -12px 一致间距后按用户反馈拆开
- 冒烟 cdp-verify-r30.mjs PASS:账号列表/热点数据/AI写脚本 三页 toolbar 结构正确(只含返回+标题,功能组件均下移)
- 版本 ?v=20260903o

审查结论合规页(标题行仅返回+标题):
- renderAccountDetail/VideoDetail/Rewrites(已在 R27 修)/Reviews(pager-info 是统计信息非功能)
This commit is contained in:
maogeigei committed 2026-09-03 16:15:02 +08:00
1 parent fff261e6de
commit e858929b1b
4 files changed
+100 -7

No files matched your search

@@ -518,15 +518,17 @@ async function renderRanking(view) {
const st = { week: mkState(), hot: mkState(), likes: mkState() };
let tab = 'week';
const tabLabel = () => { const t = RANK_TABS.find(([k]) => k === tab); return t ? t[1] : ''; };
// tab 切换 + 赛道选择 + 时间切换 同一行(page-toolbar:返回 | 标题 | tabs | 筛选右;空/错误态不渲染筛选)
// tab 切换 + 赛道选择 + 时间切换 同一行(标题行只放 返回 | 标题,tab + 筛选放标题下一行 .rank-toolbar)
const toolbar = (s, withFilters) => `
<div class="page-toolbar">
${toolbarBack()}
<span class="page-title">热点数据</span>
</div>
${withFilters ? `<div class="rank-toolbar">
<div class="rank-tabs" role="tablist">
${RANK_TABS.map(([k, label, tip]) => `<button class="rank-tab${k === tab ? ' active' : ''}" data-rank-tab="${k}"${tip ? ` title="${tip}"` : ''} role="tab">${label}</button>`).join('')}
</div>
${withFilters ? `<div class="toolbar-right">
<div class="toolbar-right">
<select id="rankCat" class="input-select" title="赛道筛选">
<option value="">全部赛道</option>
${s.categories.map((c) => `<option value="${esc(c)}" ${c === s.category ? 'selected' : ''}>${esc(c)}</option>`).join('')}
@@ -534,8 +536,8 @@ async function renderRanking(view) {
<button class="btn" id="rankPrev" title="上一期">◀</button>
<span class="pager-info" title="选择日期">${esc(s.date)}</span>
<button class="btn" id="rankNext" title="下一期">▶</button>
</div>` : ''}
</div>`;
</div>
</div>` : ''}`;
// 标题列统一截断(作品标题很长):悬停 title 看全文
const titleTd = (text, url) => `<span class="rk-tl" title="${esc(String(text || '').replace(/"/g, '&quot;'))}">${url ? `<a class="link" data-ext="${esc(url)}">${esc(text)}</a>` : esc(text)}</span>`;
@@ -691,6 +693,8 @@ async function renderAccounts(view) {
<div class="page-toolbar">
${toolbarBack()}
<span class="page-title">账号列表</span>
</div>
<div class="acc-toolbar">
<div class="toolbar-right" style="margin-right:10px">
<select id="accType" class="input-select">
<option value="all" ${state.type === 'all' ? 'selected' : ''}>全部</option>
@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MCN工作台</title>
<link rel="stylesheet" href="style.css?v=20260903l">
<link rel="stylesheet" href="style.css?v=20260903o">
<script src="vendor/echarts.min.js"></script>
</head>
<body>
@@ -41,7 +41,7 @@
</div>
</div>
<script src="app.js?v=20260903l"></script>
<script src="data-pages.js?v=20260903l"></script>
<script src="app.js?v=20260903o"></script>
<script src="data-pages.js?v=20260903o"></script>
</body>
</html>
@@ -661,6 +661,10 @@ td.td-title { max-width: 240px; }
.rw-tab-badge { display: inline-block; min-width: 18px; margin-left: 6px; padding: 0 6px; border-radius: 10px; background: var(--primary-soft); color: var(--primary); font-size: 12px; line-height: 18px; font-weight: 600; text-align: center; }
.tab-active .rw-tab-badge { background: var(--primary); color: #fff; }
.rw-note { font-size: 12px; color: var(--dim); margin: 0 0 12px; }
/* 列表页统一:标题下一行 = tab + 筛选/搜索/功能按钮(均不与标题/返回同行) */
.acc-toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: -20px 0 16px; padding: 0 4px; }
.rank-toolbar { display: flex; align-items: center; gap: 14px; margin: -8px 0 16px; padding: 0 4px; }
.rank-toolbar .rank-tabs { flex: 1; }
/* 视频状态「已解析」:浅绿色文字(去图标),区别于默认灰「未解析」 */
.st-parsed { color: #52b788; font-weight: 500; }
.rw-chip { display: inline-flex; align-items: center; gap: 2px; max-width: 260px; padding: 2px 8px 2px 12px; background: var(--primary-soft); color: var(--primary); border-radius: 999px; font-size: 13px; }