跳转到正文

组件层

frontend/src/components/ 承担视图复用与交互封装职责,按能力分为两层:

  • components/ui/:基础 UI 组件,服务于通用展示、输入与交互
  • components/*.tsx:业务组件,服务于特定页面或领域对象

基础 UI 组件

表单与输入

组件职责
Input / Textarea / Select / Checkbox / RadioGroup提供基础输入能力
PasswordInput封装密码可见性与输入体验
Autocomplete提供带提示的输入交互
FormField统一字段布局与错误承载
Label / Separator提供基础信息组织能力

对话框与反馈

组件职责
Dialog提供统一弹窗容器
Toast承载全局通知展示
Tooltip提供补充说明层
LoadingButton统一按钮加载态

表格与列表

组件职责
DataTable提供表格渲染骨架
DataTableHeader处理表头排序与列宽交互
DataTableBody处理行渲染、展开与虚拟区
FilterTable组合筛选、表格和分页形成页面骨架
TableFilters统一搜索、筛选与空状态入口
Pagination提供分页控制
StaleBanner提示列表数据已过期,需要刷新

展示组件

组件职责
StatusBadge显示状态标签
QuantityIndicator显示数量状态
HighlightText显示关键词高亮结果
HazardousIcon显示危险品标识
NoteDisplay展示长文本备注
MoleculeStructure展示分子结构
Avatar / Card / Tabs提供通用展示容器

业务组件

表单与对话框

组件职责
BaseForm基于配置渲染表单
BorrowDialog提供借用确认流程
UserEditDialog提供用户编辑、头像和密码管理
EditDialogActions提供编辑弹窗底部动作区

表格展开与详情

组件职责
ReagentOrderExpandedRow展示试剂订单展开详情
ConsumableOrderExpandedRow展示耗材订单展开详情
ReagentCasDuplicateWarning提示同 CAS 风险

公告与反馈

组件职责
AnnouncementBanner展示顶部公告条
AnnouncementButton提供公告入口
AnnouncementDetail展示公告详情
BugReportButton提供问题反馈入口

页面级辅助

组件职责
SidebarLogo提供侧栏品牌展示
TableActionButtons统一列表操作按钮
ErrorBoundary作为页面级运行时兜底

职责边界

组件层只负责视图表达和局部交互,不承载这些职责:

  • 拼接后端地址
  • 管理复杂缓存策略
  • 将完整表单规则硬编码进 JSX

这些职责应分别放入 hooks/lib/api/client.ts

改动入口

  • 新增通用输入或弹窗能力时,优先考虑 components/ui/
  • 新增页面专用交互时,优先放入 components/*.tsx
  • 表单字段、校验、表格列定义应分别回到 lib/ 的配置层
  • 涉及状态或请求逻辑时,不应继续向组件层堆叠

阅读顺序

理解表格页

  1. FilterTable
  2. DataTable
  3. DataTableHeader
  4. DataTableBody
  5. TableFilters

理解表单体系

  1. BaseForm
  2. FormField
  3. Dialog
  4. lib/formConfigs.tsx
  5. lib/validationSchemas.ts

验证建议

  • 新组件是否只承担单一职责
  • 组件是否避免直接依赖接口地址和缓存实现
  • 业务组件是否复用已有基础 UI 组件
  • 表单和表格相关改动是否能在现有配置层完成

参考代码

开源项目 · Apache-2.0 license