当前位置:首页 > VUE

vue实现sku表格

2026-01-16 20:56:55VUE

Vue实现SKU表格的方法

SKU(Stock Keeping Unit)表格常用于电商平台展示商品的多属性组合,例如颜色、尺寸等。以下是基于Vue的实现方法:

数据结构设计

SKU的核心是属性组合,需先设计合理的数据结构:

data() {
  return {
    attributes: [
      { name: '颜色', values: ['红色', '蓝色', '绿色'] },
      { name: '尺寸', values: ['S', 'M', 'L'] }
    ],
    skus: []
  }
}

生成所有可能的SKU组合

使用递归或循环生成所有属性组合:

vue实现sku表格

methods: {
  generateSKUs() {
    this.skus = this.cartesianProduct(
      ...this.attributes.map(attr => attr.values)
    ).map(comb => ({
      combination: comb,
      price: 0,
      stock: 0
    }))
  },
  cartesianProduct(...a) {
    return a.reduce((a, b) => 
      a.flatMap(d => b.map(e => [d, e].flat()))
    , [[]])
  }
}

表格渲染实现

使用动态表格渲染SKU组合:

<template>
  <table>
    <thead>
      <tr>
        <th v-for="attr in attributes" :key="attr.name">
          {{ attr.name }}
        </th>
        <th>价格</th>
        <th>库存</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="(sku, index) in skus" :key="index">
        <td v-for="(value, i) in sku.combination" :key="i">
          {{ value }}
        </td>
        <td>
          <input v-model.number="sku.price" type="number">
        </td>
        <td>
          <input v-model.number="sku.stock" type="number">
        </td>
      </tr>
    </tbody>
  </table>
</template>

性能优化建议

当属性较多时,SKU组合会指数级增长,可采用以下优化方案:

vue实现sku表格

  1. 虚拟滚动:只渲染可视区域内的行

    <template>
    <virtual-list :size="40" :remain="20">
     <!-- SKU行内容 -->
    </virtual-list>
    </template>
  2. 分页加载:将SKU数据分页处理

    paginatedSKUs() {
    return this.skus.slice(
     (this.currentPage - 1) * this.pageSize,
     this.currentPage * this.pageSize
    )
    }
  3. 懒生成:只在需要时生成特定SKU组合

完整组件示例

<template>
  <div>
    <button @click="generateSKUs">生成SKU</button>
    <table v-if="skus.length">
      <!-- 表头 -->
      <thead>...</thead>
      <!-- 表体 -->
      <tbody>...</tbody>
    </table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      attributes: [...],
      skus: []
    }
  },
  methods: {
    generateSKUs() {
      // 生成逻辑
    },
    cartesianProduct() {
      // 笛卡尔积计算
    }
  }
}
</script>

注意事项

  1. 深度监听SKU变化时可能需要使用deep: true选项
  2. 大量数据时考虑使用Web Worker进行组合计算
  3. 可添加SKU图片上传等扩展功能
  4. 建议为每个SKU添加唯一ID便于管理

标签: 表格vue
分享给朋友:

相关文章

vue实现验证码

vue实现验证码

Vue 实现验证码的方法 使用第三方库 安装 vue-captcha 或 vue-recaptcha 等第三方库,这些库提供了现成的验证码组件,可以直接集成到 Vue 项目中。以 vue-recapt…

vue 动画 实现

vue 动画 实现

vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要包括过渡动画和动态动画两类。 使用 <transition> 组件实现基础过渡 通过 Vue 内置的 <transit…

vue实现driver

vue实现driver

Vue 实现 Driver.js 引导功能 Driver.js 是一个轻量级的 JavaScript 库,用于在网页上创建引导式导览。以下是在 Vue 项目中集成 Driver.js 的详细方法:…

vue实现getapp

vue实现getapp

Vue 中实现全局获取应用实例的方法 在 Vue 3 中,可以通过 getCurrentInstance 方法获取当前组件实例,但需要明确其使用场景和限制。以下是具体实现方式: 方法一:通过 get…

vue实现addclass

vue实现addclass

Vue 实现动态添加 class 的方法 在 Vue 中动态添加 class 可以通过多种方式实现,以下是常见的几种方法: 使用对象语法 通过绑定一个对象到 :class,可以动态切换 class…

vue实现tabs

vue实现tabs

Vue实现Tabs组件的方法 使用动态组件和v-for指令 在Vue中创建Tabs组件可以通过动态组件和v-for指令实现。定义一个包含tab标题和内容的数组,使用v-for渲染tab标题,并通过点击…