first commit
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { ref, computed } from 'vue'
|
||||
|
||||
export function useSearch(items, searchFields = []) {
|
||||
const searchQuery = ref('')
|
||||
const statusFilter = ref('')
|
||||
const sourceFilter = ref('')
|
||||
|
||||
const filteredItems = computed(() => {
|
||||
let result = items.value
|
||||
|
||||
// 文本搜索
|
||||
if (searchQuery.value.trim()) {
|
||||
const query = searchQuery.value.toLowerCase()
|
||||
result = result.filter(item => {
|
||||
if (searchFields.length === 0) {
|
||||
// 默认搜索所有字符串字段
|
||||
return Object.values(item).some(val =>
|
||||
String(val).toLowerCase().includes(query)
|
||||
)
|
||||
}
|
||||
return searchFields.some(field =>
|
||||
String(item[field]).toLowerCase().includes(query)
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
// 状态过滤
|
||||
if (statusFilter.value) {
|
||||
result = result.filter(item => item.status === statusFilter.value)
|
||||
}
|
||||
|
||||
// 来源过滤
|
||||
if (sourceFilter.value) {
|
||||
result = result.filter(item => item.source === sourceFilter.value)
|
||||
}
|
||||
|
||||
return result
|
||||
})
|
||||
|
||||
const resetFilters = () => {
|
||||
searchQuery.value = ''
|
||||
statusFilter.value = ''
|
||||
sourceFilter.value = ''
|
||||
}
|
||||
|
||||
return {
|
||||
searchQuery,
|
||||
statusFilter,
|
||||
sourceFilter,
|
||||
filteredItems,
|
||||
resetFilters
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user