diff --git a/src/App.js b/src/App.js index 88096ef..b3d38d5 100755 --- a/src/App.js +++ b/src/App.js @@ -3,6 +3,9 @@ import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { AuthProvider } from './context/AuthContext'; import Login from './pages/Login'; import ProductDetail from './pages/ProductDetail'; +import DevGuide from './pages/DevGuide'; +import Training from './pages/Training'; +import PrivateRoute from './components/PrivateRoute'; import Navbar from './components/Navbar'; import Home from './pages/Home'; import './App.css'; @@ -16,6 +19,22 @@ function App() { } /> } /> + + + + } + /> + + + + } + /> } /> diff --git a/src/components/Navbar.js b/src/components/Navbar.js index bcfef4b..56b9c7e 100755 --- a/src/components/Navbar.js +++ b/src/components/Navbar.js @@ -231,23 +231,17 @@ const Navbar = () => { - {/*
- 解决方案 -
- 解决方案A - 解决方案B - 解决方案C + {user && ( +
+ navigate('/dev')}>开发指南
-
*/} + )} - {/*
- 行业 -
- 民航 - 通航 - 研发制造 + {user && ( +
+ navigate('/training')}>培训资料
-
*/} + )}
diff --git a/src/pages/DevGuide.js b/src/pages/DevGuide.js new file mode 100644 index 0000000..ebebb9e --- /dev/null +++ b/src/pages/DevGuide.js @@ -0,0 +1,12 @@ +import React from 'react'; + +const DevGuide = () => { + return ( +
+

开发指南

+

API、SDK、示例代码等开发资源的统一入口。

+
+ ); +}; + +export default DevGuide; diff --git a/src/pages/Home.js b/src/pages/Home.js index ba86b35..16cdce6 100755 --- a/src/pages/Home.js +++ b/src/pages/Home.js @@ -34,7 +34,7 @@ const Home = () => { useEffect(() => { const timer = setInterval(() => { setActive((prev) => (prev + 1) % slidesData.length); - }, 4000); + }, 5000); return () => clearInterval(timer); }, []); diff --git a/src/pages/Login.js b/src/pages/Login.js index b3a28cf..2b8a2ad 100755 --- a/src/pages/Login.js +++ b/src/pages/Login.js @@ -18,11 +18,11 @@ const Login = () => { const result = await login(username, password); - if (result.success) { - navigate('/'); - } else { - setError(result.error); - } + if (result.success) { + navigate('/'); + } else { + setError(result.error); + } setLoading(false); }; @@ -66,7 +66,7 @@ const Login = () => {
-

默认账号:admin / admin123

+

测试账号:admin / admin123

diff --git a/src/pages/ProductDetail.css b/src/pages/ProductDetail.css index 8d35a44..e3b2823 100644 --- a/src/pages/ProductDetail.css +++ b/src/pages/ProductDetail.css @@ -50,9 +50,9 @@ .pd-panel-body { background: #fff; padding: 12px 0; } .pd-panel.expanded { border: 1px dashed #bfbfbf; border-radius: 6px; } .pd-panel.expanded .pd-panel-header { padding: 12px 14px; border-bottom: none; } -.image-row { display: flex; justify-content: center; align-items: center; gap: 40px; padding: 12px; } +.image-row { display: flex; justify-content: center; align-items: center; gap: 40px; padding: 12px; background: #f5f5f5; } .image-row img { height: 420px; width: auto; object-fit: contain; display: block; } -.size-carousel { position: relative; background: #fff; overflow: hidden; width: 100%; min-height: 420px; border-radius: 0; } +.size-carousel { position: relative; background: #f5f5f5; overflow: hidden; width: 100%; min-height: 420px; border-radius: 0; } .size-slides { display: grid; grid-template-columns: 100%; } .size-slide { opacity: 0; transition: opacity 0.3s ease; display: none; } .size-slide.active { opacity: 1; display: block; } diff --git a/src/pages/ProductDetail.js b/src/pages/ProductDetail.js index edb7117..1ae5735 100644 --- a/src/pages/ProductDetail.js +++ b/src/pages/ProductDetail.js @@ -1,5 +1,6 @@ import React, { useState, useEffect } from 'react'; import { useParams, useLocation } from 'react-router-dom'; +import axios from 'axios'; import './ProductDetail.css'; const ProductDetail = () => { @@ -14,7 +15,7 @@ const ProductDetail = () => { const [specsLoading, setSpecsLoading] = useState(false); const [imgOpen, setImgOpen] = useState(true); const [highlightsOpen, setHighlightsOpen] = useState(false); - const [compareOpen, setCompareOpen] = useState(true); + const [compareOpen, setCompareOpen] = useState(false); const [promoOpen, setPromoOpen] = useState(false); const [faqOpen, setFaqOpen] = useState(false); const [reviewOpen, setReviewOpen] = useState(false); @@ -56,11 +57,11 @@ const ProductDetail = () => { if (data.data.length && typeof data.data[0]?.title === 'string' && Array.isArray(data.data[0]?.rows)) { setSections(data.data); setSpecs([]); - setExpanded(Object.fromEntries(data.data.map((_, i) => [i, true]))); + setExpanded(Object.fromEntries(data.data.map((_, i) => [i, false]))); } else { setSections([{ title: '参数', rows: data.data }]); setSpecs(data.data); - setExpanded({ 0: true }); + setExpanded({ 0: false }); } } } catch {} @@ -75,7 +76,7 @@ const ProductDetail = () => { if (images.length <= 1) return; const timer = setInterval(() => { setActive((prev) => (prev + 1) % images.length); - }, 4000); + }, 5000); return () => clearInterval(timer); }, [images.length]); @@ -95,7 +96,7 @@ const ProductDetail = () => { return (
-
{product.name}{product.desc ? ` | ${product.desc}` : ''}
+
{product.name}
))} diff --git a/src/pages/Training.js b/src/pages/Training.js new file mode 100644 index 0000000..c7c99e6 --- /dev/null +++ b/src/pages/Training.js @@ -0,0 +1,12 @@ +import React from 'react'; + +const Training = () => { + return ( +
+

培训资料

+

课程、教材、视频等培训资源的统一入口。

+
+ ); +}; + +export default Training;