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