前端简单界面
Change-Id: I7df9774daf4df8d92b13e659effe426ab0b6180b
diff --git a/pt--frontend/src/components/Comment.jsx b/pt--frontend/src/components/Comment.jsx
new file mode 100644
index 0000000..9708566
--- /dev/null
+++ b/pt--frontend/src/components/Comment.jsx
@@ -0,0 +1,94 @@
+// src/components/Comment.jsx
+import React, { useState, useEffect } from 'react';
+import {
+ getCommentsByPostId,
+ createComment,
+ deleteComment,
+ likeComment,
+ unlikeComment,
+} from '../api/comment';
+
+const Comment = ({ postId, currentUser }) => {
+ const [comments, setComments] = useState([]);
+ const [newContent, setNewContent] = useState('');
+
+ useEffect(() => {
+ loadComments();
+ }, [postId]);
+
+ const loadComments = async () => {
+ const data = await getCommentsByPostId(postId);
+ setComments(data);
+ };
+
+ const handleCreate = async () => {
+ if (!newContent.trim()) return;
+
+ const commentData = {
+ postid: postId,
+ userid: currentUser.id,
+ postCommentcontent: newContent,
+ commenttime: new Date().toISOString()
+ };
+
+ await createComment(commentData);
+ setNewContent('');
+ loadComments();
+ };
+
+ const handleDelete = async (commentid) => {
+ await deleteComment(commentid);
+ loadComments();
+ };
+
+ const handleLike = async (commentid) => {
+ await likeComment(commentid);
+ loadComments();
+ };
+
+ const handleUnlike = async (commentid) => {
+ await unlikeComment(commentid);
+ loadComments();
+ };
+
+ return (
+ <div>
+ <h4 className="font-semibold text-gray-700 mb-2">评论</h4>
+ <div className="mb-2">
+ <textarea
+ value={newContent}
+ onChange={(e) => setNewContent(e.target.value)}
+ placeholder="写下你的评论..."
+ className="w-full border rounded p-2"
+ />
+ <button
+ onClick={handleCreate}
+ className="mt-2 bg-blue-500 text-white px-3 py-1 rounded hover:bg-blue-600"
+ >
+ 发布评论
+ </button>
+ </div>
+
+ <div className="space-y-2 mt-4">
+ {comments.map((comment) => (
+ <div key={comment.commentid} className="border rounded p-2">
+ <div className="text-sm text-gray-800 font-medium">用户ID:{comment.userid}</div>
+ <div className="text-gray-700">{comment.postCommentcontent}</div>
+ <div className="text-xs text-gray-500 mt-1">
+ {comment.commenttime || '暂无时间'} | 👍 {comment.likes}
+ </div>
+ <div className="flex gap-2 mt-1 text-sm">
+ <button onClick={() => handleLike(comment.commentid)} className="text-blue-500 hover:underline">点赞</button>
+ <button onClick={() => handleUnlike(comment.commentid)} className="text-yellow-500 hover:underline">取消点赞</button>
+ {comment.userid === currentUser.id && (
+ <button onClick={() => handleDelete(comment.commentid)} className="text-red-500 hover:underline">删除</button>
+ )}
+ </div>
+ </div>
+ ))}
+ </div>
+ </div>
+ );
+};
+
+export default Comment;