📌 Что это и зачем?
Особо не копался, за 10 минут сгенерировал дипсиком, чуток поправили, все работает. Уже пару раз переделал, сделал сначала центры, внутри пользователи в впользователях оборудования. Но пока не обновил код в блоге. Кому интересно в комментах пишите!
Asset Tracking System — простая самописная система на чистом PHP и MySQL для учёта выданного сотрудникам оборудования. Без лишнего веса CRM, без ежемесячной платы, без облачных подписок. Всё работает на вашем сервере. Для учета оборудования ок. Но надо будет доработывать, центры добавить, разделить по группам но это потом..
Подходит для:
- 🔹 IT-отделов компаний (ноутбуки, мониторы, мыши, клавиатуры)
- 🔹 Служб поддержки (Help Desk + учёт МТР)
- 🔹 Школ, университетов (выдача техники студентам/преподавателям)
- 🔹 Коворкингов, библиотек, проката оборудования
⚡ Возможности системы
🗄️ Структура базы данных
Всего две таблицы — максимум простоты и эффективности:
📋 Таблица `employees`
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
created_at DATETIME NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
📦 Таблица `employee_equipment`
CREATE TABLE employee_equipment (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_id INT NOT NULL,
equipment_name VARCHAR(200) NOT NULL,
issued_date DATETIME NOT NULL,
status ENUM('issued', 'returned', 'lost', 'broken') DEFAULT 'issued',
returned_date DATETIME NULL,
note TEXT NULL,
FOREIGN KEY (employee_id) REFERENCES employees(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
💻 Основной PHP-код
Код одного файла eq.php — вся логика в одном месте.
Подключение к БД и авторизация
<?php
$correct_password = '123123123123';
if (!isset($_COOKIE['eq_pass']) || $_COOKIE['eq_pass'] !== md5($correct_password)) {
if (isset($_POST['password']) && $_POST['password'] === $correct_password) {
setcookie('eq_pass', md5($correct_password), time() + 3600, '/');
header('Location: ' . $_SERVER['PHP_SELF']);
exit;
} else {
// показываем форму входа
}
}
$db = mysqli_connect('localhost', 'user', 'pass', 'database');
mysqli_set_charset($db, 'utf8mb4');
Добавление оборудования сотруднику
if ($action == 'add_equipment') {
$employee_id = intval($_POST['employee_id']);
$eq_name = mysqli_real_escape_string($db, $_POST['equipment_name']);
mysqli_query($db, "INSERT INTO employee_equipment (employee_id, equipment_name, issued_date)
VALUES ($employee_id, '$eq_name', NOW())");
header('Location: ' . $_SERVER['PHP_SELF'] . '?employee_id=' . $employee_id);
exit;
}
Изменение статуса (потеряно/сломано)
if ($action == 'edit_equipment') {
$id = intval($_POST['id']);
$status = mysqli_real_escape_string($db, $_POST['status']);
$note = mysqli_real_escape_string($db, $_POST['note']);
mysqli_query($db, "UPDATE employee_equipment
SET status='$status', note='$note'
WHERE id=$id");
header('Location: ' . $_SERVER['PHP_SELF'] . '?employee_id=' . $employee_id);
exit;
}
🎨 Интерфейс пользователя
Адаптивный, современный градиентный дизайн. Всё работает на любом устройстве.
Главный экран — список сотрудников
- Карточки сотрудников с количеством оборудования
- Кнопки "Открыть" (посмотреть оборудование) и "Удалить"
- Форма добавления нового сотрудника
Внутри сотрудника — его оборудование
- Статистика по статусам (выдано/возвращено/потеряно/сломано)
- Форма выдачи нового оборудования
- Таблица с возможностью редактировать, отмечать возврат, удалять
- При редактировании — выбор статуса и добавление примечания
🚀 Установка (3 минуты)
- Создать базу данных MySQL и пользователя
- Выполнить SQL-запросы для создания двух таблиц
- Скачать
eq.phpи положить на сервер - Указать в коде параметры подключения к БД
- Открыть
eq.phpв браузере, ввести пароль - Готово! Можно добавлять сотрудников и выдавать оборудование
Пароль по умолчанию: 123123123 (меняется в первой строке кода).
🔗 Интеграция с HESK (Help Desk)
Система может работать как самостоятельное приложение, так и быть надстройкой над популярной бесплатной Help Desk — HESK.
- Использует ту же базу данных, но свои таблицы (не мешает HESK)
- Можно встроить в админку HESK через ссылку в меню
- Авторизация независимая (свой пароль)
🤔 Почему не CRM?
CRM-системы (Bitrix24, AmoCRM, RetailCRM) — это тяжёлые монстры с кучей ненужных функций: сделки, воронки, лиды, интеграции с телефонией и т.д.
Для простого учёта оборудования нужна лёгкая утилита, которая:
- ✅ Работает за 0 рублей/месяц
- ✅ Не требует обучения сотрудников
- ✅ Открывается за 1 секунду
- ✅ Не грузит сервер
Такие системы называют Asset Tracking или IT Asset Management (ITAM) лайт-версия.
✅ Плюсы / ❌ Минусы
Плюсы
- ➕ Бесплатно и open source
- ➕ Простота — один PHP-файл
- ➕ Не требует фреймворков
- ➕ Работает на любом хостинге
- ➕ Легко доработать под себя
Минусы
- ➖ Нет мобильного приложения
- ➖ Нет API (можно дописать)
- ➖ Нет отчётов в Excel (можно добавить)
📥 Полный исходный код
Весь код находится в одном файле eq.php — около 400 строк с CSS и PHP.
Основные функции:
add_employee— добавление сотрудникаdelete_employee— удаление сотрудника + каскадное удаление его оборудованияadd_equipment— выдать оборудование сотрудникуedit_equipment— изменить статус (потеря/поломка/возврат)return_equipment— быстрая кнопка возвратаdelete_equipment— удалить запись об оборудовании
Вся графика — на CSS (градиенты, тени, бейджи, адаптивная вёрстка).
📝 Заключение
Эта система — идеальный выбор для IT-отдела, который хочет вести учёт техники без лишней бюрократии. За 15 минут вы получите полноценный инструмент, который будет служить годами.
Код легко кастомизируется: можно добавить фото сотрудника, штрихкоды, экспорт в Excel, интеграцию с Telegram-ботом — всё что угодно.
Попробуйте — это реально работает!
Создаем таблицы
-- 1. Таблица сотрудников
CREATE TABLE IF NOT EXISTS `employees` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(100) NOT NULL,
`created_at` DATETIME NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 2. Таблица оборудования (привязана к сотрудникам)
CREATE TABLE IF NOT EXISTS `employee_equipment` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`employee_id` INT NOT NULL,
`equipment_name` VARCHAR(200) NOT NULL,
`issued_date` DATETIME NOT NULL,
`status` ENUM('issued', 'returned', 'lost', 'broken') DEFAULT 'issued',
`returned_date` DATETIME NULL,
`note` TEXT NULL,
FOREIGN KEY (`employee_id`) REFERENCES `employees`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- 3. Таблица для истории (опционально — если хочешь логировать изменения)
CREATE TABLE IF NOT EXISTS `equipment_log` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`equipment_id` INT NOT NULL,
`old_status` VARCHAR(20),
`new_status` VARCHAR(20),
`changed_at` DATETIME NOT NULL,
`changed_by` VARCHAR(100),
`note` TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Код интерфейса базы выданного оборудования
<?php
// Иерархический учёт оборудования: Сотрудники → Оборудование
$correct_password = '123123123';
if (!isset($_COOKIE['eq_pass']) || $_COOKIE['eq_pass'] !== md5($correct_password)) {
if (isset($_POST['password']) && $_POST['password'] === $correct_password) {
setcookie('eq_pass', md5($correct_password), time() + 3600, '/');
header('Location: ' . $_SERVER['PHP_SELF']);
exit;
} else {
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Вход</title>
<style>
body { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; display: flex; justify-content: center; align-items: center; font-family: Arial; }
.form { background: white; padding: 40px; border-radius: 15px; text-align: center; }
input { padding: 10px; font-size: 16px; margin: 10px; border: 2px solid #ddd; border-radius: 8px; }
button { background: #667eea; color: white; border: none; padding: 10px 20px; border-radius: 8px; cursor: pointer; }
</style>
</head>
<body>
<div class="form">
<h2>🔐 Введите пароль</h2>
<form method="POST">
<input type="password" name="password" placeholder="Пароль" autofocus>
<br>
<button type="submit">Войти</button>
</form>
</div>
</body>
</html>
<?php
exit;
}
}
$db = mysqli_connect('localhost', 'u0409164_help', 'rE5nG3rD4lfB8l', 'u0409164_help');
mysqli_set_charset($db, 'utf8mb4');
mysqli_query($db, "SET NAMES utf8mb4");
// Таблица сотрудников
mysqli_query($db, "CREATE TABLE IF NOT EXISTS employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL UNIQUE,
created_at DATETIME NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci");
// Таблица оборудования (привязана к сотруднику)
mysqli_query($db, "CREATE TABLE IF NOT EXISTS employee_equipment (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_id INT NOT NULL,
equipment_name VARCHAR(200) NOT NULL,
issued_date DATETIME NOT NULL,
status ENUM('issued', 'returned', 'lost', 'broken') DEFAULT 'issued',
returned_date DATETIME NULL,
note TEXT NULL,
FOREIGN KEY (employee_id) REFERENCES employees(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci");
// Обработка действий
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$action = $_POST['action'] ?? '';
// Добавление сотрудника
if ($action == 'add_employee') {
$name = mysqli_real_escape_string($db, $_POST['employee_name']);
mysqli_query($db, "INSERT INTO employees (name, created_at) VALUES ('$name', NOW())");
header('Location: ' . $_SERVER['PHP_SELF']);
exit;
}
// Удаление сотрудника
if ($action == 'delete_employee') {
$id = intval($_POST['employee_id']);
mysqli_query($db, "DELETE FROM employees WHERE id=$id");
header('Location: ' . $_SERVER['PHP_SELF']);
exit;
}
// Добавление оборудования сотруднику
if ($action == 'add_equipment') {
$employee_id = intval($_POST['employee_id']);
$eq_name = mysqli_real_escape_string($db, $_POST['equipment_name']);
mysqli_query($db, "INSERT INTO employee_equipment (employee_id, equipment_name, issued_date) VALUES ($employee_id, '$eq_name', NOW())");
header('Location: ' . $_SERVER['PHP_SELF'] . '?employee_id=' . $employee_id);
exit;
}
// Редактирование оборудования
if ($action == 'edit_equipment') {
$id = intval($_POST['id']);
$employee_id = intval($_POST['employee_id']);
$eq_name = mysqli_real_escape_string($db, $_POST['equipment_name']);
$status = mysqli_real_escape_string($db, $_POST['status']);
$note = mysqli_real_escape_string($db, $_POST['note']);
$returned_date = ($status == 'returned') ? 'NOW()' : 'NULL';
mysqli_query($db, "UPDATE employee_equipment SET equipment_name='$eq_name', status='$status', note='$note', returned_date=" . ($status == 'returned' ? 'NOW()' : 'NULL') . " WHERE id=$id");
header('Location: ' . $_SERVER['PHP_SELF'] . '?employee_id=' . $employee_id);
exit;
}
// Быстрый возврат
if ($action == 'return_equipment') {
$id = intval($_POST['id']);
$employee_id = intval($_POST['employee_id']);
mysqli_query($db, "UPDATE employee_equipment SET status='returned', returned_date=NOW() WHERE id=$id");
header('Location: ' . $_SERVER['PHP_SELF'] . '?employee_id=' . $employee_id);
exit;
}
// Удаление оборудования
if ($action == 'delete_equipment') {
$id = intval($_POST['id']);
$employee_id = intval($_POST['employee_id']);
mysqli_query($db, "DELETE FROM employee_equipment WHERE id=$id");
header('Location: ' . $_SERVER['PHP_SELF'] . '?employee_id=' . $employee_id);
exit;
}
if ($action == 'logout') {
setcookie('eq_pass', '', time() - 3600, '/');
header('Location: ' . $_SERVER['PHP_SELF']);
exit;
}
}
$selected_employee_id = isset($_GET['employee_id']) ? intval($_GET['employee_id']) : 0;
$selected_employee = null;
if ($selected_employee_id) {
$res = mysqli_query($db, "SELECT * FROM employees WHERE id=$selected_employee_id");
$selected_employee = mysqli_fetch_assoc($res);
}
// Список всех сотрудников
$employees_res = mysqli_query($db, "SELECT * FROM employees ORDER BY name");
// Оборудование выбранного сотрудника
$equipment_res = null;
$stats = ['issued' => 0, 'returned' => 0, 'lost' => 0, 'broken' => 0];
if ($selected_employee) {
$equipment_res = mysqli_query($db, "SELECT * FROM employee_equipment WHERE employee_id=$selected_employee_id ORDER BY issued_date DESC");
foreach ($stats as $key => &$val) {
$res = mysqli_query($db, "SELECT COUNT(*) as cnt FROM employee_equipment WHERE employee_id=$selected_employee_id AND status='$key'");
if ($res) { $val = mysqli_fetch_assoc($res)['cnt']; }
}
}
// Для редактирования
$edit_id = isset($_GET['edit']) ? intval($_GET['edit']) : 0;
$edit_data = null;
if ($edit_id) {
$res = mysqli_query($db, "SELECT * FROM employee_equipment WHERE id=$edit_id");
$edit_data = mysqli_fetch_assoc($res);
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Учёт оборудования сотрудников</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'Segoe UI', Arial, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 20px;
}
.container { max-width: 1300px; margin: 0 auto; }
.card {
background: white;
border-radius: 12px;
padding: 25px;
margin-bottom: 20px;
box-shadow: 0 5px 15px rgba(0,0,0,0.2);
}
h1, h2, h3 { color: #333; margin-bottom: 15px; }
.header-info { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 15px; }
.logout-btn { background: #dc3545; color: white; border: none; padding: 8px 16px; border-radius: 8px; cursor: pointer; }
.back-link { display: inline-block; margin-bottom: 20px; color: #667eea; text-decoration: none; font-weight: 600; }
label { display: block; font-weight: 600; margin-bottom: 5px; color: #333; margin-top: 10px; }
input, textarea, select {
width: 100%;
padding: 10px;
border: 2px solid #e0e0e0;
border-radius: 8px;
font-size: 14px;
margin-bottom: 10px;
}
button {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
padding: 10px 20px;
border-radius: 8px;
cursor: pointer;
}
.employees-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 15px;
margin-top: 15px;
}
.employee-card {
background: #f8f9fa;
border-radius: 10px;
padding: 15px;
border: 2px solid transparent;
transition: all 0.3s;
}
.employee-card.active {
border-color: #667eea;
background: #e8eaff;
}
.employee-name { font-size: 18px; font-weight: bold; margin-bottom: 8px; }
.employee-stats { font-size: 12px; color: #666; margin-bottom: 12px; }
table { width: 100%; border-collapse: collapse; }
th, td { padding: 12px; text-align: left; border-bottom: 1px solid #e0e0e0; vertical-align: top; }
th { background: #f8f9fa; }
tr:hover { background: #f8f9fa; }
.badge {
display: inline-block;
padding: 4px 10px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
}
.badge-issued { background: #d4edda; color: #155724; }
.badge-returned { background: #cfe2ff; color: #084298; }
.badge-lost { background: #f8d7da; color: #721c24; }
.badge-broken { background: #fff3cd; color: #856404; }
.btn-small { padding: 5px 12px; font-size: 12px; margin: 2px; display: inline-block; border: none; border-radius: 5px; cursor: pointer; text-decoration: none; }
.btn-edit { background: #ffc107; color: #333; }
.btn-return { background: #17a2b8; color: white; }
.btn-delete { background: #dc3545; color: white; }
.btn-danger { background: #dc3545; color: white; }
.stats {
display: flex;
gap: 15px;
margin-bottom: 20px;
flex-wrap: wrap;
}
.stat-box {
flex: 1;
background: white;
padding: 15px;
border-radius: 10px;
text-align: center;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.stat-number { font-size: 28px; font-weight: bold; }
.stat-label { font-size: 13px; margin-top: 5px; color: #666; }
.edit-mode { background: #fff8e1; border-left: 4px solid #ffc107; }
.note { font-size: 12px; color: #666; margin-top: 5px; }
</style>
</head>
<body>
<div class="container">
<div class="card">
<div class="header-info">
<div>
<h1>📦 Учёт оборудования сотрудников</h1>
<div style="color: #666;">Пароль: 123123123| Сотрудники → их оборудование</div>
</div>
<form method="POST">
<button type="submit" name="action" value="logout" class="logout-btn">🚪 Выйти</button>
</form>
</div>
</div>
<?php if (!$selected_employee): ?>
<!-- ВИД: СПИСОК СОТРУДНИКОВ -->
<div class="card">
<h2>👥 Сотрудники</h2>
<form method="POST" style="margin-bottom: 20px; display: flex; gap: 10px; flex-wrap: wrap;">
<input type="text" name="employee_name" placeholder="ФИО нового сотрудника" required style="flex: 1; margin: 0;">
<button type="submit" name="action" value="add_employee">➕ Добавить</button>
</form>
<?php if (mysqli_num_rows($employees_res) > 0): ?>
<div class="employees-grid">
<?php while ($emp = mysqli_fetch_assoc($employees_res)):
$total_items = mysqli_fetch_assoc(mysqli_query($db, "SELECT COUNT(*) as cnt FROM employee_equipment WHERE employee_id={$emp['id']}"))['cnt'];
$active_items = mysqli_fetch_assoc(mysqli_query($db, "SELECT COUNT(*) as cnt FROM employee_equipment WHERE employee_id={$emp['id']} AND status='issued'"))['cnt'];
?>
<div class="employee-card">
<div class="employee-name">👤 <?php echo htmlspecialchars($emp['name']); ?></div>
<div class="employee-stats">📦 Всего: <?php echo $total_items; ?> | В использовании: <?php echo $active_items; ?></div>
<div style="display: flex; gap: 8px; flex-wrap: wrap;">
<a href="?employee_id=<?php echo $emp['id']; ?>" class="btn-small" style="background: #667eea; color: white; text-decoration: none;">📋 Открыть</a>
<form method="POST" style="display: inline;" onsubmit="return confirm('Удалить сотрудника и всё его оборудование?')">
<input type="hidden" name="employee_id" value="<?php echo $emp['id']; ?>">
<button type="submit" name="action" value="delete_employee" class="btn-small btn-danger">🗑️ Удалить</button>
</form>
</div>
</div>
<?php endwhile; ?>
</div>
<?php else: ?>
<p style="text-align: center; color: #666; padding: 30px;">📭 Нет сотрудников. Добавьте первого!</p>
<?php endif; ?>
</div>
<?php else: ?>
<!-- ВИД: ОБОРУДОВАНИЕ ВЫБРАННОГО СОТРУДНИКА -->
<div class="card">
<a href="<?php echo $_SERVER['PHP_SELF']; ?>" class="back-link">← Назад к списку сотрудников</a>
<div style="display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; margin-bottom: 20px;">
<h2>👤 <?php echo htmlspecialchars($selected_employee['name']); ?></h2>
<form method="POST" onsubmit="return confirm('Удалить сотрудника и всё оборудование?')">
<input type="hidden" name="employee_id" value="<?php echo $selected_employee_id; ?>">
<button type="submit" name="action" value="delete_employee" class="btn-danger" style="padding: 8px 16px;">🗑️ Удалить сотрудника</button>
</form>
</div>
<!-- Статистика по оборудованию -->
<div class="stats">
<div class="stat-box"><div class="stat-number"><?php echo $stats['issued']; ?></div><div class="stat-label">📦 Выдано</div></div>
<div class="stat-box"><div class="stat-number"><?php echo $stats['returned']; ?></div><div class="stat-label">✅ Возвращено</div></div>
<div class="stat-box"><div class="stat-number"><?php echo $stats['lost']; ?></div><div class="stat-label">❌ Потеряно</div></div>
<div class="stat-box"><div class="stat-number"><?php echo $stats['broken']; ?></div><div class="stat-label">🔧 Сломано</div></div>
</div>
<!-- Форма добавления оборудования -->
<div class="card" style="margin-top: 0;">
<h3>➕ Выдать оборудование</h3>
<form method="POST">
<input type="hidden" name="employee_id" value="<?php echo $selected_employee_id; ?>">
<input type="text" name="equipment_name" placeholder="Например: Ноутбук Lenovo, Мышь Logitech" required>
<button type="submit" name="action" value="add_equipment">✅ Выдать</button>
</form>
</div>
<!-- Список оборудования сотрудника -->
<?php if ($equipment_res && mysqli_num_rows($equipment_res) > 0): ?>
<h3>📋 Список оборудования</h3>
<table>
<thead>
<tr><th>Оборудование</th><th>Дата выдачи</th><th>Статус</th><th>Примечание</th><th>Действия</th></tr>
</thead>
<tbody>
<?php while ($item = mysqli_fetch_assoc($equipment_res)):
$status_text = ['issued'=>'📦 Выдано','returned'=>'✅ Возвращено','lost'=>'❌ Потеряно','broken'=>'🔧 Сломано'][$item['status']];
$status_class = ['issued'=>'badge-issued','returned'=>'badge-returned','lost'=>'badge-lost','broken'=>'badge-broken'][$item['status']];
?>
<tr>
<td><strong><?php echo htmlspecialchars($item['equipment_name']); ?></strong></td>
<td><?php echo date('d.m.Y H:i', strtotime($item['issued_date'])); ?></td>
<td><span class="badge <?php echo $status_class; ?>"><?php echo $status_text; ?></span></td>
<td><?php echo $item['note'] ? '<div class="note">📝 ' . htmlspecialchars($item['note']) . '</div>' : '-'; ?></td>
<td>
<a href="?employee_id=<?php echo $selected_employee_id; ?>&edit=<?php echo $item['id']; ?>" class="btn-small btn-edit">✏️ Ред.</a>
<?php if ($item['status'] == 'issued'): ?>
<form method="POST" style="display: inline;">
<input type="hidden" name="id" value="<?php echo $item['id']; ?>">
<input type="hidden" name="employee_id" value="<?php echo $selected_employee_id; ?>">
<button type="submit" name="action" value="return_equipment" class="btn-small btn-return" onclick="return confirm('Отметить как возвращённое?')">🔄 Вернуть</button>
</form>
<?php endif; ?>
<form method="POST" style="display: inline;">
<input type="hidden" name="id" value="<?php echo $item['id']; ?>">
<input type="hidden" name="employee_id" value="<?php echo $selected_employee_id; ?>">
<button type="submit" name="action" value="delete_equipment" class="btn-small btn-delete" onclick="return confirm('Удалить запись?')">🗑️</button>
</form>
</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?php else: ?>
<p style="text-align: center; color: #666; padding: 30px;">📭 Нет выданного оборудования</p>
<?php endif; ?>
</div>
<!-- Модальное окно редактирования -->
<?php if ($edit_data): ?>
<div class="card edit-mode" style="position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 1000; width: 90%; max-width: 500px; box-shadow: 0 10px 40px rgba(0,0,0,0.3);">
<h3>✏️ Редактирование оборудования</h3>
<form method="POST">
<input type="hidden" name="action" value="edit_equipment">
<input type="hidden" name="id" value="<?php echo $edit_data['id']; ?>">
<input type="hidden" name="employee_id" value="<?php echo $selected_employee_id; ?>">
<label>Оборудование</label>
<input type="text" name="equipment_name" value="<?php echo htmlspecialchars($edit_data['equipment_name']); ?>" required>
<label>Статус</label>
<select name="status">
<option value="issued" <?php echo $edit_data['status']=='issued'?'selected':''; ?>>📦 Выдано</option>
<option value="returned" <?php echo $edit_data['status']=='returned'?'selected':''; ?>>✅ Возвращено</option>
<option value="lost" <?php echo $edit_data['status']=='lost'?'selected':''; ?>>❌ Потеряно</option>
<option value="broken" <?php echo $edit_data['status']=='broken'?'selected':''; ?>>🔧 Сломано</option>
</select>
<label>Примечание</label>
<textarea name="note" rows="3" placeholder="Причина поломки/потери и т.д."><?php echo htmlspecialchars($edit_data['note'] ?? ''); ?></textarea>
<div style="display: flex; gap: 10px; margin-top: 15px;">
<button type="submit">💾 Сохранить</button>
<a href="?employee_id=<?php echo $selected_employee_id; ?>" style="background: #6c757d; color: white; padding: 10px 20px; border-radius: 8px; text-decoration: none;">❌ Отмена</a>
</div>
</form>
</div>
<div style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); z-index: 999;" onclick="window.location='?employee_id=<?php echo $selected_employee_id; ?>'"></div>
<?php endif; ?>
<?php endif; ?>
</div>
</body>
</html>
Комментарии
Пока нет комментариев. Будьте первым!