Browse Source

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

shizhongming 3 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 { export interface RoleInfo {
roleCode: string;
roleName: string; roleName: string;
value: string; superAdminYn: boolean;
} }
/** /**
@ -18,7 +19,7 @@ export interface RoleInfo {
export interface LoginResultModel { export interface LoginResultModel {
user: GetUserInfoModel; user: GetUserInfoModel;
token: string; token: string;
roles: Array<string>; roles: Array<RoleInfo>;
permissions: Array<string>; permissions: Array<string>;
} }

10
src/modules/smart-system/views/role/RoleListView.vue

@ -84,12 +84,18 @@
border: true, border: true,
stripe: true, stripe: true,
height: 'auto', height: 'auto',
highlightHoverRow: true,
highlightCurrentRow: true,
pagerConfig: true, pagerConfig: true,
columnConfig: { columnConfig: {
resizable: true, resizable: true,
}, },
rowConfig: {
isHover: true,
isCurrent: true,
},
sortConfig: {
remote: true,
defaultSort: { field: 'seq', order: 'asc' },
},
useSearchForm: true, useSearchForm: true,
searchFormConfig: { searchFormConfig: {
compact: true, 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 { enum Api {
list = '/sys/tenant/manager/list', list = '/sys/tenant/manager/list',
getById = '/sys/tenant/manager/getById', getById = '/sys/tenant/manager/getById',
batchSaveUpdate = '/sys/tenant/manager/saveUpdateBatch', saveUpdate = '/sys/tenant/manager/saveUpdate',
delete = '/sys/tenant/manager/batchDeleteById', delete = '/sys/tenant/manager/batchDeleteById',
setUseYn = '/sys/tenant/manager/setUseYn', setUseYn = '/sys/tenant/manager/setUseYn',
listIsolationStrategy = '/sys/tenant/manager/listIsolationStrategy', 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({ return defHttp.post({
service: ApiServiceEnum.SMART_SYSTEM, service: ApiServiceEnum.SMART_SYSTEM,
url: Api.batchSaveUpdate, url: Api.saveUpdate,
data: modelList, data: modelList,
}); });
}; };

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

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

2
src/store/modules/permission.ts

@ -131,7 +131,7 @@ export const usePermissionStore = defineStore({
const { roles } = meta || {}; const { roles } = meta || {};
if (!roles) return true; if (!roles) return true;
// 进行角色权限判断 // 进行角色权限判断
return roleList.some((role) => roles.includes(role)); return roleList.some((role) => roles.includes(role.roleCode));
}; };
const routeRemoveIgnoreFilter = (route: AppRouteRecordRaw) => { 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 type { ErrorMessageMode } from '#/axios';
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import { store } from '@/store'; import { store } from '@/store';
import { RoleEnum } from '@/enums/roleEnum';
import { PageEnum } from '@/enums/pageEnum'; import { PageEnum } from '@/enums/pageEnum';
import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '@/enums/cacheEnum'; import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '@/enums/cacheEnum';
import { createPassword, getAuthCache, setAuthCache } from '@/utils/auth'; import { createPassword, getAuthCache, setAuthCache } from '@/utils/auth';
@ -25,7 +24,7 @@ import { h } from 'vue';
interface UserState { interface UserState {
userInfo: Nullable<UserInfo>; userInfo: Nullable<UserInfo>;
token?: string; token?: string;
roleList: string[]; roleList: RoleInfo[];
sessionTimeout?: boolean; sessionTimeout?: boolean;
lastUpdateTime: number; lastUpdateTime: number;
} }
@ -51,8 +50,8 @@ export const useUserStore = defineStore({
getToken(state): string { getToken(state): string {
return state.token || getAuthCache<string>(TOKEN_KEY); return state.token || getAuthCache<string>(TOKEN_KEY);
}, },
getRoleList(state): string[] { getRoleList(state): RoleInfo[] {
return state.roleList.length > 0 ? state.roleList : getAuthCache<RoleEnum[]>(ROLES_KEY); return state.roleList.length > 0 ? state.roleList : getAuthCache<RoleInfo[]>(ROLES_KEY);
}, },
getSessionTimeout(state): boolean { getSessionTimeout(state): boolean {
return !!state.sessionTimeout; return !!state.sessionTimeout;
@ -69,13 +68,20 @@ export const useUserStore = defineStore({
getIsPlatformTenant(): boolean { getIsPlatformTenant(): boolean {
return this.getUserTenant?.platformYn || false; return this.getUserTenant?.platformYn || false;
}, },
/**
* 是否是超级管理员用户
* @param state
*/
getIsSuperAdmin(state): boolean {
return state.roleList.some((role) => role.superAdminYn);
},
}, },
actions: { actions: {
setToken(info: string | undefined) { setToken(info: string | undefined) {
this.token = info ? info : ''; // for null or undefined value this.token = info ? info : ''; // for null or undefined value
setAuthCache(TOKEN_KEY, info); setAuthCache(TOKEN_KEY, info);
}, },
setRoleList(roleList: string[]) { setRoleList(roleList: RoleInfo[]) {
this.roleList = roleList; this.roleList = roleList;
setAuthCache(ROLES_KEY, 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 projectSetting from '@/settings/projectSetting';
import sha256 from 'crypto-js/sha256'; import sha256 from 'crypto-js/sha256';
import { ApiServiceEnum, defHttp } from '@/utils/http/axios'; import { ApiServiceEnum, defHttp } from '@/utils/http/axios';
import { UserInfo } from '#/store'; import { RoleInfo, UserInfo } from '#/store';
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
import { usePermission } from '@/hooks/web/usePermission'; import { usePermission } from '@/hooks/web/usePermission';
import { isString } from '@/utils/is'; import { isString } from '@/utils/is';
@ -45,7 +45,7 @@ export const createPassword = (username: string, password: string) => {
*/ */
export const isSuperAdmin = (): boolean => { export const isSuperAdmin = (): boolean => {
const userStore = useUserStore(); const userStore = useUserStore();
return userStore.getRoleList.includes('SUPERADMIN'); return userStore.getIsSuperAdmin;
}; };
/** /**
@ -99,7 +99,7 @@ export const getCurrentUserId = (): string | number => {
return getUserInfo().userId; return getUserInfo().userId;
}; };
export const getUserRole = (): string[] => { export const getUserRole = (): RoleInfo[] => {
const userStore = useUserStore(); const userStore = useUserStore();
return userStore.getRoleList; return userStore.getRoleList;
}; };

6
types/store.d.ts

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

Loading…
Cancel
Save