重构搜索页面逻辑

This commit is contained in:
lyswhut
2019-09-20 22:09:18 +08:00
parent a16c4c3657
commit c12bbc7f0f
15 changed files with 276 additions and 32 deletions
+67 -10
View File
@@ -1,28 +1,65 @@
import music from '../../utils/music'
const sources = [{
id: 'all',
name: '聚合搜索',
}]
const sourceList = {
all: {
page: 1,
allPage: 0,
limit: 30,
total: 0,
list: [],
},
}
const sourceMaxPage = {}
for (const source of music.sources) {
const musicSearch = music[source.id].musicSearch
if (!musicSearch) continue
sources.push(source)
sourceList[source.id] = {
page: 1,
allPage: 0,
limit: 30,
total: 0,
list: [],
}
sourceMaxPage[source.id] = 0
}
// state
const state = {
sourceList,
list: [],
text: '',
page: 1,
limit: 30,
allPage: 1,
total: 0,
sourceMaxPage,
}
// getters
const getters = {
list: state => state.list || [],
limit: state => state.limit,
info: state => ({ page: state.page, text: state.text }),
listInfo: state => ({ allPage: state.allPage, total: state.total }),
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 }),
}
// actions
const actions = {
search({ commit, rootState }, { text, page, limit }) {
return music[rootState.setting.sourceId].musicSearch.search(text, page, limit)
.then(data => commit('setList', { list: data.list, allPage: data.allPage, total: data.total, text, page }))
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 })
})
} 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 }))
}
},
}
@@ -35,11 +72,31 @@ const mutations = {
state.page = datas.page
state.text = datas.text
},
setLists(state, { results, text, page }) {
let pages = []
let total = 0
let limit = 0
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
pages.push(source.allPage)
total += source.total
limit += source.limit
}
state.allPage = Math.max(...pages)
state.total = total
state.limit = limit
state.text = text
},
clearList(state) {
state.list.length = 0
state.page = 0
state.allPage = 0
state.total = 0
for (const source of state.list) {
source.list.length = 0
source.list.page = 0
source.list.allPage = 0
source.list.total = 0
}
state.text = ''
},
}
+3 -2
View File
@@ -2,8 +2,9 @@ export default {
setTheme(state, val) {
state.setting.themeId = val
},
setSource(state, val) {
state.setting.sourceId = val
setSearchSource(state, { searchSource, tempSearchSource }) {
if (searchSource != null) state.setting.search.searchSource = searchSource
if (tempSearchSource != null) state.setting.search.tempSearchSource = tempSearchSource
},
setSetting(state, val) {
state.setting = val