完善聚合搜索逻辑

This commit is contained in:
lyswhut
2019-09-21 13:41:19 +08:00
parent c12bbc7f0f
commit ef9eb83a75
5 changed files with 58 additions and 43 deletions
+31 -28
View File
@@ -3,15 +3,7 @@ const sources = [{
id: 'all',
name: '聚合搜索',
}]
const sourceList = {
all: {
page: 1,
allPage: 0,
limit: 30,
total: 0,
list: [],
},
}
const sourceList = {}
const sourceMaxPage = {}
for (const source of music.sources) {
const musicSearch = music[source.id].musicSearch
@@ -44,7 +36,7 @@ const getters = {
sources: () => sources,
sourceList: state => state.sourceList || [],
searchText: state => state.text,
allList: state => ({ list: state.list, allPage: state.allPage, total: state.total, limit: state.limit, sourceMaxPage: state.sourceMaxPage }),
allList: state => ({ list: state.list, allPage: state.allPage, page: state.page, total: state.total, limit: state.limit, sourceMaxPage: state.sourceMaxPage }),
}
// actions
@@ -52,13 +44,14 @@ const actions = {
search({ commit, rootState }, { text, page, limit }) {
if (rootState.setting.search.searchSource == 'all') {
let task = []
for (const source of sources) task.push(music[source.id].musicSearch.search(text, page, limit))
Promise.all(task).then((...results) => {
commit('setLists', { results, text, page })
})
for (const source of sources) {
if (source.id == 'all') continue
task.push(music[source.id].musicSearch.search(text, page))
}
Promise.all(task).then(results => commit('setLists', { results, text, page }))
} else {
return music[rootState.setting.search.searchSource].musicSearch.search(text, page, limit)
.then(data => commit('setList', { list: data.list, allPage: data.allPage, total: data.total, text, page }))
.then(data => commit('setList', { text, page, ...data }))
}
},
}
@@ -66,37 +59,47 @@ const actions = {
// mitations
const mutations = {
setList(state, datas) {
state.list = datas.list
state.total = datas.total
state.allPage = datas.allPage
state.page = datas.page
let source = state.sourceList[datas.source]
source.list = datas.list
source.total = datas.total
source.allPage = datas.allPage
source.page = datas.page
source.limit = datas.limit
state.text = datas.text
},
setLists(state, { results, text, page }) {
let pages = []
let total = 0
let limit = 0
let list = []
for (const source of results) {
state[source.source].list = source.list
state[source.source].total = source.total
state[source.source].allPage = source.allPage
state[source.source].page = page
state.sourceMaxPage[source.source] = source.allPage
if (source.allPage < page) continue
list.push(...source.list)
pages.push(source.allPage)
total += source.total
limit += source.limit
}
list.sort()
state.allPage = Math.max(...pages)
state.total = total
state.limit = limit
state.page = page
state.text = text
state.list = list
},
clearList(state) {
for (const source of state.list) {
source.list.length = 0
source.list.page = 0
source.list.allPage = 0
source.list.total = 0
for (const source of Object.keys(state.sourceList)) {
state.sourceList[source].list.length = 0
state.sourceList[source].page = 0
state.sourceList[source].allPage = 0
state.sourceList[source].total = 0
state.sourceMaxPage[source] = 0
}
state.list.length = 0
state.page = 0
state.allPage = 0
state.total = 0
state.text = ''
},
}