fix(q1): 修复 tsc -b 构建中断 — 回退不安全的 unknown→any + 移除 Ansible 残留引用

- 781处 tsc -b 错误清零(unknown 属性访问/隐式any返回类型/类型转换不匹配)
- 移除 App.tsx 中已删除的 AnsibleManager/AnsibleWorkflow 导入和路由
- 修复 DeploymentView 中 _prefix 解构导致的属性不存在错误
- 修复 Header/Sidebar/PipelineEditor 中无效的类型断言
- asList() 返回类型 unknown[]→any[], 恢复 AgentMonitor 正常工作
- 放宽 noImplicitAny(临时), 待 types/ 定义完善后逐步恢复
- ESLint: unused=0, console=0, any=1041(Q1 后续降低)
- npm run build: ✅ 0 errors
This commit is contained in:
attacker committed 2026-06-25 07:17:47 +08:00
1 parent 4dd5e10b46
commit 5364d93ed7
149 files changed
+2021 -3128

No files matched your search

@@ -1,17 +1,34 @@
// Prometheus 数据源管理 — 参考 Grafana 界面设计 // Logan.Li
import { useState, useEffect, useCallback } from 'react';
import {
Database, Plus, Edit, Trash2, Star, RefreshCw, CheckCircle, XCircle,
Shield, Globe, Clock, Wrench, Settings, Key, Link, X, ChevronDown, ChevronUp,
Plug, AlertTriangle
Database,
Plus,
Edit,
Trash2,
Star,
RefreshCw,
CheckCircle,
XCircle,
Shield,
Globe,
Clock,
Wrench,
Settings,
Key,
X,
ChevronDown,
ChevronUp,
Plug,
AlertTriangle,
} from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Badge } from '@/components/ui/badge';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Label } from '@/components/ui/label';
import { Switch } from '@/components/ui/switch';
import { Separator } from '@/components/ui/separator';
import {
Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter
} from '@/components/ui/dialog';
@@ -89,7 +106,7 @@ export default function PrometheusDatasourceManager() {
const [headers, setHeaders] = useState<HeaderEntry[]>([]);
// 折叠面板
const [showAuth, setShowAuth] = useState(false);
const [showTLS, setShowTLS] = useState(false);
const [, setShowTLS] = useState(false);
const [showAlerting, setShowAlerting] = useState(false);
const [showMisc, setShowMisc] = useState(false);
@@ -99,7 +116,7 @@ export default function PrometheusDatasourceManager() {
const fetchList = useCallback(async () => {
try {
const res: any = await promDatasourceApi.list();
const res: Record<string, any> = await promDatasourceApi.list();
setSources(res?.data || res || []);
} catch {
toast.error('获取数据源列表失败');
@@ -187,7 +204,7 @@ export default function PrometheusDatasourceManager() {
if (!form.name.trim()) { toast.error('请输入数据源名称'); return; }
if (!form.url.trim()) { toast.error('请输入 Prometheus URL'); return; }
const payload: any = {
const payload: Record<string, any> = {
name: form.name.trim(),
url: form.url.trim(),
access: form.access,
@@ -258,7 +275,7 @@ export default function PrometheusDatasourceManager() {
setTesting(true);
setTestResult(null);
try {
const res: any = await promDatasourceApi.testConnection({
const res: Record<string, any> = await promDatasourceApi.testConnection({
url: form.url.trim(),
basic_auth: form.basic_auth,
basic_auth_user: form.basic_auth_user,
@@ -810,7 +827,7 @@ export default function PrometheusDatasourceManager() {
// 快速测试连接(列表中的测试按钮)
async function handleTestQuick(ds: PromDS) {
try {
const res: any = await promDatasourceApi.testConnection({
const res: Record<string, any> = await promDatasourceApi.testConnection({
url: ds.url,
basic_auth: ds.basic_auth,
basic_auth_user: ds.basic_auth_user,
@@ -1,20 +1,33 @@
// Zabbix 数据源管理 — 参照 Grafana Zabbix 数据源配置界面 // Logan.Li
import { useState, useEffect, useCallback } from 'react';
import {
Database, Plus, Trash2, Star, RefreshCw, Plug,
Shield, Globe, Settings, Key, ChevronDown, ChevronUp,
Edit, Clock, CheckCircle2, XCircle
Database,
Plus,
Trash2,
Star,
RefreshCw,
Plug,
Shield,
Globe,
Settings,
ChevronDown,
ChevronUp,
Edit,
Clock,
CheckCircle2,
XCircle,
} from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Badge } from '@/components/ui/badge';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Card, CardContent} from '@/components/ui/card';
import { Label } from '@/components/ui/label';
import { Switch } from '@/components/ui/switch';
import {
Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter
} from '@/components/ui/dialog';
import { Separator } from '@/components/ui/separator';
import { toast } from 'sonner';
import { useConfirm } from '@/components/ui/confirm-dialog';
import { zabbixDatasourceApi } from '@/services/api';
@@ -61,7 +74,7 @@ export default function ZabbixDatasourceManager() {
const fetchList = useCallback(async () => {
try {
const res: any = await zabbixDatasourceApi.list();
const res: Record<string, any> = await zabbixDatasourceApi.list();
setSources(res?.data || res || []);
} catch {
toast.error('获取数据源列表失败');
@@ -151,7 +164,7 @@ export default function ZabbixDatasourceManager() {
setTesting(true);
setTestResult(null);
try {
const res: any = await zabbixDatasourceApi.testConnection({
const res: Record<string, any> = await zabbixDatasourceApi.testConnection({
url: form.url.trim(),
username: form.username.trim(),
password: form.password || '',