blob: 28fd7ac82a27efcbd0bd7c92d149cb0f09bc01a8 [file] [log] [blame]
Krishya8f2fec82025-06-04 21:54:46 +08001// export default Promotion;
2
Krishyaf1d0ea82025-05-03 17:01:58 +08003import React, { useEffect, useState, useRef } from 'react';
4import './Promotion.css';
5
Krishyaf1d0ea82025-05-03 17:01:58 +08006const Promotion = () => {
7 const [promotions, setPromotions] = useState([]);
Krishyaf1d0ea82025-05-03 17:01:58 +08008 const [loading, setLoading] = useState(true);
9
Krishyaf1d0ea82025-05-03 17:01:58 +080010 const [promoIndex, setPromoIndex] = useState(0);
Krishyaf1d0ea82025-05-03 17:01:58 +080011 const promoTimerRef = useRef(null);
Krishyaf1d0ea82025-05-03 17:01:58 +080012
13 useEffect(() => {
14 fetchData();
15 }, []);
16
Krishyaf1d0ea82025-05-03 17:01:58 +080017 useEffect(() => {
18 if (promotions.length === 0) return;
Krishyaf1d0ea82025-05-03 17:01:58 +080019 clearInterval(promoTimerRef.current);
20 promoTimerRef.current = setInterval(() => {
21 setPromoIndex(prev => (prev + 1) % promotions.length);
22 }, 5000);
23 return () => clearInterval(promoTimerRef.current);
24 }, [promotions]);
25
Krishyaf1d0ea82025-05-03 17:01:58 +080026 const fetchData = async () => {
27 try {
Krishya2e0f49a2025-05-29 10:59:01 +080028 // ✅ 获取促销活动列表(新接口)
Krishya8f2fec82025-06-04 21:54:46 +080029 const promoResponse = await fetch(`/seeds/promotions`);
Krishya2e0f49a2025-05-29 10:59:01 +080030 const promoJson = await promoResponse.json();
Krishya8f2fec82025-06-04 21:54:46 +080031 console.log('接口返回数据:', promoJson);
Krishya2e0f49a2025-05-29 10:59:01 +080032 const promoData = Array.isArray(promoJson?.result) ? promoJson.result : [];
Krishyaf1d0ea82025-05-03 17:01:58 +080033 setPromotions(promoData);
Krishyaf1d0ea82025-05-03 17:01:58 +080034 } catch (error) {
Krishya8f2fec82025-06-04 21:54:46 +080035 console.error('获取促销活动失败:', error);
Krishyaf1d0ea82025-05-03 17:01:58 +080036 } finally {
37 setLoading(false);
38 }
39 };
40
41 if (loading) {
42 return <div className="promotion-container">加载中...</div>;
43 }
44
Krishyaf1d0ea82025-05-03 17:01:58 +080045 const prevPromo = () => setPromoIndex((promoIndex - 1 + promotions.length) % promotions.length);
46 const nextPromo = () => setPromoIndex((promoIndex + 1) % promotions.length);
Krishyaf1d0ea82025-05-03 17:01:58 +080047 const currentPromo = promotions[promoIndex];
Krishyaf1d0ea82025-05-03 17:01:58 +080048
49 return (
50 <div className="promotion-container carousel-container">
51 {/* 促销活动轮播 */}
52 <section className="carousel-section">
53 <h2>当前促销活动</h2>
Krishya2283d882025-05-27 22:25:19 +080054 {promotions.length === 0 || !currentPromo ? (
Krishyaf1d0ea82025-05-03 17:01:58 +080055 <div className="empty-state">暂无促销活动</div>
56 ) : (
57 <div
58 className="carousel"
59 onMouseEnter={() => clearInterval(promoTimerRef.current)}
60 onMouseLeave={() => {
61 promoTimerRef.current = setInterval(() => {
62 setPromoIndex(prev => (prev + 1) % promotions.length);
63 }, 3000);
64 }}
65 >
66 <button className="arrow left" onClick={prevPromo}>&lt;</button>
67 <div className="slide">
Krishya2e0f49a2025-05-29 10:59:01 +080068 <div><strong>促销名称:</strong>{currentPromo?.name ?? '未知'}</div>
Krishyaf1d0ea82025-05-03 17:01:58 +080069 <div><strong>促销时间:</strong>
Krishya2e0f49a2025-05-29 10:59:01 +080070 {currentPromo?.pStartTime && currentPromo?.pEndTime
71 ? `${new Date(currentPromo.pStartTime).toLocaleString()} ~ ${new Date(currentPromo.pEndTime).toLocaleString()}`
Krishya2283d882025-05-27 22:25:19 +080072 : '未知'}
Krishyaf1d0ea82025-05-03 17:01:58 +080073 </div>
Krishya2e0f49a2025-05-29 10:59:01 +080074 <div><strong>上传奖励系数:</strong>{currentPromo?.uploadCoeff ?? '无'}</div>
75 <div><strong>下载折扣系数:</strong>{currentPromo?.downloadCoeff ?? '无'}</div>
Krishya2283d882025-05-27 22:25:19 +080076 {currentPromo?.description && (
Krishya2e0f49a2025-05-29 10:59:01 +080077 <div><strong>描述:</strong>{currentPromo.description}</div>
Krishyaf1d0ea82025-05-03 17:01:58 +080078 )}
79 </div>
80 <button className="arrow right" onClick={nextPromo}>&gt;</button>
81 </div>
82 )}
83 </section>
Krishyaf1d0ea82025-05-03 17:01:58 +080084 </div>
85 );
86};
87
88export default Promotion;
Krishya2283d882025-05-27 22:25:19 +080089