Отзывы закупщиков о поставках оборудования
Плитки отзывов от отделов снабжения: в каждой карточке компания с отраслью, спецификация из трёх строк, текст отзыва и подпись с должностью.
<section class="vbozk">
<div class="vbozk-wrap">
<div class="vbozk-head">
<div class="vbozk-head__t">
<h2 class="vbozk-h2">Отзывы отделов снабжения</h2>
<p class="vbozk-lead">Собираем отзыв через месяц после поставки. В карточке указано, что закупали, каким объёмом и за сколько дней партия доехала до площадки.</p>
</div>
<ul class="vbozk-sum">
<li><b>214</b><span>компаний закупают у нас второй год подряд</span></li>
<li><b>96%</b><span>партий пришли в срок, указанный в спецификации</span></li>
</ul>
</div>
<div class="vbozk-grid" id="vbozk-grid"></div>
<div class="vbozk-more"><button type="button" class="vbozk-btn" id="vbozk-btn"></button></div>
</div>
</section>
<style>
.vbozk, .vbozk *, .vbozk *::before, .vbozk *::after { box-sizing: border-box; }
.vbozk {
--acc: #e0721f; --ink: #161c22; --muted: #5d6b78; --line: #dde3e9; --soft: #f3f6f9; --dark: #1a2128;
--f: var(--t-text-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Arial, sans-serif);
--fh: var(--t-headline-font, var(--f));
background: var(--soft); color: var(--ink); font-family: var(--f); padding: clamp(36px, 5vw, 80px) 20px;
}
.vbozk-wrap { max-width: 1220px; margin: 0 auto; padding: 0 clamp(0px, 2vw, 40px); }
.vbozk-head { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, .8fr); gap: clamp(20px, 3vw, 44px);
align-items: end; margin-bottom: clamp(24px, 3.2vw, 40px); }
.vbozk-h2 { font-family: var(--fh); font-size: clamp(25px, 3.3vw, 40px); line-height: 1.1; font-weight: 700; letter-spacing: -.02em; margin: 0 0 12px; }
.vbozk-lead { font-size: 16px; line-height: 1.6; color: var(--muted); margin: 0; max-width: 36em; }
.vbozk-sum { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 14px; }
.vbozk-sum li { border-top: 2px solid var(--acc); padding-top: 12px; }
.vbozk-sum b { display: block; font-family: var(--fh); font-size: 28px; line-height: 1; font-weight: 700; }
.vbozk-sum span { display: block; font-size: 12.5px; line-height: 1.5; color: var(--muted); margin-top: 7px; }
.vbozk-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(330px, 1fr)); gap: 14px; }
.vbozk-card { background: #fff; border: 1px solid var(--line); border-radius: 16px; padding: clamp(20px, 2.2vw, 26px); }
.vbozk-card__top { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
.vbozk-mark { flex: 0 0 44px; width: 44px; height: 44px; border-radius: 10px; background: var(--dark); color: var(--acc);
display: flex; align-items: center; justify-content: center; font-family: var(--fh); font-size: 14px; font-weight: 700; letter-spacing: .02em; }
.vbozk-card__n { font-family: var(--fh); font-size: 15.5px; font-weight: 600; line-height: 1.3; margin: 0; }
.vbozk-card__b { display: block; font-size: 12.5px; color: var(--muted); margin-top: 3px; }
.vbozk-spec { list-style: none; margin: 0 0 16px; padding: 0; border-top: 1px solid var(--line); }
.vbozk-spec li { display: flex; align-items: baseline; gap: 12px; padding: 9px 0; border-bottom: 1px solid var(--line); font-size: 13px; color: var(--muted); }
.vbozk-spec li b { margin-left: auto; font-size: 13.5px; font-weight: 600; color: var(--ink); text-align: right; }
.vbozk-card__txt { margin: 0 0 14px; font-size: 14.5px; line-height: 1.65; color: var(--muted); }
.vbozk-card__who { display: block; font-size: 12.5px; color: #93a1ad; border-left: 2px solid var(--acc); padding-left: 11px; line-height: 1.45; }
.vbozk-more { display: flex; justify-content: center; margin-top: 18px; }
.vbozk-btn { min-height: 54px; padding: 0 30px; border: 1.5px solid var(--line); margin: 0; appearance: none; font: inherit; font-size: 16px;
font-weight: 600; cursor: pointer; border-radius: 10px; background: #fff !important; color: var(--ink) !important; transition: .18s ease; }
.vbozk-btn:hover { border-color: var(--acc); color: var(--acc) !important; }
.vbozk-btn[hidden] { display: none; }
@media (max-width: 860px) { .vbozk-head { grid-template-columns: minmax(0, 1fr); align-items: start; } }
@media (prefers-reduced-motion: reduce) { .vbozk * { transition: none !important; } }
</style>
<script>
(function () {
/* ОТЗЫВЫ: компания, отрасль, закупка, объём, срок, текст, подпись */
var REVIEWS = [
{ c: 'Ремтехмаш', m: 'РТМ', b: 'Металлообработка', what: 'Компрессорная станция с ресиверами',
vol: '14 позиций', term: '4 дня', who: 'Сергей Ильин, начальник отдела снабжения',
t: 'Брали компрессор на замену старому, вместе с ним ушли ресиверы, осушитель и магистраль. Полный комплект собрали за один счёт, поэтому не пришлось согласовывать четыре закупки. Инженер приехал на пуск и показал мастеру, как снимать показания.' },
{ c: 'Северная логистика', m: 'СЛ', b: 'Склад и логистика', what: 'Паллетные стеллажи и техника комплектации',
vol: '212 секций', term: '11 дней', who: 'Марина Ковалёва, руководитель закупок',
t: 'Расширяли склад, нужно было закрыть 1 800 квадратных метров. Прислали расчёт по высоте потолков и весу поддона, добавили защиту стоек в проездах. Отгрузили тремя машинами по графику монтажа, простоя бригады не было.' },
{ c: 'Агрокомплект', m: 'АК', b: 'Пищевое производство', what: 'Насосное оборудование в нержавеющем исполнении',
vol: '9 насосов', term: '18 дней', who: 'Дмитрий Панов, главный инженер',
t: 'Требовалось исполнение с допуском к пищевым средам и документы для проверки. Подобрали по подаче и напору, паспорта и сертификаты пришли вместе с грузом. Один насос заменили по гарантии на третий месяц, подменный привезли за сутки.' },
{ c: 'Стройсервис 12', m: 'СС', b: 'Строительство', what: 'Сварочные полуавтоматы и расходные материалы',
vol: '24 аппарата', term: '2 дня', who: 'Артём Гусев, начальник участка',
t: 'Заказ ушёл в отгрузку в день оплаты, аппараты забрали своей машиной вечером. Проволоку и сопла добавили в ту же накладную, отдельный счёт выставлять не понадобилось. Работаем с отсрочкой 30 дней, задержек по документам не было.' },
{ c: 'Тепловые сети города', m: 'ТС', b: 'Жилищное хозяйство', what: 'Запасные части к насосным агрегатам',
vol: '340 позиций', term: '7 дней', who: 'Ольга Бекетова, специалист по закупкам',
t: 'Закупка шла по 44-ФЗ, поставщик готовил обоснование цены и техническое задание вместе с нами. Спецификация на 340 позиций собралась без пересогласований. Сроки по контракту выдержаны, приёмка прошла с первого раза.' },
{ c: 'Уральский литейный', m: 'УЛ', b: 'Металлургия', what: 'Кран-балка и таль электрическая',
vol: '3 комплекта', term: '26 дней', who: 'Игорь Савельев, механик цеха',
t: 'Пролёт нестандартный, поэтому ждали изготовление под размер. Расчёт нагрузки на перекрытие сделали до подписания спецификации, крепёж прислали в комплекте. Монтаж вели своими силами, по телефону подсказывали в тот же час.' }
];
var FIRST = 3;
var roots = document.querySelectorAll('.vbozk');
for (var i = 0; i < roots.length; i++) init(roots[i]);
function init(root) {
if (root.__vb) return; root.__vb = 1;
var grid = root.querySelector('#vbozk-grid'), btn = root.querySelector('#vbozk-btn');
var shown = FIRST;
function card(r) {
return '<article class="vbozk-card"><div class="vbozk-card__top"><span class="vbozk-mark">' + r.m + '<\/span>' +
'<div><h3 class="vbozk-card__n">' + r.c + '<\/h3><span class="vbozk-card__b">' + r.b + '<\/span><\/div><\/div>' +
'<ul class="vbozk-spec"><li>Что закупали<b>' + r.what + '<\/b><\/li>' +
'<li>Объём партии<b>' + r.vol + '<\/b><\/li>' +
'<li>Срок поставки<b>' + r.term + '<\/b><\/li><\/ul>' +
'<p class="vbozk-card__txt">' + r.t + '<\/p>' +
'<span class="vbozk-card__who">' + r.who + '<\/span><\/article>';
}
function render() {
var html = '';
for (var k = 0; k < shown && k < REVIEWS.length; k++) html += card(REVIEWS[k]);
grid.innerHTML = html;
var left = REVIEWS.length - shown;
btn.hidden = left <= 0;
btn.textContent = left > 0 ? 'Показать ещё ' + left : '';
}
btn.addEventListener('click', function () { shown = REVIEWS.length; render(); });
render();
}
})();
</script> Вставляется целиком в блок T123 «HTML-код». Внутри уже есть стили и скрипт, подключать ничего не нужно.
Как вставить блок в Tilda
- Скопируйте кодКнопка «Скопировать код» выше кладёт всё содержимое в буфер обмена.
- Добавьте блок T123В редакторе страницы: «Библиотека блоков» → «Другое» → T123 «HTML-код».
- Вставьте и сохранитеНажмите «Контент», вставьте код в поле, сохраните и обновите страницу.
- ОпубликуйтеВ превью скрипты Tilda работают не всегда — проверяйте на опубликованной странице.
Подробная инструкция с граблями — как вставить вайб-блок в Tilda.
Что менять под себя
| Где в коде | За что отвечает |
|---|---|
массив REVIEWS в начале скрипта | компании, отрасли, состав закупки, объёмы, сроки и тексты |
поле m у отзыва | две буквы в квадрате вместо логотипа |
переменная FIRST | сколько карточек видно до нажатия кнопки |
две цифры в списке vbozk-sum | сводные показатели в шапке блока |
текст vbozk-lead | пояснение, как и когда вы собираете отзывы |
Отзывы закупщиков: зачем он нужен
Отзыв от закупщика убеждает цифрами поставки, поэтому в карточке под названием компании стоит короткая таблица: что закупали, объём партии и срок поставки. Ниже идёт текст отзыва и подпись с должностью, потому что снабженец смотрит, кто именно оставил отзыв. Слева от названия компании стоит квадрат с двумя буквами, он заменяет логотип и не требует загрузки картинок.
Отзывы лежат в массиве REVIEWS в начале скрипта, первыми показываются три карточки, остальные раскрываются кнопкой с числом оставшихся. В шапке блока стоят две сводные цифры: сколько компаний работают по договору не первый год и какая доля партий пришла в срок. Сетка собрана на auto-fit с минимальной шириной карточки 330 пикселей, на телефоне карточки идут в одну колонку.
Вопросы по этому блоку
-
Поставьте FIRST равным длине массива REVIEWS или просто большому числу. Кнопка скроется сама, потому что скрипт прячет её, когда показывать нечего.
-
Да. Впишите новое поле в объекты REVIEWS и добавьте строку li в функцию card рядом с остальными. Оформление списка подхватит её без правок.
-
Замените квадрат vbozk-mark на тег img со встроенной картинкой в виде строки данных. Внешние адреса лучше не использовать: блок должен работать без загрузок со стороны.
-
Да. Код на этой странице копируется целиком, без регистрации и подписки. Указывать авторство не нужно, использовать можно в коммерческих проектах.
-
Нет. Все классы внутри имеют собственный префикс vbozk, поэтому не пересекаются ни со стилями Tilda, ни с другими блоками. Скрипт привязан к своему элементу и запускается один раз, даже если блок вставлен дважды.
-
Раскладка перестраивается под узкие экраны, размеры заданы через clamp, поля ввода имеют шрифт 16 пикселей — iOS не будет зумить страницу при фокусе. Отдельной мобильной версии подключать не нужно.
Другие блоки отзывов
Ещё блоки для поставок оборудования
Собрать сайт целиком, а не по блокам
Дровосеки делают сайты на Tilda под ключ: структура, тексты, дизайн, вёрстка и вайб-блоки под задачи бизнеса.