const list = [
{
options: [
{ value: "原厂质保", disabled: false },
{ value: "总成三大件", disabled: false },
],
currentValue: "",
},
{
options: [
{ value: "1年", disabled: false },
{ value: "2年", disabled: false },
{ value: "3年", disabled: false },
],
currentValue: "",
},
{
options: [
{ value: "1年", disabled: false },
{ value: "2年", disabled: false },
{ value: "3年", disabled: false },
{ value: "4年", disabled: false },
{ value: "5年", disabled: false },
{ value: "6年", disabled: false },
],
currentValue: "",
},
];
const skus = [
{ skuSpecValueList: ["原厂质保", "1年", "1年"] },
{ skuSpecValueList: ["原厂质保", "1年", "2年"] },
{ skuSpecValueList: ["原厂质保", "1年", "3年"] },
{ skuSpecValueList: ["原厂质保", "2年", "4年"] },
{ skuSpecValueList: ["原厂质保", "2年", "5年"] },
{ skuSpecValueList: ["原厂质保", "2年", "6年"] },
{ skuSpecValueList: ["原厂质保", "3年", "2年"] },
{ skuSpecValueList: ["原厂质保", "3年", "3年"] },
{ skuSpecValueList: ["原厂质保", "3年", "4年"] },
{ skuSpecValueList: ["原厂质保", "3年", "5年"] },
{ skuSpecValueList: ["原厂质保", "3年", "6年"] },
{ skuSpecValueList: ["总成三大件", "2年", "5年"] },
{ skuSpecValueList: ["总成三大件", "2年", "6年"] },
{ skuSpecValueList: ["总成三大件", "3年", "1年"] },
{ skuSpecValueList: ["总成三大件", "3年", "2年"] },
{ skuSpecValueList: ["总成三大件", "3年", "3年"] },
{ skuSpecValueList: ["总成三大件", "3年", "4年"] },
{ skuSpecValueList: ["总成三大件", "3年", "5年"] },
{ skuSpecValueList: ["总成三大件", "3年", "6年"] },
];
大佬们, 我想选择禁止选择不可以选的规格,如何搞啊, 想了好久了~
const allSpec = [
{
title: "规格1",
options: [
{
value: "原厂质保",
disabled: false,
selectable: [
["原厂质保", "1年", "1年"],
["原厂质保", "1年", "2年"],
["原厂质保", "1年", "3年"],
["原厂质保", "2年", "4年"],
["原厂质保", "2年", "5年"],
["原厂质保", "2年", "6年"],
["原厂质保", "3年", "2年"],
["原厂质保", "3年", "3年"],
["原厂质保", "3年", "4年"],
["原厂质保", "3年", "5年"],
["原厂质保", "3年", "6年"],
],
},
{
value: "总成三大件",
disabled: false,
selectable: [
["总成三大件", "2年", "5年"],
["总成三大件", "2年", "6年"],
["总成三大件", "3年", "1年"],
["总成三大件", "3年", "2年"],
["总成三大件", "3年", "3年"],
["总成三大件", "3年", "4年"],
["总成三大件", "3年", "5年"],
["总成三大件", "3年", "6年"],
],
},
],
currentValue: "总成三大件",
},
{
title: "规格2",
options: [
{
value: "1年",
disabled: true,
selectable: [
["原厂质保", "1年", "1年"],
["原厂质保", "1年", "2年"],
["原厂质保", "1年", "3年"],
],
},
{
value: "2年",
disabled: false,
selectable: [
["原厂质保", "2年", "4年"],
["原厂质保", "2年", "5年"],
["原厂质保", "2年", "6年"],
["总成三大件", "2年", "5年"],
["总成三大件", "2年", "6年"],
],
},
{
value: "3年",
disabled: false,
selectable: [
["原厂质保", "3年", "2年"],
["原厂质保", "3年", "3年"],
["原厂质保", "3年", "4年"],
["原厂质保", "3年", "5年"],
["原厂质保", "3年", "6年"],
["总成三大件", "3年", "1年"],
["总成三大件", "3年", "2年"],
["总成三大件", "3年", "3年"],
["总成三大件", "3年", "4年"],
["总成三大件", "3年", "5年"],
["总成三大件", "3年", "6年"],
],
},
],
currentValue: "2年",
},
{
title: "规格3",
options: [
{
value: "1年",
disabled: true,
selectable: [
["原厂质保", "1年", "1年"],
["总成三大件", "3年", "1年"],
],
},
{
value: "2年",
disabled: true,
selectable: [
["原厂质保", "1年", "2年"],
["原厂质保", "3年", "2年"],
["总成三大件", "3年", "2年"],
],
},
{
value: "3年",
disabled: true,
selectable: [
["原厂质保", "1年", "3年"],
["原厂质保", "3年", "3年"],
["总成三大件", "3年", "3年"],
],
},
{
value: "4年",
disabled: true,
selectable: [
["原厂质保", "2年", "4年"],
["原厂质保", "3年", "4年"],
["总成三大件", "3年", "4年"],
],
},
{
value: "5年",
disabled: false,
selectable: [
["原厂质保", "2年", "5年"],
["原厂质保", "3年", "5年"],
["总成三大件", "2年", "5年"],
["总成三大件", "3年", "5年"],
],
},
{
value: "6年",
disabled: false,
selectable: [
["原厂质保", "2年", "6年"],
["原厂质保", "3年", "6年"],
["总成三大件", "2年", "6年"],
["总成三大件", "3年", "6年"],
],
},
],
currentValue: "6年",
},
];
function updateDisabledStatus() {
const hit = allSpec.map((spec) => spec.currentValue);
allSpec.forEach((spec, index) => {
spec.options.forEach((option) => {
option.disabled = !option.selectable.some((skuSpecValueList) => {
return !skuSpecValueList.some((value, index1) => {
if (index === index1) return false;
if (!hit[index1]) return false;
return value !== hit[index1];
});
});
});
});
}
写了一天 写出来了, 反复自测了下 应该没啥问题,头大,希望大佬能帮助在看看是否正确或者有最优解
你的意思是说需要禁止某些不可选的规格组合吗?
比如规格2选择了2年-》那规格3就只能选择1年,2年,3年,其他的要禁选变灰?
比如规格2选择了3年-》那规格3只能选择2年,3年,4年,其他的禁选变灰?
类似于这样的效果?
可以把禁选组合作为一个数据集,然后在选择上一级时,触发判断下一级哪些不能选,禁灰。