123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- import {
- login,
- logout,
- userinfo,
- menuList,
- dingdingdetail,
- logoutx,
- } from "@/apis/user";
- import {
- getToken,
- setToken,
- removeToken,
- getMenu,
- setMenu,
- removeMenu,
- getBtn,
- setBtn,
- removeBtn,
- getRoles,
- setRoles,
- removeRoles,
- } from "@/utils/auth";
- const state = {
- token: getToken(),
- name: "",
- avatar: require("@/assets/sheji/user.png"),
- introduction: "",
- roles: getRoles() ? getRoles() : "edit",
- btnList: getBtn(),
- navList: getMenu(),
- };
- const mutations = {
- SET_TOKEN: (state, token) => {
- state.token = token;
- },
- SET_MENU: (state, menu) => {
- state.menu = menu;
- },
- SET_HAS: (state, has) => {
- state.has = has;
- },
- SET_INTRODUCTION: (state, introduction) => {
- state.introduction = introduction;
- },
- SET_NAME: (state, name) => {
- state.name = name;
- },
- SET_AVATAR: (state, avatar) => {
- state.avatar = avatar;
- },
- SET_ROLES: (state, roles) => {
- state.roles = roles;
- },
- navListFn(state, val) {
- if (!val) {
- val = [];
- }
- state.navList = val;
- setMenu(val);
- },
- btnListFn(state, val) {
- if (!val) {
- val = [];
- }
- state.btnList = val;
- setBtn(val);
- },
- };
- const actions = {
- // user login
- login({ commit }, userInfo) {
- const { username, password } = userInfo;
- return new Promise((resolve, reject) => {
- login({ username: username.trim(), password: password })
- .then((response) => {
- const { data } = response;
- if (response.code === 0) {
- let ROLES = username === "admin" ? "admin" : "edit";
- commit("SET_TOKEN", data.token);
- commit("SET_ROLES", ROLES);
- setRoles(ROLES);
- setToken(data.token);
- }
- resolve(response);
- })
- .catch((error) => {
- reject(error);
- });
- });
- },
- dingUserInfor({ commit }, code) {
- return new Promise(async (resolve, reject) => {
- dingdingdetail(code)
- .then((response) => {
- const { data } = response;
- if (response.code === 0) {
- commit("SET_TOKEN", data.token);
- setToken(data.token);
- resolve("success");
- } else {
- resolve("error");
- }
- })
- .catch((error) => {
- reject(error);
- });
- });
- },
- async getMenuList({ commit, that }) {
- return new Promise(async (resolve, reject) => {
- if (!getToken()) {
- resolve("noToken");
- } else {
- const { code, data, message } = await menuList({});
- if (code === 0) {
- let list = data;
- list = list.filter((item) => item.child && item.child.length > 0);
- let arrag = [];
- let btnList = [];
- console.log(list);
- list.forEach((v1) => {
- // if(v1.menu_route!=="system" )
- let pItem = {
- name: v1.menu_route,
- path: `/${v1.menu_route}`,
- meta: {
- title: v1.menu_name,
- icon: v1.menu_img,
- },
- children: [],
- };
- v1.child.forEach((v2) => {
- if (v2.menu_route === "menuOperator") {
- if (getRoles() === "admin") {
- let item = {
- path: v2.menu_route,
- name: v2.menu_route,
- meta: {
- title: v2.menu_name,
- icon: v2.menu_img,
- },
- url: v2.menu_url,
- };
- let model = {
- menu_route: v2.menu_route,
- action: v2.action,
- };
- btnList.push(model);
- pItem.children.push(item);
- }
- } else {
- let item = {
- path: v2.menu_route,
- name: v2.menu_route,
- meta: {
- title: v2.menu_name,
- icon: v2.menu_img,
- },
- url: v2.menu_url,
- };
- let model = {
- menu_route: v2.menu_route,
- action: v2.action,
- };
- btnList.push(model);
- pItem.children.push(item);
- }
- });
- arrag.push(pItem);
- });
- console.log(arrag);
- // 生成页面权限
- commit("navListFn", arrag);
- // 生成按钮权限
- commit("btnListFn", btnList);
- // 生成路由
- initRouter(arrag, that);
- // state.commit("loginInfoCommit", res.data);
- resolve("success");
- } else if (code === 101 || code === 102) {
- resolve("noToken");
- } else {
- resolve({ code, data, message });
- }
- }
- });
- },
- // user logout
- async logout({ commit, state, dispatch }) {
- return new Promise(async (resolve, reject) => {
- if (!getToken()) {
- await resetAll({ commit, dispatch });
- resolve();
- } else {
- const { code, data, message } = await logoutx({ token: getToken() });
- if (code === 0) {
- await resetAll({ commit, dispatch });
- resolve();
- } else {
- await resetAll({ commit, dispatch });
- resolve();
- }
- }
- });
- },
- // remove token
- resetToken({ commit }) {
- return new Promise((resolve) => {
- commit("SET_TOKEN", "");
- commit("SET_ROLES", "");
- removeToken();
- resolve();
- removeRoles();
- });
- },
- };
- async function resetAll({ commit, dispatch }) {
- return new Promise((resolve) => {
- commit("SET_TOKEN", "");
- commit("SET_ROLES", "");
- commit("SET_MENU", "");
- commit("SET_HAS", "");
- removeMenu();
- removeBtn();
- removeToken();
- removeRoles();
- // reset visited views and cached views
- // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
- dispatch("tagsView/delAllViews", null, { root: true });
- resolve();
- });
- }
- function initRouter(arr) {
- const IndexRoute = [
- //欢迎页
- {
- path: "/welcome",
- component: () => import("@/layout/index"),
- redirect: "/welcome/dashboard",
- children: [
- {
- path: "dashboard",
- component: () => import("@/views/dashboard/index"),
- name: "Dashboard",
- meta: { title: "首页", icon: "dashboard", affix: true },
- },
- ],
- },
- ];
- arr.map((v1) => {
- v1.component = (resolve) => require([`@/layout/index.vue`], resolve);
- if (v1.children && v1.children.length > 0) {
- v1.redirect = `/${v1.name}/${v1.children[0].name}`;
- v1.children.map((v2) => {
- v2.component = (resolve) => require([`@/views/${v2.url}.vue`], resolve);
- return v2;
- });
- }
- return v1;
- });
- IndexRoute.push(...arr);
- IndexRoute.push({
- path: "404",
- component: () => import("@/views/error-page/404"),
- hidden: false,
- noCache: true,
- });
- IndexRoute.push({
- path: "*",
- redirect: "/404",
- });
- window.vm.$router.addRoutes(IndexRoute);
- }
- export default {
- namespaced: true,
- state,
- mutations,
- actions,
- };
|