Update registrations_period.html
Browse files- registrations_period.html +81 -12
registrations_period.html
CHANGED
@@ -49,7 +49,7 @@
|
|
49 |
border-color: #4CAF50;
|
50 |
box-shadow: 0 0 5px rgba(76, 175, 80, 0.5);
|
51 |
}
|
52 |
-
|
53 |
margin-top: 20px;
|
54 |
display: flex;
|
55 |
justify-content: center;
|
@@ -77,15 +77,35 @@
|
|
77 |
<!-- Кнопка для получения данных -->
|
78 |
<button onclick="fetchData()">Получить данные</button>
|
79 |
|
80 |
-
<!-- Контейнер для графика -->
|
81 |
-
<div
|
82 |
-
<canvas id="
|
|
|
|
|
|
|
|
|
|
|
83 |
</div>
|
84 |
|
85 |
<script>
|
86 |
-
let
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
|
88 |
-
// Функция для запроса данных и обновления
|
89 |
function fetchData() {
|
90 |
// Получаем выбранные даты
|
91 |
const startDate = document.getElementById('startDate').value;
|
@@ -101,14 +121,17 @@
|
|
101 |
fetch(`/registrations_period?start_date=${startDate}&end_date=${endDate}`)
|
102 |
.then(response => response.json())
|
103 |
.then(data => {
|
104 |
-
// Если
|
105 |
-
if (
|
106 |
-
|
|
|
|
|
|
|
107 |
}
|
108 |
|
109 |
-
// Создание
|
110 |
-
const
|
111 |
-
|
112 |
type: 'bar',
|
113 |
data: {
|
114 |
labels: data.labels,
|
@@ -151,6 +174,52 @@
|
|
151 |
maintainAspectRatio: false
|
152 |
}
|
153 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
154 |
})
|
155 |
.catch(error => {
|
156 |
console.error('Ошибка при получении данных:', error);
|
|
|
49 |
border-color: #4CAF50;
|
50 |
box-shadow: 0 0 5px rgba(76, 175, 80, 0.5);
|
51 |
}
|
52 |
+
.chart-container {
|
53 |
margin-top: 20px;
|
54 |
display: flex;
|
55 |
justify-content: center;
|
|
|
77 |
<!-- Кнопка для получения данных -->
|
78 |
<button onclick="fetchData()">Получить данные</button>
|
79 |
|
80 |
+
<!-- Контейнер для столбчатого графика -->
|
81 |
+
<div class="chart-container">
|
82 |
+
<canvas id="barChart" width="400" height="200"></canvas>
|
83 |
+
</div>
|
84 |
+
|
85 |
+
<!-- Контейнер для линейного графика -->
|
86 |
+
<div class="chart-container">
|
87 |
+
<canvas id="lineChart" width="400" height="200"></canvas>
|
88 |
</div>
|
89 |
|
90 |
<script>
|
91 |
+
let barChart; // Переменная для хранения столбчатого графика
|
92 |
+
let lineChart; // Переменная для хранения линейного графика
|
93 |
+
|
94 |
+
// Цвета для линий (10 цветов)
|
95 |
+
const lineColors = [
|
96 |
+
'#FF6384', // Красный
|
97 |
+
'#36A2EB', // Синий
|
98 |
+
'#FFCE56', // Жёлтый
|
99 |
+
'#4BC0C0', // Бирюзовый
|
100 |
+
'#9966FF', // Фиолетовый
|
101 |
+
'#FF9F40', // Оранжевый
|
102 |
+
'#C9CBCF', // Серый
|
103 |
+
'#00CC99', // Зелёный
|
104 |
+
'#FF99CC', // Розовый
|
105 |
+
'#6666FF' // Голубой
|
106 |
+
];
|
107 |
|
108 |
+
// Функция для запроса данных и обновления графиков
|
109 |
function fetchData() {
|
110 |
// Получаем выбранные даты
|
111 |
const startDate = document.getElementById('startDate').value;
|
|
|
121 |
fetch(`/registrations_period?start_date=${startDate}&end_date=${endDate}`)
|
122 |
.then(response => response.json())
|
123 |
.then(data => {
|
124 |
+
// Если графики уже существуют, уничтожаем их
|
125 |
+
if (barChart) {
|
126 |
+
barChart.destroy();
|
127 |
+
}
|
128 |
+
if (lineChart) {
|
129 |
+
lineChart.destroy();
|
130 |
}
|
131 |
|
132 |
+
// Создание столбчатого графика
|
133 |
+
const barCtx = document.getElementById('barChart').getContext('2d');
|
134 |
+
barChart = new Chart(barCtx, {
|
135 |
type: 'bar',
|
136 |
data: {
|
137 |
labels: data.labels,
|
|
|
174 |
maintainAspectRatio: false
|
175 |
}
|
176 |
});
|
177 |
+
|
178 |
+
// Создание линейного графика
|
179 |
+
const lineCtx = document.getElementById('lineChart').getContext('2d');
|
180 |
+
lineChart = new Chart(lineCtx, {
|
181 |
+
type: 'line',
|
182 |
+
data: {
|
183 |
+
labels: data.dates, // Дни периода
|
184 |
+
datasets: data.daily_data.map((dataset, index) => ({
|
185 |
+
label: dataset.label, // Метка
|
186 |
+
data: dataset.data, // Данные за каждый день
|
187 |
+
borderColor: lineColors[index % lineColors.length], // Цвет линии
|
188 |
+
borderWidth: 2,
|
189 |
+
fill: false
|
190 |
+
}))
|
191 |
+
},
|
192 |
+
options: {
|
193 |
+
scales: {
|
194 |
+
y: {
|
195 |
+
beginAtZero: true,
|
196 |
+
grid: {
|
197 |
+
color: '#f0f0f0'
|
198 |
+
},
|
199 |
+
ticks: {
|
200 |
+
color: '#333'
|
201 |
+
}
|
202 |
+
},
|
203 |
+
x: {
|
204 |
+
grid: {
|
205 |
+
color: '#f0f0f0'
|
206 |
+
},
|
207 |
+
ticks: {
|
208 |
+
color: '#333'
|
209 |
+
}
|
210 |
+
}
|
211 |
+
},
|
212 |
+
plugins: {
|
213 |
+
legend: {
|
214 |
+
labels: {
|
215 |
+
color: '#333'
|
216 |
+
}
|
217 |
+
}
|
218 |
+
},
|
219 |
+
responsive: true,
|
220 |
+
maintainAspectRatio: false
|
221 |
+
}
|
222 |
+
});
|
223 |
})
|
224 |
.catch(error => {
|
225 |
console.error('Ошибка при получении данных:', error);
|