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 AdvancedSearch from '@/modules/01_user/components/AdvancedSearch.vue'
|
||||||
import useStorage from '@/stores/storage'
|
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 loaderStore = useLoader()
|
||||||
const storageStore = useStorage()
|
const storageStore = useStorage()
|
||||||
const { currentInfo } = storeToRefs(storageStore)
|
const { currentInfo } = storeToRefs(storageStore)
|
||||||
|
|
@ -26,24 +41,12 @@ const {
|
||||||
advSearchDataRow,
|
advSearchDataRow,
|
||||||
} = storeToRefs(useSearchDataStore())
|
} = storeToRefs(useSearchDataStore())
|
||||||
const { getFoundFile } = useSearchDataStore()
|
const { getFoundFile } = useSearchDataStore()
|
||||||
const submitSearchData = ref<{
|
|
||||||
AND: {
|
const submitSearchData = ref<Search>({
|
||||||
field: string
|
|
||||||
value: string
|
|
||||||
exact?: boolean
|
|
||||||
}[]
|
|
||||||
OR: {
|
|
||||||
field: string
|
|
||||||
value: string
|
|
||||||
exact?: boolean
|
|
||||||
}[]
|
|
||||||
exact?: boolean
|
|
||||||
recursive?: boolean
|
|
||||||
path?: string[]
|
|
||||||
}>({
|
|
||||||
AND: [],
|
AND: [],
|
||||||
OR: [],
|
OR: [],
|
||||||
})
|
})
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
mode: 'admin' | 'user'
|
mode: 'admin' | 'user'
|
||||||
}>()
|
}>()
|
||||||
|
|
@ -60,24 +63,24 @@ async function submitSearch() {
|
||||||
.filter(Boolean)
|
.filter(Boolean)
|
||||||
|
|
||||||
optionsField.value.forEach((option) => {
|
optionsField.value.forEach((option) => {
|
||||||
submitSearchData.value.OR.push({
|
submitSearchData.value.OR?.push({
|
||||||
field: option.value,
|
field: option.value,
|
||||||
value: searchData.value.value,
|
value: searchData.value.value,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
submitSearchData.value.OR.push({
|
submitSearchData.value.OR?.push({
|
||||||
field: 'fileName',
|
field: 'fileName',
|
||||||
value: searchData.value.value,
|
value: searchData.value.value,
|
||||||
})
|
})
|
||||||
submitSearchData.value.OR.push({
|
submitSearchData.value.OR?.push({
|
||||||
field: 'metadata.author',
|
field: 'metadata.author',
|
||||||
value: searchData.value.value,
|
value: searchData.value.value,
|
||||||
})
|
})
|
||||||
submitSearchData.value.OR.push({
|
submitSearchData.value.OR?.push({
|
||||||
field: 'metadata.subject',
|
field: 'metadata.subject',
|
||||||
value: searchData.value.value,
|
value: searchData.value.value,
|
||||||
})
|
})
|
||||||
submitSearchData.value.OR.push({
|
submitSearchData.value.OR?.push({
|
||||||
field: 'fileType',
|
field: 'fileType',
|
||||||
value: mime.getType(searchData.value.value) || '',
|
value: mime.getType(searchData.value.value) || '',
|
||||||
})
|
})
|
||||||
|
|
@ -85,20 +88,18 @@ async function submitSearch() {
|
||||||
submitSearchData.value.recursive = true
|
submitSearchData.value.recursive = true
|
||||||
submitSearchData.value.path = []
|
submitSearchData.value.path = []
|
||||||
if (searchData.value.field == 'title') {
|
if (searchData.value.field == 'title') {
|
||||||
submitSearchData.value.OR.push({
|
submitSearchData.value.OR?.push({
|
||||||
field: 'metadata.subject',
|
field: 'metadata.subject',
|
||||||
value: searchData.value.value,
|
value: searchData.value.value,
|
||||||
exact: isExact.value,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (searchData.value.field == 'author') {
|
if (searchData.value.field == 'author') {
|
||||||
submitSearchData.value.OR.push({
|
submitSearchData.value.OR?.push({
|
||||||
field: 'metadata.author',
|
field: 'metadata.author',
|
||||||
value: searchData.value.value,
|
value: searchData.value.value,
|
||||||
exact: isExact.value,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
submitSearchData.value.OR.push({
|
submitSearchData.value.OR?.push({
|
||||||
field: searchData.value.field,
|
field: searchData.value.field,
|
||||||
value: searchData.value.value,
|
value: searchData.value.value,
|
||||||
exact: isExact.value,
|
exact: isExact.value,
|
||||||
|
|
@ -111,31 +112,56 @@ async function submitSearch() {
|
||||||
(d: { field: string; value: string; op: string; exact: boolean }) => {
|
(d: { field: string; value: string; op: string; exact: boolean }) => {
|
||||||
if (d.field && d.value.trim() !== '') {
|
if (d.field && d.value.trim() !== '') {
|
||||||
const op = d.op === 'AND' ? 'AND' : 'OR'
|
const op = d.op === 'AND' ? 'AND' : 'OR'
|
||||||
if (d.field == 'title') {
|
if (
|
||||||
submitSearchData.value[op].push({
|
(op === 'AND' && d.field === 'title') ||
|
||||||
field: 'metadata.subject',
|
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,
|
value: d.value,
|
||||||
exact: d.exact,
|
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) {
|
if (advField.keyword.length > 0) {
|
||||||
for (let i = 0; i < advField.keyword.length; i++) {
|
for (let i = 0; i < advField.keyword.length; i++) {
|
||||||
submitSearchData.value.AND.push({
|
submitSearchData.value.AND?.push({
|
||||||
field: 'keyword',
|
field: 'keyword',
|
||||||
value: advField.keyword[i],
|
value: advField.keyword[i],
|
||||||
exact: true,
|
exact: true,
|
||||||
|
|
@ -143,7 +169,7 @@ async function submitSearch() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (advField.description.trim() !== '') {
|
if (advField.description.trim() !== '') {
|
||||||
submitSearchData.value.AND.push({
|
submitSearchData.value.AND?.push({
|
||||||
field: 'description',
|
field: 'description',
|
||||||
value: advField.description,
|
value: advField.description,
|
||||||
exact: true,
|
exact: true,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue