src/views/basicData/product/index.vue
@@ -6,6 +6,7 @@
          v-model="search"
          style="width: 210px"
          placeholder="输入关键字进行搜索"
          @input="searchFilter"
          @change="searchFilter"
          @clear="searchFilter"
          clearable
@@ -163,6 +164,18 @@
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="24">
            <el-form-item label="单位:" prop="unit">
              <el-input
                v-model="modelForm.unit"
                placeholder="请输入单位"
                clearable
                @keydown.enter.prevent
              />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
@@ -211,6 +224,10 @@
    prop: "thickness",
    // 列表展示时统一保留 15 位小数
    formatData: (val) => formatThicknessTo15(val),
  },
  {
    label: "单位",
    prop: "unit",
  },
  {
    dataType: "action",
@@ -445,13 +462,15 @@
    //如果数据为空,则返回true,显示所有的数据项
    return true;
  }
  // 查询列表是否有匹配数据,将值小写,匹配英文数据
  let val = value.toLowerCase();
  // 关键字与节点 label 均按小写比较,英文模糊匹配不区分大小写(如 LOW / low 可匹配 Low-E)
  const val = String(value).trim().toLowerCase();
  if (!val) return true;
  return chooseNode(val, data, node); // 调用过滤二层方法
};
// 过滤父节点 / 子节点 (如果输入的参数是父节点且能匹配,则返回该节点以及其下的所有子节点;如果参数是子节点,则返回该节点的父节点。name是中文字符,enName是英文字符.
const chooseNode = (value, data, node) => {
  if (data.label.indexOf(value) !== -1) {
  const labelLower = String(data.label ?? "").toLowerCase();
  if (labelLower.indexOf(value) !== -1) {
    return true;
  }
  const level = node.level;
@@ -464,8 +483,9 @@
  // 遍历当前节点的父节点
  let index = 0;
  while (index < level - 1) {
    // 如果匹配到直接返回,此处name值是中文字符,enName是英文字符。判断匹配中英文过滤
    if (parentData.data.label.indexOf(value) !== -1) {
    // 如果匹配到直接返回;与 filterNode 一致,标签与关键字均按小写比较,英文模糊匹配不区分大小写
    const parentLabelLower = String(parentData.data.label ?? "").toLowerCase();
    if (parentLabelLower.indexOf(value) !== -1) {
      return true;
    }
    // 否则的话再往上一层做匹配