/
icedev
/
eks-present
Обзор
Документация
Войти
/
icedev
/
eks-present
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
contractor.html
132 строки
6 KB
ICEDEV
init
12 май 2026, 12:50
12 май 2026, 12:50
872c4b8
Код
Авторство
О чём код?
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Главная подрядчика - EKS</title> <link rel="stylesheet" href="styles.css" /> </head> <body> <div class="container"> <header class="topbar"> <div class="brand">EKS | Подрядчик</div> <nav class="nav"> <a class="nav-link" href="index.html">Выход</a> <a class="nav-link active" href="contractor.html">Главная</a> <a class="nav-link" href="objects.html">Объекты</a> <a class="nav-link" href="information.html">Информация</a> <a class="nav-link" href="requests.html">Реестр заявок</a> </nav> </header> <section class="glass-card section-card"> <h1 class="title">Панель подрядчика</h1> <p class="subtitle">Ключевые рабочие разделы для оперативного контроля</p> <div class="grid"> <a class="tile" href="employees.html?id=1" aria-label="Открыть список сотрудников организации"> <h3>Сотрудники</h3> <p>Графики, доступы, назначение на объекты.</p> </a> <article class="tile"><h3>Объекты</h3><p>Статус объектов, ход выполнения работ.</p></article> <a class="tile" href="information.html"><h3>Информация</h3><p>Акты, чертежи, спецификации и версии.</p></a> <article class="tile"><h3>Чат</h3><p>Коммуникация в системе</p></article> <article class="tile"><h3>Отчеты</h3><p>Регламентные отчеты по объектам</p></article> </div> </section> <section class="glass-card section-card"> <h2 class="title" style="font-size: 22px; margin-bottom: 8px;">Рабочие задачи</h2> <p class="subtitle">Локальный реестр задач подрядчика.</p> <form id="add-contractor-task-form" class="inline-form"> <div class="field" style="margin-bottom: 0;"> <label for="contractor-task-title">Задача</label> <input id="contractor-task-title" name="title" type="text" placeholder="Описание задачи" required /> </div> <div class="field" style="margin-bottom: 0;"> <label for="contractor-task-owner">Ответственный</label> <input id="contractor-task-owner" name="owner" type="text" placeholder="ФИО" required /> </div> <div style="display: flex; align-items: flex-end;"> <button class="btn btn-primary" type="submit" style="width: 100%;">Добавить</button> </div> </form> <div class="table-wrap"> <table> <thead> <tr> <th>Задача</th> <th>Ответственный</th> <th class="actions-cell">Действия</th> </tr> </thead> <tbody id="contractor-tasks-tbody"></tbody> </table> </div> </section> </div> <script> const CONTRACTOR_TASKS_KEY = "eks_contractor_tasks"; const DEFAULT_CONTRACTOR_TASKS = [ { id: "ct1", title: "Проверить готовность вентиляции", owner: "С. П. Иванов" }, { id: "ct2", title: "Согласовать поставку кабеля", owner: "А. Д. Петрова" }, ]; function getContractorTasks() { const raw = localStorage.getItem(CONTRACTOR_TASKS_KEY); if (!raw) { localStorage.setItem(CONTRACTOR_TASKS_KEY, JSON.stringify(DEFAULT_CONTRACTOR_TASKS)); return [...DEFAULT_CONTRACTOR_TASKS]; } try { const parsed = JSON.parse(raw); return Array.isArray(parsed) ? parsed : [...DEFAULT_CONTRACTOR_TASKS]; } catch (error) { localStorage.setItem(CONTRACTOR_TASKS_KEY, JSON.stringify(DEFAULT_CONTRACTOR_TASKS)); return [...DEFAULT_CONTRACTOR_TASKS]; } } function saveContractorTasks(items) { localStorage.setItem(CONTRACTOR_TASKS_KEY, JSON.stringify(items)); } function removeContractorTask(id) { const items = getContractorTasks().filter((item) => item.id !== id); saveContractorTasks(items); renderContractorTasks(); } function renderContractorTasks() { const tbody = document.getElementById("contractor-tasks-tbody"); const items = getContractorTasks(); tbody.innerHTML = ""; items.forEach((item) => { const tr = document.createElement("tr"); tr.innerHTML = "<td>" + item.title + "</td>" + "<td>" + item.owner + "</td>" + "<td><button class=\"btn btn-danger\" type=\"button\" data-delete-contractor-task=\"" + item.id + "\">Удалить</button></td>"; tbody.appendChild(tr); }); tbody.querySelectorAll("[data-delete-contractor-task]").forEach((button) => { button.addEventListener("click", () => removeContractorTask(button.getAttribute("data-delete-contractor-task"))); }); } document.getElementById("add-contractor-task-form").addEventListener("submit", (event) => { event.preventDefault(); const formData = new FormData(event.target); const title = String(formData.get("title") || "").trim(); const owner = String(formData.get("owner") || "").trim(); if (!title || !owner) return; const items = getContractorTasks(); items.push({ id: String(Date.now()), title, owner }); saveContractorTasks(items); event.target.reset(); renderContractorTasks(); }); renderContractorTasks(); </script> </body> </html>