Разработка корзины на Vue.js для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка корзины на Vue.js для 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка корзины на Vue.js для 1С-Битрикс

Корзина — самый чувствительный к UX компонент магазина. Стандартный bitrix:sale.basket.basket делает полную перезагрузку при каждом изменении количества или удалении товара. Vue-корзина с optimistic updates устраняет это: визуально всё происходит мгновенно, а синхронизация с сервером идёт в фоне.

Битрикс API для работы с корзиной

Основные методы модуля sale:

// Добавить в корзину
\Bitrix\Sale\Basket::create(SITE_ID);
$basketItem = $basket->createItem('catalog', $productId);
$basketItem->setFields(['QUANTITY' => 1, 'CURRENCY' => 'RUB']);
$basket->save();

// AJAX-контроллер для Vue:
// POST /basket/add { productId, quantity, props }
// POST /basket/update { itemId, quantity }
// POST /basket/remove { itemId }
// GET  /basket — текущее состояние

Или через REST API: sale.basketitem.add, sale.basketitem.update, sale.basketitem.delete.

Структура Vue-корзины

CartApp.vue              — корневой, читает cartStore
├── CartDrawer.vue       — боковая панель (slide-over)
├── CartIcon.vue         — иконка с счётчиком в шапке
├── CartItem.vue         — строка товара (фото, название, кол-во, цена)
├── CartSummary.vue      — итог, промокод, кнопка оформления
└── EmptyCart.vue        — заглушка пустой корзины

Pinia store корзины

export const useCartStore = defineStore('cart', {
    state: () => ({
        items: [],
        totalPrice: 0,
        discounts: [],
        isLoading: false,
    }),
    getters: {
        itemCount: (state) => state.items.reduce((sum, i) => sum + i.quantity, 0),
    },
    actions: {
        async addItem(productId, quantity = 1) {
            // Optimistic update: добавляем локально сразу
            this.items.push({ productId, quantity, pending: true });
            try {
                const result = await cartApi.add(productId, quantity);
                // Обновляем с данными от сервера (реальный ID, цена)
                this.syncFromServer(result.basket);
            } catch {
                // Откат при ошибке
                this.items = this.items.filter(i => !i.pending);
            }
        }
    }
});

Синхронизация между вкладками

Пользователь открыл магазин в двух вкладках. Товар добавлен в одной — корзина в другой устарела. Решение:

// Слушаем localStorage-событие (BroadcastChannel — современный вариант)
const channel = new BroadcastChannel('cart-sync');
channel.onmessage = (e) => {
    if (e.data.type === 'CART_UPDATED') cartStore.fetchCart();
};

// При изменении корзины:
channel.postMessage({ type: 'CART_UPDATED' });

Случай из практики

Магазин электроники: корзина стандартная Битрикс с AJAX. Проблема: при добавлении товара через кнопку на карточке (sale.basket.basket.ajax) страница «моргала» — полностью перерисовывался блок корзины в шапке. На мобильных устройствах это воспринималось как подвисание. Vue-корзина с CartIcon (счётчик обновляется мгновенно через Pinia) и CartDrawer (открывается sliding panel без перезагрузки) — добавление товара визуально мгновенно, запрос к серверу идёт асинхронно.

Сроки выполнения

Вариант Срок
Корзина-drawer с базовыми операциями от 4 до 6 рабочих дней
С промокодами, скидками, сохранёнными списками от 8 до 12 рабочих дней
Интеграция с Vue-каталогом и оформлением заказа от 3 до 5 рабочих дней доп.