feat: 产品筛选器的模糊搜索功能

- 引入纯前端依赖Fuse.js用于模糊匹配
- 新增Utils-fuzzyFilter封装Fuse的初始化与匹配
- 在前端将字符串匹配改为模糊匹配
This commit is contained in:
2025-11-10 15:08:32 +08:00
parent 007c8f9ce9
commit 4c8dfb5b56
5 changed files with 116 additions and 16 deletions

View File

@ -73,8 +73,13 @@
return products;
});
const filteredDocuments = computed(() =>
documents.value.filter((doc: DocumentListView) => {
const filteredDocuments = computed(() => {
const fuzzyMatchedDocuments = fuzzyMatch(documents.value, {
keyword: filters.keyword,
keys: ['title'],
threshold: 0.2,
});
return fuzzyMatchedDocuments.filter((doc: DocumentListView) => {
const matchProduct = filters.selectedProduct
? doc.products?.some(
(product: DocumentListProduct) =>
@ -87,13 +92,9 @@
)
: true;
const matchKeyword = filters.keyword
? doc.title && doc.title.includes(filters.keyword)
: true;
return matchProduct && matchKeyword;
})
);
return matchProduct;
});
});
watch(
() => filters.selectedType,

View File

@ -74,7 +74,12 @@
});
const filteredQuestions = computed(() => {
return questions.value.filter((question: QuestionListView) => {
const fuzzyMatchedQuestions = fuzzyMatch(questions.value, {
keyword: filters.keyword,
keys: ['title', 'content'],
threshold: 0.2,
});
return fuzzyMatchedQuestions.filter((question: QuestionListView) => {
const matchProduct = filters.selectedProduct
? question.products?.some(
(product: QuestionListProduct) =>
@ -87,12 +92,7 @@
)
: true;
const matchKeyword = filters.keyword
? (question.title && question.title.includes(filters.keyword)) ||
(question.content && question.content.includes(filters.keyword))
: true;
return matchProduct && matchKeyword;
return matchProduct;
});
});