Add files via upload
v0.1(front)
This commit is contained in:
327
README.md
Normal file
327
README.md
Normal file
@ -0,0 +1,327 @@
|
|||||||
|
# Система управления складом "Склад-Менеджер"
|
||||||
|
|
||||||
|
Современная веб-система для управления товарными запасами и операциями склада с разными уровнями доступа.
|
||||||
|
|
||||||
|
## 🚀 Возможности системы
|
||||||
|
|
||||||
|
### Основной функционал
|
||||||
|
- **Управление товарами**: добавление, редактирование, удаление товаров
|
||||||
|
- **Операции склада**: приход и расход товаров
|
||||||
|
- **Каталог товаров**: удобный просмотр с фильтрами и поиском
|
||||||
|
- **История операций**: полный учет всех операций со складом
|
||||||
|
- **Поиск**: быстрый поиск товаров и операций
|
||||||
|
- **Отчеты**: генерация различных отчетов
|
||||||
|
- **Экспорт данных**: выгрузка в CSV и JSON форматах
|
||||||
|
|
||||||
|
### Система безопасности
|
||||||
|
- **Многоуровневая авторизация** с разными ролями
|
||||||
|
- **Контроль доступа** к функциям системы
|
||||||
|
- **Безопасные сессии** пользователей
|
||||||
|
- **Валидация данных** на всех уровнях
|
||||||
|
|
||||||
|
### Уровни доступа
|
||||||
|
|
||||||
|
#### 🔧 Администратор (admin/admin123)
|
||||||
|
- Полный доступ ко всем функциям
|
||||||
|
- Управление пользователями
|
||||||
|
- Настройка системы
|
||||||
|
- Просмотр всех отчетов
|
||||||
|
|
||||||
|
#### 👔 Менеджер (manager/manager123)
|
||||||
|
- Чтение и запись данных
|
||||||
|
- Управление товарами
|
||||||
|
- Оформление операций
|
||||||
|
- Просмотр отчетов
|
||||||
|
|
||||||
|
#### 👷 Оператор (operator/operator123)
|
||||||
|
- Только чтение данных
|
||||||
|
- Просмотр каталога и истории
|
||||||
|
- Ограниченный доступ к функциям
|
||||||
|
|
||||||
|
#### 👁️ Наблюдатель (viewer/viewer123)
|
||||||
|
- Ограниченный просмотр
|
||||||
|
- Только чтение данных
|
||||||
|
- Минимальный доступ
|
||||||
|
|
||||||
|
## 📁 Структура проекта
|
||||||
|
|
||||||
|
```
|
||||||
|
warehouse-system/
|
||||||
|
├── index.html # Главная страница
|
||||||
|
├── login.html # Страница авторизации
|
||||||
|
├── catalog.html # Каталог товаров
|
||||||
|
├── history.html # История операций
|
||||||
|
├── search.html # Поиск
|
||||||
|
├── profile.html # Профиль пользователя
|
||||||
|
├── css/
|
||||||
|
│ └── style.css # Основные стили
|
||||||
|
├── js/
|
||||||
|
│ ├── auth.js # Система авторизации
|
||||||
|
│ ├── main.js # Основная логика
|
||||||
|
│ ├── warehouse.js # Управление складом
|
||||||
|
│ ├── catalog.js # Каталог товаров
|
||||||
|
│ ├── history.js # История операций
|
||||||
|
│ ├── search.js # Поиск
|
||||||
|
│ └── profile.js # Профиль пользователя
|
||||||
|
└── README.md # Документация
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🛠️ Технологии
|
||||||
|
|
||||||
|
- **HTML5** - семантическая разметка
|
||||||
|
- **CSS3** - современные стили с CSS переменными
|
||||||
|
- **Bootstrap 5** - адаптивный дизайн
|
||||||
|
- **JavaScript (ES6+)** - интерактивность
|
||||||
|
- **jQuery** - упрощение работы с DOM
|
||||||
|
- **Font Awesome** - иконки
|
||||||
|
- **LocalStorage** - локальное хранение данных
|
||||||
|
|
||||||
|
## 🚀 Быстрый старт
|
||||||
|
|
||||||
|
### 1. Установка
|
||||||
|
1. Скачайте или клонируйте проект
|
||||||
|
2. Откройте `index.html` в браузере
|
||||||
|
3. Или запустите локальный сервер:
|
||||||
|
```bash
|
||||||
|
# Python 3
|
||||||
|
python -m http.server 8000
|
||||||
|
|
||||||
|
# Node.js
|
||||||
|
npx http-server
|
||||||
|
|
||||||
|
# PHP
|
||||||
|
php -S localhost:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Первый вход
|
||||||
|
1. Откройте `login.html`
|
||||||
|
2. Используйте тестовые учетные записи:
|
||||||
|
- **Администратор**: `admin` / `admin123`
|
||||||
|
- **Менеджер**: `manager` / `manager123`
|
||||||
|
- **Оператор**: `operator` / `operator123`
|
||||||
|
- **Наблюдатель**: `viewer` / `viewer123`
|
||||||
|
|
||||||
|
### 3. Начальная настройка
|
||||||
|
1. Войдите как администратор
|
||||||
|
2. Добавьте первые товары через главную страницу
|
||||||
|
3. Настройте категории товаров
|
||||||
|
4. Создайте пользователей с нужными правами
|
||||||
|
|
||||||
|
## 📖 Руководство пользователя
|
||||||
|
|
||||||
|
### Главная страница
|
||||||
|
- **Быстрые действия**: добавление товаров, приход/расход
|
||||||
|
- **Статистика**: общая информация о складе
|
||||||
|
- **Последние операции**: мониторинг активности
|
||||||
|
|
||||||
|
### Каталог товаров
|
||||||
|
- **Просмотр**: все товары с фильтрами
|
||||||
|
- **Поиск**: по названию, описанию, штрих-коду
|
||||||
|
- **Фильтры**: по категории, цене, наличию
|
||||||
|
- **Редактирование**: изменение информации о товарах
|
||||||
|
|
||||||
|
### История операций
|
||||||
|
- **Просмотр**: все операции с детализацией
|
||||||
|
- **Фильтры**: по типу, дате, товару, сотруднику
|
||||||
|
- **Отчеты**: генерация различных отчетов
|
||||||
|
- **Экспорт**: выгрузка данных
|
||||||
|
|
||||||
|
### Поиск
|
||||||
|
- **Универсальный поиск**: товары и операции
|
||||||
|
- **Расширенные фильтры**: точная настройка
|
||||||
|
- **Результаты**: с подсветкой найденного
|
||||||
|
- **Экспорт результатов**: сохранение найденного
|
||||||
|
|
||||||
|
### Профиль пользователя
|
||||||
|
- **Информация**: личные данные и права
|
||||||
|
- **Статистика**: активность пользователя
|
||||||
|
- **Настройки**: персонализация интерфейса
|
||||||
|
- **Безопасность**: смена пароля
|
||||||
|
|
||||||
|
## 🔧 Администрирование
|
||||||
|
|
||||||
|
### Управление пользователями
|
||||||
|
1. Войдите как администратор
|
||||||
|
2. Перейдите в раздел "Администрирование"
|
||||||
|
3. Выберите "Управление пользователями"
|
||||||
|
4. Создавайте, редактируйте, удаляйте пользователей
|
||||||
|
|
||||||
|
### Настройка категорий
|
||||||
|
1. Откройте "Категории товаров"
|
||||||
|
2. Добавьте нужные категории
|
||||||
|
3. Настройте иконки и описания
|
||||||
|
|
||||||
|
### Генерация отчетов
|
||||||
|
1. Выберите тип отчета
|
||||||
|
2. Укажите период
|
||||||
|
3. Настройте параметры
|
||||||
|
4. Экспортируйте в нужном формате
|
||||||
|
|
||||||
|
## 📊 Структура данных
|
||||||
|
|
||||||
|
### Товар
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: "Название товара",
|
||||||
|
category: "electronics",
|
||||||
|
price: 1000,
|
||||||
|
quantity: 50,
|
||||||
|
description: "Описание товара",
|
||||||
|
barcode: "1234567890123",
|
||||||
|
minQuantity: 10,
|
||||||
|
location: "Стеллаж A-1",
|
||||||
|
supplier: "Поставщик",
|
||||||
|
createdAt: "2024-01-15T10:00:00Z",
|
||||||
|
updatedAt: "2024-01-15T10:00:00Z"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Операция
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
type: "incoming", // или "outgoing"
|
||||||
|
itemId: 1,
|
||||||
|
itemName: "Название товара",
|
||||||
|
quantity: 10,
|
||||||
|
employeeId: 1,
|
||||||
|
employeeName: "Имя сотрудника",
|
||||||
|
date: "2024-01-15T10:00:00Z",
|
||||||
|
status: "completed",
|
||||||
|
supplier: "Поставщик",
|
||||||
|
recipient: "Получатель",
|
||||||
|
notes: "Примечания"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Пользователь
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
username: "admin",
|
||||||
|
name: "Администратор",
|
||||||
|
email: "admin@company.com",
|
||||||
|
roles: ["admin"],
|
||||||
|
permissions: ["read", "write", "delete", "admin"],
|
||||||
|
department: "IT",
|
||||||
|
position: "Системный администратор"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎨 Кастомизация
|
||||||
|
|
||||||
|
### Изменение цветовой схемы
|
||||||
|
Отредактируйте CSS переменные в `css/style.css`:
|
||||||
|
```css
|
||||||
|
:root {
|
||||||
|
--primary-color: #0d6efd;
|
||||||
|
--secondary-color: #6c757d;
|
||||||
|
--success-color: #198754;
|
||||||
|
--warning-color: #ffc107;
|
||||||
|
--danger-color: #dc3545;
|
||||||
|
--info-color: #0dcaf0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Добавление новых категорий
|
||||||
|
В файле `js/warehouse.js` найдите функцию `loadCategories()` и добавьте новые категории:
|
||||||
|
```javascript
|
||||||
|
{
|
||||||
|
id: 'new-category',
|
||||||
|
name: 'Новая категория',
|
||||||
|
icon: 'fas fa-icon-name'
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Настройка прав доступа
|
||||||
|
В файле `js/auth.js` измените массив пользователей или добавьте новые роли и разрешения.
|
||||||
|
|
||||||
|
## 🔒 Безопасность
|
||||||
|
|
||||||
|
### Рекомендации по безопасности
|
||||||
|
1. **Измените пароли по умолчанию** при первом входе
|
||||||
|
2. **Используйте HTTPS** в продакшене
|
||||||
|
3. **Регулярно обновляйте** права доступа
|
||||||
|
4. **Ведите логи** всех операций
|
||||||
|
5. **Делайте резервные копии** данных
|
||||||
|
|
||||||
|
### Настройка HTTPS
|
||||||
|
Для продакшена обязательно используйте SSL-сертификат:
|
||||||
|
```bash
|
||||||
|
# Пример с Let's Encrypt
|
||||||
|
sudo certbot --nginx -d your-domain.com
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📈 Производительность
|
||||||
|
|
||||||
|
### Оптимизация
|
||||||
|
- Используйте современный браузер
|
||||||
|
- Включите кэширование
|
||||||
|
- Минимизируйте количество одновременных операций
|
||||||
|
- Регулярно очищайте старые данные
|
||||||
|
|
||||||
|
### Масштабирование
|
||||||
|
- Для больших объемов данных используйте базу данных
|
||||||
|
- Добавьте серверную часть (PHP, Node.js, Python)
|
||||||
|
- Используйте CDN для статических файлов
|
||||||
|
- Настройте кэширование на сервере
|
||||||
|
|
||||||
|
## 🐛 Устранение неполадок
|
||||||
|
|
||||||
|
### Частые проблемы
|
||||||
|
|
||||||
|
#### Не работает авторизация
|
||||||
|
- Проверьте правильность логина/пароля
|
||||||
|
- Очистите кэш браузера
|
||||||
|
- Проверьте консоль на ошибки JavaScript
|
||||||
|
|
||||||
|
#### Не сохраняются данные
|
||||||
|
- Проверьте доступ к LocalStorage
|
||||||
|
- Убедитесь, что JavaScript включен
|
||||||
|
- Проверьте права доступа пользователя
|
||||||
|
|
||||||
|
#### Медленная работа
|
||||||
|
- Закройте лишние вкладки
|
||||||
|
- Очистите кэш браузера
|
||||||
|
- Проверьте количество товаров/операций
|
||||||
|
|
||||||
|
### Логи и отладка
|
||||||
|
Откройте консоль разработчика (F12) для просмотра ошибок и логов.
|
||||||
|
|
||||||
|
## 🤝 Поддержка
|
||||||
|
|
||||||
|
### Сообщение об ошибках
|
||||||
|
При обнаружении ошибок:
|
||||||
|
1. Опишите проблему подробно
|
||||||
|
2. Укажите версию браузера
|
||||||
|
3. Приложите скриншот ошибки
|
||||||
|
4. Опишите шаги для воспроизведения
|
||||||
|
|
||||||
|
### Запросы функций
|
||||||
|
Для добавления новых функций:
|
||||||
|
1. Опишите требуемую функциональность
|
||||||
|
2. Укажите приоритет
|
||||||
|
3. Приведите примеры использования
|
||||||
|
|
||||||
|
## 📄 Лицензия
|
||||||
|
|
||||||
|
Этот проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.
|
||||||
|
|
||||||
|
## 👥 Авторы
|
||||||
|
|
||||||
|
- Разработка: [Ваше имя]
|
||||||
|
- Дизайн: [Имя дизайнера]
|
||||||
|
- Тестирование: [Имя тестировщика]
|
||||||
|
|
||||||
|
## 📞 Контакты
|
||||||
|
|
||||||
|
- Email: support@warehouse-system.com
|
||||||
|
- Телефон: +7 (XXX) XXX-XX-XX
|
||||||
|
- Веб-сайт: https://warehouse-system.com
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Версия**: 1.0.0
|
||||||
|
**Дата**: Январь 2024
|
||||||
|
**Последнее обновление**: 15.01.2024
|
||||||
403
catalog.html
Normal file
403
catalog.html
Normal file
@ -0,0 +1,403 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Каталог товаров - Склад-Менеджер</title>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
||||||
|
<link href="css/style.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- Навигационная панель -->
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
|
||||||
|
<div class="container">
|
||||||
|
<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">
|
||||||
|
<a class="nav-link active" href="catalog.html">
|
||||||
|
<i class="fas fa-boxes me-1"></i>Каталог
|
||||||
|
</a>
|
||||||
|
</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>
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item dropdown" id="adminDropdown" style="display: none;">
|
||||||
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
||||||
|
<i class="fas fa-cog me-1"></i>Администрирование
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a class="dropdown-item" href="admin/users.html">Управление пользователями</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/categories.html">Категории товаров</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/reports.html">Отчеты</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item dropdown" id="profileDropdown">
|
||||||
|
<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">Мой профиль</a></li>
|
||||||
|
<li><hr class="dropdown-divider"></li>
|
||||||
|
<li><a class="dropdown-item" href="#" id="logoutBtn">Выйти</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Основной контент -->
|
||||||
|
<main class="container mt-4">
|
||||||
|
<!-- Заголовок страницы -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<h1 class="mb-1">
|
||||||
|
<i class="fas fa-boxes me-2"></i>
|
||||||
|
Каталог товаров
|
||||||
|
</h1>
|
||||||
|
<p class="text-muted mb-0">Управление товарными позициями склада</p>
|
||||||
|
</div>
|
||||||
|
<div class="d-flex gap-2">
|
||||||
|
<button class="btn btn-outline-primary" id="exportBtn">
|
||||||
|
<i class="fas fa-download me-1"></i>Экспорт
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addItemModal" id="addItemBtn">
|
||||||
|
<i class="fas fa-plus me-1"></i>Добавить товар
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Фильтры и поиск -->
|
||||||
|
<div class="catalog-filters">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4 mb-3">
|
||||||
|
<label for="searchInput" class="form-label">Поиск товаров</label>
|
||||||
|
<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="Название, описание или штрих-код">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="categoryFilter" class="form-label">Категория</label>
|
||||||
|
<select class="form-select" id="categoryFilter">
|
||||||
|
<option value="">Все категории</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2 mb-3">
|
||||||
|
<label for="priceMin" class="form-label">Цена от</label>
|
||||||
|
<input type="number" class="form-control" id="priceMin" placeholder="0">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-2 mb-3">
|
||||||
|
<label for="priceMax" class="form-label">Цена до</label>
|
||||||
|
<input type="number" class="form-control" id="priceMax" placeholder="∞">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-1 mb-3">
|
||||||
|
<label class="form-label"> </label>
|
||||||
|
<div class="d-grid">
|
||||||
|
<button class="btn btn-outline-secondary" id="clearFiltersBtn">
|
||||||
|
<i class="fas fa-times"></i>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="form-check form-check-inline">
|
||||||
|
<input class="form-check-input" type="checkbox" id="inStockFilter">
|
||||||
|
<label class="form-check-label" for="inStockFilter">
|
||||||
|
Только в наличии
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check form-check-inline">
|
||||||
|
<input class="form-check-input" type="checkbox" id="lowStockFilter">
|
||||||
|
<label class="form-check-label" for="lowStockFilter">
|
||||||
|
Заканчивается
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Статистика каталога -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-md-3 mb-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="totalItemsCount">0</h4>
|
||||||
|
<p class="card-text">Всего товаров</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-boxes fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="inStockCount">0</h4>
|
||||||
|
<p class="card-text">В наличии</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-check-circle fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="lowStockCount">0</h4>
|
||||||
|
<p class="card-text">Заканчивается</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-exclamation-triangle fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="categoriesCount">0</h4>
|
||||||
|
<p class="card-text">Категорий</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-tags fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Переключатель вида -->
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="btn-group" role="group">
|
||||||
|
<input type="radio" class="btn-check" name="viewMode" id="gridView" checked>
|
||||||
|
<label class="btn btn-outline-primary" for="gridView">
|
||||||
|
<i class="fas fa-th-large me-1"></i>Сетка
|
||||||
|
</label>
|
||||||
|
<input type="radio" class="btn-check" name="viewMode" id="listView">
|
||||||
|
<label class="btn btn-outline-primary" for="listView">
|
||||||
|
<i class="fas fa-list me-1"></i>Список
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Каталог товаров -->
|
||||||
|
<div class="row" id="catalogContainer">
|
||||||
|
<!-- Товары будут загружены через JavaScript -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Пагинация -->
|
||||||
|
<div class="row mt-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<nav aria-label="Навигация по страницам">
|
||||||
|
<ul class="pagination justify-content-center" id="pagination">
|
||||||
|
<!-- Пагинация будет создана через JavaScript -->
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<!-- Модальное окно добавления товара -->
|
||||||
|
<div class="modal fade" id="addItemModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-plus-circle me-2"></i>
|
||||||
|
Добавить новый товар
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="addItemForm">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemName" class="form-label">Название товара *</label>
|
||||||
|
<input type="text" class="form-control" id="itemName" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemCategory" class="form-label">Категория *</label>
|
||||||
|
<select class="form-select" id="itemCategory" required>
|
||||||
|
<option value="">Выберите категорию</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemPrice" class="form-label">Цена (₽) *</label>
|
||||||
|
<input type="number" class="form-control" id="itemPrice" min="0" step="0.01" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemQuantity" class="form-label">Количество *</label>
|
||||||
|
<input type="number" class="form-control" id="itemQuantity" min="0" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="itemDescription" class="form-label">Описание</label>
|
||||||
|
<textarea class="form-control" id="itemDescription" rows="3"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemBarcode" class="form-label">Штрих-код</label>
|
||||||
|
<input type="text" class="form-control" id="itemBarcode">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemLocation" class="form-label">Местоположение</label>
|
||||||
|
<input type="text" class="form-control" id="itemLocation" placeholder="Стеллаж A-1">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemSupplier" class="form-label">Поставщик</label>
|
||||||
|
<input type="text" class="form-control" id="itemSupplier">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemMinQuantity" class="form-label">Минимальный запас</label>
|
||||||
|
<input type="number" class="form-control" id="itemMinQuantity" min="0">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="saveItemBtn">
|
||||||
|
<i class="fas fa-save me-1"></i>Сохранить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Модальное окно редактирования товара -->
|
||||||
|
<div class="modal fade" id="editItemModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-edit me-2"></i>
|
||||||
|
Редактировать товар
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="editItemForm">
|
||||||
|
<input type="hidden" id="editItemId">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editItemName" class="form-label">Название товара *</label>
|
||||||
|
<input type="text" class="form-control" id="editItemName" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editItemCategory" class="form-label">Категория *</label>
|
||||||
|
<select class="form-select" id="editItemCategory" required>
|
||||||
|
<option value="">Выберите категорию</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editItemPrice" class="form-label">Цена (₽) *</label>
|
||||||
|
<input type="number" class="form-control" id="editItemPrice" min="0" step="0.01" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editItemQuantity" class="form-label">Количество *</label>
|
||||||
|
<input type="number" class="form-control" id="editItemQuantity" min="0" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="editItemDescription" class="form-label">Описание</label>
|
||||||
|
<textarea class="form-control" id="editItemDescription" rows="3"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editItemBarcode" class="form-label">Штрих-код</label>
|
||||||
|
<input type="text" class="form-control" id="editItemBarcode">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editItemLocation" class="form-label">Местоположение</label>
|
||||||
|
<input type="text" class="form-control" id="editItemLocation">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editItemSupplier" class="form-label">Поставщик</label>
|
||||||
|
<input type="text" class="form-control" id="editItemSupplier">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editItemMinQuantity" class="form-label">Минимальный запас</label>
|
||||||
|
<input type="number" class="form-control" id="editItemMinQuantity" min="0">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="updateItemBtn">
|
||||||
|
<i class="fas fa-save me-1"></i>Обновить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Подвал -->
|
||||||
|
<footer class="bg-dark text-white mt-5 py-4">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h5>Система управления складом</h5>
|
||||||
|
<p class="mb-0">Эффективное управление товарными запасами</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-md-end">
|
||||||
|
<p class="mb-0">© 2024 Склад-Менеджер. Все права защищены.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- Скрипты -->
|
||||||
|
<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.7.1.min.js"></script>
|
||||||
|
<script src="js/auth.js"></script>
|
||||||
|
<script src="js/warehouse.js"></script>
|
||||||
|
<script src="js/catalog.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
380
history.html
Normal file
380
history.html
Normal file
@ -0,0 +1,380 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>История операций - Склад-Менеджер</title>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
||||||
|
<link href="css/style.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- Навигационная панель -->
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
|
||||||
|
<div class="container">
|
||||||
|
<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">
|
||||||
|
<a class="nav-link" href="catalog.html">
|
||||||
|
<i class="fas fa-boxes me-1"></i>Каталог
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link active" 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>
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item dropdown" id="adminDropdown" style="display: none;">
|
||||||
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
||||||
|
<i class="fas fa-cog me-1"></i>Администрирование
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a class="dropdown-item" href="admin/users.html">Управление пользователями</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/categories.html">Категории товаров</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/reports.html">Отчеты</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item dropdown" id="profileDropdown">
|
||||||
|
<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">Мой профиль</a></li>
|
||||||
|
<li><hr class="dropdown-divider"></li>
|
||||||
|
<li><a class="dropdown-item" href="#" id="logoutBtn">Выйти</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Основной контент -->
|
||||||
|
<main class="container mt-4">
|
||||||
|
<!-- Заголовок страницы -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<h1 class="mb-1">
|
||||||
|
<i class="fas fa-history me-2"></i>
|
||||||
|
История операций
|
||||||
|
</h1>
|
||||||
|
<p class="text-muted mb-0">Просмотр всех операций со складом</p>
|
||||||
|
</div>
|
||||||
|
<div class="d-flex gap-2">
|
||||||
|
<button class="btn btn-outline-primary" id="exportBtn">
|
||||||
|
<i class="fas fa-download me-1"></i>Экспорт
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#reportModal">
|
||||||
|
<i class="fas fa-chart-bar me-1"></i>Отчет
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Фильтры -->
|
||||||
|
<div class="card mb-4">
|
||||||
|
<div class="card-header">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<i class="fas fa-filter me-2"></i>
|
||||||
|
Фильтры
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="operationType" class="form-label">Тип операции</label>
|
||||||
|
<select class="form-select" id="operationType">
|
||||||
|
<option value="">Все типы</option>
|
||||||
|
<option value="incoming">Приход</option>
|
||||||
|
<option value="outgoing">Расход</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="startDate" class="form-label">Дата начала</label>
|
||||||
|
<input type="date" class="form-control" id="startDate">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="endDate" class="form-label">Дата окончания</label>
|
||||||
|
<input type="date" class="form-control" id="endDate">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="itemFilter" class="form-label">Товар</label>
|
||||||
|
<select class="form-select" id="itemFilter">
|
||||||
|
<option value="">Все товары</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="employeeFilter" class="form-label">Сотрудник</label>
|
||||||
|
<select class="form-select" id="employeeFilter">
|
||||||
|
<option value="">Все сотрудники</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="statusFilter" class="form-label">Статус</label>
|
||||||
|
<select class="form-select" id="statusFilter">
|
||||||
|
<option value="">Все статусы</option>
|
||||||
|
<option value="completed">Завершено</option>
|
||||||
|
<option value="pending">В обработке</option>
|
||||||
|
<option value="cancelled">Отменено</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3 d-flex align-items-end">
|
||||||
|
<div class="d-flex gap-2">
|
||||||
|
<button class="btn btn-primary" id="applyFiltersBtn">
|
||||||
|
<i class="fas fa-search me-1"></i>Применить
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-outline-secondary" id="clearFiltersBtn">
|
||||||
|
<i class="fas fa-times me-1"></i>Очистить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Статистика операций -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-md-3 mb-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="totalOperations">0</h4>
|
||||||
|
<p class="card-text">Всего операций</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-list fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="incomingOperations">0</h4>
|
||||||
|
<p class="card-text">Приходы</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-box-open fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="outgoingOperations">0</h4>
|
||||||
|
<p class="card-text">Расходы</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-truck fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="totalQuantity">0</h4>
|
||||||
|
<p class="card-text">Общее количество</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-cubes fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Таблица операций -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<i class="fas fa-table me-2"></i>
|
||||||
|
Операции
|
||||||
|
</h5>
|
||||||
|
<div class="d-flex gap-2">
|
||||||
|
<select class="form-select form-select-sm" id="sortBy" style="width: auto;">
|
||||||
|
<option value="date">По дате</option>
|
||||||
|
<option value="type">По типу</option>
|
||||||
|
<option value="itemName">По товару</option>
|
||||||
|
<option value="quantity">По количеству</option>
|
||||||
|
</select>
|
||||||
|
<select class="form-select form-select-sm" id="sortOrder" style="width: auto;">
|
||||||
|
<option value="desc">По убыванию</option>
|
||||||
|
<option value="asc">По возрастанию</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-hover" id="operationsTable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Дата</th>
|
||||||
|
<th>Тип</th>
|
||||||
|
<th>Товар</th>
|
||||||
|
<th>Количество</th>
|
||||||
|
<th>Сотрудник</th>
|
||||||
|
<th>Статус</th>
|
||||||
|
<th>Действия</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<!-- Данные будут загружены через JavaScript -->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Пагинация -->
|
||||||
|
<div class="row mt-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<nav aria-label="Навигация по страницам">
|
||||||
|
<ul class="pagination justify-content-center" id="pagination">
|
||||||
|
<!-- Пагинация будет создана через JavaScript -->
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<!-- Модальное окно деталей операции -->
|
||||||
|
<div class="modal fade" id="operationDetailsModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-info-circle me-2"></i>
|
||||||
|
Детали операции
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="operationDetailsContent">
|
||||||
|
<!-- Содержимое будет загружено через JavaScript -->
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Модальное окно отчета -->
|
||||||
|
<div class="modal fade" id="reportModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-chart-bar me-2"></i>
|
||||||
|
Создать отчет
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="reportForm">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="reportStartDate" class="form-label">Дата начала *</label>
|
||||||
|
<input type="date" class="form-control" id="reportStartDate" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="reportEndDate" class="form-label">Дата окончания *</label>
|
||||||
|
<input type="date" class="form-control" id="reportEndDate" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="reportType" class="form-label">Тип отчета</label>
|
||||||
|
<select class="form-select" id="reportType">
|
||||||
|
<option value="summary">Сводный отчет</option>
|
||||||
|
<option value="detailed">Детальный отчет</option>
|
||||||
|
<option value="movement">Отчет по движению товаров</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="reportItem" class="form-label">Товар (опционально)</label>
|
||||||
|
<select class="form-select" id="reportItem">
|
||||||
|
<option value="">Все товары</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="reportFormat" class="form-label">Формат отчета</label>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="radio" name="reportFormat" id="formatCsv" value="csv" checked>
|
||||||
|
<label class="form-check-label" for="formatCsv">
|
||||||
|
CSV файл
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="radio" name="reportFormat" id="formatPdf" value="pdf">
|
||||||
|
<label class="form-check-label" for="formatPdf">
|
||||||
|
PDF документ
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="generateReportBtn">
|
||||||
|
<i class="fas fa-download me-1"></i>Создать отчет
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Подвал -->
|
||||||
|
<footer class="bg-dark text-white mt-5 py-4">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h5>Система управления складом</h5>
|
||||||
|
<p class="mb-0">Эффективное управление товарными запасами</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-md-end">
|
||||||
|
<p class="mb-0">© 2024 Склад-Менеджер. Все права защищены.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- Скрипты -->
|
||||||
|
<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.7.1.min.js"></script>
|
||||||
|
<script src="js/auth.js"></script>
|
||||||
|
<script src="js/warehouse.js"></script>
|
||||||
|
<script src="js/history.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
402
index.html
Normal file
402
index.html
Normal file
@ -0,0 +1,402 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Система управления складом</title>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
||||||
|
<link href="css/style.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- Навигационная панель -->
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
|
||||||
|
<div class="container">
|
||||||
|
<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 active" href="index.html">
|
||||||
|
<i class="fas fa-home me-1"></i>Главная
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="catalog.html">
|
||||||
|
<i class="fas fa-boxes me-1"></i>Каталог
|
||||||
|
</a>
|
||||||
|
</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>
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item dropdown" id="adminDropdown" style="display: none;">
|
||||||
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
||||||
|
<i class="fas fa-cog me-1"></i>Администрирование
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a class="dropdown-item" href="admin/users.html">Управление пользователями</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/categories.html">Категории товаров</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/reports.html">Отчеты</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item dropdown" id="profileDropdown">
|
||||||
|
<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">Мой профиль</a></li>
|
||||||
|
<li><hr class="dropdown-divider"></li>
|
||||||
|
<li><a class="dropdown-item" href="#" id="logoutBtn">Выйти</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Основной контент -->
|
||||||
|
<main class="container mt-4">
|
||||||
|
<!-- Приветственный блок -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="card bg-gradient-primary text-white">
|
||||||
|
<div class="card-body">
|
||||||
|
<h1 class="card-title">
|
||||||
|
<i class="fas fa-warehouse me-3"></i>
|
||||||
|
Добро пожаловать в систему управления складом
|
||||||
|
</h1>
|
||||||
|
<p class="card-text">Эффективное управление товарными запасами и операциями склада</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Быстрые действия -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<h2 class="mb-3">Быстрые действия</h2>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<div class="card h-100 quick-action-card">
|
||||||
|
<div class="card-body text-center">
|
||||||
|
<i class="fas fa-plus-circle fa-3x text-primary mb-3"></i>
|
||||||
|
<h5 class="card-title">Добавить товар</h5>
|
||||||
|
<p class="card-text">Добавить новый товар в каталог</p>
|
||||||
|
<button class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#addItemModal">
|
||||||
|
Добавить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<div class="card h-100 quick-action-card">
|
||||||
|
<div class="card-body text-center">
|
||||||
|
<i class="fas fa-box-open fa-3x text-success mb-3"></i>
|
||||||
|
<h5 class="card-title">Приход</h5>
|
||||||
|
<p class="card-text">Оформить приход товара</p>
|
||||||
|
<button class="btn btn-success" data-bs-toggle="modal" data-bs-target="#incomingModal">
|
||||||
|
Оформить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<div class="card h-100 quick-action-card">
|
||||||
|
<div class="card-body text-center">
|
||||||
|
<i class="fas fa-truck fa-3x text-warning mb-3"></i>
|
||||||
|
<h5 class="card-title">Расход</h5>
|
||||||
|
<p class="card-text">Оформить расход товара</p>
|
||||||
|
<button class="btn btn-warning" data-bs-toggle="modal" data-bs-target="#outgoingModal">
|
||||||
|
Оформить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<div class="card h-100 quick-action-card">
|
||||||
|
<div class="card-body text-center">
|
||||||
|
<i class="fas fa-search fa-3x text-info mb-3"></i>
|
||||||
|
<h5 class="card-title">Поиск</h5>
|
||||||
|
<p class="card-text">Найти товар или операцию</p>
|
||||||
|
<a href="search.html" class="btn btn-info">Найти</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Статистика -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<h2 class="mb-3">Статистика склада</h2>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="totalItems">0</h4>
|
||||||
|
<p class="card-text">Всего товаров</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-boxes fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="totalValue">0 ₽</h4>
|
||||||
|
<p class="card-text">Общая стоимость</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-ruble-sign fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="lowStock">0</h4>
|
||||||
|
<p class="card-text">Заканчивается</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-exclamation-triangle fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="todayOperations">0</h4>
|
||||||
|
<p class="card-text">Операций сегодня</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-chart-line fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Последние операции -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title mb-0">
|
||||||
|
<i class="fas fa-clock me-2"></i>
|
||||||
|
Последние операции
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-hover" id="recentOperationsTable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Дата</th>
|
||||||
|
<th>Тип</th>
|
||||||
|
<th>Товар</th>
|
||||||
|
<th>Количество</th>
|
||||||
|
<th>Сотрудник</th>
|
||||||
|
<th>Статус</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<!-- Данные будут загружены через JavaScript -->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<!-- Модальные окна -->
|
||||||
|
<!-- Модальное окно добавления товара -->
|
||||||
|
<div class="modal fade" id="addItemModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-plus-circle me-2"></i>
|
||||||
|
Добавить новый товар
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="addItemForm">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemName" class="form-label">Название товара *</label>
|
||||||
|
<input type="text" class="form-control" id="itemName" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemCategory" class="form-label">Категория *</label>
|
||||||
|
<select class="form-select" id="itemCategory" required>
|
||||||
|
<option value="">Выберите категорию</option>
|
||||||
|
<option value="electronics">Электроника</option>
|
||||||
|
<option value="clothing">Одежда</option>
|
||||||
|
<option value="tools">Инструменты</option>
|
||||||
|
<option value="office">Офисные принадлежности</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemPrice" class="form-label">Цена (₽) *</label>
|
||||||
|
<input type="number" class="form-control" id="itemPrice" min="0" step="0.01" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="itemQuantity" class="form-label">Количество *</label>
|
||||||
|
<input type="number" class="form-control" id="itemQuantity" min="0" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="itemDescription" class="form-label">Описание</label>
|
||||||
|
<textarea class="form-control" id="itemDescription" rows="3"></textarea>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="itemBarcode" class="form-label">Штрих-код</label>
|
||||||
|
<input type="text" class="form-control" id="itemBarcode">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="saveItemBtn">
|
||||||
|
<i class="fas fa-save me-1"></i>Сохранить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Модальное окно прихода -->
|
||||||
|
<div class="modal fade" id="incomingModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-box-open me-2"></i>
|
||||||
|
Оформить приход
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="incomingForm">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="incomingItem" class="form-label">Товар *</label>
|
||||||
|
<select class="form-select" id="incomingItem" required>
|
||||||
|
<option value="">Выберите товар</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="incomingQuantity" class="form-label">Количество *</label>
|
||||||
|
<input type="number" class="form-control" id="incomingQuantity" min="1" required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="incomingSupplier" class="form-label">Поставщик</label>
|
||||||
|
<input type="text" class="form-control" id="incomingSupplier">
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="incomingNotes" class="form-label">Примечания</label>
|
||||||
|
<textarea class="form-control" id="incomingNotes" rows="2"></textarea>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<button type="button" class="btn btn-success" id="saveIncomingBtn">
|
||||||
|
<i class="fas fa-check me-1"></i>Оформить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Модальное окно расхода -->
|
||||||
|
<div class="modal fade" id="outgoingModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-truck me-2"></i>
|
||||||
|
Оформить расход
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="outgoingForm">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="outgoingItem" class="form-label">Товар *</label>
|
||||||
|
<select class="form-select" id="outgoingItem" required>
|
||||||
|
<option value="">Выберите товар</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="outgoingQuantity" class="form-label">Количество *</label>
|
||||||
|
<input type="number" class="form-control" id="outgoingQuantity" min="1" required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="outgoingRecipient" class="form-label">Получатель</label>
|
||||||
|
<input type="text" class="form-control" id="outgoingRecipient">
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="outgoingNotes" class="form-label">Примечания</label>
|
||||||
|
<textarea class="form-control" id="outgoingNotes" rows="2"></textarea>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<button type="button" class="btn btn-warning" id="saveOutgoingBtn">
|
||||||
|
<i class="fas fa-check me-1"></i>Оформить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Подвал -->
|
||||||
|
<footer class="bg-dark text-white mt-5 py-4">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h5>Система управления складом</h5>
|
||||||
|
<p class="mb-0">Эффективное управление товарными запасами</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-md-end">
|
||||||
|
<p class="mb-0">© 2024 Склад-Менеджер. Все права защищены.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- Скрипты -->
|
||||||
|
<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.7.1.min.js"></script>
|
||||||
|
<script src="js/auth.js"></script>
|
||||||
|
<script src="js/main.js"></script>
|
||||||
|
<script src="js/warehouse.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
108
login.html
Normal file
108
login.html
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Вход в систему - Склад-Менеджер</title>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
||||||
|
<link href="css/style.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="login-container">
|
||||||
|
<div class="login-card">
|
||||||
|
<div class="login-header">
|
||||||
|
<i class="fas fa-warehouse fa-3x mb-3"></i>
|
||||||
|
<h2>Склад-Менеджер</h2>
|
||||||
|
<p class="mb-0">Система управления складом</p>
|
||||||
|
</div>
|
||||||
|
<div class="login-body">
|
||||||
|
<form id="loginForm">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="username" class="form-label">
|
||||||
|
<i class="fas fa-user me-2"></i>Имя пользователя
|
||||||
|
</label>
|
||||||
|
<input type="text" class="form-control" id="username" required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-4">
|
||||||
|
<label for="password" class="form-label">
|
||||||
|
<i class="fas fa-lock me-2"></i>Пароль
|
||||||
|
</label>
|
||||||
|
<input type="password" class="form-control" id="password" required>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary w-100 mb-3">
|
||||||
|
<i class="fas fa-sign-in-alt me-2"></i>Войти в систему
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<!-- Информация о тестовых пользователях -->
|
||||||
|
<div class="mt-4">
|
||||||
|
<h6 class="text-muted mb-3">
|
||||||
|
<i class="fas fa-info-circle me-2"></i>Тестовые учетные записи:
|
||||||
|
</h6>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 mb-2">
|
||||||
|
<small class="text-muted">
|
||||||
|
<strong>Администратор:</strong> admin / admin123
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 mb-2">
|
||||||
|
<small class="text-muted">
|
||||||
|
<strong>Менеджер:</strong> manager / manager123
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
<div class="col-12 mb-2">
|
||||||
|
<small class="text-muted">
|
||||||
|
<strong>Оператор:</strong> operator / operator123
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
<small class="text-muted">
|
||||||
|
<strong>Наблюдатель:</strong> viewer / viewer123
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Информация о правах доступа -->
|
||||||
|
<div class="mt-4 p-3 bg-light rounded">
|
||||||
|
<h6 class="text-muted mb-2">
|
||||||
|
<i class="fas fa-shield-alt me-2"></i>Уровни доступа:
|
||||||
|
</h6>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6">
|
||||||
|
<small class="text-muted">
|
||||||
|
<strong>Администратор:</strong><br>
|
||||||
|
Полный доступ ко всем функциям
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<small class="text-muted">
|
||||||
|
<strong>Менеджер:</strong><br>
|
||||||
|
Чтение и запись данных
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mt-2">
|
||||||
|
<small class="text-muted">
|
||||||
|
<strong>Оператор:</strong><br>
|
||||||
|
Только чтение данных
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
<div class="col-6 mt-2">
|
||||||
|
<small class="text-muted">
|
||||||
|
<strong>Наблюдатель:</strong><br>
|
||||||
|
Ограниченный просмотр
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Скрипты -->
|
||||||
|
<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.7.1.min.js"></script>
|
||||||
|
<script src="js/auth.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
400
profile.html
Normal file
400
profile.html
Normal file
@ -0,0 +1,400 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Профиль - Склад-Менеджер</title>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
||||||
|
<link href="css/style.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- Навигационная панель -->
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
|
||||||
|
<div class="container">
|
||||||
|
<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">
|
||||||
|
<a class="nav-link" href="catalog.html">
|
||||||
|
<i class="fas fa-boxes me-1"></i>Каталог
|
||||||
|
</a>
|
||||||
|
</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>
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item dropdown" id="adminDropdown" style="display: none;">
|
||||||
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
||||||
|
<i class="fas fa-cog me-1"></i>Администрирование
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a class="dropdown-item" href="admin/users.html">Управление пользователями</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/categories.html">Категории товаров</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/reports.html">Отчеты</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item dropdown" id="profileDropdown">
|
||||||
|
<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 active" href="profile.html">Мой профиль</a></li>
|
||||||
|
<li><hr class="dropdown-divider"></li>
|
||||||
|
<li><a class="dropdown-item" href="#" id="logoutBtn">Выйти</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Заголовок профиля -->
|
||||||
|
<div class="profile-header">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div class="col-md-3 text-center">
|
||||||
|
<div class="profile-avatar">
|
||||||
|
<i class="fas fa-user"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-9">
|
||||||
|
<h1 id="userName">Загрузка...</h1>
|
||||||
|
<p class="mb-2" id="userPosition">Загрузка...</p>
|
||||||
|
<p class="mb-0" id="userDepartment">Загрузка...</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Основной контент -->
|
||||||
|
<main class="container mt-4">
|
||||||
|
<div class="row">
|
||||||
|
<!-- Боковая панель -->
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<i class="fas fa-user-circle me-2"></i>
|
||||||
|
Информация
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="mb-3">
|
||||||
|
<small class="text-muted">Email</small>
|
||||||
|
<div id="userEmail">Загрузка...</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<small class="text-muted">Роли</small>
|
||||||
|
<div id="userRoles">Загрузка...</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<small class="text-muted">Разрешения</small>
|
||||||
|
<div id="userPermissions">Загрузка...</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<small class="text-muted">Дата регистрации</small>
|
||||||
|
<div id="userRegistrationDate">Загрузка...</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Быстрые действия -->
|
||||||
|
<div class="card mt-3">
|
||||||
|
<div class="card-header">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<i class="fas fa-bolt me-2"></i>
|
||||||
|
Быстрые действия
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="d-grid gap-2">
|
||||||
|
<button class="btn btn-outline-primary btn-sm" onclick="profileManager.changePassword()">
|
||||||
|
<i class="fas fa-key me-1"></i>Сменить пароль
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-outline-secondary btn-sm" onclick="profileManager.editProfile()">
|
||||||
|
<i class="fas fa-edit me-1"></i>Редактировать профиль
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-outline-info btn-sm" onclick="profileManager.viewActivity()">
|
||||||
|
<i class="fas fa-chart-line me-1"></i>Моя активность
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Основная область -->
|
||||||
|
<div class="col-md-9">
|
||||||
|
<!-- Статистика пользователя -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-md-3 mb-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="totalOperations">0</h4>
|
||||||
|
<p class="card-text">Всего операций</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-list fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="thisMonthOperations">0</h4>
|
||||||
|
<p class="card-text">В этом месяце</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-calendar fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="todayOperations">0</h4>
|
||||||
|
<p class="card-text">Сегодня</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-clock fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-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="lastLogin">-</h4>
|
||||||
|
<p class="card-text">Последний вход</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-sign-in-alt fa-2x"></i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Последние операции пользователя -->
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<i class="fas fa-history me-2"></i>
|
||||||
|
Мои последние операции
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-hover" id="userOperationsTable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Дата</th>
|
||||||
|
<th>Тип</th>
|
||||||
|
<th>Товар</th>
|
||||||
|
<th>Количество</th>
|
||||||
|
<th>Статус</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<!-- Данные будут загружены через JavaScript -->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Настройки -->
|
||||||
|
<div class="card mt-4">
|
||||||
|
<div class="card-header">
|
||||||
|
<h5 class="mb-0">
|
||||||
|
<i class="fas fa-cog me-2"></i>
|
||||||
|
Настройки
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h6>Уведомления</h6>
|
||||||
|
<div class="form-check mb-2">
|
||||||
|
<input class="form-check-input" type="checkbox" id="emailNotifications" checked>
|
||||||
|
<label class="form-check-label" for="emailNotifications">
|
||||||
|
Email уведомления
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check mb-2">
|
||||||
|
<input class="form-check-input" type="checkbox" id="lowStockAlerts" checked>
|
||||||
|
<label class="form-check-label" for="lowStockAlerts">
|
||||||
|
Уведомления о низком запасе
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="operationReports">
|
||||||
|
<label class="form-check-label" for="operationReports">
|
||||||
|
Еженедельные отчеты
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h6>Интерфейс</h6>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="themeSelect" class="form-label">Тема оформления</label>
|
||||||
|
<select class="form-select" id="themeSelect">
|
||||||
|
<option value="light">Светлая</option>
|
||||||
|
<option value="dark">Темная</option>
|
||||||
|
<option value="auto">Автоматически</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="languageSelect" class="form-label">Язык</label>
|
||||||
|
<select class="form-select" id="languageSelect">
|
||||||
|
<option value="ru">Русский</option>
|
||||||
|
<option value="en">English</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mt-3">
|
||||||
|
<button class="btn btn-primary" onclick="profileManager.saveSettings()">
|
||||||
|
<i class="fas fa-save me-1"></i>Сохранить настройки
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<!-- Модальное окно смены пароля -->
|
||||||
|
<div class="modal fade" id="changePasswordModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-key me-2"></i>
|
||||||
|
Смена пароля
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="changePasswordForm">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="currentPassword" class="form-label">Текущий пароль</label>
|
||||||
|
<input type="password" class="form-control" id="currentPassword" required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="newPassword" class="form-label">Новый пароль</label>
|
||||||
|
<input type="password" class="form-control" id="newPassword" required>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="confirmPassword" class="form-label">Подтвердите новый пароль</label>
|
||||||
|
<input type="password" class="form-control" id="confirmPassword" required>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<button type="button" class="btn btn-primary" onclick="profileManager.savePassword()">
|
||||||
|
<i class="fas fa-save me-1"></i>Сохранить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Модальное окно редактирования профиля -->
|
||||||
|
<div class="modal fade" id="editProfileModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-edit me-2"></i>
|
||||||
|
Редактирование профиля
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="editProfileForm">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editName" class="form-label">Имя</label>
|
||||||
|
<input type="text" class="form-control" id="editName" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editEmail" class="form-label">Email</label>
|
||||||
|
<input type="email" class="form-control" id="editEmail" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editDepartment" class="form-label">Отдел</label>
|
||||||
|
<input type="text" class="form-control" id="editDepartment">
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="editPosition" class="form-label">Должность</label>
|
||||||
|
<input type="text" class="form-control" id="editPosition">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="editPhone" class="form-label">Телефон</label>
|
||||||
|
<input type="tel" class="form-control" id="editPhone">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
|
||||||
|
<button type="button" class="btn btn-primary" onclick="profileManager.saveProfile()">
|
||||||
|
<i class="fas fa-save me-1"></i>Сохранить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Подвал -->
|
||||||
|
<footer class="bg-dark text-white mt-5 py-4">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h5>Система управления складом</h5>
|
||||||
|
<p class="mb-0">Эффективное управление товарными запасами</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-md-end">
|
||||||
|
<p class="mb-0">© 2024 Склад-Менеджер. Все права защищены.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- Скрипты -->
|
||||||
|
<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.7.1.min.js"></script>
|
||||||
|
<script src="js/auth.js"></script>
|
||||||
|
<script src="js/warehouse.js"></script>
|
||||||
|
<script src="js/profile.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
292
search.html
Normal file
292
search.html
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Поиск - Склад-Менеджер</title>
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
||||||
|
<link href="css/style.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!-- Навигационная панель -->
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
|
||||||
|
<div class="container">
|
||||||
|
<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">
|
||||||
|
<a class="nav-link" href="catalog.html">
|
||||||
|
<i class="fas fa-boxes me-1"></i>Каталог
|
||||||
|
</a>
|
||||||
|
</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 active" href="search.html">
|
||||||
|
<i class="fas fa-search me-1"></i>Поиск
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<li class="nav-item dropdown" id="adminDropdown" style="display: none;">
|
||||||
|
<a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown">
|
||||||
|
<i class="fas fa-cog me-1"></i>Администрирование
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a class="dropdown-item" href="admin/users.html">Управление пользователями</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/categories.html">Категории товаров</a></li>
|
||||||
|
<li><a class="dropdown-item" href="admin/reports.html">Отчеты</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item dropdown" id="profileDropdown">
|
||||||
|
<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">Мой профиль</a></li>
|
||||||
|
<li><hr class="dropdown-divider"></li>
|
||||||
|
<li><a class="dropdown-item" href="#" id="logoutBtn">Выйти</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<!-- Основной контент -->
|
||||||
|
<main class="container mt-4">
|
||||||
|
<!-- Заголовок страницы -->
|
||||||
|
<div class="row mb-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<h1 class="mb-1">
|
||||||
|
<i class="fas fa-search me-2"></i>
|
||||||
|
Поиск
|
||||||
|
</h1>
|
||||||
|
<p class="text-muted mb-0">Быстрый поиск товаров и операций</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Поисковая форма -->
|
||||||
|
<div class="search-container">
|
||||||
|
<div class="row">
|
||||||
|
<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 search-input" id="searchQuery" placeholder="Введите название товара, описание, штрих-код или любые другие данные для поиска...">
|
||||||
|
<button class="btn btn-primary" type="button" id="searchBtn">
|
||||||
|
<i class="fas fa-search me-1"></i>Найти
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<select class="form-select" id="searchType">
|
||||||
|
<option value="all">Все</option>
|
||||||
|
<option value="items">Только товары</option>
|
||||||
|
<option value="operations">Только операции</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Расширенные фильтры -->
|
||||||
|
<div class="row mt-3" id="advancedFilters" style="display: none;">
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="categoryFilter" class="form-label">Категория товара</label>
|
||||||
|
<select class="form-select" id="categoryFilter">
|
||||||
|
<option value="">Все категории</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="priceRange" class="form-label">Диапазон цен</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="number" class="form-control" id="minPrice" placeholder="От">
|
||||||
|
<span class="input-group-text">-</span>
|
||||||
|
<input type="number" class="form-control" id="maxPrice" placeholder="До">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label for="dateRange" class="form-label">Период</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="date" class="form-control" id="startDate">
|
||||||
|
<span class="input-group-text">-</span>
|
||||||
|
<input type="date" class="form-control" id="endDate">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 mb-3">
|
||||||
|
<label class="form-label"> </label>
|
||||||
|
<div class="d-grid">
|
||||||
|
<button class="btn btn-outline-secondary" id="clearFiltersBtn">
|
||||||
|
<i class="fas fa-times me-1"></i>Очистить
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Кнопка расширенных фильтров -->
|
||||||
|
<div class="row mt-3">
|
||||||
|
<div class="col-12">
|
||||||
|
<button class="btn btn-link" id="toggleAdvancedFilters">
|
||||||
|
<i class="fas fa-filter me-1"></i>Расширенные фильтры
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Результаты поиска -->
|
||||||
|
<div id="searchResults" style="display: none;">
|
||||||
|
<!-- Статистика результатов -->
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
<div>
|
||||||
|
<h5 id="resultsCount">Найдено результатов: 0</h5>
|
||||||
|
</div>
|
||||||
|
<div class="d-flex gap-2">
|
||||||
|
<select class="form-select form-select-sm" id="sortResults" style="width: auto;">
|
||||||
|
<option value="relevance">По релевантности</option>
|
||||||
|
<option value="name">По названию</option>
|
||||||
|
<option value="date">По дате</option>
|
||||||
|
<option value="price">По цене</option>
|
||||||
|
</select>
|
||||||
|
<button class="btn btn-outline-primary btn-sm" id="exportResultsBtn">
|
||||||
|
<i class="fas fa-download me-1"></i>Экспорт
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Переключатель вкладок -->
|
||||||
|
<ul class="nav nav-tabs mb-3" id="resultsTabs">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link active" id="items-tab" data-bs-toggle="tab" href="#itemsResults">
|
||||||
|
<i class="fas fa-boxes me-1"></i>Товары <span class="badge bg-secondary" id="itemsCount">0</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" id="operations-tab" data-bs-toggle="tab" href="#operationsResults">
|
||||||
|
<i class="fas fa-history me-1"></i>Операции <span class="badge bg-secondary" id="operationsCount">0</span>
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<!-- Содержимое вкладок -->
|
||||||
|
<div class="tab-content" id="resultsTabContent">
|
||||||
|
<!-- Вкладка товаров -->
|
||||||
|
<div class="tab-pane fade show active" id="itemsResults">
|
||||||
|
<div class="row" id="itemsResultsContainer">
|
||||||
|
<!-- Результаты товаров будут загружены через JavaScript -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Вкладка операций -->
|
||||||
|
<div class="tab-pane fade" id="operationsResults">
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-hover" id="operationsResultsTable">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Дата</th>
|
||||||
|
<th>Тип</th>
|
||||||
|
<th>Товар</th>
|
||||||
|
<th>Количество</th>
|
||||||
|
<th>Сотрудник</th>
|
||||||
|
<th>Статус</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<!-- Результаты операций будут загружены через JavaScript -->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Пагинация -->
|
||||||
|
<div class="row mt-4">
|
||||||
|
<div class="col-12">
|
||||||
|
<nav aria-label="Навигация по результатам">
|
||||||
|
<ul class="pagination justify-content-center" id="resultsPagination">
|
||||||
|
<!-- Пагинация будет создана через JavaScript -->
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Пустое состояние -->
|
||||||
|
<div id="emptyState" class="text-center py-5">
|
||||||
|
<i class="fas fa-search fa-3x text-muted mb-3"></i>
|
||||||
|
<h4>Начните поиск</h4>
|
||||||
|
<p class="text-muted">Введите запрос в поле поиска выше, чтобы найти товары или операции</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Состояние загрузки -->
|
||||||
|
<div id="loadingState" class="text-center py-5" style="display: none;">
|
||||||
|
<div class="loading-spinner text-primary mb-3"></div>
|
||||||
|
<p class="text-muted">Поиск...</p>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<!-- Модальное окно деталей товара -->
|
||||||
|
<div class="modal fade" id="itemDetailsModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title">
|
||||||
|
<i class="fas fa-box me-2"></i>
|
||||||
|
Детали товара
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="itemDetailsContent">
|
||||||
|
<!-- Содержимое будет загружено через JavaScript -->
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Закрыть</button>
|
||||||
|
<button type="button" class="btn btn-primary" id="editItemBtn">
|
||||||
|
<i class="fas fa-edit me-1"></i>Редактировать
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Подвал -->
|
||||||
|
<footer class="bg-dark text-white mt-5 py-4">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-6">
|
||||||
|
<h5>Система управления складом</h5>
|
||||||
|
<p class="mb-0">Эффективное управление товарными запасами</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 text-md-end">
|
||||||
|
<p class="mb-0">© 2024 Склад-Менеджер. Все права защищены.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!-- Скрипты -->
|
||||||
|
<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.7.1.min.js"></script>
|
||||||
|
<script src="js/auth.js"></script>
|
||||||
|
<script src="js/warehouse.js"></script>
|
||||||
|
<script src="js/search.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user