import Vue from "vue"; import Vuex from "vuex"; import tool from "@/assets/js/toolClass"; import { tokenKey, userInfoKey } from "@/assets/js/config"; Vue.use(Vuex); export default new Vuex.Store({ state: { token: tool.getCookie(tokenKey), userInfo: localStorage.getItem(userInfoKey) ? JSON.parse(localStorage.getItem(userInfoKey)) : null, //文旅图库商品 cartTourList: [], crumbs: localStorage.getItem("crumbs") ? JSON.parse(localStorage.getItem("crumbs")) : { bookStore: {}, teachingResource: {}, learnPlatform: {}, personalCenter: {}, }, updateRightPop: 0, headerSearchType: "bookCity", electronicBookList: localStorage.getItem("electronicBookList") ? JSON.parse(localStorage.getItem("electronicBookList")) : [], //电子样书列表 paperBookList: localStorage.getItem("paperBookList") ? JSON.parse(localStorage.getItem("paperBookList")) : [], //纸质样书列表 bookStoreBrowseRecords: localStorage.getItem("bookStoreBrowseRecords") ? JSON.parse(localStorage.getItem("bookStoreBrowseRecords")) : [], // 书城浏览记录 // 缓存组件名称列表 keepAliveList: [], }, getters: {}, mutations: { // 添加电子样书列表 appplyElectronicBook(state, val) { state.electronicBookList.push(val); localStorage.setItem( "electronicBookList", JSON.stringify(state.electronicBookList) ); }, //添加纸质样式列表 appplyPaperBook(state, val) { state.paperBookList.push(val); localStorage.setItem( "paperBookList", JSON.stringify(state.paperBookList) ); }, //删除电子样书列表 removeElectronicBook(state, val) { state.electronicBookList.splice(val, 1); localStorage.setItem( "electronicBookList", JSON.stringify(state.electronicBookList) ); }, //删除纸质样式 removePaperBook(state, val) { state.paperBookList.splice(val, 1); localStorage.setItem( "paperBookList", JSON.stringify(state.paperBookList) ); }, emptyBookList(state, val) { if (val && val.type == "eBook") { state.electronicBookList = val.list.filter((item) => !item.checked); localStorage.setItem( "electronicBookList", JSON.stringify(state.electronicBookList) ); } else if (val && val.type == "paperBook") { state.paperBookList = val.list.filter((item) => !item.checked); localStorage.setItem( "paperBookList", JSON.stringify(state.paperBookList) ); } else { state.paperBookList = []; state.electronicBookList = []; localStorage.removeItem("electronicBookList"); localStorage.removeItem("paperBookList"); } }, changeLogin(state, val) { if (val) { state.token = val; tool.setCookie(tokenKey, val); } else { state.token = null; tool.delCookie(tokenKey); } }, changeUserInfo(state, val) { if (val) { // 默认头像 if (!val.icon) val.icon = require("@/assets/images/homeBg.png"); state.userInfo = JSON.parse(JSON.stringify(val)); localStorage.setItem(userInfoKey, JSON.stringify(val)); } else { state.userInfo = val; localStorage.setItem(userInfoKey, val); } }, //main.js改变vue中购物车 changeVuexCart(state, listObj) { var listName = listObj.list; if (listName == "cartTourList") { state.cartTourList = listObj.newList; } }, // 面包屑 changeCrumbs(state, data) { // 默认添加模块首页 switch (data.type) { case "bookStore": data.data.unshift({ name: "书城", path: "/bookStore", }); break; case "teachingResource": data.data.unshift({ name: "教学服务", path: "/teachingResource", }); break; case "learnPlatform": data.data.unshift({ name: "学习平台", path: "/learnPlatform", }); break; case "personalCenter": data.data.unshift({ name: "个人中心", }); // path: "/personalCenter" // 个人中心 详情页面 点击个人中心(面包屑)不跳转 break; } // 记录key if (!state.crumbs[data.type] || !state.crumbs[data.type].keys) { state.crumbs[data.type] = { keys: [] }; } state.crumbs[data.type].keys.push(data.cid); state.crumbs[data.type][data.cid] = data.data; // 只记录20条,删除旧记录 if (state.crumbs[data.type].keys.length > 20) { let key = state.crumbs[data.type].keys[0]; delete state.crumbs[data.type][key]; state.crumbs[data.type].keys.splice(0, 1); } localStorage.setItem("crumbs", JSON.stringify(state.crumbs)); }, // 更改页面头部搜索框类型 changeHeaderSearchType(state, data) { state.headerSearchType = data; }, addBookStoreBrowseRecords(state, data) { let oldIndex = state.bookStoreBrowseRecords.findIndex( (item) => item.id == data.id ); if (oldIndex != -1) { state.bookStoreBrowseRecords.splice(oldIndex, 1); } state.bookStoreBrowseRecords.unshift(data); if (state.bookStoreBrowseRecords.length > 4) { state.bookStoreBrowseRecords.pop(); } localStorage.setItem( "bookStoreBrowseRecords", JSON.stringify(state.bookStoreBrowseRecords) ); }, // 更新右侧弹出框购物车的数量 updateRightPop(state) { state.updateRightPop += 1; }, // 添加缓存组件 addKeepAlive(state, val) { state.keepAliveList.push(val); }, // 移除缓存组件 delKeepAlive(state, val) { if (state.keepAliveList.findIndex((item) => item == val) != -1) { state.keepAliveList.splice( state.keepAliveList.findIndex((item) => item == val), 1 ); } }, }, actions: { setUserInfo(context, val) { context.commit("changeUserInfo", val); }, setToken(context, val) { context.commit("changeLogin", val); }, setCrumbs(context, data) { // 存储面包屑 if (!data.cid) { data.cid = tool.uuid(8); } context.commit("changeCrumbs", data); if (data.callback) data.callback(data.cid); }, clearBook(context, val) { context.commit("emptyBookList", val); }, setBrowseRecords(context, val) { if (val.moduleType == "bookStore") { if (val.type == "add") { context.commit("addBookStoreBrowseRecords", val.data); } } }, }, modules: {}, });