diff --git a/apps/admin/src/layouts/MainLayout.tsx b/apps/admin/src/layouts/MainLayout.tsx
index b944de1..cf8a8de 100644
--- a/apps/admin/src/layouts/MainLayout.tsx
+++ b/apps/admin/src/layouts/MainLayout.tsx
@@ -24,6 +24,7 @@ import {
KeyOutlined,
CheckCircleOutlined,
LaptopOutlined,
+ BellOutlined,
} from '@ant-design/icons';
import { usePermission } from '../hooks/usePermission';
import NotificationBell from '../components/NotificationBell';
@@ -107,6 +108,8 @@ const allMenuItems: MenuItemType[] = [
label: '系统管理',
permission: 'log:view',
children: [
+ { key: '/departments', icon: , label: '校区/部门', permission: 'department:view' },
+ { key: '/notifications', icon: , label: '通知中心', permission: 'notification:view' },
{ key: '/operation-logs', icon: , label: '操作日志', permission: 'log:view' },
{ key: '/roles', icon: , label: '角色管理', permission: 'role:view' },
{ key: '/permissions', icon: , label: '权限一览', permission: 'role:view' },
diff --git a/apps/admin/src/pages/Classrooms/index.tsx b/apps/admin/src/pages/Classrooms/index.tsx
index 731a6b9..68ec10d 100644
--- a/apps/admin/src/pages/Classrooms/index.tsx
+++ b/apps/admin/src/pages/Classrooms/index.tsx
@@ -52,14 +52,14 @@ const ClassroomsPage: React.FC = () => {
const [showArchived, setShowArchived] = useState(false);
const [form] = Form.useForm();
const [searchText, setSearchText] = useState('');
+ const [filterStatus, setFilterStatus] = useState(undefined);
const filteredData = useMemo(() => {
- if (!searchText) return data;
- const s = searchText.toLowerCase();
- return data.filter(
- (d: any) => d.name?.toLowerCase().includes(s) || d.building?.toLowerCase().includes(s),
- );
- }, [data, searchText]);
+ let result = data;
+ if (searchText) { const s = searchText.toLowerCase(); result = result.filter((d: Record) => (typeof d.name === 'string' && d.name.toLowerCase().includes(s)) || (typeof d.building === 'string' && d.building.toLowerCase().includes(s))); }
+ if (filterStatus) result = result.filter((d: Record) => d.status === filterStatus);
+ return result;
+ }, [data, searchText, filterStatus]);
const fetchData = async () => {
setLoading(true);
@@ -223,6 +223,7 @@ const ClassroomsPage: React.FC = () => {
if (!e.target.value) setSearchText('');
}}
/>
+