From aca4103213fd0b1b875f52b14e982361e8862852 Mon Sep 17 00:00:00 2001 From: "nabijonovdavronbek619@gmail.com" Date: Tue, 3 Mar 2026 11:22:49 +0500 Subject: [PATCH] baza page complated --- app/[locale]/about/baza/page.tsx | 1 - components/pages/about/aboutDetail/baza.tsx | 74 ++----------------- .../pages/about/aboutDetail/normativeCard.tsx | 65 ++++++++++++++++ .../about/aboutDetail/sertificateCard.tsx | 4 +- lib/demoData.ts | 24 ++++++ messages/en.json | 58 ++++++++++----- messages/ru.json | 60 ++++++++++----- messages/uz.json | 58 ++++++++++----- 8 files changed, 222 insertions(+), 122 deletions(-) create mode 100644 components/pages/about/aboutDetail/normativeCard.tsx diff --git a/app/[locale]/about/baza/page.tsx b/app/[locale]/about/baza/page.tsx index 30aea75..b27f0b7 100644 --- a/app/[locale]/about/baza/page.tsx +++ b/app/[locale]/about/baza/page.tsx @@ -4,7 +4,6 @@ import { Statistics } from "@/components/pages/home"; export default function Baza() { return (
-
); diff --git a/components/pages/about/aboutDetail/baza.tsx b/components/pages/about/aboutDetail/baza.tsx index 195a263..72da01e 100644 --- a/components/pages/about/aboutDetail/baza.tsx +++ b/components/pages/about/aboutDetail/baza.tsx @@ -3,6 +3,7 @@ import { motion } from "framer-motion"; import { ShieldCheck, BookOpen, Flame } from "lucide-react"; import { useTranslations } from "next-intl"; +import { NormativeCard } from "./normativeCard"; const fadeUp = (delay = 0) => ({ initial: { opacity: 0, y: 36 }, @@ -42,29 +43,11 @@ export default function NormativBazaPage() { ]; return ( -
+
{/* ── Hero ── */} -
- {/* Background image */} - Normativ Baza - - {/* Layered gradient overlay — dark at bottom, semi at top */} -
- - {/* Subtle grain texture overlay */} -
- +
{/* Content */} -
+
{t("about.normativBaza.hero.title1")}
@@ -100,55 +83,12 @@ export default function NormativBazaPage() {
- {/* ── Cards section ── */} -
- {/* Section label */} - - Asosiy yo'nalishlar - {t("about.normativBaza.sectionLabel")} - - -
- {cards.map((card, i) => { - const Icon = card.icon; - return ( - - {/* Large number watermark */} - - {card.number} - - - {/* Icon */} -
- -
- - {/* Text */} -
-

- {card.title} -

-

- {card.text} -

-
-
- ); - })} -
-
+ {/* ── Bottom quote band ── */}

{t("about.normativBaza.bottomText")} diff --git a/components/pages/about/aboutDetail/normativeCard.tsx b/components/pages/about/aboutDetail/normativeCard.tsx new file mode 100644 index 0000000..9409b62 --- /dev/null +++ b/components/pages/about/aboutDetail/normativeCard.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { motion } from "framer-motion"; +import { useTranslations } from "next-intl"; +import { Award } from "lucide-react"; +import { normativeData } from "@/lib/demoData"; + +export function NormativeCard() { + const t = useTranslations(); + + return ( +

+ {normativeData.map((c, i) => ( + + {/* Meta + actions */} +
+
+ {/* Badge row */} +
+
+ + + {t("about.certificatePage.card.badge")} + +
+ + {c.category} + +
+ + {/* Title */} +

+ {t(c.titleKey)} +

+
+
+ + {/* Divider */} +
+ + {/* Documents list */} +
+
    + {c.documents.map((doc, di) => ( +
  • + +

    + {t(doc)} +

    +
  • + ))} +
+
+ + ))} +
+ ); +} \ No newline at end of file diff --git a/components/pages/about/aboutDetail/sertificateCard.tsx b/components/pages/about/aboutDetail/sertificateCard.tsx index ace26bf..e706cd4 100644 --- a/components/pages/about/aboutDetail/sertificateCard.tsx +++ b/components/pages/about/aboutDetail/sertificateCard.tsx @@ -14,7 +14,7 @@ export function CertCard({ c, i }: { c: (typeof certs)[0]; i: number }) { whileInView={{ opacity: 1, y: 0 }} transition={{ duration: 0.55, delay: i * 0.1 }} viewport={{ once: true }} - className="group flex flex-col rounded-2xl overflow-hidden p-5 bg-[#161514] border border-white/5 hover:border-red-600/20 transition-colors duration-300 w-full" + className="group flex flex-col rounded-2xl overflow-hidden sm:p-5 p-2 bg-[#161514] border border-white/5 hover:border-red-600/20 transition-colors duration-300 w-full" > {/* Right: meta + actions */}
@@ -40,7 +40,7 @@ export function CertCard({ c, i }: { c: (typeof certs)[0]; i: number }) {
{/* ── Divider ── */} -
+
{/* Collapsible document list */}
diff --git a/lib/demoData.ts b/lib/demoData.ts index 7191536..e3d989a 100644 --- a/lib/demoData.ts +++ b/lib/demoData.ts @@ -280,3 +280,27 @@ export const result = [ })), }, ]; + +export const normativeData = [ + { + titleKey: "certs.slt_blockfire.title", + category: "SLT BLOCKFIRE", + documents: [ + "certs.slt_blockfire.doc1", + "certs.slt_blockfire.doc2", + "certs.slt_blockfire.doc3", + "certs.slt_blockfire.doc4", + "certs.slt_blockfire.doc5", + "certs.slt_blockfire.doc6", + "certs.slt_blockfire.doc7", + "certs.slt_blockfire.doc8" + ] + }, + { + titleKey: "certs.slt_aqua.title", + category: "SLT AQUA", + documents: [ + "certs.slt_aqua.doc1" + ] + } +]; diff --git a/messages/en.json b/messages/en.json index 2d7dd4c..97f5b18 100644 --- a/messages/en.json +++ b/messages/en.json @@ -343,22 +343,6 @@ } } }, - "rasmlar": "Images", - "fotogalereya": "Photo Gallery", - "contactTitle": "Send us your phone number", - "contactSubTitle": "Our staff will contact you", - "enterPhone": "Enter your phone number", - "send": "Sent", - "error": "Error!", - "succes": "sent!", - "loadingError": "An error occurred while loading data", - "productsNotFound": "Products not found", - "subcategory_not_found": "Subcategory not found", - "section": "Section", - "clear_all": "Clear all", - "image_not_found": "Image not available", - "loading_error": "An error occurred while loading data", - "products_not_found": "Products not found", "priceModal": { "title": "Get Price", "product": { @@ -401,5 +385,45 @@ "category": "Categories", "catalog": "Section", "size": "Sizes" - } + }, + "certs": { + "slt_blockfire": { + "title": "Design and Installation of SLT BLOCKFIRE Plastic Pipes", + "doc1": "STO 22.21.29-015-17207509-2022, approved by Uzbekistan MES", + "doc2": "Fire resistance tests in FGBU VNIIPO Uzbekistan labs", + "doc3": "Certification test reports №14143/1 06.09.2018", + "doc4": "Fire resistance research reports 29.06.2022 and 11.01.2023", + "doc5": "Test protocols for SLT BLOCKFIRE pipes and fittings №2249/2.1-2022", + "doc6": "Test protocols for SLT BLOCKFIRE pipes and fittings №2683/2.1-2023", + "doc7": "Test protocols for SLT BLOCKFIRE pipes and fittings №134/18-07.2024/12-1/Д-3556", + "doc8": "Fire resistance tests for AUP-S-M №131/26-12.2023/12-1/Д-3190" + }, + "slt_aqua": { + "title": "SLT AQUA Automatic Fire Protection System", + "doc1": "STO 22.21.29-021-17207509-2023, approved by Uzbekistan MES" + } + }, + "aboutCerts": { + "certificatePage": { + "card": { + "badge": "certificate" + } + } + }, + "rasmlar": "Images", + "fotogalereya": "Photo Gallery", + "contactTitle": "Send us your phone number", + "contactSubTitle": "Our staff will contact you", + "enterPhone": "Enter your phone number", + "send": "Sent", + "error": "Error!", + "succes": "sent!", + "loadingError": "An error occurred while loading data", + "productsNotFound": "Products not found", + "subcategory_not_found": "Subcategory not found", + "section": "Section", + "clear_all": "Clear all", + "image_not_found": "Image not available", + "loading_error": "An error occurred while loading data", + "products_not_found": "Products not found" } diff --git a/messages/ru.json b/messages/ru.json index 01b6ec9..0f47511 100644 --- a/messages/ru.json +++ b/messages/ru.json @@ -343,23 +343,7 @@ } } }, - "rasmlar": "Изображения", - "fotogalereya": "Фотогалерея", - "contactTitle": "Отправьте нам свой номер", - "contactSubTitle": "Наши сотрудники свяжутся с вами", - "enterPhone": "Введите ваш номер телефона", - "send": "Отправить", - "error": "Ошибка!", - "succes": "Отправлено!", - "loadingError": "Произошла ошибка при загрузке данных", - "productsNotFound": "Товары не найдены", - "subcategory_not_found": "Подкатегория не найдена", - "section": "Раздел", - "clear_all": "Очистить всё", - "image_not_found": "Изображение отсутствует", - "loading_error": "Произошла ошибка при загрузке данных", - "products_not_found": "Товары не найдены", - "priceModal": { + "priceModal": { "title": "Узнать цену", "product": { "inStock": "В наличии" @@ -401,5 +385,45 @@ "category": "Категории", "catalog": "Раздел", "size": "Размеры" - } + }, + "certs": { + "slt_blockfire": { + "title": "Проектирование и монтаж пластиковых труб SLT BLOCKFIRE", + "doc1": "СТО 22.21.29-015-17207509-2022, утверждено МЧС Узбекистана", + "doc2": "Испытания на огнестойкость в лабораториях ФГБУ ВНИИПО Узбекистан", + "doc3": "Отчеты о сертификационных испытаниях №14143/1 06.09.2018", + "doc4": "Отчеты по исследованиям огнестойкости 29.06.2022 и 11.01.2023", + "doc5": "Протокол испытаний труб и фитингов SLT BLOCKFIRE №2249/2.1-2022", + "doc6": "Протокол испытаний труб и фитингов SLT BLOCKFIRE №2683/2.1-2023", + "doc7": "Протокол испытаний труб и фитингов SLT BLOCKFIRE №134/18-07.2024/12-1/Д-3556", + "doc8": "Протокол испытаний огнестойкости AUP-S-M №131/26-12.2023/12-1/Д-3190" + }, + "slt_aqua": { + "title": "Автоматическая противопожарная защита SLT AQUA", + "doc1": "СТО 22.21.29-021-17207509-2023, утверждено МЧС Узбекистана" + } + }, + "aboutCerts": { + "certificatePage": { + "card": { + "badge": "сертификат" + } + } + }, + "rasmlar": "Изображения", + "fotogalereya": "Фотогалерея", + "contactTitle": "Отправьте нам свой номер", + "contactSubTitle": "Наши сотрудники свяжутся с вами", + "enterPhone": "Введите ваш номер телефона", + "send": "Отправить", + "error": "Ошибка!", + "succes": "Отправлено!", + "loadingError": "Произошла ошибка при загрузке данных", + "productsNotFound": "Товары не найдены", + "subcategory_not_found": "Подкатегория не найдена", + "section": "Раздел", + "clear_all": "Очистить всё", + "image_not_found": "Изображение отсутствует", + "loading_error": "Произошла ошибка при загрузке данных", + "products_not_found": "Товары не найдены" } diff --git a/messages/uz.json b/messages/uz.json index 1ec2f0f..93f6559 100644 --- a/messages/uz.json +++ b/messages/uz.json @@ -343,22 +343,6 @@ } } }, - "rasmlar": "Rasmlar", - "fotogalereya": "Fotogalereya", - "contactTitle": "Bizga raqamingizni yuboring", - "contactSubTitle": "Xodimlarimiz siz bilan bog'lanishadi", - "enterPhone": "Telefon raqamingiz kiriting", - "send": "Yuborish", - "error": "Xatolik!", - "succes": "Yuborildi!", - "loadingError": "Ma'lumotlarni yuklashda xatolik yuz berdi", - "productsNotFound": "Mahsulotlar topilmadi", - "subcategory_not_found": "Subkategoriya topilmadi", - "section": "Bo'lim", - "clear_all": "Barchasini tozalash", - "image_not_found": "Rasm mavjud emas", - "loading_error": "Ma'lumotlarni yuklashda xatolik yuz berdi", - "products_not_found": "Mahsulotlar topilmadi", "priceModal": { "title": "Narxni bilish", "product": { @@ -401,5 +385,45 @@ "category": "Kategoriyalar", "catalog": "Bo'lim", "size": "O'lchamlar" - } + }, + "certs": { + "slt_blockfire": { + "title": "SLT BLOCKFIRE plastik quvurlarini loyihalash va o‘rnatish", + "doc1": "STO 22.21.29-015-17207509-2022, Moslashtirilgan O‘zbekiston MChS tomonidan", + "doc2": "O‘tga chidamlilik laboratoriya sinovlari FGBU VNIIPO O‘zbekiston", + "doc3": "Sertifikatsion sinov hisobotlari №14143/1 06.09.2018", + "doc4": "O‘tga chidamlilik tadqiqotlari hisobotlari 29.06.2022 va 11.01.2023", + "doc5": "SLT BLOCKFIRE quvurlari va fittinglar protokollari №2249/2.1-2022", + "doc6": "SLT BLOCKFIRE quvurlari va fittinglar protokollari №2683/2.1-2023", + "doc7": "SLT BLOCKFIRE quvurlari va fittinglar protokollari №134/18-07.2024/12-1/Д-3556", + "doc8": "O‘tga chidamlilik AUP-S-M sinovlari protokoli №131/26-12.2023/12-1/Д-3190" + }, + "slt_aqua": { + "title": "SLT AQUA avtomatik yong‘inga qarshi himoya tizimi", + "doc1": "STO 22.21.29-021-17207509-2023, O‘zbekiston MChS tomonidan tasdiqlangan" + } + }, + "aboutCerts": { + "certificatePage": { + "card": { + "badge": "sertifikat" + } + } + }, + "rasmlar": "Rasmlar", + "fotogalereya": "Fotogalereya", + "contactTitle": "Bizga raqamingizni yuboring", + "contactSubTitle": "Xodimlarimiz siz bilan bog'lanishadi", + "enterPhone": "Telefon raqamingiz kiriting", + "send": "Yuborish", + "error": "Xatolik!", + "succes": "Yuborildi!", + "loadingError": "Ma'lumotlarni yuklashda xatolik yuz berdi", + "productsNotFound": "Mahsulotlar topilmadi", + "subcategory_not_found": "Subkategoriya topilmadi", + "section": "Bo'lim", + "clear_all": "Barchasini tozalash", + "image_not_found": "Rasm mavjud emas", + "loading_error": "Ma'lumotlarni yuklashda xatolik yuz berdi", + "products_not_found": "Mahsulotlar topilmadi" }