README.md

Административная панель медицинского центра

Управление врачами, пациентами, приёмами и пользователями системы.


🛠 Технологии

Компонент Технология
Бэкенд Laravel 12, PHP 8.4
Фронтенд Blade-шаблоны, AdminLTE 3, Bootstrap 4, jQuery
Стили SASS, Bootstrap, Tailwind CSS (Blaze), Font Awesome, Bootstrap Icons
Сборка Laravel Mix (Webpack)
Авторизация Laravel Breeze, spatie/laravel-permission
Файлы uniSharp/laravel-filemanager
Изображения intervention/image-laravel
JWT firebase/php-jwt

✅ Требования

  • PHP ≥ 8.4
  • Composer (последняя версия)
  • Node.js ≥ 16 + npm
  • MySQL или MariaDB
  • GD/Intl PHP-расширения (включены по умолчанию)

📦 Установка

1. Клонирование и зависимости

git clone <repository-url>
cd laravel-medical-admin-panel

# PHP-зависимости
composer install

# JavaScript-зависимости
npm install

2. Настройка окружения

# Создать .env из шаблона
cp .env.example .env

# Сгенерировать ключ приложения
php artisan key:generate

Откройте .env и настройте базу данных:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=medical_panel
DB_USERNAME=root
DB_PASSWORD=

3. Миграции и сиды

# Сгенерировать ключ JWT (для firebase/php-jwt)
php artisan jwt:secret

# Запустить миграции
php artisan migrate

# Заполнить базу данными (создаёт Admin-пользователя)
php artisan db:seed

Учётные данные по умолчанию:
Email: test@gmail.com
Пароль: 11223344

4. Запуск

# Сервер разработчика
php artisan serve

# Или сборка frontend + сервер
npm run dev && php artisan serve

🗄 База данных

Таблицы

Таблица Описание
users Пользователи системы (админы, персонал)
doctors Врачи
patients Пациенты
receptions Записи на приём
roles Роли (Admin, User)
permissions Права доступа
model_has_roles Связь пользователей с ролями
password_resets Сброс паролей

Таблица doctors

Поле Тип Описание
id BIGINT Первичный ключ
name VARCHAR(100) Имя
surname VARCHAR(100) Фамилия
patronymic VARCHAR(100) Отчество
birthday DATE Дата рождения
email VARCHAR Email
specialty VARCHAR(100) Специальность
phone_number VARCHAR(100) Телефон
comment TEXT Комментарий
color VARCHAR(100) Цвет метки

Таблица patients

Поле Тип Описание
id BIGINT Первичный ключ
name VARCHAR(100) Имя
surname VARCHAR(100) Фамилия
patronymic VARCHAR(100) Отчество
birthday DATE Дата рождения
email VARCHAR Email
adress_reg VARCHAR(100) Адрес регистрации
adress_fact VARCHAR(100) Фактический адрес
phone_number VARCHAR(100) Телефон
passport_* INT Данные паспорта
SNILS INT СНИЛС
polisy_num INT Полис ОМС
comment TEXT Комментарий

Таблица receptions

Поле Тип Описание
id BIGINT Первичный ключ
date DATE Дата приёма
time TIME Время приёма
doc BIGINT Ссылка на врача (doctors.id)
patient BIGINT Ссылка на пациента (patients.id)
comment TEXT Комментарий к приёму

Связи моделей

User ─┐
      ├─→ HasRoles (spatie/laravel-permission)

Reception → Doc  (hasOne → doctor)
Reception → Patient (hasOne → patient)

🗺 Маршруты

Гостевые / Авторизация

Метод Путь Описание
GET / Страница входа
POST / Вход в систему
GET /register Регистрация
POST /register Создание пользователя
GET /login Вход
POST /login Авторизация
GET /forgot-password Запрос сброса пароля
POST /forgot-password Отправка ссылки
GET /reset-password/{token} Сброс пароля
POST /reset-password Подтверждение сброса
GET /verify-email Верификация почты
POST /verify-email/{id}/{hash} Подтверждение email
POST /logout Выход

🟦 Админ-панель (middleware: role:Admin)

Метод Путь Контроллер Имя маршрута
GET /dashboard MainController@Dashboard dashboard
GET /reception MainController@recept recept
GET /reception/{date} MainController@recept_date recept_date
POST /reception/check MainController@recept_check recept_check
GET /recept_edit/{id}/update MainController@rec_edit rec_edit
GET /recept_edit/{id}/delete MainController@rec_del rec_del
POST /recept_edit/{id}/update MainController@rec_update rec_update
GET /doctor_table DoctorController@docs doc_table
GET /doc_edit/{id}/update DoctorController@edit doc_edit
GET /doc_edit/{id}/delete DoctorController@doc_del doc_del
POST /doc_edit/{id}/update DoctorController@edit_update doc_edit_update
POST /doctor/check DoctorController@doc_check doc_check
GET /all-csv DoctorController@fileExport file-export
GET /all_p-csv PatientController@file_export file_export
POST /patient/check MainController@pat_check pat_check
GET /pat_edit/{id}/update MainController@pat_edit pat_edit
GET /pat_edit/{id}/delete MainController@pat_del pat_del
POST /pat_edit/{id}/update MainController@pat_update pat_update
POST /user/check MainController@user_check user_check
GET /users_table MainController@usertables user_table
GET /user_edit/{id}/delete MainController@usr_del usr_del
GET /user_edit/{id}/update MainController@us_edit us_edit
POST /user_edit/{id}/update MainController@user_update user_update
GET /patient_table MainController@PATS pat_table

👤 Пользователь (middleware: role:User)

Метод Путь Контроллер Описание
GET /dashboard MainController@DashPatient Личный кабинет
GET /calendar MainController@PatCAL Календарь приёмов
GET /reception_table MainController@recepTable Список приёмов

🔐 Роли и права

Роль Доступ
Admin Полный доступ: управление врачами, пациентами, приёмами, пользователями; экспорт в CSV
User Личный кабинет, календарь приёмов, запись к врачу

Управление ролями (Tinker)

// Создать новую роль
php artisan tinker
>>> $role = \Spatie\Permission\Models\Role::create(['name' => 'Doctor']);

// Назначить роль пользователю
>>> $user = \App\Models\User::find(1);
>>> $user->assignRole('Doctor');

// Снять роль
>>> $user->removeRole('Doctor');

📁 Структура проекта

laravel-medical-admin-panel/
├── app/
│   ├── Console/              # Команды artisan
│   ├── Exports/              # Экспорт в CSV/Excel
│   │   ├── DocsExport.php    # Экспорт врачей
│   │   └── PatsExport.php    # Экспорт пациентов
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── DoctorController.php
│   │   │   ├── HomeController.php
│   │   │   ├── MainController.php
│   │   │   ├── PatientController.php
│   │   │   └── Auth/         # Контроллеры авторизации (Breeze)
│   │   ├── Middleware/       # Middleware (auth, roles и т.д.)
│   │   └── Requests/         # Form Requests
│   ├── Imports/
│   │   └── PatsImport.php    # Импорт пациентов
│   └── Models/
│       ├── User.php
│       ├── doctor.php
│       ├── patient.php
│       └── reception.php
├── config/                   # Конфигурация приложений
├── database/
│   ├── migrations/           # Миграции БД
│   ├── seeders/              # Сиды (Admin-пользователь)
│   └── factories/            # Фабрики для тестов
├── public/
│   ├── admin/                # AdminLTE 3 (plugins, dist)
│   ├── css/                  # Стили
│   └── js/                   # JavaScript
├── resources/
│   ├── views/
│   │   ├── admin/            # Админ-шаблоны
│   │   ├── auth/             # Страницы авторизации
│   │   ├── components/       # Blade-компоненты (Breeze)
│   │   ├── layout/           # Старые layout'ы
│   │   ├── layouts/          # Блейз-layout'ы (Breeze)
│   │   ├── patient/          # Шаблоны пациентов
│   │   ├── doc_edit.blade.php
│   │   ├── doctor_table.blade.php
│   │   ├── patient_table.blade.php
│   │   ├── reception_table.blade.php
│   │   ├── recept_edit.blade.php
│   │   ├── pat_edit.blade.php
│   │   ├── user_edit.blade.php
│   │   └── users_table.blade.php
│   └── sass/                 # SASS-источники
├── routes/
│   ├── web.php               # Основные маршруты
│   └── auth.php              # Маршруты авторизации (Breeze)
└── tests/                    # PHPUnit-тесты

📤 Экспорт данных

Врачи

GET /all-csv
Маршрут: file-export
Контроллер: DoctorController@fileExport

Пациенты

GET /all_p-csv
Маршрут: file_export
Контроллер: PatientController@file_export

Экспорт доступен только для пользователей с ролью Admin.


🎨 Сборка ресурсов

# Разработка (watch)
npm run dev

# Разработка с hot-reload
npm run hot

# Продакшн-сборка
npm run prod

Скомпилированные файлы попадают в public/mix-manifest.json.


🧪 Тестирование

# Все тесты
php artisan test

# Или через PHPUnit
./vendor/bin/phpunit

🔑 Полезные команды

Команда Описание
php artisan serve Запустить dev-сервер
php artisan migrate:fresh --seed Сбросить и заполнить БД
php artisan cache:clear Очистить кэш
php artisan config:cache Кэшировать конфиги
php artisan route:list Список всех маршрутов
php artisan db:show Информация о БД
php artisan optimize Оптимизация автозагрузки
php artisan storage:link Создать symbolic link для файлов
npm run dev Собрать frontend-ресурсы
php artisan key:generate Сгенерировать APP_KEY

📝 Примечания

  • AdminLTE 3 — основная тема админ-панели (public/admin/)
  • Шаблонизация — Blade-шаблоны с разделением на admin (для персонала) и patient (для пациентов)
  • Безопасность — Laravel Breeze (login, register, password reset, email verification)
  • Импорт пациентов — доступен через PatsImport.php (Laravel Excel/Imports)
  • Пустой год — на сервере может не быть PHP 8.4, рекомендуется Docker

📄 Лицензия

Проект разработан для медицинского центра «Забота». Внутреннее использование.


👥 Контакты

Разработчик: PunkProgrammer
Версия: 1.1.0

Описание
Проект Админ панели для медицинской клиники
Конвейеры
0 успешных
0 с ошибкой
Разработчики