当前位置:首页 > VUE

vue实现商品sku

2026-01-18 07:02:32VUE

Vue 实现商品 SKU 选择功能

数据结构设计

商品 SKU 通常由多个属性组合而成,例如颜色、尺寸等。需要设计一个嵌套数据结构来存储这些信息。

data() {
  return {
    skuData: {
      colors: ['红色', '蓝色', '绿色'],
      sizes: ['S', 'M', 'L'],
      // 库存信息,key 为属性组合
      stock: {
        '红色-S': 10,
        '红色-M': 5,
        '蓝色-L': 8
        // 其他组合...
      }
    },
    selected: {
      color: '',
      size: ''
    }
  }
}

模板渲染

使用 v-for 循环渲染可选的 SKU 属性,并通过计算属性判断哪些选项可选。

<div class="sku-selector">
  <div class="attribute">
    <h3>颜色</h3>
    <button 
      v-for="color in skuData.colors" 
      :key="color"
      @click="selectAttribute('color', color)"
      :class="{ active: selected.color === color, disabled: !isAttributeAvailable('color', color) }"
    >
      {{ color }}
    </button>
  </div>

  <div class="attribute">
    <h3>尺寸</h3>
    <button 
      v-for="size in skuData.sizes" 
      :key="size"
      @click="selectAttribute('size', size)"
      :class="{ active: selected.size === size, disabled: !isAttributeAvailable('size', size) }"
    >
      {{ size }}
    </button>
  </div>
</div>

交互逻辑实现

实现属性选择和库存检查的方法。

methods: {
  selectAttribute(type, value) {
    this.selected[type] = value
    this.checkCombination()
  },

  isAttributeAvailable(type, value) {
    const tempSelected = { ...this.selected }
    tempSelected[type] = value
    const combination = this.getCombinationKey(tempSelected)
    return this.skuData.stock[combination] > 0
  },

  getCombinationKey(selected) {
    return `${selected.color}-${selected.size}`
  },

  checkCombination() {
    const combination = this.getCombinationKey(this.selected)
    if (this.skuData.stock[combination]) {
      console.log('当前选择有库存')
    } else {
      console.log('当前选择无库存')
    }
  }
}

样式处理

为选中的状态和不可选状态添加样式区分。

.sku-selector button {
  margin: 5px;
  padding: 8px 12px;
  border: 1px solid #ddd;
  background: #fff;
  cursor: pointer;
}

.sku-selector button.active {
  border-color: #ff6700;
  color: #ff6700;
}

.sku-selector button.disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

完整示例改进

对于更复杂的 SKU 情况,可以使用递归组件处理多级属性。

vue实现商品sku

// SKU 组件
Vue.component('sku-selector', {
  props: ['attributes', 'selected', 'stock'],
  template: `
    <div class="sku-attribute">
      <h3>{{ attributes.name }}</h3>
      <div class="sku-values">
        <button
          v-for="value in attributes.values"
          :key="value"
          @click="$emit('select', attributes.name, value)"
          :class="{
            active: selected[attributes.name] === value,
            disabled: !isAvailable(attributes.name, value)
          }"
        >
          {{ value }}
        </button>
      </div>
    </div>
  `,
  methods: {
    isAvailable(name, value) {
      const temp = { ...this.selected, [name]: value }
      return this.checkStock(temp)
    },
    checkStock(selected) {
      const key = Object.values(selected).join('-')
      return this.stock[key] > 0
    }
  }
})

注意事项

  • 后端 API 通常返回所有 SKU 组合及其库存信息
  • 对于大量 SKU 的情况,考虑性能优化,如虚拟滚动
  • 可以添加 SKU 图片切换功能,当选择不同颜色时显示对应商品图
  • 移动端适配需要考虑触摸反馈和布局调整

这种实现方式提供了良好的用户体验,清晰地展示了可选和不可选的 SKU 组合,帮助用户快速完成商品规格选择。

标签: 商品vue
分享给朋友:

相关文章

vue原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Objec…

vue实现同步

vue实现同步

Vue 实现同步的方法 在 Vue 中实现同步操作通常涉及数据绑定、状态管理和异步操作的处理。以下是几种常见的方法: 使用计算属性(Computed Properties) 计算属性基于响应式依赖进…

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue alert实现

vue alert实现

使用 Vue 实现 Alert 组件 在 Vue 中实现 Alert 组件可以通过自定义组件或结合第三方库完成。以下是几种常见方法: 自定义 Alert 组件 创建一个可复用的 Alert 组件,通…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…