From ef9eb83a7569c3ba00edf660839fdc2851406a9c Mon Sep 17 00:00:00 2001 From: lyswhut Date: Sat, 21 Sep 2019 13:41:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=81=9A=E5=90=88=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/material/SearchInput.vue | 2 +- src/renderer/store/modules/search.js | 59 ++++++++++--------- src/renderer/utils/index.js | 1 + src/renderer/utils/music/kw/musicSearch.js | 3 +- src/renderer/views/Search.vue | 36 +++++++---- 5 files changed, 58 insertions(+), 43 deletions(-) diff --git a/src/renderer/components/material/SearchInput.vue b/src/renderer/components/material/SearchInput.vue index 960c9b2e..30cafcf9 100644 --- a/src/renderer/components/material/SearchInput.vue +++ b/src/renderer/components/material/SearchInput.vue @@ -79,7 +79,7 @@ export default { query: { text: this.text, }, - }) + }).catch(_ => _) }, handleInput() { if (this.text === '') { diff --git a/src/renderer/store/modules/search.js b/src/renderer/store/modules/search.js index 3f3f2f59..598ca5a8 100644 --- a/src/renderer/store/modules/search.js +++ b/src/renderer/store/modules/search.js @@ -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 = '' }, } diff --git a/src/renderer/utils/index.js b/src/renderer/utils/index.js index 0c84fa0d..13d4443f 100644 --- a/src/renderer/utils/index.js +++ b/src/renderer/utils/index.js @@ -43,6 +43,7 @@ export const b64DecodeUnicode = str => { export const decodeName = str => str.replace(/'/g, '\'') export const scrollTo = (element, to, duration = 300, fn = function() {}) => { + if (!element) return const start = element.scrollTop || element.scrollY const change = to - start const increment = 10 diff --git a/src/renderer/utils/music/kw/musicSearch.js b/src/renderer/utils/music/kw/musicSearch.js index 089d1103..1ba43c24 100644 --- a/src/renderer/utils/music/kw/musicSearch.js +++ b/src/renderer/utils/music/kw/musicSearch.js @@ -121,7 +121,7 @@ export default { } return result }, - search(str, page = 1, { limit }) { + search(str, page = 1, { limit } = {}) { if (limit != null) this.limit = limit // http://newlyric.kuwo.cn/newlyric.lrc?62355680 return this.musicSearch(str, page).then(result => { @@ -138,6 +138,7 @@ export default { list, allPage: this.allPage, total: this.total, + limit: this.limit, source: 'kw', }) }) diff --git a/src/renderer/views/Search.vue b/src/renderer/views/Search.vue index 48b81ba4..8b010fbc 100644 --- a/src/renderer/views/Search.vue +++ b/src/renderer/views/Search.vue @@ -1,9 +1,9 @@