Browse Source

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

shizhongming 2 years ago
parent
commit
c2c874ae7a
  1. 5
      src/api/sys/model/userModel.ts
  2. 10
      src/modules/smart-system/views/role/RoleListView.vue
  3. 6
      src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.api.ts
  4. 4
      src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.vue
  5. 2
      src/store/modules/permission.ts
  6. 18
      src/store/modules/user.ts
  7. 6
      src/utils/auth/index.ts
  8. 6
      types/store.d.ts

5
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>;
}

10
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,

6
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,
});
};

4
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,

2
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) => {

18
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);
},

6
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
types/store.d.ts

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

Loading…
Cancel
Save