Files
minicrm/public/index.html
2026-03-26 17:20:04 +05:00

571 lines
34 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{SCHOOL_NAME}} - {{APP_NAME}}</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<!--
<script src="loading-start.js"></script>
-->
<script src="auth.js"></script>
<!--
<script src="users.js"></script>
<script src="ui.js"></script>
<script src="tasks.js"></script>
<script src="kanban.js"></script>
<script src="files.js"></script>
<script src="profile.js"></script>
<script src="time-selector.js"></script>
<script src="openTaskChat.js"></script>
<script src="tasks_files.js"></script>
<script src="navbar.js"></script>
<script src="signature.js"></script>
<script src="document-fields.js"></script>
<script src="chat-ui.js"></script>
-->
<script src="main.js"></script>
<!--
<script src="tasks-type.js"></script>
-->
</head>
<body>
<div id="login-modal" class="modal">
<div class="modal-content">
<div style="text-align: center; margin-bottom: 20px;">
<img src="login2.png" alt="School CRM Logo" style="max-width: 140px; max-height: 150px;">
</div>
<!-- <h2><i class="fas fa-sign-in-alt"></i> Вход в School CRM</h2> -->
<form id="login-form">
<div class="form-group">
<label for="login"><i class="fas fa-user"></i> Логин:</label>
<input type="text" id="login" name="login" required>
</div>
<div class="form-group">
<label for="password"><i class="fas fa-lock"></i> Пароль:</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit" class="btn-primary">
<i class="fas fa-sign-in-alt"></i> Войти
</button>
</form>
<div class="test-users">
<h3><i class="fas fa-users"></i> {{APP_NAME}} {{APP_VERSION}}</h3>
<ul>
<li><strong><i class="fas fa-school"></i> @2025</strong> {{SCHOOL_NAME}}</li>
</ul>
</div>
</div>
</div>
<div class="container">
<header>
<div class="header-top">
<div style="display: flex; align-items: center; justify-content: center; gap: 20px; margin-bottom: 20px;">
<img src="login2.png" alt="School CRM Logo" style="max-width: 200px; max-height: 110px; flex-shrink: 0;">
<h1 style="margin: 0;"> {{SCHOOL_NAME}} - {{APP_NAME}}</h1>
<img src="login2.png" alt="School CRM Logo" style="max-width: 200px; max-height: 110px; flex-shrink: 0;">
</div>
<div class="user-info">
<span id="current-user"></span>
</div>
</div>
<nav id="navbar-container">
<!-- Кнопки навигации будут добавлены через navbar.js -->
</nav>
</header>
<main>
<section id="tasks-section" class="section">
<h2><i class="fas fa-tasks"></i> Все задачи</h2>
<div id="tasks-controls">
<div class="filters">
<div class="filter-group">
<label for="task-view-filter"><i class="fas fa-eye"></i> Вид задач:</label>
<select id="task-view-filter" onchange="changeTaskView()">
<option value="all">Все задачи</option>
<option value="my_assigned">Задачи, которые я назначил</option>
<option value="assigned_to_me">Задачи, назначенные мне</option>
</select>
</div>
<div class="filter-group">
<label for="status-filter"><i class="fas fa-filter"></i> Статус:</label>
<select id="status-filter" onchange="loadTasks()">
<option value="active,in_progress,assigned,overdue,rework">Все активные</option>
<option value="all">Все статусы</option>
<option value="assigned">Назначена</option>
<option value="in_progress">В работе</option>
<option value="rework">На доработке</option>
<option value="overdue">Просрочена</option>
<option value="completed">Выполнена</option>
<option value="closed">Закрыта</option>
</select>
</div>
<div class="filter-group">
<label for="type-filter"><i class="fas fa-tag"></i> Тип:</label>
<select id="type-filter" onchange="loadTasks()">
<option value="">Все типы</option>
<option value="regular">Обычная задача</option>
<option value="document">Согласование документа</option>
<option value="acquaintance">Ознакомление</option>
<option value="it">ИТ отдел</option>
<option value="ahch">АХЧ</option>
<option value="psychologist">Психолог</option>
<option value="speech_therapist">Логопед</option>
<option value="Social_educator">Социальный педагог</option>
<option value="hr">Диспетчер расписания</option>
<option value="certificate">Справка</option>
<option value="e_journal">Эл. журнал</option>
</select>
</div>
<div class="filter-group">
<label for="creator-filter"><i class="fas fa-user-tie"></i> Заказчик:</label>
<select id="creator-filter" onchange="loadTasks()">
<option value="">Все заказчики</option>
</select>
</div>
<div class="filter-group">
<label for="assignee-filter"><i class="fas fa-user-check"></i> Исполнитель:</label>
<select id="assignee-filter" onchange="loadTasks()">
<option value="">Все исполнители</option>
</select>
</div>
<div class="filter-group">
<label for="deadline-filter"><i class="fas fa-calendar-times"></i> Срок выполнения:</label>
<select id="deadline-filter" onchange="loadTasks()">
<option value="">Все сроки</option>
<option value="48h">Менее 48 часов</option>
<option value="24h">Менее 24 часов</option>
</select>
</div>
<div class="filter-group" style="flex-grow: 1; min-width: 180px;">
<label for="search-tasks"><i class="fas fa-search"></i> Поиск:</label>
<input type="text" id="search-tasks" placeholder="Поиск по названию и описанию..." oninput="loadTasks()">
</div>
<div class="filter-actions">
<button type="button" class="btn-reset" onclick="resetAllFilters()">
<i class="fas fa-undo"></i> Сбросить фильтры
</button>
</div>
</div>
<label class="show-deleted-label" style="display: none;">
<input type="checkbox" id="show-deleted" onchange="loadTasks()">
<i class="fas fa-trash"></i> Показать удаленные задачи
</label>
</div>
<div id="tasks-list"></div>
</section>
<section id="create-task-section" class="section">
<h2><i class="fas fa-plus-circle"></i> Создать новую задачу</h2>
<form id="create-task-form" enctype="multipart/form-data">
<div class="task-type-selector">
<div class="task-type-buttons">
<button type="button" class="task-type-btn active" data-type="regular" onclick="selectTaskType('regular')"><i class="fas fa-tasks"></i> Обычная задача</button>
<button type="button" class="task-type-btn" data-type="acquaintance" onclick="selectTaskType('acquaintance')"><i class="fas fa-eye"></i> Ознакомление</button>
<button type="button" class="task-type-btn" data-type="document" onclick="selectTaskType('document')"><i class="fas fa-file-signature"></i> Согласование документа</button>
<button type="button" class="task-type-btn" data-type="it" onclick="selectTaskType('it')"><i class="fas fa-desktop"></i> Заявка в ИТ отдел</button>
<button type="button" class="task-type-btn" data-type="ahch" onclick="selectTaskType('ahch')"><i class="fas fa-tools"></i> Заявка в АХЧ</button>
<button type="button" class="task-type-btn" data-type="psychologist" onclick="selectTaskType('psychologist')"><i class="fas fa-brain"></i> Заявка к психологу</button>
<button type="button" class="task-type-btn" data-type="speech_therapist" onclick="selectTaskType('speech_therapist')"><i class="fas fa-comment-medical"></i> Заявка к логопеду</button>
<button type="button" class="task-type-btn" data-type="Social_educator" onclick="selectTaskType('Social_educator')"><i class="fas fa-user-graduate"></i> Социальный педагог</button>
<button type="button" class="task-type-btn" data-type="hr" onclick="selectTaskType('hr')"><i class="fas fa-users"></i> Заявка диспетчеру расписания</button>
<button type="button" class="task-type-btn" data-type="certificate" onclick="selectTaskType('certificate')">
<i class="fas fa-book"></i> Заявка на справку
</button>
<button type="button" class="task-type-btn" data-type="e_journal" onclick="selectTaskType('e_journal')">
<i class="fas fa-book"></i> Доступ в электронный журнал
</button>
</div>
<input type="hidden" id="task-type" name="taskType" value="regular">
</div>
<div class="form-group">
<label for="title"><i class="fas fa-heading"></i> Название задачи:</label>
<input type="text" id="title" name="title" required>
</div>
<div class="form-group">
<div id="it-additional-fields" style="display: none;">
<div class="form-row">
<div class="form-group">
<label for="it-cabinet">Номер кабинета:</label>
<input type="text" id="it-cabinet" name="it-cabinet" placeholder="например, 301">
</div>
<div class="form-group">
<label for="it-corpus">Корпус:</label>
<select id="it-corpus-type" name="it-corpus-type">
<option value="">-- Выберите --</option>
<option value="Цветоносная 2">Цветоносная 2</option>
<option value="Феофанова 10">Феофанова 10</option>
</select>
</div>
<div class="form-group">
<label for="it-problem-type">Тип проблемы:</label>
<select id="it-problem-type" name="it-problem-type">
<option value="">-- Выберите --</option>
<option value="Не включается компьютер">Не включается компьютер</option>
<option value="Не работает проектор">Не работает проектор</option>
<option value="Не работает интерактивная панель">Не работает интерактивная панель</option>
<option value="Проблемы с интернетом">Проблемы с интернетом</option>
<option value="Не печатает принтер">Не печатает принтер</option>
<option value="Не печатает принтер">Не работает телефон</option>
<option value="Прочее">Прочее</option>
</select>
</div>
</div>
</div>
<label for="description"><i class="fas fa-align-left"></i> Описание:</label>
<textarea id="description" name="description" rows="4"></textarea>
</div>
<div class="form-group">
<label for="due-date"><i class="fas fa-calendar-alt"></i> Дата выполнения:</label>
<div class="time-buttons">
<button type="button" class="time-btn active" onclick="setTaskTime('12:00')"><i class="fas fa-sun"></i> До обеда</button>
<input type="date" class="date-btn" id="due-date" name="dueDate" required>
<button type="button" class="time-btn" onclick="setTaskTime('19:00')"><i class="fas fa-moon"></i> После обеда</button>
</div>
<input type="hidden" id="due-time" name="dueTime" value="12:00">
</div>
<div class="form-group">
<label><i class="fas fa-users"></i> Исполнители:</label>
<div class="user-search">
<input type="text" id="user-search" placeholder="Поиск исполнителей..." oninput="filterUsers()">
</div>
<div id="users-checklist" class="checkbox-group"></div>
</div>
<div class="form-group">
<label for="files"><i class="fas fa-paperclip"></i> Прикрепить файлы (до 15 файлов, максимум 300MB):</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>
<button type="submit" class="btn-primary">
<i class="fas fa-check-circle"></i> Создать задачу
</button>
</form>
</section>
<div id="mytasks-section" class="section">
<h2><i class="fas fa-user-edit"></i> Мои задачи (как автор)</h2>
<div class="filters" style="margin-bottom: 20px;">
<div class="filter-group">
<label for="mytasks-status-filter"><i class="fas fa-filter"></i> Статус:</label>
<select id="mytasks-status-filter" onchange="filterMyTasks()">
<option value="all">Все статусы</option>
<option value="assigned">Назначена</option>
<option value="in_progress">В работе</option>
<option value="rework">На доработке</option>
<option value="overdue">Просрочена</option>
<option value="completed">Выполнена</option>
</select>
</div>
<div class="filter-group" style="flex-grow: 1;">
<label for="mytasks-search"><i class="fas fa-search"></i> Поиск:</label>
<input type="text" id="mytasks-search" placeholder="Поиск по названию..." oninput="filterMyTasks()">
</div>
</div>
<div id="mytasks-list" class="tasks-container"></div>
</div>
<div id="runtasks-section" class="section">
<h2><i class="fas fa-user-check"></i> Задачи для исполнения</h2>
<div class="filters" style="margin-bottom: 20px;">
<div class="filter-group">
<label for="runtasks-status-filter"><i class="fas fa-filter"></i> Статус:</label>
<select id="runtasks-status-filter" onchange="filterRunTasks()">
<option value="all">Все статусы</option>
<option value="assigned">Назначена</option>
<option value="in_progress">В работе</option>
<option value="rework">На доработке</option>
<option value="overdue">Просрочена</option>
<option value="completed">Выполнена</option>
</select>
</div>
<div class="filter-group" style="flex-grow: 1;">
<label for="runtasks-search"><i class="fas fa-search"></i> Поиск:</label>
<input type="text" id="runtasks-search" placeholder="Поиск по названию..." oninput="filterRunTasks()">
</div>
</div>
<div id="runtasks-list" class="tasks-container"></div>
</div>
<section id="logs-section" class="section">
<h2><i class="fas fa-history"></i> Лог активности</h2>
<div id="logs-list"></div>
</section>
<section id="profile-section" class="section">
<h2><i class="fas fa-user-circle"></i> Личный кабинет</h2>
<div id="user-profile-info"></div>
<div class="notification-settings">
<h3><i class="fas fa-bell"></i> Настройки уведомлений</h3>
<form id="notification-settings-form">
<div class="form-group">
<label class="checkbox-label">
<input type="checkbox" id="email-notifications" name="email_notifications">
<span><i class="fas fa-envelope"></i> Email уведомления</span>
</label>
</div>
<div class="form-group">
<div class="input-with-icon">
<i class="fas fa-envelope"></i>
<input type="email" id="notification-email" name="notification_email"
placeholder="Введите email для уведомлений">
</div>
<small>Email для уведомлений</small>
</div>
<div class="form-group hidden">
<div class="form-group"><label class="checkbox-label"><input type="checkbox" id="telegram-notifications" name="telegram_notifications" disabled><span><i class="fab fa-telegram"></i> Telegram уведомления (скоро)</span></label></div>
<div class="form-group"><label class="checkbox-label"><input type="checkbox" id="vk-notifications" name="vk_notifications" disabled><span><i class="fab fa-vk"></i> ВКонтакте уведомления (скоро)</span></label></div>
<div class="form-group"><label class="checkbox-label"><input type="checkbox" id="sberbank-notifications" name="sberbank_notifications" disabled><span><i class="fas fa-university"></i> Сбербанк Онлайн уведомления (скоро)</span></label></div>
<div class="form-group"><label class="checkbox-label"><input type="checkbox" id="yandex-notifications" name="yandex_notifications" disabled><span><i class="fab fa-yandex"></i> Яндекс уведомления (скоро)</span></label></div>
<div class="form-group"><label class="checkbox-label"><input type="checkbox" id="gosuslugi-notifications" name="gosuslugi_notifications" disabled><span><i class="fas fa-passport"></i> Госуслуги уведомления (скоро)</span></label></div>
</div>
<button type="submit" class="btn-primary">
<i class="fas fa-save"></i> Сохранить настройки
</button>
</form>
</div>
</section>
<!-- Секция отчётов (обновлена) -->
<section id="reports-section" class="section">
<h2><i class="fas fa-chart-pie"></i> Отчёт по задачам</h2>
<div class="reports-filters">
<div class="filter-group">
<label for="report-task-id-filter">Номер задачи:</label>
<select id="report-task-id-filter" onchange="applyFilters()">
<option value="">Все номера</option>
</select>
</div>
<div class="filter-group">
<label for="report-status-filter">Статус:</label>
<select id="report-status-filter" onchange="applyFilters()">
<option value="">Все статусы</option>
<option value="assigned">Назначена</option>
<option value="in_progress">В работе</option>
<option value="completed">Выполнена</option>
<option value="overdue">Просрочена</option>
<option value="rework">На доработке</option>
<option value="deleted">Удалена</option>
</select>
</div>
<div class="filter-group">
<label for="report-user-filter">Исполнитель:</label>
<select id="report-user-filter" onchange="applyFilters()">
<option value="">Все пользователи</option>
</select>
</div>
<div class="filter-group">
<label for="report-type-filter">Тип задачи:</label>
<select id="report-type-filter" onchange="applyFilters()">
<option value="">Все типы</option>
<option value="regular">Обычная задача</option>
<option value="document">Согласование документа</option>
<option value="it">ИТ отдел</option>
<option value="ahch">АХЧ</option>
<option value="psychologist">Психолог</option>
<option value="speech_therapist">Логопед</option>
<option value="hr">Диспетчер расписания</option>
<option value="certificate">Справка</option>
<option value="e_journal">Эл. журнал</option>
</select>
</div>
<div class="filter-group buttons-group">
<button class="btn-primary" onclick="printReport()" title="Печать">
<i class="fas fa-print"></i> Печать
</button> <!--
<button class="btn-secondary" onclick="loadReportData()" title="Обновить данные">
<i class="fas fa-sync-alt"></i> Обновить
</button> -->
<button class="btn-primary" onclick="resetReportFilters()" title="Сбросить все фильтры">
<i class="fas fa-undo-alt"></i> Сбросить
</button>
</div>
</div>
<!-- Сводка по статусам -->
<div id="report-summary" class="report-summary"></div>
<!-- Таблица с задачами (без описания) -->
<div class="table-container report-table-container">
<table id="report-table" class="report-table">
<thead>
<tr>
<th>№ задачи</th>
<th>Название</th>
<th>Срок выполнения</th>
<th>Исполнитель</th>
<th>Автор</th>
<th>Статус исполнителя</th>
<th>Последнее изменение</th>
</tr>
</thead>
<tbody id="report-table-body">
<tr><td colspan="7" class="loading">Загрузка данных...</td></tr>
</tbody>
</table>
</div>
</section>
</main>
</div>
<!-- Модальные окна (без изменений) -->
<div id="edit-task-modal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeEditModal()">&times;</span>
<h3><i class="fas fa-edit"></i> Редактировать задачу</h3>
<form id="edit-task-form" enctype="multipart/form-data">
<input type="hidden" id="edit-task-id">
<div class="form-group">
<label for="edit-title">Название задачи:</label>
<input type="text" id="edit-title" name="title" required>
</div>
<div class="form-group">
<label for="edit-description">Описание:</label>
<textarea id="edit-description" name="description" rows="4"></textarea>
</div>
<div class="form-group">
<label for="edit-due-date">Дата выполнения:</label>
<input type="date" id="edit-due-date" name="dueDate" required>
<div class="time-buttons">
<button type="button" class="edit-time-btn" onclick="setEditTaskTime('12:00')">
<i class="fas fa-sun"></i> До обеда (12:00)
</button>
<button type="button" class="edit-time-btn" onclick="setEditTaskTime('19:00')">
<i class="fas fa-moon"></i> После обеда (19:00)
</button>
</div>
<input type="hidden" id="edit-due-time" name="dueTime" value="12:00">
</div>
<div class="form-group">
<label>Исполнители:</label>
<div class="user-search">
<div id="edit-users-checklist" class="checkbox-group"></div>
<input type="text" id="edit-user-search" placeholder="Поиск исполнителей..." oninput="filterEditUsers()">
</div>
</div>
<div class="form-group">
<label for="edit-files">Добавить файлы:</label>
<input type="file" id="edit-files" name="files" multiple>
<div id="edit-file-list"></div>
</div>
<button type="submit" class="btn-primary">
<i class="fas fa-save"></i> Сохранить изменения
</button>
</form>
</div>
</div>
<div id="copy-task-modal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeCopyModal()">&times;</span>
<h3><i class="fas fa-copy"></i> Создать копию задачи</h3>
<form id="copy-task-form">
<input type="hidden" id="copy-task-id">
<div class="form-group">
<label for="copy-due-date">Дата выполнения:</label>
<input type="date" class="date-btn" id="copy-due-date" name="dueDate" required>
<input type="hidden" id="copy-due-time" name="dueTime" value="19:00">
<input type="text" id="copy-user-search" placeholder="Поиск исполнителей..." oninput="filterCopyUsers()">
</div>
<div class="form-group">
<div id="copy-users-checklist" class="checkbox-group"></div>
</div>
<button type="submit" class="btn-primary">
<i class="fas fa-copy"></i> Создать копию
</button>
</form>
</div>
</div>
<div id="edit-assignment-modal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeEditAssignmentModal()">&times;</span>
<h3><i class="fas fa-clock"></i> Редактировать сроки исполнителя</h3>
<form id="edit-assignment-form">
<input type="hidden" id="edit-assignment-task-id">
<input type="hidden" id="edit-assignment-user-id">
<div class="form-group">
<label for="edit-assignment-due-date">Дата и время выполнения:</label>
<input type="datetime-local" id="edit-assignment-due-date" name="dueDate" required>
</div>
<button type="submit" class="btn-primary">
<i class="fas fa-save"></i> Сохранить сроки
</button>
</form>
</div>
</div>
<div id="rework-task-modal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeReworkModal()">&times;</span>
<h3><i class="fas fa-redo"></i> Вернуть задачу на доработку</h3>
<form id="rework-task-form">
<input type="hidden" id="rework-task-id">
<div class="form-group">
<label for="rework-comment">Комментарий к доработке:</label>
<textarea id="rework-comment" name="comment" rows="4" placeholder="Укажите, что нужно исправить..." required></textarea>
</div>
<button type="submit" class="btn-warning">
<i class="fas fa-redo"></i> Вернуть на доработку
</button>
</form>
</div>
</div>
<div id="acquaintance-task-modal" class="modal">
<div class="modal-content">
<span class="close" onclick="closeAcquaintanceModal()">&times;</span>
<h3>Создать задачу для ознакомления</h3>
<form id="acquaintance-task-form" enctype="multipart/form-data">
<input type="hidden" id="acquaintance-original-task-id">
<div class="form-group">
<label>Исходная задача:</label>
<div id="acquaintance-original-title"></div>
</div>
<div class="form-group">
<label>Автор задачи (выберите из списка):</label>
<div class="user-search">
<input type="text" id="acquaintance-author-search" placeholder="Поиск авторов..." oninput="filterAcquaintanceAuthors()">
</div>
<div id="acquaintance-authors-checklist" class="checkbox-group"></div>
</div>
<div class="form-group">
<label>Исполнитель:</label>
<div id="acquaintance-executor-info" style="padding: 10px; background: #f0f0f0; border-radius: 5px;">
<!-- сюда будет подставлено имя текущего пользователя -->
</div>
</div>
<div class="form-group">
<label for="acquaintance-due-date">Дата выполнения:</label>
<input type="date" id="acquaintance-due-date" name="dueDate" required>
<input type="hidden" id="acquaintance-due-time" name="dueTime" value="19:00">
</div>
<div class="form-group">
<label for="acquaintance-comment">Комментарий (необязательно):</label>
<textarea id="acquaintance-comment" rows="3" placeholder="Добавьте комментарий к задаче ознакомления"></textarea>
</div>
<button type="submit" class="btn-primary">Создать задачу ознакомления</button>
</form>
</div>
</div>
<div id="kanban-section" class="section kanban-section">
<div id="kanban-board" class="kanban-board">
<div class="loading">Загрузка Канбан-доски...</div>
</div>
</div>
<script src="nav-task-actions.js"></script>
<script src="loading-end.js"></script>
</body>
</html>