f1be24ab83
- Add FastAPI app with paper browsing UI and REST API - Add crawler service and database models - Add scripts for DB init and manual crawl - Add docs (api-and-ui, data-model, services) - Add requirements and project config
45 lines
1.6 KiB
HTML
45 lines
1.6 KiB
HTML
{# 论文卡片组件 — paper 变量必须在上下文中 #}
|
|
<article class="paper-card" data-arxiv="{{ paper.arxiv_id }}">
|
|
<div class="paper-card-header">
|
|
<h2 class="paper-title">
|
|
<a href="/paper/{{ paper.arxiv_id }}">
|
|
{{ paper.title_zh or paper.title_en }}
|
|
</a>
|
|
</h2>
|
|
<span class="paper-upvotes">👍 {{ paper.upvotes }}</span>
|
|
</div>
|
|
|
|
{% if paper.summary and paper.summary.one_line %}
|
|
<p class="paper-one-line">{{ paper.summary.one_line }}</p>
|
|
{% elif paper.abstract %}
|
|
<p class="paper-abstract-preview">{{ paper.abstract[:200] }}{% if paper.abstract|length > 200 %}…{% endif %}</p>
|
|
{% endif %}
|
|
|
|
<div class="paper-meta">
|
|
<span class="paper-authors">
|
|
{{ paper.authors|map(attribute='name')|join(', ')|truncate(80) }}
|
|
</span>
|
|
</div>
|
|
|
|
<div class="paper-tags">
|
|
{% for tag in paper.tags[:5] %}
|
|
<span class="tag">{{ tag.tag }}</span>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
<div class="paper-footer">
|
|
<span class="summary-badge summary-{{ paper.summary_status.status if paper.summary_status else 'none' }}">
|
|
{% if not paper.summary_status or paper.summary_status.status == 'pending' %}
|
|
未总结
|
|
{% elif paper.summary_status.status == 'processing' %}
|
|
🔄 总结中
|
|
{% elif paper.summary_status.status == 'failed' or paper.summary_status.status == 'permanent_failure' %}
|
|
❌ 总结失败
|
|
{% elif paper.summary_status.status == 'done' %}
|
|
✅ 已总结
|
|
{% endif %}
|
|
</span>
|
|
<a href="/paper/{{ paper.arxiv_id }}" class="btn-detail">详情 →</a>
|
|
</div>
|
|
</article>
|