From 3835cf1ca8d5ac8475052d3876ebeb4a2c4160f1 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Mon, 22 Jan 2024 14:22:02 +0800
Subject: [PATCH] 根据角色,动态切换首页,及首页变更的一系列相关调整

---
 src/store/modules/user.js |  443 ++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 273 insertions(+), 170 deletions(-)

diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index f92f525..b71edea 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,272 +1,376 @@
-import {setToken, setRefreshToken, removeToken, removeRefreshToken} from '@/util/auth'
-import {Message} from 'element-ui'
-import {setStore, getStore} from '@/util/store'
-import {isURL, validatenull} from '@/util/validate'
-import {deepClone} from '@/util/util'
-import website from '@/config/website'
-import {loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons} from '@/api/user'
-import {getTopMenu, getRoutes} from '@/api/system/menu'
-import md5 from 'js-md5'
+import {
+  setToken,
+  setRefreshToken,
+  removeToken,
+  removeRefreshToken,
+} from "@/util/auth";
+import { Alert, Message } from "element-ui";
+import { setStore, getStore } from "@/util/store";
+import { isURL, validatenull } from "@/util/validate";
+import { deepClone } from "@/util/util";
+import website from "@/config/website";
+import {
+  loginByUsername,
+  loginBySocial,
+  loginBySso,
+  getUserInfo,
+  logout,
+  refreshToken,
+  getButtons,
+} from "@/api/user";
+import { getTopMenu, getRoutes } from "@/api/system/menu";
+import md5 from "js-md5";
 
+function findChildrenUrl(data) {
+  if ("children" in data[0] && data[0].children.length > 0) {
+    return findChildrenUrl(data[0].children);
+  } else {
+    return data[0];
+  }
+}
 
 function addPath(ele, first) {
   const menu = website.menu;
   const propsConfig = menu.props;
   const propsDefault = {
-    label: propsConfig.label || 'name',
-    path: propsConfig.path || 'path',
-    icon: propsConfig.icon || 'icon',
-    children: propsConfig.children || 'children'
-  }
+    label: propsConfig.label || "name",
+    path: propsConfig.path || "path",
+    icon: propsConfig.icon || "icon",
+    children: propsConfig.children || "children",
+  };
   const icon = ele[propsDefault.icon];
   ele[propsDefault.icon] = validatenull(icon) ? menu.iconDefault : icon;
-  const isChild = ele[propsDefault.children] && ele[propsDefault.children].length !== 0;
+  const isChild =
+    ele[propsDefault.children] && ele[propsDefault.children].length !== 0;
   if (!isChild) ele[propsDefault.children] = [];
   if (!isChild && first && !isURL(ele[propsDefault.path])) {
-    ele[propsDefault.path] = ele[propsDefault.path] + '/index'
+    ele[propsDefault.path] = ele[propsDefault.path] + "/index";
   } else {
-    ele[propsDefault.children].forEach(child => {
+    ele[propsDefault.children].forEach((child) => {
       addPath(child);
-    })
+    });
   }
-
 }
 
 const user = {
   state: {
-    tenantId: getStore({name: 'tenantId'}) || '',
-    userInfo: getStore({name: 'userInfo'}) || [],
-    permission: getStore({name: 'permission'}) || {},
+    tenantId: getStore({ name: "tenantId" }) || "",
+    userInfo: getStore({ name: "userInfo" }) || [],
+    permission: getStore({ name: "permission" }) || {},
     roles: [],
     menuId: {},
-    menu: getStore({name: 'menu'}) || [],
-    menuAll: getStore({name: 'menuAll'}) || [],
-    token: getStore({name: 'token'}) || '',
-    refreshToken: getStore({name: 'refreshToken'}) || '',
+    menu: getStore({ name: "menu" }) || [],
+    menuAll: getStore({ name: "menuAll" }) || [],
+    token: getStore({ name: "token" }) || "",
+    refreshToken: getStore({ name: "refreshToken" }) || "",
+    homeFirstPage: getStore({ name: "firstPage" }) || "",
+    homeFirstTagPage: getStore({ name: "firstTagPage" }) || {},
   },
   actions: {
     //根据用户名登录
-    LoginByUsername({commit}, userInfo) {
+    LoginByUsername({ dispatch, commit }, userInfo) {
       return new Promise((resolve, reject) => {
-        loginByUsername(userInfo.tenantId, userInfo.deptId, userInfo.roleId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
-          const data = res.data;
-          if (data.error_description) {
-            Message({
-              message: data.error_description,
-              type: 'error'
-            })
-          } else {
-            commit('SET_TOKEN', data.access_token);
-            commit('SET_REFRESH_TOKEN', data.refresh_token);
-            commit('SET_TENANT_ID', data.tenant_id);
-            commit('SET_USER_INFO', data);
-            commit('DEL_ALL_TAG');
-            commit('CLEAR_LOCK');
-          }
-          resolve();
-        }).catch(error => {
-          reject(error);
-        })
-      })
+        loginByUsername(
+          userInfo.tenantId,
+          userInfo.deptId,
+          userInfo.roleId,
+          userInfo.username,
+          md5(userInfo.password),
+          userInfo.type,
+          userInfo.key,
+          userInfo.code
+        )
+          .then((res) => {
+            const data = res.data;
+            if (data.error_description) {
+              Message({
+                message: data.error_description,
+                type: "error",
+              });
+            } else {
+              commit("SET_TOKEN", data.access_token);
+              commit("SET_REFRESH_TOKEN", data.refresh_token);
+              commit("SET_TENANT_ID", data.tenant_id);
+              commit("SET_USER_INFO", data);
+              commit("CLEAR_LOCK");
+              commit("CLEAR_LOCK");
+
+              dispatch("GetMenu").then((menuData) => {
+                let fistMenu = findChildrenUrl(menuData);
+                if (data.role_name == "jdgly" || data.role_name == "sqgly") {
+                  setStore({ name: "showMenu", content: true });
+
+                  commit("SET_HOMEFIRSTTAGPAGE", {
+                    label: "首页",
+                    value: "/wel/index",
+                    params: {},
+                    query: {},
+                    meta: {
+                      i18n: "dashboard",
+                    },
+                    group: [],
+                    close: false,
+                  });
+
+                  commit("SET_HOMEFIRSTPAGE", "/wel");
+
+                  resolve({});
+                } else {
+                  setStore({ name: "showMenu", content: false });
+
+                  commit("SET_HOMEFIRSTTAGPAGE", {
+                    label: fistMenu.name,
+                    value: fistMenu.path,
+                    params: {},
+                    query: {},
+                    meta: {
+                      i18n: "dashboard",
+                    },
+                    group: [],
+                    close: false,
+                  });
+
+                  commit("SET_HOMEFIRSTPAGE", fistMenu.path);
+
+                  resolve({ fistMenu, menuData });
+                }
+
+                commit("DEL_ALL_TAG");
+              });
+            }
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
     },
     //根据手机号登录
-    LoginByPhone({commit}, userInfo) {
+    LoginByPhone({ commit }, userInfo) {
       return new Promise((resolve) => {
-        loginByUsername(userInfo.phone, userInfo.code).then(res => {
+        loginByUsername(userInfo.phone, userInfo.code).then((res) => {
           const data = res.data.data;
-          commit('SET_TOKEN', data);
-          commit('DEL_ALL_TAG');
-          commit('CLEAR_LOCK');
+          commit("SET_TOKEN", data);
+          commit("DEL_ALL_TAG");
+          commit("CLEAR_LOCK");
           resolve();
-        })
-      })
+        });
+      });
     },
     //根据第三方信息登录
-    LoginBySocial({commit}, userInfo) {
+    LoginBySocial({ commit }, userInfo) {
       return new Promise((resolve) => {
-        loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state).then(res => {
+        loginBySocial(
+          userInfo.tenantId,
+          userInfo.source,
+          userInfo.code,
+          userInfo.state
+        ).then((res) => {
           const data = res.data;
           if (data.error_description) {
             Message({
               message: data.error_description,
-              type: 'error'
-            })
+              type: "error",
+            });
           } else {
-            commit('SET_TOKEN', data.access_token);
-            commit('SET_REFRESH_TOKEN', data.refresh_token);
-            commit('SET_USER_INFO', data);
-            commit('SET_TENANT_ID', data.tenant_id);
-            commit('DEL_ALL_TAG');
-            commit('CLEAR_LOCK');
+            commit("SET_TOKEN", data.access_token);
+            commit("SET_REFRESH_TOKEN", data.refresh_token);
+            commit("SET_USER_INFO", data);
+            commit("SET_TENANT_ID", data.tenant_id);
+            commit("DEL_ALL_TAG");
+            commit("CLEAR_LOCK");
           }
           resolve();
-        })
-      })
+        });
+      });
     },
     //根据单点信息登录
-    LoginBySso({commit}, userInfo) {
+    LoginBySso({ commit }, userInfo) {
       return new Promise((resolve) => {
-        loginBySso(userInfo.state, userInfo.code).then(res => {
+        loginBySso(userInfo.state, userInfo.code).then((res) => {
           const data = res.data;
           if (data.error_description) {
             Message({
               message: data.error_description,
-              type: 'error'
-            })
+              type: "error",
+            });
           } else {
-            commit('SET_TOKEN', data.access_token);
-            commit('SET_REFRESH_TOKEN', data.refresh_token);
-            commit('SET_USER_INFO', data);
-            commit('SET_TENANT_ID', data.tenant_id);
-            commit('DEL_ALL_TAG');
-            commit('CLEAR_LOCK');
+            commit("SET_TOKEN", data.access_token);
+            commit("SET_REFRESH_TOKEN", data.refresh_token);
+            commit("SET_USER_INFO", data);
+            commit("SET_TENANT_ID", data.tenant_id);
+            commit("DEL_ALL_TAG");
+            commit("CLEAR_LOCK");
           }
           resolve();
-        })
-      })
+        });
+      });
     },
     //获取用户信息
-    GetUserInfo({commit}) {
+    GetUserInfo({ commit }) {
       return new Promise((resolve, reject) => {
-        getUserInfo().then((res) => {
-          const data = res.data.data;
-          commit('SET_ROLES', data.roles);
-          resolve(data);
-        }).catch(err => {
-          reject(err);
-        })
-      })
+        getUserInfo()
+          .then((res) => {
+            const data = res.data.data;
+            commit("SET_ROLES", data.roles);
+            resolve(data);
+          })
+          .catch((err) => {
+            reject(err);
+          });
+      });
     },
     //刷新token
-    refreshToken({state, commit}, userInfo) {
-      window.console.log('handle refresh token');
+    refreshToken({ state, commit }, userInfo) {
       return new Promise((resolve, reject) => {
-        refreshToken(state.refreshToken, state.tenantId,
+        refreshToken(
+          state.refreshToken,
+          state.tenantId,
           !validatenull(userInfo) ? userInfo.deptId : state.userInfo.dept_id,
           !validatenull(userInfo) ? userInfo.roleId : state.userInfo.role_id
-        ).then(res => {
-          const data = res.data;
-          commit('SET_TOKEN', data.access_token);
-          commit('SET_REFRESH_TOKEN', data.refresh_token);
-          commit('SET_USER_INFO', data);
-          resolve();
-        }).catch(error => {
-          reject(error)
-        })
-      })
+        )
+          .then((res) => {
+            const data = res.data;
+            commit("SET_TOKEN", data.access_token);
+            commit("SET_REFRESH_TOKEN", data.refresh_token);
+            commit("SET_USER_INFO", data);
+            resolve();
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
     },
     // 登出
-    LogOut({commit}) {
+    LogOut({ commit }) {
       return new Promise((resolve, reject) => {
-        logout().then(() => {
-          commit('SET_TOKEN', '');
-          commit('SET_MENU', []);
-          commit('SET_MENU_ALL_NULL', []);
-          commit('SET_ROLES', []);
-          commit('SET_TAG_LIST', []);
-          commit('DEL_ALL_TAG');
-          commit('CLEAR_LOCK');
-          removeToken();
-          removeRefreshToken();
-          resolve();
-        }).catch(error => {
-          reject(error)
-        })
-      })
+        logout()
+          .then(() => {
+            commit("SET_TOKEN", "");
+            commit("SET_MENU", []);
+            commit("SET_MENU_ALL_NULL", []);
+            commit("SET_ROLES", []);
+            commit("SET_TAG_LIST", []);
+            commit("DEL_ALL_TAG");
+            commit("CLEAR_LOCK");
+
+            removeToken();
+            removeRefreshToken();
+            resolve();
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
     },
     //注销session
-    FedLogOut({commit}) {
-      return new Promise(resolve => {
-        commit('SET_TOKEN', '');
-        commit('SET_MENU_ALL_NULL', []);
-        commit('SET_MENU', []);
-        commit('SET_ROLES', []);
-        commit('SET_TAG_LIST', []);
-        commit('DEL_ALL_TAG');
-        commit('CLEAR_LOCK');
+    FedLogOut({ commit }) {
+      return new Promise((resolve) => {
+        commit("SET_TOKEN", "");
+        commit("SET_MENU_ALL_NULL", []);
+        commit("SET_MENU", []);
+        commit("SET_ROLES", []);
+        commit("SET_TAG_LIST", []);
+        commit("DEL_ALL_TAG");
+        commit("CLEAR_LOCK");
+
         removeToken();
         removeRefreshToken();
         resolve();
-      })
+      });
     },
     //获取顶部菜单
     GetTopMenu() {
-      return new Promise(resolve => {
+      return new Promise((resolve) => {
         getTopMenu().then((res) => {
           const data = res.data.data || [];
-          resolve(data)
-        })
-      })
+          resolve(data);
+        });
+      });
     },
     //获取系统菜单
-    GetMenu({commit, dispatch}, topMenuId) {
-      return new Promise(resolve => {
+    GetMenu({ commit, dispatch }, topMenuId) {
+      return new Promise((resolve) => {
         getRoutes(topMenuId).then((res) => {
-          const data = res.data.data
+          const data = res.data.data;
           let menu = deepClone(data);
-          menu.forEach(ele => {
+          menu.forEach((ele) => {
             addPath(ele, true);
           });
-          commit('SET_MENU_ALL', menu)
-          commit('SET_MENU', menu)
-          dispatch('GetButtons');
-          resolve(menu)
-        })
-      })
+          commit("SET_MENU_ALL", menu);
+          commit("SET_MENU", menu);
+          dispatch("GetButtons");
+          resolve(menu);
+        });
+      });
     },
     //获取系统按钮
-    GetButtons({commit}) {
+    GetButtons({ commit }) {
       return new Promise((resolve) => {
-        getButtons().then(res => {
+        getButtons().then((res) => {
           const data = res.data.data;
-          commit('SET_PERMISSION', data);
+          commit("SET_PERMISSION", data);
           resolve();
-        })
-      })
+        });
+      });
     },
   },
   mutations: {
+    SET_HOMEFIRSTPAGE: (state, homeFirstPage) => {
+      setStore({ name: "firstPage", content: homeFirstPage });
+      state.homeFirstPage = homeFirstPage;
+    },
+    SET_HOMEFIRSTTAGPAGE: (state, homeFirstTagPage) => {
+      setStore({
+        name: "firstTagPage",
+        content: homeFirstTagPage,
+      });
+      state.homeFirstTagPage = homeFirstTagPage;
+    },
     SET_TOKEN: (state, token) => {
       setToken(token);
       state.token = token;
-      setStore({name: 'token', content: state.token})
+      setStore({ name: "token", content: state.token });
     },
     SET_MENU_ID(state, menuId) {
       state.menuId = menuId;
     },
     SET_MENU_ALL: (state, menuAll) => {
       let menu = state.menuAll;
-      menuAll.forEach(ele => {
-        if (!menu.find(item => item.label === ele.label && item.path === ele.path)) {
+      menuAll.forEach((ele) => {
+        if (
+          !menu.find(
+            (item) => item.label === ele.label && item.path === ele.path
+          )
+        ) {
           menu.push(ele);
         }
-      })
-      state.menuAll = menu
-      setStore({ name: 'menuAll', content: state.menuAll })
+      });
+      state.menuAll = menu;
+      setStore({ name: "menuAll", content: state.menuAll });
     },
     SET_MENU_ALL_NULL: (state) => {
-      state.menuAll = []
-      setStore({ name: 'menuAll', content: state.menuAll })
+      state.menuAll = [];
+      setStore({ name: "menuAll", content: state.menuAll });
     },
     SET_MENU: (state, menu) => {
-      state.menu = menu
-      setStore({ name: 'menu', content: state.menu })
+      state.menu = menu;
+      setStore({ name: "menu", content: state.menu });
     },
     SET_REFRESH_TOKEN: (state, refreshToken) => {
-      setRefreshToken(refreshToken)
+      setRefreshToken(refreshToken);
       state.refreshToken = refreshToken;
-      setStore({name: 'refreshToken', content: state.refreshToken})
+      setStore({ name: "refreshToken", content: state.refreshToken });
     },
     SET_TENANT_ID: (state, tenantId) => {
       state.tenantId = tenantId;
-      setStore({name: 'tenantId', content: state.tenantId})
+      setStore({ name: "tenantId", content: state.tenantId });
     },
     SET_USER_INFO: (state, userInfo) => {
       if (validatenull(userInfo.avatar)) {
         userInfo.avatar = "/img/bg/img-logo.png";
       }
       state.userInfo = userInfo;
-      setStore({name: 'userInfo', content: state.userInfo})
+      setStore({ name: "userInfo", content: state.userInfo });
     },
     SET_ROLES: (state, roles) => {
       state.roles = roles;
@@ -275,27 +379,26 @@
       let result = [];
 
       function getCode(list) {
-        list.forEach(ele => {
-          if (typeof (ele) === 'object') {
+        list.forEach((ele) => {
+          if (typeof ele === "object") {
             const chiildren = ele.children;
             const code = ele.code;
             if (chiildren) {
-              getCode(chiildren)
+              getCode(chiildren);
             } else {
               result.push(code);
             }
           }
-        })
+        });
       }
 
       getCode(permission);
       state.permission = {};
-      result.forEach(ele => {
+      result.forEach((ele) => {
         state.permission[ele] = true;
       });
-      setStore({name: 'permission', content: state.permission})
-    }
-  }
-
-}
-export default user
+      setStore({ name: "permission", content: state.permission });
+    },
+  },
+};
+export default user;

--
Gitblit v1.9.3