| | |
| | | const state = { |
| | | visitedViews: [], |
| | | cachedViews: [], |
| | | iframeViews: [] |
| | | } |
| | | iframeViews: [], |
| | | }; |
| | | |
| | | const mutations = { |
| | | ADD_IFRAME_VIEW: (state, view) => { |
| | | if (state.iframeViews.some(v => v.path === view.path)) return |
| | | if (state.iframeViews.some((v) => v.path === view.path)) return; |
| | | state.iframeViews.push( |
| | | Object.assign({}, view, { |
| | | title: view.meta.title || 'no-name' |
| | | title: view.meta.title || "no-name", |
| | | }) |
| | | ) |
| | | ); |
| | | }, |
| | | ADD_VISITED_VIEW: (state, view) => { |
| | | if (state.visitedViews.some(v => v.path === view.path)) return |
| | | if (state.visitedViews.some((v) => v.path === view.path)) return; |
| | | state.visitedViews.push( |
| | | Object.assign({}, view, { |
| | | title: view.meta.title || 'no-name' |
| | | title: view.meta.title || "no-name", |
| | | }) |
| | | ) |
| | | ); |
| | | }, |
| | | ADD_CACHED_VIEW: (state, view) => { |
| | | if (state.cachedViews.includes(view.name)) return |
| | | if (state.cachedViews.includes(view.name)) return; |
| | | if (view.meta && !view.meta.noCache) { |
| | | state.cachedViews.push(view.name) |
| | | state.cachedViews.push(view.name); |
| | | } |
| | | }, |
| | | DEL_VISITED_VIEW: (state, view) => { |
| | | for (const [i, v] of state.visitedViews.entries()) { |
| | | if (v.path === view.path) { |
| | | state.visitedViews.splice(i, 1) |
| | | break |
| | | state.visitedViews.splice(i, 1); |
| | | break; |
| | | } |
| | | } |
| | | state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) |
| | | state.iframeViews = state.iframeViews.filter( |
| | | (item) => item.path !== view.path |
| | | ); |
| | | }, |
| | | DEL_IFRAME_VIEW: (state, view) => { |
| | | state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) |
| | | state.iframeViews = state.iframeViews.filter( |
| | | (item) => item.path !== view.path |
| | | ); |
| | | }, |
| | | DEL_CACHED_VIEW: (state, view) => { |
| | | const index = state.cachedViews.indexOf(view.name) |
| | | index > -1 && state.cachedViews.splice(index, 1) |
| | | const index = state.cachedViews.indexOf(view.name); |
| | | index > -1 && state.cachedViews.splice(index, 1); |
| | | }, |
| | | |
| | | DEL_OTHERS_VISITED_VIEWS: (state, view) => { |
| | | state.visitedViews = state.visitedViews.filter(v => { |
| | | return v.meta.affix || v.path === view.path |
| | | }) |
| | | state.iframeViews = state.iframeViews.filter(item => item.path === view.path) |
| | | state.visitedViews = state.visitedViews.filter((v) => { |
| | | return v.meta.affix || v.path === view.path; |
| | | }); |
| | | state.iframeViews = state.iframeViews.filter( |
| | | (item) => item.path === view.path |
| | | ); |
| | | }, |
| | | DEL_OTHERS_CACHED_VIEWS: (state, view) => { |
| | | const index = state.cachedViews.indexOf(view.name) |
| | | const index = state.cachedViews.indexOf(view.name); |
| | | if (index > -1) { |
| | | state.cachedViews = state.cachedViews.slice(index, index + 1) |
| | | state.cachedViews = state.cachedViews.slice(index, index + 1); |
| | | } else { |
| | | state.cachedViews = [] |
| | | state.cachedViews = []; |
| | | } |
| | | }, |
| | | DEL_ALL_VISITED_VIEWS: state => { |
| | | DEL_ALL_VISITED_VIEWS: (state) => { |
| | | // keep affix tags |
| | | const affixTags = state.visitedViews.filter(tag => tag.meta.affix) |
| | | state.visitedViews = affixTags |
| | | state.iframeViews = [] |
| | | const affixTags = state.visitedViews.filter((tag) => tag.meta.affix); |
| | | state.visitedViews = affixTags; |
| | | state.iframeViews = []; |
| | | }, |
| | | DEL_ALL_CACHED_VIEWS: state => { |
| | | state.cachedViews = [] |
| | | DEL_ALL_CACHED_VIEWS: (state) => { |
| | | state.cachedViews = []; |
| | | }, |
| | | UPDATE_VISITED_VIEW: (state, view) => { |
| | | for (let v of state.visitedViews) { |
| | | if (v.path === view.path) { |
| | | v = Object.assign(v, view) |
| | | break |
| | | v = Object.assign(v, view); |
| | | break; |
| | | } |
| | | } |
| | | }, |
| | | DEL_RIGHT_VIEWS: (state, view) => { |
| | | const index = state.visitedViews.findIndex(v => v.path === view.path) |
| | | const index = state.visitedViews.findIndex((v) => v.path === view.path); |
| | | if (index === -1) { |
| | | return |
| | | return; |
| | | } |
| | | state.visitedViews = state.visitedViews.filter((item, idx) => { |
| | | if (idx <= index || (item.meta && item.meta.affix)) { |
| | | return true |
| | | return true; |
| | | } |
| | | const i = state.cachedViews.indexOf(item.name) |
| | | const i = state.cachedViews.indexOf(item.name); |
| | | if (i > -1) { |
| | | state.cachedViews.splice(i, 1) |
| | | state.cachedViews.splice(i, 1); |
| | | } |
| | | if(item.meta.link) { |
| | | const fi = state.iframeViews.findIndex(v => v.path === item.path) |
| | | state.iframeViews.splice(fi, 1) |
| | | if (item.meta.link) { |
| | | const fi = state.iframeViews.findIndex((v) => v.path === item.path); |
| | | state.iframeViews.splice(fi, 1); |
| | | } |
| | | return false |
| | | }) |
| | | return false; |
| | | }); |
| | | }, |
| | | DEL_LEFT_VIEWS: (state, view) => { |
| | | const index = state.visitedViews.findIndex(v => v.path === view.path) |
| | | const index = state.visitedViews.findIndex((v) => v.path === view.path); |
| | | if (index === -1) { |
| | | return |
| | | return; |
| | | } |
| | | state.visitedViews = state.visitedViews.filter((item, idx) => { |
| | | if (idx >= index || (item.meta && item.meta.affix)) { |
| | | return true |
| | | return true; |
| | | } |
| | | const i = state.cachedViews.indexOf(item.name) |
| | | const i = state.cachedViews.indexOf(item.name); |
| | | if (i > -1) { |
| | | state.cachedViews.splice(i, 1) |
| | | state.cachedViews.splice(i, 1); |
| | | } |
| | | if(item.meta.link) { |
| | | const fi = state.iframeViews.findIndex(v => v.path === item.path) |
| | | state.iframeViews.splice(fi, 1) |
| | | if (item.meta.link) { |
| | | const fi = state.iframeViews.findIndex((v) => v.path === item.path); |
| | | state.iframeViews.splice(fi, 1); |
| | | } |
| | | return false |
| | | }) |
| | | } |
| | | } |
| | | return false; |
| | | }); |
| | | }, |
| | | }; |
| | | |
| | | const actions = { |
| | | addView({ dispatch }, view) { |
| | | dispatch('addVisitedView', view) |
| | | dispatch('addCachedView', view) |
| | | dispatch("addVisitedView", view); |
| | | dispatch("addCachedView", view); |
| | | }, |
| | | addIframeView({ commit }, view) { |
| | | commit('ADD_IFRAME_VIEW', view) |
| | | commit("ADD_IFRAME_VIEW", view); |
| | | }, |
| | | addVisitedView({ commit }, view) { |
| | | commit('ADD_VISITED_VIEW', view) |
| | | commit("ADD_VISITED_VIEW", view); |
| | | }, |
| | | addCachedView({ commit }, view) { |
| | | commit('ADD_CACHED_VIEW', view) |
| | | commit("ADD_CACHED_VIEW", view); |
| | | }, |
| | | delView({ dispatch, state }, view) { |
| | | return new Promise(resolve => { |
| | | dispatch('delVisitedView', view) |
| | | dispatch('delCachedView', view) |
| | | return new Promise((resolve) => { |
| | | dispatch("delVisitedView", view); |
| | | dispatch("delCachedView", view); |
| | | resolve({ |
| | | visitedViews: [...state.visitedViews], |
| | | cachedViews: [...state.cachedViews] |
| | | }) |
| | | }) |
| | | cachedViews: [...state.cachedViews], |
| | | }); |
| | | }); |
| | | }, |
| | | delVisitedView({ commit, state }, view) { |
| | | return new Promise(resolve => { |
| | | commit('DEL_VISITED_VIEW', view) |
| | | resolve([...state.visitedViews]) |
| | | }) |
| | | return new Promise((resolve) => { |
| | | commit("DEL_VISITED_VIEW", view); |
| | | resolve([...state.visitedViews]); |
| | | }); |
| | | }, |
| | | delIframeView({ commit, state }, view) { |
| | | return new Promise(resolve => { |
| | | commit('DEL_IFRAME_VIEW', view) |
| | | resolve([...state.iframeViews]) |
| | | }) |
| | | return new Promise((resolve) => { |
| | | commit("DEL_IFRAME_VIEW", view); |
| | | resolve([...state.iframeViews]); |
| | | }); |
| | | }, |
| | | delCachedView({ commit, state }, view) { |
| | | return new Promise(resolve => { |
| | | commit('DEL_CACHED_VIEW', view) |
| | | resolve([...state.cachedViews]) |
| | | }) |
| | | return new Promise((resolve) => { |
| | | commit("DEL_CACHED_VIEW", view); |
| | | resolve([...state.cachedViews]); |
| | | }); |
| | | }, |
| | | delOthersViews({ dispatch, state }, view) { |
| | | return new Promise(resolve => { |
| | | dispatch('delOthersVisitedViews', view) |
| | | dispatch('delOthersCachedViews', view) |
| | | return new Promise((resolve) => { |
| | | dispatch("delOthersVisitedViews", view); |
| | | dispatch("delOthersCachedViews", view); |
| | | resolve({ |
| | | visitedViews: [...state.visitedViews], |
| | | cachedViews: [...state.cachedViews] |
| | | }) |
| | | }) |
| | | cachedViews: [...state.cachedViews], |
| | | }); |
| | | }); |
| | | }, |
| | | delOthersVisitedViews({ commit, state }, view) { |
| | | return new Promise(resolve => { |
| | | commit('DEL_OTHERS_VISITED_VIEWS', view) |
| | | resolve([...state.visitedViews]) |
| | | }) |
| | | return new Promise((resolve) => { |
| | | commit("DEL_OTHERS_VISITED_VIEWS", view); |
| | | resolve([...state.visitedViews]); |
| | | }); |
| | | }, |
| | | delOthersCachedViews({ commit, state }, view) { |
| | | return new Promise(resolve => { |
| | | commit('DEL_OTHERS_CACHED_VIEWS', view) |
| | | resolve([...state.cachedViews]) |
| | | }) |
| | | return new Promise((resolve) => { |
| | | commit("DEL_OTHERS_CACHED_VIEWS", view); |
| | | resolve([...state.cachedViews]); |
| | | }); |
| | | }, |
| | | delAllViews({ dispatch, state }, view) { |
| | | return new Promise(resolve => { |
| | | dispatch('delAllVisitedViews', view) |
| | | dispatch('delAllCachedViews', view) |
| | | return new Promise((resolve) => { |
| | | dispatch("delAllVisitedViews", view); |
| | | dispatch("delAllCachedViews", view); |
| | | resolve({ |
| | | visitedViews: [...state.visitedViews], |
| | | cachedViews: [...state.cachedViews] |
| | | }) |
| | | }) |
| | | cachedViews: [...state.cachedViews], |
| | | }); |
| | | }); |
| | | }, |
| | | delAllVisitedViews({ commit, state }) { |
| | | return new Promise(resolve => { |
| | | commit('DEL_ALL_VISITED_VIEWS') |
| | | resolve([...state.visitedViews]) |
| | | }) |
| | | return new Promise((resolve) => { |
| | | commit("DEL_ALL_VISITED_VIEWS"); |
| | | resolve([...state.visitedViews]); |
| | | }); |
| | | }, |
| | | delAllCachedViews({ commit, state }) { |
| | | return new Promise(resolve => { |
| | | commit('DEL_ALL_CACHED_VIEWS') |
| | | resolve([...state.cachedViews]) |
| | | }) |
| | | return new Promise((resolve) => { |
| | | commit("DEL_ALL_CACHED_VIEWS"); |
| | | resolve([...state.cachedViews]); |
| | | }); |
| | | }, |
| | | updateVisitedView({ commit }, view) { |
| | | commit('UPDATE_VISITED_VIEW', view) |
| | | commit("UPDATE_VISITED_VIEW", view); |
| | | }, |
| | | delRightTags({ commit }, view) { |
| | | return new Promise(resolve => { |
| | | commit('DEL_RIGHT_VIEWS', view) |
| | | resolve([...state.visitedViews]) |
| | | }) |
| | | return new Promise((resolve) => { |
| | | commit("DEL_RIGHT_VIEWS", view); |
| | | resolve([...state.visitedViews]); |
| | | }); |
| | | }, |
| | | delLeftTags({ commit }, view) { |
| | | return new Promise(resolve => { |
| | | commit('DEL_LEFT_VIEWS', view) |
| | | resolve([...state.visitedViews]) |
| | | }) |
| | | return new Promise((resolve) => { |
| | | commit("DEL_LEFT_VIEWS", view); |
| | | resolve([...state.visitedViews]); |
| | | }); |
| | | }, |
| | | } |
| | | }; |
| | | |
| | | export default { |
| | | namespaced: true, |
| | | state, |
| | | mutations, |
| | | actions |
| | | } |
| | | actions, |
| | | }; |