Browse Source

优化规格搜索功能:增强模糊搜索算法,添加搜索建议和用户体验改进

pull/3/head
徐飞洋 2 months ago
parent
commit
eb201ae95a
  1. 116
      pages/seller/index.js

116
pages/seller/index.js

@ -4391,16 +4391,98 @@ Page({
});
},
// 弹窗中规格搜索输入
// 弹窗中规格搜索输入 - 增强版
onModalSpecSearchInput: function (e) {
const keyword = e.detail.value;
const keyword = e.detail.value.trim(); // 添加trim()处理空格
console.log('规格搜索输入:', keyword);
const specOptions = this.data.specOptions;
console.log('可用规格选项:', specOptions.length, '个');
let filteredOptions = specOptions;
if (keyword) {
// 增强的模糊搜索算法
filteredOptions = specOptions.filter(option => {
return option.toLowerCase().includes(keyword.toLowerCase());
const optionLower = option.toLowerCase();
const keywordLower = keyword.toLowerCase();
// 多种匹配策略:
// 1. 精确匹配
if (optionLower === keywordLower) return true;
// 2. 包含匹配
if (optionLower.includes(keywordLower)) return true;
// 3. 分词匹配(支持空格分隔的关键词)
const keywordWords = keywordLower.split(' ').filter(word => word.length > 0);
if (keywordWords.length > 1) {
return keywordWords.every(word => optionLower.includes(word));
}
// 4. 数字范围匹配(例如搜索"30-35"能找到"净重30-35")
if (keywordLower.includes('-') || keywordLower.includes('+')) {
const keywordParts = keywordLower.split(/[-+]/);
if (keywordParts.length >= 2) {
return keywordParts.every(part => {
return part.trim() && optionLower.includes(part.trim());
});
}
}
return false;
});
// 搜索结果排序:优先显示包含完整关键词的结果
filteredOptions.sort((a, b) => {
const aLower = a.toLowerCase();
const bLower = b.toLowerCase();
// 完整包含关键词的排在前面
const aFullMatch = aLower.includes(keywordLower);
const bFullMatch = bLower.includes(keywordLower);
if (aFullMatch && !bFullMatch) return -1;
if (!aFullMatch && bFullMatch) return 1;
// 如果都包含或都不包含,按字母顺序排序
return a.localeCompare(b);
});
console.log('搜索结果:', filteredOptions.length, '个匹配项');
console.log('搜索结果详情:', filteredOptions);
// 如果没有匹配结果,显示友好提示
if (filteredOptions.length === 0) {
wx.showToast({
title: `未找到包含"${keyword}"的规格`,
icon: 'none',
duration: 2000
});
// 提供搜索建议
const suggestions = this.getSearchSuggestions(keyword);
if (suggestions.length > 0) {
setTimeout(() => {
wx.showModal({
title: '搜索建议',
content: `是否要搜索这些相关规格?\n${suggestions.join('\n')}`,
success: (res) => {
if (res.confirm) {
const firstSuggestion = suggestions[0];
this.setData({
modalSpecSearchKeyword: firstSuggestion
});
// 递归调用搜索建议的关键词
this.onModalSpecSearchInput({ detail: { value: firstSuggestion } });
}
}
});
}, 1000);
}
}
} else {
console.log('搜索词为空,显示所有规格');
}
this.setData({
@ -4410,13 +4492,39 @@ Page({
});
},
// 清除弹窗中的规格搜索关键词
// 获取搜索建议
getSearchSuggestions(keyword) {
const specOptions = this.data.specOptions;
const keywordLower = keyword.toLowerCase();
// 查找包含关键词中部分内容的规格
const partialMatches = specOptions.filter(option => {
const optionLower = option.toLowerCase();
return optionLower.includes(keywordLower) && optionLower !== keywordLower;
});
// 返回前3个建议
return partialMatches.slice(0, 3);
},
// 清除弹窗中的规格搜索关键词 - 增强版
clearModalSpecSearch: function () {
console.log('清除规格搜索关键词');
this.setData({
modalSpecSearchKeyword: '',
filteredModalSpecOptions: this.data.specOptions,
selectedModalSpecIndex: -1
});
console.log('搜索已清除,显示所有规格选项:', this.data.specOptions.length, '个');
// 提供友好的反馈
wx.showToast({
title: '已清除搜索条件',
icon: 'success',
duration: 1000
});
},
// 双击检测变量

Loading…
Cancel
Save