重构 Rule 组件