| | |
| | | const traverse = (nodes) => { |
| | | nodes.forEach(node => { |
| | | if (node.label) { |
| | | const lowerSpell = node.label.spell('low', 'array').join(''); |
| | | const upperSpell = node.label.spell('up', 'array').join(''); |
| | | this.pinyinCache.set(node.id, { lowerSpell, upperSpell, label: node.label }); |
| | | const lowerSpell = cnchar.spell(node.label, 'low', 'array').join(''); // 完整小写拼音 |
| | | const upperSpell = cnchar.spell(node.label, 'up', 'array').join(''); // 完整大写拼音 |
| | | const shortPinyin = node.label |
| | | .split('') |
| | | .map(char => cnchar.spell(char, 'array')[0]?.[0]?.toLowerCase() || char) // 拼音首字母 |
| | | .join(''); |
| | | this.pinyinCache.set(node.id, { |
| | | lowerSpell, |
| | | upperSpell, |
| | | shortPinyin, // 缓存拼音简写 |
| | | label: node.label |
| | | }); |
| | | } |
| | | if (node.children) traverse(node.children); |
| | | }); |
| | |
| | | traverse(this.deptOptions); |
| | | }, |
| | | filterNode(value, data) { |
| | | if (!value) return true; |
| | | if (!value) return true; // 如果搜索值为空,返回所有节点 |
| | | const cached = this.pinyinCache.get(data.id); |
| | | if (!cached) return false; |
| | | if (!cached) return false; // 如果没有缓存数据,不显示该节点 |
| | | const searchLower = value.toLowerCase(); // 将搜索词转为小写 |
| | | return ( |
| | | cached.label.includes(value) || |
| | | cached.lowerSpell.includes(value) || |
| | | cached.upperSpell.includes(value) |
| | | cached.label.includes(value) || // 直接匹配汉字 |
| | | cached.shortPinyin.includes(searchLower) || // 匹配拼音简写 |
| | | cached.lowerSpell.includes(searchLower) // 匹配完整拼音 |
| | | ); |
| | | }, |
| | | filterNode2(value, data) { |