комментарии на инструментах
This commit is contained in:
@@ -3823,6 +3823,7 @@ async function getToolkitStocks(toolkitId) {
|
||||
return resp.data;
|
||||
}
|
||||
|
||||
// Функция показа модального окна с деталями инструмента
|
||||
// Функция показа модального окна с деталями инструмента
|
||||
async function showToolkitDetailsModal(toolkitId) {
|
||||
const modalId = 'toolkitDetailsModal';
|
||||
@@ -3920,6 +3921,36 @@ async function showToolkitDetailsModal(toolkitId) {
|
||||
let toolkitStocksData = null;
|
||||
let isStocksLoading = false;
|
||||
|
||||
// Форматирование даты комментария
|
||||
let commentDateInfo = '';
|
||||
if (toolkitData.comment_at) {
|
||||
const commentDate = new Date(toolkitData.comment_at);
|
||||
commentDateInfo = `
|
||||
<div class="text-muted small">
|
||||
<i class="bi bi-clock me-1"></i>
|
||||
Последнее изменение: ${commentDate.toLocaleDateString('ru-RU')} ${commentDate.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' })}
|
||||
</div>
|
||||
`;
|
||||
} else {
|
||||
commentDateInfo = `
|
||||
<div class="text-muted small">
|
||||
<i class="bi bi-info-circle me-1"></i>
|
||||
Комментарии еще не оставляли
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
// Информация о пользователе, оставившем комментарий
|
||||
let commentUserInfo = '';
|
||||
if (toolkitData.comment_user_data && toolkitData.comment_user_data.username) {
|
||||
commentUserInfo = `
|
||||
<div class="text-muted small">
|
||||
<i class="bi bi-person me-1"></i>
|
||||
Автор: ${toolkitData.comment_user_data.username}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
modal.innerHTML = `
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
@@ -3993,6 +4024,27 @@ async function showToolkitDetailsModal(toolkitId) {
|
||||
` : ''}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Секция комментариев -->
|
||||
<div class="border-top pt-3 mt-3">
|
||||
<h6><i class="bi bi-chat-left-text me-1"></i>Комментарий</h6>
|
||||
<div class="mb-2">
|
||||
${commentDateInfo}
|
||||
${commentUserInfo}
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<textarea class="form-control" id="toolkitComment" rows="3"
|
||||
placeholder="Введите комментарий...">${toolkitData.comment_text || ''}</textarea>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
<div class="form-text">
|
||||
Комментарий будет сохранен для этого инструмента
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary btn-sm" id="saveCommentBtn" disabled>
|
||||
<i class="bi bi-save me-1"></i>Сохранить
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
|
||||
@@ -4100,6 +4152,101 @@ async function showToolkitDetailsModal(toolkitId) {
|
||||
const bsModal = new bootstrap.Modal(modal);
|
||||
bsModal.show();
|
||||
|
||||
// Элементы для работы с комментарием
|
||||
const commentTextarea = modal.querySelector('#toolkitComment');
|
||||
const saveCommentBtn = modal.querySelector('#saveCommentBtn');
|
||||
const originalComment = toolkitData.comment_text || '';
|
||||
|
||||
// Проверка изменения комментария
|
||||
const checkCommentChanged = () => {
|
||||
const currentComment = commentTextarea.value.trim();
|
||||
const isChanged = currentComment !== originalComment;
|
||||
saveCommentBtn.disabled = !isChanged || currentComment === '';
|
||||
};
|
||||
|
||||
// Слушатель изменений в текстовом поле
|
||||
commentTextarea.addEventListener('input', checkCommentChanged);
|
||||
|
||||
// Обработчик сохранения комментария
|
||||
saveCommentBtn.addEventListener('click', async () => {
|
||||
const commentText = commentTextarea.value.trim();
|
||||
|
||||
if (!commentText) {
|
||||
showInfo('Комментарий не может быть пустым', 'warning');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// Блокируем кнопку на время отправки
|
||||
saveCommentBtn.disabled = true;
|
||||
saveCommentBtn.innerHTML = '<span class="spinner-border spinner-border-sm me-1" role="status" aria-hidden="true"></span>Сохранение...';
|
||||
|
||||
// Отправляем комментарий на сервер
|
||||
const response = await apiRequest('/toolkit/comment', {
|
||||
toolkitId: toolkitData.id,
|
||||
userId: userData.id,
|
||||
commentText: commentText
|
||||
}, 'POST');
|
||||
|
||||
if (response.status === 'ok') {
|
||||
// Обновляем информацию о комментарии без перезагрузки страницы
|
||||
const now = new Date();
|
||||
|
||||
// Обновляем информацию о дате
|
||||
const dateInfoDiv = modal.querySelector('.border-top .text-muted.small:first-child');
|
||||
if (dateInfoDiv) {
|
||||
dateInfoDiv.innerHTML = `
|
||||
<i class="bi bi-clock me-1"></i>
|
||||
Последнее изменение: ${now.toLocaleDateString('ru-RU')} ${now.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' })}
|
||||
`;
|
||||
}
|
||||
|
||||
// Обновляем информацию о пользователе
|
||||
const userInfoDiv = modal.querySelector('.border-top .text-muted.small:nth-child(2)');
|
||||
if (userInfoDiv) {
|
||||
userInfoDiv.innerHTML = `
|
||||
<i class="bi bi-person me-1"></i>
|
||||
Автор: ${userData.username || 'Текущий пользователь'}
|
||||
`;
|
||||
} else if (userData.username) {
|
||||
// Если элемента с информацией о пользователе не было, создаем его
|
||||
const commentInfoDiv = modal.querySelector('.border-top .mb-2');
|
||||
if (commentInfoDiv) {
|
||||
const newUserInfo = document.createElement('div');
|
||||
newUserInfo.className = 'text-muted small';
|
||||
newUserInfo.innerHTML = `
|
||||
<i class="bi bi-person me-1"></i>
|
||||
Автор: ${userData.username}
|
||||
`;
|
||||
commentInfoDiv.appendChild(newUserInfo);
|
||||
}
|
||||
}
|
||||
|
||||
// Обновляем оригинальный комментарий для дальнейших проверок
|
||||
toolkitData.comment_text = commentText;
|
||||
toolkitData.comment_at = now.toISOString();
|
||||
toolkitData.comment_user_data = { username: userData.username };
|
||||
|
||||
// Показываем успешное сообщение
|
||||
showInfo('Комментарий успешно сохранен', 'success');
|
||||
|
||||
// Кнопка становится неактивной, так как изменения сохранены
|
||||
saveCommentBtn.innerHTML = '<i class="bi bi-save me-1"></i>Сохранено';
|
||||
setTimeout(() => {
|
||||
saveCommentBtn.innerHTML = '<i class="bi bi-save me-1"></i>Сохранить';
|
||||
checkCommentChanged();
|
||||
}, 1500);
|
||||
} else {
|
||||
throw new Error(response.message || 'Ошибка сохранения комментария');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Ошибка при сохранении комментария:', error);
|
||||
showInfo(error.message || 'Произошла ошибка при сохранении комментария', 'danger');
|
||||
saveCommentBtn.disabled = false;
|
||||
saveCommentBtn.innerHTML = '<i class="bi bi-save me-1"></i>Сохранить';
|
||||
}
|
||||
});
|
||||
|
||||
// Функция для загрузки данных об остатках
|
||||
const loadToolkitStocks = async () => {
|
||||
if (isStocksLoading) return;
|
||||
|
||||
Reference in New Issue
Block a user