更新记录
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
📝 数据格式约定
- 规格维度 (specs)
定义商品有哪些规格属性(如颜色、尺寸)。 const specs = [ { name: '颜色' }, { name: '尺寸' }, { name: '材质' } ];
- 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
⚠️ 注意事项
- 顺序无关性:算法内部会对 specCombination 排序后生成 Key,因此 ['白色','M'] 和 ['M','白色'] 被视为同一组合。
- 数据完整性:确保 skus 数组中每个对象的 specCombination 长度与 specs 数组长度一致。
- 性能:构建 pathMap 的时间复杂度为 O(n),后续查询为 O(1),适合大量 SKU 场景。
- 平台兼容:纯 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
⭐ 如果这个插件对你有帮助,欢迎在插件市场点赞支持!

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 0
赞赏 0
下载 12378357
赞赏 1928
赞赏
京公网安备:11010802035340号