diff --git a/backend/app/api/v1/user.py b/backend/app/api/v1/user.py index 9e4133c9..cf2c29f1 100644 --- a/backend/app/api/v1/user.py +++ b/backend/app/api/v1/user.py @@ -4,7 +4,8 @@ from sqlalchemy.orm import Session from app.core.database import get_db from app.models.user import User -from app.schemas.user import UserCreate, UserUpdate, UserOut +from app.models.user import Role, Dept +from app.schemas.user import UserCreate, UserUpdate, UserOut, RoleOut, DeptOut from app.schemas.common import ResponseModel, ListResponse, PageParams from app.services import user_service from app.api.deps import get_current_user @@ -62,3 +63,21 @@ def delete_user( ): user_service.delete_user(db, user_id) return ResponseModel(message="删除成功") + + +@router.get("/roles", response_model=ResponseModel[list[RoleOut]]) +def list_roles( + db: Session = Depends(get_db), + current_user: User = Depends(get_current_user), +): + items = db.query(Role).order_by(Role.id).all() + return ResponseModel(data=[RoleOut.model_validate(r) for r in items]) + + +@router.get("/depts", response_model=ResponseModel[list[DeptOut]]) +def list_depts( + db: Session = Depends(get_db), + current_user: User = Depends(get_current_user), +): + items = db.query(Dept).order_by(Dept.sort_order).all() + return ResponseModel(data=[DeptOut.model_validate(d) for d in items]) diff --git a/frontend/src/api/user.ts b/frontend/src/api/user.ts new file mode 100644 index 00000000..6fd3ae76 --- /dev/null +++ b/frontend/src/api/user.ts @@ -0,0 +1,62 @@ +import request from './request' + +export interface UserItem { + id: number + username: string + email?: string + real_name?: string + phone?: string + dept_id?: number + is_active: boolean + is_superuser: boolean + dept?: { id: number; name: string } + roles: { id: number; name: string; code: string }[] + created_at: string +} + +export interface RoleItem { + id: number + name: string + code: string + description?: string +} + +export interface DeptItem { + id: number + name: string + parent_id?: number + sort_order: number +} + +export function getUsers(params?: { page?: number; page_size?: number; keyword?: string }) { + return request.get('/users', { params }) +} + +export function createUser(data: { + username: string + password: string + email?: string + real_name?: string + phone?: string + dept_id?: number + is_active?: boolean + role_ids?: number[] +}) { + return request.post('/users', data) +} + +export function updateUser(id: number, data: Partial & { role_ids?: number[] }) { + return request.put(`/users/${id}`, data) +} + +export function deleteUser(id: number) { + return request.delete(`/users/${id}`) +} + +export function getRoles() { + return request.get('/users/roles') +} + +export function getDepts() { + return request.get('/users/depts') +} diff --git a/frontend/src/views/system/System.vue b/frontend/src/views/system/System.vue index d450b33e..ee868e9b 100644 --- a/frontend/src/views/system/System.vue +++ b/frontend/src/views/system/System.vue @@ -7,9 +7,12 @@
- + 查询 + + 新增用户 +
@@ -34,7 +37,24 @@ + + + +
+ +
@@ -44,27 +64,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 正常 + 禁用 + + + + +