当前位置:首页 > 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 属性,并通过计算属性判断哪些选项可选。

vue实现商品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>

交互逻辑实现

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

vue实现商品sku

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 情况,可以使用递归组件处理多级属性。

// 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 实现全文检索的方法 客户端全文检索(适用于小型数据集) 使用 flexsearch 或 lunr.js 等轻量级库实现前端全文检索: import FlexSearch from 'flex…

vue实现sql操作

vue实现sql操作

在Vue中实现SQL操作通常需要结合后端服务或本地数据库技术,因为前端JavaScript无法直接连接SQL数据库。以下是几种常见的实现方式: 通过API与后端交互 Vue前端通过HTTP请求(如a…

vue表单实现搜索

vue表单实现搜索

实现Vue表单搜索功能 在Vue中实现表单搜索功能通常涉及表单绑定、事件处理和搜索逻辑。以下是具体实现方法: 数据绑定与表单结构 使用v-model实现表单与Vue数据的双向绑定: <t…

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &…

vue实现矩阵

vue实现矩阵

Vue 实现矩阵的方法 在 Vue 中实现矩阵操作可以通过多种方式完成,以下是一些常见的方法: 使用二维数组表示矩阵 矩阵可以用二维数组来表示,每个元素对应矩阵中的一个值。在 Vue 的 data…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…