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
7081e8df
Commit
7081e8df
authored
Nov 04, 2025
by
Vũ Đình Nguyên
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(page-representatives-employers): creat page-representatives employers
parent
8c3aefaa
Changes
27
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
357 additions
and
560 deletions
+357
-560
img-error.png
public/img-error.png
+0
-0
page.tsx
src/app/(main)/dai-dien-gioi-chu/chu-de/page.tsx
+2
-18
page.tsx
...oi-chu/chuc-nang-dai-dien-nguoi-su-dung-lao-dong/page.tsx
+43
-0
index.tsx
...p/(main)/dai-dien-gioi-chu/components/card-news/index.tsx
+4
-0
index.tsx
...(main)/dai-dien-gioi-chu/components/list-filter/index.tsx
+44
-31
page.tsx
src/app/(main)/dai-dien-gioi-chu/page.tsx
+15
-41
page.tsx
src/app/(main)/dai-dien-gioi-chu/tap-huan-nsdld/page.tsx
+2
-18
page.tsx
src/app/(main)/dai-dien-gioi-chu/tin-lien-quan/page.tsx
+4
-20
page.tsx
src/app/(main)/ho-so-thi-truong/page.tsx
+3
-25
page.tsx
src/app/(main)/hoat-dong/dao-tao/page.tsx
+2
-13
page.tsx
src/app/(main)/hoat-dong/page.tsx
+22
-0
page.tsx
src/app/(main)/hoat-dong/su-kien/page.tsx
+4
-13
page.tsx
src/app/(main)/hoi-vien/ket-noi-hoi-vien/page.tsx
+49
-40
page.tsx
src/app/(main)/hoi-vien/tin-hoi-vien/page.tsx
+7
-5
page.tsx
src/app/(main)/thong-tin-truyen-thong/an-pham/page.tsx
+2
-33
page.tsx
src/app/(main)/thong-tin-truyen-thong/chuyen-de/page.tsx
+5
-35
page.tsx
src/app/(main)/thong-tin-truyen-thong/page.tsx
+23
-0
page.tsx
...n-truyen-thong/thong-tin-chinh-sach-va-phap-luat/page.tsx
+5
-35
page.tsx
.../(main)/thong-tin-truyen-thong/thu-vien-tai-lieu/page.tsx
+5
-35
page.tsx
...p/(main)/thong-tin-truyen-thong/tin-doanh-nghiep/page.tsx
+5
-35
page.tsx
src/app/(main)/thong-tin-truyen-thong/tin-kinh-te/page.tsx
+4
-35
page.tsx
src/app/(main)/thong-tin-truyen-thong/tin-vcci/page.tsx
+7
-36
page.tsx
...app/(main)/xuc-tien-thuong-mai/co-hoi-kinh-doanh/page.tsx
+4
-23
page.tsx
...app/(main)/xuc-tien-thuong-mai/ho-tro-kinh-doanh/page.tsx
+3
-23
page.tsx
...(main)/xuc-tien-thuong-mai/moi-truong-kinh-doanh/page.tsx
+4
-23
page.tsx
src/app/(main)/xuc-tien-thuong-mai/page.tsx
+3
-23
categories.ts
src/constants/categories.ts
+86
-0
No files found.
public/img-error.png
0 → 100644
View file @
7081e8df
1.97 KB
src/app/(main)/dai-dien-gioi-chu/chu-de/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
{
PATHS
}
from
"@constants/paths"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
OWNER_REPRESENTATIVES_CATEGORIES
}
from
"@constants/categories"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
...
...
@@ -21,23 +21,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Chức năng Đại diện Người sử dụng lao động"
,
href
:
`${PATHS.ownerRepresentatives}`
,
},
{
title
:
"Sự kiện – Tập huấn NSDLĐ"
,
href
:
`${PATHS.ownerRepresentatives}/tap-huan-nsdld`
,
},
{
title
:
"Tin liên quan"
,
href
:
`${PATHS.ownerRepresentatives}/tin-lien-quan`
,
},
{
title
:
"Chủ đề"
,
href
:
`${PATHS.ownerRepresentatives}/chu-de`
},
]
}
/>
<
ListCategory
categories=
{
OWNER_REPRESENTATIVES_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
src/app/(main)/dai-dien-gioi-chu/chuc-nang-dai-dien-nguoi-su-dung-lao-dong/page.tsx
0 → 100644
View file @
7081e8df
// Core
import
Image
from
"next/image"
;
import
ListCategory
from
"../components/list-category"
;
import
{
OWNER_REPRESENTATIVES_CATEGORIES
}
from
"@constants/categories"
;
import
ListFilter
from
"../components/list-filter"
;
import
parse
from
"html-react-parser"
;
import
{
SAMPLE_HTML
}
from
"../lib/sampleHtml"
;
// ...existing code...
const
Page
:
React
.
FC
=
()
=>
{
return
(
<
div
className=
"min-h-screen w-full container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
OWNER_REPRESENTATIVES_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
<
main
className=
"lg:col-span-2 bg-white border rounded-md p-6"
>
<
div
className=
"p-7.5 prose tiptap"
>
{
parse
(
SAMPLE_HTML
)
}
</
div
>
</
main
>
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
ListFilter
/>
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
<
Image
src=
"/banner.webp"
alt=
"Quảng cáo"
fill
className=
"object-cover"
/>
</
div
>
</
div
>
</
aside
>
</
div
>
</
div
>
</
div
>
);
};
export
default
Page
;
src/app/(main)/dai-dien-gioi-chu/components/card-news/index.tsx
View file @
7081e8df
...
...
@@ -14,6 +14,10 @@ function NewsContent({ news }: { news: NewsItem }) {
src=
{
`${Links.imageEndpoint}${news.thumbnail}`
}
alt=
{
news
.
title
}
className=
"w-full sm:w-56 md:w-64 h-40 md:h-36 object-cover shrink-0"
onError=
{
(
e
)
=>
{
e
.
currentTarget
.
src
=
"/img-error.png"
}
}
/>
<
div
className=
"flex-1 min-w-0 pl-0 sm:pl-4"
>
...
...
src/app/(main)/dai-dien-gioi-chu/components/list-filter/index.tsx
View file @
7081e8df
"use client"
import
React
,
{
useState
}
from
'react'
import
React
,
{
useState
,
useEffect
}
from
'react'
import
{
Checkbox
}
from
'@/components/ui/checkbox'
import
{
Input
}
from
'@/components/ui/input'
import
{
Button
}
from
'@/components/ui/button'
type
Category
=
{
id
:
string
;
title
:
string
;
count
:
number
}
const
DEFAULT_CATEGORIES
:
Category
[]
=
[
{
id
:
'ceo'
,
title
:
'CEO'
,
count
:
4
},
{
id
:
'policy'
,
title
:
'Hỏi đáp về chính sách'
,
count
:
0
},
{
id
:
'biz'
,
title
:
'Tin Doanh Nghiệp'
,
count
:
9
},
{
id
:
'member'
,
title
:
'Tin Hội Viên'
,
count
:
17
},
{
id
:
'law'
,
title
:
'Văn bản Pháp luật sắp có hiệu lực'
,
count
:
30
},
]
export
const
ListFilter
:
React
.
FC
<
{
categories
?:
Category
[]
onSearch
?:
(
q
:
string
)
=>
void
onReset
?:
()
=>
void
}
>
=
({
categories
=
DEFAULT_CATEGORIES
,
onSearch
,
onReset
})
=>
{
}
>
=
({
categories
,
onSearch
,
onReset
})
=>
{
const
[
query
,
setQuery
]
=
useState
(
''
)
const
[
visibleCount
,
setVisibleCount
]
=
useState
(
5
)
const
[
selected
,
setSelected
]
=
useState
<
Record
<
string
,
boolean
>>
(()
=>
{
const
map
:
Record
<
string
,
boolean
>
=
{}
categories
.
forEach
((
c
)
=>
(
map
[
c
.
id
]
=
false
))
if
(
categories
&&
categories
.
length
)
{
categories
.
forEach
((
c
:
Category
)
=>
(
map
[
c
.
id
]
=
false
))
}
return
map
})
// Keep selected map in sync when categories prop changes.
// Defer setSelected to avoid calling setState synchronously inside the effect.
useEffect
(()
=>
{
const
timer
=
setTimeout
(()
=>
{
setSelected
((
prev
)
=>
{
const
map
:
Record
<
string
,
boolean
>
=
{}
if
(
categories
&&
categories
.
length
)
{
categories
.
forEach
((
c
:
Category
)
=>
(
map
[
c
.
id
]
=
!!
prev
[
c
.
id
]))
}
return
map
})
},
0
)
return
()
=>
clearTimeout
(
timer
)
},
[
categories
])
const
toggle
=
(
id
:
string
)
=>
setSelected
((
s
)
=>
({
...
s
,
[
id
]:
!
s
[
id
]
}))
return
(
...
...
@@ -47,18 +56,20 @@ export const ListFilter: React.FC<{
/>
</
div
>
<
div
className=
"flex flex-col gap-3 mb-6"
>
{
categories
.
slice
(
0
,
visibleCount
).
map
((
c
)
=>
(
<
label
key=
{
c
.
id
}
className=
"flex items-center gap-3"
>
<
Checkbox
checked=
{
!!
selected
[
c
.
id
]
}
onCheckedChange=
{
()
=>
toggle
(
c
.
id
)
}
/>
<
div
className=
"flex justify-between w-full items-center"
>
<
span
className=
"text-sm"
>
{
c
.
title
}
</
span
>
<
span
className=
"text-sm text-gray-400"
>
(
{
c
.
count
}
)
</
span
>
</
div
>
</
label
>
))
}
<
div
className=
"flex flex-col gap-3"
>
{
categories
&&
categories
.
length
>
0
?
(
categories
.
slice
(
0
,
visibleCount
).
map
((
c
)
=>
(
<
label
key=
{
c
.
id
}
className=
"flex items-center gap-3"
>
<
Checkbox
checked=
{
!!
selected
[
c
.
id
]
}
onCheckedChange=
{
()
=>
toggle
(
c
.
id
)
}
/>
<
div
className=
"flex justify-between w-full items-center"
>
<
span
className=
"text-sm"
>
{
c
.
title
}
</
span
>
<
span
className=
"text-sm text-gray-400"
>
(
{
c
.
count
}
)
</
span
>
</
div
>
</
label
>
))
)
:
null
}
<
div
className=
"mt-2 flex items-center gap-3"
>
{
categories
.
length
>
visibleCount
&&
(
{
(
categories
?.
length
??
0
)
>
visibleCount
&&
(
<
button
className=
"text-sm text-primary self-start"
onClick=
{
()
=>
setVisibleCount
((
v
)
=>
v
+
5
)
}
...
...
@@ -84,15 +95,17 @@ export const ListFilter: React.FC<{
</
Button
>
<
Button
className=
"flex-1 rounded-none font-medium text-lg text-white hover:bg-muted-foreground hover:outline-1 outline-primary hover:text-primary"
onClick=
{
()
=>
{
setQuery
(
''
)
// restore initial map
const
map
:
Record
<
string
,
boolean
>
=
{}
categories
.
forEach
((
c
)
=>
(
map
[
c
.
id
]
=
false
))
setSelected
(
map
)
setVisibleCount
(
5
)
onReset
?.()
}
}
onClick=
{
()
=>
{
setQuery
(
''
)
// restore initial map
const
map
:
Record
<
string
,
boolean
>
=
{}
if
(
categories
&&
categories
.
length
)
{
categories
.
forEach
((
c
)
=>
(
map
[
c
.
id
]
=
false
))
}
setSelected
(
map
)
setVisibleCount
(
5
)
onReset
?.()
}
}
>
Bỏ tìm
</
Button
>
...
...
src/app/(main)/dai-dien-gioi-chu/page.tsx
View file @
7081e8df
"use client"
// Core
import
Image
from
"next/image"
;
import
React
,
{
useEffect
}
from
'react'
import
{
useRouter
}
from
'next/navigation'
import
ListCategory
from
"./components/list-category"
;
import
ListFilter
from
"./components/list-filter"
;
import
parse
from
"html-react-parser"
;
import
{
SAMPLE_HTML
}
from
"./lib/sampleHtml"
;
import
{
PATHS
}
from
"@constants/paths"
;
const
Page
:
React
.
FC
=
()
=>
{
return
(
<
div
className=
"min-h-screen w-full container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Chức năng Đại diện Người sử dụng lao động"
,
href
:
`${PATHS.ownerRepresentatives}`
,
},
{
title
:
"Sự kiện – Tập huấn NSDLĐ"
,
href
:
`${PATHS.ownerRepresentatives}/tap-huan-nsdld`
,
},
{
title
:
"Tin liên quan"
,
href
:
`${PATHS.ownerRepresentatives}/tin-lien-quan`
,
},
{
title
:
"Chủ đề"
,
href
:
`${PATHS.ownerRepresentatives}/chu-de`
},
]
}
/>
import
{
OWNER_REPRESENTATIVES_CATEGORIES
}
from
"@constants/categories"
;
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
<
main
className=
"lg:col-span-2 bg-white border rounded-md p-6"
>
<
div
className=
"p-7.5 prose tiptap"
>
{
parse
(
SAMPLE_HTML
)
}
</
div
>
</
main
>
const
Page
=
()
=>
{
const
router
=
useRouter
()
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
ListFilter
/>
useEffect
(()
=>
{
const
firstHref
=
`
${
PATHS
.
ownerRepresentatives
}
/chuc-nang-dai-dien-nguoi-su-dung-lao-dong`
router
.
push
(
firstHref
)
},
[
router
])
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
<
Image
src=
"/banner.webp"
alt=
"Quảng cáo"
fill
className=
"object-cover"
/>
</
div
>
</
div
>
</
aside
>
</
div
>
return
(
<
div
className=
"min-h-screen w-full container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
OWNER_REPRESENTATIVES_CATEGORIES
}
/>
</
div
>
</
div
>
);
...
...
src/app/(main)/dai-dien-gioi-chu/tap-huan-nsdld/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
"@constants/path
s"
;
import
{
OWNER_REPRESENTATIVES_CATEGORIES
}
from
"@constants/categorie
s"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
...
...
@@ -21,23 +21,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Chức năng Đại diện Người sử dụng lao động"
,
href
:
`${PATHS.ownerRepresentatives}`
,
},
{
title
:
"Sự kiện – Tập huấn NSDLĐ"
,
href
:
`${PATHS.ownerRepresentatives}/tap-huan-nsdld`
,
},
{
title
:
"Tin liên quan"
,
href
:
`${PATHS.ownerRepresentatives}/tin-lien-quan`
,
},
{
title
:
"Chủ đề"
,
href
:
`${PATHS.ownerRepresentatives}/chu-de`
},
]
}
/>
<
ListCategory
categories=
{
OWNER_REPRESENTATIVES_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
src/app/(main)/dai-dien-gioi-chu/tin-lien-quan/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
{
OWNER_REPRESENTATIVES_CATEGORIES
}
from
"@constants/categories"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
...
...
@@ -21,23 +21,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Chức năng Đại diện Người sử dụng lao động"
,
href
:
`${PATHS.ownerRepresentatives}`
,
},
{
title
:
"Sự kiện – Tập huấn NSDLĐ"
,
href
:
`${PATHS.ownerRepresentatives}/tap-huan-nsdld`
,
},
{
title
:
"Tin liên quan"
,
href
:
`${PATHS.ownerRepresentatives}/tin-lien-quan`
,
},
{
title
:
"Chủ đề"
,
href
:
`${PATHS.ownerRepresentatives}/chu-de`
},
]
}
/>
<
ListCategory
categories=
{
OWNER_REPRESENTATIVES_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -60,10 +44,10 @@ export default function Page() {
</
main
>
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
aside
className=
"space-y-6
order-first lg:order-last
"
>
<
ListFilter
/>
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"bg-white border rounded-md overflow-hidden
hidden lg:block
"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
<
Image
src=
"/banner.webp"
...
...
src/app/(main)/ho-so-thi-truong/page.tsx
View file @
7081e8df
...
...
@@ -2,11 +2,8 @@
import
MapRegion
,
{
DEFAULT_REGIONS
}
from
"./components/map-region"
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
import
{
TRADE_PROMOTION_CATEGORIES
}
from
"@constants/categories"
;
// ...existing code...
export
default
function
Page
()
{
const
[
active
,
setActive
]
=
useState
<
string
|
null
>
(
DEFAULT_REGIONS
[
0
]?.
id
??
null
)
...
...
@@ -14,26 +11,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Hồ sơ thị trường"
,
href
:
`${PATHS.marketProfile}/`
,
},
{
title
:
"Môi trường kinh doanh"
,
href
:
`${PATHS.tradePromotion}/moi-truong-kinh-doanh`
,
},
{
title
:
"Cơ hội kinh doanh"
,
href
:
`${PATHS.tradePromotion}/co-hoi-kinh-doanh`
,
},
{
title
:
"Hỗ trợ kinh doanh"
,
href
:
`${PATHS.tradePromotion}/ho-tro-kinh-doanh`
,
},
]
}
/>
<
ListCategory
categories=
{
TRADE_PROMOTION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
src/app/(main)/hoat-dong/dao-tao/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
{
EVENT_CATEGORIES
}
from
"@constants/categories"
;
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
...
...
@@ -21,18 +21,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Sự kiện"
,
href
:
`${PATHS.event}/su-kien`
,
},
{
title
:
"Đào tạo"
,
href
:
`${PATHS.event}/dao-tao`
,
},
]
}
/>
<
ListCategory
categories=
{
EVENT_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
src/app/(main)/hoat-dong/page.tsx
0 → 100644
View file @
7081e8df
"use client"
;
import
React
,
{
useEffect
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
"@constants/paths"
;
import
{
EVENT_CATEGORIES
}
from
"@constants/categories"
;
import
{
useRouter
}
from
"next/navigation"
;
// ...existing code...
export
default
function
Page
()
{
const
router
=
useRouter
();
useEffect
(()
=>
{
const
firstHref
=
`
${
PATHS
.
event
}
/su-kien`
;
router
.
push
(
firstHref
);
},
[
router
]);
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
EVENT_CATEGORIES
}
/>
</
div
>
</
div
>
);
}
src/app/(main)/hoat-dong/su-kien/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
{
EVENT_CATEGORIES
}
from
"@constants/categories"
;
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
// ...existing code...
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
import
{
useGetNews
}
from
"@api/endpoints/news"
;
import
{
GetNewsResponseType
}
from
"@api/types/NewsPage.type"
;
export
default
function
Page
()
{
const
[
submitSearch
]
=
useState
(
""
);
const
[
page
,
setPage
]
=
useState
(
1
);
...
...
@@ -21,18 +23,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Sự kiện"
,
href
:
`${PATHS.event}/su-kien`
,
},
{
title
:
"Đào tạo"
,
href
:
`${PATHS.event}/dao-tao`
,
},
]
}
/>
<
ListCategory
categories=
{
EVENT_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
src/app/(main)/hoi-vien/ket-noi-hoi-vien/page.tsx
View file @
7081e8df
...
...
@@ -3,49 +3,58 @@ import React, { useState } from "react";
import
ListCategory
from
"./../components/list-category"
;
import
ListFilter
from
"./../components/list-filter"
;
import
CardNews
from
"./../components/card-news"
;
import
{
Pagination
}
from
'@components/base/pagination'
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
import
{
useGetNews
}
from
'@api/endpoints/news'
import
{
GetNewsResponseType
}
from
'@api/types/NewsPage.type'
import
{
useGetNews
}
from
"@api/endpoints/news"
;
import
{
GetNewsResponseType
}
from
"@api/types/NewsPage.type"
;
export
default
function
Page
()
{
const
[
submitSearch
]
=
useState
(
''
)
const
[
page
,
setPage
]
=
useState
(
1
)
const
[
submitSearch
]
=
useState
(
""
);
const
[
page
,
setPage
]
=
useState
(
1
);
const
pageSize
=
5
const
{
data
:
allData
,
isLoading
}
=
useGetNews
<
GetNewsResponseType
>
({
pageSize
:
String
(
pageSize
),
currentPage
:
String
(
page
),
filters
:
submitSearch
?
`title @=
${
submitSearch
}
`
:
undefined
,
})
return
(
<
div
className=
"min-h-screen container mx-auto pb-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
<
main
className=
"lg:col-span-2 bg-background"
>
<
div
className=
'pb-5 overflow-hidden'
>
{
allData
?.
responseData
.
rows
.
map
((
news
)
=>
(
<
CardNews
key=
{
news
.
id
}
news=
{
news
}
/>
))
}
const
pageSize
=
5
;
const
{
data
:
allData
,
isLoading
}
=
useGetNews
<
GetNewsResponseType
>
({
pageSize
:
String
(
pageSize
),
currentPage
:
String
(
page
),
filters
:
submitSearch
?
`title @=
${
submitSearch
}
`
:
undefined
,
});
return
(
<
div
className=
"min-h-screen container mx-auto pb-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
<
main
className=
"lg:col-span-2 bg-background"
>
<
div
className=
"pb-5 overflow-hidden"
>
{
allData
?.
responseData
.
rows
.
map
((
news
)
=>
(
<
CardNews
key=
{
news
.
id
}
news=
{
news
}
/>
))
}
<
div
className=
'w-full flex justify-center mt-4'
>
<
Pagination
current=
{
allData
?.
responseData
.
currentPage
??
page
}
total=
{
allData
?.
responseData
.
totalPages
??
1
}
onChange=
{
(
p
)
=>
setPage
(
p
)
}
/>
</
div
>
</
div
>
</
main
>
<
div
className=
"w-full flex justify-center mt-4"
>
<
Pagination
pageCount=
{
Number
(
allData
?.
responseData
.
totalPages
??
1
)
}
page=
{
Number
(
allData
?.
responseData
.
currentPage
??
page
)
}
onChangePage=
{
(
p
)
=>
setPage
(
p
)
}
onGoToPreviousPage=
{
()
=>
setPage
(
Math
.
max
(
1
,
page
-
1
))
}
onGoToNextPage=
{
()
=>
setPage
(
Math
.
min
(
Number
(
allData
?.
responseData
.
totalPages
??
1
),
page
+
1
)
)
}
/>
</
div
>
</
div
>
</
main
>
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
ListFilter
/>
</
aside
>
</
div
>
</
div
>
</
div
>
);
}
\ No newline at end of file
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
ListFilter
/>
</
aside
>
</
div
>
</
div
>
</
div
>
);
}
src/app/(main)/hoi-vien/tin-hoi-vien/page.tsx
View file @
7081e8df
...
...
@@ -31,11 +31,13 @@ export default function Page() {
))
}
<
div
className=
'w-full flex justify-center mt-4'
>
<
Pagination
current=
{
allData
?.
responseData
.
currentPage
??
page
}
total=
{
allData
?.
responseData
.
totalPages
??
1
}
onChange=
{
(
p
)
=>
setPage
(
p
)
}
/>
<
Pagination
pageCount=
{
Number
(
allData
?.
responseData
.
totalPages
??
1
)
}
page=
{
Number
(
allData
?.
responseData
.
currentPage
??
page
)
}
onChangePage=
{
(
p
)
=>
setPage
(
p
)
}
onGoToPreviousPage=
{
()
=>
setPage
(
Math
.
max
(
1
,
page
-
1
))
}
onGoToNextPage=
{
()
=>
setPage
(
Math
.
min
(
Number
(
allData
?.
responseData
.
totalPages
??
1
),
page
+
1
))
}
/>
</
div
>
</
div
>
</
main
>
...
...
src/app/(main)/thong-tin-truyen-thong/an-pham/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
{
MEDIA_INFORMATION_CATEGORIES
}
from
"@constants/categories"
;
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
...
...
@@ -21,38 +21,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Tin VCCI"
,
href
:
`${PATHS.mediaInformation}/tin-vcci`
,
},
{
title
:
"Tin kinh tế"
,
href
:
`${PATHS.mediaInformation}/tin-kinh-te`
,
},
{
title
:
"Tin doanh nghiệp"
,
href
:
`${PATHS.mediaInformation}/tin-doanh-nghiep`
,
},
{
title
:
"Chuyên đề"
,
href
:
`${PATHS.mediaInformation}/chuyen-de`
,
},
{
title
:
"Thông tin chính sách và pháp luật"
,
href
:
`${PATHS.mediaInformation}/thong-tin-chinh-sach-va-phap-luat`
,
},
{
title
:
"Ấn phẩm"
,
href
:
`${PATHS.mediaInformation}/an-pham`
,
},
{
title
:
"Thư viện tài liệu"
,
href
:
`${PATHS.mediaInformation}/thu-vien-tai-lieu`
,
},
]
}
/>
<
ListCategory
categories=
{
MEDIA_INFORMATION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
src/app/(main)/thong-tin-truyen-thong/chuyen-de/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
{
MEDIA_INFORMATION_CATEGORIES
}
from
"@constants/categories"
;
// ...existing code...
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
import
{
useGetNews
}
from
"@api/endpoints/news"
;
...
...
@@ -21,38 +22,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Tin VCCI"
,
href
:
`${PATHS.mediaInformation}/tin-vcci`
,
},
{
title
:
"Tin kinh tế"
,
href
:
`${PATHS.mediaInformation}/tin-kinh-te`
,
},
{
title
:
"Tin doanh nghiệp"
,
href
:
`${PATHS.mediaInformation}/tin-doanh-nghiep`
,
},
{
title
:
"Chuyên đề"
,
href
:
`${PATHS.mediaInformation}/chuyen-de`
,
},
{
title
:
"Thông tin chính sách và pháp luật"
,
href
:
`${PATHS.mediaInformation}/thong-tin-chinh-sach-va-phap-luat`
,
},
{
title
:
"Ấn phẩm"
,
href
:
`${PATHS.mediaInformation}/an-pham`
,
},
{
title
:
"Thư viện tài liệu"
,
href
:
`${PATHS.mediaInformation}/thu-vien-tai-lieu`
,
},
]
}
/>
<
ListCategory
categories=
{
MEDIA_INFORMATION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -76,7 +46,7 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
Even
tFilter
/>
<
Lis
tFilter
/>
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
...
...
src/app/(main)/thong-tin-truyen-thong/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useEffect
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
"@constants/paths"
;
import
{
MEDIA_INFORMATION_CATEGORIES
}
from
"@constants/categories"
;
import
{
useRouter
}
from
'next/navigation'
// ...existing code...
export
default
function
Page
()
{
const
router
=
useRouter
()
useEffect
(()
=>
{
const
firstHref
=
`
${
PATHS
.
mediaInformation
}
/tin-vcci`
router
.
push
(
firstHref
)
},
[
router
])
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
MEDIA_INFORMATION_CATEGORIES
}
/>
</
div
>
</
div
>
);
}
src/app/(main)/thong-tin-truyen-thong/thong-tin-chinh-sach-va-phap-luat/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
{
MEDIA_INFORMATION_CATEGORIES
}
from
"@constants/categories"
;
// ...existing code...
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
import
{
useGetNews
}
from
"@api/endpoints/news"
;
...
...
@@ -21,38 +22,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Tin VCCI"
,
href
:
`${PATHS.mediaInformation}/tin-vcci`
,
},
{
title
:
"Tin kinh tế"
,
href
:
`${PATHS.mediaInformation}/tin-kinh-te`
,
},
{
title
:
"Tin doanh nghiệp"
,
href
:
`${PATHS.mediaInformation}/tin-doanh-nghiep`
,
},
{
title
:
"Chuyên đề"
,
href
:
`${PATHS.mediaInformation}/chuyen-de`
,
},
{
title
:
"Thông tin chính sách và pháp luật"
,
href
:
`${PATHS.mediaInformation}/thong-tin-chinh-sach-va-phap-luat`
,
},
{
title
:
"Ấn phẩm"
,
href
:
`${PATHS.mediaInformation}/an-pham`
,
},
{
title
:
"Thư viện tài liệu"
,
href
:
`${PATHS.mediaInformation}/thu-vien-tai-lieu`
,
},
]
}
/>
<
ListCategory
categories=
{
MEDIA_INFORMATION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -76,7 +46,7 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
Even
tFilter
/>
<
Lis
tFilter
/>
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
...
...
src/app/(main)/thong-tin-truyen-thong/thu-vien-tai-lieu/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
{
MEDIA_INFORMATION_CATEGORIES
}
from
"@constants/categories"
;
// ...existing code...
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
Image
from
"next/image"
;
import
{
useGetNews
}
from
"@api/endpoints/news"
;
import
{
GetNewsResponseType
}
from
"@api/types/NewsPage.type"
;
...
...
@@ -21,38 +22,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Tin VCCI"
,
href
:
`${PATHS.mediaInformation}/tin-vcci`
,
},
{
title
:
"Tin kinh tế"
,
href
:
`${PATHS.mediaInformation}/tin-kinh-te`
,
},
{
title
:
"Tin doanh nghiệp"
,
href
:
`${PATHS.mediaInformation}/tin-doanh-nghiep`
,
},
{
title
:
"Chuyên đề"
,
href
:
`${PATHS.mediaInformation}/chuyen-de`
,
},
{
title
:
"Thông tin chính sách và pháp luật"
,
href
:
`${PATHS.mediaInformation}/thong-tin-chinh-sach-va-phap-luat`
,
},
{
title
:
"Ấn phẩm"
,
href
:
`${PATHS.mediaInformation}/an-pham`
,
},
{
title
:
"Thư viện tài liệu"
,
href
:
`${PATHS.mediaInformation}/thu-vien-tai-lieu`
,
},
]
}
/>
<
ListCategory
categories=
{
MEDIA_INFORMATION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -76,7 +46,7 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
Even
tFilter
/>
<
Lis
tFilter
/>
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
...
...
src/app/(main)/thong-tin-truyen-thong/tin-doanh-nghiep/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
{
MEDIA_INFORMATION_CATEGORIES
}
from
"@constants/categories"
;
// ...existing code...
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
...
...
@@ -21,38 +22,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Tin VCCI"
,
href
:
`${PATHS.mediaInformation}/tin-vcci`
,
},
{
title
:
"Tin kinh tế"
,
href
:
`${PATHS.mediaInformation}/tin-kinh-te`
,
},
{
title
:
"Tin doanh nghiệp"
,
href
:
`${PATHS.mediaInformation}/tin-doanh-nghiep`
,
},
{
title
:
"Chuyên đề"
,
href
:
`${PATHS.mediaInformation}/chuyen-de`
,
},
{
title
:
"Thông tin chính sách và pháp luật"
,
href
:
`${PATHS.mediaInformation}/thong-tin-chinh-sach-va-phap-luat`
,
},
{
title
:
"Ấn phẩm"
,
href
:
`${PATHS.mediaInformation}/an-pham`
,
},
{
title
:
"Thư viện tài liệu"
,
href
:
`${PATHS.mediaInformation}/thu-vien-tai-lieu`
,
},
]
}
/>
<
ListCategory
categories=
{
MEDIA_INFORMATION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -76,7 +46,7 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
Even
tFilter
/>
<
Lis
tFilter
/>
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
...
...
src/app/(main)/thong-tin-truyen-thong/tin-kinh-te/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
{
MEDIA_INFORMATION_CATEGORIES
}
from
"@constants/categories"
;
// ...existing code...
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
...
...
@@ -21,38 +21,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Tin VCCI"
,
href
:
`${PATHS.mediaInformation}/tin-vcci`
,
},
{
title
:
"Tin kinh tế"
,
href
:
`${PATHS.mediaInformation}/tin-kinh-te`
,
},
{
title
:
"Tin doanh nghiệp"
,
href
:
`${PATHS.mediaInformation}/tin-doanh-nghiep`
,
},
{
title
:
"Chuyên đề"
,
href
:
`${PATHS.mediaInformation}/chuyen-de`
,
},
{
title
:
"Thông tin chính sách và pháp luật"
,
href
:
`${PATHS.mediaInformation}/thong-tin-chinh-sach-va-phap-luat`
,
},
{
title
:
"Ấn phẩm"
,
href
:
`${PATHS.mediaInformation}/an-pham`
,
},
{
title
:
"Thư viện tài liệu"
,
href
:
`${PATHS.mediaInformation}/thu-vien-tai-lieu`
,
},
]
}
/>
<
ListCategory
categories=
{
MEDIA_INFORMATION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -76,7 +45,7 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
EventFilter
/>
{
/* <EventFilter /> */
}
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
...
...
src/app/(main)/thong-tin-truyen-thong/tin-vcci/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
'@constants/paths'
import
EventFilter
from
"@app/dai-dien-gioi-chu/components/event-filter"
;
import
{
MEDIA_INFORMATION_CATEGORIES
}
from
"@constants/categories"
;
// ...existing code...
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
EventCalendar
from
"@app/dai-dien-gioi-chu/components/event-calendar"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
import
{
useGetNews
}
from
"@api/endpoints/news"
;
...
...
@@ -21,38 +23,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Tin VCCI"
,
href
:
`${PATHS.mediaInformation}/tin-vcci`
,
},
{
title
:
"Tin kinh tế"
,
href
:
`${PATHS.mediaInformation}/tin-kinh-te`
,
},
{
title
:
"Tin doanh nghiệp"
,
href
:
`${PATHS.mediaInformation}/tin-doanh-nghiep`
,
},
{
title
:
"Chuyên đề"
,
href
:
`${PATHS.mediaInformation}/chuyen-de`
,
},
{
title
:
"Thông tin chính sách và pháp luật"
,
href
:
`${PATHS.mediaInformation}/thong-tin-chinh-sach-va-phap-luat`
,
},
{
title
:
"Ấn phẩm"
,
href
:
`${PATHS.mediaInformation}/an-pham`
,
},
{
title
:
"Thư viện tài liệu"
,
href
:
`${PATHS.mediaInformation}/thu-vien-tai-lieu`
,
},
]
}
/>
<
ListCategory
categories=
{
MEDIA_INFORMATION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -76,8 +47,8 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
Even
tFilter
/>
<
Lis
tFilter
/>
<
EventCalendar
/>
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
<
Image
...
...
src/app/(main)/xuc-tien-thuong-mai/co-hoi-kinh-doanh/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
"@constants/paths"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
{
TRADE_PROMOTION_CATEGORIES
}
from
"@constants/categories"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
EventCalendar
from
"@app/dai-dien-gioi-chu/components/event-calendar"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
import
{
useGetNews
}
from
"@api/endpoints/news"
;
...
...
@@ -21,26 +21,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Hồ sơ thị trường"
,
href
:
`${PATHS.marketProfile}/`
,
},
{
title
:
"Môi trường kinh doanh"
,
href
:
`${PATHS.tradePromotion}/moi-truong-kinh-doanh`
,
},
{
title
:
"Cơ hội kinh doanh"
,
href
:
`${PATHS.tradePromotion}/co-hoi-kinh-doanh`
,
},
{
title
:
"Hỗ trợ kinh doanh"
,
href
:
`${PATHS.tradePromotion}/ho-tro-kinh-doanh`
,
},
]
}
/>
<
ListCategory
categories=
{
TRADE_PROMOTION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -71,7 +52,7 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
ListFilte
r
/>
<
EventCalenda
r
/>
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
...
...
src/app/(main)/xuc-tien-thuong-mai/ho-tro-kinh-doanh/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
"@constants/paths"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
{
TRADE_PROMOTION_CATEGORIES
}
from
"@constants/categories"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
...
...
@@ -21,26 +20,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Hồ sơ thị trường"
,
href
:
`${PATHS.marketProfile}/`
,
},
{
title
:
"Môi trường kinh doanh"
,
href
:
`${PATHS.tradePromotion}/moi-truong-kinh-doanh`
,
},
{
title
:
"Cơ hội kinh doanh"
,
href
:
`${PATHS.tradePromotion}/co-hoi-kinh-doanh`
,
},
{
title
:
"Hỗ trợ kinh doanh"
,
href
:
`${PATHS.tradePromotion}/ho-tro-kinh-doanh`
,
},
]
}
/>
<
ListCategory
categories=
{
TRADE_PROMOTION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -71,7 +51,7 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
ListFilter
/>
{
/* <ListFilter /> */
}
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
...
...
src/app/(main)/xuc-tien-thuong-mai/moi-truong-kinh-doanh/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
"@constants/paths"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
{
TRADE_PROMOTION_CATEGORIES
}
from
"@constants/categories"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
import
EventCalendar
from
"@app/dai-dien-gioi-chu/components/event-calendar"
;
import
{
useGetNews
}
from
"@api/endpoints/news"
;
import
{
GetNewsResponseType
}
from
"@api/types/NewsPage.type"
;
export
default
function
Page
()
{
...
...
@@ -21,26 +21,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Hồ sơ thị trường"
,
href
:
`${PATHS.marketProfile}/`
,
},
{
title
:
"Môi trường kinh doanh"
,
href
:
`${PATHS.tradePromotion}/moi-truong-kinh-doanh`
,
},
{
title
:
"Cơ hội kinh doanh"
,
href
:
`${PATHS.tradePromotion}/co-hoi-kinh-doanh`
,
},
{
title
:
"Hỗ trợ kinh doanh"
,
href
:
`${PATHS.tradePromotion}/ho-tro-kinh-doanh`
,
},
]
}
/>
<
ListCategory
categories=
{
TRADE_PROMOTION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -71,7 +52,7 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
ListFilte
r
/>
<
EventCalenda
r
/>
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
...
...
src/app/(main)/xuc-tien-thuong-mai/page.tsx
View file @
7081e8df
"use client"
;
import
React
,
{
useState
}
from
"react"
;
import
ListCategory
from
"@app/dai-dien-gioi-chu/components/list-category"
;
import
{
PATHS
}
from
"@constants/paths"
;
import
ListFilter
from
"@app/dai-dien-gioi-chu/components/list-filter"
;
import
{
TRADE_PROMOTION_CATEGORIES
}
from
"@constants/categories"
;
import
NewsContent
from
"@app/dai-dien-gioi-chu/components/card-news"
;
import
{
Pagination
}
from
"@components/base/pagination"
;
import
Image
from
"next/image"
;
...
...
@@ -21,26 +20,7 @@ export default function Page() {
return
(
<
div
className=
"min-h-screen container mx-auto p-4"
>
<
div
className=
"w-full flex flex-col gap-5"
>
<
ListCategory
categories=
{
[
{
title
:
"Hồ sơ thị trường"
,
href
:
`${PATHS.marketProfile}/`
,
},
{
title
:
"Môi trường kinh doanh"
,
href
:
`${PATHS.tradePromotion}/moi-truong-kinh-doanh`
,
},
{
title
:
"Cơ hội kinh doanh"
,
href
:
`${PATHS.tradePromotion}/co-hoi-kinh-doanh`
,
},
{
title
:
"Hỗ trợ kinh doanh"
,
href
:
`${PATHS.tradePromotion}/ho-tro-kinh-doanh`
,
},
]
}
/>
<
ListCategory
categories=
{
TRADE_PROMOTION_CATEGORIES
}
/>
<
div
className=
"grid grid-cols-1 lg:grid-cols-3 gap-6"
>
{
/* Main content */
}
...
...
@@ -71,7 +51,7 @@ export default function Page() {
{
/* Sidebar */
}
<
aside
className=
"space-y-6"
>
<
ListFilter
/>
{
/* <ListFilter /> */
}
<
div
className=
"bg-white border rounded-md overflow-hidden"
>
<
div
className=
"w-full h-56 relative bg-gray-100"
>
...
...
src/constants/categories.ts
0 → 100644
View file @
7081e8df
import
{
PATHS
}
from
"@constants/paths"
;
export
const
TRADE_PROMOTION_CATEGORIES
=
[
{
title
:
"Hồ sơ thị trường"
,
href
:
`
${
PATHS
.
marketProfile
}
/`
,
},
{
title
:
"Môi trường kinh doanh"
,
href
:
`
${
PATHS
.
tradePromotion
}
/moi-truong-kinh-doanh`
,
},
{
title
:
"Cơ hội kinh doanh"
,
href
:
`
${
PATHS
.
tradePromotion
}
/co-hoi-kinh-doanh`
,
},
{
title
:
"Hỗ trợ kinh doanh"
,
href
:
`
${
PATHS
.
tradePromotion
}
/ho-tro-kinh-doanh`
,
},
];
export
const
OWNER_REPRESENTATIVES_CATEGORIES
=
[
{
title
:
"Chức năng Đại diện Người sử dụng lao động"
,
href
:
`
${
PATHS
.
ownerRepresentatives
}
/chuc-nang-dai-dien-nguoi-su-dung-lao-dong`
,
},
{
title
:
"Sự kiện – Tập huấn NSDLĐ"
,
href
:
`
${
PATHS
.
ownerRepresentatives
}
/tap-huan-nsdld`
,
},
{
title
:
"Tin liên quan"
,
href
:
`
${
PATHS
.
ownerRepresentatives
}
/tin-lien-quan`
,
},
{
title
:
"Chủ đề"
,
href
:
`
${
PATHS
.
ownerRepresentatives
}
/chu-de`
,
},
];
export
const
EVENT_CATEGORIES
=
[
{
title
:
"Sự kiện"
,
href
:
`
${
PATHS
.
event
}
/su-kien`
,
},
{
title
:
"Đào tạo"
,
href
:
`
${
PATHS
.
event
}
/dao-tao`
,
},
];
export
const
MEDIA_INFORMATION_CATEGORIES
=
[
{
title
:
"Tin VCCI"
,
href
:
`
${
PATHS
.
mediaInformation
}
/tin-vcci`
,
},
{
title
:
"Tin kinh tế"
,
href
:
`
${
PATHS
.
mediaInformation
}
/tin-kinh-te`
,
},
{
title
:
"Tin doanh nghiệp"
,
href
:
`
${
PATHS
.
mediaInformation
}
/tin-doanh-nghiep`
,
},
{
title
:
"Chuyên đề"
,
href
:
`
${
PATHS
.
mediaInformation
}
/chuyen-de`
,
},
{
title
:
"Thông tin chính sách và pháp luật"
,
href
:
`
${
PATHS
.
mediaInformation
}
/thong-tin-chinh-sach-va-phap-luat`
,
},
{
title
:
"Ấn phẩm"
,
href
:
`
${
PATHS
.
mediaInformation
}
/an-pham`
,
},
{
title
:
"Thư viện tài liệu"
,
href
:
`
${
PATHS
.
mediaInformation
}
/thu-vien-tai-lieu`
,
},
];
export
type
CategoryItem
=
{
title
:
string
;
href
:
string
;
};
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