// table: entries · 状态 active | greyed | pending · 预览 = 按当前状态模拟前台展示
内容管理
全部收录条目。灰掉 = 暂不可见但保留数据;删除为物理删除,需确认。
全部 <%= statusCounts.all %>
上线 <%= statusCounts.active %>
待核验 <%= statusCounts.pending %>
灰掉 <%= statusCounts.greyed %>
第 <%= page %> / <%= totalPages %> 页
| 标题 | 类型 | 状态 | 更新时间 | 操作 | |
|---|---|---|---|---|---|
| 当前筛选下没有条目 | |||||
|
<%= e.title %> <%= (e.tags || []).join(' · ') || '—' %> |
<%= e.type %> | <% if (e.status === 'active') { %>active <% } else if (e.status === 'pending') { %>pending <% } else { %><%= e.status %><% } %> | <%= fmtDate(e.updated_at) %> | ||
// table: comments
评论管理
| 评论者 | 内容 | 所属条目 | 时间 | 操作 |
|---|---|---|---|---|
| <%= c.author_name %><% if (c.username) { %> @<%= c.username %><% } %> | <%= c.body.slice(0, 80) %><%= c.body.length > 80 ? '…' : '' %> | <%= c.entry_title %> | <%= fmtDate(c.created_at) %> |
<% if (isAdmin) { %><% } %>
|
// sources: human + ai + feed · 自动拉取经 ingest/ 采集层进入待核验队列
内容源管理
<% for (const s of sources) { if (s.kind === 'human') continue; %><%= s.name %> kind: <%= s.kind %> · 已收录 <%= Number(s.entry_count) %> 条
<% if (s.kind === 'ai') { %>
AI 录入接口启用
<%= s.enabled ? 'ON' : 'OFF' %>
调用方式:POST /api/ingest/entry · header X-Ingest-Key · 新条目默认 pending
<% } else { %> <% } %>新增拉取源
// table: accounts · role: admin | editor
账号管理
| ID | 用户名 | 角色 | 状态 | 最后登录 | 操作 |
|---|---|---|---|---|---|
| #<%= u.id %> | <%= u.username %> | <%= u.role %> | <%= u.status %> | <%= u.last_login_at ? fmtDate(u.last_login_at) : '从未登录' %> |
<% if (u.id !== user.id) { %>
<% } %>
|