前段

Change-Id: I718d4d07ea03c6d2b6bcbd4d426c5d1af2201bf4
diff --git a/src/components/AnnouncementDetail.jsx b/src/components/AnnouncementDetail.jsx
new file mode 100644
index 0000000..8e90672
--- /dev/null
+++ b/src/components/AnnouncementDetail.jsx
@@ -0,0 +1,61 @@
+import React from 'react';

+import { useNavigate, useLocation } from 'react-router-dom';

+import './AnnouncementDetail.css';

+

+const AnnouncementDetail = () => {

+  const navigate = useNavigate();

+const location = useLocation();

+  const { state } = useLocation();

+  const announcement = state?.announcement;

+  const handleBack = () => {

+    const fromTab = location.state?.fromTab; // 从跳转时传递的 state 中获取

+    if (fromTab) {

+    navigate(`/dashboard/${fromTab}`); // 明确返回对应标签页

+    } else {

+        navigate(-1); // 保底策略

+    }

+}

+  

+    

+

+  if (!announcement) {

+    return (

+      <div className="announcement-container">

+        <button className="back-button" onClick={() => navigate(-1)}>

+          &larr; 返回公告区

+        </button>

+        <div className="error-message">公告加载失败,请返回重试</div>

+      </div>

+    );

+  }

+

+  return (

+    <div className="announcement-container">

+      <button className="back-button" onClick={handleBack}>

+        &larr; 返回

+      </button>

+

+      <div className="announcement-detail">

+        <div className="announcement-header">

+          <h1>{announcement.title}</h1>

+          <div className="announcement-meta">

+            <span className="category-badge">{announcement.category}</span>

+            <span>发布人:{announcement.author}</span>

+            <span>发布日期:{announcement.date}</span>

+          </div>

+        </div>

+

+        <div className="announcement-content">

+          {announcement.content.split('\n').map((paragraph, i) => (

+            <p key={i}>{paragraph}</p>

+          ))}

+        </div>

+      </div>

+    </div>

+  );

+};

+

+export default AnnouncementDetail;

+

+

+    
\ No newline at end of file