feat(settings): add team management functionality with user invite and team operations
This commit is contained in:
@@ -127,3 +127,125 @@ export function useSystemStatus() {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 团队设置
|
||||
*/
|
||||
export function useTeamSetting() {
|
||||
const { userInfo, tenantInfo, tenantList, refreshUserData } = useUserData();
|
||||
const [tenantUsers, setTenantUsers] = useState<any[]>([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
|
||||
// 获取租户用户列表
|
||||
const fetchTenantUsers = useCallback(async () => {
|
||||
if (!tenantInfo?.tenant_id) return;
|
||||
|
||||
try {
|
||||
const response = await userService.listTenantUser(tenantInfo.tenant_id);
|
||||
if (response.data.code === 0) {
|
||||
setTenantUsers(response.data.data || []);
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error('获取租户用户失败:', error);
|
||||
}
|
||||
}, [tenantInfo?.tenant_id]);
|
||||
|
||||
useEffect(() => {
|
||||
if (tenantInfo?.tenant_id) {
|
||||
fetchTenantUsers();
|
||||
}
|
||||
}, [fetchTenantUsers]);
|
||||
|
||||
const inviteUser = async (email: string) => {
|
||||
if (!email.trim() || !tenantInfo?.tenant_id) return;
|
||||
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
|
||||
try {
|
||||
const response = await userService.addTenantUser(tenantInfo.tenant_id, email.trim());
|
||||
if (response.data.code === 0) {
|
||||
await fetchTenantUsers();
|
||||
await refreshUserData();
|
||||
return { success: true };
|
||||
} else {
|
||||
const errorMsg = response.data.message || '邀请失败';
|
||||
setError(errorMsg);
|
||||
return { success: false, error: errorMsg };
|
||||
}
|
||||
} catch (error: any) {
|
||||
const errorMsg = error.message || '邀请失败';
|
||||
setError(errorMsg);
|
||||
return { success: false, error: errorMsg };
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
const deleteUser = async (userId: string) => {
|
||||
if (!tenantInfo?.tenant_id) return;
|
||||
|
||||
try {
|
||||
const response = await userService.deleteTenantUser({
|
||||
tenantId: tenantInfo.tenant_id,
|
||||
userId
|
||||
});
|
||||
if (response.data.code === 0) {
|
||||
await fetchTenantUsers();
|
||||
return { success: true };
|
||||
}
|
||||
return { success: false };
|
||||
} catch (error) {
|
||||
logger.error('删除用户失败:', error);
|
||||
return { success: false };
|
||||
}
|
||||
};
|
||||
|
||||
const agreeTenant = async (tenantId: string) => {
|
||||
try {
|
||||
const response = await userService.agreeTenant(tenantId);
|
||||
if (response.data.code === 0) {
|
||||
await refreshUserData();
|
||||
return { success: true };
|
||||
}
|
||||
return { success: false };
|
||||
} catch (error) {
|
||||
logger.error('同意加入失败:', error);
|
||||
return { success: false };
|
||||
}
|
||||
};
|
||||
|
||||
const quitTenant = async (tenantId: string) => {
|
||||
if (!userInfo?.id) return;
|
||||
|
||||
try {
|
||||
const response = await userService.deleteTenantUser({
|
||||
tenantId,
|
||||
userId: userInfo.id
|
||||
});
|
||||
if (response.data.code === 0) {
|
||||
await refreshUserData();
|
||||
return { success: true };
|
||||
}
|
||||
return { success: false };
|
||||
} catch (error) {
|
||||
logger.error('退出租户失败:', error);
|
||||
return { success: false };
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
userInfo,
|
||||
tenantInfo,
|
||||
tenantList,
|
||||
tenantUsers,
|
||||
loading,
|
||||
error,
|
||||
inviteUser,
|
||||
deleteUser,
|
||||
agreeTenant,
|
||||
quitTenant,
|
||||
refreshUserData,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user