增加登录显示的页面和修改bug
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user