Jelajahi Sumber

完播统计增加搜索字母筛选

yh 1 Minggu lalu
induk
melakukan
eb391a8af9
1 mengubah file dengan 36 tambahan dan 19 penghapusan
  1. 36 19
      src/components/TreeSelect/dateRange.vue

+ 36 - 19
src/components/TreeSelect/dateRange.vue

@@ -491,35 +491,52 @@ export default {
       return true;
     },
 
-    applyFilter(nodesToFilter) {
-      const searchText = this.filterText.toLowerCase().trim();
-      if (!searchText) return nodesToFilter;
+    getMatchedAndAncestorKeys(searchText) {
+      const matchedKeys = new Set();
 
-      const matchedNodeKeys = new Set();
-      const newExpandedKeys = new Set(this.expandedKeysSet);
-
-      nodesToFilter.forEach(node => {
+      this.flattenedNodes.forEach(node => {
         if (node.label.toLowerCase().includes(searchText)) {
-          matchedNodeKeys.add(node.key);
+          matchedKeys.add(node.key);
+
+          // 向上找父节点
           let parentKey = node.parentKey;
           while (parentKey) {
-            const parentNode = this.nodeMap.get(parentKey);
-            if (parentNode) {
-              newExpandedKeys.add(parentKey);
-              parentKey = parentNode.parentKey;
-            } else {
-              break;
-            }
+            matchedKeys.add(parentKey);
+            const parent = this.nodeMap.get(parentKey);
+            parentKey = parent ? parent.parentKey : null;
           }
         }
       });
 
-      const filteredResult = nodesToFilter.filter(node => {
-        return this.hasMatchInSubtreeOrSelf(node, searchText);
+      return matchedKeys;
+    },
+
+    expandChildrenForMatchedParents(matchedKeys) {
+      const resultKeys = new Set(matchedKeys);
+
+      matchedKeys.forEach(key => {
+        const node = this.nodeMap.get(key);
+        if (node && !node.isLeaf) {
+          node.childrenKeys.forEach(childKey => {
+            resultKeys.add(childKey);
+          });
+        }
       });
 
-      this.expandedKeysSet = newExpandedKeys;
-      return filteredResult;
+      return resultKeys;
+    },
+
+
+
+    applyFilter(nodesToFilter) {
+      const searchText = this.filterText.toLowerCase().trim();
+      if (!searchText) return nodesToFilter;
+
+      const matchedKeys = this.getMatchedAndAncestorKeys(searchText);
+
+      const displayKeys = this.expandChildrenForMatchedParents(matchedKeys);
+
+      return nodesToFilter.filter(node => displayKeys.has(node.key));
     },
     hasMatchInSubtreeOrSelf(node, searchText) {
       if (node.label.toLowerCase().includes(searchText)) {