227 lines
12 KiB
HTML
227 lines
12 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Согласование документов</title>
|
||
<link rel="stylesheet" href="style.css">
|
||
<link rel="stylesheet" href="doc.css">
|
||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||
</head>
|
||
<body>
|
||
<div class="doc-container">
|
||
<header>
|
||
<div class="header-top">
|
||
<h1><i class="fas fa-file-contract"></i> Согласование документов</h1>
|
||
<div class="user-info">
|
||
<span id="current-user"></span>
|
||
<button onclick="window.location.href = '/'" class="btn-back">
|
||
<i class="fas fa-arrow-left"></i> Назад к задачам
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<nav class="doc-nav">
|
||
<button onclick="showDocumentSection('create-document')" class="nav-btn">
|
||
<i class="fas fa-plus-circle"></i> Создать документ
|
||
</button>
|
||
<button onclick="showDocumentSection('my-documents')" class="nav-btn">
|
||
<i class="fas fa-folder"></i> Мои документы
|
||
</button>
|
||
<button onclick="showDocumentSection('approval-documents')" class="nav-btn" id="approval-btn">
|
||
<i class="fas fa-check-circle"></i> На согласовании
|
||
</button>
|
||
<button onclick="logout()" class="btn-logout">
|
||
<i class="fas fa-sign-out-alt"></i> Выйти
|
||
</button>
|
||
</nav>
|
||
</header>
|
||
|
||
<main>
|
||
<!-- Создание документа -->
|
||
<section id="create-document-section" class="document-section active">
|
||
<h2><i class="fas fa-plus-circle"></i> Создать новый документ</h2>
|
||
<form id="create-document-form" enctype="multipart/form-data">
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label for="title"><i class="fas fa-heading"></i> Название документа:</label>
|
||
<input type="text" id="title" name="title" required placeholder="Введите название документа">
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="document-type"><i class="fas fa-file-alt"></i> Тип документа:</label>
|
||
<select id="document-type" name="documentTypeId">
|
||
<option value="">Выберите тип документа</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="description"><i class="fas fa-align-left"></i> Описание:</label>
|
||
<textarea id="description" name="description" rows="3" placeholder="Описание документа"></textarea>
|
||
</div>
|
||
|
||
<div class="form-row">
|
||
<div class="form-group">
|
||
<label for="due-date"><i class="fas fa-clock"></i> Срок согласования:</label>
|
||
<input type="date" id="due-date" name="dueDate">
|
||
</div>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="comment"><i class="fas fa-comment"></i> Комментарий для согласующих:</label>
|
||
<textarea id="comment" name="comment" rows="2" placeholder="Комментарий для согласующих"></textarea>
|
||
</div>
|
||
|
||
<div class="form-group">
|
||
<label for="files"><i class="fas fa-paperclip"></i> Прикрепить файлы:</label>
|
||
<div class="file-upload">
|
||
<input type="file" id="files" name="files" multiple>
|
||
<label for="files" class="file-upload-label">
|
||
<i class="fas fa-cloud-upload-alt"></i> Выберите файлы
|
||
</label>
|
||
</div>
|
||
<div id="file-list"></div>
|
||
</div>
|
||
|
||
<div class="form-info">
|
||
<p><i class="fas fa-info-circle"></i> Документ будет отправлен на согласование секретарю</p>
|
||
</div>
|
||
|
||
<button type="submit" class="btn-primary">
|
||
<i class="fas fa-check-circle"></i> Отправить на согласование
|
||
</button>
|
||
</form>
|
||
</section>
|
||
|
||
<!-- Мои документы -->
|
||
<section id="my-documents-section" class="document-section">
|
||
<div class="section-header">
|
||
<h2><i class="fas fa-folder"></i> Мои документы</h2>
|
||
<div class="document-filters">
|
||
<div class="filter-group">
|
||
<label for="search-documents"><i class="fas fa-search"></i> Поиск:</label>
|
||
<input type="text" id="search-documents" placeholder="Поиск по названию, номеру...">
|
||
</div>
|
||
<div class="filter-group">
|
||
<label for="document-status-filter"><i class="fas fa-filter"></i> Статус:</label>
|
||
<select id="document-status-filter">
|
||
<option value="all">Все статусы</option>
|
||
<option value="На согласовании">На согласовании</option>
|
||
<option value="Согласован">Согласован</option>
|
||
<option value="Отказано">Отказано</option>
|
||
<option value="Отозван">Отозван</option>
|
||
<option value="Завершен">Завершен</option>
|
||
</select>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="my-documents-list" class="documents-list">
|
||
<div class="loading">Загрузка документов...</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Документы на согласование -->
|
||
<section id="approval-documents-section" class="document-section">
|
||
<div class="section-header">
|
||
<h2><i class="fas fa-check-circle"></i> Документы на согласование</h2>
|
||
<div class="document-filters">
|
||
<div class="filter-group">
|
||
<label for="search-approval-documents"><i class="fas fa-search"></i> Поиск:</label>
|
||
<input type="text" id="search-approval-documents" placeholder="Поиск по названию, номеру...">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="approval-documents-list" class="documents-list">
|
||
<div class="loading">Загрузка документов...</div>
|
||
</div>
|
||
</section>
|
||
</main>
|
||
</div>
|
||
|
||
<!-- Модальное окно согласования -->
|
||
<div id="approve-modal" class="modal">
|
||
<div class="modal-content">
|
||
<span class="close" onclick="closeApproveModal()">×</span>
|
||
<h3><i class="fas fa-check-circle"></i> Согласование документа</h3>
|
||
<form id="approve-form">
|
||
<input type="hidden" id="approve-modal-document-id">
|
||
<input type="hidden" id="approve-modal-type">
|
||
|
||
<div class="form-group">
|
||
<label for="approve-comment">Комментарий к согласованию:</label>
|
||
<textarea id="approve-comment" name="comment" rows="4" placeholder="Ваш комментарий к документу..."></textarea>
|
||
<small>Комментарий будет виден всем участникам согласования</small>
|
||
</div>
|
||
|
||
<div class="form-group" id="refusal-reason" style="display: none;">
|
||
<label for="refusal-reason-text">Причина отказа:</label>
|
||
<textarea id="refusal-reason-text" name="refusalReason" rows="3" placeholder="Укажите причину отказа в согласовании..." required></textarea>
|
||
</div>
|
||
|
||
<div class="modal-buttons">
|
||
<button type="submit" class="btn-primary" id="approve-submit-btn">
|
||
<i class="fas fa-check"></i> Подтвердить
|
||
</button>
|
||
<button type="button" class="btn-secondary" onclick="closeApproveModal()">
|
||
<i class="fas fa-times"></i> Отмена
|
||
</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
|
||
<script src="auth.js"></script>
|
||
<script src="files.js"></script>
|
||
<script src="doc.js"></script>
|
||
<script>
|
||
// Проверка аутентификации для страницы документов
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
checkAuth();
|
||
});
|
||
|
||
let currentUser = null;
|
||
|
||
async function checkAuth() {
|
||
try {
|
||
const response = await fetch('/api/user');
|
||
if (response.ok) {
|
||
const data = await response.json();
|
||
currentUser = data.user;
|
||
showMainInterface();
|
||
} else {
|
||
window.location.href = '/';
|
||
}
|
||
} catch (error) {
|
||
window.location.href = '/';
|
||
}
|
||
}
|
||
|
||
function showMainInterface() {
|
||
document.getElementById('current-user').textContent = `Вы вошли как: ${currentUser.name}`;
|
||
|
||
// Проверяем, является ли пользователь секретарем
|
||
const isSecretary = currentUser.groups && currentUser.groups.includes('Секретарь');
|
||
|
||
// Показываем/скрываем кнопку согласования
|
||
const approvalBtn = document.getElementById('approval-btn');
|
||
if (approvalBtn) {
|
||
if (isSecretary) {
|
||
approvalBtn.style.display = 'inline-block';
|
||
} else {
|
||
approvalBtn.style.display = 'none';
|
||
}
|
||
}
|
||
}
|
||
|
||
function logout() {
|
||
fetch('/api/logout', { method: 'POST' })
|
||
.then(() => {
|
||
window.location.href = '/';
|
||
})
|
||
.catch(error => {
|
||
console.error('Ошибка выхода:', error);
|
||
});
|
||
}
|
||
</script>
|
||
</body>
|
||
</html> |