154 lines
5.4 KiB
HTML
154 lines
5.4 KiB
HTML
{% 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 %}
|