增加登录显示的页面和修改bug

This commit is contained in:
huanglinhuan
2025-12-09 15:37:23 +08:00
parent d50b08e33e
commit 08980077aa
8 changed files with 111 additions and 32 deletions

View File

@@ -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 (
<div className="product-detail-page">
<div className="container">
<div className="pd-title">{product.name}{product.desc ? ` | ${product.desc}` : ''}</div>
<div className="pd-title">{product.name}</div>
<div className="section-narrow">
<div className="pd-list">
<button className="pd-list-item" onClick={() => setImgOpen(!imgOpen)}>
@@ -228,6 +229,35 @@ const DocsList = ({ series, sub }) => {
const [loading, setLoading] = useState(false);
const [error, setError] = useState('');
const handleDownload = async (d) => {
try {
const res = await axios.get(d.url, { responseType: 'blob' });
const blob = new Blob([res.data], { type: res.data.type || 'application/octet-stream' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = d.name || (String(d.url).split('/').pop() || '下载文件');
document.body.appendChild(a);
a.click();
a.remove();
URL.revokeObjectURL(url);
} catch (e) {
setError('下载失败或文件不存在');
}
};
const handleOpen = async (d) => {
try {
const res = await axios.get(d.url, { responseType: 'blob' });
const blob = new Blob([res.data], { type: 'application/pdf' });
const url = URL.createObjectURL(blob);
window.open(url, '_blank');
setTimeout(() => URL.revokeObjectURL(url), 60000);
} catch (e) {
window.open(d.url, '_blank');
}
};
React.useEffect(() => {
const fetchDocs = async () => {
try {
@@ -259,11 +289,23 @@ const DocsList = ({ series, sub }) => {
<ul className="docs-list">
{docs.map((d) => (
<li key={d.url} className="docs-item">
<a href={`${d.url}`} target="_blank" rel="noreferrer" className="docs-link">
{d.name}
</a>
{String(d.url || '').toLowerCase().endsWith('.pdf') ? (
<a
href={`${d.url}`}
target="_blank"
rel="noreferrer"
className="docs-link"
onClick={(e) => { e.preventDefault(); handleOpen(d); }}
>
{d.name}
</a>
) : (
<a href={`${d.url}`} target="_blank" rel="noreferrer" className="docs-link">
{d.name}
</a>
)}
<span className="docs-size">{(d.size / 1024 / 1024).toFixed(2)}MB</span>
<a href={`${d.url}`} download className="docs-download">下载</a>
<button type="button" className="docs-download" onClick={() => handleDownload(d)}>下载</button>
</li>
))}
</ul>