PricingTable 价格表
用于展示不同订阅方案/套餐的对比价格表,桌面端为表格布局、移动端自动切换为卡片列表,支持高亮推荐方案与自定义插槽。
响应式价格方案表格组件,以分层级的价格方案展示功能对比。桌面端自动切换为横向表格布局便于对比,移动端切换为纵向卡片布局提升可读性。
何时使用
- SaaS 产品定价页、订阅方案对比。
- 需要以表格形式横向对比多个方案的功能差异时。
- 适合 2~4 个价格层级的场景。
导入
代码演示
基础用法
通过 tiers 定义价格层级,通过 sections 定义功能区段。功能值支持 boolean(显示 ✓ / -)、string 和 number。
仅展示层级(无功能对比)
不传 sections 时,仅展示各层级的价格信息和 CTA 按钮。
折扣价
通过 discount 设置折扣价,会以删除线显示在原价旁边。
使用插槽自定义
组件支持通用插槽和按 ID 定位的特定插槽。特定插槽优先级高于通用插槽。
API
Props
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| tiers | 价格层级列表(必填) | PricingTableTier[] | - |
| sections | 功能区段列表 | PricingTableSection[] | - |
| caption | 表格标题(无障碍,视觉隐藏) | string | - |
| class | 附加类名 | string | - |
PricingTableTier
| 属性 | 说明 | 类型 |
|---|---|---|
| id | 唯一标识符(必填) | string |
| title | 方案名称 | string |
| description | 方案描述 | string |
| price | 当前价格 | string |
| discount | 折扣价(删除线展示) | string |
| billingCycle | 价格周期(如 "/月") | string |
| billingPeriod | 计费说明(如 "按年计费") | string |
| badge | 标题旁的徽章文字 | string |
| button | CTA 按钮配置 | { label?: string; variant?: ButtonVariants["variant"]; size?: ButtonVariants["size"] } |
| highlight | 是否高亮此层级 | boolean |
PricingTableSection
| 属性 | 说明 | 类型 |
|---|---|---|
| title | 区段标题 | string |
| id | 区段标识符(用于插槽定位,可选) | string |
| features | 功能列表 | PricingTableSectionFeature[] |
PricingTableSectionFeature
| 属性 | 说明 | 类型 |
|---|---|---|
| title | 功能标题 | string |
| tiers | 各层级对应值。true 显示 ✓,false 显示 -,string/number 显示文本 | Record<string, boolean | string | number> |
Slots
组件支持通用插槽和特定插槽,特定插槽优先级更高。
| 插槽类型 | 模式 | 说明 | 示例 |
|---|---|---|---|
| 层级插槽 | #{tier-id}-{element} | 定位特定层级 | #team-title、#solo-price |
| 区段插槽 | #section-{id|formatted-title}-title | 定位特定区段 | #section-security-title |
| 功能插槽 | #feature-{formatted-title}-value | 定位特定功能值 | #feature-开发者-value |
| 通用插槽 | #tier-title 等 | 应用到所有项 | #feature-value |
通用插槽列表:
| 名称 | 说明 | 插槽参数 |
|---|---|---|
| tier-title | 层级标题 | { tier } |
| tier-description | 层级描述 | { tier } |
| tier-price | 层级价格 | { tier } |
| tier-billing | 计费信息 | { tier } |
| tier-button | CTA 按钮 | { tier } |
| section-title | 区段标题 | { section } |
| feature-title | 功能标题 | { feature } |
| feature-value | 功能值 | { feature, tier, value } |
当区段或功能没有显式
id时,插槽名由标题自动生成(转为 kebab-case)。
响应式行为
- 桌面端(md 及以上):渲染为 HTML
<table>,各层级为列,功能为行,便于横向对比。 - 移动端(md 以下):渲染为卡片列表,每个卡片为一个层级,功能在卡片内纵向排列。
