{#snippet actions()} {/snippet}
{#if busy} {:else if error} {:else}

{projectsStore.all.length} 个项目 · {(datasets ?? []).length} 个数据集 · {[...runStatusOf.values()].reduce((a, b) => a + b.running, 0)} 个回测运行中 · {(runs ?? []).length} 次回测 · AI 请求 {usage?.totals?.requests ?? '—'}

{/if} {#if showCreate}

新建项目

{#if createErr}{createErr}{/if}
{/if} {#if !busy && error && projectsStore.all.length === 0} {#snippet errorCta()} {/snippet} {/if} {#if !busy && !error && projectsStore.all.length === 0} {#snippet emptyCta()} {/snippet} {/if} {#if projectsStore.all.length > 0}
{#each projectsStore.all as p (p.id)} {@const sp = sparks.get(p.id)} {@const st = runStatusOf.get(p.id)}
{p.name}

{p.description ?? '—'}

{st?.running ? `运行中 ${st.running}` : st?.done ? `最近 ${st.lastReturn ?? '完成'}` : '未回测'}
{#if sp} = sp.first} /> 最近 {runStatusOf.get(p.id)?.lastReturn ?? '完成'} {:else} 还没有回测记录 {/if} 更新 {fmtDateTime(p.updated_at)}
{/each}
{/if}