refactor(q1): src/api 全量清零 any + types/monitor 扩展输入 DTO

ROADMAP Q1 推进(前端类型安全治理 in_progress):

- src/api/ 整个目录 any 清零(含 monitor/ deploy/ 子目录 12+ 文件)
  create/update 入参 any -> Record<string, unknown> / object
  mock 桩 trace/grafana 对接 types/ 标准类型(Trace/GrafanaDashboard)
  典型接口 LdapFormData/ProbeForm 等强类型表单用 object 接收
- types/monitor.ts 扩展 ~150 行接口:
  ZabbixDatasource / AlertSilence / 7 个输入 DTO
  Trace / TraceSpan / TraceServiceMetrics / GrafanaDashboard / DashboardPanel
  HealthProbeInput

验证:
- 整个 src/api/ 目录 any=0
- ESLint no-explicit-any: 995 -> 937 (本项目此轮贡献 -58)
- tsc -b 零错误, npm run build ✓ (17.06s)
- API 回归 8/8 核心端点通过, Docker 部署 healthy
This commit is contained in:
attacker committed 2026-06-26 03:37:56 +08:00
1 parent 480e677042
commit b553c7956d
436 files changed
+410 -1198

No files matched your search

@@ -0,0 +1 @@
import{i as ye,aj as Me,t as n,r as d,j as e,D as ie,a as le,b as ue,c as pe,E as L,d as he,G as xe,v as ge,W as q,B as h,X as we,T as Fe,C as se,z as be,Q as Ze,e as De,f as je,a4 as Ce}from"./index-o4rKtKfJ.js";import{T as ke,a as Se,b as ce,c as ne}from"./tabs-CoTqT5ed.js";import{B as P}from"./badge-CDGsL4jH.js";import{C as ae,b as Te,c as Ae,a as te}from"./card-6Ae5ROGi.js";import{u as ze,q as qe,a as Ee}from"./unwrap-D0DvYxvf.js";import{u as O}from"./useMutation-B7xoUHzt.js";import{p as z,z as T}from"./datasource-PlnPrptP.js";import{I as x}from"./input-BfBi0wR2.js";import{L as m}from"./label-DrX9VaVC.js";import{S as j}from"./switch-Dqj5wqUV.js";import{S as J,a as X,b as Y,c as ee,d as A}from"./select-DuV0kIrj.js";import{C as E}from"./chevron-up-CZcf1jNw.js";import{W as Le}from"./wrench-Bv79GtB7.js";import{P as B}from"./plus-BXcAPnTg.js";import{C as ve}from"./circle-x-DCq7zPbk.js";import{R as oe}from"./refresh-cw-eQ6GkWW0.js";import{S as V}from"./star-nuqYbwAt.js";import{S as _e}from"./square-pen-y4Af_nu2.js";import{T as Ne}from"./trash-2-C2Niwqae.js";import{C as Ie}from"./circle-check-Bp6gonk8.js";import"./index-BeCACrpC.js";const Re=[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z",key:"1xoxul"}],["path",{d:"M9 8V2",key:"14iosj"}]],re=ye("plug",Re);function He(){return ze({queryKey:qe.promDatasources(),queryFn:async()=>{const a=await z.list();return Ee(a)},staleTime:3e4})}function fe(){const a=Me(),o=()=>a.invalidateQueries({queryKey:["prom-datasources"]}),p=O({mutationFn:l=>z.create(l),onSuccess:o}),y=O({mutationFn:({id:l,data:t})=>z.update(l,t),onSuccess:o}),M=O({mutationFn:l=>z.delete(l),onSuccess:o}),w=O({mutationFn:l=>z.setDefault(l),onSuccess:o});return{createMutation:p,updateMutation:y,deleteMutation:M,setDefaultMutation:w,invalidate:o}}function Oe(a){return{name:a.name,url:a.url,access:a.access||"server",http_method:a.http_method||"POST",basic_auth:a.basic_auth||!1,basic_auth_user:a.basic_auth_user||"",basic_auth_pass:a.basic_auth_pass||"",with_credentials:a.with_credentials||!1,tls_client_auth:a.tls_client_auth||!1,with_ca_cert:a.with_ca_cert||!1,ca_cert:a.ca_cert||"",skip_tls_verify:a.skip_tls_verify||!1,custom_headers_json:a.custom_headers||"",enable_alerting:a.enable_alerting!==!1,alertmanager_ds:a.alertmanager_ds||"",scrape_interval:a.scrape_interval||15,query_timeout:a.query_timeout||60,disable_metrics_lookup:a.disable_metrics_lookup||!1,custom_query_params:a.custom_query_params||"",is_default:a.is_default||!1}}function Be(a){try{const o=JSON.parse(a||"[]");return Array.isArray(o)?o:[]}catch{return[]}}function Ve(a,o){return{name:a.name.trim(),url:a.url.trim(),access:a.access,http_method:a.http_method,basic_auth:a.basic_auth,basic_auth_user:a.basic_auth_user,basic_auth_pass:a.basic_auth_pass,with_credentials:a.with_credentials,tls_client_auth:a.tls_client_auth,with_ca_cert:a.with_ca_cert,ca_cert:a.ca_cert,skip_tls_verify:a.skip_tls_verify,custom_headers:JSON.stringify(o),enable_alerting:a.enable_alerting,alertmanager_ds:a.alertmanager_ds,scrape_interval:a.scrape_interval,query_timeout:a.query_timeout,disable_metrics_lookup:a.disable_metrics_lookup,custom_query_params:a.custom_query_params,is_default:a.is_default}}async function Pe(a){const o=await z.testConnection({url:a.url.trim(),basic_auth:a.basic_auth,basic_auth_user:a.basic_auth_user,basic_auth_pass:a.basic_auth_pass,skip_tls_verify:a.skip_tls_verify});return o?.data||o}async function $e(a){try{const o=await Pe({url:a.url,basic_auth:a.basic_auth,basic_auth_user:a.basic_auth_user,basic_auth_pass:a.basic_auth_pass,skip_tls_verify:a.skip_tls_verify});o?.success?n.success(`连接成功 · ${o.target_count||0} targets`):n.error(o?.message||"连接失败")}catch(o){const p=o instanceof Error?o.message:"测试失败";n.error(p)}}const me={name:"",url:"",access:"server",http_method:"POST",basic_auth:!1,basic_auth_user:"",basic_auth_pass:"",with_credentials:!1,tls_client_auth:!1,with_ca_cert:!1,ca_cert:"",skip_tls_verify:!1,custom_headers_json:"",enable_alerting:!0,alertmanager_ds:"",scrape_interval:15,query_timeout:60,disable_metrics_lookup:!1,custom_query_params:"",is_default:!1};function Ue({open:a,onOpenChange:o,editingDs:p,sources:y}){const{createMutation:M,updateMutation:w}=fe(),l=p?.id??null,[t,F]=d.useState({...me}),[r,v]=d.useState([]),[N,Z]=d.useState(!1),[,C]=d.useState(!1),[c,f]=d.useState(!1),[S,I]=d.useState(!1),[R,k]=d.useState(!1),[b,_]=d.useState(null);d.useEffect(()=>{a&&(p?(F(Oe(p)),v(Be(p.custom_headers))):(F({...me}),v([])),_(null),Z(!1),C(!1),f(!1),I(!1))},[a,p]);const i=(s,u)=>{F(D=>({...D,[s]:u}))},$=()=>{v(s=>[...s,{header:"",value:""}])},g=s=>{v(u=>u.filter((D,W)=>W!==s))},H=(s,u,D)=>{v(W=>{const K=[...W];return K[s]={...K[s],[u]:D},K})},U=async()=>{if(!t.name.trim()){n.error("请输入数据源名称");return}if(!t.url.trim()){n.error("请输入 Prometheus URL");return}const s=Ve(t,r);try{l?(await w.mutateAsLine truncated