progress bars
This commit is contained in:
130
server/server.ts
130
server/server.ts
@@ -427,6 +427,47 @@ router.get('/', async (req, res) => {
|
||||
alert('Произошла ошибка: ' + error.message);
|
||||
}
|
||||
});
|
||||
|
||||
// Обработчик кнопок очистки коллекций
|
||||
document.querySelectorAll('.clear-model-btn').forEach(button => {
|
||||
button.addEventListener('click', async function() {
|
||||
const modelName = this.getAttribute('data-model');
|
||||
if (!modelName) return;
|
||||
|
||||
if (!confirm(\`Вы уверены, что хотите очистить коллекцию \${modelName}?\`)) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch('' + getUrl('/clear-collection'), {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({ modelName })
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error('Ошибка при очистке коллекции');
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
// Показываем сообщение об успехе
|
||||
successAction.textContent = 'Коллекция ' + data.model + ' очищена. Удалено ' + data.deletedCount + ' записей';
|
||||
successAction.style.display = 'block';
|
||||
|
||||
// Перезагружаем страницу через 2 секунды
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, 2000);
|
||||
|
||||
} catch (error) {
|
||||
console.error('Ошибка:', error);
|
||||
alert('Произошла ошибка: ' + error.message);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
`;
|
||||
|
||||
@@ -792,6 +833,52 @@ router.get('/', async (req, res) => {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.progress-bar-container {
|
||||
width: 100%;
|
||||
background-color: #f0f0f0;
|
||||
border-radius: 10px;
|
||||
margin: 10px 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.progress-bar {
|
||||
height: 10px;
|
||||
background: linear-gradient(90deg, var(--primary-color), #5c6bc0);
|
||||
border-radius: 10px;
|
||||
transition: width 0.5s ease;
|
||||
}
|
||||
|
||||
.model-actions {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.model-button {
|
||||
background-color: var(--primary-color);
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 5px 10px;
|
||||
border-radius: var(--border-radius);
|
||||
cursor: pointer;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 500;
|
||||
transition: var(--transition);
|
||||
}
|
||||
|
||||
.model-button:hover {
|
||||
background-color: #303f9f;
|
||||
box-shadow: var(--shadow);
|
||||
}
|
||||
|
||||
.model-button-danger {
|
||||
background-color: #f44336;
|
||||
}
|
||||
|
||||
.model-button-danger:hover {
|
||||
background-color: #d32f2f;
|
||||
}
|
||||
|
||||
.model-details {
|
||||
padding: 15px;
|
||||
}
|
||||
@@ -1007,6 +1094,9 @@ router.get('/', async (req, res) => {
|
||||
<p class="model-count">${count} документов</p>
|
||||
</div>
|
||||
<div class="model-details">
|
||||
<div class="progress-bar-container">
|
||||
<div class="progress-bar" style="width: ${Math.min((count / 1000) * 100, 100)}%"></div>
|
||||
</div>
|
||||
<div class="model-fields">
|
||||
<h4>Поля:</h4>
|
||||
<ul class="fields-list">
|
||||
@@ -1016,6 +1106,9 @@ router.get('/', async (req, res) => {
|
||||
}).join('')}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="model-actions">
|
||||
<button class="model-button model-button-danger clear-model-btn" data-model="${name}">Очистить коллекцию</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
@@ -1078,4 +1171,41 @@ router.post('/clear-old-errors', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Эндпоинт для очистки отдельной коллекции
|
||||
router.post('/clear-collection', async (req, res) => {
|
||||
try {
|
||||
const { modelName } = req.body;
|
||||
|
||||
if (!modelName) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
error: 'Имя модели не указано'
|
||||
});
|
||||
}
|
||||
|
||||
// Проверяем, существует ли такая модель
|
||||
if (!mongoose.modelNames().includes(modelName)) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
error: 'Модель не найдена'
|
||||
});
|
||||
}
|
||||
|
||||
const model = mongoose.model(modelName);
|
||||
const result = await model.deleteMany({});
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
deletedCount: result.deletedCount || 0,
|
||||
model: modelName
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(`Ошибка при очистке коллекции:`, error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
error: 'Ошибка при очистке коллекции'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export default router
|
||||
|
||||
Reference in New Issue
Block a user