Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
VCCI-News
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Văn Hoàng
VCCI-News
Commits
3a744f98
Commit
3a744f98
authored
Nov 05, 2025
by
Phạm Quang Bảo
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'tumlumtumla' into 'develop'
Tumlumtumla See merge request
!11
parents
5ca290c8
b9ec0614
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
458 additions
and
459 deletions
+458
-459
page.tsx
src/app/(main)/(home)/page.tsx
+458
-459
No files found.
src/app/(main)/(home)/page.tsx
View file @
3a744f98
...
...
@@ -69,525 +69,524 @@ const Page = () => {
'/home/hoi-vien-tieu-bieu/UOB-logo_Vuong.jpeg.webp'
,
]
if
(
isLoadingNews
||
isLoadingCategory
||
isLoadingEvent
)
return
(
<
div
className=
"w-full h-[80vh] flex justify-center items-center"
>
return
(
isLoadingNews
||
isLoadingCategory
||
isLoadingEvent
?
(
<
div
className=
"
container
w-full h-[80vh] flex justify-center items-center"
>
<
Spinner
/>
</
div
>
)
return
(
<>
{
/* Banner */
}
<
Swiper
modules=
{
[
Autoplay
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
slidesPerView=
{
1
}
onSwiper=
{
(
s
)
=>
(
swiperRef
.
current
=
s
)
}
onSlideChange=
{
(
s
)
=>
setCurrentIndex
(
typeof
s
.
realIndex
===
'number'
?
s
.
realIndex
:
s
.
activeIndex
)
}
>
<
SwiperSlide
>
<
img
src=
"https://vcci-hcm.org.vn/wp-content/uploads/2025/10/1.1.-Hero-Banner-CEO-2025-Bi-Sai-Nam-2025-Nhe-2560x720-Px.jpg"
alt=
"Banner"
className=
"w-full h-[200px] sm:h-[300px] md:h-[400px] lg:h-[500px] object-cover"
/>
</
SwiperSlide
>
<
SwiperSlide
>
<
img
src=
"https://vcci-hcm.org.vn/wp-content/uploads/2022/07/Landscape-HCM_3-01.png"
alt=
"Banner"
className=
"w-full h-[200px] sm:h-[300px] md:h-[400px] lg:h-[500px] object-cover"
/>
</
SwiperSlide
>
</
Swiper
>
)
:
(
<>
{
/* Banner */
}
<
Swiper
modules=
{
[
Autoplay
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
slidesPerView=
{
1
}
onSwiper=
{
(
s
)
=>
(
swiperRef
.
current
=
s
)
}
onSlideChange=
{
(
s
)
=>
setCurrentIndex
(
typeof
s
.
realIndex
===
'number'
?
s
.
realIndex
:
s
.
activeIndex
)
}
>
<
SwiperSlide
>
<
img
src=
"https://vcci-hcm.org.vn/wp-content/uploads/2025/10/1.1.-Hero-Banner-CEO-2025-Bi-Sai-Nam-2025-Nhe-2560x720-Px.jpg"
alt=
"Banner"
className=
"w-full h-[200px] sm:h-[300px] md:h-[400px] lg:h-[500px] object-cover"
/>
</
SwiperSlide
>
<
SwiperSlide
>
<
img
src=
"https://vcci-hcm.org.vn/wp-content/uploads/2022/07/Landscape-HCM_3-01.png"
alt=
"Banner"
className=
"w-full h-[200px] sm:h-[300px] md:h-[400px] lg:h-[500px] object-cover"
/>
</
SwiperSlide
>
</
Swiper
>
<
div
className=
"container mx-auto px-3 sm:px-6 lg:px-10 space-y-12"
>
{
/* Featured News */
}
<
section
>
<
div
className=
"flex flex-col items-center py-8 text-center"
>
<
h1
className=
"text-app-blue text-[20px] sm:text-[24px] md:text-[28px] uppercase font-bold text-blue-900"
>
Tin Nổi Bật
</
h1
>
<
div
className=
"w-16 h-[3px] bg-blue-900 mt-2 rounded-full"
></
div
>
</
div
>
<
Swiper
modules=
{
[
Autoplay
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
breakpoints=
{
{
0
:
{
slidesPerView
:
1.1
,
spaceBetween
:
10
},
640
:
{
slidesPerView
:
2
,
spaceBetween
:
16
},
1024
:
{
slidesPerView
:
3
,
spaceBetween
:
24
},
}
}
className=
"pb-5"
>
{
rows
.
map
((
news
)
=>
(
<
SwiperSlide
key=
{
news
.
id
}
>
<
a
href=
{
`/${news.id}`
}
className=
"relative block bg-white rounded-xl shadow-md overflow-hidden hover:shadow-lg transition-shadow duration-300"
>
<
img
src=
{
`${BASE_URL.imageEndpoint}${news.thumbnail}`
}
alt=
{
news
.
title
}
className=
"w-full aspect-3/2 sm:h-56 md:h-64 object-cover"
/>
<
div
className=
"absolute bottom-0 left-0 right-0 h-20 md:h-24 bg-linear-to-t from-black/80 to-transparent flex items-center justify-center p-3"
>
<
p
className=
"text-white text-center font-semibold line-clamp-2 text-sm sm:text-base leading-snug"
>
{
news
.
title
}
</
p
>
</
div
>
</
a
>
</
SwiperSlide
>
))
}
</
Swiper
>
</
section
>
<
div
>
<
a
href=
"https://hardwaretools.com.vn/"
>
<
img
src=
"/home/Standard-Banner-1-2024.png.webp"
alt=
"banner"
/>
</
a
>
</
div
>
{
/* Tin tức + Liên kết nhanh */
}
<
section
className=
"flex flex-col lg:flex-row gap-5 pb-10 mb-0"
>
{
/* Left */
}
<
div
className=
"flex-1"
>
<
div
className=
"flex justify-between items-center"
>
<
a
href=
"/thong-tin-truyen-thong/tin-vcci/"
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-blue-900"
>
Tin tức
</
a
>
<
a
href=
"/thong-tin-truyen-thong/tin-vcci/"
className=
"text-blue-900 text-sm sm:text-base"
>
{
'>>'
}
</
a
>
<
div
className=
"container mx-auto px-3 sm:px-6 lg:px-10 space-y-12"
>
{
/* Featured News */
}
<
section
>
<
div
className=
"flex flex-col items-center py-8 text-center"
>
<
h1
className=
"text-app-blue text-[20px] sm:text-[24px] md:text-[28px] uppercase font-bold text-blue-900"
>
Tin Nổi Bật
</
h1
>
<
div
className=
"w-16 h-[3px] bg-blue-900 mt-2 rounded-full"
></
div
>
</
div
>
<
hr
className=
"border-blue-900 mb-4"
/>
<
div
className=
"flex flex-col md:flex-row gap-5"
>
{
newsData
?.
responseData
.
rows
.
slice
(
0
,
1
).
map
((
news
:
NewsAdminItem
)
=>
(
<
a
key=
{
news
.
id
}
href=
{
`${news.id}`
}
className=
"flex flex-col w-full md:w-1/2 min-h-[180px] sm:min-h-[220px] gap-3 mb-3 border border-gray-200 bg-white rounded-md p-3"
>
<
div
className=
"w-full aspect-3/2 overflow-hidden"
>
<
Swiper
modules=
{
[
Autoplay
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
breakpoints=
{
{
0
:
{
slidesPerView
:
1.1
,
spaceBetween
:
10
},
640
:
{
slidesPerView
:
2
,
spaceBetween
:
16
},
1024
:
{
slidesPerView
:
3
,
spaceBetween
:
24
},
}
}
className=
"pb-5"
>
{
rows
.
map
((
news
)
=>
(
<
SwiperSlide
key=
{
news
.
id
}
>
<
a
href=
{
`/${news.id}`
}
className=
"relative block bg-white rounded-xl shadow-md overflow-hidden hover:shadow-lg transition-shadow duration-300"
>
<
img
src=
{
`${BASE_URL.imageEndpoint}${news.thumbnail}`
}
alt=
{
news
.
title
}
className=
"w-full h-full object-cover"
onError=
{
(
e
)
=>
{
e
.
currentTarget
.
onerror
=
null
e
.
currentTarget
.
src
=
"/fallback.png"
}
}
className=
"w-full aspect-3/2 sm:h-56 md:h-64 object-cover"
/>
</
div
>
<
div
className=
"absolute bottom-0 left-0 right-0 h-20 md:h-24 bg-linear-to-t from-black/80 to-transparent flex items-center justify-center p-3"
>
<
p
className=
"text-white text-center font-semibold line-clamp-2 text-sm sm:text-base leading-snug"
>
{
news
.
title
}
</
p
>
</
div
>
</
a
>
</
SwiperSlide
>
))
}
</
Swiper
>
</
section
>
<
div
className=
"flex-1"
>
<
p
className=
"text-[#0056b3] font-bold text-xl line-clamp-2"
>
{
news
.
title
}
</
p
>
<
p
className=
"text-gray-500 text-sm my-1"
>
{
dayjs
(
news
.
release_at
).
format
(
'DD/MM/YYYY'
)
}
</
p
>
<
AppEditorContent
className=
"line-clamp-4"
value=
{
news
.
description
}
/>
</
div
>
<
div
>
<
a
href=
"https://hardwaretools.com.vn/"
>
<
img
src=
"/home/Standard-Banner-1-2024.png.webp"
alt=
"banner"
/>
</
a
>
</
div
>
{
/* Tin tức + Liên kết nhanh */
}
<
section
className=
"flex flex-col lg:flex-row gap-5 pb-10 mb-0"
>
{
/* Left */
}
<
div
className=
"flex-1"
>
<
div
className=
"flex justify-between items-center"
>
<
a
href=
"/thong-tin-truyen-thong/tin-vcci/"
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-blue-900"
>
Tin tức
</
a
>
))
}
<
a
href=
"/thong-tin-truyen-thong/tin-vcci/"
className=
"text-blue-900 text-sm sm:text-base"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-4"
/>
<
div
className=
"w-full md:w-1/2"
>
<
div
className=
"flex flex-wrap gap-2 sm:gap-3 mb-3"
>
<
button
className=
{
`flex-1 px-3 sm:px-4 py-2 rounded-md border text-sm transition-colors ${tab === 'all'
? 'border-blue-700 bg-blue-50 text-blue-800 font-semibold'
: 'border-gray-300 bg-white hover:bg-gray-50'
}`
}
onClick=
{
()
=>
setTab
(
'all'
)
}
<
div
className=
"flex flex-col md:flex-row gap-5"
>
{
newsData
?.
responseData
.
rows
.
slice
(
0
,
1
).
map
((
news
:
NewsAdminItem
)
=>
(
<
a
key=
{
news
.
id
}
href=
{
`${news.id}`
}
className=
"flex flex-col w-full md:w-1/2 min-h-[180px] sm:min-h-[220px] gap-3 mb-3 border border-gray-200 bg-white rounded-md p-3"
>
Tất cả
</
button
>
{
categoryData
?.
responseData
.
rows
.
slice
(
0
,
3
).
map
((
category
)
=>
(
<
div
className=
"w-full aspect-3/2 overflow-hidden"
>
<
img
src=
{
`${BASE_URL.imageEndpoint}${news.thumbnail}`
}
alt=
{
news
.
title
}
className=
"w-full h-full object-cover"
onError=
{
(
e
)
=>
{
e
.
currentTarget
.
onerror
=
null
e
.
currentTarget
.
src
=
"/fallback.png"
}
}
/>
</
div
>
<
div
className=
"flex-1"
>
<
p
className=
"text-[#0056b3] font-bold text-xl line-clamp-2"
>
{
news
.
title
}
</
p
>
<
p
className=
"text-gray-500 text-sm my-1"
>
{
dayjs
(
news
.
release_at
).
format
(
'DD/MM/YYYY'
)
}
</
p
>
<
AppEditorContent
className=
"line-clamp-4"
value=
{
news
.
description
}
/>
</
div
>
</
a
>
))
}
<
div
className=
"w-full md:w-1/2"
>
<
div
className=
"flex flex-wrap gap-2 sm:gap-3 mb-3"
>
<
button
key=
{
category
.
id
}
className=
{
`flex-1 px-3 sm:px-4 py-2 rounded-md border text-sm transition-colors ${category.name === tab
className=
{
`flex-1 px-3 sm:px-4 py-2 rounded-md border text-sm transition-colors ${tab === 'all'
? 'border-blue-700 bg-blue-50 text-blue-800 font-semibold'
: 'border-gray-300 bg-white hover:bg-gray-50'
}`
}
onClick=
{
()
=>
setTab
(
category
.
name
)
}
onClick=
{
()
=>
setTab
(
'all'
)
}
>
{
category
.
name
}
Tất cả
</
button
>
{
categoryData
?.
responseData
.
rows
.
slice
(
0
,
3
).
map
((
category
)
=>
(
<
button
key=
{
category
.
id
}
className=
{
`flex-1 px-3 sm:px-4 py-2 rounded-md border text-sm transition-colors ${category.name === tab
? 'border-blue-700 bg-blue-50 text-blue-800 font-semibold'
: 'border-gray-300 bg-white hover:bg-gray-50'
}`
}
onClick=
{
()
=>
setTab
(
category
.
name
)
}
>
{
category
.
name
}
</
button
>
))
}
</
div
>
{
filteredRows
.
slice
(
0
,
4
).
map
((
news
)
=>
(
<
CardNews
key=
{
news
.
id
}
news=
{
news
}
/>
))
}
</
div
>
{
filteredRows
.
slice
(
0
,
4
).
map
((
news
)
=>
(
<
CardNews
key=
{
news
.
id
}
news=
{
news
}
/>
))
}
</
div
>
</
div
>
</
div
>
{
/* Right */
}
<
aside
className=
"w-full lg:w-[30%]"
>
<
div
className=
"flex justify-between items-center"
>
<
h2
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-blue-900"
>
Liên kết nhanh
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 text-sm sm:text-base"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-4"
/>
<
div
className=
"space-y-2 text-blue-900 text-sm md:text-base pb-10"
>
<
div
>
<
a
href=
"https://vcci-hcm.org.vn/lien-ket-nhanh/cam-nang-huong-dan-dau-tu-kinh-doanh-tai-viet-nam-2023/"
>
🔗 Cẩm nang hướng dẫn đầu tư kinh doanh tại Việt Nam
{
/* Right */
}
<
aside
className=
"w-full lg:w-[30%]"
>
<
div
className=
"flex justify-between items-center"
>
<
h2
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-blue-900"
>
Liên kết nhanh
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 text-sm sm:text-base"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-4"
/>
<
div
className=
"space-y-2 text-blue-900 text-sm md:text-base pb-10"
>
<
div
>
<
a
href=
"https://vcci-hcm.org.vn/lien-ket-nhanh/cam-nang-huong-dan-dau-tu-kinh-doanh-tai-viet-nam-2023/"
>
🔗 Cẩm nang hướng dẫn đầu tư kinh doanh tại Việt Nam
</
a
>
</
div
>
<
div
>
<
a
href=
'https://vcci-hcm.org.vn/lien-ket-nhanh/doanh-nghiep-kien-nghi-ve-chinh-sach-va-phap-luat/'
>
🔗 Doanh nghiệp kiến nghị về chính sách và pháp luật
</
a
>
</
div
>
</
div
>
<
div
>
<
a
href=
'https://vcci-hcm.org.vn/lien-ket-nhanh/doanh-nghiep-kien-nghi-ve-chinh-sach-va-phap-luat/'
>
🔗 Doanh nghiệp kiến nghị về chính sách và pháp luật
<
a
href=
"https://hardwaretools.com.vn/"
>
<
img
src=
"/home/20-2048x1365.webp"
alt=
"banner"
/>
</
a
>
</
div
>
</
div
>
<
div
>
<
a
href=
"https://hardwaretools.com.vn/"
>
<
img
src=
"/home/20-2048x1365.webp"
alt=
"banner"
/>
</
a
>
</
div
>
</
aside
>
</
section
>
{
/* Sự kiện */
}
<
section
className=
"flex flex-col lg:flex-row gap-5 pb-10 mb-0"
>
<
div
className=
"flex-1 bg-blue-900 p-5"
>
<
div
className=
"flex justify-between items-center"
>
<
h2
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-[#e8c518]"
>
Sự kiện sắp diễn ra
</
h2
>
<
a
href=
"#"
className=
"text-[#e8c518] text-sm sm:text-base"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-[#e8c518] mb-4"
/>
<
div
className=
"flex flex-col md:flex-row gap-5"
>
{
eventData
?.
responseData
.
rows
.
slice
(
0
,
1
).
map
((
event
:
EventItem
)
=>
(
<
a
key=
{
event
.
id
}
href=
{
`${event.id}`
}
className=
"flex flex-col w-full md:w-1/2 min-h-[180px] sm:min-h-[220px] gap-3 mb-3 border border-gray-200 bg-white rounded-md p-3"
>
<
div
className=
"w-full aspect-3/2 overflow-hidden"
>
<
img
src=
{
`${BASE_URL.imageEndpoint}${event.image}`
}
alt=
{
event
.
name
}
className=
"w-full h-full object-cover"
onError=
{
(
e
)
=>
{
e
.
currentTarget
.
onerror
=
null
e
.
currentTarget
.
src
=
"/fallback.png"
}
}
/>
</
div
>
</
aside
>
</
section
>
<
div
className=
"flex-1"
>
<
p
className=
"text-[#0056b3] font-bold text-xl line-clamp-2"
>
{
event
.
name
}
</
p
>
<
p
className=
"text-gray-500 text-sm my-1"
>
{
dayjs
(
event
.
start_time
).
format
(
'DD/MM/YYYY'
)
}
</
p
>
<
AppEditorContent
className=
"line-clamp-3"
value=
{
event
.
description
}
/>
</
div
>
</
a
>
))
}
<
div
className=
"w-full md:w-1/2"
>
{
eventData
?.
responseData
.
rows
.
slice
(
0
,
4
).
map
((
event
)
=>
(
<
CardEvent
key=
{
event
.
id
}
event=
{
event
}
/>
))
}
</
div
>
</
div
>
</
div
>
<
div
className=
'bg-blue-900 w-full lg:w-[30%] p-5'
>
<
aside
>
{
/* Sự kiện */
}
<
section
className=
"flex flex-col lg:flex-row gap-5 pb-10 mb-0"
>
<
div
className=
"flex-1 bg-blue-900 p-5"
>
<
div
className=
"flex justify-between items-center"
>
<
h2
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-[#e8c518]"
>
Lịch sự kiện
Sự kiện sắp diễn ra
</
h2
>
<
a
href=
"#"
className=
"text-[#e8c518]
hover:underline
text-sm sm:text-base"
>
<
a
href=
"#"
className=
"text-[#e8c518] text-sm sm:text-base"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-[#e8c518] mb-4"
/>
<
EventCalendar
/>
</
aside
>
</
div
>
</
section
>
{
/* Cơ hội kinh doanh + Chính sách */
}
<
div
className=
'flex flex-col lg:flex-row gap-5 pb-10 mb-0'
>
<
div
className=
'flex flex-col flex-1'
>
<
div
>
<
a
href=
"https://vcci-hcm.org.vn/wp-content/uploads/2022/11/MEDIA-KIT_VCCI-HCM-2022-Final.pdf"
>
<
img
src=
"/home/Standard-Banner-1-2024.png.webp"
alt=
"banner"
/>
</
a
>
<
div
className=
"flex flex-col md:flex-row gap-5"
>
{
eventData
?.
responseData
.
rows
.
slice
(
0
,
1
).
map
((
event
:
EventItem
)
=>
(
<
a
key=
{
event
.
id
}
href=
{
`${event.id}`
}
className=
"flex flex-col w-full md:w-1/2 min-h-[180px] sm:min-h-[220px] gap-3 mb-3 border border-gray-200 bg-white rounded-md p-3"
>
<
div
className=
"w-full aspect-3/2 overflow-hidden"
>
<
img
src=
{
`${BASE_URL.imageEndpoint}${event.image}`
}
alt=
{
event
.
name
}
className=
"w-full h-full object-cover"
onError=
{
(
e
)
=>
{
e
.
currentTarget
.
onerror
=
null
e
.
currentTarget
.
src
=
"/fallback.png"
}
}
/>
</
div
>
<
div
className=
"flex-1"
>
<
p
className=
"text-[#0056b3] font-bold text-xl line-clamp-2"
>
{
event
.
name
}
</
p
>
<
p
className=
"text-gray-500 text-sm my-1"
>
{
dayjs
(
event
.
start_time
).
format
(
'DD/MM/YYYY'
)
}
</
p
>
<
AppEditorContent
className=
"line-clamp-3"
value=
{
event
.
description
}
/>
</
div
>
</
a
>
))
}
<
div
className=
"w-full md:w-1/2"
>
{
eventData
?.
responseData
.
rows
.
slice
(
0
,
4
).
map
((
event
)
=>
(
<
CardEvent
key=
{
event
.
id
}
event=
{
event
}
/>
))
}
</
div
>
</
div
>
</
div
>
<
section
className=
"flex flex-col md:flex-row gap-5 pt-8"
>
<
div
className=
"flex-1"
>
<
div
className=
'bg-blue-900 w-full lg:w-[30%] p-5'
>
<
aside
>
<
div
className=
"flex justify-between items-center"
>
<
a
href=
"/xuc-tien-thuong-mai/co-hoi-kinh-doanh/"
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-blue-900
"
>
Cơ hội kinh doanh
</
a
>
<
a
href=
"
/xuc-tien-thuong-mai/co-hoi-kinh-doanh/"
className=
"text-blue-900
text-sm sm:text-base"
>
<
h2
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-[#e8c518]
"
>
Lịch sự kiện
</
h2
>
<
a
href=
"
#"
className=
"text-[#e8c518] hover:underline
text-sm sm:text-base"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-4"
/>
<
div
className=
"pt-2"
>
{
newsData
?.
responseData
.
rows
.
slice
(
0
,
1
).
map
((
news
:
NewsAdminItem
)
=>
(
<
a
key=
{
news
.
id
}
href=
{
`${news.id}`
}
>
<
div
className=
"w-full aspect-3/2 relative overflow-hidden mb-5"
>
<
img
src=
{
`${BASE_URL.imageEndpoint}${news.thumbnail}`
}
alt=
{
news
.
title
}
className=
"w-full h-full object-cover"
/>
<
div
className=
"absolute bg-white opacity-80 bottom-5 left-5 right-5 p-5"
>
<
p
className=
"text-blue-900 font-semibold text-sm sm:text-base z-10 line-clamp-3"
>
{
news
.
title
}
</
p
>
<
hr
className=
"border-[#e8c518] mb-4"
/>
<
EventCalendar
/>
</
aside
>
</
div
>
</
section
>
{
/* Cơ hội kinh doanh + Chính sách */
}
<
div
className=
'flex flex-col lg:flex-row gap-5 pb-10 mb-0'
>
<
div
className=
'flex flex-col flex-1'
>
<
div
>
<
a
href=
"https://vcci-hcm.org.vn/wp-content/uploads/2022/11/MEDIA-KIT_VCCI-HCM-2022-Final.pdf"
>
<
img
src=
"/home/Standard-Banner-1-2024.png.webp"
alt=
"banner"
/>
</
a
>
</
div
>
<
section
className=
"flex flex-col md:flex-row gap-5 pt-8"
>
<
div
className=
"flex-1"
>
<
div
className=
"flex justify-between items-center"
>
<
a
href=
"/xuc-tien-thuong-mai/co-hoi-kinh-doanh/"
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-blue-900"
>
Cơ hội kinh doanh
</
a
>
<
a
href=
"/xuc-tien-thuong-mai/co-hoi-kinh-doanh/"
className=
"text-blue-900 text-sm sm:text-base"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-4"
/>
<
div
className=
"pt-2"
>
{
newsData
?.
responseData
.
rows
.
slice
(
0
,
1
).
map
((
news
:
NewsAdminItem
)
=>
(
<
a
key=
{
news
.
id
}
href=
{
`${news.id}`
}
>
<
div
className=
"w-full aspect-3/2 relative overflow-hidden mb-5"
>
<
img
src=
{
`${BASE_URL.imageEndpoint}${news.thumbnail}`
}
alt=
{
news
.
title
}
className=
"w-full h-full object-cover"
/>
<
div
className=
"absolute bg-white opacity-80 bottom-5 left-5 right-5 p-5"
>
<
p
className=
"text-blue-900 font-semibold text-sm sm:text-base z-10 line-clamp-3"
>
{
news
.
title
}
</
p
>
</
div
>
</
div
>
</
div
>
</
a
>
))
}
{
rows
.
slice
(
0
,
3
).
map
((
news
)
=>
(
<
CardNews
key=
{
news
.
id
}
news=
{
news
}
/>
))
}
</
div
>
</
div
>
<
div
className=
"flex-1"
>
<
div
className=
"flex justify-between items-center"
>
<
a
href=
"/thong-tin-truyen-thong/thong-tin-chinh-sach-va-phap-luat"
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-blue-900"
>
Chính sách
&
pháp luật
</
a
>
))
}
<
a
href=
"/thong-tin-truyen-thong/thong-tin-chinh-sach-va-phap-luat"
className=
"text-blue-900 text-sm sm:text-base"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-4"
/>
<
div
className=
"pt-2"
>
{
newsData
?.
responseData
.
rows
.
slice
(
0
,
1
).
map
((
news
:
NewsAdminItem
)
=>
(
<
a
key=
{
news
.
id
}
href=
{
`${news.id}`
}
>
<
div
className=
"w-full aspect-3/2 relative overflow-hidden mb-5"
>
<
img
src=
{
`${BASE_URL.imageEndpoint}${news.thumbnail}`
}
alt=
{
news
.
title
}
className=
"w-full h-full object-cover"
/>
<
div
className=
"absolute bg-white opacity-80 bottom-5 left-5 right-5 p-5"
>
<
p
className=
"text-blue-900 font-semibold text-sm sm:text-base z-10 line-clamp-3"
>
{
news
.
title
}
</
p
>
</
div
>
</
div
>
</
a
>
))
}
{
rows
.
slice
(
0
,
3
).
map
((
news
)
=>
(
<
CardNews
key=
{
news
.
id
}
news=
{
news
}
/>
))
}
{
rows
.
slice
(
0
,
3
).
map
((
news
)
=>
(
<
CardNews
key=
{
news
.
id
}
news=
{
news
}
/>
))
}
</
div
>
</
div
>
</
section
>
</
div
>
<
div
className=
'w-full lg:w-[30%] justify-center items-start flex'
>
<
a
href=
"https://smartgara.ecaraid.com/"
>
<
img
src=
"/home/eCarAid_web_banner_600x400.webp"
alt=
"banner"
/>
</
a
>
</
div
>
</
div
>
{
/* Hội viên tiêu biểu */
}
<
section
className=
"flex flex-col lg:flex-row gap-5 pb-10 mb-0"
>
{
/* left */
}
<
aside
className=
"w-full lg:w-1/3 flex-1 bg-[#e8c518] p-5"
>
<
div
className=
"flex justify-between items-center mb-3"
>
<
h2
className=
"text-xl font-bold uppercase text-blue-900"
>
Hội viên tiêu biểu
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 hover:underline text-sm font-medium"
>
{
'>>'
}
</
a
>
</
div
>
<
div
className=
"flex-1"
>
<
div
className=
"flex justify-between items-center"
>
<
a
href=
"/thong-tin-truyen-thong/thong-tin-chinh-sach-va-phap-luat"
className=
"text-[18px] sm:text-[20px] font-bold uppercase text-blue-900"
>
Chính sách
&
pháp luật
</
a
>
<
a
href=
"/thong-tin-truyen-thong/thong-tin-chinh-sach-va-phap-luat"
className=
"text-blue-900 text-sm sm:text-base"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-4"
/>
<
div
className=
"pt-2"
>
{
newsData
?.
responseData
.
rows
.
slice
(
0
,
1
).
map
((
news
:
NewsAdminItem
)
=>
(
<
a
key=
{
news
.
id
}
href=
{
`${news.id}`
}
>
<
div
className=
"w-full aspect-3/2 relative overflow-hidden mb-5"
>
<
hr
className=
"border-blue-900 mb-5"
/>
<
div
>
<
Swiper
modules=
{
[
Autoplay
,
Grid
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
grid=
{
{
rows
:
1
,
fill
:
'row'
}
}
slidesPerGroup=
{
3
}
breakpoints=
{
{
0
:
{
slidesPerView
:
2
,
spaceBetween
:
10
},
640
:
{
slidesPerView
:
3
,
spaceBetween
:
16
},
1024
:
{
slidesPerView
:
3
,
spaceBetween
:
24
},
}
}
className=
"partner-swiper"
>
{
hoivien
.
map
((
src
,
i
)
=>
(
<
SwiperSlide
key=
{
i
}
>
<
div
className=
"aspect-square flex justify-center items-center bg-white rounded-lg shadow"
>
<
img
src=
{
`${BASE_URL.imageEndpoint}${news.thumbnail}`
}
alt=
{
news
.
title
}
className=
"w-
full h-full object-cover
"
src=
{
src
}
alt=
{
`partner-${i}`
}
className=
"w-
3/4 h-3/4 object-contain
"
/>
<
div
className=
"absolute bg-white opacity-80 bottom-5 left-5 right-5 p-5"
>
<
p
className=
"text-blue-900 font-semibold text-sm sm:text-base z-10 line-clamp-3"
>
{
news
.
title
}
</
p
>
</
div
>
</
div
>
</
a
>
</
SwiperSlide
>
))
}
</
Swiper
>
</
div
>
</
aside
>
{
rows
.
slice
(
0
,
3
).
map
((
news
)
=>
(
<
CardNews
key=
{
news
.
id
}
news=
{
news
}
/>
{
/* right */
}
<
aside
className=
"w-full lg:w-[30%] py-5"
>
<
div
className=
"flex justify-between items-center mb-3"
>
<
h2
className=
"text-xl font-bold uppercase text-blue-900"
>
Kết nối hội viên
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 hover:underline text-sm font-medium"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-5"
/>
<
div
className=
"pb-10"
>
<
Swiper
modules=
{
[
Autoplay
,
Grid
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
grid=
{
{
rows
:
2
,
fill
:
'row'
}
}
slidesPerGroup=
{
3
}
breakpoints=
{
{
0
:
{
slidesPerView
:
2
,
spaceBetween
:
10
},
640
:
{
slidesPerView
:
3
,
spaceBetween
:
16
},
1024
:
{
slidesPerView
:
3
,
spaceBetween
:
24
},
}
}
className=
"partner-swiper"
>
{
images
.
map
((
src
,
i
)
=>
(
<
SwiperSlide
key=
{
i
}
>
<
div
className=
"aspect-square flex justify-center items-center bg-white rounded-lg shadow"
>
<
img
src=
{
src
}
alt=
{
`partner-${i}`
}
className=
"w-3/4 h-3/4 object-contain"
/>
</
div
>
</
SwiperSlide
>
))
}
</
div
>
</
Swiper
>
</
div
>
</
section
>
</
div
>
<
div
className=
'w-full lg:w-[30%] justify-center items-start flex'
>
<
a
href=
"https://smartgara.ecaraid.com/"
>
<
img
src=
"/home/eCarAid_web_banner_600x400.webp"
alt=
"banner"
/>
</
a
>
</
div
>
</
div
>
</
aside
>
</
section
>
{
/* Hội viên tiêu biểu */
}
<
section
className=
"flex flex-col lg:flex-row gap-5 pb-10 mb-0"
>
{
/* left */
}
<
aside
className=
"w-full lg:w-1/3 flex-1 bg-[#e8c518] p-5"
>
<
div
className=
"flex justify-between items-center mb-3"
>
<
h2
className=
"text-xl font-bold uppercase text-blue-900"
>
Hội viên tiêu biểu
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 hover:underline text-sm font-medium"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-5"
/>
<
div
>
<
Swiper
modules=
{
[
Autoplay
,
Grid
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
grid=
{
{
rows
:
1
,
fill
:
'row'
}
}
slidesPerGroup=
{
3
}
breakpoints=
{
{
0
:
{
slidesPerView
:
2
,
spaceBetween
:
10
},
640
:
{
slidesPerView
:
3
,
spaceBetween
:
16
},
1024
:
{
slidesPerView
:
3
,
spaceBetween
:
24
},
}
}
className=
"partner-swiper"
>
{
hoivien
.
map
((
src
,
i
)
=>
(
<
SwiperSlide
key=
{
i
}
>
<
div
className=
"aspect-square flex justify-center items-center bg-white rounded-lg shadow"
>
<
img
src=
{
src
}
alt=
{
`partner-${i}`
}
className=
"w-3/4 h-3/4 object-contain"
/>
</
div
>
</
SwiperSlide
>
))
}
</
Swiper
>
</
div
>
</
aside
>
{
/* right */
}
<
aside
className=
"w-full lg:w-[30%] py-5"
>
<
div
className=
"flex justify-between items-center mb-3"
>
<
h2
className=
"text-xl font-bold uppercase text-blue-900"
>
Kết nối hội viên
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 hover:underline text-sm font-medium"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-5"
/>
<
div
className=
"pb-10"
>
<
Swiper
modules=
{
[
Autoplay
,
Grid
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
grid=
{
{
rows
:
2
,
fill
:
'row'
}
}
slidesPerGroup=
{
3
}
breakpoints=
{
{
0
:
{
slidesPerView
:
2
,
spaceBetween
:
10
},
640
:
{
slidesPerView
:
3
,
spaceBetween
:
16
},
1024
:
{
slidesPerView
:
3
,
spaceBetween
:
24
},
}
}
className=
"partner-swiper"
>
{
images
.
map
((
src
,
i
)
=>
(
<
SwiperSlide
key=
{
i
}
>
<
div
className=
"aspect-square flex justify-center items-center bg-white rounded-lg shadow"
>
<
img
src=
{
src
}
alt=
{
`partner-${i}`
}
className=
"w-3/4 h-3/4 object-contain"
{
/* Video + đối tác */
}
<
section
className=
"flex flex-col lg:flex-row gap-5 pb-10"
>
{
/* left */
}
<
div
className=
"flex flex-col flex-1"
>
<
div
className=
"flex justify-between items-center mb-3"
>
<
h2
className=
"text-xl font-bold uppercase text-blue-900"
>
Video
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 hover:underline text-sm font-medium"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-5"
/>
<
div
className=
"flex flex-col md:flex-row gap-4 md:gap-6"
>
{
[
{
src
:
'https://www.youtube.com/embed/J0Iz0iGuAXY'
,
title
:
'VCCI-HCM 2024 IN REVIEW (ENGLISH VERSION)'
,
},
{
src
:
'https://www.youtube.com/embed/_OnnGWv2ehM'
,
title
:
'Hội nghị Hội viên VCCI - Gala Mừng Xuân Ất Tỵ 2025'
,
},
].
map
((
video
,
i
)
=>
(
<
div
key=
{
i
}
className=
"w-full md:w-1/2"
>
<
div
className=
"aspect-video rounded-lg overflow-hidden shadow"
>
<
iframe
className=
"w-full h-full font-bold"
src=
{
video
.
src
}
title=
{
video
.
title
}
frameBorder=
"0"
allow=
"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerPolicy=
"strict-origin-when-cross-origin"
allowFullScreen
/>
</
div
>
</
SwiperSlide
>
))
}
</
Swiper
>
</
div
>
</
aside
>
</
section
>
{
/* Video + đối tác */
}
<
section
className=
"flex flex-col lg:flex-row gap-5 pb-10"
>
{
/* left */
}
<
div
className=
"flex flex-col flex-1"
>
<
div
className=
"flex justify-between items-center mb-3"
>
<
h2
className=
"text-xl font-bold uppercase text-blue-900"
>
Video
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 hover:underline text-sm font-medium"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-5"
/>
<
div
className=
"flex flex-col md:flex-row gap-4 md:gap-6"
>
{
[
{
src
:
'https://www.youtube.com/embed/J0Iz0iGuAXY'
,
title
:
'VCCI-HCM 2024 IN REVIEW (ENGLISH VERSION)'
,
},
{
src
:
'https://www.youtube.com/embed/_OnnGWv2ehM'
,
title
:
'Hội nghị Hội viên VCCI - Gala Mừng Xuân Ất Tỵ 2025'
,
},
].
map
((
video
,
i
)
=>
(
<
div
key=
{
i
}
className=
"w-full md:w-1/2"
>
<
div
className=
"aspect-video rounded-lg overflow-hidden shadow"
>
<
iframe
className=
"w-full h-full font-bold"
src=
{
video
.
src
}
title=
{
video
.
title
}
frameBorder=
"0"
allow=
"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerPolicy=
"strict-origin-when-cross-origin"
allowFullScreen
/>
<
p
className=
"mt-2 text-sm text-gray-700 font-medium"
>
{
video
.
title
}
</
p
>
</
div
>
<
p
className=
"mt-2 text-sm text-gray-700 font-medium"
>
{
video
.
title
}
</
p
>
</
div
>
))
}
</
div
>
</
div
>
{
/* right */
}
<
aside
className=
"w-full lg:w-[30%]"
>
<
div
className=
"flex justify-between items-center mb-3"
>
<
h2
className=
"text-xl font-bold uppercase text-blue-900"
>
Đối tác
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 hover:underline text-sm font-medium"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-5"
/>
<
div
className=
"pb-10"
>
<
Swiper
modules=
{
[
Autoplay
,
Grid
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
grid=
{
{
rows
:
2
,
fill
:
'row'
}
}
slidesPerGroup=
{
3
}
breakpoints=
{
{
0
:
{
slidesPerView
:
2
,
spaceBetween
:
10
},
640
:
{
slidesPerView
:
3
,
spaceBetween
:
16
},
1024
:
{
slidesPerView
:
3
,
spaceBetween
:
24
},
}
}
className=
"partner-swiper"
>
{
images
.
map
((
src
,
i
)
=>
(
<
SwiperSlide
key=
{
i
}
>
<
div
className=
"aspect-square flex justify-center items-center bg-white rounded-lg shadow"
>
<
img
src=
{
src
}
alt=
{
`partner-${i}`
}
className=
"w-3/4 h-3/4 object-contain"
/>
</
div
>
</
SwiperSlide
>
))
}
</
Swiper
>
</
div
>
</
aside
>
</
section
>
</
div
>
</>
</
div
>
</
div
>
{
/* right */
}
<
aside
className=
"w-full lg:w-[30%]"
>
<
div
className=
"flex justify-between items-center mb-3"
>
<
h2
className=
"text-xl font-bold uppercase text-blue-900"
>
Đối tác
</
h2
>
<
a
href=
"#"
className=
"text-blue-900 hover:underline text-sm font-medium"
>
{
'>>'
}
</
a
>
</
div
>
<
hr
className=
"border-blue-900 mb-5"
/>
<
div
className=
"pb-10"
>
<
Swiper
modules=
{
[
Autoplay
,
Grid
]
}
autoplay=
{
{
delay
:
4000
,
disableOnInteraction
:
false
}
}
loop
grid=
{
{
rows
:
2
,
fill
:
'row'
}
}
slidesPerGroup=
{
3
}
breakpoints=
{
{
0
:
{
slidesPerView
:
2
,
spaceBetween
:
10
},
640
:
{
slidesPerView
:
3
,
spaceBetween
:
16
},
1024
:
{
slidesPerView
:
3
,
spaceBetween
:
24
},
}
}
className=
"partner-swiper"
>
{
images
.
map
((
src
,
i
)
=>
(
<
SwiperSlide
key=
{
i
}
>
<
div
className=
"aspect-square flex justify-center items-center bg-white rounded-lg shadow"
>
<
img
src=
{
src
}
alt=
{
`partner-${i}`
}
className=
"w-3/4 h-3/4 object-contain"
/>
</
div
>
</
SwiperSlide
>
))
}
</
Swiper
>
</
div
>
</
aside
>
</
section
>
</
div
>
</>
)
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment