diff --git a/apps/web/src/App.tsx b/apps/web/src/App.tsx index c6455c3..3b2aa05 100644 --- a/apps/web/src/App.tsx +++ b/apps/web/src/App.tsx @@ -24,6 +24,18 @@ const PluginGraphPage = lazy(() => import('./pages/PluginGraphPage').then((m) => const PluginDashboardPage = lazy(() => import('./pages/PluginDashboardPage').then((m) => ({ default: m.PluginDashboardPage }))); const PluginKanbanPage = lazy(() => import('./pages/PluginKanbanPage')); +// 健康管理模块 +const PatientList = lazy(() => import('./pages/health/PatientList')); +const PatientDetail = lazy(() => import('./pages/health/PatientDetail')); +const PatientTagManage = lazy(() => import('./pages/health/PatientTagManage')); +const DoctorList = lazy(() => import('./pages/health/DoctorList')); +const AppointmentList = lazy(() => import('./pages/health/AppointmentList')); +const DoctorSchedule = lazy(() => import('./pages/health/DoctorSchedule')); +const FollowUpTaskList = lazy(() => import('./pages/health/FollowUpTaskList')); +const FollowUpRecordList = lazy(() => import('./pages/health/FollowUpRecordList')); +const ConsultationList = lazy(() => import('./pages/health/ConsultationList')); +const ConsultationDetail = lazy(() => import('./pages/health/ConsultationDetail')); + function PrivateRoute({ children }: { children: React.ReactNode }) { const isAuthenticated = useAuthStore((s) => s.isAuthenticated); return isAuthenticated ? <>{children} : ; @@ -153,6 +165,17 @@ export default function App() { } /> } /> } /> + {/* 健康管理 */} + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> diff --git a/apps/web/src/layouts/MainLayout.tsx b/apps/web/src/layouts/MainLayout.tsx index d802ac3..2beea29 100644 --- a/apps/web/src/layouts/MainLayout.tsx +++ b/apps/web/src/layouts/MainLayout.tsx @@ -19,6 +19,11 @@ import { TableOutlined, TagsOutlined, RightOutlined, + HeartOutlined, + CalendarOutlined, + PhoneOutlined, + CommentOutlined, + MedicineBoxOutlined, } from '@ant-design/icons'; import { useNavigate, useLocation } from 'react-router-dom'; import { useAppStore } from '../stores/app'; @@ -47,6 +52,16 @@ const bizMenuItems: MenuItem[] = [ { key: '/messages', icon: , label: '消息中心' }, ]; +const healthMenuItems: MenuItem[] = [ + { key: '/health/patients', icon: , label: '患者管理' }, + { key: '/health/doctors', icon: , label: '医护管理' }, + { key: '/health/appointments', icon: , label: '预约排班' }, + { key: '/health/schedules', icon: , label: '排班管理' }, + { key: '/health/follow-up-tasks', icon: , label: '随访管理' }, + { key: '/health/consultations', icon: , label: '咨询管理' }, + { key: '/health/tags', icon: , label: '标签管理' }, +]; + const sysMenuItems: MenuItem[] = [ { key: '/settings', icon: , label: '系统设置' }, { key: '/plugins/admin', icon: , label: '插件管理' }, @@ -61,6 +76,16 @@ const routeTitleMap: Record = { '/messages': '消息中心', '/settings': '系统设置', '/plugins/admin': '插件管理', + '/health/patients': '患者管理', + '/health/patients/:id': '患者详情', + '/health/tags': '标签管理', + '/health/doctors': '医护管理', + '/health/appointments': '预约排班', + '/health/schedules': '排班管理', + '/health/follow-up-tasks': '随访管理', + '/health/follow-up-records': '随访记录', + '/health/consultations': '咨询管理', + '/health/consultations/:id': '咨询详情', }; // 侧边栏菜单项 - 提取为独立组件避免重复渲染 @@ -263,6 +288,20 @@ export default function MainLayout({ children }: { children: React.ReactNode }) ))} + {/* 菜单组:健康管理 */} + {!sidebarCollapsed &&
健康管理
} +
+ {healthMenuItems.map((item) => ( + navigate(item.key)} + /> + ))} +
+ {/* 菜单组:插件 */} {pluginMenuGroups.length > 0 && ( <> diff --git a/apps/web/src/pages/health/AppointmentList.tsx b/apps/web/src/pages/health/AppointmentList.tsx new file mode 100644 index 0000000..7cb46b7 --- /dev/null +++ b/apps/web/src/pages/health/AppointmentList.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function AppointmentList() { + return ( + + 预约排班 + 开发中 + + ); +} diff --git a/apps/web/src/pages/health/ConsultationDetail.tsx b/apps/web/src/pages/health/ConsultationDetail.tsx new file mode 100644 index 0000000..8715878 --- /dev/null +++ b/apps/web/src/pages/health/ConsultationDetail.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function ConsultationDetail() { + return ( + + 咨询详情 + 开发中 + + ); +} diff --git a/apps/web/src/pages/health/ConsultationList.tsx b/apps/web/src/pages/health/ConsultationList.tsx new file mode 100644 index 0000000..a2e52b4 --- /dev/null +++ b/apps/web/src/pages/health/ConsultationList.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function ConsultationList() { + return ( + + 咨询管理 + 开发中 + + ); +} diff --git a/apps/web/src/pages/health/DoctorList.tsx b/apps/web/src/pages/health/DoctorList.tsx new file mode 100644 index 0000000..0b59087 --- /dev/null +++ b/apps/web/src/pages/health/DoctorList.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function DoctorList() { + return ( + + 医护管理 + 开发中 + + ); +} diff --git a/apps/web/src/pages/health/DoctorSchedule.tsx b/apps/web/src/pages/health/DoctorSchedule.tsx new file mode 100644 index 0000000..a8e72bb --- /dev/null +++ b/apps/web/src/pages/health/DoctorSchedule.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function DoctorSchedule() { + return ( + + 排班管理 + 开发中 + + ); +} diff --git a/apps/web/src/pages/health/FollowUpRecordList.tsx b/apps/web/src/pages/health/FollowUpRecordList.tsx new file mode 100644 index 0000000..c3cae64 --- /dev/null +++ b/apps/web/src/pages/health/FollowUpRecordList.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function FollowUpRecordList() { + return ( + + 随访记录 + 开发中 + + ); +} diff --git a/apps/web/src/pages/health/FollowUpTaskList.tsx b/apps/web/src/pages/health/FollowUpTaskList.tsx new file mode 100644 index 0000000..8ce4ff2 --- /dev/null +++ b/apps/web/src/pages/health/FollowUpTaskList.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function FollowUpTaskList() { + return ( + + 随访管理 + 开发中 + + ); +} diff --git a/apps/web/src/pages/health/PatientDetail.tsx b/apps/web/src/pages/health/PatientDetail.tsx new file mode 100644 index 0000000..43d2398 --- /dev/null +++ b/apps/web/src/pages/health/PatientDetail.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function PatientDetail() { + return ( + + 患者详情 + 开发中 + + ); +} diff --git a/apps/web/src/pages/health/PatientList.tsx b/apps/web/src/pages/health/PatientList.tsx new file mode 100644 index 0000000..bf02c2c --- /dev/null +++ b/apps/web/src/pages/health/PatientList.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function PatientList() { + return ( + + 患者管理 + 开发中 + + ); +} diff --git a/apps/web/src/pages/health/PatientTagManage.tsx b/apps/web/src/pages/health/PatientTagManage.tsx new file mode 100644 index 0000000..608e96a --- /dev/null +++ b/apps/web/src/pages/health/PatientTagManage.tsx @@ -0,0 +1,10 @@ +import { Card, Typography } from 'antd'; + +export default function PatientTagManage() { + return ( + + 标签管理 + 开发中 + + ); +}