前段
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)}>
+ ← 返回公告区
+ </button>
+ <div className="error-message">公告加载失败,请返回重试</div>
+ </div>
+ );
+ }
+
+ return (
+ <div className="announcement-container">
+ <button className="back-button" onClick={handleBack}>
+ ← 返回
+ </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