From 86f7ec62ef4492552a98e2cc5cb8af2de206beaa Mon Sep 17 00:00:00 2001 From: HexWarrior6 <3083512469@qq.com> Date: Fri, 14 Nov 2025 19:03:50 +0800 Subject: [PATCH] feat(Review Queue): add comment template function --- frontend/src/components/ModeratorQueue.tsx | 41 ++++++++- .../src/styles/ModeratorQueue.module.scss | 86 +++++++++++++++++-- frontend/src/utils/commentTemplates.ts | 77 +++++++++++++++++ 3 files changed, 195 insertions(+), 9 deletions(-) create mode 100644 frontend/src/utils/commentTemplates.ts diff --git a/frontend/src/components/ModeratorQueue.tsx b/frontend/src/components/ModeratorQueue.tsx index 18af801..049ea12 100644 --- a/frontend/src/components/ModeratorQueue.tsx +++ b/frontend/src/components/ModeratorQueue.tsx @@ -1,5 +1,6 @@ import React, { useState, useEffect } from "react"; import { Article, ReviewData } from "../types/article"; +import { commentTemplates, CommentTemplate } from "../utils/commentTemplates"; import styles from "../styles/ModeratorQueue.module.scss"; const ModeratorQueue: React.FC = () => { @@ -22,6 +23,7 @@ const ModeratorQueue: React.FC = () => { const [filterStatus, setFilterStatus] = useState< "all" | "duplicate" | "normal" >("all"); + const [selectedTemplate, setSelectedTemplate] = useState(''); useEffect(() => { fetchPendingArticles(); @@ -138,6 +140,18 @@ const ModeratorQueue: React.FC = () => { return true; }); + const applyTemplate = () => { + if (selectedTemplate) { + const template = commentTemplates.find(t => t.id === selectedTemplate); + if (template) { + setReviewData({ + ...reviewData, + reviewComment: template.content + }); + } + } + }; + const duplicateCount = articles.filter((a) => a.isDuplicate).length; if (loading) { @@ -642,7 +656,32 @@ const ModeratorQueue: React.FC = () => { )}
- +
+ +
+ + +
+