R36: 榜单下载按钮移至 tab 组件右侧(重构 toolbar,tab 上移 page-toolbar)
- 用户反馈:下载按钮「靠近 tab 组件,不是筛选/搜索组件」 - 冲突排查:原 toolbar(s, false) 空态时 rank-toolbar 不渲染,若简单把按钮移进 rank-toolbar 会丢失 R33 设计的「空态也能看到更新按钮(首次抓取入口)」 - 重构 toolbar() 函数: - tab 始终在 page-toolbar 渲染(含空态/错误态) - rankUpdate 紧贴 tab 右侧(rank-tabs margin-left:auto 推右,按钮紧跟其后) - rank-toolbar 仅放筛选+翻页(withFilters 时) - 复用 CSS:.page-toolbar .rank-tabs 紧凑样式(L603-604 已就绪) - CDP 验证:tab+rankUpdate 都在 page-toolbar ✓;筛选保留 ✓ - 版本:data-pages.js x→y(CSS 不动)
This commit is contained in:
1 parent
373710c325
commit
82beea2ddc
3 files changed
+28
-15
No files matched your search
@@ -522,20 +522,13 @@ 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 切换 + 赛道选择 + 时间切换 同一行(标题行只放 返回 | 标题,tab + 筛选放标题下一行 .rank-toolbar)
|
||||
// 09-03 更新榜单按钮放标题行最右(.toolbar-right):三榜 tab 切换与空态(无本地数据文件)均可见,便于首次抓取
|
||||
const toolbar = (s, withFilters) => `
|
||||
<div class="page-toolbar">
|
||||
${toolbarBack()}
|
||||
<span class="page-title">热点数据</span>
|
||||
<div class="toolbar-right">
|
||||
<button class="btn btn-icon" id="rankUpdate" title="更新榜单数据:后台任务重新抓取三榜(账号周榜 5 赛道 / 视频热榜 / 点赞榜)最新一期并落盘;30 分钟内已更新会拦截防重复">${svgIcon('download', 16, 'currentColor')}</button>
|
||||
</div>
|
||||
// 09-03 tab 始终在 page-toolbar 渲染(含空态/错误态),下载按钮紧贴 tab 右侧;筛选+翻页放 rank-toolbar(withFilters 时)
|
||||
const toolbar = (s, withFilters) => {
|
||||
const tabsHtml = `<div class="rank-tabs" role="tablist" style="margin-left:auto">
|
||||
${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="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>
|
||||
<button class="btn btn-icon" id="rankUpdate" title="更新榜单数据:后台任务重新抓取三榜(账号周榜 5 赛道 / 视频热榜 / 点赞榜)最新一期并落盘;30 分钟内已更新会拦截防重复">${svgIcon('download', 16, 'currentColor')}</button>`;
|
||||
const filtersHtml = withFilters ? `<div class="rank-toolbar">
|
||||
<div class="toolbar-right">
|
||||
<select id="rankCat" class="input-select" title="赛道筛选">
|
||||
<option value="">全部赛道</option>
|
||||
@@ -545,7 +538,14 @@ async function renderRanking(view) {
|
||||
<span class="pager-info" title="选择日期">${esc(s.date)}</span>
|
||||
<button class="btn" id="rankNext" title="下一期">▶</button>
|
||||
</div>
|
||||
</div>` : ''}`;
|
||||
</div>` : '';
|
||||
return `<div class="page-toolbar">
|
||||
${toolbarBack()}
|
||||
<span class="page-title">热点数据</span>
|
||||
${tabsHtml}
|
||||
</div>
|
||||
${filtersHtml}`;
|
||||
};
|
||||
|
||||
// 标题列统一截断(作品标题很长):悬停 title 看全文
|
||||
const titleTd = (text, url) => `<span class="rk-tl" title="${esc(String(text || '').replace(/"/g, '"'))}">${url ? `<a class="link" data-ext="${esc(url)}">${esc(text)}</a>` : esc(text)}</span>`;
|
||||
|
||||
@@ -42,6 +42,6 @@
|
||||
</div>
|
||||
|
||||
<script src="app.js?v=20260903v"></script>
|
||||
<script src="data-pages.js?v=20260903x"></script>
|
||||
<script src="data-pages.js?v=20260903y"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user