/** 笛卡尔积生成规格组合 */ export function buildSpecCombos(specs) { const groups = (specs || []) .map((s) => ({ name: s.name, values: (s.values || []).filter((v) => v.selected) })) .filter((g) => g.values.length); if (!groups.length) return []; return groups.reduce( (acc, g) => { const next = []; acc.forEach((prev) => { g.values.forEach((v) => { next.push({ label: prev.label ? `${prev.label} | ${v.name}` : v.name, keys: [...(prev.keys || []), v.id], price: '', sellingPrice: '', stock: '', costPrice: '' }); }); }); return next; }, [{ label: '', keys: [] }] ); }