Дата публикации: 10.07.2024 в 16:55

MoonShine кейс #1. Учет транспорта

Андрей МарковАндрей Марков
0 комментария

Привет!

Меня зовут Андрей. Я Full-stack разработчик, опыт работы - 2 года. Работаю с php (laravel), js (next/vue). В этой статье-кейсе хочу поделиться своим опытом работы с админ-панелью MoonShine.

Навстречу луне: как MoonShine освещает путь к админ-панели мечты

Проект начался с довольно простой, но амбициозной задачи: наладить учет прибывающего транспорта на территории склада логистической компании и обеспечить контроль статуса каждого грузовика.

Дополнительные особенности задачи:

  • полная свобода по выбора стека/технологий
  • молниеносная реализация первого прототипа (1-2 дня)

В поисках лучшей админки

В работе на проектах довелось использовать две админки: Backpack for Laravel и MoonShine v2. Поставленную задачу по учёту транспорта решил выполнить на MoonShine. Мое знакомство с MoonShine произошло благодаря YouTube-каналу CutCode, который служил отличным подспорьем во время моего обучения на web-разработчика.

Почему же Moonshine завоевала мое сердце:

  • Безграничный функционал без ценника. В отличие от Backpack, MoonShine открывает доступ ко всем своим возможностям абсолютно бесплатно.
  • Превосходная документация и обучающие видео. Документация оказалась на редкость подробной и полезной. Хотя видеогайды мне почти не понадобились, но было приятно осознавать, что есть куда обратиться в случае трудностей.
  • Современный и стильный интерфейс. Внешний вид админки MoonShine настолько хорош, что не требует существенной доработки стилей, экономя массу времени и усилий. Есть готовый набор UI элементов.
  • Комьюнити. У админ-панели есть свой чат в Telegram, где всегда можно задать вопрос дружелюбному сообществу. Пару раз приходилось прибегать к помощи «зала».
  • Как конструктор (только без пластика). Работая с Moonshine, получаешь ощущения как от конструктора LEGO: множество предоставленных классов и методов позволяют сосредоточиться на выполнении задач, а не на поиске решений. В результате, вместо того чтобы ломать голову над реализацией, ты просто берешь и делаешь.
  • Деплой. Никаких проблем при деплое через докер на корпоративном сервере не возникло, все произошло максимально реактивно, без проблем со стороны админ-панели.

В общем впечатления сугубо позитивные.

Сложности, превращенные в возможности

Проект требовал предельной простоты взаимодействия сотрудников с минимальным количеством переходов между страницами. Для этого потребовались:

  • Асинхронное добавление нового транспорта и изменение статуса. Вместо перегруженного Vue.js я выбрал Livewire, который оказался легким и элегантным решением для отдельных компонентов.
  • Реализация системы прав и ролей. Хотя MoonShine предоставляет мини-библиотеку для этой задачи, я предпочел самописное решение, что оказалось проще, чем я ожидал.

Мелкие проблемы

Конечно же, не все задачи поддавались решению с первого раза, некоторые требовали отдельного подхода, а именно:

Детальный фильтр по дате. Одной из задач было создание детального фильтра по дате, который позволял бы пользователю выбирать дату создания записи на основе диапазона времени, учитывая возможное отсутствие одного из значений. Например, если указана только начальная дата, фильтр должен охватывать все записи до текущего момента, и наоборот. Сообщество MoonShine в чате Telegram оперативно подключилось и подсказало, как внедрить самодельное решение для фильтра.

Кастомизация

Заказчики любят кастомизацию. Берем MoonShine и делаем. Легко:

  • Добавление кастомных иконок: легко реализуемо по документации, что стало ещё одним убедительным аргументом в пользу MoonShine.
  • Окрашивание строк таблицы в зависимости от статуса: я применил JavaScript для стилизации строк на основе поля состояния (впоследствии обнаружил готовое решение в документации).
  • Стилизация и настройка ассетов. Добавление ассетов оказалось чрезвычайно удобным. Я изменил цветовой фиолетовый акцент на красный, соответствующий корпоративным цветам, и переориентировал меню с левого положения на верхнее — все это легко настраивается по документации.

Ньюанс, который не соответствует моим ожиданиям

Отображение типов полей в разных режимах: в Backpack for Laravel реализован удобный способ управления отображением полей в разных режимах — на странице, в режиме редактирования и т.д. Эти виды строго разделены, что на мой взгляд упрощает управление. В Moonshine же все вызывается в одном месте, и иногда три метода, относящиеся к одному полю, находятся рядом в коде. Это может создавать путаницу, особенно при наличии сложной внутренней логики. Конечно, можно было бы создать свои методы для упрощения, и в этом больше говорит моя лень и привычка, чем реальный недостаток админ-панели.

Общий вывод

Работа с Moonshine оказалась настолько приятной, что я решил использовать его для другого корпоративного проекта (тех. поддержка и учет оборудования в организации) и даже для своего проекта (учет личного бюджета). С ростом опыта количество компонентов, которые я делал сам, сократилось, уступая место готовым ресурсам MoonShine - лучше изучил документацию и возможности.

MoonShine стал моим верным помощником в создании админ-панелей. Легкость применения под любые задачи, ускорение написания кода и отсутствие ограничений делают его идеальным выбором. Кроме того, MoonShine не только справляется с ролью админ-панели, но и подходит для создания простых сайтов.

Работа с MoonShine помогла мне сэкономить много времени на создание админ-панели. Независимо от сложности проекта, эта админка справляется с задачей на все сто. Считаю её незаменимым инструментом в арсенале любого Laravel-разработчика.

ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай