File size: 4,088 Bytes
3d6b7f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
{% 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 %}