diff --git a/src/components/Header/components/SidebarNav/index.tsx b/src/components/Header/components/SidebarNav/index.tsx
index 54d1b4c..49ff157 100755
--- a/src/components/Header/components/SidebarNav/index.tsx
+++ b/src/components/Header/components/SidebarNav/index.tsx
@@ -1,5 +1,6 @@
import Show from '@/components/Show';
import { Cate } from '@/types/app/cate';
+import { getCateNavHref, getCateNavRel, getCateNavTarget } from '@/utils/cateNav';
import Link from 'next/link';
import { IoIosArrowDown } from 'react-icons/io';
import { motion, AnimatePresence } from 'framer-motion';
@@ -22,7 +23,7 @@ export default ({ list, open, onClose }: Props) => {
{one.type === 'cate' && (
-
+
{one.icon} {one.name}
@@ -33,7 +34,7 @@ export default ({ list, open, onClose }: Props) => {
{one.children?.map((two) => (
-
-
+
{two.name}
@@ -43,9 +44,32 @@ export default ({ list, open, onClose }: Props) => {
)}
+ {one.type === 'page' && (
+
+
+ {one.icon} {one.name}
+
+
+
+
+
+
+
+ {one.children?.map((two) => (
+ -
+
+ {two.icon} {two.name}
+
+
+ ))}
+
+
+
+ )}
+
{one.type === 'nav' && (
-
+
{one.icon} {one.name}
@@ -56,7 +80,7 @@ export default ({ list, open, onClose }: Props) => {
{one.children?.map((two) => (
-
-
+
{two.icon} {two.name}
diff --git a/src/components/Header/index.tsx b/src/components/Header/index.tsx
index fece2c0..4bb286c 100755
--- a/src/components/Header/index.tsx
+++ b/src/components/Header/index.tsx
@@ -14,6 +14,7 @@ import { BsFillMoonStarsFill, BsTextIndentLeft } from 'react-icons/bs';
import { Cate } from '@/types/app/cate';
import { getCateListAPI } from '@/api/cate';
+import { getCateNavHref, getCateNavRel, getCateNavTarget } from '@/utils/cateNav';
import { useConfigStore } from '@/stores';
@@ -107,7 +108,7 @@ export default () => {
{/* 渲染分类 */}
{one.type === 'cate' && (
-
-
+
{one.icon} {one.name}
@@ -122,7 +123,7 @@ export default () => {
className="opacity-0 -translate-x-2 group-hover/one:opacity-100 group-hover/one:translate-x-0 transition-all duration-300 ease-out"
style={{ transitionDelay: `${index * 45 + 60}ms` }}
>
-
+
{two.name}
@@ -132,10 +133,39 @@ export default () => {
)}
+ {/* 渲染页面 */}
+ {one.type === 'page' && (
+
+
+ {one.icon} {one.name}
+
+
+
+
+
+
+
+ {one.children?.map((two, index) => (
+ -
+
+ {two.icon}
+ {two.name}
+
+
+ ))}
+
+
+
+ )}
+
{/* 渲染导航 */}
{one.type === 'nav' && (
-
+
{one.icon} {one.name}
{/* 如果有子分类就显示下拉三角 */}
@@ -151,7 +181,7 @@ export default () => {
className="opacity-0 -translate-x-2 group-hover/one:opacity-100 group-hover/one:translate-x-0 transition-all duration-300 ease-out"
style={{ transitionDelay: `${index * 45 + 60}ms` }}
>
-
+
{two.icon}
{two.name}
diff --git a/src/types/app/cate.d.ts b/src/types/app/cate.d.ts
index 56de852..4556dd6 100755
--- a/src/types/app/cate.d.ts
+++ b/src/types/app/cate.d.ts
@@ -5,7 +5,7 @@ export interface Cate {
url: string,
icon: string,
level: number,
- type: 'cate' | 'nav',
+ type: 'cate' | 'page' | 'nav',
count: number,
is_hide: boolean,
order: number,
diff --git a/src/utils/cateNav.ts b/src/utils/cateNav.ts
new file mode 100644
index 0000000..b462495
--- /dev/null
+++ b/src/utils/cateNav.ts
@@ -0,0 +1,16 @@
+import { Cate } from '@/types/app/cate';
+
+export function getCateNavHref(item: Cate): string {
+ if (item.type === 'cate') {
+ return `/cate/${item.id}?name=${item.name}`;
+ }
+ return item.url || '/';
+}
+
+export function getCateNavTarget(type: Cate['type']): '_self' | '_blank' {
+ return type === 'nav' ? '_blank' : '_self';
+}
+
+export function getCateNavRel(type: Cate['type']): 'noopener noreferrer' | undefined {
+ return type === 'nav' ? 'noopener noreferrer' : undefined;
+}
diff --git a/src/utils/index.ts b/src/utils/index.ts
index 43b080a..6f4966e 100755
--- a/src/utils/index.ts
+++ b/src/utils/index.ts
@@ -3,4 +3,5 @@ export * from './await-io';
export * from './htmlParser';
export * from './common';
export * from './url';
-export * from './request';
\ No newline at end of file
+export * from './request';
+export * from './cateNav';
\ No newline at end of file