Skip to content

Commit f40e625

Browse files
authored
fix: workspace (#3320)
1 parent 7acdd88 commit f40e625

File tree

4 files changed

+29
-21
lines changed

4 files changed

+29
-21
lines changed

apps/users/serializers/user.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import random
1212
import re
1313
from collections import defaultdict
14-
from itertools import product
1514

1615
from django.core.cache import cache
1716
from django.core.mail.backends.smtp import EmailBackend
@@ -71,6 +70,14 @@ def is_workspace_manage(user_id: str, workspace_id: str):
7170
return QuerySet(User).filter(id=user_id, role=RoleConstants.ADMIN.value.__str__()).exists()
7271

7372

73+
def get_workspace_list_by_user(user_id):
74+
get_workspace_list = DatabaseModelManage.get_model('get_workspace_list_by_user')
75+
license_is_valid = DatabaseModelManage.get_model('license_is_valid') or (lambda: False)
76+
if get_workspace_list is not None and license_is_valid():
77+
return get_workspace_list(user_id)
78+
return [{'id': 'default', 'name': 'default'}]
79+
80+
7481
class UserProfileSerializer(serializers.Serializer):
7582
@staticmethod
7683
def profile(user: User, auth: Auth):
@@ -80,6 +87,7 @@ def profile(user: User, auth: Auth):
8087
@param auth: 认证对象
8188
@return:
8289
"""
90+
workspace_list = get_workspace_list_by_user(user.id)
8391
return {
8492
'id': user.id,
8593
'username': user.username,
@@ -89,6 +97,7 @@ def profile(user: User, auth: Auth):
8997
'permissions': auth.permission_list,
9098
'is_edit_password': user.role == RoleConstants.ADMIN.name and user.password == 'd880e722c47a34d8e9fce789fc62389d',
9199
'language': user.language,
100+
'workspace_list': workspace_list
92101
}
93102

94103

ui/src/api/type/user.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ interface User {
2727
IS_XPACK?: boolean
2828
XPACK_LICENSE_IS_VALID?: boolean
2929
language?: string
30+
workspace_list?: Array<any>
3031
}
3132

3233
interface LoginRequest {

ui/src/layout/layout-header/workspace-dropdown/index.vue

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<template #dropdown>
1313
<el-dropdown-menu v-loading="loading">
1414
<el-dropdown-item
15-
v-for="item in workspaceList"
15+
v-for="item in user.workspace_list"
1616
:key="item.id"
1717
:class="item.id === currentWorkspace?.id ? 'active' : ''"
1818
@click="changeWorkspace(item)"
@@ -35,33 +35,20 @@
3535
</template>
3636

3737
<script setup lang="ts">
38-
import { onBeforeMount, ref } from 'vue'
39-
import WorkspaceApi from '@/api/workspace/workspace'
38+
import { computed, ref } from 'vue'
4039
import type { WorkspaceItem } from '@/api/type/workspace'
4140
import useStore from '@/stores'
41+
4242
const { user } = useStore()
4343
const loading = ref(false)
44-
const workspaceList = ref<WorkspaceItem[]>([])
45-
const currentWorkspace = ref()
46-
47-
async function getWorkspaceList() {
48-
try {
49-
const res = await WorkspaceApi.getWorkspaceListByUser(loading)
50-
workspaceList.value = res.data
51-
} catch (e) {
52-
console.error(e)
53-
}
54-
}
5544
56-
onBeforeMount(async () => {
57-
await getWorkspaceList()
58-
const id = localStorage.getItem('workspace_id') ?? 'default'
59-
currentWorkspace.value = workspaceList.value.find((item) => item.id === id)
45+
const currentWorkspace = computed(() => {
46+
return user.workspace_list.find((w) => w.id == user.workspace_id)
6047
})
6148
6249
function changeWorkspace(item: WorkspaceItem) {
63-
if (item.id === currentWorkspace.value.id) return
64-
currentWorkspace.value = item
50+
if (item.id === user.workspace_id) return
51+
6552
user.setWorkspaceId(item.id || 'default')
6653
window.location.reload()
6754
}

ui/src/stores/modules/user.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export interface userStateTypes {
2222
edition: 'CE' | 'PE' | 'EE'
2323
themeInfo: any
2424
workspace_id: string
25+
workspace_list: Array<any>
2526
}
2627

2728
const useUserStore = defineStore('user', {
@@ -33,6 +34,7 @@ const useUserStore = defineStore('user', {
3334
edition: 'CE',
3435
themeInfo: null,
3536
workspace_id: '',
37+
workspace_list: [],
3638
}),
3739
actions: {
3840
getLanguage() {
@@ -125,6 +127,15 @@ const useUserStore = defineStore('user', {
125127
async profile(loading?: Ref<boolean>) {
126128
return UserApi.getUserProfile(loading).then((ok) => {
127129
this.userInfo = ok.data
130+
const workspace_list =
131+
ok.data.workspace_list && ok.data.workspace_list.length > 0
132+
? ok.data.workspace_list
133+
: [{ id: 'default', name: 'default' }]
134+
const workspace_id = this.getWorkspaceId()
135+
if (!workspace_id || !workspace_list.some((w) => w.id == workspace_id)) {
136+
this.setWorkspaceId(workspace_list[0].id)
137+
}
138+
this.workspace_list = workspace_list
128139
useLocalStorage<string>(localeConfigKey, 'en-US').value =
129140
ok?.data?.language || this.getLanguage()
130141
const theme = useThemeStore()

0 commit comments

Comments
 (0)