blob: 184144333fcc46765686764bd2d57150394e420e [file] [log] [blame]
Krishya3dc6b352025-06-07 19:02:25 +08001// import React, { useState, useEffect } from 'react';
2// import axios from 'axios';
3// import './SeedRating.css';
4// import { useUser } from '../../../context/UserContext';
5
6// const SeedRating = ({ seedId }) => {
7// const { user } = useUser();
8// const [score, setScore] = useState(0);
9// const [submitted, setSubmitted] = useState(false);
10
11// const handleRating = async (newScore) => {
12// if (!user || !user.userId) {
13// alert('请先登录再评分');
14// return;
15// }
16
17// try {
18// const res = await axios.post('/echo/ratings', null, {
19// params: {
20// userId: user.userId,
21// seedId,
22// score: newScore,
23// },
24// });
25
26// if (res.data && res.data.status === 'success') {
27// setScore(newScore);
28// setSubmitted(true);
29// alert('评分成功');
30// } else {
31// alert('评分失败,请稍后再试');
32// }
33// } catch (error) {
34// console.error('评分出错:', error);
35// alert('评分请求失败');
36// }
37// };
38
39
40
41// return (
42// <div className="seed-rating">
43// <span>评分:</span>
44// {[1, 2, 3, 4, 5].map((star) => (
45// <span
46// key={star}
47// className={`star ${star <= score ? 'active' : ''}`}
48// // onClick={() => !submitted && handleRating(star)}
49// onClick={() => handleRating(star)}
50
51// >
52// ★
53// </span>
54// ))}
55// {submitted && <span className="thank-you">感谢您的评分!</span>}
56// </div>
57// );
58// };
59
60// export default SeedRating;
61
62import React, { useState, useEffect } from 'react';
63import axios from 'axios';
64import './SeedRating.css';
65import { useUser } from '../../../context/UserContext';
66
67const SeedRating = ({ seedId }) => {
68 const { user } = useUser();
69 const [score, setScore] = useState(0); // 最终提交的分数
70 const [hoverScore, setHoverScore] = useState(0); // 鼠标悬停显示
71 const [submitted, setSubmitted] = useState(false);
72 const [loading, setLoading] = useState(false); // 防止重复点击
73
74 const handleRating = async (newScore) => {
75 if (!user || !user.userId) {
76 alert('请先登录再评分');
77 return;
78 }
79 if (submitted || loading) return;
80
81 setLoading(true);
82 try {
83 const res = await axios.post('/echo/ratings', null, {
84 params: {
85 userId: user.userId,
86 seedId,
87 score: newScore,
88 },
89 });
90
91 if (res.data?.status === 'success') {
92 setScore(newScore);
93 setSubmitted(true);
94 alert('评分成功');
95 } else {
96 alert('评分失败,请稍后再试');
97 }
98 } catch (error) {
99 console.error('评分出错:', error);
100 alert('评分请求失败');
101 } finally {
102 setLoading(false);
103 }
104 };
105
106 return (
107 <div className="seed-rating">
108 <span>评分:</span>
109 {[1, 2, 3, 4, 5].map((star) => (
110 <span
111 key={star}
112 className={`star ${star <= (hoverScore || score) ? 'active' : ''}`}
113 onMouseEnter={() => !submitted && setHoverScore(star)}
114 onMouseLeave={() => !submitted && setHoverScore(0)}
115 onClick={() => handleRating(star)}
116 >
117
118 </span>
119 ))}
120 {submitted && <span className="thank-you">感谢您的评分!</span>}
121 </div>
122 );
123};
124
125export default SeedRating;