当前位置:首页 > VUE

vue sku 实现

2026-03-07 16:00:30VUE

Vue SKU 实现

在电商系统中,SKU(Stock Keeping Unit)是商品的最小库存单位,通常由多个属性组合而成(如颜色、尺寸等)。以下是基于 Vue 实现 SKU 选择功能的核心方法和代码示例。

数据结构设计

SKU 的实现通常需要定义商品属性和 SKU 列表。以下是一个基础数据结构示例:

vue sku 实现

data() {
  return {
    // 商品属性(如颜色、尺寸)
    attributes: [
      {
        name: '颜色',
        values: ['红色', '蓝色', '绿色']
      },
      {
        name: '尺寸',
        values: ['S', 'M', 'L']
      }
    ],
    // SKU 列表(包含库存和价格)
    skus: [
      { color: '红色', size: 'S', stock: 10, price: 100 },
      { color: '红色', size: 'M', stock: 5, price: 120 },
      { color: '蓝色', size: 'L', stock: 0, price: 150 }
    ],
    // 用户已选中的属性
    selected: {
      color: '',
      size: ''
    }
  }
}

动态计算可用 SKU

根据用户选择的属性,过滤出可用的 SKU 组合,并禁用无库存的选项:

vue sku 实现

computed: {
  // 获取当前可选的 SKU 组合
  availableSkus() {
    return this.skus.filter(sku => {
      return (
        (this.selected.color === '' || sku.color === this.selected.color) &&
        (this.selected.size === '' || sku.size === this.selected.size)
      )
    })
  },

  // 禁用无库存的属性选项
  disabledItems() {
    const disabled = {}
    this.attributes.forEach(attr => {
      attr.values.forEach(value => {
        const key = `${attr.name.toLowerCase()}:${value}`
        disabled[key] = !this.skus.some(sku => {
          const matchSelected = Object.entries(this.selected)
            .filter(([k, v]) => k !== attr.name.toLowerCase())
            .every(([k, v]) => v === '' || sku[k] === v)
          return matchSelected && sku[attr.name.toLowerCase()] === value && sku.stock > 0
        })
      })
    })
    return disabled
  }
}

模板渲染

在模板中渲染属性选择器,并根据计算属性禁用不可选项:

<template>
  <div v-for="attr in attributes" :key="attr.name">
    <h3>{{ attr.name }}</h3>
    <button
      v-for="value in attr.values"
      :key="value"
      @click="selected[attr.name.toLowerCase()] = value"
      :disabled="disabledItems[`${attr.name.toLowerCase()}:${value}`]"
      :class="{ active: selected[attr.name.toLowerCase()] === value }"
    >
      {{ value }}
    </button>
  </div>

  <div v-if="availableSkus.length">
    <p>可选 SKU: {{ availableSkus.length }}</p>
    <p>价格范围: {{ minPrice }} - {{ maxPrice }}</p>
  </div>
</template>

完整交互逻辑

添加方法处理用户选择,并计算价格范围等:

methods: {
  resetSelection() {
    this.selected = { color: '', size: '' }
  }
},
computed: {
  minPrice() {
    return Math.min(...this.availableSkus.map(sku => sku.price))
  },
  maxPrice() {
    return Math.max(...this.availableSkus.map(sku => sku.price))
  }
}

扩展功能

  1. 多级属性:支持更多属性(如材质、版本等),只需扩展 attributesskus 数据结构。
  2. SKU 图片切换:根据选择的属性动态切换商品图片。
  3. 组合禁用提示:当用户选择无效组合时,显示提示信息。

通过以上方法,可以实现一个基础的 Vue SKU 选择功能,适用于大多数电商场景。

标签: vuesku
分享给朋友:

相关文章

vue实现modal

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基础…

vue实现返回

vue实现返回

返回按钮功能实现 在Vue中实现返回功能通常有两种方式:使用浏览器历史记录的history.back()或结合Vue Router进行编程式导航。以下是具体实现方法: 使用浏览器API metho…

vue 实现轮播

vue 实现轮播

Vue 实现轮播的方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template&…

vue多选实现

vue多选实现

Vue 多选实现方法 基础实现(v-model + multiple) 在 Vue 中实现多选可以通过 <select> 元素的 multiple 属性结合 v-model 完成。v-mo…

vue 实现评分

vue 实现评分

Vue 实现评分功能 在 Vue 中实现评分功能可以通过多种方式完成,包括使用第三方组件库或自定义实现。以下是两种常见的方法: 使用第三方组件库(如 Element UI) Element UI 提…

vue实现增加

vue实现增加

实现 Vue 中的新增功能 在 Vue 中实现新增功能通常涉及数据绑定、表单处理和状态管理。以下是几种常见的实现方式: 数据绑定与列表渲染 通过 v-model 绑定表单输入,使用数组的 push…