Commit 5a7632a3c401ea28cda620ec737c14088c0e04c9

Authored by yibo
1 parent ce4f6b20

h3-console: "新建任务"固定在筛选框上面,不再跟着任务列表滚动

之前塞在 #job-list 第一行,列表一滚就跟着跑没了;挪到 #sidebar-filters
外面单独一行,选中态(新建视图时高亮)用 renderSidebar() 里同步 class
的方式保留,回收站视图沿用原来的隐藏逻辑。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JDWoVwpqrsyzv9LRszTw9d
Showing 1 changed file with 8 additions and 6 deletions
h3-console/static/index.html
@@ -92,6 +92,9 @@ @@ -92,6 +92,9 @@
92 <div id="sidebar-header"> 92 <div id="sidebar-header">
93 <h1>H3 Console</h1> 93 <h1>H3 Console</h1>
94 </div> 94 </div>
  95 + <div id="new-task-row" class="job-row new-row" onclick="showCreate()">
  96 + <span>+</span><span>新建任务</span>
  97 + </div>
95 <div id="sidebar-filters"> 98 <div id="sidebar-filters">
96 <input id="job-search" type="text" placeholder="搜索 prompt / id…"> 99 <input id="job-search" type="text" placeholder="搜索 prompt / id…">
97 <div class="sf-row"> 100 <div class="sf-row">
@@ -751,6 +754,11 @@ function fmtTime(ts) { @@ -751,6 +754,11 @@ function fmtTime(ts) {
751 function renderSidebar() { 754 function renderSidebar() {
752 const box = document.getElementById('job-list'); box.innerHTML = ''; 755 const box = document.getElementById('job-list'); box.innerHTML = '';
753 document.getElementById('sidebar-filters').style.display = viewingTrash ? 'none' : 'flex'; 756 document.getElementById('sidebar-filters').style.display = viewingTrash ? 'none' : 'flex';
  757 + // "+新建任务" 固定在筛选框上面、列表外面,不随 #job-list 滚动——之前是塞进 job-list 第一
  758 + // 行的,列表一滚就跟着跑没了,2026-08-28 用户反馈要求固定住。
  759 + const newTaskRow = document.getElementById('new-task-row');
  760 + newTaskRow.style.display = viewingTrash ? 'none' : 'flex';
  761 + newTaskRow.classList.toggle('selected', !viewingTrash && selectedId === null);
754 762
755 if (viewingTrash) { 763 if (viewingTrash) {
756 const backRow = document.createElement('div'); 764 const backRow = document.createElement('div');
@@ -779,12 +787,6 @@ function renderSidebar() { @@ -779,12 +787,6 @@ function renderSidebar() {
779 return; 787 return;
780 } 788 }
781 789
782 - const newRow = document.createElement('div');  
783 - newRow.className = 'job-row new-row' + (selectedId === null ? ' selected' : '');  
784 - newRow.onclick = () => showCreate();  
785 - newRow.innerHTML = `<span>+</span><span>新建任务</span>`;  
786 - box.appendChild(newRow);  
787 -  
788 jobsCache.forEach(j => { 790 jobsCache.forEach(j => {
789 const row = document.createElement('div'); 791 const row = document.createElement('div');
790 row.className = 'job-row' + (j.id === selectedId ? ' selected' : ''); 792 row.className = 'job-row' + (j.id === selectedId ? ' selected' : '');