使用el-cascader组件实现一个可搜索、可清空的级联选择器

      <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['其他']
    }
  ];

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值