Админка модуля
Как модуль добавляет свои экраны, пункты меню, переводы и вкладки в админку; SDK и общие компоненты.
Админка модуля — admin/index.ts, который экспортирует register(ctx). Модуль может быть встроен в общую сборку админки или собран отдельным бандлом (npm run build:modules -- <id>) — тогда он загружается во время работы, без пересборки админки.
import type { ModuleAdminContext } from '@/modules/sdk'
import ru from './locales/ru'
import en from './locales/en'
export function register(ctx: ModuleAdminContext): void {
ctx.addMessages({ ru, en })
ctx.addRoutes([
{
path: '/mymodule',
name: 'mymodule',
component: () => import('./views/MainView.vue'),
meta: { permission: 'mymodule.manage', crumbs: () => [{ labelKey: 'mymodule.title' }] },
},
])
ctx.addNavGroup({
key: 'mymodule',
labelKey: 'mymodule.title',
icon: 'star',
order: 60,
items: [{ key: 'mymodule', labelKey: 'mymodule.title', icon: 'star', to: { name: 'mymodule' }, permission: 'mymodule.manage' }],
})
}
Что ещё можно добавить
| Метод | Что |
|---|---|
addNavItems('shop', items, sections) | пункты в раздел другого модуля (например, «Магазин») |
addEntryPanel | панель в редакторе записи нужных типов |
addEntryListColumn, addEntryListBulkAction | колонка и массовое действие в списке записей |
addDashboardWidget | виджет на «Сводке» |
addAnalyticsTab | вкладка в разделе «Аналитика» |
Группы меню с одинаковым key сливаются: так CRM-модули делят один раздел «CRM».
SDK
@/modules/sdk даёт общее: apiFetch (с CSRF), pushToast, describeApiError, форматтеры дат и чисел, PageHeader, SettingsShell, MediaPickerDialog, IntegrationJournal (журнал обмена) и IntegrationHelp (блок «Как настроить»). Компоненты PrimeVue и классы Tailwind доступны как в самой админке.
Права
Право модуля (например, mymodule.manage) создаётся в install() и выдаётся ролям; meta.permission маршрута и пункта меню скрывает экран от тех, у кого права нет. Проверку на сервере делайте всегда — админка только прячет кнопки.