Розробка адміністративної панелі на AdminJS

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка адміністративної панелі на AdminJS
Середня
від 1 тижня до 3 місяців
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розробка административної панелі на AdminJS

AdminJS — open-source фреймворк для Node.js, який автоматично генерує admin-інтерфейс на основі моделей даних. Підтримує TypeORM, Prisma, Mongoose, Sequelize. Написан на React, добре кастомізується.

Установка та базова настройка

npm install adminjs @adminjs/express express express-session
npm install @adminjs/typeorm  # або @adminjs/prisma, @adminjs/mongoose
import AdminJS from 'adminjs';
import AdminJSExpress from '@adminjs/express';
import { Database, Resource, getModelByName } from '@adminjs/typeorm';

AdminJS.registerAdapter({ Database, Resource });

const adminJs = new AdminJS({
    resources: [
        {
            resource: getModelByName('User'),
            options: {
                properties: {
                    password: { isVisible: { list: false, edit: false, filter: false, show: false } },
                    createdAt: { isVisible: { edit: false } }
                },
                actions: {
                    delete: { isAccessible: ({ currentAdmin }) => currentAdmin?.role === 'superadmin' }
                }
            }
        },
        {
            resource: getModelByName('Order'),
            options: {
                listProperties: ['id', 'customer', 'status', 'total', 'createdAt'],
                filterProperties: ['status', 'createdAt'],
                sort: { sortBy: 'createdAt', direction: 'desc' }
            }
        }
    ],
    dashboard: {
        component: AdminJS.bundle('./components/Dashboard')
    },
    branding: {
        companyName: 'Мій Магазин',
        logo: '/admin-logo.svg'
    }
});

const router = AdminJSExpress.buildAuthenticatedRouter(adminJs, {
    authenticate: async (email, password) => {
        const admin = await Admin.findOne({ email });
        if (admin && await bcrypt.compare(password, admin.passwordHash)) {
            return admin;
        }
        return null;
    },
    cookiePassword: process.env.COOKIE_SECRET
});

Кастомні компоненти

AdminJS дозволяє замінювати стандартні компоненти на кастомні React-компоненти:

// components/OrderStatusCell.tsx
import { BasePropertyProps } from 'adminjs';

const OrderStatusCell: React.FC<BasePropertyProps> = ({ record }) => {
    const status = record.params.status;
    const colors = { pending: 'orange', completed: 'green', cancelled: 'red' };

    return <span style={{ color: colors[status] }}>{status}</span>;
};

export default OrderStatusCell;

// У конфігурації ресурсу
properties: {
    status: {
        components: { list: AdminJS.bundle('./components/OrderStatusCell') }
    }
}

Кастомні екшени

actions: {
    sendNotification: {
        actionType: 'record',
        icon: 'Bell',
        label: 'Сповістити клієнта',
        handler: async (request, response, context) => {
            const { record } = context;
            await NotificationService.send(record.params.customerId, 'order_ready');
            return {
                record: record.toJSON(),
                notice: { message: 'Сповіщення відправлено', type: 'success' }
            };
        }
    }
}

Загрузка файлів через @adminjs/upload

npm install @adminjs/upload
import uploadFeature from '@adminjs/upload';
import { s3Client } from './s3-client';

{
    resource: getModelByName('Product'),
    features: [
        uploadFeature({
            provider: { aws: { bucket: 'my-bucket', s3Client } },
            properties: {
                file:          'imageFile',
                filePath:      'imageUrl',
                filename:      'imageName',
                mimeType:      'imageMimeType'
            },
            uploadPath: (record, filename) => `products/${record.id()}/${filename}`
        })
    ]
}

Ролі та дозволи

const canModifyOrders = ({ currentAdmin }: { currentAdmin: Admin }) =>
    ['superadmin', 'manager'].includes(currentAdmin?.role);

{
    resource: getModelByName('Order'),
    options: {
        actions: {
            edit:   { isAccessible: canModifyOrders },
            delete: { isAccessible: ({ currentAdmin }) => currentAdmin?.role === 'superadmin' }
        }
    }
}

Обмеження AdminJS

  • Складні custom workflows вимагають багато коду — теряється перевага над кастомною панеллю
  • Продуктивність на великих обсягах (100k+ записів) вимагає ручної оптимізації запитів
  • Обмежені можливості для мобільного відображення

Срок розробки: 2–3 тижні для панелі з кастомними компонентами, загруженням файлів та настроєними правами.