# HYApp 管理平台前端 基于 `React + Vite + MUI + ECharts` 从 `deploy-platform` 抽离出的白色主题 HYApp 管理平台前端。包管理器统一使用 `pnpm`。 ## 用户要求 - 写代码不要猜:不确定的依赖、API、文件结构、现有约定,先查本地项目或依赖实际导出。 - 写前端或客户端项目时,不添加无意义的描述文案。 - 使用 `pnpm`。 - 页面包含:`总览`、`用户管理`、`房间管理`、`地区管理`、`团队管理` 等后台模块。 - 所有组件都要模块化,包括基础组件、布局组件、业务组件、图表组件。 - 基础 UI 使用 MUI,但整体风格必须统一为白色后台管理平台风格。 - 修改 MUI 组件颜色和样式时注意兼容性,优先通过主题和封装组件统一处理。 - 图表使用图表库,不手写业务图表。 - MUI、图标、图表能力尽量按需导入。 - 页面加载时需要占位图,占位图要有动画效果,并且刚好铺满内容区域。 - 动画效果要覆盖页面切换、按钮、菜单、弹窗、输入框、选择框、表格、图表等交互。 - Header 里的操作组件靠右,左侧只保留菜单收起按钮和当前页 tab。 - 时间筛选放在总览页面内容区,不放在 Header。 - 点击顶部搜索框打开大搜索弹窗,弹窗输入框展示可点击结果列表。 - 左侧菜单 hover 不能覆盖 active 视觉状态。 - 当前页 tab 需要有简单阴影效果。 - 总览旁边的菜单按钮负责展开/收起侧边栏,并且图标要跟随状态变化。 - Logo 区域和展开态侧边栏宽度要比初始版本更宽。 ## 技术栈 - React 19 - Vite 8 - MUI 9 - ECharts 6 - pnpm ## 运行 ```bash pnpm install pnpm dev ``` 默认访问: ```text http://localhost:7001 ``` 构建: ```bash pnpm build ``` ## 实现写法 - `src/App.jsx` 只负责应用状态、页面切换、抽屉挂载和数据分发。 - 页面模块放在 `src/pages/`: - `OverviewPage.jsx` - `ServicesPage.jsx` - `UserManagementPage.jsx` - 基础组件放在 `src/components/base/`,对 MUI 做项目级封装: - `Button` - `IconButton` - `Card` - `SearchBox` - `FilterChip` - `KpiCard` - `SegmentControl` - 当前共享后台组件统一放在 `src/shared/ui/`;资源组字段统一使用 `ResourceGroupSelectDrawer.jsx` 导出的 `ResourceGroupSelectField`,点击输入框打开右侧资源组图标抽屉,选择后自动回填,不在业务页面里手写资源组下拉或资源组 ID 输入框。 - 布局组件放在 `src/components/layout/`: - `Header` - `Sidebar` - `PageHead` - `PageSkeleton` - 图表组件放在 `src/components/charts/`,统一封装 ECharts: - `EChart` - `LineChart` - `BarChart` - `StatusDonut` - `ChartCard` - 服务业务组件放在 `src/components/service/`: - `ServiceTable` - `ServerRail` - `DetailPanel` - `RowActions` - `ResourceCell` - `StatusBadge` - 常量、模拟数据和工具函数分别放在: - `src/constants/` - `src/data/` - `src/utils/` ## 样式约定 - 全局设计 token 在 `src/styles/tokens.css`。 - 基础 reset 在 `src/styles/base.css`。 - 页面布局、模块样式、动画在 `src/styles/app.css`。 - MUI 主题集中在 `src/theme.js`,优先在主题层统一颜色、圆角、hover、focus 和组件兼容样式。 - 避免在页面里直接散落 MUI 组件样式;优先改项目封装组件。 - 状态色必须保持语义一致: - 运行中:`--success` - 警告:`--warning` - 异常:`--danger` - 已停止:`--stopped` ## 按需导入约定 - MUI 组件使用路径导入,例如 `@mui/material/Button`。 - MUI 图标使用路径导入,例如 `@mui/icons-material/Refresh`。 - 不使用 `@mui/material` 或 `@mui/icons-material` 总入口导入。 - ECharts 通过封装组件按需加载所需图表和组件能力。 - 页面使用 `React.lazy` 拆分: - `OverviewPage` - `ServicesPage` - `DetailDrawer` ## 动画与加载 - 页面切换、卡片进入、表格行进入、图表进入、抽屉显示/消失都有统一动效。 - 按钮、菜单、输入框、选择框、筛选项、状态徽标、进度条都有 hover/focus/active 反馈。 - `PageSkeleton` 是页面加载占位图,使用 MUI `Skeleton`,铺满 `workspace` 内容区域。 - 支持 `prefers-reduced-motion: reduce` 降级。 - 顶部搜索弹窗按需加载,点击结果后打开服务详情。 - 侧边栏支持展开/收起状态,展开态宽度为 248px。 ## 文案约定 - 不写无意义介绍、营销口号、功能解释文案。 - 只保留运维用户完成工作所需要的标签、状态、数据和操作。