更新记录

1.0(2026-07-02) 下载此版本

更新日志

v1.0.0 (2026-07-02)


平台兼容性

uni-app(3.7.13)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟

uni-app x(3.7.10)

Chrome Safari Android iOS 鸿蒙 微信小程序

sku-engine - SKU 规格组合算法引擎 (Vue3)

一款专为 uni-app Vue3 打造的纯 JavaScript SKU 规格组合算法引擎。采用路径字典(Path Dictionary)核心架构,完美解决电商多规格商品的库存映射与规格联动难题。

✅ 纯逻辑 ✅ 零依赖 ✅ 无 UI ✅ 全平台兼容

📦 安装与引入

方式一:直接引入(推荐)

将 sku-engine.js 放入项目 utils/ 目录,或直接放入 uni_modules/tom-sku-engine/。 // 路径根据你存放的位置调整 import { createSkuEngine } from '@/utils/sku-engine.js'; // 或 uni_modules 方式 import { createSkuEngine } from '@/uni_modules/tom-sku-engine/index.js';

方式二:npm(如需)

npm install @/uni_modules/tom-sku-engine

📝 数据格式约定

  1. 规格维度 (specs)

定义商品有哪些规格属性(如颜色、尺寸)。 const specs = [ { name: '颜色' }, { name: '尺寸' }, { name: '材质' } ];

  1. SKU 列表 (skus)

定义具体的规格组合及其价格、库存。 const skus = [ { id: 1, price: 99, stock: 50, specCombination: ['白色', 'M', '纯棉'] }, { id: 2, price: 109, stock: 30, specCombination: ['白色', 'L', '纯棉'] }, { id: 3, price: 119, stock: 0, specCombination: ['黑色', 'M', '纯棉'] }, // 无货 { id: 4, price: 129, stock: 20, specCombination: ['黑色', 'L', '涤纶'] } ];

🚀 快速开始

// 1. 创建引擎实例 const engine = createSkuEngine(specs, skus);

// 2. 判断规格组合是否有货 engine.isSpecAvailable(['白色', 'M']); // true engine.isSpecAvailable(['黑色', 'M']); // false (库存为 0)

// 3. 获取选中 SKU 的详细信息 const skuInfo = engine.getSkuInfo(['白色', 'M']); console.log(skuInfo); // { // id: 1, // price: 99, // stock: 50, // specCombination: ['白色', 'M', '纯棉'] // }

// 4. 获取价格区间 engine.getPriceRange(); // { min: 99, max: 129 }

📖 API 文档

createSkuEngine(specs, skus)

工厂函数,用于创建 SKU 引擎实例。

参数 类型 必填 说明

specs Array 是 规格维度数组

skus Array 是 SKU 库存数组

engine.isSpecAvailable(selectedSpecs)

判断当前选中的规格组合是否有库存。

参数 类型 必填 说明

selectedSpecs Array 是 选中的规格数组,如 ['白色', 'M']

返回值: Boolean

engine.getSkuInfo(selectedSpecs)

获取指定规格组合的 SKU 完整信息。

参数 类型 必填 说明

selectedSpecs Array 是 选中的规格数组

返回值: Object | null (包含 id, price, stock, specCombination)

engine.getAvailableOptions(selectedSpecs)

规格联动核心方法。根据已选规格,返回其他维度还有哪些可选。

参数 类型 必填 说明

selectedSpecs Array 是 已选中的规格数组

返回值: Object // 示例:已选 ['白色'] { "颜色": [], // 已选,通常为空或包含当前 "尺寸": ["M", "L"], // 白色下还有货的尺寸 "材质": ["纯棉"] // 白色下还有货的材质 }

engine.getAllAvailableSkus()

获取所有有库存的 SKU 列表。

返回值: Array

engine.getPriceRange()

获取当前所有有货 SKU 的价格区间。

返回值: Object ({ min: Number, max: Number })

💡 实战示例:规格联动逻辑

假设用户已经选了"白色",你想知道接下来哪些"尺寸"和"材质"还能点: // 用户已选 const selected = ['白色'];

// 获取剩余可选 const options = engine.getAvailableOptions(selected);

console.log(options['尺寸']); // ['M', 'L'] console.log(options['材质']); // ['纯棉']

// 此时 UI 层可以将 ['黑色'] 对应的按钮置灰,因为 engine.isSpecAvailable(['黑色', 'M']) 为 false

⚠️ 注意事项

  1. 顺序无关性:算法内部会对 specCombination 排序后生成 Key,因此 ['白色','M'] 和 ['M','白色'] 被视为同一组合。
  2. 数据完整性:确保 skus 数组中每个对象的 specCombination 长度与 specs 数组长度一致。
  3. 性能:构建 pathMap 的时间复杂度为 O(n),后续查询为 O(1),适合大量 SKU 场景。
  4. 平台兼容:纯 JS 实现,支持微信小程序、H5、App、支付宝小程序等所有 uni-app 支持的平台。

📄 License

MIT License

Copyright (c) 2026 sku-engine

🤝 支持与反馈

如有问题或建议,请在 DCloud 插件市场留言,或通过以下方式联系:

• DCloud 插件市场: https://ext.dcloud.net.cn/plugin?id=xxxx

• Email: your.email@example.com

⭐ 如果这个插件对你有帮助,欢迎在插件市场点赞支持!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。