refactor: ปรับ interface การค้นหา
This commit is contained in:
parent
4cd95143d8
commit
7ac589d95c
1 changed files with 68 additions and 42 deletions
|
|
@ -12,6 +12,21 @@ import { useFileInfoStore } from '@/stores/file-info-data'
|
|||
import AdvancedSearch from '@/modules/01_user/components/AdvancedSearch.vue'
|
||||
import useStorage from '@/stores/storage'
|
||||
|
||||
interface SearchInfo {
|
||||
field: string
|
||||
value: string
|
||||
exact?: boolean
|
||||
}
|
||||
interface SearchOperator {
|
||||
AND?: (SearchInfo | SearchOperator)[]
|
||||
OR?: (SearchInfo | SearchOperator)[]
|
||||
}
|
||||
interface Search extends SearchOperator {
|
||||
recursive?: boolean
|
||||
path?: string[]
|
||||
exact?: boolean
|
||||
}
|
||||
|
||||
const loaderStore = useLoader()
|
||||
const storageStore = useStorage()
|
||||
const { currentInfo } = storeToRefs(storageStore)
|
||||
|
|
@ -26,24 +41,12 @@ const {
|
|||
advSearchDataRow,
|
||||
} = storeToRefs(useSearchDataStore())
|
||||
const { getFoundFile } = useSearchDataStore()
|
||||
const submitSearchData = ref<{
|
||||
AND: {
|
||||
field: string
|
||||
value: string
|
||||
exact?: boolean
|
||||
}[]
|
||||
OR: {
|
||||
field: string
|
||||
value: string
|
||||
exact?: boolean
|
||||
}[]
|
||||
exact?: boolean
|
||||
recursive?: boolean
|
||||
path?: string[]
|
||||
}>({
|
||||
|
||||
const submitSearchData = ref<Search>({
|
||||
AND: [],
|
||||
OR: [],
|
||||
})
|
||||
|
||||
const props = defineProps<{
|
||||
mode: 'admin' | 'user'
|
||||
}>()
|
||||
|
|
@ -60,24 +63,24 @@ async function submitSearch() {
|
|||
.filter(Boolean)
|
||||
|
||||
optionsField.value.forEach((option) => {
|
||||
submitSearchData.value.OR.push({
|
||||
submitSearchData.value.OR?.push({
|
||||
field: option.value,
|
||||
value: searchData.value.value,
|
||||
})
|
||||
})
|
||||
submitSearchData.value.OR.push({
|
||||
submitSearchData.value.OR?.push({
|
||||
field: 'fileName',
|
||||
value: searchData.value.value,
|
||||
})
|
||||
submitSearchData.value.OR.push({
|
||||
submitSearchData.value.OR?.push({
|
||||
field: 'metadata.author',
|
||||
value: searchData.value.value,
|
||||
})
|
||||
submitSearchData.value.OR.push({
|
||||
submitSearchData.value.OR?.push({
|
||||
field: 'metadata.subject',
|
||||
value: searchData.value.value,
|
||||
})
|
||||
submitSearchData.value.OR.push({
|
||||
submitSearchData.value.OR?.push({
|
||||
field: 'fileType',
|
||||
value: mime.getType(searchData.value.value) || '',
|
||||
})
|
||||
|
|
@ -85,20 +88,18 @@ async function submitSearch() {
|
|||
submitSearchData.value.recursive = true
|
||||
submitSearchData.value.path = []
|
||||
if (searchData.value.field == 'title') {
|
||||
submitSearchData.value.OR.push({
|
||||
submitSearchData.value.OR?.push({
|
||||
field: 'metadata.subject',
|
||||
value: searchData.value.value,
|
||||
exact: isExact.value,
|
||||
})
|
||||
}
|
||||
if (searchData.value.field == 'author') {
|
||||
submitSearchData.value.OR.push({
|
||||
submitSearchData.value.OR?.push({
|
||||
field: 'metadata.author',
|
||||
value: searchData.value.value,
|
||||
exact: isExact.value,
|
||||
})
|
||||
}
|
||||
submitSearchData.value.OR.push({
|
||||
submitSearchData.value.OR?.push({
|
||||
field: searchData.value.field,
|
||||
value: searchData.value.value,
|
||||
exact: isExact.value,
|
||||
|
|
@ -111,31 +112,56 @@ async function submitSearch() {
|
|||
(d: { field: string; value: string; op: string; exact: boolean }) => {
|
||||
if (d.field && d.value.trim() !== '') {
|
||||
const op = d.op === 'AND' ? 'AND' : 'OR'
|
||||
if (d.field == 'title') {
|
||||
submitSearchData.value[op].push({
|
||||
field: 'metadata.subject',
|
||||
if (
|
||||
(op === 'AND' && d.field === 'title') ||
|
||||
d.field === 'author'
|
||||
) {
|
||||
console.log('and title author')
|
||||
if (d.field === 'title') {
|
||||
submitSearchData.value[op]?.push({
|
||||
OR: [
|
||||
{
|
||||
field: d.field,
|
||||
value: d.value,
|
||||
exact: d.exact,
|
||||
},
|
||||
{
|
||||
field: 'metadata.subject',
|
||||
value: d.value,
|
||||
exact: d.exact,
|
||||
},
|
||||
],
|
||||
})
|
||||
}
|
||||
if (d.field === 'author') {
|
||||
submitSearchData.value[op]?.push({
|
||||
OR: [
|
||||
{
|
||||
field: d.field,
|
||||
value: d.value,
|
||||
exact: d.exact,
|
||||
},
|
||||
{
|
||||
field: 'metadata.author',
|
||||
value: d.value,
|
||||
exact: d.exact,
|
||||
},
|
||||
],
|
||||
})
|
||||
}
|
||||
} else {
|
||||
submitSearchData.value[op]?.push({
|
||||
field: d.field,
|
||||
value: d.value,
|
||||
exact: d.exact,
|
||||
})
|
||||
}
|
||||
if (d.field == 'author') {
|
||||
submitSearchData.value[op].push({
|
||||
field: 'metadata.author',
|
||||
value: d.value,
|
||||
exact: d.exact,
|
||||
})
|
||||
}
|
||||
submitSearchData.value[op].push({
|
||||
field: d.field,
|
||||
value: d.value,
|
||||
exact: d.exact,
|
||||
})
|
||||
}
|
||||
},
|
||||
)
|
||||
if (advField.keyword.length > 0) {
|
||||
for (let i = 0; i < advField.keyword.length; i++) {
|
||||
submitSearchData.value.AND.push({
|
||||
submitSearchData.value.AND?.push({
|
||||
field: 'keyword',
|
||||
value: advField.keyword[i],
|
||||
exact: true,
|
||||
|
|
@ -143,7 +169,7 @@ async function submitSearch() {
|
|||
}
|
||||
}
|
||||
if (advField.description.trim() !== '') {
|
||||
submitSearchData.value.AND.push({
|
||||
submitSearchData.value.AND?.push({
|
||||
field: 'description',
|
||||
value: advField.description,
|
||||
exact: true,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue