当前位置:首页 > 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广告实现

vue广告实现

Vue 广告实现方法 在 Vue 项目中实现广告功能可以通过多种方式完成,具体取决于广告类型和需求。以下是几种常见的实现方法: 使用第三方广告平台 许多广告平台如 Google AdSense、百…

vue实现效果

vue实现效果

以下是Vue实现常见效果的几种典型方法,分为不同场景说明: 数据绑定与响应式更新 使用v-model实现表单双向绑定: <template> <input v-model="…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

vue实现节流

vue实现节流

vue实现节流的方法 在Vue中实现节流(throttle)功能,通常用于限制高频事件的触发频率,例如滚动、输入或按钮点击。以下是几种常见的实现方式: 使用Lodash的throttle函数 安装L…

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HTM…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…