import Vue from "vue" import Vuex from "vuex" import Cookies from "js-cookie" import layoutStore from "./modules/layout/index" import { defaultRouter } from "@/router/index" import { encryptLoginPassword } from "@/utils"; import request from "@/api/index" import router from "@/router/index" import { addrouters } from "@/router/index" Vue.use(Vuex) const store = new Vuex.Store({ state: { token: "", csCode: localStorage.getItem("csCode") || "", info: sessionStorage.getItem("info") ? JSON.parse(sessionStorage.getItem("info")) : "", // 每次刷新都要通过token请求个人信息来筛选动态路由 routers: [],//左侧菜单 addRouters: sessionStorage.getItem("addRouters") ? JSON.parse(sessionStorage.getItem("addRouters")) : [],//动态路由 tokenSources: new Map(),//正在请求接口(切换取消请求) }, mutations: { setToken(state, token) { state.token = token }, setCode(state, code) { state.csCode = code; localStorage.setItem("csCode", code) }, setInfo(state, data) { state.info = { role: data.role, permissions: data.permissions, name: data.name, authorityRouter: data.authorityRouter, avatar: data.avatar ? data.avatar : "", uid: data.uid } sessionStorage.setItem("info", JSON.stringify(state.info)) }, setRouters: (state, routers) => { let aRouters = addrouters.filter(item => { let path = item.children[0]?.path.replace("/", "") return routers?.includes(path) }) state.addRouters = aRouters // 保存动态路由用来addRouter state.routers = defaultRouter.concat(aRouters) // 所有有权限的路由表,用来生成菜单列表 sessionStorage.setItem("addRouters", JSON.stringify(routers)) }, setTokenSources(state, data) { if (data instanceof Array) { state.tokenSources.set(data[0], data[1]) } else { state.tokenSources = new Map() } }, delTokenSources(state, data) { state.tokenSources.delete(data) }, }, actions: { Login({ state, commit }, params) { let loginForm = {} loginForm.username = params.username; loginForm.password = encryptLoginPassword(params.password); request.fetchLogin({ ...loginForm }).then(res => { let response = res.data if (response.status == 0) { const userInfo = { ...response.data } commit("setToken", "isLogin"); commit("setInfo", { ...userInfo }); commit("setRouters", [...userInfo.authorityRouter]) state.addRouters.forEach((res) => { router.addRoute(res); }); router.addRoute({ path: "*", redirect: "/404", hidden: true, children: [] }) console.log() if (params.url) { window.location.href = params.url; } else { router.push({ path: "/" }) } } }).catch(() => { // commit("setToken", Cookies.get("JSESSIONID")); }) }, permissions({ state, commit }, that) { // request.fetchLogin(that.loginForm).then(res => { // if (res.status == 200) { commit("setToken", "xxxx") commit("setInfo", { permissions: [ { role: "superAdmin", roleName: "超级管理员", }, ], name: "李老师", // avatar: data.avatar ? data.avatar : "", // uid: data.id, authorityRouter:[ "examinationPaper", "examinationPaperAdd", "examinationPaperEdit", "examinationPaperRecycle", "ask", "askAnalysis", "test", "testAnalysis", "portrait", "setUpConglomerate", "setUpAccount", "setUpSchool", "setUpTeacher", "setUpStudent", "card", "device", "analysis", "down", "downClient", "dataSync" ], }); commit("setRouters", authorityRouter) state.addRouters.forEach((res) => { router.addRoute(res); }); router.addRoute({ path: "*", redirect: "/404", hidden: true, children: [] }) // } // }) } }, getters: { addRouters: state => state.addRouters, token: state => state.token, code: state => state.csCode, info: state => state.info, routers: state => state.routers, logoShow: state => state.layoutStore.logoShow, isCollapse: state => state.layoutStore.isCollapse, uniquerouter: state => state.layoutStore.uniquerouter, tabnavBox: state => state.layoutStore.tabnavBox, rightNav: state => state.layoutStore.rightNav }, modules: { layoutStore } }) export default store