Я буду создавать базовую панель администратора с помощью VueJS. Я пробую пакет компонентов Vuetify, чтобы упростить разработку. Это был мой первый опыт работы с Vuetify, и создание его стало проще простого!

Изменить - это обновленная статья, которая дополняет и дополняет эту статью. Ознакомьтесь с Часть 2.5

Эта статья является частью серии. Остальное смотрите ниже!

Часть 0 - Настройка мультитенантного приложения Laravel

Часть 1 - Laravel Passport и Hyn \ Tenancy

Часть 2 - VueJS и Laravel API ← Вы здесь

Часть 3 - Многопользовательское тестирование Laravel

Вот демонстрационное репо, над которым я работаю. Обязательно используйте ветку Main.



Ознакомьтесь с документацией Vuetify.



Как упоминалось ранее, я использую Vuetify в качестве строительных блоков для этой панели. Ознакомьтесь с приведенной выше ссылкой на документацию для получения дополнительной информации.

Предпосылки

Это мультитенантный пример. См. Часть 1 этой серии для получения дополнительной информации. Вам нужно будет перейти к /register и создать клиента, прежде чем вы сможете войти в панель управления. После создания клиента вы будете перенаправлены на страницу входа в систему.

Очистка

Перво-наперво нам нужно очистить конфигурацию Laravel.

Удалить эти файлы

resources\sass\*
resources\js\bootstrap.js
resources\js\components\ExampleComponent.vue

Примечание. До Laravel 5.7 папки sass и js находились в активах

Вы можете удалить некоторые пакеты, включенные в Laravel.

npm remove bootstrap
npm remove popper.js
npm remove lodash

Откройте webpack.mix.js и удалите эту строку.

.sass('resources/sass/app.scss', 'public/css');

Настраивать

Используйте npm (или что-то еще), чтобы включить эти пакеты.

npm install vue-router --save-dev
npm install vuetify --save-dev

Настройка Vuetify проста. Просто импортируйте Vuetify и добавьте его в Vue как плагин в свой app.js файл.

import Vuetify from 'vuetify'
Vue.use(Vuetify)

Это будет включать ВСЕ компоненты Vuetify, независимо от того, используете вы их или нет. Если вы хотите уменьшить размер пакета, следуйте инструкциям в документации Vuetify.

Webpack

Единственное, что я делаю с Webpack, - это создаю псевдоним, чтобы @ указывало на корневой каталог js. Это устраняет необходимость в относительных путях при импорте файлов. Добавьте следующий код в webpack.mix.js.

mix.webpackConfig({    
  resolve: {      
    alias: {
 @’: __dirname + '/resources/assets/js'      
    },    
  },  
})

Ваш путь может отличаться в зависимости от версии laravel

Настройка Axios

Есть много способов заставить это работать. Я предпочитаю импортировать аксиомы только тогда, когда мне это нужно. Создайте каталог конфигурации и создайте файл с именем axios.js.

Мы можем импортировать этот файл всякий раз, когда нам нужно взаимодействовать с API.

Компоненты

App.vue

Это компонент, из которого мы будем все строить. Я поместил сюда все компоненты макета Vuetify. Это дает нам базовый макет панели инструментов с заголовком и боковой панелью.

Если вы посмотрите на строку 37, у меня есть форма, встроенная в меню. Я использую это, чтобы пользователи могли выйти из системы, поскольку Laravel требует POST-запроса к /logout. Затем у меня есть метод Vue logout(), который отправит форму. Токен - это вычисляемое свойство, которое извлекает токен CSRF из метатега. Это тот же подход, который используется в строительных лесах Laravel Auth, и он довольно удобен!

Я также указал <router-view></router-view>. Здесь он будет отображать различные страницы (или представления) из маршрутизатора.

Ссылки на боковую панель

В App.vue ссылки боковой панели создаются на основе файла с именем sidebarLinks.js в корне папки js. Идите вперед и создайте этот файл.

API

Создайте папку api и добавьте ticket.js. Здесь я импортирую аксиомы и добавляю различные функции API.

Затем я импортирую этот файл в нужные мне компоненты. Каждый метод возвращает обещание и позволяет компоненту выполнять успешную обработку и обработку ошибок.

Vue Router

Это routes.js файл, который я использую. Это довольно просто, всего два маршрута. При необходимости вы можете добавить больше.

app.js

Убедитесь, что ваш app.js файл выглядит так. Сюда входят плагины и конфигурация маршрутов.

Далее мы создадим компоненты!

Просмотр билета

Это представление маршрутизатора, в котором есть все функции приборной панели. Здесь много чего происходит. Я постараюсь сломать это.

Ниже приведено изображение компонента "Тикеты" в действии. Я просто взял пример из документации таблицы данных Vuetify и заставил его работать с моим API.

Основным используемым здесь компонентом является <v-data-table>. Это компонент Vuetify, который отображает, форматирует и сортирует данные. Также из этого представления можно редактировать, удалять и добавлять заявки.

Как только пользователь перейдет к этому компоненту, он попытается получить все билеты из API. Это происходит в ловушке created(). Файл tickets.js импортируется в этот компонент и позволяет легко выполнять вызовы API.

Каждый вызов API возвращает обещание и использует методы .then() и .catch() для обработки успешных вызовов и ошибок. Я использую компонент <v-snack-bar> для отображения статуса вызовов API.

Существуют различные методы Vue для обработки грубых операций. По сути, они попытаются выполнить вызов API. Если вызов будет успешным, он обновит таблицу с новой информацией, чтобы не нужно было снова вытаскивать все билеты. Аккуратный!

Компилировать

Пришло время скомпилировать весь код, написанный на данный момент. Если вы еще не запустили: npm install в базовом каталоге laravel. Затем запустите npm run dev, чтобы собрать модули. Вы также можете использовать npm run watch для автоматической сборки при изменении файлов. Наконец, если вы строите для производства, вы можете запустить npm run prod. Это позволит собрать и минимизировать код.

Просмотры Laravel Auth

Это то, что я раньше не пробовал с этими представлениями. Я включил Vue и Vuetify и использовал их вместе с движком шаблонов лезвий. Я не думаю, что после того, как он закончил, делать это так, потому что он довольно медленно загружается. Но пользовательский интерфейс единообразен во всем приложении, что является плюсом.

app.blade.php

Это макет лезвия, в который я включаю файлы Vue и Vuetify.

login.blade.php

Это шаблон лезвия входа в систему, переработанный с использованием компонентов Vuetify.

register.blade.php

Шаблон клинка регистра переработан с добавлением компонентов Vuetify.

Заключение

И это все, что касается простой панели инструментов Vue. Должно быть действительно легко добавить к этому функциональность, просто создав компоненты View и импортируя их в маршруты и боковую панель.

Я связал пример репозитория в начале и должен быть хорошей ссылкой, если у вас возникнут какие-либо проблемы с его реализацией. Также не стесняйтесь оставлять комментарии или предложения.

Затем я думаю, что собираюсь переработать REST API в конечную точку GraphQL. Также ожидайте некоторых тестов в будущем!