当前位置:首页 > VUE

vue实现商品多规格

2026-02-24 04:56:32VUE

Vue 实现商品多规格功能

数据结构设计

商品多规格通常需要嵌套数据结构,常见方案是使用skusspecs的组合。例如:

data() {
  return {
    product: {
      specs: [
        {
          name: '颜色',
          values: ['红色', '黑色', '金色']
        },
        {
          name: '内存',
          values: ['64G', '128G', '256G']
        }
      ],
      skus: [
        {
          specValues: ['红色', '64G'],
          price: 5999,
          stock: 100
        },
        // 其他SKU组合...
      ]
    }
  }
}

规格选择交互

使用v-for渲染规格选项,并通过计算属性处理选中状态:

<div v-for="spec in product.specs" :key="spec.name">
  <h3>{{ spec.name }}</h3>
  <button 
    v-for="value in spec.values"
    :key="value"
    @click="selectSpec(spec.name, value)"
    :class="{ active: isSelected(spec.name, value) }"
  >
    {{ value }}
  </button>
</div>

状态管理逻辑

通过selectedSpecs对象记录当前选择,并实时计算可用SKU:

methods: {
  selectSpec(specName, value) {
    this.$set(this.selectedSpecs, specName, value)
  },
  isSelected(specName, value) {
    return this.selectedSpecs[specName] === value
  }
},
computed: {
  availableSkus() {
    return this.product.skus.filter(sku => {
      return Object.entries(this.selectedSpecs).every(
        ([specName, value]) => sku.specValues.includes(value)
      )
    })
  }
}

库存与价格联动

根据当前选择的规格组合显示对应信息:

<div v-if="currentSku">
  <p>价格: {{ currentSku.price }}</p>
  <p>库存: {{ currentSku.stock }}</p>
</div>
computed: {
  currentSku() {
    return this.availableSkus.find(sku => 
      sku.specValues.length === Object.values(this.selectedSpecs).length
    )
  }
}

禁用不可选规格

通过计算属性实现规格的禁用状态:

vue实现商品多规格

computed: {
  isDisabled() {
    return (specName, value) => {
      const tempSelected = {...this.selectedSpecs, [specName]: value}
      return !this.product.skus.some(sku =>
        Object.entries(tempSelected).every(
          ([name, val]) => sku.specValues.includes(val)
        )
      )
    }
  }
}

完整组件示例

<template>
  <div class="spec-container">
    <!-- 规格选择区域 -->
    <div v-for="spec in product.specs" :key="spec.name">
      <h3>{{ spec.name }}</h3>
      <button
        v-for="value in spec.values"
        :key="value"
        @click="selectSpec(spec.name, value)"
        :class="{
          active: isSelected(spec.name, value),
          disabled: isDisabled(spec.name, value)
        }"
        :disabled="isDisabled(spec.name, value)"
      >
        {{ value }}
      </button>
    </div>

    <!-- 商品信息展示 -->
    <div v-if="currentSku" class="sku-info">
      <p>已选择: {{ Object.values(selectedSpecs).join(' + ') }}</p>
      <p>价格: ¥{{ currentSku.price }}</p>
      <p>库存: {{ currentSku.stock }}件</p>
    </div>
  </div>
</template>

标签: 规格商品
分享给朋友:

相关文章

uniapp商品列表

uniapp商品列表

商品列表实现方法 在uniapp中实现商品列表功能,可以通过多种方式完成,以下是几种常见的方法: 使用scroll-view组件实现滚动列表 <scroll-view scroll-y="t…

vue 实现商品列表

vue 实现商品列表

实现商品列表的基本结构 在Vue中实现商品列表,通常需要创建一个组件来展示商品数据。可以使用v-for指令循环渲染商品列表,并通过数据绑定动态显示商品信息。 <template> &…

vue element 实现商品sku

vue element 实现商品sku

商品SKU实现方法 在Vue和Element UI中实现商品SKU功能,可以通过以下步骤完成: 数据结构设计 商品SKU通常需要处理多个属性组合,每个属性有不同的选项。数据结构可以设计为: dat…

vue实现双列商品卡片

vue实现双列商品卡片

Vue 实现双列商品卡片 使用 Vue 实现双列商品卡片可以通过 flex 布局或 grid 布局实现,以下是两种常见方法: 方法一:使用 Flex 布局 <template>…

vue商品搜索怎么实现

vue商品搜索怎么实现

实现商品搜索功能 在Vue中实现商品搜索功能通常需要结合前端和后端技术。以下是常见的实现方法: 前端实现方案 创建搜索输入框和结果展示组件: <template> <div&…

vue实现商品添加功能

vue实现商品添加功能

Vue 实现商品添加功能 数据绑定与表单结构 使用 Vue 的 v-model 实现表单数据的双向绑定,构建商品添加表单的基础结构。表单通常包含商品名称、价格、库存、描述等字段。 <templ…