Froza Offers Dashboard

Vue.js интерфейс для поиска предложений по артикулу

Цвета интерфейса: #BD2A2E, #3B3936, #B2BEBF, #889C9B, #486966

[[ error ]]

[[ errorTraceback ]]

Прокси (mobileproxy / JSON)

Формат: массив [{ "type": "http", "host": "...", "port": 16251, "login": "...", "pass": "...", "change_ip": "https://..." }] — как в экспорте mobileproxy.
[[ proxy.count ? ('Загружено: ' + proxy.count) : 'Сначала загрузите JSON' ]]
[[ proxy.active.label ]]

[[ proxy.message ]]

[[ proxy.error ]]

Обновление цен по файлу наличия

[[ batch.fileName ? ('Файл: ' + batch.fileName) : 'Загрузите выгрузку клиента с артикулами' ]]
По умолчанию: 1
Число = номер колонки, текст = поиск по названию, пусто = авто
Число = номер колонки, текст = поиск по названию, пусто = без фильтра бренда
Число = номер колонки, текст = поиск по названию, пусто = без фильтра направления
Можно несколько: через запятую, ; или перенос строки. Для сценария «только бренд» (например Volvo по колонке производителя) поле можно оставить пустым.
Во втором режиме исходная колонка цены не перезаписывается; в выгрузке добавляются «Цена Froza» и «Δ %», строки подсвечиваются по значению колонки бренда (один цвет на бренд).
Сначала прогрев сессии (капча один раз). На сервере — одна очередь; при большой параллельности остальные запросы уходят в таймаут 5 мин. Рекомендуется 1–2.
Если снять — при загрузке файла все позиции будут выключены, отметьте нужные вручную.
Обработано [[ batch.processedArticles ]] / [[ batch.totalArticles ]] (в очереди; всего строк: [[ batch.trackedRows.length ]])
# Артикул Бренд (файл) Цена в файле Цена Froza Δ % Новая цена Статус
[[ ti + 1 ]] [[ tr.article ]] [[ batchCell(tr.idx, batch.previewBrandCol) ]] [[ batchCell(tr.idx, batch.previewPriceCol) ]] [[ batch.marksByRowIndex[tr.idx].frozaDisplay ]] запрос… [[ batch.marksByRowIndex[tr.idx].diffPct > 0 ? '+' : '' ]][[ batch.marksByRowIndex[tr.idx].diffPct ]]% [[ batchCell(tr.idx, batch.previewPriceCol) ]] пропуск ожидание запрос ок нет цены [[ batch.rowErrorByIndex[tr.idx] || 'ошибка' ]]

Сверено с Froza (цена в файле не менялась): Обновлено цен: [[ batch.updatedCount ]], не найдено: [[ batch.notFoundCount ]], ошибок запроса: [[ batch.errorCount ]].

Таблица ниже обновляется по мере ответов сервера. Подсветка по бренду и колонки «Цена Froza» / «Δ %» в файле — в скачанном Excel.

[[ line.ts ]] · [[ line.message ]]
Артикул: [[ data.article ]]
Скидка: [[ data.discount_percent ]]%
Найдено предложений: [[ data.offers_count ]]
Ошибки JSON: [[ data.errors.length ]]
Топ поставщик: [[ sortedTop10Groups[0]?.representative?.supplier || '-' ]]

Ошибки запросов JSON ([[ data.errors.length ]])

[[ e.manufacturer ]] — [[ e.endpoint || '—' ]]
[[ e.error_type ]]: [[ e.error_message ]]
Полный URL: [[ e.full_url ]]
Статус-код: [[ e.status_code || '—' ]]
Ответ сервера (первые 800 символов):
[[ e.response_preview ]]
Response content (первые 800 байт, decoded):
[[ e.response_content_preview ]]
Traceback:
[[ e.traceback ]]

Топ-10 выгодных

Только оригинальные запчасти (original) с релевантностью артикула 100%. Клик по заголовку сортирует. Совпадающие строки сгруппированы.

# Артикул релевантность артикула Название Направление Производитель Поставщик Цена Наличие Срок

Нет строк для топ-10: нужны источник original и полное совпадение артикула с запросом (после нормализации пробелов и дефисов).

Все предложения

Вводите по одному направлению в строке (как пункты списка)
[[ directionFileName ? ('Файл: ' + directionFileName) : 'Можно комбинировать с ручным вводом' ]]

Первичный артикул: [[ primaryArticle ]] · Показано групп: [[ sortedOfferGroups.length ]] (строк без дублей: [[ filteredOffers.length ]], всего с сервера: [[ data.offers.length ]]) · клик по заголовку сортирует (релевантность артикула: чем выше %, тем ближе к запросу). Одинаковые артикул + название + производитель — в одной группе.

Артикул Релевантность артикула Название Направление Производитель Поставщик Ориг. цена Цена со скидкой Наличие Срок