1 месяц назад
История
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 | |
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 | |
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
с ошибкой