import { useState, useEffect } from 'react' import { Card, Row, Col, Calendar, List, Badge, Empty, Typography, Spin } from 'antd' import { FileTextOutlined, ClockCircleOutlined } from '@ant-design/icons' import { useNavigate } from 'react-router-dom' import { getDocumentActivityDates, getDocumentActivity } from '@/api/dashboard' import Toast from '@/components/Toast/Toast' import dayjs from 'dayjs' import './Desktop.css' const { Text } = Typography function Desktop() { const navigate = useNavigate() const [loading, setLoading] = useState(false) const [activityDates, setActivityDates] = useState([]) const [selectedDate, setSelectedDate] = useState(dayjs()) const [activityLogs, setActivityLogs] = useState([]) const [currentMonth, setCurrentMonth] = useState(dayjs()) useEffect(() => { loadActivityDates(currentMonth.year(), currentMonth.month() + 1) loadActivityLogs(selectedDate.format('YYYY-MM-DD')) }, []) // 加载指定月份有活动的日期 const loadActivityDates = async (year, month) => { try { const res = await getDocumentActivityDates(year, month) if (res.data && res.data.dates) { setActivityDates(res.data.dates) } } catch (error) { console.error('Load activity dates error:', error) } } // 加载指定日期的活动日志 const loadActivityLogs = async (date) => { setLoading(true) try { const res = await getDocumentActivity(date) if (res.data && res.data.logs) { setActivityLogs(res.data.logs) } else { setActivityLogs([]) } } catch (error) { console.error('Load activity logs error:', error) Toast.error('加载失败', '获取文档活动记录失败') } finally { setLoading(false) } } // 日历单元格渲染 const dateCellRender = (value) => { const dateStr = value.format('YYYY-MM-DD') const activity = activityDates.find(item => item.date === dateStr) if (activity && activity.count > 0) { return (
) } return null } // 日期选择事件 const onSelect = (date) => { setSelectedDate(date) loadActivityLogs(date.format('YYYY-MM-DD')) } // 月份切换事件 const onPanelChange = (date) => { setCurrentMonth(date) loadActivityDates(date.year(), date.month() + 1) } // 点击文档打开 const handleDocumentClick = (log) => { // 如果文件不存在,提示无法打开 if (!log.file_exists) { Toast.warning('无法打开', '文件不存在或已被删除/移动/重命名') return } // 如果没有项目ID,提示无法打开 if (!log.project_id) { Toast.error('无法打开', '找不到对应的项目') return } // 跳转到文档页面 navigate(`/projects/${log.project_id}/docs?file=${encodeURIComponent(log.file_path)}`) } return (

个人桌面

{/* 左侧日历 */} {/* 右侧活动列表 */} {selectedDate.format('YYYY年MM月DD日')} 的文档活动
} > {activityLogs.length > 0 ? ( ( handleDocumentClick(item)} className={item.file_exists ? 'activity-item-clickable' : 'activity-item-disabled'} style={{ cursor: item.file_exists ? 'pointer' : 'default' }} > } title={
{item.project_name} {item.operation_type} {!item.file_exists && ( (已失效) )}
} description={
文件: {item.file_path}
{new Date(item.created_at).toLocaleTimeString('zh-CN')}
} />
)} /> ) : ( )}
) } export default Desktop