import { StoreOptions } from 'vuex' import Vue from 'vue' import { getHomeHot, getHomeActivity, doSearchDocs, getMyLibList, getDetails, getShow, getDown, getListDetail, getRemove, getAdd, getCoin, getShare, getDocPay, getIndexTags, getAccountInfo, getUserID } from '@/api/main' interface InterfaceStore extends StoreOptions { namespaced?: boolean; } type APIStructure = Record; type modulesOption = InterfaceStore; function recoveryPageData (key: string, defaultValues = {}) { return sessionStorage.getItem(key) ? JSON.parse(sessionStorage.getItem(key) || '') : defaultValues } function checkType (type: string | number) { let typeStr = type switch (type) { case 1: { typeStr = 'word' break } case 2: { typeStr = 'pdf' break } case 3: { typeStr = 'excel' break } case 4: { typeStr = 'ppt' break } case 'doc': { typeStr = 'word' break } case 'xls': { typeStr = 'excel' break } } return typeStr } function formatData (v: APIStructure) { return { img: v?.docImg, type: checkType(v?.docFileType), id: v.docId, title: v?.docName || v?.docTitle, money: v.price, size: v?.docFileSize, page: v?.docPageSize, down: v?.downTimes, contribution: v?.sourceUserId } } const modulesOption: modulesOption = { namespaced: true, state: { // 页面数据缓存(用于跳出页面返回时恢复) homePageData: recoveryPageData('jy-docs-home-page'), searchPageData: recoveryPageData('jy-docs-search-page'), userLib: recoveryPageData('jy-docs-user-lib'), loginInfo: {} }, mutations: { // 保存首页数据 saveHomeData (state, data) { for (const key in data) { Vue.set(state.homePageData, key, data[key]) } sessionStorage.setItem('jy-docs-home-page', JSON.stringify(state.homePageData)) }, saveLoginInfo (state, data) { state.loginInfo = data.data if (data.data.userId) { sessionStorage.setItem('jy-login-info', JSON.stringify(data.data)) } else { sessionStorage.removeItem('jy-login-info') } }, // 搜索页面数据 saveSearchPageState (state, data) { console.log(data) for (const key in data) { state.searchPageData[key] = data[key] } sessionStorage.setItem('jy-docs-search-page', JSON.stringify(data)) }, // 清除搜索页面数据 clearSearchPageState (state) { state.searchPageData = {} sessionStorage.setItem('jy-docs-search-page', JSON.stringify({})) }, // 我的文库页面数据 saveMyLibState (state, data) { for (const key in data) { state.userLib[key] = data[key] } sessionStorage.setItem('jy-docs-user-lib', JSON.stringify(data)) }, // 清除我的文库页面数据 clearMyLibState (state, data = '') { // clearLib,clearCollections if (data === 'clearLib') { if (state.userLib && Object.keys(state.userLib).length !== 0) { delete state.userLib.myLibListState } } else if (data === 'clearCollections') { if (state.userLib && Object.keys(state.userLib).length !== 0) { delete state.userLib.myCollectionListState } } else { state.userLib = {} } sessionStorage.setItem('jy-docs-user-lib', JSON.stringify(state.userLib)) } }, actions: { // 获取登录状态 async getLoginStatus (state) { try { const res = await getUserID() state.commit('saveLoginInfo', res) return res } catch (error) {} }, // 首页数据 async getHome (state) { getHomeHot({ sign: 'new', num: 5 }).then((res: APIStructure) => { if (!res.data.error_msg.length) { state.commit('saveHomeData', { new: res.data.data.map((v: APIStructure) => formatData(v)) }) } }) getHomeHot({ sign: 'hot', num: 5 }).then((res: APIStructure) => { if (!res.data.error_msg.length) { state.commit('saveHomeData', { hot: res.data.data.map((v: APIStructure) => formatData(v)) }) } }) getHomeActivity({ code: 3, size: 3, num: 1 }).then((res: APIStructure) => { if (!res.data.error_msg.length) { state.commit('saveHomeData', { keep: res.data.data.map((v: APIStructure) => formatData(v)) }) } }) }, async getRecommendList (state) { getHomeActivity({ code: 3, size: 3, num: 1 }).then((res: APIStructure) => { if (!res.data.error_msg.length) { state.commit('saveHomeData', { keep: res.data.data.map((v: APIStructure) => formatData(v)) }) } }) }, // 文库查询 async doSearchDocs (state, data) { try { const res = await doSearchDocs(data) return res.data } catch (error) {} }, // 我的文库查询 async getMyLibList (state, data) { try { const res = await getMyLibList(data) return res.data } catch (error) {} }, // 详情 async getDetails (state, data) { try { const res = await getDetails(data) console.log(res) return res.data } catch (error) {} }, // 剑鱼积分详情 async getListDetail (state, data) { try { const res = await getListDetail(data) console.log(res) return res.data } catch (error) {} }, async getShow (state, data) { try { const res = await getShow(data) console.log(res) return res.data } catch (error) {} }, async getDown (state, data) { try { const res = await getDown(data) console.log(res) return res.data } catch (error) {} }, async getShare (state, data) { try { const res = await getShare(data) console.log(res) return res.data } catch (error) {} }, // 文库购买 async getDocPay (state, data) { try { const res = await getDocPay(data) return res.data } catch (error) {} }, // 文库收藏 async getAdd (state, data) { try { const res = await getAdd(data) console.log(res) return res.data } catch (error) {} }, // 文库取消收藏 async getRemove (state, data) { try { const res = await getRemove(data) console.log(res) return res.data } catch (error) {} }, // 剑鱼币 async getCoin (state, data) { try { const res = await getCoin(data) console.log(res) return res.data } catch (error) {} }, // 剑鱼币 async getIndexTags () { try { const res = await getIndexTags() console.log(res) return res.data } catch (error) {} }, // 获取绑定手机号 async getAccountInfo () { try { const res = await getAccountInfo() return res.data } catch (error) {} } }, getters: {} } export default modulesOption