Skip to content

Commit 98a6bbb

Browse files
perf: User grid api
1 parent a76ebee commit 98a6bbb

File tree

3 files changed

+29
-9
lines changed

3 files changed

+29
-9
lines changed

backend/apps/system/api/user.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from fastapi import APIRouter, Query
33
from sqlmodel import func, or_, select, delete as sqlmodel_delete
44
from apps.system.crud.user import get_db_user, single_delete, user_ws_options
5-
from apps.system.models.system_model import UserWsModel, WorkspaceModel
5+
from apps.system.models.system_model import UserWsModel
66
from apps.system.models.user import UserModel
77
from apps.system.schemas.auth import CacheName, CacheNamespace
88
from apps.system.schemas.system_schema import PwdEditor, UserCreator, UserEditor, UserGrid, UserLanguage, UserWs
@@ -20,7 +20,6 @@ async def user_info(current_user: CurrentUser):
2020
@router.get("/pager/{pageNum}/{pageSize}", response_model=PaginatedResponse[UserGrid])
2121
async def pager(
2222
session: SessionDep,
23-
trans: Trans,
2423
pageNum: int,
2524
pageSize: int,
2625
keyword: Optional[str] = Query(None, description="搜索关键字(可选)"),
@@ -35,14 +34,21 @@ async def pager(
3534
stmt = (
3635
select(
3736
UserModel,
38-
func.coalesce(func.string_agg(WorkspaceModel.name, ','), '').label("space_name")
37+
func.coalesce(
38+
func.array_remove(
39+
func.array_agg(UserWsModel.oid),
40+
None
41+
),
42+
[]
43+
).label("oid_list")
44+
#func.coalesce(func.string_agg(WorkspaceModel.name, ','), '').label("space_name")
3945
)
4046
.join(UserWsModel, UserModel.id == UserWsModel.uid, isouter=True)
41-
.join(WorkspaceModel, UserWsModel.oid == WorkspaceModel.id, isouter=True)
47+
#.join(WorkspaceModel, UserWsModel.oid == WorkspaceModel.id, isouter=True)
48+
.where(UserModel.id != 1)
4249
.group_by(UserModel.id)
4350
.order_by(UserModel.create_time)
4451
)
45-
4652
if status is not None:
4753
stmt = stmt.where(UserModel.status == status)
4854

@@ -73,15 +79,15 @@ async def pager(
7379
pagination=pagination,
7480
**filters)
7581

76-
for item in user_page.items:
82+
""" for item in user_page.items:
7783
space_name: str = item['space_name']
7884
if space_name and 'i18n_default_workspace' in space_name:
7985
parts = list(map(
8086
lambda x: trans(x) if x == "i18n_default_workspace" else x,
8187
space_name.split(',')
8288
))
8389
output_str = ','.join(parts)
84-
item['space_name'] = output_str
90+
item['space_name'] = output_str """
8591
return user_page
8692

8793
@router.get("/ws")

backend/apps/system/schemas/system_schema.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class UserEditor(UserCreator, BaseCreatorDTO):
3838
class UserGrid(UserEditor):
3939
create_time: int
4040
language: str = "zh-CN"
41-
space_name: Optional[str] = None
41+
#space_name: Optional[str] = None
4242
origin: str = ''
4343

4444

frontend/src/views/system/user/User.vue

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@
6666
<el-table-column prop="email" :label="$t('user.email')" width="280" />
6767
<!-- <el-table-column prop="phone" :label="$t('user.phone_number')" width="280" /> -->
6868
<!-- <el-table-column prop="user_source" :label="$t('user.user_source')" width="280" /> -->
69-
<el-table-column prop="space_name" :label="$t('user.workspace')" width="280" />
69+
<el-table-column prop="oid_list" :label="$t('user.workspace')" width="280">
70+
<template #default="scope">
71+
<span>{{ formatSpaceName(scope.row.oid_list) }}</span>
72+
</template>
73+
</el-table-column>
7074

7175
<el-table-column prop="create_time" width="180" sortable :label="$t('user.creation_time')">
7276
<template #default="scope">
@@ -646,6 +650,16 @@ const handleCurrentChange = (val: number) => {
646650
state.pageInfo.currentPage = val
647651
search()
648652
}
653+
const formatSpaceName = (row_oid_list: Array<any>) => {
654+
if (!row_oid_list?.length) {
655+
return '-'
656+
}
657+
const wsMap: Record<string, string> = {}
658+
options.value.forEach((option: any) => {
659+
wsMap[option.id] = option.name
660+
})
661+
return row_oid_list.map((id: any) => wsMap[id]).join(',')
662+
}
649663
onMounted(() => {
650664
workspaceList().then((res) => {
651665
options.value = res || []

0 commit comments

Comments
 (0)