cam / app /templates /admin_images.html
cacode's picture
Upload 67 files
3d6b7f2 verified
{% extends 'base.html' %}
{% block content %}
<section class="hero-card">
<div>
<p class="eyebrow">Docker Images</p>
<h2>Docker 目录图片管理</h2>
<p class="lead">这里会统一展示当前 Docker 本地目录中的用户提交图,以及历史遗留的任务/线索本地图,方便集中预览、下载与清理。新建任务主图与线索图现在使用外部图片链接,不再上传到这里。</p>
</div>
<div class="hero-badges">
<span class="pill">总图片 {{ summary.total_count }}</span>
<span class="pill">系统引用 {{ summary.referenced_count }}</span>
<span class="pill">孤立图片 {{ summary.orphan_count }}</span>
</div>
</section>
<section class="glass-card form-panel wide-panel">
<div class="section-head compact-head">
<div>
<p class="eyebrow">Storage Root</p>
<h3>图片目录</h3>
<p class="mini-note">{{ summary.docker_root }}</p>
</div>
<form method="get" action="/admin/images" class="inline-form inline-form-wide">
<label>
<span>筛选范围</span>
<select name="scope">
<option value="all" {% if scope == 'all' %}selected{% endif %}>全部图片</option>
<option value="tasks" {% if scope == 'tasks' %}selected{% endif %}>历史任务与线索图</option>
<option value="submissions" {% if scope == 'submissions' %}selected{% endif %}>用户提交图</option>
<option value="referenced" {% if scope == 'referenced' %}selected{% endif %}>系统引用中</option>
<option value="orphan" {% if scope == 'orphan' %}selected{% endif %}>孤立图片</option>
</select>
</label>
<button class="btn btn-secondary" type="submit">应用筛选</button>
</form>
</div>
</section>
<section class="image-library-grid">
{% for item in image_items %}
<article class="glass-card image-library-card">
<img class="image-library-thumb" src="{{ item.preview_url }}" alt="{{ item.file_name }}" />
<div class="image-library-body">
<strong>{{ item.file_name }}</strong>
<p class="muted image-library-path">{{ item.relative_path }}</p>
<div class="chip-row">
<span class="chip">{{ item.category }}</span>
<span class="chip">{{ item.size_label }}</span>
<span class="chip">{{ item.modified_at }}</span>
<span class="status-badge {% if item.is_referenced %}status-approved{% else %}status-rejected{% endif %}">
{{ '已引用' if item.is_referenced else '孤立图片' }}
</span>
</div>
<div class="stack-list compact-stack-list">
{% for label in item.reference_labels %}
<div class="stack-item stack-item-block compact-stack-item">
<p class="muted">{{ label }}</p>
</div>
{% else %}
<p class="muted">当前没有系统记录引用这张图片,可以在确认后清理。</p>
{% endfor %}
</div>
<div class="card-footer image-library-actions">
<a class="btn btn-ghost small-btn" href="{{ item.download_url }}">下载图片</a>
{% if not item.is_referenced %}
<form method="post" action="/admin/images/delete" class="inline-form">
<input type="hidden" name="relative_path" value="{{ item.relative_path }}" />
<input type="hidden" name="scope" value="{{ scope }}" />
<button class="btn btn-danger small-btn" type="submit" onclick="return confirm('确认删除这张未被系统引用的图片吗?');">删除图片</button>
</form>
{% endif %}
</div>
</div>
</article>
{% else %}
<article class="glass-card empty-state">
<h3>当前筛选下没有图片</h3>
<p>可以切换筛选范围,或者等待用户上传新的打卡图片。</p>
</article>
{% endfor %}
</section>
{% endblock %}