浏览代码

feat(架构): 租户切换功能完善

shizhongming 2 年之前
父节点
当前提交
c2c874ae7a

+ 3 - 2
src/api/sys/model/userModel.ts

@@ -8,8 +8,9 @@ export interface LoginParams {
 }
 
 export interface RoleInfo {
+  roleCode: string;
   roleName: string;
-  value: string;
+  superAdminYn: boolean;
 }
 
 /**
@@ -18,7 +19,7 @@ export interface RoleInfo {
 export interface LoginResultModel {
   user: GetUserInfoModel;
   token: string;
-  roles: Array<string>;
+  roles: Array<RoleInfo>;
   permissions: Array<string>;
 }
 

+ 8 - 2
src/modules/smart-system/views/role/RoleListView.vue

@@ -84,12 +84,18 @@
     border: true,
     stripe: true,
     height: 'auto',
-    highlightHoverRow: true,
-    highlightCurrentRow: true,
     pagerConfig: true,
     columnConfig: {
       resizable: true,
     },
+    rowConfig: {
+      isHover: true,
+      isCurrent: true,
+    },
+    sortConfig: {
+      remote: true,
+      defaultSort: { field: 'seq', order: 'asc' },
+    },
     useSearchForm: true,
     searchFormConfig: {
       compact: true,

+ 3 - 3
src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.api.ts

@@ -3,7 +3,7 @@ import { ApiServiceEnum, defHttp } from '@/utils/http/axios';
 enum Api {
   list = '/sys/tenant/manager/list',
   getById = '/sys/tenant/manager/getById',
-  batchSaveUpdate = '/sys/tenant/manager/saveUpdateBatch',
+  saveUpdate = '/sys/tenant/manager/saveUpdate',
   delete = '/sys/tenant/manager/batchDeleteById',
   setUseYn = '/sys/tenant/manager/setUseYn',
   listIsolationStrategy = '/sys/tenant/manager/listIsolationStrategy',
@@ -30,10 +30,10 @@ export const listApi = (params) => {
   });
 };
 
-export const batchSaveUpdateApi = (modelList: any[]) => {
+export const saveUpdateApi = (modelList: any[]) => {
   return defHttp.post({
     service: ApiServiceEnum.SMART_SYSTEM,
-    url: Api.batchSaveUpdate,
+    url: Api.saveUpdate,
     data: modelList,
   });
 };

+ 2 - 2
src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.vue

@@ -44,7 +44,7 @@
     SYSTEM_TENANT_TYPE_DICT,
   } from './SysTenantListView.config';
   import {
-    batchSaveUpdateApi,
+    saveUpdateApi,
     deleteApi,
     getByIdApi,
     listApi,
@@ -138,7 +138,7 @@
           return listApi(params.ajaxParameter);
         },
         save: ({ body: { insertRecords, updateRecords } }) =>
-          batchSaveUpdateApi([...insertRecords, ...updateRecords]),
+          saveUpdateApi([...insertRecords, ...updateRecords][0]),
         delete: ({ body: { removeRecords } }) => deleteApi(removeRecords),
         getById: (params) => getByIdApi(params.id),
         useYn: setUseYnApi,

+ 1 - 1
src/store/modules/permission.ts

@@ -131,7 +131,7 @@ export const usePermissionStore = defineStore({
         const { roles } = meta || {};
         if (!roles) return true;
         // 进行角色权限判断
-        return roleList.some((role) => roles.includes(role));
+        return roleList.some((role) => roles.includes(role.roleCode));
       };
 
       const routeRemoveIgnoreFilter = (route: AppRouteRecordRaw) => {

+ 12 - 6
src/store/modules/user.ts

@@ -1,8 +1,7 @@
-import type { UserInfo, UserTenant } from '#/store';
+import { RoleInfo, UserInfo, UserTenant } from '#/store';
 import type { ErrorMessageMode } from '#/axios';
 import { defineStore } from 'pinia';
 import { store } from '@/store';
-import { RoleEnum } from '@/enums/roleEnum';
 import { PageEnum } from '@/enums/pageEnum';
 import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '@/enums/cacheEnum';
 import { createPassword, getAuthCache, setAuthCache } from '@/utils/auth';
@@ -25,7 +24,7 @@ import { h } from 'vue';
 interface UserState {
   userInfo: Nullable<UserInfo>;
   token?: string;
-  roleList: string[];
+  roleList: RoleInfo[];
   sessionTimeout?: boolean;
   lastUpdateTime: number;
 }
@@ -51,8 +50,8 @@ export const useUserStore = defineStore({
     getToken(state): string {
       return state.token || getAuthCache<string>(TOKEN_KEY);
     },
-    getRoleList(state): string[] {
-      return state.roleList.length > 0 ? state.roleList : getAuthCache<RoleEnum[]>(ROLES_KEY);
+    getRoleList(state): RoleInfo[] {
+      return state.roleList.length > 0 ? state.roleList : getAuthCache<RoleInfo[]>(ROLES_KEY);
     },
     getSessionTimeout(state): boolean {
       return !!state.sessionTimeout;
@@ -69,13 +68,20 @@ export const useUserStore = defineStore({
     getIsPlatformTenant(): boolean {
       return this.getUserTenant?.platformYn || false;
     },
+    /**
+     * 是否是超级管理员用户
+     * @param state
+     */
+    getIsSuperAdmin(state): boolean {
+      return state.roleList.some((role) => role.superAdminYn);
+    },
   },
   actions: {
     setToken(info: string | undefined) {
       this.token = info ? info : ''; // for null or undefined value
       setAuthCache(TOKEN_KEY, info);
     },
-    setRoleList(roleList: string[]) {
+    setRoleList(roleList: RoleInfo[]) {
       this.roleList = roleList;
       setAuthCache(ROLES_KEY, roleList);
     },

+ 3 - 3
src/utils/auth/index.ts

@@ -3,7 +3,7 @@ import { CacheTypeEnum, TOKEN_KEY } from '@/enums/cacheEnum';
 import projectSetting from '@/settings/projectSetting';
 import sha256 from 'crypto-js/sha256';
 import { ApiServiceEnum, defHttp } from '@/utils/http/axios';
-import { UserInfo } from '#/store';
+import { RoleInfo, UserInfo } from '#/store';
 import { useUserStore } from '@/store/modules/user';
 import { usePermission } from '@/hooks/web/usePermission';
 import { isString } from '@/utils/is';
@@ -45,7 +45,7 @@ export const createPassword = (username: string, password: string) => {
  */
 export const isSuperAdmin = (): boolean => {
   const userStore = useUserStore();
-  return userStore.getRoleList.includes('SUPERADMIN');
+  return userStore.getIsSuperAdmin;
 };
 
 /**
@@ -99,7 +99,7 @@ export const getCurrentUserId = (): string | number => {
   return getUserInfo().userId;
 };
 
-export const getUserRole = (): string[] => {
+export const getUserRole = (): RoleInfo[] => {
   const userStore = useUserStore();
   return userStore.getRoleList;
 };

+ 6 - 0
types/store.d.ts

@@ -89,3 +89,9 @@ export interface SystemProperties {
    */
   captchaIdent?: string;
 }
+
+export interface RoleInfo {
+  roleCode: string;
+  roleName: string;
+  superAdminYn: boolean;
+}