Polish static UI flows

This commit is contained in:
iye
2026-05-28 12:29:12 +08:00
parent 5edfa05369
commit bbe29622c2
45 changed files with 2187 additions and 813 deletions
+5 -44
View File
@@ -147,7 +147,6 @@
<div class="tab" data-filter="wip">进行中 <span class="count">0</span></div>
<div class="tab" data-filter="done">已完成 <span class="count">0</span></div>
<div class="tab" data-filter="fail">失败 <span class="count">0</span></div>
<div class="tab" data-filter="archived">已归档 <span class="count">0</span></div>
</div>
<div class="toolbar">
@@ -216,7 +215,7 @@
<span class="muted-2 mono" style="font-size:11px;">3/5</span>
</div>
</td>
<td><span class="pill info"><span class="dot"></span>故事板 待确认</span></td>
<td><span class="pill info"><span class="dot"></span>故事板生成中</span></td>
<td class="muted-2">12 分钟前</td>
<td>
<div class="row-action">
@@ -339,25 +338,6 @@
<td class="muted-2">5 月 4 日</td>
<td></td>
</tr>
<tr data-status="archived" data-name="补水面膜 痛点种草 v1" onclick="location.href='pipeline.html#stage-5'">
<td>
<div class="proj-name-cell">
<div class="placeholder proj-thumb"><span class="ph-frame">9:16</span></div>
<div><div class="proj-name">补水面膜 · 痛点种草 · v1</div><div class="proj-sub">6 镜 · 0-15s</div></div>
</div>
</td>
<td>透真补水面膜</td>
<td><span class="muted">AI 全生</span></td>
<td>
<div class="hstack">
<div class="prog"><span class="done"></span><span class="done"></span><span class="done"></span><span class="done"></span><span class="done"></span></div>
<span class="muted-2 mono" style="font-size:11px;">5/5</span>
</div>
</td>
<td><span class="pill neutral"><span class="dot"></span>已归档</span></td>
<td class="muted-2">4 月 28 日</td>
<td></td>
</tr>
</tbody>
</table>
</div>
@@ -379,7 +359,7 @@
<span class="muted-2 mono" style="font-size:10.5px;">3/5</span>
</div>
<div class="card-foot">
<span class="pill info"><span class="dot"></span>故事板 待确认</span>
<span class="pill info"><span class="dot"></span>故事板生成中</span>
<span class="card-time">12 分钟前</span>
</div>
</div>
@@ -505,25 +485,6 @@
</div>
</div>
<div class="proj-card" data-status="archived" data-name="补水面膜 痛点种草 v1" onclick="location.href='pipeline.html#stage-5'">
<span class="card-check" aria-hidden="true"><svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="3 8 7 12 13 4"/></svg></span>
<button class="card-del-btn" type="button" title="删除项目" onclick="event.stopPropagation();" data-action="delete-project"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"><path d="M3 6h18"/><path d="M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2"/><path d="M19 6l-1.5 14a2 2 0 01-2 1.8H8.5a2 2 0 01-2-1.8L5 6"/></svg></button>
<div class="placeholder card-thumb"><span class="ph-frame">9:16 · 5/5 ✓</span></div>
<div class="card-body">
<div>
<div class="card-name">补水面膜 · 痛点种草 · v1</div>
<div class="card-sub" style="margin-top:4px;">透真补水面膜 · 6 镜</div>
</div>
<div class="hstack">
<div class="prog"><span class="done"></span><span class="done"></span><span class="done"></span><span class="done"></span><span class="done"></span></div>
<span class="muted-2 mono" style="font-size:10.5px;">5/5</span>
</div>
<div class="card-foot">
<span class="pill neutral"><span class="dot"></span>已归档</span>
<span class="card-time">4 月 28 日</span>
</div>
</div>
</div>
</div>
</div>
@@ -665,7 +626,7 @@ Shell.render({ active: 'projects', crumbs: [{ label: '工作台', href: 'index.h
// ============== 从 DOM 实算项目计数,同步副标题 + tab 角标 ==============
const allRows = document.querySelectorAll('#list-tbody tr');
const counts = { total: allRows.length, wip: 0, done: 0, fail: 0, archived: 0 };
const counts = { total: allRows.length, wip: 0, done: 0, fail: 0 };
allRows.forEach(r => { const s = r.dataset.status; if (counts[s] !== undefined) counts[s]++; });
document.getElementById('sub-total').textContent = counts.total;
@@ -901,13 +862,13 @@ document.getElementById('search-input').addEventListener('input', e => {
applyFilter();
});
// 从 URL ?filter=wip|done|fail|archived|all 接收外部跳转 (例如工作台 stat 卡)
// 从 URL ?filter=wip|done|fail|all 接收外部跳转 (例如工作台 stat 卡)
(function applyUrlFilter() {
try {
const q = new URLSearchParams(location.search);
const f = q.get('filter');
if (!f) return;
const valid = ['all', 'wip', 'done', 'fail', 'archived'];
const valid = ['all', 'wip', 'done', 'fail'];
if (!valid.includes(f)) return;
state.filter = f;
document.querySelectorAll('#status-tabs .tab').forEach(t =>