Files
sklad_legacy/admin/users.html
2025-08-22 19:26:43 +03:00

571 lines
30 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>Управление пользователями - Склад-Менеджер</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Font Awesome -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="../css/style.css" rel="stylesheet">
<style>
.user-card {
transition: all 0.3s ease;
border: 1px solid #e9ecef;
}
.user-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.role-badge {
font-size: 0.75rem;
padding: 0.25rem 0.5rem;
}
.permission-chip {
display: inline-block;
background: #f8f9fa;
border: 1px solid #dee2e6;
border-radius: 15px;
padding: 0.2rem 0.5rem;
margin: 0.1rem;
font-size: 0.75rem;
}
.status-active {
color: #198754;
}
.status-inactive {
color: #dc3545;
}
.search-highlight {
background-color: #fff3cd;
padding: 0.1rem 0.2rem;
border-radius: 3px;
}
</style>
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container-fluid">
<a class="navbar-brand" href="../index.html">
<i class="fas fa-warehouse me-2"></i>
Склад-Менеджер
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link" href="../index.html">
<i class="fas fa-home me-1"></i>Главная
</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
<i class="fas fa-boxes me-1"></i>Каталог
</a>
<ul class="dropdown-menu" id="catalogCategoriesDropdown">
<li><a class="dropdown-item" href="../catalog.html">Все позиции</a></li>
<li><hr class="dropdown-divider"></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="../history.html">
<i class="fas fa-history me-1"></i>История
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="../search.html">
<i class="fas fa-search me-1"></i>Поиск
</a>
</li>
</ul>
<!-- Admin Dropdown -->
<ul class="navbar-nav" id="adminDropdown" style="display: none;">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
<i class="fas fa-cogs me-1"></i>Администрирование
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="categories.html">
<i class="fas fa-tags me-2"></i>Категории позиций
</a></li>
<li><a class="dropdown-item active" href="users.html">
<i class="fas fa-users me-2"></i>Управление пользователями
</a></li>
</ul>
</li>
</ul>
<!-- Profile Dropdown -->
<ul class="navbar-nav" id="profileDropdown" style="display: none;">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
<i class="fas fa-user me-1"></i>Профиль
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="../profile.html">
<i class="fas fa-user-circle me-2"></i>Мой профиль
</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#" id="logoutBtn">
<i class="fas fa-sign-out-alt me-2"></i>Выйти
</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<!-- Main Content -->
<main class="container-fluid py-4">
<!-- Header -->
<div class="row mb-4">
<div class="col-12">
<div class="d-flex justify-content-between align-items-center">
<div>
<h1 class="h3 mb-0">
<i class="fas fa-users me-2 text-primary"></i>
Управление пользователями
</h1>
<p class="text-muted mb-0">Создание, редактирование и управление пользователями системы</p>
</div>
<button class="btn btn-primary" id="addUserBtn" data-bs-toggle="modal" data-bs-target="#addUserModal">
<i class="fas fa-plus me-2"></i>Добавить пользователя
</button>
</div>
</div>
</div>
<!-- Filters and Search -->
<div class="row mb-4">
<div class="col-md-8">
<div class="input-group">
<span class="input-group-text">
<i class="fas fa-search"></i>
</span>
<input type="text" class="form-control" id="searchInput" placeholder="Поиск по имени, email, отделу...">
</div>
</div>
<div class="col-md-4">
<select class="form-select" id="roleFilter">
<option value="">Все роли</option>
<option value="admin">Администратор</option>
<option value="manager">Менеджер</option>
<option value="operator">Оператор</option>
<option value="viewer">Наблюдатель</option>
</select>
</div>
</div>
<!-- Statistics Cards -->
<div class="row mb-4">
<div class="col-md-3">
<div class="card bg-primary text-white">
<div class="card-body">
<div class="d-flex justify-content-between">
<div>
<h4 class="card-title" id="totalUsers">0</h4>
<p class="card-text">Всего пользователей</p>
</div>
<div class="align-self-center">
<i class="fas fa-users fa-2x"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card bg-success text-white">
<div class="card-body">
<div class="d-flex justify-content-between">
<div>
<h4 class="card-title" id="activeUsers">0</h4>
<p class="card-text">Активных</p>
</div>
<div class="align-self-center">
<i class="fas fa-user-check fa-2x"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card bg-warning text-white">
<div class="card-body">
<div class="d-flex justify-content-between">
<div>
<h4 class="card-title" id="adminUsers">0</h4>
<p class="card-text">Администраторов</p>
</div>
<div class="align-self-center">
<i class="fas fa-user-shield fa-2x"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card bg-info text-white">
<div class="card-body">
<div class="d-flex justify-content-between">
<div>
<h4 class="card-title" id="managerUsers">0</h4>
<p class="card-text">Менеджеров</p>
</div>
<div class="align-self-center">
<i class="fas fa-user-tie fa-2x"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Users Grid -->
<div class="row" id="usersGrid">
<!-- Users will be loaded here -->
</div>
<!-- Loading State -->
<div id="loadingState" class="text-center py-5" style="display: none;">
<div class="spinner-border text-primary" role="status">
<span class="visually-hidden">Загрузка...</span>
</div>
<p class="mt-3 text-muted">Загрузка пользователей...</p>
</div>
<!-- Empty State -->
<div id="emptyState" class="text-center py-5" style="display: none;">
<i class="fas fa-users fa-3x text-muted mb-3"></i>
<h4 class="text-muted">Пользователи не найдены</h4>
<p class="text-muted">Попробуйте изменить параметры поиска или добавьте первого пользователя</p>
</div>
</main>
<!-- Add User Modal -->
<div class="modal fade" id="addUserModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">
<i class="fas fa-user-plus me-2"></i>
Добавить пользователя
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<form id="addUserForm">
<div class="modal-body">
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="username" class="form-label">Имя пользователя *</label>
<input type="text" class="form-control" id="username" required>
<div class="form-text">Уникальное имя для входа в систему</div>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="email" class="form-label">Email *</label>
<input type="email" class="form-control" id="email" required>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="fullName" class="form-label">Полное имя *</label>
<input type="text" class="form-control" id="fullName" required>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="department" class="form-label">Отдел</label>
<input type="text" class="form-control" id="department">
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="position" class="form-label">Должность</label>
<input type="text" class="form-control" id="position">
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="password" class="form-label">Пароль *</label>
<input type="password" class="form-control" id="password" required>
<div class="form-text">Минимум 6 символов</div>
</div>
</div>
</div>
<div class="mb-3">
<label class="form-label">Роли *</label>
<div class="row">
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="roleAdmin" value="admin">
<label class="form-check-label" for="roleAdmin">
<i class="fas fa-user-shield me-1"></i>Администратор
</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="roleManager" value="manager">
<label class="form-check-label" for="roleManager">
<i class="fas fa-user-tie me-1"></i>Менеджер
</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="roleOperator" value="operator">
<label class="form-check-label" for="roleOperator">
<i class="fas fa-user-cog me-1"></i>Оператор
</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="roleViewer" value="viewer">
<label class="form-check-label" for="roleViewer">
<i class="fas fa-user me-1"></i>Наблюдатель
</label>
</div>
</div>
</div>
</div>
<div class="mb-3">
<label class="form-label">Разрешения</label>
<div class="row">
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="permRead" value="read" checked>
<label class="form-check-label" for="permRead">Чтение</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="permWrite" value="write">
<label class="form-check-label" for="permWrite">Запись</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="permDelete" value="delete">
<label class="form-check-label" for="permDelete">Удаление</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="permAdmin" value="admin">
<label class="form-check-label" for="permAdmin">Администрирование</label>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
<button type="submit" class="btn btn-primary">
<i class="fas fa-save me-2"></i>Сохранить
</button>
</div>
</form>
</div>
</div>
</div>
<!-- Edit User Modal -->
<div class="modal fade" id="editUserModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">
<i class="fas fa-user-edit me-2"></i>
Редактировать пользователя
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<form id="editUserForm">
<input type="hidden" id="editUserId">
<div class="modal-body">
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="editUsername" class="form-label">Имя пользователя *</label>
<input type="text" class="form-control" id="editUsername" required>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="editEmail" class="form-label">Email *</label>
<input type="email" class="form-control" id="editEmail" required>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="editFullName" class="form-label">Полное имя *</label>
<input type="text" class="form-control" id="editFullName" required>
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="editDepartment" class="form-label">Отдел</label>
<input type="text" class="form-control" id="editDepartment">
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="mb-3">
<label for="editPosition" class="form-label">Должность</label>
<input type="text" class="form-control" id="editPosition">
</div>
</div>
<div class="col-md-6">
<div class="mb-3">
<label for="editPassword" class="form-label">Новый пароль</label>
<input type="password" class="form-control" id="editPassword">
<div class="form-text">Оставьте пустым, чтобы не изменять</div>
</div>
</div>
</div>
<div class="mb-3">
<label class="form-label">Роли *</label>
<div class="row">
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editRoleAdmin" value="admin">
<label class="form-check-label" for="editRoleAdmin">
<i class="fas fa-user-shield me-1"></i>Администратор
</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editRoleManager" value="manager">
<label class="form-check-label" for="editRoleManager">
<i class="fas fa-user-tie me-1"></i>Менеджер
</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editRoleOperator" value="operator">
<label class="form-check-label" for="editRoleOperator">
<i class="fas fa-user-cog me-1"></i>Оператор
</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editRoleViewer" value="viewer">
<label class="form-check-label" for="editRoleViewer">
<i class="fas fa-user me-1"></i>Наблюдатель
</label>
</div>
</div>
</div>
</div>
<div class="mb-3">
<label class="form-label">Разрешения</label>
<div class="row">
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editPermRead" value="read">
<label class="form-check-label" for="editPermRead">Чтение</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editPermWrite" value="write">
<label class="form-check-label" for="editPermWrite">Запись</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editPermDelete" value="delete">
<label class="form-check-label" for="editPermDelete">Удаление</label>
</div>
</div>
<div class="col-md-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="editPermAdmin" value="admin">
<label class="form-check-label" for="editPermAdmin">Администрирование</label>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
<button type="submit" class="btn btn-primary">
<i class="fas fa-save me-2"></i>Сохранить изменения
</button>
</div>
</form>
</div>
</div>
</div>
<!-- Delete Confirmation Modal -->
<div class="modal fade" id="deleteUserModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title text-danger">
<i class="fas fa-exclamation-triangle me-2"></i>
Подтверждение удаления
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p>Вы действительно хотите удалить пользователя <strong id="deleteUserName"></strong>?</p>
<p class="text-muted">Это действие нельзя отменить.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
<button type="button" class="btn btn-danger" id="confirmDeleteBtn">
<i class="fas fa-trash me-2"></i>Удалить
</button>
</div>
</div>
</div>
</div>
<!-- Scripts -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="../js/auth.js"></script>
<script src="../js/users.js"></script>
</body>
</html>