diff --git a/src/pages/admin/AdminLogsPage.jsx b/src/pages/admin/AdminLogsPage.jsx
new file mode 100644
index 0000000..45fe9e4
--- /dev/null
+++ b/src/pages/admin/AdminLogsPage.jsx
@@ -0,0 +1,182 @@
+import { useState } from 'react';
+import { FiInbox } from 'react-icons/fi';
+import { api } from '../../services/api.js';
+import EmptyState from '../../components/common/EmptyState.jsx';
+
+function AdminLogsPage() {
+ const [filters, setFilters] = useState({
+ keyword: '',
+ user: '',
+ department: '',
+ type: '',
+ status: '',
+ startDate: '',
+ endDate: '',
+ });
+
+ const handleFilterChange = (key, value) => {
+ setFilters(prev => ({ ...prev, [key]: value }));
+ };
+
+ const handleReset = () => {
+ setFilters({ keyword: '', user: '', department: '', type: '', status: '', startDate: '', endDate: '' });
+ };
+
+ const filteredLogs = api.admin.logs.filter(filters);
+
+ return (
+ <>
+
+
+
+
+
+ handleFilterChange('keyword', e.target.value)}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ handleFilterChange('startDate', e.target.value)}
+ />
+
+
+
+ handleFilterChange('endDate', e.target.value)}
+ />
+
+
+
+
+
+
+
+
+
+
+
+ {filteredLogs.length > 0 ? (
+ <>
+
+
+
+
+ | 时间 |
+ 用户 |
+ 部门 |
+ 类型 |
+ 操作 |
+ 状态 |
+ 详情 |
+
+
+
+ {filteredLogs.map((log, index) => (
+
+ | {log.time} |
+ {log.user} |
+ {log.department} |
+ {log.type} |
+ {log.action} |
+ {log.status} |
+ {log.detail} |
+
+ ))}
+
+
+
+
+ >
+ ) : (
+
}
+ message="暂无匹配日志"
+ description="当前筛选条件下没有日志记录"
+ />
+ )}
+
+
+ >
+ );
+}
+
+export default AdminLogsPage;
diff --git a/src/pages/admin/AdminProjectsPage.jsx b/src/pages/admin/AdminProjectsPage.jsx
index b6599e7..a97b876 100644
--- a/src/pages/admin/AdminProjectsPage.jsx
+++ b/src/pages/admin/AdminProjectsPage.jsx
@@ -1,18 +1,39 @@
-const adminProjects = [
- { id: 1, name: '企业 AI 智算平台', description: '企业级AI智能助手平台', owner: '张三', members: 8, status: '正常', createTime: '2026-01-15', lastActive: '2026-03-19 10:30' },
- { id: 2, name: '知识库管理系统', description: '智能知识库检索与管理', owner: '李四', members: 5, status: '正常', createTime: '2026-02-10', lastActive: '2026-03-18 16:20' },
- { id: 3, name: '数据分析平台', description: '大数据分析与可视化平台', owner: '王五', members: 12, status: '正常', createTime: '2026-01-20', lastActive: '2026-03-19 09:45' },
- { id: 4, name: '智能客服系统', description: 'AI驱动的客户服务系统', owner: '赵六', members: 6, status: '禁用', createTime: '2026-02-28', lastActive: '2026-03-10 14:15' },
- { id: 5, name: '文档自动化平台', description: '智能文档生成与处理', owner: '钱七', members: 4, status: '正常', createTime: '2026-03-01', lastActive: '2026-03-19 11:20' },
- { id: 6, name: '代码审查助手', description: '自动化代码审查与优化建议', owner: '孙八', members: 7, status: '正常', createTime: '2026-02-15', lastActive: '2026-03-17 15:30' }
-];
+import { useState } from 'react';
+import { api } from '../../services/api.js';
+import Modal from '../../components/common/Modal.jsx';
function StatusTag({ status }) {
const statusClass = status === '正常' ? 'status-running' : status === '禁用' ? 'status-error' : '';
return
{status};
}
-function AdminProjectsPage({ onAdd }) {
+function AdminProjectsPage({ onAdd, onEdit }) {
+ const sourceData = api.admin.projects.list();
+ const [filters, setFilters] = useState({ keyword: '', status: '' });
+ const [deleteTarget, setDeleteTarget] = useState(null);
+
+ const handleFilterChange = (key, value) => {
+ setFilters(prev => ({ ...prev, [key]: value }));
+ };
+
+ const handleReset = () => {
+ setFilters({ keyword: '', status: '' });
+ };
+
+ const filteredList = sourceData.filter(project => {
+ if (filters.keyword && !project.name.includes(filters.keyword) && !project.description.includes(filters.keyword)) {
+ return false;
+ }
+ if (filters.status && project.status !== filters.status) {
+ return false;
+ }
+ return true;
+ });
+
+ const confirmDelete = () => {
+ setDeleteTarget(null);
+ };
+
return (
<>
@@ -20,20 +41,30 @@ function AdminProjectsPage({ onAdd }) {
-
-
+
+
@@ -57,7 +88,7 @@ function AdminProjectsPage({ onAdd }) {