|
|
@@ -17,14 +17,19 @@ type PermissionListResponse = InferResponseType<typeof permissionClient.$get, 20
|
|
|
type PermissionItem = PermissionListResponse['data'][0];
|
|
|
|
|
|
// React Query hooks
|
|
|
-const useRoles = () => {
|
|
|
+const useRoles = (params?: { page?: number; pageSize?: number; keyword?: string }) => {
|
|
|
return useQuery({
|
|
|
- queryKey: ['roles'],
|
|
|
+ queryKey: ['roles', params],
|
|
|
queryFn: async () => {
|
|
|
- const response = await roleClient.$get({ query: {} });
|
|
|
+ const response = await roleClient.$get({
|
|
|
+ query: {
|
|
|
+ page: params?.page || 1,
|
|
|
+ pageSize: params?.pageSize || 10,
|
|
|
+ keyword: params?.keyword || undefined
|
|
|
+ }
|
|
|
+ });
|
|
|
if (!response.ok) throw new Error('获取角色列表失败');
|
|
|
- const data = await response.json();
|
|
|
- return data.data;
|
|
|
+ return response.json();
|
|
|
},
|
|
|
});
|
|
|
};
|
|
|
@@ -144,18 +149,41 @@ const useUpdateRolePermissions = () => {
|
|
|
};
|
|
|
|
|
|
const Roles: React.FC = () => {
|
|
|
- const queryClient = useQueryClient();
|
|
|
- const [modalVisible, setModalVisible] = useState(false);
|
|
|
- const [permissionModalVisible, setPermissionModalVisible] = useState(false);
|
|
|
- const [editingRole, setEditingRole] = useState<RoleItem | null>(null);
|
|
|
- const [selectedRole, setSelectedRole] = useState<RoleItem | null>(null);
|
|
|
- const [form] = Form.useForm();
|
|
|
- const [selectedPermissionIds, setSelectedPermissionIds] = useState<number[]>([]);
|
|
|
-
|
|
|
- // React Query hooks
|
|
|
- const { data: roles = [], isLoading: rolesLoading } = useRoles();
|
|
|
- const { data: permissions = [], isLoading: permissionsLoading } = usePermissions();
|
|
|
- const { data: rolePermissions = [], isLoading: rolePermissionsLoading } = useRolePermissions(selectedRole?.id ?? null);
|
|
|
+const queryClient = useQueryClient();
|
|
|
+const [modalVisible, setModalVisible] = useState(false);
|
|
|
+const [permissionModalVisible, setPermissionModalVisible] = useState(false);
|
|
|
+const [editingRole, setEditingRole] = useState<RoleItem | null>(null);
|
|
|
+const [selectedRole, setSelectedRole] = useState<RoleItem | null>(null);
|
|
|
+const [form] = Form.useForm();
|
|
|
+const [selectedPermissionIds, setSelectedPermissionIds] = useState<number[]>([]);
|
|
|
+const [searchKeyword, setSearchKeyword] = useState('');
|
|
|
+const [pagination, setPagination] = useState({
|
|
|
+ current: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ total: 0
|
|
|
+});
|
|
|
+
|
|
|
+// React Query hooks
|
|
|
+const { data: rolesData, isLoading: rolesLoading } = useRoles({
|
|
|
+ page: pagination.current,
|
|
|
+ pageSize: pagination.pageSize,
|
|
|
+ keyword: searchKeyword
|
|
|
+});
|
|
|
+const roles = rolesData?.data || [];
|
|
|
+const { data: permissions = [], isLoading: permissionsLoading } = usePermissions();
|
|
|
+const { data: rolePermissions = [], isLoading: rolePermissionsLoading } = useRolePermissions(selectedRole?.id ?? null);
|
|
|
+
|
|
|
+// 更新分页信息
|
|
|
+React.useEffect(() => {
|
|
|
+ if (rolesData?.pagination) {
|
|
|
+ setPagination(prev => ({
|
|
|
+ ...prev,
|
|
|
+ current: rolesData.pagination.current,
|
|
|
+ pageSize: rolesData.pagination.pageSize,
|
|
|
+ total: rolesData.pagination.total
|
|
|
+ }));
|
|
|
+ }
|
|
|
+}, [rolesData?.pagination]);
|
|
|
|
|
|
// Mutations
|
|
|
const createRoleMutation = useCreateRole();
|
|
|
@@ -208,6 +236,27 @@ const Roles: React.FC = () => {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ // 处理表格分页变化
|
|
|
+ const handleTableChange = (newPagination: any) => {
|
|
|
+ setPagination(prev => ({
|
|
|
+ ...prev,
|
|
|
+ current: newPagination.current,
|
|
|
+ pageSize: newPagination.pageSize
|
|
|
+ }));
|
|
|
+ };
|
|
|
+
|
|
|
+ // 处理搜索
|
|
|
+ const handleSearch = (value: string) => {
|
|
|
+ setSearchKeyword(value);
|
|
|
+ setPagination(prev => ({ ...prev, current: 1 }));
|
|
|
+ };
|
|
|
+
|
|
|
+ // 重置搜索
|
|
|
+ const handleReset = () => {
|
|
|
+ setSearchKeyword('');
|
|
|
+ setPagination(prev => ({ ...prev, current: 1 }));
|
|
|
+ };
|
|
|
+
|
|
|
// 保存角色权限
|
|
|
const handleSavePermissions = () => {
|
|
|
if (!selectedRole) return;
|