blob: ac3b92ce8c8798372978a72431404e93a878bba2 [file] [log] [blame]
DREWae420b22025-06-02 14:07:20 +08001import React, { useEffect, useState } from 'react';
2import { useNavigate, useLocation, useParams } from 'react-router-dom';
3import { getAnnouncementDetail } from '../api/announcement';
4import { message } from 'antd';
Akane121765b61a72025-05-17 13:52:25 +08005import './AnnouncementDetail.css';
6
7const AnnouncementDetail = () => {
8 const navigate = useNavigate();
DREWae420b22025-06-02 14:07:20 +08009 const { id } = useParams();
10 const [announcement, setAnnouncement] = useState(null);
11 const [loading, setLoading] = useState(true);
12 const [error, setError] = useState('');
13 const location = useLocation();
Akane121765b61a72025-05-17 13:52:25 +080014 const { state } = useLocation();
DREWae420b22025-06-02 14:07:20 +080015
16
Akane121765b61a72025-05-17 13:52:25 +080017 const handleBack = () => {
18 const fromTab = location.state?.fromTab; // 从跳转时传递的 state 中获取
19 if (fromTab) {
20 navigate(`/dashboard/${fromTab}`); // 明确返回对应标签页
21 } else {
22 navigate(-1); // 保底策略
23 }
24}
DREWae420b22025-06-02 14:07:20 +080025 useEffect(() => {
26 const fetchAnnouncement = async () => {
27 try {
28 setLoading(true);
29 const response = await getAnnouncementDetail(id);
30 if (response.data.code === 200) {
31 setAnnouncement(response.data.data.announcement);
32 } else {
33 setError(response.data.message || '获取公告详情失败');
34 }
35 } catch (err) {
36 setError('获取公告详情失败');
37 message.error('获取公告详情失败');
38 } finally {
39 setLoading(false);
40 }
41 };
42
43 fetchAnnouncement();
44 }, [id]);
Akane121765b61a72025-05-17 13:52:25 +080045
46
47
DREWae420b22025-06-02 14:07:20 +080048 if (error || !announcement) {
Akane121765b61a72025-05-17 13:52:25 +080049 return (
50 <div className="announcement-container">
DREWae420b22025-06-02 14:07:20 +080051 <button className="back-button" onClick={handleBack}>
52 &larr; 返回
Akane121765b61a72025-05-17 13:52:25 +080053 </button>
DREWae420b22025-06-02 14:07:20 +080054 <div className="error-message">{error || '公告不存在'}</div>
Akane121765b61a72025-05-17 13:52:25 +080055 </div>
56 );
57 }
58
59 return (
60 <div className="announcement-container">
61 <button className="back-button" onClick={handleBack}>
62 &larr; 返回
63 </button>
64
65 <div className="announcement-detail">
66 <div className="announcement-header">
67 <h1>{announcement.title}</h1>
68 <div className="announcement-meta">
DREWae420b22025-06-02 14:07:20 +080069 <span>发布日期:{announcement.createTime}</span>
Akane121765b61a72025-05-17 13:52:25 +080070 </div>
71 </div>
72
73 <div className="announcement-content">
74 {announcement.content.split('\n').map((paragraph, i) => (
75 <p key={i}>{paragraph}</p>
76 ))}
77 </div>
78 </div>
79 </div>
80 );
81};
82
83export default AnnouncementDetail;
84
85
86