{#snippet actions()}
{/snippet}
{#if tab === 'users'}

用户

{#if !usersBusy && !usersErr && users.length > 0} {#each users as u (u.id)} {/each}
邮箱 姓名 角色 状态 AI 权限 日回测上限 操作
{u.email} {u.name} {u.active ? '启用' : '停用'} void patchUser(u, { daily_run_limit: Number((e.target as HTMLInputElement).value) })} />
{/if}

停用账户会立即吊销其会话并阻止其回测与 AI 请求。角色不能作用于他人项目,私阅策略代码不提供。

{:else if tab === 'invites'}

签发邀请

{#if newInvite} {/if}

历史邀请

{#if !inviteBusy && !inviteErr && invites.length === 0} {/if} {#if !inviteBusy && invites.length > 0} {#each invites as inv (inv.id)} {/each}
邮箱备注 角色 创建时间 过期 状态
{inv.email ?? '—'} {inv.role === 'admin' ? '管理员' : '成员'} {fmtDateTime(inv.created_at)} {fmtDateTime(inv.expires_at)} {#if inv.used_at}已使用 {:else if inv.revoked}已撤销 {:else if inv.expires_at && new Date(inv.expires_at) < new Date()}已过期 {:else}有效 {/if} {#if !inv.used_at && !inv.revoked} {/if}
{/if}

恢复链接由“生成恢复”按钮产生,仅出现一次;不会自动发邮件。

{:else}

安全审计(收尾尾部)

{#if !auditBusy && !auditErr && audit.length === 0} {/if} {#if !auditBusy && audit.length > 0} {#each audit as e, i (i)} {/each}
时间 行为者 事件 对象 结果
{fmtDateTime(e.time)} {e.actor ?? '—'} {e.action} {e.target ?? '—'} {e.status}
{/if}

审计仅记录操作行为与结果,不含密码/密钥/策略代码内容。

{/if}
{#if resetFor} (resetFor = null)}>

单次有效、限时;重置会吊销对方的全部历史会话。

{/if}