Commit 47d023edb03be7a15563601ea2be778e0696babf

Authored by fengwotao
2 parents 0c29a70c c174e0ab

Merge branch 'main_dev' into ft

@@ -124,3 +124,20 @@ export class TenantPageRequest extends BaseQueryRequest { @@ -124,3 +124,20 @@ export class TenantPageRequest extends BaseQueryRequest {
124 this.tenantName = tenantName; 124 this.tenantName = tenantName;
125 } 125 }
126 } 126 }
  127 +
  128 +export interface TenantListItemRecord {
  129 + id: string;
  130 + createTime: string;
  131 + updateTime: string;
  132 + username: string;
  133 + realName: string;
  134 + activateToken: string;
  135 + phoneNumber: string;
  136 + tbUser: string;
  137 + enabled: boolean;
  138 + hasPassword: boolean;
  139 + tenantId: string;
  140 + tenantName: string;
  141 + userStatusEnum: string;
  142 + level: number;
  143 +}
  1 +import { RouteRecordRaw } from 'vue-router';
  2 +import { getEntitiesId } from '/@/api/dashboard';
  3 +import { getMyInfo, getPermCode, getUserToken } from '/@/api/sys/user';
  4 +import { RoleEnum } from '/@/enums/roleEnum';
  5 +import { usePermissionStore } from '/@/store/modules/permission';
  6 +import { useUserStore } from '/@/store/modules/user';
  7 +import { router } from '/@/router';
  8 +import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';
  9 +import { PageEnum } from '/@/enums/pageEnum';
  10 +import { TenantListItemRecord } from '/@/api/tenant/tenantInfo';
  11 +
  12 +export const useFastEnter = async (record: TenantListItemRecord, go: Fn) => {
  13 + const userStore = useUserStore();
  14 + const permissionStore = usePermissionStore();
  15 +
  16 + const { token, refreshToken } = await getUserToken(record.id);
  17 + userStore.storeToken(token, refreshToken);
  18 + const userInfo = await getMyInfo();
  19 + const permissionList = await getPermCode();
  20 + if (
  21 + ![RoleEnum.SYS_ADMIN, RoleEnum.PLATFORM_ADMIN].some(
  22 + (item) => item === userInfo?.roles?.[0] || ''
  23 + )
  24 + ) {
  25 + const res = await getEntitiesId();
  26 + const entityId = res.data[0]?.entityId;
  27 + window.localStorage.setItem('entityId', JSON.stringify(entityId));
  28 + window.sessionStorage.setItem('entityId', JSON.stringify(entityId));
  29 + }
  30 + permissionStore.setPermCodeList(permissionList);
  31 + userStore.setUserInfo(userInfo);
  32 + userStore.setRoleList(userInfo.roles as RoleEnum[]);
  33 + const routes = await permissionStore.buildRoutesAction();
  34 + routes.forEach((route) => {
  35 + router.addRoute(route as unknown as RouteRecordRaw);
  36 + });
  37 + router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
  38 + permissionStore.setDynamicAddedRoute(true);
  39 + if (record?.hasPassword) go(PageEnum.BASE_HOME);
  40 + else go(PageEnum.SYSTEM_PASSWORD);
  41 +};
@@ -103,17 +103,11 @@ @@ -103,17 +103,11 @@
103 import { useGo } from '/@/hooks/web/usePage'; 103 import { useGo } from '/@/hooks/web/usePage';
104 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 104 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
105 import { Authority } from '/@/components/Authority'; 105 import { Authority } from '/@/components/Authority';
106 - import { getMyInfo, getPermCode, getUserToken } from '/@/api/sys/user';  
107 - import { useUserStore } from '/@/store/modules/user';  
108 - import { usePermissionStore } from '/@/store/modules/permission';  
109 - import { router } from '/@/router';  
110 - import { RoleEnum } from '/@/enums/roleEnum';  
111 - import { RouteRecordRaw } from 'vue-router';  
112 - import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';  
113 - import { PageEnum } from '/@/enums/pageEnum';  
114 import { getAuthCache } from '/@/utils/auth'; 106 import { getAuthCache } from '/@/utils/auth';
115 import { USER_INFO_KEY } from '/@/enums/cacheEnum'; 107 import { USER_INFO_KEY } from '/@/enums/cacheEnum';
116 import { isAdmin } from '/@/enums/roleEnum'; 108 import { isAdmin } from '/@/enums/roleEnum';
  109 + import { TenantListItemRecord } from '/@/api/tenant/tenantInfo';
  110 + import { useFastEnter } from '/@/hooks/business/useFastEnter';
117 111
118 export default defineComponent({ 112 export default defineComponent({
119 name: 'AccountManagement', 113 name: 'AccountManagement',
@@ -190,29 +184,10 @@ @@ -190,29 +184,10 @@
190 function handleView(record: Recordable) { 184 function handleView(record: Recordable) {
191 go('/system/account_detail/' + record.id); 185 go('/system/account_detail/' + record.id);
192 } 186 }
193 - const userStore = useUserStore();  
194 187
195 - const permissionStore = usePermissionStore();  
196 - async function handleLoginCustomAdmin(record: {  
197 - tbUser: string;  
198 - id: string;  
199 - hasPassword: boolean;  
200 - }) { 188 + async function handleLoginCustomAdmin(record: TenantListItemRecord) {
201 try { 189 try {
202 - const { token, refreshToken } = await getUserToken(record.id);  
203 - userStore.storeToken(token, refreshToken);  
204 - const userInfo = await getMyInfo();  
205 - const permissionList = await getPermCode();  
206 - permissionStore.setPermCodeList(permissionList);  
207 - userStore.setUserInfo(userInfo);  
208 - userStore.setRoleList(userInfo.roles as RoleEnum[]);  
209 - const routes = await permissionStore.buildRoutesAction();  
210 - routes.forEach((route) => {  
211 - router.addRoute(route as unknown as RouteRecordRaw);  
212 - });  
213 - router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);  
214 - permissionStore.setDynamicAddedRoute(true);  
215 - record.hasPassword ? go(PageEnum.BASE_HOME) : go(PageEnum.SYSTEM_PASSWORD); 190 + useFastEnter(record, go);
216 } catch (error) { 191 } catch (error) {
217 } finally { 192 } finally {
218 } 193 }
@@ -99,18 +99,15 @@ @@ -99,18 +99,15 @@
99 } from '/@/api/tenant/tenantApi'; 99 } from '/@/api/tenant/tenantApi';
100 import { Tag } from 'ant-design-vue'; 100 import { Tag } from 'ant-design-vue';
101 import TenantAdminFormDrawer from './TenantAdminFormDrawer.vue'; 101 import TenantAdminFormDrawer from './TenantAdminFormDrawer.vue';
102 - import { MessageTypeEnum, SendResetPasswordEmailMsg } from '/@/api/tenant/tenantInfo'; 102 + import {
  103 + MessageTypeEnum,
  104 + SendResetPasswordEmailMsg,
  105 + TenantListItemRecord,
  106 + } from '/@/api/tenant/tenantInfo';
103 import { useMessage } from '/@/hooks/web/useMessage'; 107 import { useMessage } from '/@/hooks/web/useMessage';
104 import { Authority } from '/@/components/Authority'; 108 import { Authority } from '/@/components/Authority';
105 - import { getMyInfo, getPermCode, getUserToken } from '/@/api/sys/user';  
106 - import { useUserStore } from '/@/store/modules/user';  
107 - import { usePermissionStore } from '/@/store/modules/permission';  
108 - import { RoleEnum } from '/@/enums/roleEnum'; 109 + import { useFastEnter } from '/@/hooks/business/useFastEnter';
109 import { useGo } from '/@/hooks/web/usePage'; 110 import { useGo } from '/@/hooks/web/usePage';
110 - import { PageEnum } from '/@/enums/pageEnum';  
111 - import { router } from '/@/router';  
112 - import { RouteRecordRaw } from 'vue-router';  
113 - import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';  
114 111
115 export default defineComponent({ 112 export default defineComponent({
116 name: 'TenantAdminDrawer', 113 name: 'TenantAdminDrawer',
@@ -235,31 +232,12 @@ @@ -235,31 +232,12 @@
235 reload(); 232 reload();
236 } 233 }
237 234
238 - const userStore = useUserStore();  
239 - const permissionStore = usePermissionStore();  
240 const go = useGo(); 235 const go = useGo();
241 - async function handleLoginTenantAdmin(record: {  
242 - tbUser: string;  
243 - id: string;  
244 - hasPassword: boolean;  
245 - }) { 236 + async function handleLoginTenantAdmin(record: TenantListItemRecord) {
246 try { 237 try {
247 - const { token, refreshToken } = await getUserToken(record.id);  
248 - userStore.storeToken(token, refreshToken);  
249 - const userInfo = await getMyInfo();  
250 - const permissionList = await getPermCode();  
251 - permissionStore.setPermCodeList(permissionList);  
252 - userStore.setUserInfo(userInfo);  
253 - userStore.setRoleList(userInfo.roles as RoleEnum[]);  
254 - const routes = await permissionStore.buildRoutesAction();  
255 - routes.forEach((route) => {  
256 - router.addRoute(route as unknown as RouteRecordRaw);  
257 - });  
258 - router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);  
259 - permissionStore.setDynamicAddedRoute(true);  
260 - if (record?.hasPassword) go(PageEnum.BASE_HOME);  
261 - else go(PageEnum.SYSTEM_PASSWORD); 238 + useFastEnter(record, go);
262 } catch (error) { 239 } catch (error) {
  240 + throw error;
263 } finally { 241 } finally {
264 } 242 }
265 } 243 }
@@ -84,6 +84,7 @@ @@ -84,6 +84,7 @@
84 currentRecord.value = record; 84 currentRecord.value = record;
85 if (mode === DataActionModeEnum.UPDATE) { 85 if (mode === DataActionModeEnum.UPDATE) {
86 const config = useGetComponentConfig(record.frontId); 86 const config = useGetComponentConfig(record.frontId);
  87 + if (!config) return;
87 selectWidgetKeys.value = { 88 selectWidgetKeys.value = {
88 componentKey: config.componentConfig.key, 89 componentKey: config.componentConfig.key,
89 categoryKey: config.componentConfig.package, 90 categoryKey: config.componentConfig.package,
@@ -124,8 +125,8 @@ @@ -124,8 +125,8 @@
124 ...item, 125 ...item,
125 componentInfo: { ...unref(getComponentConfig).persetOption, ...item.componentInfo }, 126 componentInfo: { ...unref(getComponentConfig).persetOption, ...item.componentInfo },
126 })); 127 }));
127 - if (window.requestIdleCallback as unknown as boolean) {  
128 - requestIdleCallback( 128 + if ((window as any).requestIdleCallback as unknown as boolean) {
  129 + (window as any).requestIdleCallback(
129 () => { 130 () => {
130 setFormValues({ dataSource: unref(dataSource) } as WidgetDataType); 131 setFormValues({ dataSource: unref(dataSource) } as WidgetDataType);
131 }, 132 },
@@ -7,7 +7,7 @@ import { Component } from 'vue'; @@ -7,7 +7,7 @@ import { Component } from 'vue';
7 */ 7 */
8 export const transformComponentKey = (string: string) => { 8 export const transformComponentKey = (string: string) => {
9 const CONNECTION_SYMBOL = '-'; 9 const CONNECTION_SYMBOL = '-';
10 - const needTransformFlag = string.includes(CONNECTION_SYMBOL); 10 + const needTransformFlag = (string || '').includes(CONNECTION_SYMBOL);
11 11
12 if (needTransformFlag) { 12 if (needTransformFlag) {
13 return string 13 return string
@@ -30,7 +30,6 @@ @@ -30,7 +30,6 @@
30 30
31 const getComponentConfig = computed(() => { 31 const getComponentConfig = computed(() => {
32 const { widthPx, heightPx, itemWidthRatio, itemHeightRatio, frontId } = props.sourceInfo; 32 const { widthPx, heightPx, itemWidthRatio, itemHeightRatio, frontId } = props.sourceInfo;
33 -  
34 return useGetComponentConfig(frontId, { 33 return useGetComponentConfig(frontId, {
35 widthPx, 34 widthPx,
36 heightPx, 35 heightPx,
@@ -12,3 +12,9 @@ @@ -12,3 +12,9 @@
12 <slot name="footer"></slot> 12 <slot name="footer"></slot>
13 </section> 13 </section>
14 </template> 14 </template>
  15 +
  16 +<style lang="less" scoped>
  17 + :deep(.ant-spin-spinning) {
  18 + @apply flex justify-center items-center w-full h-full;
  19 + }
  20 +</style>
@@ -60,12 +60,25 @@ export const useDataSource = (propsRef: ComputedRef<Recordable>) => { @@ -60,12 +60,25 @@ export const useDataSource = (propsRef: ComputedRef<Recordable>) => {
60 loading.value = true; 60 loading.value = true;
61 const { data } = await getDataBoradDetail(); 61 const { data } = await getDataBoradDetail();
62 rawDataSource.value = data; 62 rawDataSource.value = data;
  63 + // const result: WidgetDataType[] = (data.componentData || []).map((item) => {
  64 + // const { id } = item;
  65 +
  66 + // const layout =
  67 + // (data.componentLayout || []).find((item) => item.id === id) ||
  68 + // ({} as ComponentLayoutType);
  69 +
  70 + // return {
  71 + // i: buildUUID(),
  72 + // ...layout,
  73 + // ...item,
  74 + // } as WidgetDataType;
  75 + // });
63 const result: WidgetDataType[] = data.componentLayout.map((item) => { 76 const result: WidgetDataType[] = data.componentLayout.map((item) => {
64 const { id } = item; 77 const { id } = item;
65 const dataSource = 78 const dataSource =
66 - data.componentData.find((item) => item.id == id) || ({} as ComponentDataType); 79 + (data.componentData || []).find((item) => item.id == id) || ({} as ComponentDataType);
67 80
68 - dataSource.dataSource = dataSource.dataSource.map((item) => ({ 81 + dataSource.dataSource = (dataSource.dataSource || []).map((item) => ({
69 ...item, 82 ...item,
70 uuid: buildUUID(), 83 uuid: buildUUID(),
71 })); 84 }));