<el-cascader
filterable 该选项是否可以被搜索
options 选项的数据源, value 和 label 可以通过 CascaderProps 自定义.
clearable 是否支持清空选项
props 配置选项, 请参阅下面 CascaderProps 表。
emitPath 在选中节点改变时,是否返回由该节点所在的各级菜单的值所组成的数组,若设置 false,则只返回该节点的值
绑定选中值到 item.factorCode,选项数据为 groupedFactors。
v-model="item.factorCode"
:options="groupedFactors"
:props="{
expandTrigger: 'hover',
value: 'obseryType',
label: 'label',
emitPath: false,
disabled: (node) => node.level === 0 // 仅禁用第一级节点
}"
placeholder="请选择要素"
filterable
clearable
style="width: 100%;"
></el-cascader>
obseryType label 是级联选择器选项中用于存储每个选项唯一值的字段名,它来自 groupedFactors 数组中的对象属性。
// 初始化分类容器,预定义了各种观测类型的空数组
const groups = {
'辐射观测': [],
'天气观测' : [],
'酸雨观测': [],
// ...(其他观测类型)
'其他': [],
};
因为传来的数据,可能会有 重复,加一个判断用set集合如果已经处理过就不处理了
// 用于记录已处理过的观测类型,避免重复添加
const processedTypes = new Set();
// 遍历 MOCK_FACTORS 数据源中的每个要素
MOCK_FACTORS.value.forEach(item => {
// 如果当前观测类型已处理过,跳过
if (processedTypes.has(item.obseryType)) return;
processedTypes.add(item.obseryType); // 标记为已处理
// 获取观测类型的中文标签(假设 getZH 是一个翻译函数)
const zhLabel = getZH(item.obseryType);
MOCK_FACTORS.value的数据:
有一个函数会根据type返回对应的lable比如这里是初复测标识
// 根据中文标签内容将要素分类到不同的观测组
if (zhLabel.includes('辐射')) {
groups['辐射观测'].push({
obseryType: item.obseryType, // 原始观测类型标识(如 "RADIATION")
label: `${zhLabel} ` // 中文标签(如 "辐射强度")
});
} else if (zhLabel.includes('土壤体积含水量')) {
// 分类到土壤水分观测
}
// ...(其他 else if 分支逻辑类似)
else {
groups['其他'].push({ /* 未匹配的要素 */ });
}
});
// 将分类后的数据转换为级联选择器需要的树形结构
数据源
return [
{
obseryType: 'radiation', // 组标识(用于后端)
label: '辐射', // 组显示名称
children: groups['辐射观测'] // 子节点(具体要素)
},
// ...(其他组结构类似)
{
obseryType: 'others',
label: '其他',
children: groups['其他']
}
];