| {% extends "admin_layout.html" %} |
| {% block admin_title %}定时任务{% endblock %} |
| {% block admin_page_content %} |
| <section class="content-grid admin-grid reveal-up delay-2"> |
| <article class="card span-2"> |
| <div class="card-head split"> |
| <div> |
| <span class="kicker">定时任务</span> |
| <h2>定时任务总览</h2> |
| <p>这里会列出每个用户当前的定时状态,并可直接在下方卡片中修改配置。</p> |
| </div> |
| <a href="{{ url_for('admin_users') }}" class="btn btn-ghost">返回用户管理</a> |
| </div> |
| <div class="course-table-wrap"> |
| <table class="data-table"> |
| <thead> |
| <tr> |
| <th>用户</th> |
| <th>状态</th> |
| <th>日期范围</th> |
| <th>每日时段</th> |
| <th>快速定位</th> |
| </tr> |
| </thead> |
| <tbody> |
| {% if users %} |
| {% for user in users %} |
| <tr> |
| <td>{{ user.display_name or user.student_id }}<br><small>{{ user.student_id }}</small></td> |
| <td>{{ '启用' if user.schedule and user.schedule.is_enabled else '关闭' }}</td> |
| <td> |
| {% if user.schedule and user.schedule.start_date and user.schedule.end_date %} |
| {{ user.schedule.start_date }} 至 {{ user.schedule.end_date }} |
| {% else %} |
| 未设置 |
| {% endif %} |
| </td> |
| <td> |
| {% if user.schedule and user.schedule.daily_start_time and user.schedule.daily_stop_time %} |
| {{ user.schedule.daily_start_time }} - {{ user.schedule.daily_stop_time }} |
| {% else %} |
| 未设置 |
| {% endif %} |
| </td> |
| <td><a href="#user-{{ user.id }}" class="inline-action">前往设置</a></td> |
| </tr> |
| {% endfor %} |
| {% else %} |
| <tr> |
| <td colspan="5" class="empty-cell">还没有用户,暂时无法配置定时任务。</td> |
| </tr> |
| {% endif %} |
| </tbody> |
| </table> |
| </div> |
| </article> |
| </section> |
|
|
| <section class="card reveal-up delay-3 span-2"> |
| <div class="card-head"> |
| <span class="kicker">按用户配置</span> |
| <h2>定时启动终止设置</h2> |
| <p>仅管理员可以配置。支持设置从几月几日开始、几月几日结束,以及每天自动启动和停止时间。</p> |
| </div> |
| <div class="user-card-grid"> |
| {% for user in users %} |
| <section class="user-card" id="user-{{ user.id }}"> |
| <div class="user-card-head"> |
| <div> |
| <h3>{{ user.display_name or user.student_id }}</h3> |
| <p>{{ user.student_id }}</p> |
| </div> |
| <span class="status-pill status-{{ user.latest_task.status if user.latest_task else 'idle' }}"> |
| {{ task_labels.get(user.latest_task.status, '未启动') if user.latest_task else '未启动' }} |
| </span> |
| </div> |
|
|
| <div class="chip-row tight"> |
| <span class="chip">定时 {{ '开启' if user.schedule and user.schedule.is_enabled else '关闭' }}</span> |
| <span class="chip">最近任务 {{ user.latest_task.id if user.latest_task else '--' }}</span> |
| <span class="chip">尝试 {{ user.latest_task.total_attempts if user.latest_task else 0 }}</span> |
| <span class="chip">错误 {{ user.latest_task.total_errors if user.latest_task else 0 }}</span> |
| </div> |
|
|
| <form method="post" action="{{ url_for('update_user_schedule', user_id=user.id) }}" class="form-grid form-grid-compact slim-form schedule-form"> |
| <label class="field"> |
| <span>启用定时</span> |
| <input type="checkbox" name="schedule_enabled" value="1" {% if user.schedule and user.schedule.is_enabled %}checked{% endif %}> |
| </label> |
| <label class="field"> |
| <span>开始日期</span> |
| <input type="date" name="start_date" value="{{ user.schedule.start_date if user.schedule else '' }}"> |
| </label> |
| <label class="field"> |
| <span>结束日期</span> |
| <input type="date" name="end_date" value="{{ user.schedule.end_date if user.schedule else '' }}"> |
| </label> |
| <label class="field"> |
| <span>每日启动</span> |
| <input type="time" name="daily_start_time" value="{{ user.schedule.daily_start_time if user.schedule else '' }}"> |
| </label> |
| <label class="field"> |
| <span>每日停止</span> |
| <input type="time" name="daily_stop_time" value="{{ user.schedule.daily_stop_time if user.schedule else '' }}"> |
| </label> |
| <button type="submit" class="btn btn-secondary">保存定时设置</button> |
| </form> |
| </section> |
| {% else %} |
| <div class="empty-state-card"> |
| 还没有录入任何用户,请先到“用户管理”页面创建用户。 |
| </div> |
| {% endfor %} |
| </div> |
| </section> |
| {% endblock %}
|
|
|