背景:任务只有 status=done,分不清「新建」「已存在跳过」「已删除跳过」, 品牌更新历史只能在进程日志里翻,日志一滚就没了。 - ingest_jobs 新增 outcome / note / brand_id(迁移 2026-10-25-01) outcome 记结果类型,note 记人话细节(新建 N 张图 / 已存在(status=published)) - 提交任务时解出 brand_id 落库,品牌详情页按 (brand_id, id DESC) 直接查 - 处理时优先用 job.brand_id,payload 里的 hashid 只作老任务兜底: 避免「别的实例盐不同 → 解出错品牌 → 整场 brand not found」再发生 - 品牌编辑页新增「更新记录」区块:时间 / 场次 / 结果 / 明细(含失败原因与尝试次数) - 测试:fake 仓储补齐新接口,capture 仓储记录 outcome 供断言
39 lines
1.6 KiB
HTML
39 lines
1.6 KiB
HTML
{{define "title"}}{{if .UID}}编辑品牌{{else}}新建品牌{{end}} · 管理后台{{end}}
|
||
{{define "barLabel"}}管理后台 · {{if .UID}}编辑品牌{{else}}新建品牌{{end}}{{end}}
|
||
{{define "barRight"}}<a href="/admin/brands">返回列表</a> · <a href="/admin/logout">退出</a>{{end}}
|
||
{{define "content"}}
|
||
{{template "bar" .}}
|
||
<div class="main">
|
||
<h1>{{if .UID}}编辑品牌{{else}}新建品牌{{end}}</h1>
|
||
<form method="post" action="{{if .UID}}/admin/brands/{{.UID}}{{else}}/admin/brands{{end}}">
|
||
{{if .Error}}<div class="err">{{.Error}}</div>{{end}}
|
||
<label>英文名(name_en)</label><input name="name_en" value="{{.NameEn}}" placeholder="如 Acne Studios">
|
||
<label>中文名(name_cn)</label><input name="name_cn" value="{{.NameCn}}" placeholder="如 艾克妮">
|
||
<button type="submit">{{if .UID}}保存{{else}}创建{{end}}</button>
|
||
</form>
|
||
|
||
{{if .UID}}
|
||
<h2 style="margin-top:32px">更新记录</h2>
|
||
<p class="muted">
|
||
{{if .LastCrawl}}最近抓取:{{.LastCrawl}} · {{.CrawlStatus}}{{else}}还没有抓取记录{{end}}
|
||
(只显示最近 30 条入库记录;抓取侧每品牌只保留最近一次的状态)
|
||
</p>
|
||
{{if .Records}}
|
||
<table>
|
||
<thead><tr><th>时间</th><th>场次</th><th>结果</th><th>明细</th></tr></thead>
|
||
<tbody>
|
||
{{range .Records}}<tr>
|
||
<td>{{.TimeText}}</td>
|
||
<td>{{if .Title}}{{.Title}}{{else}}-{{end}}</td>
|
||
<td>{{.OutcomeText}}</td>
|
||
<td>{{.Detail}}</td>
|
||
</tr>{{end}}
|
||
</tbody>
|
||
</table>
|
||
{{else}}
|
||
<p class="muted">还没有入库记录。把品牌加入抓取队列后,每一场的处理结果(新建 / 已存在跳过 / 失败原因)都会出现在这里。</p>
|
||
{{end}}
|
||
{{end}}
|
||
</div>
|
||
{{end}}
|