跳转到正文

组件层 ​

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