跳转到正文

组件层

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

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

基础 UI 组件

表单与输入

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

对话框与反馈

组件职责
Dialog提供统一弹窗容器
Toast承载全局通知展示
Tooltip提供补充说明层
LoadingButton统一按钮加载态
ConfirmDeleteButton在删除前提供同按钮二次确认,可复用普通按钮或加载按钮外观

表格与列表

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

展示组件

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

业务组件

表单与对话框

组件职责
BaseForm基于配置渲染表单
BorrowDialog提供借用确认流程
UserEditDialog提供用户编辑、头像和密码管理
ReagentBrandManagementDialogs提供试剂品牌列表、新增、编辑和停用流程
EditDialogActions提供编辑弹窗底部动作区,并复用删除二次确认按钮

表格展开与详情

组件职责
ReagentOrderExpandedRow展示试剂订单展开详情
ConsumableOrderExpandedRow展示耗材订单展开详情
OperationLogExpandedRow展示操作日志和库存操作记录的结构化详情,包括修改前后值
ReagentCasDuplicateWarning提示同 CAS 风险
ProcedureInventorySearchButton承载实验步骤输入、分段解析进度和错误状态
ProcedureInventoryAnalysisPanel展示原文高亮、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