File size: 6,141 Bytes
f256f5b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
{% 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 %}