From da37dc67e79845e193ca440544f87eabec9d4526 Mon Sep 17 00:00:00 2001 From: Dao Duc Date: Tue, 30 Dec 2025 18:05:53 +0700 Subject: [PATCH] update 30/12 --- src/app/[slug]/page.tsx | 22 +- src/app/cart/page.tsx | 8 + src/app/send-cart/page.tsx | 8 + src/app/tin-tuc/page.tsx | 8 + src/components/cart/Home/index.tsx | 2 +- src/components/cart/Send/index.tsx | 10 +- .../product/Category/Banner/index.tsx | 19 + src/components/product/Category/FAQ/index.tsx | 35 + .../product/Category/Filter/index.tsx | 195 +++ .../product/Category/Paging/index.tsx | 17 + .../product/Category/Product/index.tsx | 136 ++ .../product/Category/Sort/index.tsx | 43 + .../product/Category/Static/index.tsx | 28 + src/components/product/Category/index.tsx | 1253 +---------------- .../product/ProductDetail/index.tsx | 7 +- src/lib/helpers.ts | 0 src/lib/resolveArticlePage.ts | 33 + src/lib/resolveProductPage.ts | 32 + src/lib/resolveSlug.ts | 0 src/lib/slugMap.ts | 84 +- 20 files changed, 621 insertions(+), 1319 deletions(-) create mode 100644 src/app/cart/page.tsx create mode 100644 src/app/send-cart/page.tsx create mode 100644 src/app/tin-tuc/page.tsx create mode 100644 src/components/product/Category/Banner/index.tsx create mode 100644 src/components/product/Category/FAQ/index.tsx create mode 100644 src/components/product/Category/Filter/index.tsx create mode 100644 src/components/product/Category/Paging/index.tsx create mode 100644 src/components/product/Category/Product/index.tsx create mode 100644 src/components/product/Category/Sort/index.tsx create mode 100644 src/components/product/Category/Static/index.tsx delete mode 100644 src/lib/helpers.ts create mode 100644 src/lib/resolveArticlePage.ts create mode 100644 src/lib/resolveProductPage.ts delete mode 100644 src/lib/resolveSlug.ts diff --git a/src/app/[slug]/page.tsx b/src/app/[slug]/page.tsx index bdb62b9..bf63a3c 100644 --- a/src/app/[slug]/page.tsx +++ b/src/app/[slug]/page.tsx @@ -1,43 +1,41 @@ +// src/app/[slug]/page.tsx import { notFound } from "next/navigation"; import { findBySlug } from "@/lib/slugMap"; import ProductCategory from "@/components/product/Category"; import ProductDetail from "@/components/product/ProductDetail"; -import ArticleHome from "@/components/article/Home"; import ArticleCategory from "@/components/article/Category"; import ArticleDetail from "@/components/article/ArticleDetail"; - +import ArticleHome from "@/components/article/Home"; export default async function SlugPage({ - params, + params, }: { - params: Promise<{ slug: string }>; + params: { slug: string }; }) { const { slug } = await params; - if (!slug) return notFound(); const result = findBySlug(slug); - if (!result) return notFound(); switch (result.type) { case "product_category": - return ; + return ; case "product_detail": - return ; + return ; case "article_home": - return ; + return ; case "article_category": - return ; + return ; case "article_detail": - return ; + return ; default: - return notFound(); + return notFound(); } } diff --git a/src/app/cart/page.tsx b/src/app/cart/page.tsx new file mode 100644 index 0000000..c934af4 --- /dev/null +++ b/src/app/cart/page.tsx @@ -0,0 +1,8 @@ + +import CartHome from "@/components/cart/Home"; + +export default function Home() { + return ( + + ) +} diff --git a/src/app/send-cart/page.tsx b/src/app/send-cart/page.tsx new file mode 100644 index 0000000..d41b313 --- /dev/null +++ b/src/app/send-cart/page.tsx @@ -0,0 +1,8 @@ + +import SendResult from "@/components/cart/Send"; + +export default function SendCartPage() { + return ( + + ) +} diff --git a/src/app/tin-tuc/page.tsx b/src/app/tin-tuc/page.tsx new file mode 100644 index 0000000..9b5a150 --- /dev/null +++ b/src/app/tin-tuc/page.tsx @@ -0,0 +1,8 @@ + +import ArticleHome from "@/components/article/Home"; + +export default function Home() { + return ( + + ) +} diff --git a/src/components/cart/Home/index.tsx b/src/components/cart/Home/index.tsx index 7a3b2cf..b111a0c 100644 --- a/src/components/cart/Home/index.tsx +++ b/src/components/cart/Home/index.tsx @@ -1,4 +1,4 @@ -export default function SendCart() { +export default function Home() { return(
diff --git a/src/components/cart/Send/index.tsx b/src/components/cart/Send/index.tsx index baa02a0..058c59f 100644 --- a/src/components/cart/Send/index.tsx +++ b/src/components/cart/Send/index.tsx @@ -3,11 +3,11 @@ export default function SendCart() {
send-cart

{" "} diff --git a/src/components/product/Category/Banner/index.tsx b/src/components/product/Category/Banner/index.tsx new file mode 100644 index 0000000..32e82a0 --- /dev/null +++ b/src/components/product/Category/Banner/index.tsx @@ -0,0 +1,19 @@ +export default function Banner() { + return ( +
+
+
+ + + +
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/product/Category/FAQ/index.tsx b/src/components/product/Category/FAQ/index.tsx new file mode 100644 index 0000000..5d4cfbf --- /dev/null +++ b/src/components/product/Category/FAQ/index.tsx @@ -0,0 +1,35 @@ +export default function FAQ() { + return ( +
+
+

+ Các câu hỏi thường gặp +

+

+ Nếu quý khách còn có bất kì câu hỏi nào cần hỗ trợ, vui lòng liên hệ với + chúng tôi qua các số hotline để được tư vấn và giải đáp nhanh chóng + nhất. +

+
+ +
+
+
+ ) +} \ No newline at end of file diff --git a/src/components/product/Category/Filter/index.tsx b/src/components/product/Category/Filter/index.tsx new file mode 100644 index 0000000..6bbd771 --- /dev/null +++ b/src/components/product/Category/Filter/index.tsx @@ -0,0 +1,195 @@ +export default function ProductFilter() { + return ( + <> +

+ Lọc sản phẩm +

+ +
+ + + + + + + + + + Bỏ bộ lọc (1) + +
+ + ) +} \ No newline at end of file diff --git a/src/components/product/Category/Paging/index.tsx b/src/components/product/Category/Paging/index.tsx new file mode 100644 index 0000000..9cd67d6 --- /dev/null +++ b/src/components/product/Category/Paging/index.tsx @@ -0,0 +1,17 @@ +export default function Paging() { + return ( +
+ +

+ {" "} + Hiển thị 1 - 24 trên tổng số 124 sản phẩm{" "} +

+
+ ) +} \ No newline at end of file diff --git a/src/components/product/Category/Product/index.tsx b/src/components/product/Category/Product/index.tsx new file mode 100644 index 0000000..7def72f --- /dev/null +++ b/src/components/product/Category/Product/index.tsx @@ -0,0 +1,136 @@ +export default function ProductList() { + return ( +
+
+ + + +
+
+ 52.000.000 đ + -10% +

22.000.000 đ

+
+ +

+ {" "} + Lorem ipsum dolor sit, amet consectetur adipisicing elit. + Suscipit quos obcaecati totam, atque vel{" "} +

+
+
+
+

+ + Sẵn hàng +

+ {/*

+ + Liên hệ +

*/} +

+ + Quà tặng +

+
+
+
+
+
+

+ [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX + 3060 12GB +

+
+
+

+ Giá bán: + + {" "} + 48.990.000 đ{" "} + + + {" "} + 52.000.000 đ{" "} + + + {" "} + -6%{" "} + +

+

+ Bảo hành: + Theo từng linh kiện +

+
+
+

+ + Thông số sản phẩm +

+
+
+ {" "} + CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 + THREAD{" "} +
+
+ {" "} + RAM: DDR4 16GB (1x16G) 3200 MHz{" "} +
+
+ {" "} + VGA: NVIDIA RTX 3060 12GB GDDR6{" "} +
+
+
+
+

+ + Khuyến mại hấp dẫn +

+
+
+ {" "} +

+ + + ⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà + Nội và Hồ Chí Minh) + + +

{" "} +
+
+

+ + + ⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h{" "} + + +

+
{" "} +
+

+ + + ⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc{" "} + + +

+
+
+
+
+
+
+
+

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán: 48.990.000 đ 52.000.000 đ -6%

Bảo hành:Theo từng linh kiện

Thông số sản phẩm

CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
RAM: DDR4 16GB (1x16G) 3200 MHz
VGA: NVIDIA RTX 3060 12GB GDDR6

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán: 48.990.000 đ 52.000.000 đ -6%

Bảo hành:Theo từng linh kiện

Thông số sản phẩm

CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
RAM: DDR4 16GB (1x16G) 3200 MHz
VGA: NVIDIA RTX 3060 12GB GDDR6

Khuyến mại hấp dẫn

⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà Nội và Hồ Chí Minh)

⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h

⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán: 48.990.000 đ 52.000.000 đ -6%

Bảo hành:Theo từng linh kiện

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán: 48.990.000 đ

Bảo hành:Theo từng linh kiện

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán: 48.990.000 đ 52.000.000 đ -6%

Bảo hành:Theo từng linh kiện

Thông số sản phẩm

CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
RAM: DDR4 16GB (1x16G) 3200 MHz
VGA: NVIDIA RTX 3060 12GB GDDR6

Khuyến mại hấp dẫn

⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà Nội và Hồ Chí Minh)

⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h

⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc

[Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX 3060 12GB

Giá bán: 48.990.000 đ 52.000.000 đ -6%

Bảo hành:Theo từng linh kiện

Thông số sản phẩm

CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 THREAD
RAM: DDR4 16GB (1x16G) 3200 MHz
VGA: NVIDIA RTX 3060 12GB GDDR6

Khuyến mại hấp dẫn

⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà Nội và Hồ Chí Minh)

⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h

⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc

+
+ ) +} \ No newline at end of file diff --git a/src/components/product/Category/Sort/index.tsx b/src/components/product/Category/Sort/index.tsx new file mode 100644 index 0000000..9141ede --- /dev/null +++ b/src/components/product/Category/Sort/index.tsx @@ -0,0 +1,43 @@ +export default function SortByCollection() { + return ( +
+

Tổng 124 sản phẩm

+ + +
+ ) +} \ No newline at end of file diff --git a/src/components/product/Category/Static/index.tsx b/src/components/product/Category/Static/index.tsx new file mode 100644 index 0000000..cee3524 --- /dev/null +++ b/src/components/product/Category/Static/index.tsx @@ -0,0 +1,28 @@ +export default function Static() { + return ( +
+
+

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus neque facere tenetur, harum maiores aperiam ratione veniam molestias error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel optio a!

+
+ +
+ + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/product/Category/index.tsx b/src/components/product/Category/index.tsx index 7d30654..0d02394 100644 --- a/src/components/product/Category/index.tsx +++ b/src/components/product/Category/index.tsx @@ -1,1243 +1,40 @@ +import ProductFilter from "./Filter"; +import Static from "./Static"; +import FAQ from "./FAQ"; +import Banner from "./Banner"; +import SortByCollection from "./Sort"; +import ProductList from "./Product"; +import Paging from "./Paging"; + export default function ProductCategory({ slug }: { slug: string }) { + return(

- {" "} - PC THIẾT KẾ ĐỒ HỌA 3D{" "} + PC THIẾT KẾ ĐỒ HỌA 3D

+
-

- {" "} - Lọc sản phẩm{" "} -

- {/* Danh muc */} - - {/* Khoảng giá */} - - {/* Thương hiệu */} - - {/* Attribute */} - - - Bỏ bộ lọc (7) - +
+
-
-
-
-
- - - -
-
-
-
-

Tổng 124 sản phẩm

- -
- {/* Products */} -
-
- - - -
-
- 52.000.000 đ - -10% -

22.000.000 đ

-
- -

- {" "} - Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Suscipit quos obcaecati totam, atque vel{" "} -

-
-
-
-

- - Sẵn hàng -

- {/*

- - Liên hệ -

*/} -

- - Quà tặng -

-
-
-
-
-
-

- [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX - 3060 12GB -

-
-
-

- Giá bán: - - {" "} - 48.990.000 đ{" "} - - - {" "} - 52.000.000 đ{" "} - - - {" "} - -6%{" "} - -

-

- Bảo hành: - Theo từng linh kiện -

-
-
-

- - Thông số sản phẩm -

-
-
- {" "} - CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 - THREAD{" "} -
-
- {" "} - RAM: DDR4 16GB (1x16G) 3200 MHz{" "} -
-
- {" "} - VGA: NVIDIA RTX 3060 12GB GDDR6{" "} -
-
-
-
-

- - Khuyến mại hấp dẫn -

-
-
- {" "} -

- - - ⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà - Nội và Hồ Chí Minh) - - -

{" "} -
-
-

- - - ⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h{" "} - - -

-
{" "} -
-

- - - ⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc{" "} - - -

-
-
-
-
-
-
-
-
- - - - -
-
-

- [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX - 3060 12GB -

-
-
-

- Giá bán: - - 48.990.000 đ - - - 52.000.000 đ - - - -6% - -

-

- Bảo hành: - Theo từng linh kiện -

-
-
-

- - Thông số sản phẩm -

-
-
- CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 - THREAD -
-
- RAM: DDR4 16GB (1x16G) 3200 MHz -
-
- VGA: NVIDIA RTX 3060 12GB GDDR6 -
-
-
-
-
-
-
-
- - - -
-
- 52.000.000 đ - -10% -

22.000.000 đ

-
- -

- Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Suscipit quos obcaecati totam, atque vel -

-
-
-
-

- - Liên hệ -

-

- - Quà tặng -

-
-
-
-
-
-

- [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX - 3060 12GB -

-
-
-

- Giá bán: - - 48.990.000 đ - - - 52.000.000 đ - - - -6% - -

-

- Bảo hành: - Theo từng linh kiện -

-
-
-

- - Thông số sản phẩm -

-
-
- CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 - THREAD -
-
- RAM: DDR4 16GB (1x16G) 3200 MHz -
-
- VGA: NVIDIA RTX 3060 12GB GDDR6 -
-
-
-
-

- - Khuyến mại hấp dẫn -

-
-
-

- - - ⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà - Nội và Hồ Chí Minh) - - -

-
-
-

- - - ⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h - - -

-
-
-

- - - ⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc - - -

-
-
-
-
-
-
-
-
- - - -
-
- 52.000.000 đ - -10% -

22.000.000 đ

-
- -

- Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Suscipit quos obcaecati totam, atque vel -

-
-
-
-

- - Sẵn hàng -

-
-
-
-
-
-

- [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX - 3060 12GB -

-
-
-

- Giá bán: - - 48.990.000 đ - - - 52.000.000 đ - - - -6% - -

-

- Bảo hành: - Theo từng linh kiện -

-
-
-
-
-
-
- - - - -
-
-

- [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX - 3060 12GB -

-
-
-

- Giá bán: - - 48.990.000 đ - -

-

- Bảo hành: - Theo từng linh kiện -

-
-
-
-
-
-
- - - -
-
- 52.000.000 đ - -10% -

22.000.000 đ

-
- -

- Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Suscipit quos obcaecati totam, atque vel -

-
-
-
-

- - Liên hệ -

-

- - Quà tặng -

-
-
-
-
-
-

- [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX - 3060 12GB -

-
-
-

- Giá bán: - - 48.990.000 đ - - - 52.000.000 đ - - - -6% - -

-

- Bảo hành: - Theo từng linh kiện -

-
-
-

- - Thông số sản phẩm -

-
-
- CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 - THREAD -
-
- RAM: DDR4 16GB (1x16G) 3200 MHz -
-
- VGA: NVIDIA RTX 3060 12GB GDDR6 -
-
-
-
-

- - Khuyến mại hấp dẫn -

-
-
-

- - - ⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà - Nội và Hồ Chí Minh) - - -

-
-
-

- - - ⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h - - -

-
-
-

- - - ⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc - - -

-
-
-
-
-
-
-
-
- - - -
-
- 52.000.000 đ - -10% -

22.000.000 đ

-
- -

- Lorem ipsum dolor sit, amet consectetur adipisicing elit. - Suscipit quos obcaecati totam, atque vel -

-
-
-
-

- - Sẵn hàng -

-

- - Quà tặng -

-
-
-
-
-
-

- [Tặng bàn phím] HHPC ULTRA 7 265K | 32GB DDR5 | NVIDIA RTX - 3060 12GB -

-
-
-

- Giá bán: - - 48.990.000 đ - - - 52.000.000 đ - - - -6% - -

-

- Bảo hành: - Theo từng linh kiện -

-
-
-

- - Thông số sản phẩm -

-
-
- CPU: INTEL CORE i5 13400F up 4.6GHz | 10 CORE | 16 - THREAD -
-
- RAM: DDR4 16GB (1x16G) 3200 MHz -
-
- VGA: NVIDIA RTX 3060 12GB GDDR6 -
-
-
-
-

- - Khuyến mại hấp dẫn -

-
-
-

- - - ⭐ Bảo Hành Tại Nơi Sử Dụng (Áp Dụng Nội Thành Hà - Nội và Hồ Chí Minh) - - -

-
-
-

- - - ⭐ Bảo Hành Siêu Tốc 1 Đổi 1 Trong 24h - - -

-
-
-

- - - ⭐ Miễn Phí 100% Vận Chuyển Toàn Quốc - - -

-
-
-
-
-
-
-
-
- {/* Xem them */} -
- -

- {" "} - Hiển thị 1 - 24 trên tổng số 124 sản phẩm{" "} -

+
+ + + + + + +
+ +
-
-
-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-

- {" "} - Lorem ipsum dolor, sit amet consectetur adipisicing elit. Delectus - neque facere tenetur, harum maiores aperiam ratione veniam molestias - error sunt nostrum deleniti, beatae est? Est ipsam dignissimos vel - optio a!{" "} -

-
-
- - -
-
-
-
- {/* Các câu hỏi thường gặp */} -
-
-

- {" "} - Các câu hỏi thường gặp{" "} -

-

- Nếu quý khách còn có bất kì câu hỏi nào cần hỗ trợ, vui lòng liên hệ với - chúng tôi qua các số hotline để được tư vấn và giải đáp nhanh chóng - nhất. -

-
-
-
-
-
-
+ +
) } \ No newline at end of file diff --git a/src/components/product/ProductDetail/index.tsx b/src/components/product/ProductDetail/index.tsx index 05e565d..33cd377 100644 --- a/src/components/product/ProductDetail/index.tsx +++ b/src/components/product/ProductDetail/index.tsx @@ -1,4 +1,9 @@ -export default function ProductDetail() { +type Props = { + slug: string; +}; + +export default async function ProductDetail({ slug }: Props) { + return ( <>
diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/lib/resolveArticlePage.ts b/src/lib/resolveArticlePage.ts new file mode 100644 index 0000000..5e54994 --- /dev/null +++ b/src/lib/resolveArticlePage.ts @@ -0,0 +1,33 @@ +// src/lib/articlePage.ts +import { categories } from "../data/categories"; + +export type ArticleResult = + | { type: "article_home"; data: any } + | { type: "article_category"; data: any } + | { type: "article_detail"; data: { slug: string } }; + +export function resolveArticlePage(slug: string): ArticleResult | null { + const url = "/" + slug; + + // HOME + if (url === "/tin-tuc") { + return { type: "article_home", data: null }; + } + + // CATEGORY + const cats = categories.article.all_category.article; + for (const parent of cats) { + if (parent.url === url) { + return { type: "article_category", data: parent }; + } + + for (const child of parent.children ?? []) { + if (child.url === url) { + return { type: "article_category", data: child }; + } + } + } + + // DETAIL + return { type: "article_detail", data: { slug } }; +} diff --git a/src/lib/resolveProductPage.ts b/src/lib/resolveProductPage.ts new file mode 100644 index 0000000..4dbb797 --- /dev/null +++ b/src/lib/resolveProductPage.ts @@ -0,0 +1,32 @@ +// hoanghapc/src/lib/productPage.ts +import { categories } from "../data/categories"; +import { productList } from "../data/product-list"; + +export type ProductResult = + | { type: "product_category"; data: any } + | { type: "product_detail"; data: any }; + +export function resolveProductPage(slug: string): ProductResult | null { + const url = "/" + slug; + + // CATEGORY + for (const parent of categories.product.all_category) { + if (parent.url === url) { + return { type: "product_category", data: parent }; + } + + for (const child of parent.children ?? []) { + if (child.url === url) { + return { type: "product_category", data: child }; + } + } + } + + // DETAIL + const product = productList.find(p => p.productUrl === url); + if (product) { + return { type: "product_detail", data: product }; + } + + return null; +} diff --git a/src/lib/resolveSlug.ts b/src/lib/resolveSlug.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/lib/slugMap.ts b/src/lib/slugMap.ts index edf78af..a3fd9c3 100644 --- a/src/lib/slugMap.ts +++ b/src/lib/slugMap.ts @@ -1,77 +1,17 @@ -// src/lib/slugMap.ts -import { categories } from "@/data/categories"; - -export type PageType = - | "article_home" - | "article_category" - | "article_detail" - | "product_category" - | "product_detail"; +import { resolveArticlePage } from "./resolveArticlePage"; +import { resolveProductPage } from "./resolveProductPage"; export type SlugResult = - | { type: "article_home" } - | { type: "article_category"; slug: string } - | { type: "article_detail"; slug: string } - | { type: "product_category"; slug: string } - | { type: "product_detail"; slug: string }; + | ReturnType + | ReturnType; -export function findBySlug(rawSlug: string): SlugResult { - const slug = normalizeSlug(rawSlug); - const url = "/" + slug; +export function findBySlug(slug?: string): SlugResult | null { + if (!slug) return null; - /* 1. ARTICLE HOME */ - if (url === "/tin-tuc") { - return { type: "article_home" }; - } + // PRODUCT + const product = resolveProductPage(slug); + if (product) return product; - /* 2. ARTICLE CATEGORY */ - const articleCats = categories.article.all_category.article; - for (const parent of articleCats) { - if (parent.url === url) { - return { type: "article_category", slug }; - } - - for (const child of parent.children ?? []) { - if (child.url === url) { - return { type: "article_category", slug }; - } - } - } - - /* 3. PRODUCT CATEGORY */ - const productCats = categories.product.all_category; - for (const cat of productCats) { - if (cat.url === url) { - return { type: "product_category", slug }; - } - - for (const child of cat.children ?? []) { - if (child.url === url) { - return { type: "product_category", slug }; - } - } - } - - /* 4. PRODUCT DETAIL */ - if (isProductDetailSlug(slug)) { - return { type: "product_detail", slug }; - } - - /* 5. ARTICLE DETAIL (fallback) */ - return { type: "article_detail", slug }; -} - -/* =============================== - * HELPERS - * =============================== */ -function normalizeSlug(slug: string) { - return slug.replace(/^\/+/, "").trim(); -} - -function isProductDetailSlug(slug: string) { - return ( - slug.startsWith("hhpc-") || - slug.startsWith("pc-") || - slug.startsWith("man-hinh-") - ); -} + // ARTICLE + return resolveArticlePage(slug); +} \ No newline at end of file