gaoluyang
2026-05-25 9e7ed81d5fcfdc1489fc8a08edf5fe826dfe5fdc
src/views/basicData/product/index.vue
@@ -5,7 +5,7 @@
        <el-input v-model="search"
                  style="width: 210px"
                  placeholder="输入关键字进行搜索"
                  @change="searchFilter"
                  @input="debouncedSearch"
                  @clear="searchFilter"
                  clearable
                  prefix-icon="Search" />
@@ -68,7 +68,7 @@
    <div class="right">
      <div style="margin-bottom: 10px" v-if="isShowButton">
        <el-button type="primary" @click="openModelDia('add')">
          新增尺寸
          新增规格型号
        </el-button>
        <ImportExcel :product-id="currentId"
                     @uploadSuccess="getModelList" />
@@ -120,7 +120,7 @@
      </template>
    </el-dialog>
    <el-dialog v-model="modelDia"
               title="尺寸"
               title="规格型号"
               width="400px"
               @close="closeModelDia"
               @keydown.enter.prevent>
@@ -142,10 +142,10 @@
            </el-col>
          </el-row>
          <el-col :span="24">
            <el-form-item label="尺寸:"
            <el-form-item label="规格型号:"
                          prop="model">
              <el-input v-model="modelForm.model"
                        placeholder="请输入尺寸"
                        placeholder="请输入规格型号"
                        clearable
                        @keydown.enter.prevent />
            </el-form-item>
@@ -295,7 +295,7 @@
      prop: "productCode",
    },
    {
      label: "尺寸",
      label: "规格型号",
      prop: "model",
    },
    {
@@ -411,7 +411,7 @@
    form.value.productName =
      type === "edit" && data ? data.productName : "";
  };
  // 打开尺寸弹框
  // 打开规格型号弹框
  const openModelDia = (type, data) => {
    modelOperationType.value = type;
    modelDia.value = true;
@@ -492,7 +492,7 @@
    getModelList();
  };
  // 提交尺寸修改
  // 提交规格型号修改
  const submitModelForm = () => {
    proxy.$refs.modelFormRef.validate(valid => {
      if (valid) {
@@ -515,7 +515,7 @@
    selectedRows.value = selection;
  };
  // 查询尺寸
  // 查询规格型号
  const pagination = obj => {
    page.current = obj.page;
    page.size = obj.limit;
@@ -534,7 +534,7 @@
      tableLoading.value = false;
    });
  };
  // 删除尺寸
  // 删除规格型号
  const handleDelete = () => {
    let ids = [];
    if (selectedRows.value.length > 0) {
@@ -563,40 +563,31 @@
        proxy.$modal.msg("已取消");
      });
  };
  // 调用tree过滤方法 中文英过滤
  const filterNode = (value, data, node) => {
    if (!value) {
      //如果数据为空,则返回true,显示所有的数据项
      return true;
    }
    // 查询列表是否有匹配数据,将值小写,匹配英文数据
    let val = value.toLowerCase();
    return chooseNode(val, data, node); // 调用过滤二层方法
  const debounce = (fn, delay = 300) => {
    let timer;
    return (...args) => {
      clearTimeout(timer);
      timer = setTimeout(() => fn(...args), delay);
    };
  };
  // 过滤父节点 / 子节点 (如果输入的参数是父节点且能匹配,则返回该节点以及其下的所有子节点;如果参数是子节点,则返回该节点的父节点。name是中文字符,enName是英文字符.
  const chooseNode = (value, data, node) => {
    if (data.label.indexOf(value) !== -1) {
  const debouncedSearch = debounce(() => {
    searchFilter();
  }, 300);
  const filterNode = (value, data) => {
    if (!value) return true;
    return chooseNode(value.toLowerCase(), data);
  };
  const chooseNode = (value, data) => {
    const label = (data.label || '').toLowerCase();
    if (label.indexOf(value) !== -1) {
      return true;
    }
    const level = node.level;
    // 如果传入的节点本身就是一级节点就不用校验了
    if (level === 1) {
      return false;
    if (data.children && data.children.length > 0) {
      return data.children.some(child => chooseNode(value, child));
    }
    // 先取当前节点的父节点
    let parentData = node.parent;
    // 遍历当前节点的父节点
    let index = 0;
    while (index < level - 1) {
      // 如果匹配到直接返回,此处name值是中文字符,enName是英文字符。判断匹配中英文过滤
      if (parentData.data.label.indexOf(value) !== -1) {
        return true;
      }
      // 否则的话再往上一层做匹配
      parentData = parentData.parent;
      index++;
    }
    // 没匹配到返回false
    return false;
  };
  getProductTreeList();