Commit 132c7fb944df255c4d76a25d6d924439f91f9c54
Committed by
GitHub
1 parent
9f5085c9
fix: session timeout login logic error (#678)
修复超时重新登录的页面在某些逻辑下未能正确刷新数据的问题。 fix: #673
Showing
2 changed files
with
31 additions
and
1 deletions
src/store/modules/permission.ts
@@ -65,6 +65,7 @@ export const usePermissionStore = defineStore({ | @@ -65,6 +65,7 @@ export const usePermissionStore = defineStore({ | ||
65 | 65 | ||
66 | setBackMenuList(list: Menu[]) { | 66 | setBackMenuList(list: Menu[]) { |
67 | this.backMenuList = list; | 67 | this.backMenuList = list; |
68 | + list?.length > 0 && this.setLastBuildMenuTime(); | ||
68 | }, | 69 | }, |
69 | 70 | ||
70 | setLastBuildMenuTime() { | 71 | setLastBuildMenuTime() { |
src/views/sys/login/SessionTimeoutLogin.vue
@@ -6,15 +6,44 @@ | @@ -6,15 +6,44 @@ | ||
6 | </transition> | 6 | </transition> |
7 | </template> | 7 | </template> |
8 | <script lang="ts"> | 8 | <script lang="ts"> |
9 | - import { defineComponent } from 'vue'; | 9 | + import { defineComponent, onBeforeUnmount, onMounted, ref } from 'vue'; |
10 | import Login from './Login.vue'; | 10 | import Login from './Login.vue'; |
11 | 11 | ||
12 | import { useDesign } from '/@/hooks/web/useDesign'; | 12 | import { useDesign } from '/@/hooks/web/useDesign'; |
13 | + import { useUserStore } from '/@/store/modules/user'; | ||
14 | + import { usePermissionStore } from '/@/store/modules/permission'; | ||
15 | + import { useAppStore } from '/@/store/modules/app'; | ||
16 | + import { PermissionModeEnum } from '/@/enums/appEnum'; | ||
13 | export default defineComponent({ | 17 | export default defineComponent({ |
14 | name: 'SessionTimeoutLogin', | 18 | name: 'SessionTimeoutLogin', |
15 | components: { Login }, | 19 | components: { Login }, |
16 | setup() { | 20 | setup() { |
17 | const { prefixCls } = useDesign('st-login'); | 21 | const { prefixCls } = useDesign('st-login'); |
22 | + const userStore = useUserStore(); | ||
23 | + const permissionStore = usePermissionStore(); | ||
24 | + const appStore = useAppStore(); | ||
25 | + const userId = ref<Nullable<number | string>>(0); | ||
26 | + | ||
27 | + const isBackMode = () => { | ||
28 | + return appStore.getProjectConfig.permissionMode === PermissionModeEnum.BACK; | ||
29 | + }; | ||
30 | + | ||
31 | + onMounted(() => { | ||
32 | + // 记录当前的UserId | ||
33 | + userId.value = userStore.getUserInfo?.userId; | ||
34 | + console.log('Mounted', userStore.getUserInfo); | ||
35 | + }); | ||
36 | + | ||
37 | + onBeforeUnmount(() => { | ||
38 | + if (userId.value && userId.value !== userStore.getUserInfo.userId) { | ||
39 | + // 登录的不是同一个用户,刷新整个页面以便丢弃之前用户的页面状态 | ||
40 | + document.location.reload(); | ||
41 | + } else if (isBackMode() && permissionStore.getLastBuildMenuTime === 0) { | ||
42 | + // 后台权限模式下,没有成功加载过菜单,就重新加载整个页面。这通常发生在会话过期后按F5刷新整个页面后载入了本模块这种场景 | ||
43 | + document.location.reload(); | ||
44 | + } | ||
45 | + }); | ||
46 | + | ||
18 | return { prefixCls }; | 47 | return { prefixCls }; |
19 | }, | 48 | }, |
20 | }); | 49 | }); |