This commit is contained in:
DengDai
2025-12-09 13:08:38 +08:00
commit 02ecea06f8
36 changed files with 5876 additions and 0 deletions

153
templates/statistics.html Normal file
View File

@@ -0,0 +1,153 @@
{% extends "base.html" %}
{% set show_nav = true %}
{% block title %}统计报表{% endblock %}
{% block extra_css %}
<script src="{{ url_for('static', filename='js/chart.umd.min.js') }}"></script>
{% endblock %}
{% block content %}
<div class="container-fluid">
<h2 class="mb-4">统计报表</h2>
<!-- 筛选器 -->
<div class="card mb-3">
<div class="card-body">
<div class="row g-3 align-items-end">
<div class="col-md-2">
<label class="form-label">快捷选择</label>
<select class="form-select" id="quick-select" onchange="applyQuickSelect()">
<option value="">自定义</option>
<option value="today">今天</option>
<option value="week">本周</option>
<option value="month">本月</option>
<option value="30days">最近30天</option>
</select>
</div>
<div class="col-md-2">
<label class="form-label">开始日期</label>
<input type="date" class="form-control" id="date-from">
</div>
<div class="col-md-2">
<label class="form-label">结束日期</label>
<input type="date" class="form-control" id="date-to">
</div>
<div class="col-md-3">
<button class="btn btn-primary me-2" onclick="loadStatistics()">
<i class="bi bi-search"></i> 查询
</button>
<button class="btn btn-success" onclick="exportData()">
<i class="bi bi-download"></i> 导出CSV
</button>
</div>
</div>
</div>
</div>
<!-- 概览卡片 -->
<div class="row mb-4">
<div class="col-md-3">
<div class="card text-white bg-primary">
<div class="card-body">
<h5 class="card-title">今日完成</h5>
<h2 id="today-count">-</h2>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-white bg-success">
<div class="card-body">
<h5 class="card-title">本月完成</h5>
<h2 id="month-count">-</h2>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-white bg-warning">
<div class="card-body">
<h5 class="card-title">待认领</h5>
<h2 id="pending-count">-</h2>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card text-white bg-info">
<div class="card-body">
<h5 class="card-title">进行中</h5>
<h2 id="claimed-count">-</h2>
</div>
</div>
</div>
</div>
<!-- 个人统计 -->
<div class="row mb-4">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h5 id="stats-title">我的完成统计</h5>
</div>
<div class="card-body">
<div class="mb-3">
<strong>总完成数:</strong><span id="my-total">-</span>
</div>
<div class="mb-3">
<strong>待完成数:</strong><span id="my-pending">-</span>
</div>
<div style="height: 250px;">
<canvas id="myChart"></canvas>
</div>
</div>
</div>
</div>
<!-- 排行榜 -->
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h5>本月排行榜</h5>
</div>
<div class="card-body">
<div style="max-height: 400px; overflow-y: auto;">
<table class="table table-sm">
<thead>
<tr>
<th>排名</th>
<th>用户</th>
<th>完成数</th>
</tr>
</thead>
<tbody id="leaderboard">
<tr>
<td colspan="3" class="text-center">加载中...</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- 趋势图 -->
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 id="trend-title">完成趋势</h5>
</div>
<div class="card-body">
<div style="height: 300px;">
<canvas id="trendChart"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block extra_js %}
<script src="{{ url_for('static', filename='js/statistics.js') }}"></script>
{% endblock %}