22301009 | afbcf4b | 2025-04-10 16:08:39 +0800 | [diff] [blame] | 1 | import React, { useEffect, useState } from 'react'; |
Krishya | 3dc6b35 | 2025-06-07 19:02:25 +0800 | [diff] [blame] | 2 | import axios from 'axios'; |
22301009 | ecc1c1c | 2025-04-09 21:56:23 +0800 | [diff] [blame] | 3 | import './Recommend.css'; |
Krishya | 3dc6b35 | 2025-06-07 19:02:25 +0800 | [diff] [blame] | 4 | import { useUser } from '../../../context/UserContext'; |
22301009 | ecc1c1c | 2025-04-09 21:56:23 +0800 | [diff] [blame] | 5 | |
22301009 | ecc1c1c | 2025-04-09 21:56:23 +0800 | [diff] [blame] | 6 | const Recommend = () => { |
Krishya | 3dc6b35 | 2025-06-07 19:02:25 +0800 | [diff] [blame] | 7 | const { user } = useUser(); |
| 8 | const [popularSeeds, setPopularSeeds] = useState([]); |
| 9 | const [recommendedSeeds, setRecommendedSeeds] = useState([]); |
22301009 | afbcf4b | 2025-04-10 16:08:39 +0800 | [diff] [blame] | 10 | |
| 11 | useEffect(() => { |
Krishya | 3dc6b35 | 2025-06-07 19:02:25 +0800 | [diff] [blame] | 12 | // 获取热门资源 |
| 13 | axios |
| 14 | .get('/echo/recommendation/popular', { params: { limit: 16 } }) |
| 15 | .then((res) => setPopularSeeds(res.data)) |
| 16 | .catch((err) => console.error('获取热门资源失败', err)); |
22301009 | afbcf4b | 2025-04-10 16:08:39 +0800 | [diff] [blame] | 17 | }, []); |
| 18 | |
Krishya | 3dc6b35 | 2025-06-07 19:02:25 +0800 | [diff] [blame] | 19 | useEffect(() => { |
| 20 | // 获取个性化推荐 |
| 21 | if (user && user.userId) { |
| 22 | axios |
| 23 | .get(`/echo/recommendation/seeds/${user.userId}`) |
| 24 | .then((res) => setRecommendedSeeds(res.data)) |
| 25 | .catch((err) => console.error('获取个性化推荐失败', err)); |
| 26 | } |
| 27 | }, [user]); |
| 28 | |
| 29 | const renderSeedCard = (seed) => ( |
| 30 | <div className="seed-card" key={seed.id}> |
| 31 | <img src={seed.coverUrl || '/default-cover.jpg'} alt={seed.title} /> |
| 32 | <div className="title">{seed.title}</div> |
| 33 | </div> |
| 34 | ); |
| 35 | |
22301009 | ecc1c1c | 2025-04-09 21:56:23 +0800 | [diff] [blame] | 36 | return ( |
Krishya | 3dc6b35 | 2025-06-07 19:02:25 +0800 | [diff] [blame] | 37 | <div className="recommendation-page"> |
| 38 | <h2>🎬 正在热映</h2> |
| 39 | <div className="seed-list">{popularSeeds.map(renderSeedCard)}</div> |
| 40 | |
| 41 | <h2>🎯 个性化推荐</h2> |
| 42 | {user ? ( |
| 43 | <div className="seed-list">{recommendedSeeds.map(renderSeedCard)}</div> |
22301009 | afbcf4b | 2025-04-10 16:08:39 +0800 | [diff] [blame] | 44 | ) : ( |
Krishya | 3dc6b35 | 2025-06-07 19:02:25 +0800 | [diff] [blame] | 45 | <div className="login-reminder">请登录以获取个性化推荐</div> |
22301009 | afbcf4b | 2025-04-10 16:08:39 +0800 | [diff] [blame] | 46 | )} |
22301009 | ecc1c1c | 2025-04-09 21:56:23 +0800 | [diff] [blame] | 47 | </div> |
| 48 | ); |
| 49 | }; |
| 50 | |
| 51 | export default Recommend; |