From be7edae94faab97441bdac68e2ad78d3f9411489 Mon Sep 17 00:00:00 2001 From: hailin Date: Thu, 2 Jul 2026 15:42:43 +0800 Subject: [PATCH] refactor: align system admin forms with shadcn fields --- .../src/features/system/SystemMenusPage.tsx | 29 ++--- .../src/features/system/SystemRolesPage.tsx | 67 ++++++----- .../features/system/SystemUserGroupsPage.tsx | 50 ++++---- .../src/features/system/SystemUsersPage.tsx | 111 ++++++++++-------- 4 files changed, 139 insertions(+), 118 deletions(-) diff --git a/frontend/src/features/system/SystemMenusPage.tsx b/frontend/src/features/system/SystemMenusPage.tsx index ff57e0e..58a0aff 100644 --- a/frontend/src/features/system/SystemMenusPage.tsx +++ b/frontend/src/features/system/SystemMenusPage.tsx @@ -2,6 +2,7 @@ import * as React from 'react' import { AppDataTable, type AppDataTableColumn } from '@/components/app/AppDataTable' import { AppEmptyState } from '@/components/app/AppEmptyState' +import { AppFilterBar } from '@/components/app/AppFilterBar' import { AppPage } from '@/components/app/AppPage' import { AppPageHeader } from '@/components/app/AppPageHeader' import { Badge } from '@/components/ui/badge' @@ -80,22 +81,22 @@ export function SystemMenusPage() { return ( - + -
- setQuery(event.target.value)} /> -
+ + setQuery(event.target.value)} /> + - {error ? : null} - {!error ? ( - menu.id} - emptyTitle="暂无菜单" - footer={

当前显示 {filteredMenus.length} 个菜单项

} - /> - ) : null} + {error ? : null} + {!error ? ( + menu.id} + emptyTitle="暂无菜单" + footer={

当前显示 {filteredMenus.length} 个菜单项

} + /> + ) : null}
) } diff --git a/frontend/src/features/system/SystemRolesPage.tsx b/frontend/src/features/system/SystemRolesPage.tsx index 339632a..d8061e6 100644 --- a/frontend/src/features/system/SystemRolesPage.tsx +++ b/frontend/src/features/system/SystemRolesPage.tsx @@ -5,10 +5,12 @@ import { AppDataTable, type AppDataTableColumn } from '@/components/app/AppDataT import { AppEmptyState } from '@/components/app/AppEmptyState' import { AppPage } from '@/components/app/AppPage' import { AppPageHeader } from '@/components/app/AppPageHeader' +import { AppSection } from '@/components/app/AppSection' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Checkbox } from '@/components/ui/checkbox' import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Field, FieldGroup, FieldLabel, FieldLegend, FieldSet } from '@/components/ui/field' import { Input } from '@/components/ui/input' import { createRole, listPermissions, listRoles, setRolePermissions } from './api' @@ -73,31 +75,35 @@ export function SystemRolesPage() { return ( - + -
- - setRoleName(event.target.value)} required /> - - + + + + + setRoleName(event.target.value)} required /> + + + +
- {error ? : null} - {!error ? ( - role.id} - emptyTitle="暂无角色" - /> - ) : null} - - setEditingRole(null)} - onSaved={load} + {error ? : null} + {!error ? ( + role.id} + emptyTitle="暂无角色" /> + ) : null} + + setEditingRole(null)} + onSaved={load} + />
) } @@ -142,12 +148,13 @@ function RolePermissionDialog({
{Object.entries(groupedPermissions).map(([module, modulePermissions]) => ( -
-

{module}

-
+
+ {module} + {modulePermissions.map((permission) => ( - + + ))} -
-
+ + ))}
diff --git a/frontend/src/features/system/SystemUserGroupsPage.tsx b/frontend/src/features/system/SystemUserGroupsPage.tsx index cb00e67..f6d39c7 100644 --- a/frontend/src/features/system/SystemUserGroupsPage.tsx +++ b/frontend/src/features/system/SystemUserGroupsPage.tsx @@ -5,8 +5,10 @@ import { AppDataTable, type AppDataTableColumn } from '@/components/app/AppDataT import { AppEmptyState } from '@/components/app/AppEmptyState' import { AppPage } from '@/components/app/AppPage' import { AppPageHeader } from '@/components/app/AppPageHeader' +import { AppSection } from '@/components/app/AppSection' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' +import { FieldGroup } from '@/components/ui/field' import { Input } from '@/components/ui/input' import { Switch } from '@/components/ui/switch' import { formatDateTime } from '@/lib/format' @@ -81,31 +83,35 @@ export function SystemUserGroupsPage() { return ( - + -
- - setForm({ ...form, name: event.target.value })} required /> - - - setForm({ ...form, code: event.target.value })} required /> - - - setForm({ ...form, description: event.target.value })} /> - - + + + + + setForm({ ...form, name: event.target.value })} required /> + + + setForm({ ...form, code: event.target.value })} required /> + + + setForm({ ...form, description: event.target.value })} /> + + + +
- {error ? : null} - {!error ? ( - group.id} - emptyTitle="暂无用户组" - footer={

共 {groups.length} 个用户组

} - /> - ) : null} + {error ? : null} + {!error ? ( + group.id} + emptyTitle="暂无用户组" + footer={

共 {groups.length} 个用户组

} + /> + ) : null}
) } diff --git a/frontend/src/features/system/SystemUsersPage.tsx b/frontend/src/features/system/SystemUsersPage.tsx index 86694a5..08d5cf5 100644 --- a/frontend/src/features/system/SystemUsersPage.tsx +++ b/frontend/src/features/system/SystemUsersPage.tsx @@ -6,12 +6,13 @@ import { AppEmptyState } from '@/components/app/AppEmptyState' import { AppFilterBar } from '@/components/app/AppFilterBar' import { AppPage } from '@/components/app/AppPage' import { AppPageHeader } from '@/components/app/AppPageHeader' +import { AppSection } from '@/components/app/AppSection' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Checkbox } from '@/components/ui/checkbox' import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Field, FieldGroup, FieldLabel, FieldLegend, FieldSet } from '@/components/ui/field' import { Input } from '@/components/ui/input' -import { Label } from '@/components/ui/label' import { Switch } from '@/components/ui/switch' import { createUser, listRoles, listUserGroups, listUsers, setUserGroups, setUserRoles, updateUser } from './api' @@ -140,46 +141,50 @@ export function SystemUsersPage() { return ( - + -
- - setForm({ ...form, username: event.target.value })} required /> - - - setForm({ ...form, display_name: event.target.value })} /> - - - setForm({ ...form, email: event.target.value })} /> - - - setForm({ ...form, password: event.target.value })} required /> - - + + + + + setForm({ ...form, username: event.target.value })} required /> + + + setForm({ ...form, display_name: event.target.value })} /> + + + setForm({ ...form, email: event.target.value })} /> + + + setForm({ ...form, password: event.target.value })} required /> + + + +
- - setQuery(event.target.value)} /> - + + setQuery(event.target.value)} /> + - {error ? : null} - {!error ? ( - user.id} - emptyTitle="暂无用户" - footer={

当前显示 {filteredUsers.length} 个用户

} - /> - ) : null} - - setEditingUser(null)} - onSaved={load} + {error ? : null} + {!error ? ( + user.id} + emptyTitle="暂无用户" + footer={

当前显示 {filteredUsers.length} 个用户

} /> + ) : null} + + setEditingUser(null)} + onSaved={load} + />
) } @@ -219,38 +224,40 @@ function UserAccessDialog({ 用户授权{user ? `:${user.display_name || user.username}` : ''}
-
- -
+
+ 角色 + {roles.map((role) => ( - + {role.name} + ))} -
-
-
- -
+ + +
+ 用户组 + {groups.map((group) => ( - + {group.name} + ))} -
-
+ +