Skip to content

SKU Selector 规格选择器

电商核心组件,用于商品详情页的规格选择。内置「文字 / 图片 / 色块」三种展示模态、基于 SKU 矩阵的库存联动算法、已选汇总展示及完整的主题自定义能力。

基础用法

支持根据选中项自动计算可选状态,库存为 0 的规格组合将自动置灰。

颜色
尺寸

当前价格:请选择完整规格

实时剩余库存: --

规格筛选与库存联动

图片预览模式

支持在规格值中传入 image 属性,渲染为预览图。

颜色
尺寸
图片预览模式

色块模式

mode 设为 'color' 并为每个规格值传入 color 属性,即可渲染为色块选择器。

颜色
色块规格选择

已选规格汇总

开启 show-selected-summary 后,会在顶部显示当前选中的规格汇总文本,适合电商详情页场景。

请选择规格
颜色
尺寸
已选汇总展示

在 Nuxt 中使用

YhSkuSelector 完全兼容 Nuxt 3 SSR 环境,无需额外配置。

颜色
Nuxt 集成
ts
// nuxt.config.ts — 已通过 yh-ui 插件自动注册,无需额外导入
export default defineNuxtConfig({
  modules: ['yh-ui/nuxt']
})

API

Props

属性名说明类型默认值
model-value / v-model当前选中的规格值 ID 数组Array<string | number>[]
specs规格列表SkuSpec[][]
skusSKU 列表SkuItem[][]
check-stock是否开启库存联动(库存为0自动置灰)booleantrue
disabled整体禁用booleanfalse
allow-unselect是否允许点击已选中项来取消booleantrue
size规格按钮大小'small' | 'default' | 'large''default'
image-size图片模式下图片区域尺寸(px)number80
show-selected-summary是否显示顶部已选规格汇总booleanfalse
summary-prefix已选汇总文字前缀string''
theme-overridesCSS 主题变量覆盖Record<string, string>{}

Events

事件名说明回调参数
update:modelValuev-model 双向绑定(value: Array<string | number>) => void
change选中结果变化,sku 为 null 表示未完整选中(sku: SkuItem | null, selectedValues: Array<string | number>) => void
select点击某个规格值时触发(包含不可选的)(spec: SkuSpec, value: SkuSpecValue) => void

Slots

插槽名说明作用域参数
label自定义规格标题{ spec: SkuSpec }
value完全自定义规格值格子{ value: SkuSpecValue, spec: SkuSpec, active: boolean, disabled: boolean }
summary自定义已选规格汇总区域{ summary: string, sku: SkuItem | null }

Expose

当前组件未暴露公开实例方法或属性。

SkuSpec 类型

ts
interface SkuSpec {
  id: string | number
  name: string
  values: SkuSpecValue[]
  /** 展示模式:'text'(默认)| 'image' | 'color' */
  mode?: 'text' | 'image' | 'color'
}

SkuSpecValue 类型

ts
interface SkuSpecValue {
  id: string | number
  name: string
  image?: string // mode='image' 时使用
  color?: string // mode='color' 时使用
  disabled?: boolean
  tag?: string // 右上角标签,如 "热卖"
  [key: string]: unknown // 支持扩展任意自定义字段
}

SkuItem 类型

ts
interface SkuItem {
  id: string | number
  specValueIds: Array<string | number>
  price: number
  stock: number
  marketPrice?: number
  image?: string
  skuNo?: string
  [key: string]: unknown // 支持任意扩展字段
}

主题变量

通过 theme-overrides 传入对象可以覆盖以下 CSS 变量:

变量名说明默认值
--yh-sku-label-color规格标题颜色var(--yh-text-color-secondary)
--yh-sku-label-size规格标题字号var(--yh-font-size-sm)
--yh-sku-label-weight规格标题字重var(--yh-font-weight-medium)
--yh-sku-value-bg规格值默认背景var(--yh-fill-color-light)
--yh-sku-value-color规格值默认文字颜色var(--yh-text-color-primary)
--yh-sku-value-border规格值默认边框颜色var(--yh-border-color-light)
--yh-sku-value-hover-bg规格值悬浮背景var(--yh-fill-color-dark)
--yh-sku-value-active-bg选中态背景var(--yh-color-primary-light-9)
--yh-sku-value-active-color选中态文字/边框颜色var(--yh-color-primary)
--yh-sku-value-active-border选中态边框颜色var(--yh-color-primary)
--yh-sku-value-disabled-bg禁用态背景var(--yh-fill-color-extra-light)
--yh-sku-value-disabled-color禁用态文字颜色var(--yh-text-color-disabled)
--yh-sku-value-radius规格格子圆角var(--yh-radius-base)
--yh-sku-img-size图片规格的图片尺寸80px
--yh-sku-color-swatch-size色块规格的色块尺寸24px
--yh-sku-gap规格行间距var(--yh-spacing-md)

类型导出

名称说明
YhSkuSelectorProps组件 Props 类型
YhSkuSelectorEmits组件事件类型
YhSkuSelectorSlots组件插槽类型
YhSkuSpec规格组类型
YhSkuSpecValue规格值类型
YhSkuItemSKU 数据类型
YhSkuSelectorInstance组件实例类型

Released under the MIT License.