优化种子评分、热门资源推荐
Change-Id: I9007f3d1d77df8a1d3eeb33c35897ea04c8e3c16
diff --git a/src/pages/SeedList/SeedDetail/SeedRating.jsx b/src/pages/SeedList/SeedDetail/SeedRating.jsx
new file mode 100644
index 0000000..1841443
--- /dev/null
+++ b/src/pages/SeedList/SeedDetail/SeedRating.jsx
@@ -0,0 +1,125 @@
+// import React, { useState, useEffect } from 'react';
+// import axios from 'axios';
+// import './SeedRating.css';
+// import { useUser } from '../../../context/UserContext';
+
+// const SeedRating = ({ seedId }) => {
+// const { user } = useUser();
+// const [score, setScore] = useState(0);
+// const [submitted, setSubmitted] = useState(false);
+
+// const handleRating = async (newScore) => {
+// if (!user || !user.userId) {
+// alert('请先登录再评分');
+// return;
+// }
+
+// try {
+// const res = await axios.post('/echo/ratings', null, {
+// params: {
+// userId: user.userId,
+// seedId,
+// score: newScore,
+// },
+// });
+
+// if (res.data && res.data.status === 'success') {
+// setScore(newScore);
+// setSubmitted(true);
+// alert('评分成功');
+// } else {
+// alert('评分失败,请稍后再试');
+// }
+// } catch (error) {
+// console.error('评分出错:', error);
+// alert('评分请求失败');
+// }
+// };
+
+
+
+// return (
+// <div className="seed-rating">
+// <span>评分:</span>
+// {[1, 2, 3, 4, 5].map((star) => (
+// <span
+// key={star}
+// className={`star ${star <= score ? 'active' : ''}`}
+// // onClick={() => !submitted && handleRating(star)}
+// onClick={() => handleRating(star)}
+
+// >
+// ★
+// </span>
+// ))}
+// {submitted && <span className="thank-you">感谢您的评分!</span>}
+// </div>
+// );
+// };
+
+// export default SeedRating;
+
+import React, { useState, useEffect } from 'react';
+import axios from 'axios';
+import './SeedRating.css';
+import { useUser } from '../../../context/UserContext';
+
+const SeedRating = ({ seedId }) => {
+ const { user } = useUser();
+ const [score, setScore] = useState(0); // 最终提交的分数
+ const [hoverScore, setHoverScore] = useState(0); // 鼠标悬停显示
+ const [submitted, setSubmitted] = useState(false);
+ const [loading, setLoading] = useState(false); // 防止重复点击
+
+ const handleRating = async (newScore) => {
+ if (!user || !user.userId) {
+ alert('请先登录再评分');
+ return;
+ }
+ if (submitted || loading) return;
+
+ setLoading(true);
+ try {
+ const res = await axios.post('/echo/ratings', null, {
+ params: {
+ userId: user.userId,
+ seedId,
+ score: newScore,
+ },
+ });
+
+ if (res.data?.status === 'success') {
+ setScore(newScore);
+ setSubmitted(true);
+ alert('评分成功');
+ } else {
+ alert('评分失败,请稍后再试');
+ }
+ } catch (error) {
+ console.error('评分出错:', error);
+ alert('评分请求失败');
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ return (
+ <div className="seed-rating">
+ <span>评分:</span>
+ {[1, 2, 3, 4, 5].map((star) => (
+ <span
+ key={star}
+ className={`star ${star <= (hoverScore || score) ? 'active' : ''}`}
+ onMouseEnter={() => !submitted && setHoverScore(star)}
+ onMouseLeave={() => !submitted && setHoverScore(0)}
+ onClick={() => handleRating(star)}
+ >
+ ★
+ </span>
+ ))}
+ {submitted && <span className="thank-you">感谢您的评分!</span>}
+ </div>
+ );
+};
+
+export default SeedRating;