index.js 4.78 KB
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