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
src/views/sys/login/SessionTimeoutLogin.vue
... | ... | @@ -6,15 +6,44 @@ |
6 | 6 | </transition> |
7 | 7 | </template> |
8 | 8 | <script lang="ts"> |
9 | - import { defineComponent } from 'vue'; | |
9 | + import { defineComponent, onBeforeUnmount, onMounted, ref } from 'vue'; | |
10 | 10 | import Login from './Login.vue'; |
11 | 11 | |
12 | 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 | 17 | export default defineComponent({ |
14 | 18 | name: 'SessionTimeoutLogin', |
15 | 19 | components: { Login }, |
16 | 20 | setup() { |
17 | 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 | 47 | return { prefixCls }; |
19 | 48 | }, |
20 | 49 | }); | ... | ... |