diff --git a/api/routers/__pycache__/toolbox.cpython-313.pyc b/api/routers/__pycache__/toolbox.cpython-313.pyc
index eb7f388..be0dbf3 100644
Binary files a/api/routers/__pycache__/toolbox.cpython-313.pyc and b/api/routers/__pycache__/toolbox.cpython-313.pyc differ
diff --git a/api/routers/toolbox.py b/api/routers/toolbox.py
index c930989..26dcb86 100644
--- a/api/routers/toolbox.py
+++ b/api/routers/toolbox.py
@@ -16,7 +16,19 @@ async def add_toolbox(reqDict=Depends(requestDict)):
result = await ToolboxHandler.add(toolboxData, userId)
if result:
response["status"] = "ok"
- logger.info(response)
+ return response
+
+
+@router.put("/", summary="Обновление ящика")
+async def update_toolbox(reqDict=Depends(requestDict)):
+ toolboxId = reqDict.get("body").get("toolboxId")
+ logger.info(f"Обновление ящика #{toolboxId}")
+ response = {"status": "error"}
+ userId = reqDict.get("body").get("userId")
+ toolboxData = reqDict.get("body").get("editToolboxData")
+ result = await ToolboxHandler.edit(toolboxId, **toolboxData, user_id=userId)
+ if result:
+ response["status"] = "ok"
return response
diff --git a/api/static/js/index.js b/api/static/js/index.js
index 8a2290f..6615484 100644
--- a/api/static/js/index.js
+++ b/api/static/js/index.js
@@ -463,7 +463,7 @@ function setupFilters(tabId, tools, categoriesMap) {
}
}
-function addToolbox() {
+function addToolbox(editData = null) {
// Проверяем, существует ли уже модальное окно
let modal = document.getElementById('addToolboxModal');
@@ -482,7 +482,7 @@ function addToolbox() {
+
`;
+ // Если редактирование
+ if (editData) {
+ modal.querySelector('#toolboxTitle').value = editData.title;
+ modal.querySelector('#toolboxDescription').value = editData.description;
+ modal.querySelector('#toolboxMonitoring').checked = editData.monitoring;
+ modal.querySelector('#addToolboxModalLabel').textContent = 'Редактировать склад';
+ modal.querySelector('#submitToolboxText').textContent = 'Сохранить';
+ if (editData.owner_id) {
+ modal.querySelector('#toolboxMonitoringContainer').classList.add('d-none');
+ }
+ }
+
+ // Добавляем модальное окно в DOM
document.body.appendChild(modal);
+
// Инициализация модального окна
const bsModal = new bootstrap.Modal(modal);
@@ -623,39 +637,76 @@ function addToolbox() {
const userId = userData.id;
+ let editToolboxData = {}
+
+ if (editData) {
+ Object.keys(toolboxData).forEach(key => {
+ if (toolboxData[key] !== editData[key]) {
+ editToolboxData[key] = toolboxData[key];
+ }
+ });
+ }
+
+ if (Object.keys(editToolboxData).length === 0 && editData) {
+ showInfo('Новые данные склада совпадают с текущими', 'warning');
+ // Возвращаем кнопку в исходное состояние
+ submitBtn.disabled = false;
+ spinner.style.display = 'none';
+ return;
+ }
+
try {
- // Отправка данных (замените на ваш реальный endpoint)
- const response = await apiRequest("/toolbox/", { toolboxData, userId });
+ // Отправка данных
+
+ let method = 'POST'
+ let sendData = { toolboxData, userId }
+
+ if (editData) {
+ method = 'PUT';
+ const toolboxId = editData.id;
+ sendData = { toolboxId, userId, editToolboxData };
+ }
+
+ const response = await apiRequest("/toolbox/", sendData, method);
if (response.status !== 'ok') {
- throw new Error('Ошибка при добавлении склада');
+ if (!editData) {
+ throw new Error('Ошибка при добавлении склада');
+ } else {
+ throw new Error('Ошибка при обновлении склада');
+ }
}
// Успешная отправка
bsModal.hide();
// Показываем уведомление об успехе
- showInfo('Склад успешно добавлен', 'success');
+ const successMessageText = editData ? 'Склад успешно обновлен' : 'Склад успешно добавлен';
+ showInfo(successMessageText, 'success');
// Здесь можно добавить обновление списка складов
await uploadTab('toolbox');
} catch (error) {
- console.error('Ошибка при добавлении склада:', error);
+ console.error('Ошибка при добавлении (обновлении) склада:', error);
// Возвращаем кнопку в исходное состояние
submitBtn.disabled = false;
spinner.style.display = 'none';
// Показываем сообщение об ошибке
- showInfo('Ошибка при добавлении склада. Попробуйте еще раз.', 'error');
+ const errorMessageText = editData ? 'Ошибка при обновлении склада' : 'Ошибка при добавлении склада';
+ showInfo(errorMessageText, 'error');
// Можно добавить более детальное сообщение об ошибке
const errorDiv = document.createElement('div');
errorDiv.className = 'alert alert-danger mt-3';
- errorDiv.innerHTML = `
+ errorDiv.innerHTML = !editData ? `
Ошибка! Не удалось добавить склад.
Проверьте соединение и попробуйте еще раз.
+ ` : `
+
Ошибка! Не удалось обновить склад.
+ Проверьте соединение и попробуйте еще раз.
`;
const modalBody = modal.querySelector('.modal-body');
@@ -855,6 +906,9 @@ async function loadToolboxContent(toolboxId) {
${toolboxInfo?.title || 'Склад'}
${toolboxInfo?.description || 'Описание отсутствует'}
+