[598][@ant] docs(marketplace): «Каталог витрины» — добавлен e2e скриншот пустого стенда
Существующая проза описывает функционал каталога; добавил один кадр с реальным состоянием на свежем стенде (фильтр «Все 0», плейсхолдер «Ничего не найдено», свежая пайщица Екатерина без баланса). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
// Сценарий: orderer-стол «Каталог витрины» (/market/catalog).
|
||||
// Снимаем пустое состояние каталога — на свежем стенде нет активных
|
||||
// предложений, виден заголовок, фильтр «Все 0», селектор «Свежие сначала»
|
||||
// и плейсхолдер «Ничего не найдено».
|
||||
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { cleanViteOverlays, env, loginAs } from '../../../lib/harness.mjs';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const loadFixture = (username) =>
|
||||
JSON.parse(
|
||||
fs.readFileSync(path.resolve(__dirname, `../../../state/participants/${username}.json`), 'utf8'),
|
||||
);
|
||||
|
||||
export const meta = {
|
||||
title: 'Стол заказчика — каталог витрины',
|
||||
docPath: 'new/marketplace/orderer/catalog.md',
|
||||
assetsDir: 'assets/new/marketplace/orderer/catalog',
|
||||
role: 'user',
|
||||
fixture: 'ekaterina',
|
||||
fixtures: ['ekaterina'],
|
||||
};
|
||||
|
||||
async function signAllAgreements(page) {
|
||||
for (let i = 0; i < 8; i++) {
|
||||
const clicked = await page.evaluate(() => {
|
||||
const portals = Array.from(document.querySelectorAll('[id^="q-portal--dialog--"]'))
|
||||
.filter((p) => getComputedStyle(p).display !== 'none');
|
||||
if (portals.length === 0) return false;
|
||||
const top = portals[portals.length - 1];
|
||||
const btn = Array.from(top.querySelectorAll('button'))
|
||||
.find((b) => b.textContent?.trim() === 'Подписать' && !b.disabled);
|
||||
if (!btn) return false;
|
||||
btn.scrollIntoView({ block: 'center', behavior: 'instant' });
|
||||
btn.click();
|
||||
return true;
|
||||
});
|
||||
if (!clicked) break;
|
||||
await page.waitForTimeout(3500);
|
||||
}
|
||||
}
|
||||
|
||||
export default async ({ page, shot }) => {
|
||||
const fixture = loadFixture('ekaterina');
|
||||
|
||||
await loginAs(page, fixture);
|
||||
await page.evaluate(() => localStorage.setItem('harness:noBranchOverlay', '1'));
|
||||
|
||||
await page.waitForFunction(
|
||||
() => !document.body.innerText.includes('Формируем документ'),
|
||||
{ timeout: 30000 },
|
||||
).catch(() => {});
|
||||
await page.waitForTimeout(1500);
|
||||
await signAllAgreements(page);
|
||||
await page.waitForLoadState('networkidle', { timeout: 15000 }).catch(() => {});
|
||||
|
||||
await page.goto(`${env.BASE_URL}/${env.COOPNAME}/market/catalog`, { waitUntil: 'domcontentloaded', timeout: 45000 });
|
||||
await page.waitForLoadState('networkidle', { timeout: 20000 }).catch(() => {});
|
||||
await page.waitForTimeout(3000);
|
||||
await cleanViteOverlays(page);
|
||||
await signAllAgreements(page);
|
||||
await page.waitForLoadState('networkidle', { timeout: 15000 }).catch(() => {});
|
||||
await page.waitForTimeout(1500);
|
||||
await cleanViteOverlays(page);
|
||||
|
||||
await shot(
|
||||
page,
|
||||
'01-catalog-empty',
|
||||
`Каталог витрины пайщицы Екатерины. URL: \`${page.url()}\`. Активных предложений нет.`,
|
||||
);
|
||||
};
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 54 KiB |
@@ -7,6 +7,10 @@ tags:
|
||||
|
||||
Каталог — главная страница Стола заказчика. Здесь пайщик видит **активные Предложения поставщиков**, отфильтрованные по кооперативным категориям, и собирает из них корзину Заказа.
|
||||
|
||||

|
||||
|
||||
На скриншоте — состояние каталога на свежем стенде до первой публикации Предложения: фильтр-чип «Все 0» (счётчик 0 — нет ни одного активного), сортировка по умолчанию «Свежие сначала», по центру placeholder «Ничего не найдено — в каталоге пока нет активных предложений». Левый сайдбар — «Стол пайщика» (Кошелёк, Удостоверение, Реквизиты, Документы, Платежи, Собрания, Контакты, Поддержка), снизу карточка с балансом «0,00 RUB Доступно».
|
||||
|
||||
## Что показывается
|
||||
|
||||
Каталог построен как лента карточек Предложений. Каждая карточка содержит:
|
||||
|
||||
Reference in New Issue
Block a user