fix(pos): отключить автофокус на мобильных устройствах

Добавлено определение мобильных устройств через User-Agent и ширину экрана.
Фокус на поле поиска и поле ввода количества теперь устанавливается только
на десктопах, чтобы избежать появления экранной клавиатуры на мобильных.
This commit is contained in:
2026-01-16 19:06:36 +03:00
parent edad388ea8
commit c8284a6ac5

View File

@@ -1113,9 +1113,12 @@ async function addToCart(item) {
const itemIndex = Array.from(cart.keys()).indexOf(cartKey); const itemIndex = Array.from(cart.keys()).indexOf(cartKey);
if (itemIndex !== -1 && qtyInputs[itemIndex]) { if (itemIndex !== -1 && qtyInputs[itemIndex]) {
// Устанавливаем фокус только на десктопных устройствах
if (!isMobileDevice()) {
qtyInputs[itemIndex].focus(); qtyInputs[itemIndex].focus();
qtyInputs[itemIndex].select(); // Выделяем весь текст qtyInputs[itemIndex].select(); // Выделяем весь текст
} }
}
}, 50); }, 50);
} }
} }
@@ -1659,7 +1662,7 @@ async function openEditKitModal(kitId) {
document.getElementById('createTempKitModalLabel').textContent = 'Редактирование витринного букета'; document.getElementById('createTempKitModalLabel').textContent = 'Редактирование витринного букета';
document.getElementById('confirmCreateTempKit').textContent = 'Сохранить изменения'; document.getElementById('confirmCreateTempKit').textContent = 'Сохранить изменения';
// Показываем кнопку "Разобрать" и блок добавления товаров // По<EFBFBD><EFBFBD>азываем кнопку "Разобрать" и блок добавления товаров
document.getElementById('disassembleKitBtn').style.display = 'block'; document.getElementById('disassembleKitBtn').style.display = 'block';
document.getElementById('showcaseKitQuantityBlock').style.display = 'none'; document.getElementById('showcaseKitQuantityBlock').style.display = 'none';
document.getElementById('addProductBlock').style.display = 'block'; document.getElementById('addProductBlock').style.display = 'block';
@@ -2192,6 +2195,23 @@ document.getElementById('disassembleKitBtn').addEventListener('click', async ()
} }
}); });
// Вспомогательная функция для определения мобильного устройства
function isMobileDevice() {
// Проверяем по юзер-агенту и размеру экрана
const userAgent = navigator.userAgent || navigator.vendor || window.opera;
// Проверка по юзер-агенту
const mobileKeywords = ['Android', 'webOS', 'iPhone', 'iPad', 'iPod', 'BlackBerry', 'Windows Phone'];
const isMobileUA = mobileKeywords.some(keyword =>
userAgent.indexOf(keyword) > -1
);
// Проверка по размеру экрана (ширина меньше 768px часто указывает на мобильные устройства)
const isSmallScreen = window.innerWidth < 768;
return isMobileUA || isSmallScreen;
}
// Вспомогательная функция для получения CSRF токена (единая версия) // Вспомогательная функция для получения CSRF токена (единая версия)
function getCookie(name) { function getCookie(name) {
let cookieValue = null; let cookieValue = null;
@@ -3242,8 +3262,10 @@ renderProducts(); // Сначала пустая сетка
renderCart(); renderCart();
setupInfiniteScroll(); // Установка infinite scroll setupInfiniteScroll(); // Установка infinite scroll
// Установить фокус на строку поиска // Установить фокус на строку поиска только на десктопе
document.getElementById('searchInput').focus(); if (!isMobileDevice()) {
document.getElementById('searchInput').focus();
}
// ===== ОТЛОЖЕННЫЙ ЗАКАЗ ===== // ===== ОТЛОЖЕННЫЙ ЗАКАЗ =====
@@ -3305,7 +3327,7 @@ async function createDeferredOrder() {
if (result.success) { if (result.success) {
console.log(`✅ Заказ #${result.order_number} создан (черновик). ShowcaseItem зарезервированы.`); console.log(`✅ Заказ #${result.order_number} создан (черновик). ShowcaseItem зарезервированы.`);
// КРИТИЧНО: Очищаем корзину POS (включая витринные букеты) // КРИТИЧНО: Очищаем корзину POS (включая витринные <EFBFBD><EFBFBD>укеты)
cart.clear(); cart.clear();
renderCart(); renderCart();
saveCartToRedis(); // Сохраняем пустую корзину в Redis saveCartToRedis(); // Сохраняем пустую корзину в Redis