chainlesschain 0.157.9 → 0.158.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/chainlesschain.js +0 -0
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-C4XQxptM.js → AIOps-9QEKGr43.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CvKbykKA.js → ActionButton-BQElVBgD.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DFMAWKUR.js → Analytics-DbZbFR_a.js} +1 -1
- package/src/assets/web-panel/assets/{AppLayout-BkNdtTbn.js → AppLayout-BbfBwVfE.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-Bw7KSJD_.js → Audit-DzddAZVx.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CvAa9Hm_.js → BaseInput-60t9IMEz.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-YsCNWg9S.js → Checkbox-Ba1Rf2Ea.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DDiVk21N.js → Codegen-WiYmL3oB.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Dpb7Eik4.js → Col-D2zhpSqE.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Bglv8oIv.js → Community-DgqmUGwT.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DC8UsEAe.js → Compact-D_dbJDbi.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DzVghx7L.js → Compliance-BVcVb-e2.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-I81HiCa1.js → Cron-Cs5QaKTP.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-48CdkgQf.js → Crosschain-pjWfIM8s.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CVYxjLQn.js → DID-DQtsjz3X.js} +1 -1
- package/src/assets/web-panel/assets/{Dropdown-DBfZJHBI.js → Dropdown-BM_ljd87.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BT-pF1wN.js → Federation-CId-3zn6.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-B-sn9E_W.js → FormItemContext-CnzbixSE.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DTh2i-Qk.js → Git-B38QeOPF.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-D788Lws6.js → Governance-DrGkAjd1.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CnFa6Se9.js → Inference-BjkHB4sD.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DHaMxawn.js → KnowledgeGraph-Trs1XJFK.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-BdOCF2RA.js → Marketplace-BnpOoITi.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-Vl_lYCs2.js → Memory-BHXHpldt.js} +1 -1
- package/src/assets/web-panel/assets/NLProgramming-B3BALajs.js +1 -0
- package/src/assets/web-panel/assets/{Notes-BvC5_V2H.js → Notes-u6lLTv0t.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-Cxhhw4aD.js → Organization-CQ1X722j.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-L_28D41_.js → Overflow-DHKu8e8g.js} +1 -1
- package/src/assets/web-panel/assets/{Permissions-ByLhEAbz.js → Permissions-B2XrAUBW.js} +1 -1
- package/src/assets/web-panel/assets/{Pipeline-CnZJNdgt.js → Pipeline-C0K9-DnR.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BJIajCGG.js → Privacy-BKPoZngH.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-N0r_mtec.js → ProjectSettings-C34C7hFt.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-B2A35VhD.js → Providers-BFiMVWaM.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DYb61WNp.js → Recommend-BmUhysGC.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-C9BfnI0z.js → Reputation-BlfSvJww.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CpPHVi7H.js → Row-Dl74576S.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CbqJDErh.js → RssFeed-9_MkDUxZ.js} +1 -1
- package/src/assets/web-panel/assets/{Search-C0gd765-.js → Search-CSRY_TYa.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DsYWAhpE.js → Security-DfDoKfkl.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-TzxE-JJt.js → Skeleton-6CF_3QUY.js} +1 -1
- package/src/assets/web-panel/assets/Skills-DowQcRe1.js +1 -0
- package/src/assets/web-panel/assets/{Sla-mftEtvGn.js → Sla-B93c8j92.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DgonVRQJ.js → Templates-DJ_hvs5c.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BB-LLJMZ.js → Tenant-BXS8s6vl.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DHOkHNur.js → Tokens-CvmTVU7E.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BV4JPD3z.js → Trigger-BenSsaoN.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BpC4gDis.js → Trust-HMz40LfZ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CeDFfKrq.js → VideoEditing-DEhH42sI.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CcNCVaor.js → Wallet-AGwfOdTM.js} +1 -1
- package/src/assets/web-panel/assets/{WebAuthn-BbIPA6Ca.js → WebAuthn-DK5tKWul.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-DxkitXpf.js → WorkflowEditor-vlujdL6I.js} +1 -1
- package/src/assets/web-panel/assets/{colors-2MPUdPu2.js → colors-BiB5aDao.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-B4vcKR0x.js → compact-item-CHderV9n.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Div8Cl0F.js → createContext-DMZ-5dy2.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-9c9xldOR.js → hasIn-BKDBYP3s.js} +1 -1
- package/src/assets/web-panel/assets/{index-BuVNDnn8.js → index-7fxCGMoL.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZW72ov7W.js → index-7pqZqPD2.js} +1 -1
- package/src/assets/web-panel/assets/{index-CIE6ht2b.js → index-A4RpHMOa.js} +1 -1
- package/src/assets/web-panel/assets/{index-dV8k_pMc.js → index-AIdelwOe.js} +1 -1
- package/src/assets/web-panel/assets/index-B5oebI6W.js +1 -0
- package/src/assets/web-panel/assets/{index-COJ-mQYg.js → index-B7fivpG2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BntG0RJO.js → index-BBWUR4u4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCfVA9mJ.js → index-BBk2e7vJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfoYep3e.js → index-BRRFK-im.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVYrm1az.js → index-BVOI707f.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1GXp5YD.js → index-BadelvSE.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbqCdQXU.js → index-BfKFNptm.js} +1 -1
- package/src/assets/web-panel/assets/{index-OhUZFfxQ.js → index-BgDX-tzO.js} +1 -1
- package/src/assets/web-panel/assets/{index-B58J4NxK.js → index-BjSojphX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DJAPu9VF.js → index-BlXskar6.js} +1 -1
- package/src/assets/web-panel/assets/{index-B65KFSc3.js → index-BryAkWUJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0GALIQZ.js → index-C1p_dZw0.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtM3tjRj.js → index-CBYNsy51.js} +1 -1
- package/src/assets/web-panel/assets/{index-IzAqu_OK.js → index-CEpcKl17.js} +1 -1
- package/src/assets/web-panel/assets/{index--tOLU2ID.js → index-CUT3Nmzx.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ca3iTiXs.js → index-CbpCY2ch.js} +1 -1
- package/src/assets/web-panel/assets/{index-DgWftysw.js → index-D3PGpBPm.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-CTCrAH.js → index-D3lD9wgX.js} +1 -1
- package/src/assets/web-panel/assets/index-D5Beu9ZA.js +1 -0
- package/src/assets/web-panel/assets/{index-CIWKlZ1X.js → index-DRRzH4Ge.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcnQrVVZ.js → index-DRcTAUJA.js} +1 -1
- package/src/assets/web-panel/assets/{index-COdKVelL.js → index-DZ8MjPLC.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZZ_4A9um.js → index-DfcXDy2A.js} +3 -3
- package/src/assets/web-panel/assets/{index-B4hcllQg.js → index-DtDFSCfE.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1JeOKve.js → index-DvI8Xtzv.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-0g6tCK.js → index-DvfAkHw8.js} +1 -1
- package/src/assets/web-panel/assets/{index-D--EKCHy.js → index-DyXslU_B.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dk3ZySO2.js → index-MoLxDrkb.js} +1 -1
- package/src/assets/web-panel/assets/{index-DogHNcyC.js → index-Ncxqj2UN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdHPswKn.js → index-YgC7QI1N.js} +1 -1
- package/src/assets/web-panel/assets/{index-3KbT-bG7.js → index-_sntSncx.js} +1 -1
- package/src/assets/web-panel/assets/{index-BjGOthNv.js → index-uujjC_4g.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIe3dY84.js → index-yMt4C1Gh.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps--L8bzddm.js → initDefaultProps-B2vQoQga.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BR7NF0vx.js → motion-D2eluOJu.js} +1 -1
- package/src/assets/web-panel/assets/{move-BpyQMRtF.js → move-CgcvSoZ7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-RkKN6uqw.js → omit-DvLh7wH1.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Bk8_mKGY.js → pickAttrs-BsseBclw.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CBAaXBxj.js → placementArrow-XLLtr9qD.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BzrPInK7.js → responsiveObserve-ByCb5zZK.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CXFBsLyp.js → slide-CeP5JCiZ.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-6TeOuUzQ.js → statusUtils-DMVoo96t.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CQt4HHRm.js → styleChecker-Cz5mJgc8.js} +1 -1
- package/src/assets/web-panel/assets/{transition-CGYDOK3N.js → transition-DSe9CgZe.js} +1 -1
- package/src/assets/web-panel/assets/{useConfigInject-BKqJUQaF.js → useConfigInject-DCcT0grw.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport--RuYYIc6.js → useFlexGapSupport-BZkoDuF3.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-I9keNa_U.js → vnode-Dexy2NN9.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BNV3xYvt.js → zoom-CDfM_sRk.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/nlprog.js +25 -15
- package/src/gateways/ws/ws-server.js +12 -1
- package/src/lib/web-ui-server.js +33 -0
- package/src/assets/web-panel/assets/NLProgramming-CgD2H0Pc.js +0 -1
- package/src/assets/web-panel/assets/Skills-DfaRaffm.js +0 -1
- package/src/assets/web-panel/assets/index-BzBaZFuT.js +0 -1
- package/src/assets/web-panel/assets/index-CDoxJ9Cl.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as Ne}from"./ws-Bv7YH0VB.js";import{s as Be}from"./community-parser-CO25nZFt.js";import{_ as qe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-BbqCdQXU.js";import{Y as Ie,ac as Re,s as re,aM as ie,aN as ue,aO as Ve,af as De,an as Je,ax as de}from"./icons-ukMaZ3tx.js";import{l as Pe,F as f,D as m,c as a,x as n,m as C,G as h,q as v,r as k,v as i,J as y,u as b,H as A,L as w,I as u,a as Y}from"./vendor-BVetwVfk.js";import"./index-ZZ_4A9um.js";import"./useConfigInject-BKqJUQaF.js";import"./transition-CGYDOK3N.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function N(t){const l=Be(t);if(!l)return null;try{return JSON.parse(l)}catch{}const r=l.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!r)return null;try{return JSON.parse(r[0])}catch{return null}}function S(t,l=0){return typeof t=="number"&&Number.isFinite(t)?t:l}function Ee(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,name:String(t.name||r),symbol:String(t.symbol||""),chainId:S(t.chainId??t.chain_id,0),_idx:l}:null}function Ke(t){const l=N(t);return Array.isArray(l)?l.map(Ee).filter(Boolean):[]}function Ge(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",asset:String(t.asset||"native"),amount:S(t.amount,0),senderAddress:t.senderAddress??t.sender_address??"",recipientAddress:t.recipientAddress??t.recipient_address??"",lockTxHash:t.lockTxHash??t.lock_tx_hash??"",mintTxHash:t.mintTxHash??t.mint_tx_hash??"",status:String(t.status||"pending").toLowerCase(),feeAmount:S(t.feeAmount??t.fee_amount,0),feeChain:t.feeChain??t.fee_chain??"",errorMessage:t.errorMessage??t.error_message??"",createdAt:t.createdAt??t.created_at??null,completedAt:t.completedAt??t.completed_at??null,_idx:l}:null}function We(t){const l=N(t);return Array.isArray(l)?l.map(Ge).filter(Boolean):[]}function Xe(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",fromAsset:t.fromAsset??t.from_asset??"native",toAsset:t.toAsset??t.to_asset??"native",amount:S(t.amount,0),counterpartyAddress:t.counterpartyAddress??t.counterparty_address??"",hashLock:t.hashLock??t.hash_lock??"",expiresAt:t.expiresAt??t.expires_at??null,status:String(t.status||"initiated").toLowerCase(),claimTxHash:t.claimTxHash??t.claim_tx_hash??"",refundTxHash:t.refundTxHash??t.refund_tx_hash??"",createdAt:t.createdAt??t.created_at??null,_idx:l}:null}function Ye(t){const l=N(t);return Array.isArray(l)?l.map(Xe).filter(Boolean):[]}function Qe(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",payload:String(t.payload||""),targetContract:t.targetContract??t.target_contract??"",sourceTxHash:t.sourceTxHash??t.source_tx_hash??"",destinationTxHash:t.destinationTxHash??t.destination_tx_hash??"",status:String(t.status||"pending").toLowerCase(),retries:S(t.retries,0),createdAt:t.createdAt??t.created_at??null,deliveredAt:t.deliveredAt??t.delivered_at??null,_idx:l}:null}function Ze(t){const l=N(t);return Array.isArray(l)?l.map(Qe).filter(Boolean):[]}const et={bridges:{total:0,byStatus:{},totalVolume:0,totalFees:0},swaps:{total:0,byStatus:{}},messages:{total:0,byStatus:{}}};function tt(t){const l=JSON.parse(JSON.stringify(et)),r=N(t);return!r||typeof r!="object"||Array.isArray(r)||(r.bridges&&typeof r.bridges=="object"&&(l.bridges.total=S(r.bridges.total,0),l.bridges.totalVolume=S(r.bridges.totalVolume??r.bridges.total_volume,0),l.bridges.totalFees=S(r.bridges.totalFees??r.bridges.total_fees,0),r.bridges.byStatus&&typeof r.bridges.byStatus=="object"&&(l.bridges.byStatus={...r.bridges.byStatus})),r.swaps&&typeof r.swaps=="object"&&(l.swaps.total=S(r.swaps.total,0),r.swaps.byStatus&&typeof r.swaps.byStatus=="object"&&(l.swaps.byStatus={...r.swaps.byStatus})),r.messages&&typeof r.messages=="object"&&(l.messages.total=S(r.messages.total,0),r.messages.byStatus&&typeof r.messages.byStatus=="object"&&(l.messages.byStatus={...r.messages.byStatus}))),l}function at(t){const l=N(t);return!l||typeof l!="object"||Array.isArray(l)?null:{fee:S(l.fee,0),breakdown:{sourceFee:S(l?.breakdown?.sourceFee??l?.breakdown?.source_fee,0),destFee:S(l?.breakdown?.destFee??l?.breakdown?.dest_fee,0),bridgeFee:S(l?.breakdown?.bridgeFee??l?.breakdown?.bridge_fee,0)},currency:String(l.currency||"USD")}}function pe(t){if(t==null||t==="")return"—";const l=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(l.getTime())?String(t):l.toLocaleString("zh-CN",{hour12:!1})}const ot={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},nt={style:{opacity:"0.7"}},st={key:0,style:{opacity:"0.55","font-size":"10px","margin-left":"4px"}},lt={style:{color:"var(--text-primary)"}},rt={style:{color:"var(--text-primary)"}},it={style:{color:"#722ed1","font-weight":"500"}},ut={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},dt={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},pt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ct={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={style:{color:"var(--text-primary)"}},mt={style:{color:"var(--text-secondary)","font-size":"11px",margin:"0 4px"}},yt={style:{color:"var(--text-primary)"}},vt={style:{color:"var(--text-secondary)","font-size":"11px","margin-left":"4px"}},gt={key:1,style:{color:"#722ed1","font-weight":"500"}},_t={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},bt={key:1,style:{color:"var(--text-muted)"}},ht={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},xt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},kt={style:{color:"var(--text-primary)"}},Ct={style:{color:"var(--text-primary)"}},At={key:1,style:{color:"var(--text-secondary)","font-size":"12px"}},St={key:1,style:{color:"var(--text-muted)"}},zt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Tt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ft={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Ut={__name:"Crosschain",setup(t){const l=Ne(),r=k(!1),Q=k(!1),Z=k(!1),ee=k(!1),te=k(!1),z=k([]),ce=k([]),fe=k([]),me=k([]),B=k({bridges:{total:0,byStatus:{},totalVolume:0,totalFees:0},swaps:{total:0,byStatus:{}},messages:{total:0,byStatus:{}}}),q=k("bridges"),J=k(!1),P=k(!1),E=k(!1),ae=k(!1),p=Y({fromChain:"",toChain:"",amount:null,asset:"",sender:"",recipient:""}),d=Y({fromChain:"",toChain:"",amount:null,fromAsset:"",toAsset:"",counterparty:"",timeoutMs:null}),g=Y({fromChain:"",toChain:"",payload:"",contract:""}),T=Y({fromChain:"",toChain:"",amount:null}),F=k(null),be=[{title:"路径",key:"route"},{title:"金额",key:"amount",width:"160px"},{title:"费用",key:"fee",width:"100px"},{title:"状态",key:"status",width:"110px"},{title:"创建时间",key:"createdAt",width:"160px"}],he=[{title:"路径",key:"route"},{title:"金额",key:"amount",width:"110px"},{title:"哈希锁",key:"hashLock",width:"160px"},{title:"状态",key:"status",width:"120px"},{title:"过期时间",key:"expiresAt",width:"160px"}],xe=[{title:"路径",key:"route",width:"220px"},{title:"消息",key:"payload"},{title:"重试",key:"retries",width:"80px"},{title:"状态",key:"status",width:"110px"},{title:"创建时间",key:"createdAt",width:"160px"}],ke={ethereum:"blue",polygon:"purple",bsc:"gold",arbitrum:"cyan",solana:"magenta"};function Ce(s){return ke[s]||"default"}function O(s){const o=z.value.find(U=>U.id===s);return o?o.name:s||"—"}function oe(s){return{pending:"待处理",locked:"已锁定",minted:"已铸造",completed:"已完成",refunded:"已退款",failed:"失败",initiated:"已发起",hash_locked:"哈希锁定",claimed:"已领取",expired:"已过期",sent:"已发送",delivered:"已送达"}[s]||s}function Ae(s){return{pending:"default",locked:"processing",minted:"cyan",completed:"green",refunded:"orange",failed:"red"}[s]||"default"}function Se(s){return{initiated:"default",hash_locked:"processing",claimed:"green",refunded:"orange",expired:"red"}[s]||"default"}function ze(s){return{pending:"default",sent:"processing",delivered:"green",failed:"red"}[s]||"default"}function Te(s,o){return s?s.length>o?s.slice(0,o)+"...":s:""}function Fe({key:s}){s==="bridge"?J.value=!0:s==="swap"?P.value=!0:s==="message"&&(E.value=!0)}async function I(){r.value=!0;try{const[s,o,U,R,ne]=await Promise.all([l.execute("crosschain chains --json",8e3).catch(()=>({output:""})),l.execute("crosschain bridges --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain swaps --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain messages --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain stats --json",8e3).catch(()=>({output:""}))]);z.value=Ke(s.output),ce.value=We(o.output),fe.value=Ye(U.output),me.value=Ze(R.output),B.value=tt(ne.output)}catch(s){x.error("加载跨链数据失败: "+(s?.message||s))}finally{r.value=!1}}function K(s){return!s.fromChain||!s.toChain?(x.warning("请选择源链和目标链"),!1):s.fromChain===s.toChain?(x.warning("源链和目标链必须不同"),!1):!0}async function Ue(){if(K(p)){if(!p.amount||p.amount<=0){x.warning("请输入正数金额");return}Q.value=!0;try{const s=[`crosschain bridge ${p.fromChain} ${p.toChain} ${p.amount}`];p.asset.trim()&&s.push(`--asset "${p.asset.trim().replace(/"/g,'\\"')}"`),p.sender.trim()&&s.push(`--sender "${p.sender.trim().replace(/"/g,'\\"')}"`),p.recipient.trim()&&s.push(`--recipient "${p.recipient.trim().replace(/"/g,'\\"')}"`),s.push("--json");const{output:o}=await l.execute(s.join(" "),15e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"bridgeId"/.test(o)){x.error("桥接发起失败: "+o.slice(0,120));return}x.success("桥接已发起"),J.value=!1,ye(),q.value="bridges",await I()}catch(s){x.error("桥接失败: "+(s?.message||s))}finally{Q.value=!1}}}async function we(){if(K(d)){if(!d.amount||d.amount<=0){x.warning("请输入正数金额");return}Z.value=!0;try{const s=[`crosschain swap ${d.fromChain} ${d.toChain} ${d.amount}`];d.fromAsset.trim()&&s.push(`--from-asset "${d.fromAsset.trim().replace(/"/g,'\\"')}"`),d.toAsset.trim()&&s.push(`--to-asset "${d.toAsset.trim().replace(/"/g,'\\"')}"`),d.counterparty.trim()&&s.push(`--counterparty "${d.counterparty.trim().replace(/"/g,'\\"')}"`),d.timeoutMs!=null&&s.push(`--timeout ${d.timeoutMs}`),s.push("--json");const{output:o}=await l.execute(s.join(" "),15e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"swapId"/.test(o)){x.error("原子交换发起失败: "+o.slice(0,120));return}x.success("原子交换已发起"),P.value=!1,ve(),q.value="swaps",await I()}catch(s){x.error("原子交换失败: "+(s?.message||s))}finally{Z.value=!1}}}async function je(){if(K(g)){ee.value=!0;try{const s=[`crosschain send ${g.fromChain} ${g.toChain}`];g.payload.trim()&&s.push(`--payload "${g.payload.trim().replace(/"/g,'\\"')}"`),g.contract.trim()&&s.push(`--contract "${g.contract.trim().replace(/"/g,'\\"')}"`),s.push("--json");const{output:o}=await l.execute(s.join(" "),12e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"messageId"/.test(o)){x.error("消息发送失败: "+o.slice(0,120));return}x.success("消息已发送"),E.value=!1,ge(),q.value="messages",await I()}catch(s){x.error("发送失败: "+(s?.message||s))}finally{ee.value=!1}}}async function $e(){if(K(T)){if(!T.amount||T.amount<=0){x.warning("请输入正数金额");return}te.value=!0,F.value=null;try{const s=`crosschain estimate-fee ${T.fromChain} ${T.toChain} ${T.amount} --json`,{output:o}=await l.execute(s,8e3),U=at(o);if(!U){x.error("费用估算失败: "+o.slice(0,120));return}F.value=U}catch(s){x.error("估算失败: "+(s?.message||s))}finally{te.value=!1}}}function ye(){p.fromChain="",p.toChain="",p.amount=null,p.asset="",p.sender="",p.recipient=""}function ve(){d.fromChain="",d.toChain="",d.amount=null,d.fromAsset="",d.toAsset="",d.counterparty="",d.timeoutMs=null}function ge(){g.fromChain="",g.toChain="",g.payload="",g.contract=""}return Pe(I),(s,o)=>{const U=v("a-button"),R=v("a-menu-item"),ne=v("a-menu"),Le=v("a-dropdown"),_e=v("a-space"),H=v("a-statistic"),L=v("a-card"),V=v("a-col"),Me=v("a-row"),D=v("a-tag"),se=v("a-table"),le=v("a-tab-pane"),Oe=v("a-tabs"),j=v("a-select-option"),$=v("a-select"),_=v("a-form-item"),G=v("a-input-number"),M=v("a-input"),W=v("a-form"),X=v("a-modal"),He=v("a-textarea");return i(),f("div",null,[m("div",ot,[o[32]||(o[32]=m("div",null,[m("h2",{class:"page-title"},"跨链桥"),m("p",{class:"page-sub"},"链间资产桥接 · HTLC 原子交换 · 跨链消息")],-1)),a(_e,null,{default:n(()=>[a(U,{loading:r.value,onClick:I},{icon:n(()=>[a(b(Ie))]),default:n(()=>[o[26]||(o[26]=y(" 刷新 ",-1))]),_:1},8,["loading"]),a(Le,{trigger:["click"]},{overlay:n(()=>[a(ne,{onClick:Fe},{default:n(()=>[a(R,{key:"bridge"},{default:n(()=>[a(b(re)),o[28]||(o[28]=y(" 桥接资产",-1))]),_:1}),a(R,{key:"swap"},{default:n(()=>[a(b(ie)),o[29]||(o[29]=y(" HTLC 原子交换",-1))]),_:1}),a(R,{key:"message"},{default:n(()=>[a(b(ue)),o[30]||(o[30]=y(" 跨链消息",-1))]),_:1})]),_:1})]),default:n(()=>[a(U,{type:"primary"},{icon:n(()=>[a(b(Re))]),default:n(()=>[o[27]||(o[27]=y(" 新建 ▼ ",-1))]),_:1})]),_:1}),a(U,{onClick:o[0]||(o[0]=e=>ae.value=!0)},{icon:n(()=>[a(b(Ve))]),default:n(()=>[o[31]||(o[31]=y(" 费用估算 ",-1))]),_:1})]),_:1})]),a(Me,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[a(V,{xs:12,sm:8,lg:5},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"支持链",value:z.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[a(b(De))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"桥接交易",value:B.value.bridges.total,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:n(()=>[a(b(re))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"原子交换",value:B.value.swaps.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[a(b(ie))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"跨链消息",value:B.value.messages.total,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:n(()=>[a(b(ue))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:24,sm:8,lg:4},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"总交易额",value:B.value.bridges.totalVolume,precision:2,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[a(b(Je))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),z.value.length?(i(),C(L,{key:0,title:"支持的区块链",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[a(_e,{size:[12,8],wrap:""},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(D,{key:e.id,color:Ce(e.id)},{default:n(()=>[y(u(e.name)+" ",1),m("span",nt,"("+u(e.symbol)+")",1),e.chainId>0?(i(),f("span",st,"#"+u(e.chainId),1)):h("",!0)]),_:2},1032,["color"]))),128))]),_:1})]),_:1})):h("",!0),a(Oe,{activeKey:q.value,"onUpdate:activeKey":o[1]||(o[1]=e=>q.value=e),class:"xchain-tabs"},{default:n(()=>[a(le,{key:"bridges",tab:"桥接交易"},{default:n(()=>[a(se,{columns:be,"data-source":ce.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",lt,u(O(c.fromChain)),1),a(b(de),{style:{margin:"0 6px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",rt,u(O(c.toChain)),1)],64)):h("",!0),e.key==="amount"?(i(),f(A,{key:1},[m("span",it,u(c.amount),1),m("span",ut,u(c.asset),1)],64)):h("",!0),e.key==="fee"?(i(),f("span",dt,u(c.feeAmount),1)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:Ae(c.status)},{default:n(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="createdAt"?(i(),f("span",pt,u(b(pe)(c.createdAt)),1)):h("",!0)]),emptyText:n(()=>[m("div",ct,[a(b(re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[33]||(o[33]=y(' 暂无桥接交易,点"新建 → 桥接资产"发起 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),a(le,{key:"swaps",tab:"原子交换"},{default:n(()=>[a(se,{columns:he,"data-source":fe.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",ft,u(O(c.fromChain)),1),m("span",mt,"("+u(c.fromAsset)+")",1),a(b(de),{style:{margin:"0 4px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",yt,u(O(c.toChain)),1),m("span",vt,"("+u(c.toAsset)+")",1)],64)):h("",!0),e.key==="amount"?(i(),f("span",gt,u(c.amount),1)):h("",!0),e.key==="hashLock"?(i(),f(A,{key:2},[c.hashLock?(i(),f("span",_t,u(c.hashLock.slice(0,14))+"... ",1)):(i(),f("span",bt,"—"))],64)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:Se(c.status)},{default:n(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="expiresAt"?(i(),f("span",ht,u(b(pe)(c.expiresAt)),1)):h("",!0)]),emptyText:n(()=>[m("div",xt,[a(b(ie),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[34]||(o[34]=y(' 暂无原子交换,点"新建 → HTLC 原子交换"发起 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),a(le,{key:"messages",tab:"跨链消息"},{default:n(()=>[a(se,{columns:xe,"data-source":me.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",kt,u(O(c.fromChain)),1),a(b(de),{style:{margin:"0 6px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",Ct,u(O(c.toChain)),1)],64)):h("",!0),e.key==="payload"?(i(),f("span",At,u(Te(c.payload,60)||"—"),1)):h("",!0),e.key==="retries"?(i(),f(A,{key:2},[c.retries>0?(i(),C(D,{key:0,color:"orange",style:{"font-size":"11px"}},{default:n(()=>[y(u(c.retries)+" 次",1)]),_:2},1024)):(i(),f("span",St,"—"))],64)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:ze(c.status)},{default:n(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="createdAt"?(i(),f("span",zt,u(b(pe)(c.createdAt)),1)):h("",!0)]),emptyText:n(()=>[m("div",Tt,[a(b(ue),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[35]||(o[35]=y(' 暂无跨链消息,点"新建 → 跨链消息"发送 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),a(X,{open:J.value,"onUpdate:open":o[8]||(o[8]=e=>J.value=e),title:"桥接资产","confirm-loading":Q.value,width:540,"ok-text":"发起桥接","cancel-text":"取消",onOk:Ue,onCancel:ye},{default:n(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(_,{label:"源链",required:""},{default:n(()=>[a($,{value:p.fromChain,"onUpdate:value":o[2]||(o[2]=e=>p.fromChain=e),placeholder:"选择源链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:n(()=>[a($,{value:p.toChain,"onUpdate:value":o[3]||(o[3]=e=>p.toChain=e),placeholder:"选择目标链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===p.fromChain},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:n(()=>[a(G,{value:p.amount,"onUpdate:value":o[4]||(o[4]=e=>p.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1}),a(_,{label:"资产"},{default:n(()=>[a(M,{value:p.asset,"onUpdate:value":o[5]||(o[5]=e=>p.asset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"发送方"},{default:n(()=>[a(M,{value:p.sender,"onUpdate:value":o[6]||(o[6]=e=>p.sender=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1}),a(_,{label:"接收方"},{default:n(()=>[a(M,{value:p.recipient,"onUpdate:value":o[7]||(o[7]=e=>p.recipient=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:P.value,"onUpdate:open":o[16]||(o[16]=e=>P.value=e),title:"HTLC 原子交换","confirm-loading":Z.value,width:540,"ok-text":"发起交换","cancel-text":"取消",onOk:we,onCancel:ve},{default:n(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(_,{label:"源链",required:""},{default:n(()=>[a($,{value:d.fromChain,"onUpdate:value":o[9]||(o[9]=e=>d.fromChain=e),placeholder:"选择源链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:n(()=>[a($,{value:d.toChain,"onUpdate:value":o[10]||(o[10]=e=>d.toChain=e),placeholder:"选择目标链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===d.fromChain},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:n(()=>[a(G,{value:d.amount,"onUpdate:value":o[11]||(o[11]=e=>d.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1}),a(_,{label:"源资产"},{default:n(()=>[a(M,{value:d.fromAsset,"onUpdate:value":o[12]||(o[12]=e=>d.fromAsset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"目标资产"},{default:n(()=>[a(M,{value:d.toAsset,"onUpdate:value":o[13]||(o[13]=e=>d.toAsset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"对手方"},{default:n(()=>[a(M,{value:d.counterparty,"onUpdate:value":o[14]||(o[14]=e=>d.counterparty=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1}),a(_,{label:"超时 (ms)"},{default:n(()=>[a(G,{value:d.timeoutMs,"onUpdate:value":o[15]||(o[15]=e=>d.timeoutMs=e),min:0,placeholder:"默认 24h",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:E.value,"onUpdate:open":o[21]||(o[21]=e=>E.value=e),title:"发送跨链消息","confirm-loading":ee.value,width:520,"ok-text":"发送","cancel-text":"取消",onOk:je,onCancel:ge},{default:n(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(_,{label:"源链",required:""},{default:n(()=>[a($,{value:g.fromChain,"onUpdate:value":o[17]||(o[17]=e=>g.fromChain=e),placeholder:"选择源链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:n(()=>[a($,{value:g.toChain,"onUpdate:value":o[18]||(o[18]=e=>g.toChain=e),placeholder:"选择目标链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===g.fromChain},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"消息"},{default:n(()=>[a(He,{value:g.payload,"onUpdate:value":o[19]||(o[19]=e=>g.payload=e),"auto-size":{minRows:3,maxRows:8}},null,8,["value"])]),_:1}),a(_,{label:"目标合约"},{default:n(()=>[a(M,{value:g.contract,"onUpdate:value":o[20]||(o[20]=e=>g.contract=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:ae.value,"onUpdate:open":o[25]||(o[25]=e=>ae.value=e),title:"费用估算","confirm-loading":te.value,width:480,"ok-text":"估算","cancel-text":"关闭",onOk:$e},{default:n(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(_,{label:"源链",required:""},{default:n(()=>[a($,{value:T.fromChain,"onUpdate:value":o[22]||(o[22]=e=>T.fromChain=e)},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:n(()=>[a($,{value:T.toChain,"onUpdate:value":o[23]||(o[23]=e=>T.toChain=e)},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===T.fromChain},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:n(()=>[a(G,{value:T.amount,"onUpdate:value":o[24]||(o[24]=e=>T.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),F.value?(i(),C(L,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:n(()=>[a(H,{title:"预估费用",value:F.value.fee,precision:4,suffix:F.value.currency,"value-style":{color:"#1677ff"}},null,8,["value","suffix"]),m("div",Ft,[m("div",null,"源链费: "+u(F.value.breakdown.sourceFee)+" "+u(F.value.currency),1),m("div",null,"目标链费: "+u(F.value.breakdown.destFee)+" "+u(F.value.currency),1),m("div",null,"桥接费: "+u(F.value.breakdown.bridgeFee)+" "+u(F.value.currency),1)])]),_:1})):h("",!0)]),_:1},8,["open","confirm-loading"])])}}},Vt=qe(Ut,[["__scopeId","data-v-04225cba"]]);export{Vt as default};
|
|
1
|
+
import{u as Ne}from"./ws-Bv7YH0VB.js";import{s as Be}from"./community-parser-CO25nZFt.js";import{_ as qe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-BfKFNptm.js";import{Y as Ie,ac as Re,s as re,aM as ie,aN as ue,aO as Ve,af as De,an as Je,ax as de}from"./icons-ukMaZ3tx.js";import{l as Pe,F as f,D as m,c as a,x as n,m as C,G as h,q as v,r as k,v as i,J as y,u as b,H as A,L as w,I as u,a as Y}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function N(t){const l=Be(t);if(!l)return null;try{return JSON.parse(l)}catch{}const r=l.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!r)return null;try{return JSON.parse(r[0])}catch{return null}}function S(t,l=0){return typeof t=="number"&&Number.isFinite(t)?t:l}function Ee(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,name:String(t.name||r),symbol:String(t.symbol||""),chainId:S(t.chainId??t.chain_id,0),_idx:l}:null}function Ke(t){const l=N(t);return Array.isArray(l)?l.map(Ee).filter(Boolean):[]}function Ge(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",asset:String(t.asset||"native"),amount:S(t.amount,0),senderAddress:t.senderAddress??t.sender_address??"",recipientAddress:t.recipientAddress??t.recipient_address??"",lockTxHash:t.lockTxHash??t.lock_tx_hash??"",mintTxHash:t.mintTxHash??t.mint_tx_hash??"",status:String(t.status||"pending").toLowerCase(),feeAmount:S(t.feeAmount??t.fee_amount,0),feeChain:t.feeChain??t.fee_chain??"",errorMessage:t.errorMessage??t.error_message??"",createdAt:t.createdAt??t.created_at??null,completedAt:t.completedAt??t.completed_at??null,_idx:l}:null}function We(t){const l=N(t);return Array.isArray(l)?l.map(Ge).filter(Boolean):[]}function Xe(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",fromAsset:t.fromAsset??t.from_asset??"native",toAsset:t.toAsset??t.to_asset??"native",amount:S(t.amount,0),counterpartyAddress:t.counterpartyAddress??t.counterparty_address??"",hashLock:t.hashLock??t.hash_lock??"",expiresAt:t.expiresAt??t.expires_at??null,status:String(t.status||"initiated").toLowerCase(),claimTxHash:t.claimTxHash??t.claim_tx_hash??"",refundTxHash:t.refundTxHash??t.refund_tx_hash??"",createdAt:t.createdAt??t.created_at??null,_idx:l}:null}function Ye(t){const l=N(t);return Array.isArray(l)?l.map(Xe).filter(Boolean):[]}function Qe(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",payload:String(t.payload||""),targetContract:t.targetContract??t.target_contract??"",sourceTxHash:t.sourceTxHash??t.source_tx_hash??"",destinationTxHash:t.destinationTxHash??t.destination_tx_hash??"",status:String(t.status||"pending").toLowerCase(),retries:S(t.retries,0),createdAt:t.createdAt??t.created_at??null,deliveredAt:t.deliveredAt??t.delivered_at??null,_idx:l}:null}function Ze(t){const l=N(t);return Array.isArray(l)?l.map(Qe).filter(Boolean):[]}const et={bridges:{total:0,byStatus:{},totalVolume:0,totalFees:0},swaps:{total:0,byStatus:{}},messages:{total:0,byStatus:{}}};function tt(t){const l=JSON.parse(JSON.stringify(et)),r=N(t);return!r||typeof r!="object"||Array.isArray(r)||(r.bridges&&typeof r.bridges=="object"&&(l.bridges.total=S(r.bridges.total,0),l.bridges.totalVolume=S(r.bridges.totalVolume??r.bridges.total_volume,0),l.bridges.totalFees=S(r.bridges.totalFees??r.bridges.total_fees,0),r.bridges.byStatus&&typeof r.bridges.byStatus=="object"&&(l.bridges.byStatus={...r.bridges.byStatus})),r.swaps&&typeof r.swaps=="object"&&(l.swaps.total=S(r.swaps.total,0),r.swaps.byStatus&&typeof r.swaps.byStatus=="object"&&(l.swaps.byStatus={...r.swaps.byStatus})),r.messages&&typeof r.messages=="object"&&(l.messages.total=S(r.messages.total,0),r.messages.byStatus&&typeof r.messages.byStatus=="object"&&(l.messages.byStatus={...r.messages.byStatus}))),l}function at(t){const l=N(t);return!l||typeof l!="object"||Array.isArray(l)?null:{fee:S(l.fee,0),breakdown:{sourceFee:S(l?.breakdown?.sourceFee??l?.breakdown?.source_fee,0),destFee:S(l?.breakdown?.destFee??l?.breakdown?.dest_fee,0),bridgeFee:S(l?.breakdown?.bridgeFee??l?.breakdown?.bridge_fee,0)},currency:String(l.currency||"USD")}}function pe(t){if(t==null||t==="")return"—";const l=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(l.getTime())?String(t):l.toLocaleString("zh-CN",{hour12:!1})}const ot={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},nt={style:{opacity:"0.7"}},st={key:0,style:{opacity:"0.55","font-size":"10px","margin-left":"4px"}},lt={style:{color:"var(--text-primary)"}},rt={style:{color:"var(--text-primary)"}},it={style:{color:"#722ed1","font-weight":"500"}},ut={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},dt={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},pt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ct={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={style:{color:"var(--text-primary)"}},mt={style:{color:"var(--text-secondary)","font-size":"11px",margin:"0 4px"}},yt={style:{color:"var(--text-primary)"}},vt={style:{color:"var(--text-secondary)","font-size":"11px","margin-left":"4px"}},gt={key:1,style:{color:"#722ed1","font-weight":"500"}},_t={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},bt={key:1,style:{color:"var(--text-muted)"}},ht={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},xt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},kt={style:{color:"var(--text-primary)"}},Ct={style:{color:"var(--text-primary)"}},At={key:1,style:{color:"var(--text-secondary)","font-size":"12px"}},St={key:1,style:{color:"var(--text-muted)"}},zt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Tt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ft={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Ut={__name:"Crosschain",setup(t){const l=Ne(),r=k(!1),Q=k(!1),Z=k(!1),ee=k(!1),te=k(!1),z=k([]),ce=k([]),fe=k([]),me=k([]),B=k({bridges:{total:0,byStatus:{},totalVolume:0,totalFees:0},swaps:{total:0,byStatus:{}},messages:{total:0,byStatus:{}}}),q=k("bridges"),J=k(!1),P=k(!1),E=k(!1),ae=k(!1),p=Y({fromChain:"",toChain:"",amount:null,asset:"",sender:"",recipient:""}),d=Y({fromChain:"",toChain:"",amount:null,fromAsset:"",toAsset:"",counterparty:"",timeoutMs:null}),g=Y({fromChain:"",toChain:"",payload:"",contract:""}),T=Y({fromChain:"",toChain:"",amount:null}),F=k(null),be=[{title:"路径",key:"route"},{title:"金额",key:"amount",width:"160px"},{title:"费用",key:"fee",width:"100px"},{title:"状态",key:"status",width:"110px"},{title:"创建时间",key:"createdAt",width:"160px"}],he=[{title:"路径",key:"route"},{title:"金额",key:"amount",width:"110px"},{title:"哈希锁",key:"hashLock",width:"160px"},{title:"状态",key:"status",width:"120px"},{title:"过期时间",key:"expiresAt",width:"160px"}],xe=[{title:"路径",key:"route",width:"220px"},{title:"消息",key:"payload"},{title:"重试",key:"retries",width:"80px"},{title:"状态",key:"status",width:"110px"},{title:"创建时间",key:"createdAt",width:"160px"}],ke={ethereum:"blue",polygon:"purple",bsc:"gold",arbitrum:"cyan",solana:"magenta"};function Ce(s){return ke[s]||"default"}function O(s){const o=z.value.find(U=>U.id===s);return o?o.name:s||"—"}function oe(s){return{pending:"待处理",locked:"已锁定",minted:"已铸造",completed:"已完成",refunded:"已退款",failed:"失败",initiated:"已发起",hash_locked:"哈希锁定",claimed:"已领取",expired:"已过期",sent:"已发送",delivered:"已送达"}[s]||s}function Ae(s){return{pending:"default",locked:"processing",minted:"cyan",completed:"green",refunded:"orange",failed:"red"}[s]||"default"}function Se(s){return{initiated:"default",hash_locked:"processing",claimed:"green",refunded:"orange",expired:"red"}[s]||"default"}function ze(s){return{pending:"default",sent:"processing",delivered:"green",failed:"red"}[s]||"default"}function Te(s,o){return s?s.length>o?s.slice(0,o)+"...":s:""}function Fe({key:s}){s==="bridge"?J.value=!0:s==="swap"?P.value=!0:s==="message"&&(E.value=!0)}async function I(){r.value=!0;try{const[s,o,U,R,ne]=await Promise.all([l.execute("crosschain chains --json",8e3).catch(()=>({output:""})),l.execute("crosschain bridges --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain swaps --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain messages --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain stats --json",8e3).catch(()=>({output:""}))]);z.value=Ke(s.output),ce.value=We(o.output),fe.value=Ye(U.output),me.value=Ze(R.output),B.value=tt(ne.output)}catch(s){x.error("加载跨链数据失败: "+(s?.message||s))}finally{r.value=!1}}function K(s){return!s.fromChain||!s.toChain?(x.warning("请选择源链和目标链"),!1):s.fromChain===s.toChain?(x.warning("源链和目标链必须不同"),!1):!0}async function Ue(){if(K(p)){if(!p.amount||p.amount<=0){x.warning("请输入正数金额");return}Q.value=!0;try{const s=[`crosschain bridge ${p.fromChain} ${p.toChain} ${p.amount}`];p.asset.trim()&&s.push(`--asset "${p.asset.trim().replace(/"/g,'\\"')}"`),p.sender.trim()&&s.push(`--sender "${p.sender.trim().replace(/"/g,'\\"')}"`),p.recipient.trim()&&s.push(`--recipient "${p.recipient.trim().replace(/"/g,'\\"')}"`),s.push("--json");const{output:o}=await l.execute(s.join(" "),15e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"bridgeId"/.test(o)){x.error("桥接发起失败: "+o.slice(0,120));return}x.success("桥接已发起"),J.value=!1,ye(),q.value="bridges",await I()}catch(s){x.error("桥接失败: "+(s?.message||s))}finally{Q.value=!1}}}async function we(){if(K(d)){if(!d.amount||d.amount<=0){x.warning("请输入正数金额");return}Z.value=!0;try{const s=[`crosschain swap ${d.fromChain} ${d.toChain} ${d.amount}`];d.fromAsset.trim()&&s.push(`--from-asset "${d.fromAsset.trim().replace(/"/g,'\\"')}"`),d.toAsset.trim()&&s.push(`--to-asset "${d.toAsset.trim().replace(/"/g,'\\"')}"`),d.counterparty.trim()&&s.push(`--counterparty "${d.counterparty.trim().replace(/"/g,'\\"')}"`),d.timeoutMs!=null&&s.push(`--timeout ${d.timeoutMs}`),s.push("--json");const{output:o}=await l.execute(s.join(" "),15e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"swapId"/.test(o)){x.error("原子交换发起失败: "+o.slice(0,120));return}x.success("原子交换已发起"),P.value=!1,ve(),q.value="swaps",await I()}catch(s){x.error("原子交换失败: "+(s?.message||s))}finally{Z.value=!1}}}async function je(){if(K(g)){ee.value=!0;try{const s=[`crosschain send ${g.fromChain} ${g.toChain}`];g.payload.trim()&&s.push(`--payload "${g.payload.trim().replace(/"/g,'\\"')}"`),g.contract.trim()&&s.push(`--contract "${g.contract.trim().replace(/"/g,'\\"')}"`),s.push("--json");const{output:o}=await l.execute(s.join(" "),12e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"messageId"/.test(o)){x.error("消息发送失败: "+o.slice(0,120));return}x.success("消息已发送"),E.value=!1,ge(),q.value="messages",await I()}catch(s){x.error("发送失败: "+(s?.message||s))}finally{ee.value=!1}}}async function $e(){if(K(T)){if(!T.amount||T.amount<=0){x.warning("请输入正数金额");return}te.value=!0,F.value=null;try{const s=`crosschain estimate-fee ${T.fromChain} ${T.toChain} ${T.amount} --json`,{output:o}=await l.execute(s,8e3),U=at(o);if(!U){x.error("费用估算失败: "+o.slice(0,120));return}F.value=U}catch(s){x.error("估算失败: "+(s?.message||s))}finally{te.value=!1}}}function ye(){p.fromChain="",p.toChain="",p.amount=null,p.asset="",p.sender="",p.recipient=""}function ve(){d.fromChain="",d.toChain="",d.amount=null,d.fromAsset="",d.toAsset="",d.counterparty="",d.timeoutMs=null}function ge(){g.fromChain="",g.toChain="",g.payload="",g.contract=""}return Pe(I),(s,o)=>{const U=v("a-button"),R=v("a-menu-item"),ne=v("a-menu"),Le=v("a-dropdown"),_e=v("a-space"),H=v("a-statistic"),L=v("a-card"),V=v("a-col"),Me=v("a-row"),D=v("a-tag"),se=v("a-table"),le=v("a-tab-pane"),Oe=v("a-tabs"),j=v("a-select-option"),$=v("a-select"),_=v("a-form-item"),G=v("a-input-number"),M=v("a-input"),W=v("a-form"),X=v("a-modal"),He=v("a-textarea");return i(),f("div",null,[m("div",ot,[o[32]||(o[32]=m("div",null,[m("h2",{class:"page-title"},"跨链桥"),m("p",{class:"page-sub"},"链间资产桥接 · HTLC 原子交换 · 跨链消息")],-1)),a(_e,null,{default:n(()=>[a(U,{loading:r.value,onClick:I},{icon:n(()=>[a(b(Ie))]),default:n(()=>[o[26]||(o[26]=y(" 刷新 ",-1))]),_:1},8,["loading"]),a(Le,{trigger:["click"]},{overlay:n(()=>[a(ne,{onClick:Fe},{default:n(()=>[a(R,{key:"bridge"},{default:n(()=>[a(b(re)),o[28]||(o[28]=y(" 桥接资产",-1))]),_:1}),a(R,{key:"swap"},{default:n(()=>[a(b(ie)),o[29]||(o[29]=y(" HTLC 原子交换",-1))]),_:1}),a(R,{key:"message"},{default:n(()=>[a(b(ue)),o[30]||(o[30]=y(" 跨链消息",-1))]),_:1})]),_:1})]),default:n(()=>[a(U,{type:"primary"},{icon:n(()=>[a(b(Re))]),default:n(()=>[o[27]||(o[27]=y(" 新建 ▼ ",-1))]),_:1})]),_:1}),a(U,{onClick:o[0]||(o[0]=e=>ae.value=!0)},{icon:n(()=>[a(b(Ve))]),default:n(()=>[o[31]||(o[31]=y(" 费用估算 ",-1))]),_:1})]),_:1})]),a(Me,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[a(V,{xs:12,sm:8,lg:5},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"支持链",value:z.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[a(b(De))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"桥接交易",value:B.value.bridges.total,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:n(()=>[a(b(re))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"原子交换",value:B.value.swaps.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[a(b(ie))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"跨链消息",value:B.value.messages.total,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:n(()=>[a(b(ue))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:24,sm:8,lg:4},{default:n(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(H,{title:"总交易额",value:B.value.bridges.totalVolume,precision:2,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[a(b(Je))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),z.value.length?(i(),C(L,{key:0,title:"支持的区块链",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[a(_e,{size:[12,8],wrap:""},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(D,{key:e.id,color:Ce(e.id)},{default:n(()=>[y(u(e.name)+" ",1),m("span",nt,"("+u(e.symbol)+")",1),e.chainId>0?(i(),f("span",st,"#"+u(e.chainId),1)):h("",!0)]),_:2},1032,["color"]))),128))]),_:1})]),_:1})):h("",!0),a(Oe,{activeKey:q.value,"onUpdate:activeKey":o[1]||(o[1]=e=>q.value=e),class:"xchain-tabs"},{default:n(()=>[a(le,{key:"bridges",tab:"桥接交易"},{default:n(()=>[a(se,{columns:be,"data-source":ce.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",lt,u(O(c.fromChain)),1),a(b(de),{style:{margin:"0 6px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",rt,u(O(c.toChain)),1)],64)):h("",!0),e.key==="amount"?(i(),f(A,{key:1},[m("span",it,u(c.amount),1),m("span",ut,u(c.asset),1)],64)):h("",!0),e.key==="fee"?(i(),f("span",dt,u(c.feeAmount),1)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:Ae(c.status)},{default:n(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="createdAt"?(i(),f("span",pt,u(b(pe)(c.createdAt)),1)):h("",!0)]),emptyText:n(()=>[m("div",ct,[a(b(re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[33]||(o[33]=y(' 暂无桥接交易,点"新建 → 桥接资产"发起 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),a(le,{key:"swaps",tab:"原子交换"},{default:n(()=>[a(se,{columns:he,"data-source":fe.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",ft,u(O(c.fromChain)),1),m("span",mt,"("+u(c.fromAsset)+")",1),a(b(de),{style:{margin:"0 4px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",yt,u(O(c.toChain)),1),m("span",vt,"("+u(c.toAsset)+")",1)],64)):h("",!0),e.key==="amount"?(i(),f("span",gt,u(c.amount),1)):h("",!0),e.key==="hashLock"?(i(),f(A,{key:2},[c.hashLock?(i(),f("span",_t,u(c.hashLock.slice(0,14))+"... ",1)):(i(),f("span",bt,"—"))],64)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:Se(c.status)},{default:n(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="expiresAt"?(i(),f("span",ht,u(b(pe)(c.expiresAt)),1)):h("",!0)]),emptyText:n(()=>[m("div",xt,[a(b(ie),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[34]||(o[34]=y(' 暂无原子交换,点"新建 → HTLC 原子交换"发起 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),a(le,{key:"messages",tab:"跨链消息"},{default:n(()=>[a(se,{columns:xe,"data-source":me.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",kt,u(O(c.fromChain)),1),a(b(de),{style:{margin:"0 6px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",Ct,u(O(c.toChain)),1)],64)):h("",!0),e.key==="payload"?(i(),f("span",At,u(Te(c.payload,60)||"—"),1)):h("",!0),e.key==="retries"?(i(),f(A,{key:2},[c.retries>0?(i(),C(D,{key:0,color:"orange",style:{"font-size":"11px"}},{default:n(()=>[y(u(c.retries)+" 次",1)]),_:2},1024)):(i(),f("span",St,"—"))],64)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:ze(c.status)},{default:n(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="createdAt"?(i(),f("span",zt,u(b(pe)(c.createdAt)),1)):h("",!0)]),emptyText:n(()=>[m("div",Tt,[a(b(ue),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[35]||(o[35]=y(' 暂无跨链消息,点"新建 → 跨链消息"发送 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),a(X,{open:J.value,"onUpdate:open":o[8]||(o[8]=e=>J.value=e),title:"桥接资产","confirm-loading":Q.value,width:540,"ok-text":"发起桥接","cancel-text":"取消",onOk:Ue,onCancel:ye},{default:n(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(_,{label:"源链",required:""},{default:n(()=>[a($,{value:p.fromChain,"onUpdate:value":o[2]||(o[2]=e=>p.fromChain=e),placeholder:"选择源链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:n(()=>[a($,{value:p.toChain,"onUpdate:value":o[3]||(o[3]=e=>p.toChain=e),placeholder:"选择目标链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===p.fromChain},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:n(()=>[a(G,{value:p.amount,"onUpdate:value":o[4]||(o[4]=e=>p.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1}),a(_,{label:"资产"},{default:n(()=>[a(M,{value:p.asset,"onUpdate:value":o[5]||(o[5]=e=>p.asset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"发送方"},{default:n(()=>[a(M,{value:p.sender,"onUpdate:value":o[6]||(o[6]=e=>p.sender=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1}),a(_,{label:"接收方"},{default:n(()=>[a(M,{value:p.recipient,"onUpdate:value":o[7]||(o[7]=e=>p.recipient=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:P.value,"onUpdate:open":o[16]||(o[16]=e=>P.value=e),title:"HTLC 原子交换","confirm-loading":Z.value,width:540,"ok-text":"发起交换","cancel-text":"取消",onOk:we,onCancel:ve},{default:n(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(_,{label:"源链",required:""},{default:n(()=>[a($,{value:d.fromChain,"onUpdate:value":o[9]||(o[9]=e=>d.fromChain=e),placeholder:"选择源链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:n(()=>[a($,{value:d.toChain,"onUpdate:value":o[10]||(o[10]=e=>d.toChain=e),placeholder:"选择目标链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===d.fromChain},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:n(()=>[a(G,{value:d.amount,"onUpdate:value":o[11]||(o[11]=e=>d.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1}),a(_,{label:"源资产"},{default:n(()=>[a(M,{value:d.fromAsset,"onUpdate:value":o[12]||(o[12]=e=>d.fromAsset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"目标资产"},{default:n(()=>[a(M,{value:d.toAsset,"onUpdate:value":o[13]||(o[13]=e=>d.toAsset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"对手方"},{default:n(()=>[a(M,{value:d.counterparty,"onUpdate:value":o[14]||(o[14]=e=>d.counterparty=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1}),a(_,{label:"超时 (ms)"},{default:n(()=>[a(G,{value:d.timeoutMs,"onUpdate:value":o[15]||(o[15]=e=>d.timeoutMs=e),min:0,placeholder:"默认 24h",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:E.value,"onUpdate:open":o[21]||(o[21]=e=>E.value=e),title:"发送跨链消息","confirm-loading":ee.value,width:520,"ok-text":"发送","cancel-text":"取消",onOk:je,onCancel:ge},{default:n(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(_,{label:"源链",required:""},{default:n(()=>[a($,{value:g.fromChain,"onUpdate:value":o[17]||(o[17]=e=>g.fromChain=e),placeholder:"选择源链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:n(()=>[a($,{value:g.toChain,"onUpdate:value":o[18]||(o[18]=e=>g.toChain=e),placeholder:"选择目标链"},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===g.fromChain},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"消息"},{default:n(()=>[a(He,{value:g.payload,"onUpdate:value":o[19]||(o[19]=e=>g.payload=e),"auto-size":{minRows:3,maxRows:8}},null,8,["value"])]),_:1}),a(_,{label:"目标合约"},{default:n(()=>[a(M,{value:g.contract,"onUpdate:value":o[20]||(o[20]=e=>g.contract=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:ae.value,"onUpdate:open":o[25]||(o[25]=e=>ae.value=e),title:"费用估算","confirm-loading":te.value,width:480,"ok-text":"估算","cancel-text":"关闭",onOk:$e},{default:n(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(_,{label:"源链",required:""},{default:n(()=>[a($,{value:T.fromChain,"onUpdate:value":o[22]||(o[22]=e=>T.fromChain=e)},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:n(()=>[a($,{value:T.toChain,"onUpdate:value":o[23]||(o[23]=e=>T.toChain=e)},{default:n(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===T.fromChain},{default:n(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:n(()=>[a(G,{value:T.amount,"onUpdate:value":o[24]||(o[24]=e=>T.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),F.value?(i(),C(L,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:n(()=>[a(H,{title:"预估费用",value:F.value.fee,precision:4,suffix:F.value.currency,"value-style":{color:"#1677ff"}},null,8,["value","suffix"]),m("div",Ft,[m("div",null,"源链费: "+u(F.value.breakdown.sourceFee)+" "+u(F.value.currency),1),m("div",null,"目标链费: "+u(F.value.breakdown.destFee)+" "+u(F.value.currency),1),m("div",null,"桥接费: "+u(F.value.breakdown.bridgeFee)+" "+u(F.value.currency),1)])]),_:1})):h("",!0)]),_:1},8,["open","confirm-loading"])])}}},Vt=qe(Ut,[["__scopeId","data-v-04225cba"]]);export{Vt as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as ge}from"./ws-Bv7YH0VB.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as f}from"./index-
|
|
1
|
+
import{u as ge}from"./ws-Bv7YH0VB.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as f}from"./index-BfKFNptm.js";import{Y as be,ac as ke,I as De,Q as he,ag as Z,q as we,a as Ie}from"./icons-ukMaZ3tx.js";import{l as ze,F as I,D as b,c as t,x as a,m as $,G as k,q as r,r as c,v,J as p,u as z,I as g,j as X}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function G(n){if(!n)return null;const o=n.trim();try{return JSON.parse(o)}catch{const u=o.match(/(\[[\s\S]*\]|\{[\s\S]*\})/);if(!u)return null;try{return JSON.parse(u[1])}catch{return null}}}function E(n,o=0){if(!n||typeof n!="object")return null;const u=n.did||n.id||"";if(!u)return null;const d=n.displayName??n.display_name??n.name??"",C=n.isDefault===!0||n.is_default===1||n.is_default===!0||n.default===!0,m=n.publicKey??n.public_key??"",h=n.createdAt??n.created_at??n.created??"",x=(u.split(":")[1]||"chainless").trim();return{key:u,did:u,displayName:d||"",publicKey:m||"",isDefault:!!C,createdAt:h||"",method:x,raw:n.document?n:null,_idx:o}}function Ce(n){const o=G(n);return Array.isArray(o)?o.map(E).filter(Boolean):o&&Array.isArray(o.identities)?o.identities.map(E).filter(Boolean):Se(n||"")}function Se(n){const o=(n||"").split(`
|
|
2
2
|
`),u=[];let d=null;for(const C of o){const m=C.trim();if(!m||m.startsWith("─")||m.startsWith("="))continue;const h=m.match(/(did:[a-z0-9]+:[A-Za-z0-9_-]+)/);if(h&&/^did:/.test(m)){d&&u.push(d);const x=h[1],S=m.match(/\(([^)]+)\)/),D=/\[default\]|默认|\*/.test(m);d={key:x,did:x,displayName:S?S[1]:"",publicKey:"",isDefault:D,createdAt:"",method:(x.split(":")[1]||"chainless").trim(),raw:null,_idx:u.length};continue}if(d){const x=m.match(/created\s*[::]\s*(.+)$/i);x&&(d.createdAt=x[1].trim())}}return d&&u.push(d),u}function Ne(n){const o=G(n);if(!o||typeof o!="object"||Array.isArray(o))return null;const u=E(o);return u?(u.document=o.document||null,u):null}function $e(n){const o=G(n);if(o&&typeof o=="object"&&o.signature)return{did:o.did||"",message:o.message||"",signature:String(o.signature)};const d=(n||"").match(/Signature[::]\s*([a-f0-9]+)/i);return d?{did:"",message:"",signature:d[1]}:null}const Ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Oe={key:1,style:{"text-align":"center",padding:"60px"}},je={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Me={key:1,style:{color:"var(--text-primary)"}},Te={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},Be={key:0,style:{"margin-top":"12px"}},Ke={style:{"font-family":"monospace",color:"#ccc","word-break":"break-all"}},Pe={style:{"font-family":"monospace",color:"#888","font-size":"11px","word-break":"break-all"}},Je={style:{"margin-top":"16px",display:"flex",gap:"8px","flex-wrap":"wrap"}},Ue={key:0,style:{"margin-top":"16px"}},Fe={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)","max-height":"320px",overflow:"auto"}},Re={key:0,style:{"margin-top":"12px"}},We={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Le={__name:"DID",setup(n){const o=ge(),u=c(!1),d=c(!1),C=c(!1),m=c(!1),h=c(""),x=c(""),S=c(!1),D=c([]),T=c(!1),F=c(!1),R=c(!1),B=c(""),y=c(null),A=c(""),W=c(""),O=c(""),j=c(null),ee=[{title:"DID",key:"did",dataIndex:"did",ellipsis:!0},{title:"名称",key:"displayName",dataIndex:"displayName",width:"160px"},{title:"方法",key:"method",dataIndex:"method",width:"110px"},{title:"创建时间",key:"createdAt",dataIndex:"createdAt",width:"180px"},{title:"默认",key:"isDefault",width:"90px"},{title:"操作",key:"action",width:"280px"}],Q=X(()=>{const l=D.value.find(s=>s.isDefault);if(!l)return"未设置";const e=l.did;return e.length>24?e.slice(0,12)+"..."+e.slice(-8):e}),te=X(()=>{const l=new Set(D.value.map(e=>e.method).filter(Boolean));return l.size===0?"无":l.size===1?[...l][0]:[...l].join(", ")});async function M(){d.value=!0;try{const{output:l}=await o.execute("did list --json",15e3);D.value=Ce(l)}catch(l){f.error("加载 DID 列表失败: "+l.message),D.value=[]}finally{d.value=!1}}async function ae(){C.value=!0;try{const l=B.value.trim(),e=l?`did create --name "${l.replace(/"/g,'\\"')}" --json`:"did create --json",{output:s}=await o.execute(e,2e4);/error|失败/i.test(s)&&!s.includes('"did"')?f.error("创建失败: "+s.slice(0,120)):(f.success("DID 身份已创建"),T.value=!1,B.value="",await M())}catch(l){f.error("创建失败: "+l.message)}finally{C.value=!1}}async function le(l){h.value=l.did;try{const{output:e,exitCode:s}=await o.execute(`did set-default ${l.did}`,15e3);s!==0||/error|not found|失败/i.test(e)?f.error("设置失败: "+e.slice(0,120)):(f.success("已设为默认身份"),await M())}catch(e){f.error("设置失败: "+e.message)}finally{h.value=""}}async function oe(l){x.value=l.did;try{const{output:e,exitCode:s}=await o.execute(`did delete ${l.did} --force`,15e3);s!==0||/error|not found|失败/i.test(e)?f.error("删除失败: "+e.slice(0,120)):(f.success("身份已删除"),await M())}catch(e){f.error("删除失败: "+e.message)}finally{x.value=""}}async function ne(l){if(y.value={...l},A.value="",F.value=!0,!l.publicKey)try{const{output:e}=await o.execute(`did show ${l.did} --json`,1e4),s=Ne(e);s&&(y.value={...y.value,...s})}catch{}}async function se(l){S.value=!0;try{const{output:e}=await o.execute(`did resolve ${l.did}`,1e4);try{A.value=JSON.stringify(JSON.parse(e.trim()),null,2)}catch{A.value=e.trim()}}catch(e){f.error("加载 DID Document 失败: "+e.message)}finally{S.value=!1}}function ie(l){W.value=l.did,O.value="",j.value=null,R.value=!0}async function re(){if(!O.value.trim()){f.warning("请输入要签名的消息");return}m.value=!0,j.value=null;try{const e=`did sign "${O.value.replace(/"/g,'\\"')}" --did ${W.value} --json`,{output:s,exitCode:K}=await o.execute(e,15e3),w=$e(s);w&&w.signature?(j.value=w,f.success("签名成功")):f.error("签名失败: "+(s||`exit ${K}`).slice(0,120))}catch(l){f.error("签名失败: "+l.message)}finally{m.value=!1}}return ze(()=>{M()}),(l,e)=>{const s=r("a-button"),K=r("a-space"),w=r("a-statistic"),P=r("a-card"),J=r("a-col"),ue=r("a-row"),de=r("a-alert"),ce=r("a-spin"),U=r("a-tag"),pe=r("a-popconfirm"),fe=r("a-empty"),me=r("a-table"),ye=r("a-input"),L=r("a-form-item"),V=r("a-tooltip"),Y=r("a-form"),q=r("a-modal"),N=r("a-descriptions-item"),ve=r("a-descriptions"),_e=r("a-textarea");return v(),I("div",null,[b("div",Ae,[e[9]||(e[9]=b("div",null,[b("h2",{class:"page-title"},"DID 身份管理"),b("p",{class:"page-sub"},"去中心化身份 / 密钥 / 签名验证")],-1)),t(K,null,{default:a(()=>[t(s,{loading:d.value,onClick:M},{icon:a(()=>[t(z(be))]),default:a(()=>[e[7]||(e[7]=p(" 刷新 ",-1))]),_:1},8,["loading"]),t(s,{type:"primary",onClick:e[0]||(e[0]=i=>T.value=!0)},{icon:a(()=>[t(z(ke))]),default:a(()=>[e[8]||(e[8]=p(" 创建身份 ",-1))]),_:1})]),_:1})]),t(ue,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(J,{xs:24,sm:12,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(w,{title:"身份数量",value:D.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(z(De))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:24,sm:12,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(w,{title:"默认身份",value:Q.value,"value-style":{color:Q.value!=="未设置"?"#52c41a":"#888",fontSize:"13px",fontFamily:"monospace"}},null,8,["value","value-style"])]),_:1})]),_:1}),t(J,{xs:24,sm:12,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(w,{title:"DID 方法",value:te.value,"value-style":{color:"#722ed1",fontSize:"14px"}},null,8,["value"])]),_:1})]),_:1}),t(J,{xs:24,sm:12,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(w,{title:"可签名",value:D.value.length>0?"是":"否","value-style":{color:D.value.length>0?"#52c41a":"#ff4d4f",fontSize:"20px"}},{prefix:a(()=>[t(z(he))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),u.value?k("",!0):(v(),$(de,{key:0,message:"仅 Web 模式",description:"助记词备份/恢复 与 DHT 网络发布 仅在桌面端可用,本页面禁用相关按钮。所有创建/签名/删除操作通过 CLI 转发执行。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}})),d.value?(v(),I("div",Oe,[t(ce,{size:"large"})])):(v(),$(me,{key:2,columns:ee,"data-source":D.value,pagination:{pageSize:20,showTotal:i=>`共 ${i} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"did-row"},{bodyCell:a(({column:i,record:_})=>[i.key==="did"?(v(),I("span",je,g(_.did),1)):k("",!0),i.key==="displayName"?(v(),I("span",Me,g(_.displayName||"-"),1)):k("",!0),i.key==="method"?(v(),$(U,{key:2,color:"blue"},{default:a(()=>[p(g(_.method),1)]),_:2},1024)):k("",!0),i.key==="createdAt"?(v(),I("span",Te,g(_.createdAt||"-"),1)):k("",!0),i.key==="isDefault"?(v(),$(U,{key:4,color:_.isDefault?"green":"default"},{default:a(()=>[p(g(_.isDefault?"默认":"-"),1)]),_:2},1032,["color"])):k("",!0),i.key==="action"?(v(),$(K,{key:5,size:"small"},{default:a(()=>[t(s,{size:"small",type:"link",onClick:H=>ne(_)},{default:a(()=>[...e[10]||(e[10]=[p(" 详情 ",-1)])]),_:1},8,["onClick"]),t(s,{size:"small",type:"link",onClick:H=>ie(_)},{default:a(()=>[...e[11]||(e[11]=[p(" 签名 ",-1)])]),_:1},8,["onClick"]),_.isDefault?k("",!0):(v(),$(s,{key:0,size:"small",type:"link",loading:h.value===_.did,onClick:H=>le(_)},{default:a(()=>[...e[12]||(e[12]=[p(" 设为默认 ",-1)])]),_:1},8,["loading","onClick"])),t(pe,{title:"确定删除该 DID 身份吗?删除后私钥将无法找回。","ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:H=>oe(_)},{default:a(()=>[t(s,{size:"small",type:"link",danger:"",loading:x.value===_.did},{default:a(()=>[...e[13]||(e[13]=[p(" 删除 ",-1)])]),_:1},8,["loading"])]),_:2},1032,["onConfirm"])]),_:2},1024)):k("",!0)]),emptyText:a(()=>[t(fe,{description:"暂无 DID 身份,点击「创建身份」添加"})]),_:1},8,["data-source","pagination"])),t(q,{open:T.value,"onUpdate:open":e[2]||(e[2]=i=>T.value=i),title:"创建 DID 身份","confirm-loading":C.value,onOk:ae,"ok-text":"创建","cancel-text":"取消"},{default:a(()=>[t(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:a(()=>[t(L,{label:"显示名称"},{default:a(()=>[t(ye,{value:B.value,"onUpdate:value":e[1]||(e[1]=i=>B.value=i),placeholder:"可选 — 用于识别身份","allow-clear":""},null,8,["value"])]),_:1}),t(L,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(V,{title:"桌面应用专属:BIP39 助记词派生密钥"},{default:a(()=>[t(s,{disabled:"",style:{"margin-right":"8px"}},{icon:a(()=>[t(z(Z))]),default:a(()=>[e[14]||(e[14]=p(" 从助记词导入 ",-1))]),_:1})]),_:1}),e[15]||(e[15]=b("span",{style:{color:"var(--text-muted)","font-size":"11px"}},"需桌面端",-1))]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(q,{open:F.value,"onUpdate:open":e[4]||(e[4]=i=>F.value=i),title:`身份详情:${y.value?.displayName||y.value?.did?.slice(0,24)||""}`,width:720,footer:null},{default:a(()=>[y.value?(v(),I("div",Be,[t(ve,{column:1,bordered:"",size:"small"},{default:a(()=>[t(N,{label:"DID"},{default:a(()=>[b("span",Ke,g(y.value.did),1)]),_:1}),t(N,{label:"名称"},{default:a(()=>[p(g(y.value.displayName||"-"),1)]),_:1}),t(N,{label:"方法"},{default:a(()=>[t(U,{color:"blue"},{default:a(()=>[p(g(y.value.method),1)]),_:1})]),_:1}),t(N,{label:"默认"},{default:a(()=>[t(U,{color:y.value.isDefault?"green":"default"},{default:a(()=>[p(g(y.value.isDefault?"是":"否"),1)]),_:1},8,["color"])]),_:1}),t(N,{label:"创建时间"},{default:a(()=>[p(g(y.value.createdAt||"-"),1)]),_:1}),t(N,{label:"公钥(hex)"},{default:a(()=>[b("span",Pe,g(y.value.publicKey||"加载中..."),1)]),_:1})]),_:1}),b("div",Je,[t(V,{title:"桌面应用专属:导出 BIP39 助记词以备份"},{default:a(()=>[t(s,{disabled:""},{icon:a(()=>[t(z(Z))]),default:a(()=>[e[16]||(e[16]=p(" 导出助记词 ",-1))]),_:1})]),_:1}),t(V,{title:"桌面应用专属:发布到 P2P DHT 网络以供他人解析"},{default:a(()=>[t(s,{disabled:""},{icon:a(()=>[t(z(we))]),default:a(()=>[e[17]||(e[17]=p(" 发布到 DHT ",-1))]),_:1})]),_:1}),t(s,{loading:S.value,onClick:e[3]||(e[3]=i=>se(y.value))},{icon:a(()=>[t(z(Ie))]),default:a(()=>[e[18]||(e[18]=p(" 查看 DID Document ",-1))]),_:1},8,["loading"])]),A.value?(v(),I("div",Ue,[e[19]||(e[19]=b("p",{style:{color:"var(--text-secondary)","margin-bottom":"6px"}},"DID Document (W3C):",-1)),b("pre",Fe,g(A.value),1)])):k("",!0)])):k("",!0)]),_:1},8,["open","title"]),t(q,{open:R.value,"onUpdate:open":e[6]||(e[6]=i=>R.value=i),title:`签名消息:${W.value?.slice(0,28)||"默认身份"}...`,"confirm-loading":m.value,onOk:re,"ok-text":"签名","cancel-text":"取消"},{default:a(()=>[t(Y,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[t(L,{label:"消息",required:""},{default:a(()=>[t(_e,{value:O.value,"onUpdate:value":e[5]||(e[5]=i=>O.value=i),placeholder:"请输入要签名的消息","auto-size":{minRows:3,maxRows:8}},null,8,["value"])]),_:1})]),_:1}),j.value?(v(),I("div",Re,[e[20]||(e[20]=b("p",{style:{color:"var(--text-secondary)","margin-bottom":"6px"}},"签名结果(hex):",-1)),b("pre",We,g(j.value.signature),1)])):k("",!0)]),_:1},8,["open","title","confirm-loading"])])}}},at=xe(Le,[["__scopeId","data-v-f2137559"]]);export{at as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as m,c as V,J as B}from"./useConfigInject-
|
|
1
|
+
import{_ as m,c as V,J as B}from"./useConfigInject-DCcT0grw.js";import{P as n}from"./index-U4Zd5IK6.js";import{T as D}from"./Trigger-BenSsaoN.js";import{c as g}from"./vnode-Dexy2NN9.js";import{d as M,r as v,w as L,c as d,H as W,j as y}from"./vendor-BVetwVfk.js";const l={adjustX:1,adjustY:1},s=[0,0],$={topLeft:{points:["bl","tl"],overflow:l,offset:[0,-4],targetOffset:s},topCenter:{points:["bc","tc"],overflow:l,offset:[0,-4],targetOffset:s},topRight:{points:["br","tr"],overflow:l,offset:[0,-4],targetOffset:s},bottomLeft:{points:["tl","bl"],overflow:l,offset:[0,4],targetOffset:s},bottomCenter:{points:["tc","bc"],overflow:l,offset:[0,4],targetOffset:s},bottomRight:{points:["tr","br"],overflow:l,offset:[0,4],targetOffset:s}};var F=function(e,c){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&c.indexOf(o)<0&&(r[o]=e[o]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(e);a<o.length;a++)c.indexOf(o[a])<0&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};const X=M({compatConfig:{MODE:3},props:{minOverlayWidthMatchTrigger:{type:Boolean,default:void 0},arrow:{type:Boolean,default:!1},prefixCls:n.string.def("rc-dropdown"),transitionName:String,overlayClassName:n.string.def(""),openClassName:String,animation:n.any,align:n.object,overlayStyle:{type:Object,default:void 0},placement:n.string.def("bottomLeft"),overlay:n.any,trigger:n.oneOfType([n.string,n.arrayOf(n.string)]).def("hover"),alignPoint:{type:Boolean,default:void 0},showAction:n.array,hideAction:n.array,getPopupContainer:Function,visible:{type:Boolean,default:void 0},defaultVisible:{type:Boolean,default:!1},mouseEnterDelay:n.number.def(.15),mouseLeaveDelay:n.number.def(.1)},emits:["visibleChange","overlayClick"],setup(e,c){let{slots:r,emit:o,expose:a}=c;const f=v(!!e.visible);L(()=>e.visible,t=>{t!==void 0&&(f.value=t)});const p=v();a({triggerRef:p});const b=t=>{e.visible===void 0&&(f.value=!1),o("overlayClick",t)},h=t=>{e.visible===void 0&&(f.value=t),o("visibleChange",t)},C=()=>{var t;const i=(t=r.overlay)===null||t===void 0?void 0:t.call(r),u={prefixCls:`${e.prefixCls}-menu`,onClick:b};return d(W,{key:B},[e.arrow&&d("div",{class:`${e.prefixCls}-arrow`},null),g(i,u,!1)])},w=y(()=>{const{minOverlayWidthMatchTrigger:t=!e.alignPoint}=e;return t}),O=()=>{var t;const i=(t=r.default)===null||t===void 0?void 0:t.call(r);return f.value&&i?g(i[0],{class:e.openClassName||`${e.prefixCls}-open`},!1):i},P=y(()=>!e.hideAction&&e.trigger.indexOf("contextmenu")!==-1?["click"]:e.hideAction);return()=>{const{prefixCls:t,arrow:i,showAction:u,overlayStyle:x,trigger:A,placement:N,align:j,getPopupContainer:S,transitionName:T,animation:_,overlayClassName:k}=e,E=F(e,["prefixCls","arrow","showAction","overlayStyle","trigger","placement","align","getPopupContainer","transitionName","animation","overlayClassName"]);return d(D,m(m({},E),{},{prefixCls:t,ref:p,popupClassName:V(k,{[`${t}-show-arrow`]:i}),popupStyle:x,builtinPlacements:$,action:A,showAction:u,hideAction:P.value||[],popupPlacement:N,popupAlign:j,popupTransitionName:T,popupAnimation:_,popupVisible:f.value,stretch:w.value?"minWidth":"",onPopupVisibleChange:h,getPopupContainer:S}),{popup:C,default:O})}}});export{X as D};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as Ze}from"./ws-Bv7YH0VB.js";import{s as et}from"./community-parser-CO25nZFt.js";import{_ as tt}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as m}from"./index-BbqCdQXU.js";import{Y as ot,ac as at,u as nt,at as lt,c as st,aD as it,aa as rt,S as ut}from"./icons-ukMaZ3tx.js";import{E as ct}from"./useConfigInject-BKqJUQaF.js";import{l as dt,F as I,D as A,c as o,x as a,q as f,r as x,v as c,J as p,u as h,I as d,H as E,L,m as T,G as H,j as se,a as ke}from"./vendor-BVetwVfk.js";import"./index-ZZ_4A9um.js";import"./transition-CGYDOK3N.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function z(l){const t=et(l);if(!t)return null;try{return JSON.parse(t)}catch{}const i=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const je=Object.freeze(["closed","open","half_open"]),he=Object.freeze(["healthy","degraded","unhealthy","unknown"]),ze=Object.freeze(["heartbeat","latency","success_rate","cpu_usage","memory_usage"]);function k(l,t=0){return typeof l=="number"&&Number.isFinite(l)?l:t}function pt(l,t=0){if(!l||typeof l!="object")return null;const i=l.node_id??l.nodeId??"";if(!i)return null;const v=String(l.state||"closed").toLowerCase();return{key:i,nodeId:i,state:v,failureCount:k(l.failure_count??l.failureCount,0),successCount:k(l.success_count??l.successCount,0),failureThreshold:k(l.failure_threshold??l.failureThreshold,0),successThreshold:k(l.success_threshold??l.successThreshold,0),openTimeout:k(l.open_timeout??l.openTimeout,0),lastFailureTime:l.last_failure_time??l.lastFailureTime??null,lastSuccessTime:l.last_success_time??l.lastSuccessTime??null,stateChangedAt:l.state_changed_at??l.stateChangedAt??null,metadata:l.metadata??null,createdAt:l.created_at??l.createdAt??null,updatedAt:l.updated_at??l.updatedAt??null,_idx:t}}function ft(l){const t=z(l);return Array.isArray(t)?t.map(pt).filter(Boolean):[]}function yt(l,t=0){if(!l||typeof l!="object")return null;const i=l.check_id??l.checkId??"";return i?{key:i,checkId:i,nodeId:l.node_id??l.nodeId??"",checkType:String(l.check_type??l.checkType??"").toLowerCase(),status:String(l.status||"unknown").toLowerCase(),metrics:l.metrics??null,checkedAt:l.checked_at??l.checkedAt??null,_idx:t}:null}function mt(l){const t=z(l);return Array.isArray(t)?t.map(yt).filter(Boolean):[]}function kt(l,t=0){if(!l||typeof l!="object")return null;const i=l.nodeId??l.node_id??"";return i?{key:i,nodeId:i,minConnections:k(l.minConnections,0),maxConnections:k(l.maxConnections,0),idleTimeout:k(l.idleTimeout,0),activeConnections:k(l.activeConnections,0),idleConnections:k(l.idleConnections,0),totalCreated:k(l.totalCreated,0),totalDestroyed:k(l.totalDestroyed,0),waitingRequests:k(l.waitingRequests,0),createdAt:l.createdAt??null,_idx:t}:null}function vt(l){const t=z(l);return Array.isArray(t)?t.map(kt).filter(Boolean):[]}function ht(l){const t=z(l);if(!t||typeof t!="object"||Array.isArray(t))return{nodeId:"",status:"unknown",checks:0,latestChecks:[]};const v=(Array.isArray(t.latestChecks)?t.latestChecks:[]).filter(y=>y&&typeof y=="object").map(y=>({checkType:String(y.checkType??y.check_type??"").toLowerCase(),status:String(y.status||"unknown").toLowerCase(),checkedAt:y.checkedAt??y.checked_at??null}));return{nodeId:t.nodeId??t.node_id??"",status:String(t.status||"unknown").toLowerCase(),checks:k(t.checks,0),latestChecks:v}}function ve(l){const t=z(l);if(!t||typeof t!="object"||Array.isArray(t))return{ok:!1,id:null,reason:""};const i=!!(t.registered||t.recorded||t.initialized),v=t.nodeId??t.checkId??null;return{ok:i,id:v?String(v):null,reason:t.reason?String(t.reason):""}}function _t(l){const t=z(l);return!t||typeof t!="object"||Array.isArray(t)?{ok:!1,state:"",previousState:"",failureCount:0,successCount:0,remainingMs:0,reason:""}:{ok:!!(t.updated||t.reset),state:String(t.state||""),previousState:String(t.previousState||""),failureCount:k(t.failureCount,0),successCount:k(t.successCount,0),remainingMs:k(t.remainingMs,0),reason:t.reason?String(t.reason):""}}function gt(l){const t=z(l);return!t||typeof t!="object"||Array.isArray(t)?{ok:!1,active:0,idle:0,waiting:0,reason:""}:{ok:!!(t.acquired||t.released||t.destroyed),active:k(t.active,0),idle:k(t.idle,0),waiting:k(t.waiting,0),reason:t.reason?String(t.reason):""}}function bt(l){const t=z(l);return!t||typeof t!="object"||Array.isArray(t)?{ok:!1,reason:""}:{ok:!!t.removed,reason:t.reason?String(t.reason):""}}const Ct={circuitBreakers:{total:0,byState:{}},healthChecks:{total:0,byStatus:{}},connectionPools:{total:0,totalActive:0,totalIdle:0,totalConnections:0}};function xt(l){const t=JSON.parse(JSON.stringify(Ct));for(const v of je)t.circuitBreakers.byState[v]=0;for(const v of he)t.healthChecks.byStatus[v]=0;const i=z(l);if(!i||typeof i!="object"||Array.isArray(i))return t;if(i.circuitBreakers&&typeof i.circuitBreakers=="object"&&(t.circuitBreakers.total=k(i.circuitBreakers.total,0),i.circuitBreakers.byState&&typeof i.circuitBreakers.byState=="object"))for(const[v,y]of Object.entries(i.circuitBreakers.byState))typeof y=="number"&&Number.isFinite(y)&&(t.circuitBreakers.byState[v]=y);if(i.healthChecks&&typeof i.healthChecks=="object"&&(t.healthChecks.total=k(i.healthChecks.total,0),i.healthChecks.byStatus&&typeof i.healthChecks.byStatus=="object"))for(const[v,y]of Object.entries(i.healthChecks.byStatus))typeof y=="number"&&Number.isFinite(y)&&(t.healthChecks.byStatus[v]=y);return i.connectionPools&&typeof i.connectionPools=="object"&&(t.connectionPools.total=k(i.connectionPools.total,0),t.connectionPools.totalActive=k(i.connectionPools.totalActive,0),t.connectionPools.totalIdle=k(i.connectionPools.totalIdle,0),t.connectionPools.totalConnections=k(i.connectionPools.totalConnections,0)),t}function ie(l){if(l==null||l==="")return"—";const t=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(t.getTime())?String(l):t.toLocaleString("zh-CN",{hour12:!1})}const Tt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},St={class:"stat-sub"},It={class:"stat-sub"},At={class:"stat-sub"},wt={class:"stat-sub"},$t={class:"filter-bar"},zt={key:1},jt={key:2},Bt={key:3,class:"muted"},Pt={class:"filter-bar"},Ut={key:0,style:{"font-family":"monospace","font-size":"12px"}},Rt={key:3,class:"muted",style:{"font-family":"monospace","font-size":"11px"}},Ft={key:4,class:"muted"},Ot={key:1,class:"muted"},Nt={style:{"font-family":"monospace"}},Dt={style:{"margin-top":"16px"}},Mt={key:2,class:"muted"},qt={__name:"Federation",setup(l){const t=Ze(),i=ct.PRESENTED_IMAGE_SIMPLE,v=x(!1),y=x(!1),re=x(!1),ue=x([]),_e=x([]),ge=x([]),S=x({circuitBreakers:{total:0,byState:{closed:0,open:0,half_open:0}},healthChecks:{total:0,byStatus:{healthy:0,degraded:0,unhealthy:0,unknown:0}},connectionPools:{total:0,totalActive:0,totalIdle:0,totalConnections:0}}),be=x("breakers"),J=x(""),V=x(""),G=x(""),K=x(!1),W=x(!1),Y=x(!1),_=ke({nodeId:"",failureThreshold:5,successThreshold:2,openTimeout:6e4}),b=ke({nodeId:"",checkType:"heartbeat",status:"healthy",metrics:""}),g=ke({nodeId:"",min:5,max:50,idleTimeout:3e5}),Q=x(""),j=x(null),Be=[{title:"节点",key:"nodeId",dataIndex:"nodeId",width:"200px"},{title:"状态",key:"state",width:"100px"},{title:"失败计数",key:"failure",width:"120px"},{title:"成功计数",key:"success",width:"120px"},{title:"超时 (ms)",key:"openTimeout",dataIndex:"openTimeout",width:"110px"},{title:"更新时间",key:"updatedAt",width:"170px"},{title:"操作",key:"action",width:"340px"}],Pe=[{title:"ID",key:"checkId",width:"130px"},{title:"节点",key:"nodeId",dataIndex:"nodeId",width:"180px"},{title:"指标",key:"checkType",width:"120px"},{title:"状态",key:"status",width:"100px"},{title:"指标值",key:"metrics"},{title:"采集时间",key:"checkedAt",width:"170px"}],Ue=[{title:"节点",key:"nodeId",dataIndex:"nodeId",width:"200px"},{title:"活跃",key:"activeConnections",dataIndex:"activeConnections",width:"90px"},{title:"空闲",key:"idleConnections",dataIndex:"idleConnections",width:"90px"},{title:"上限",key:"maxConnections",dataIndex:"maxConnections",width:"90px"},{title:"使用率",key:"utilization",width:"160px"},{title:"排队中",key:"waitingRequests",dataIndex:"waitingRequests",width:"90px"},{title:"已创建",key:"totalCreated",dataIndex:"totalCreated",width:"90px"},{title:"创建时间",key:"createdAt",width:"170px"},{title:"操作",key:"action",width:"240px"}],Re=[{title:"指标",key:"checkType",width:"160px"},{title:"状态",key:"status",width:"120px"},{title:"采集时间",key:"checkedAt"}],Fe=se(()=>J.value?ue.value.filter(s=>s.state===J.value):ue.value),Oe=se(()=>{let s=_e.value;return V.value&&(s=s.filter(e=>e.checkType===V.value)),G.value&&(s=s.filter(e=>e.status===G.value)),s}),Ce=se(()=>(S.value.circuitBreakers.byState.open||0)+(S.value.circuitBreakers.byState.half_open||0)),xe=se(()=>{const s=S.value.circuitBreakers.total;return s?(S.value.circuitBreakers.byState.closed||0)/s*100:100});function Te(s){return s.maxConnections?Math.round(s.activeConnections/s.maxConnections*100):0}function X(s){return{closed:"闭合",open:"开路",half_open:"半开"}[s]||s}function Ne(s){return{closed:"green",open:"red",half_open:"gold"}[s]||"default"}function Z(s){return{heartbeat:"心跳",latency:"延迟",success_rate:"成功率",cpu_usage:"CPU",memory_usage:"内存"}[s]||s}function D(s){return{healthy:"健康",degraded:"降级",unhealthy:"不可用",unknown:"未知"}[s]||s}function ce(s){return{healthy:"green",degraded:"gold",unhealthy:"red",unknown:"default"}[s]||"default"}function Se(s){return s>=95?"#52c41a":s>=80?"#1677ff":s>=60?"#faad14":"#ff4d4f"}function De(s,e){return s?s.length<=e?s:s.slice(0,e)+"…":""}function B(s){return`"${String(s).replace(/"/g,'\\"')}"`}async function P(){v.value=!0;try{const[s,e,r,$]=await Promise.all([t.execute("federation breakers --limit 200 --json",1e4).catch(()=>({output:""})),t.execute("federation checks --limit 200 --json",1e4).catch(()=>({output:""})),t.execute("federation pools --json",8e3).catch(()=>({output:""})),t.execute("federation stats --json",8e3).catch(()=>({output:""}))]);ue.value=ft(s.output),_e.value=mt(e.output),ge.value=vt(r.output),S.value=xt($.output)}catch(s){m.error("加载数据失败: "+(s?.message||s))}finally{v.value=!1}}async function Me(){if(!_.nodeId.trim()){m.warning("请填写节点 ID");return}y.value=!0;try{const s=[`federation register ${B(_.nodeId.trim())}`];_.failureThreshold&&s.push(`-f ${_.failureThreshold}`),_.successThreshold&&s.push(`-s ${_.successThreshold}`),_.openTimeout&&s.push(`-t ${_.openTimeout}`),s.push("--json");const{output:e}=await t.execute(s.join(" "),1e4),r=ve(e);if(!r.ok){m.error("注册失败: "+(r.reason||e.slice(0,120)));return}m.success(`节点已注册:${r.id}`),K.value=!1,He(),await P()}catch(s){m.error("注册失败: "+(s?.message||s))}finally{y.value=!1}}async function qe(){if(!b.nodeId.trim()){m.warning("请填写节点 ID");return}y.value=!0;try{const s=[`federation check ${B(b.nodeId.trim())}`];s.push(`-t ${b.checkType}`),s.push(`-s ${b.status}`),b.metrics.trim()&&s.push(`-m ${B(b.metrics.trim())}`),s.push("--json");const{output:e}=await t.execute(s.join(" "),1e4),r=ve(e);if(!r.ok){m.error("记录失败: "+(r.reason||e.slice(0,120)));return}m.success(`检查已记录:${r.id?.slice(0,8)}`),W.value=!1,Je(),await P()}catch(s){m.error("记录失败: "+(s?.message||s))}finally{y.value=!1}}async function Ee(){if(!g.nodeId.trim()){m.warning("请填写节点 ID");return}y.value=!0;try{const s=[`federation pool-init ${B(g.nodeId.trim())}`];g.min&&s.push(`--min ${g.min}`),g.max&&s.push(`--max ${g.max}`),g.idleTimeout&&s.push(`--idle-timeout ${g.idleTimeout}`),s.push("--json");const{output:e}=await t.execute(s.join(" "),1e4),r=ve(e);if(!r.ok){m.error("创建失败: "+(r.reason||e.slice(0,120)));return}m.success(`连接池已创建:${r.id}`),Y.value=!1,Ve(),await P()}catch(s){m.error("创建失败: "+(s?.message||s))}finally{y.value=!1}}async function ee(s,e){try{const r=`federation ${e} ${B(s.nodeId)} --json`,{output:$}=await t.execute(r,8e3),C=_t($);if(!C.ok){m.warning((C.reason||"操作未生效")+(C.remainingMs?` (还需 ${C.remainingMs}ms)`:""));return}C.previousState&&C.state&&C.previousState!==C.state?m.success(`${X(C.previousState)} → ${X(C.state)}`):m.success(e==="reset"?"熔断器已重置":"已记录"),await P()}catch(r){m.error("操作失败: "+(r?.message||r))}}async function Le(s){try{const{output:e}=await t.execute(`federation remove ${B(s.nodeId)} --json`,8e3),r=bt(e);if(!r.ok){m.error("移除失败: "+(r.reason||e.slice(0,120)));return}m.success("节点已移除"),await P()}catch(e){m.error("移除失败: "+(e?.message||e))}}async function de(s,e){try{const r={acquire:"pool-acquire",release:"pool-release",destroy:"pool-destroy"}[e],{output:$}=await t.execute(`federation ${r} ${B(s.nodeId)} --json`,8e3),C=gt($);if(!C.ok){m.warning(C.reason||"操作未生效");return}e==="destroy"?m.success("连接池已销毁"):m.success(`${e==="acquire"?"已获取":"已释放"}(活跃 ${C.active} · 空闲 ${C.idle})`),await P()}catch(r){m.error("操作失败: "+(r?.message||r))}}async function Ie(){if(!Q.value.trim()){m.warning("请填写节点 ID");return}re.value=!0;try{const{output:s}=await t.execute(`federation node-health ${B(Q.value.trim())} --json`,8e3);j.value=ht(s)}catch(s){m.error("查询失败: "+(s?.message||s))}finally{re.value=!1}}function He(){_.nodeId="",_.failureThreshold=5,_.successThreshold=2,_.openTimeout=6e4}function Je(){b.nodeId="",b.checkType="heartbeat",b.status="healthy",b.metrics=""}function Ve(){g.nodeId="",g.min=5,g.max=50,g.idleTimeout=3e5}return dt(P),(s,e)=>{const r=f("a-button"),$=f("a-menu-item"),C=f("a-menu"),Ge=f("a-dropdown"),te=f("a-space"),M=f("a-statistic"),U=f("a-card"),q=f("a-col"),Ke=f("a-row"),F=f("a-radio-button"),pe=f("a-radio-group"),O=f("a-tag"),Ae=f("a-popconfirm"),oe=f("a-empty"),ae=f("a-table"),ne=f("a-tab-pane"),We=f("a-progress"),le=f("a-input"),fe=f("a-descriptions-item"),Ye=f("a-descriptions"),Qe=f("a-tabs"),w=f("a-form-item"),N=f("a-input-number"),ye=f("a-form"),me=f("a-modal"),we=f("a-select-option"),$e=f("a-select"),Xe=f("a-textarea");return c(),I("div",null,[A("div",Tt,[e[28]||(e[28]=A("div",null,[A("h2",{class:"page-title"},"联邦强化"),A("p",{class:"page-sub"},"熔断器 FSM · 健康检查 · 连接池模拟")],-1)),o(te,null,{default:a(()=>[o(r,{loading:v.value,onClick:P},{icon:a(()=>[o(h(ot))]),default:a(()=>[e[23]||(e[23]=p(" 刷新 ",-1))]),_:1},8,["loading"]),o(Ge,null,{overlay:a(()=>[o(C,null,{default:a(()=>[o($,{key:"register",onClick:e[0]||(e[0]=n=>K.value=!0)},{default:a(()=>[...e[25]||(e[25]=[p("注册节点",-1)])]),_:1}),o($,{key:"check",onClick:e[1]||(e[1]=n=>W.value=!0)},{default:a(()=>[...e[26]||(e[26]=[p("记录健康检查",-1)])]),_:1}),o($,{key:"pool",onClick:e[2]||(e[2]=n=>Y.value=!0)},{default:a(()=>[...e[27]||(e[27]=[p("新建连接池",-1)])]),_:1})]),_:1})]),default:a(()=>[o(r,{type:"primary"},{icon:a(()=>[o(h(at))]),default:a(()=>[e[24]||(e[24]=p(" 新建 ▼ ",-1))]),_:1})]),_:1})]),_:1})]),o(Ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"熔断器节点",value:S.value.circuitBreakers.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[o(h(nt))]),_:1},8,["value"]),A("div",St,d(S.value.circuitBreakers.byState.closed||0)+" 闭合 · "+d(S.value.circuitBreakers.byState.open||0)+" 开",1)]),_:1})]),_:1}),o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"健康检查",value:S.value.healthChecks.total,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[o(h(lt))]),_:1},8,["value"]),A("div",It,d(S.value.healthChecks.byStatus.healthy||0)+" 健康 · "+d(S.value.healthChecks.byStatus.unhealthy||0)+" 不可用",1)]),_:1})]),_:1}),o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"连接池",value:S.value.connectionPools.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[o(h(st))]),_:1},8,["value"]),A("div",At,d(S.value.connectionPools.totalActive)+" 活跃 · "+d(S.value.connectionPools.totalIdle)+" 空闲",1)]),_:1})]),_:1}),o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"降级节点",value:Ce.value,"value-style":{color:Ce.value>0?"#faad14":"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[o(h(it))]),_:1},8,["value","value-style"]),A("div",wt,d(S.value.circuitBreakers.byState.half_open||0)+" 半开",1)]),_:1})]),_:1}),o(q,{xs:24,sm:8,lg:4},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"可用率",value:xe.value,suffix:"%",precision:0,"value-style":{color:Se(xe.value),fontSize:"20px"}},{prefix:a(()=>[o(h(rt))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),o(Qe,{activeKey:be.value,"onUpdate:activeKey":e[7]||(e[7]=n=>be.value=n),class:"fed-tabs"},{default:a(()=>[o(ne,{key:"breakers",tab:"熔断器"},{default:a(()=>[A("div",$t,[o(pe,{value:J.value,"onUpdate:value":e[3]||(e[3]=n=>J.value=n),size:"small","button-style":"solid"},{default:a(()=>[o(F,{value:""},{default:a(()=>[...e[29]||(e[29]=[p("全部状态",-1)])]),_:1}),(c(!0),I(E,null,L(h(je),n=>(c(),T(F,{key:n,value:n},{default:a(()=>[p(d(X(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ae,{columns:Be,"data-source":Fe.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:v.value,"row-key":"key",style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="state"?(c(),T(O,{key:0,color:Ne(u.state)},{default:a(()=>[p(d(X(u.state)),1)]),_:2},1032,["color"])):n.key==="failure"?(c(),I("span",zt,d(u.failureCount)+" / "+d(u.failureThreshold),1)):n.key==="success"?(c(),I("span",jt,d(u.successCount)+" / "+d(u.successThreshold),1)):n.key==="updatedAt"?(c(),I("span",Bt,d(h(ie)(u.updatedAt)),1)):n.key==="action"?(c(),T(te,{key:4,size:4},{default:a(()=>[o(r,{size:"small",danger:"",onClick:R=>ee(u,"failure")},{default:a(()=>[...e[30]||(e[30]=[p("失败",-1)])]),_:1},8,["onClick"]),o(r,{size:"small",onClick:R=>ee(u,"success")},{default:a(()=>[...e[31]||(e[31]=[p("成功",-1)])]),_:1},8,["onClick"]),o(r,{size:"small",type:"dashed",onClick:R=>ee(u,"half-open")},{default:a(()=>[...e[32]||(e[32]=[p("半开",-1)])]),_:1},8,["onClick"]),o(r,{size:"small",onClick:R=>ee(u,"reset")},{default:a(()=>[...e[33]||(e[33]=[p("重置",-1)])]),_:1},8,["onClick"]),o(Ae,{title:"移除该节点?所有相关熔断器与健康检查会被删除",onConfirm:R=>Le(u)},{default:a(()=>[o(r,{size:"small",danger:"",type:"text"},{default:a(()=>[...e[34]||(e[34]=[p("移除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):H("",!0)]),emptyText:a(()=>[o(oe,{image:h(i),description:"暂无熔断器"},null,8,["image"])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ne,{key:"checks",tab:"健康检查"},{default:a(()=>[A("div",Pt,[o(pe,{value:V.value,"onUpdate:value":e[4]||(e[4]=n=>V.value=n),size:"small","button-style":"solid"},{default:a(()=>[o(F,{value:""},{default:a(()=>[...e[35]||(e[35]=[p("全部指标",-1)])]),_:1}),(c(!0),I(E,null,L(h(ze),n=>(c(),T(F,{key:n,value:n},{default:a(()=>[p(d(Z(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(pe,{value:G.value,"onUpdate:value":e[5]||(e[5]=n=>G.value=n),size:"small"},{default:a(()=>[o(F,{value:""},{default:a(()=>[...e[36]||(e[36]=[p("全部状态",-1)])]),_:1}),(c(!0),I(E,null,L(h(he),n=>(c(),T(F,{key:n,value:n},{default:a(()=>[p(d(D(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ae,{columns:Pe,"data-source":Oe.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:v.value,"row-key":"key",style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="checkId"?(c(),I("span",Ut,d(u.checkId.slice(0,12)),1)):n.key==="checkType"?(c(),T(O,{key:1,color:"blue"},{default:a(()=>[p(d(Z(u.checkType)),1)]),_:2},1024)):n.key==="status"?(c(),T(O,{key:2,color:ce(u.status)},{default:a(()=>[p(d(D(u.status)),1)]),_:2},1032,["color"])):n.key==="metrics"?(c(),I("span",Rt,d(De(u.metrics||"",50)),1)):n.key==="checkedAt"?(c(),I("span",Ft,d(h(ie)(u.checkedAt)),1)):H("",!0)]),emptyText:a(()=>[o(oe,{image:h(i),description:"暂无健康检查记录"},null,8,["image"])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ne,{key:"pools",tab:"连接池"},{default:a(()=>[o(ae,{columns:Ue,"data-source":ge.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:v.value,"row-key":"key",style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="utilization"?(c(),T(We,{key:0,percent:Te(u),"stroke-color":Se(Te(u)),size:"small"},null,8,["percent","stroke-color"])):n.key==="createdAt"?(c(),I("span",Ot,d(h(ie)(u.createdAt)),1)):n.key==="action"?(c(),T(te,{key:2,size:4},{default:a(()=>[o(r,{size:"small",type:"primary",onClick:R=>de(u,"acquire")},{default:a(()=>[...e[37]||(e[37]=[p("取连接",-1)])]),_:1},8,["onClick"]),o(r,{size:"small",onClick:R=>de(u,"release")},{default:a(()=>[...e[38]||(e[38]=[p("还连接",-1)])]),_:1},8,["onClick"]),o(Ae,{title:"销毁该连接池?",onConfirm:R=>de(u,"destroy")},{default:a(()=>[o(r,{size:"small",danger:"",type:"text"},{default:a(()=>[...e[39]||(e[39]=[p("销毁",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):H("",!0)]),emptyText:a(()=>[o(oe,{image:h(i),description:"暂无连接池"},null,8,["image"])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ne,{key:"node-health",tab:"节点健康聚合"},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[o(te,null,{default:a(()=>[o(le,{value:Q.value,"onUpdate:value":e[6]||(e[6]=n=>Q.value=n),placeholder:"节点 ID",style:{width:"240px"},"allow-clear":"",onPressEnter:Ie},null,8,["value"]),o(r,{type:"primary",loading:re.value,onClick:Ie},{icon:a(()=>[o(h(ut))]),default:a(()=>[e[40]||(e[40]=p(" 查询 ",-1))]),_:1},8,["loading"])]),_:1})]),_:1}),j.value?(c(),T(U,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(Ye,{column:3,size:"small",bordered:""},{default:a(()=>[o(fe,{label:"节点"},{default:a(()=>[A("span",Nt,d(j.value.nodeId),1)]),_:1}),o(fe,{label:"聚合状态"},{default:a(()=>[o(O,{color:ce(j.value.status)},{default:a(()=>[p(d(D(j.value.status)),1)]),_:1},8,["color"])]),_:1}),o(fe,{label:"检查总数"},{default:a(()=>[p(d(j.value.checks),1)]),_:1})]),_:1}),A("div",Dt,[e[41]||(e[41]=A("h4",{style:{color:"var(--text-primary)","margin-bottom":"8px"}},"最近各指标状态",-1)),j.value.latestChecks.length?(c(),T(ae,{key:1,columns:Re,"data-source":j.value.latestChecks,pagination:!1,size:"small","row-key":"checkType",style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="checkType"?(c(),T(O,{key:0,color:"blue"},{default:a(()=>[p(d(Z(u.checkType)),1)]),_:2},1024)):n.key==="status"?(c(),T(O,{key:1,color:ce(u.status)},{default:a(()=>[p(d(D(u.status)),1)]),_:2},1032,["color"])):n.key==="checkedAt"?(c(),I("span",Mt,d(h(ie)(u.checkedAt)),1)):H("",!0)]),_:1},8,["data-source"])):(c(),T(oe,{key:0,image:h(i),description:"无最近检查"},null,8,["image"]))])]),_:1})):H("",!0)]),_:1})]),_:1},8,["activeKey"]),o(me,{open:K.value,"onUpdate:open":e[12]||(e[12]=n=>K.value=n),title:"注册联邦节点","confirm-loading":y.value,onOk:Me},{default:a(()=>[o(ye,{layout:"vertical"},{default:a(()=>[o(w,{label:"节点 ID",required:""},{default:a(()=>[o(le,{value:_.nodeId,"onUpdate:value":e[8]||(e[8]=n=>_.nodeId=n),placeholder:"如 node-shanghai-01"},null,8,["value"])]),_:1}),o(w,{label:"失败阈值(默认 5)"},{default:a(()=>[o(N,{value:_.failureThreshold,"onUpdate:value":e[9]||(e[9]=n=>_.failureThreshold=n),min:1,max:100,style:{width:"100%"}},null,8,["value"])]),_:1}),o(w,{label:"成功阈值(默认 2)"},{default:a(()=>[o(N,{value:_.successThreshold,"onUpdate:value":e[10]||(e[10]=n=>_.successThreshold=n),min:1,max:100,style:{width:"100%"}},null,8,["value"])]),_:1}),o(w,{label:"开路超时 (ms)(默认 60000)"},{default:a(()=>[o(N,{value:_.openTimeout,"onUpdate:value":e[11]||(e[11]=n=>_.openTimeout=n),min:1e3,step:1e3,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(me,{open:W.value,"onUpdate:open":e[17]||(e[17]=n=>W.value=n),title:"记录健康检查","confirm-loading":y.value,onOk:qe},{default:a(()=>[o(ye,{layout:"vertical"},{default:a(()=>[o(w,{label:"节点 ID",required:""},{default:a(()=>[o(le,{value:b.nodeId,"onUpdate:value":e[13]||(e[13]=n=>b.nodeId=n),placeholder:"必须先注册节点"},null,8,["value"])]),_:1}),o(w,{label:"指标类型",required:""},{default:a(()=>[o($e,{value:b.checkType,"onUpdate:value":e[14]||(e[14]=n=>b.checkType=n)},{default:a(()=>[(c(!0),I(E,null,L(h(ze),n=>(c(),T(we,{key:n,value:n},{default:a(()=>[p(d(Z(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(w,{label:"健康状态",required:""},{default:a(()=>[o($e,{value:b.status,"onUpdate:value":e[15]||(e[15]=n=>b.status=n)},{default:a(()=>[(c(!0),I(E,null,L(h(he),n=>(c(),T(we,{key:n,value:n},{default:a(()=>[p(d(D(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(w,{label:'指标 JSON(可选,如 {"latencyMs":42})'},{default:a(()=>[o(Xe,{value:b.metrics,"onUpdate:value":e[16]||(e[16]=n=>b.metrics=n),rows:3,placeholder:'{"latencyMs": 42, "cpu": 0.4}'},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(me,{open:Y.value,"onUpdate:open":e[22]||(e[22]=n=>Y.value=n),title:"新建连接池","confirm-loading":y.value,onOk:Ee},{default:a(()=>[o(ye,{layout:"vertical"},{default:a(()=>[o(w,{label:"节点 ID",required:""},{default:a(()=>[o(le,{value:g.nodeId,"onUpdate:value":e[18]||(e[18]=n=>g.nodeId=n),placeholder:"如 node-shanghai-01"},null,8,["value"])]),_:1}),o(w,{label:"最小连接数(默认 5)"},{default:a(()=>[o(N,{value:g.min,"onUpdate:value":e[19]||(e[19]=n=>g.min=n),min:1,max:500,style:{width:"100%"}},null,8,["value"])]),_:1}),o(w,{label:"最大连接数(默认 50)"},{default:a(()=>[o(N,{value:g.max,"onUpdate:value":e[20]||(e[20]=n=>g.max=n),min:1,max:500,style:{width:"100%"}},null,8,["value"])]),_:1}),o(w,{label:"空闲超时 (ms)(默认 300000)"},{default:a(()=>[o(N,{value:g.idleTimeout,"onUpdate:value":e[21]||(e[21]=n=>g.idleTimeout=n),min:1e3,step:1e3,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},eo=tt(qt,[["__scopeId","data-v-6bc17fe8"]]);export{eo as default};
|
|
1
|
+
import{u as Ze}from"./ws-Bv7YH0VB.js";import{s as et}from"./community-parser-CO25nZFt.js";import{_ as tt}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as m}from"./index-BfKFNptm.js";import{Y as ot,ac as at,u as nt,at as lt,c as st,aD as it,aa as rt,S as ut}from"./icons-ukMaZ3tx.js";import{E as ct}from"./useConfigInject-DCcT0grw.js";import{l as dt,F as I,D as A,c as o,x as a,q as f,r as x,v as c,J as p,u as h,I as d,H as E,L,m as T,G as H,j as se,a as ke}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function z(l){const t=et(l);if(!t)return null;try{return JSON.parse(t)}catch{}const i=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const je=Object.freeze(["closed","open","half_open"]),he=Object.freeze(["healthy","degraded","unhealthy","unknown"]),ze=Object.freeze(["heartbeat","latency","success_rate","cpu_usage","memory_usage"]);function k(l,t=0){return typeof l=="number"&&Number.isFinite(l)?l:t}function pt(l,t=0){if(!l||typeof l!="object")return null;const i=l.node_id??l.nodeId??"";if(!i)return null;const v=String(l.state||"closed").toLowerCase();return{key:i,nodeId:i,state:v,failureCount:k(l.failure_count??l.failureCount,0),successCount:k(l.success_count??l.successCount,0),failureThreshold:k(l.failure_threshold??l.failureThreshold,0),successThreshold:k(l.success_threshold??l.successThreshold,0),openTimeout:k(l.open_timeout??l.openTimeout,0),lastFailureTime:l.last_failure_time??l.lastFailureTime??null,lastSuccessTime:l.last_success_time??l.lastSuccessTime??null,stateChangedAt:l.state_changed_at??l.stateChangedAt??null,metadata:l.metadata??null,createdAt:l.created_at??l.createdAt??null,updatedAt:l.updated_at??l.updatedAt??null,_idx:t}}function ft(l){const t=z(l);return Array.isArray(t)?t.map(pt).filter(Boolean):[]}function yt(l,t=0){if(!l||typeof l!="object")return null;const i=l.check_id??l.checkId??"";return i?{key:i,checkId:i,nodeId:l.node_id??l.nodeId??"",checkType:String(l.check_type??l.checkType??"").toLowerCase(),status:String(l.status||"unknown").toLowerCase(),metrics:l.metrics??null,checkedAt:l.checked_at??l.checkedAt??null,_idx:t}:null}function mt(l){const t=z(l);return Array.isArray(t)?t.map(yt).filter(Boolean):[]}function kt(l,t=0){if(!l||typeof l!="object")return null;const i=l.nodeId??l.node_id??"";return i?{key:i,nodeId:i,minConnections:k(l.minConnections,0),maxConnections:k(l.maxConnections,0),idleTimeout:k(l.idleTimeout,0),activeConnections:k(l.activeConnections,0),idleConnections:k(l.idleConnections,0),totalCreated:k(l.totalCreated,0),totalDestroyed:k(l.totalDestroyed,0),waitingRequests:k(l.waitingRequests,0),createdAt:l.createdAt??null,_idx:t}:null}function vt(l){const t=z(l);return Array.isArray(t)?t.map(kt).filter(Boolean):[]}function ht(l){const t=z(l);if(!t||typeof t!="object"||Array.isArray(t))return{nodeId:"",status:"unknown",checks:0,latestChecks:[]};const v=(Array.isArray(t.latestChecks)?t.latestChecks:[]).filter(y=>y&&typeof y=="object").map(y=>({checkType:String(y.checkType??y.check_type??"").toLowerCase(),status:String(y.status||"unknown").toLowerCase(),checkedAt:y.checkedAt??y.checked_at??null}));return{nodeId:t.nodeId??t.node_id??"",status:String(t.status||"unknown").toLowerCase(),checks:k(t.checks,0),latestChecks:v}}function ve(l){const t=z(l);if(!t||typeof t!="object"||Array.isArray(t))return{ok:!1,id:null,reason:""};const i=!!(t.registered||t.recorded||t.initialized),v=t.nodeId??t.checkId??null;return{ok:i,id:v?String(v):null,reason:t.reason?String(t.reason):""}}function _t(l){const t=z(l);return!t||typeof t!="object"||Array.isArray(t)?{ok:!1,state:"",previousState:"",failureCount:0,successCount:0,remainingMs:0,reason:""}:{ok:!!(t.updated||t.reset),state:String(t.state||""),previousState:String(t.previousState||""),failureCount:k(t.failureCount,0),successCount:k(t.successCount,0),remainingMs:k(t.remainingMs,0),reason:t.reason?String(t.reason):""}}function gt(l){const t=z(l);return!t||typeof t!="object"||Array.isArray(t)?{ok:!1,active:0,idle:0,waiting:0,reason:""}:{ok:!!(t.acquired||t.released||t.destroyed),active:k(t.active,0),idle:k(t.idle,0),waiting:k(t.waiting,0),reason:t.reason?String(t.reason):""}}function bt(l){const t=z(l);return!t||typeof t!="object"||Array.isArray(t)?{ok:!1,reason:""}:{ok:!!t.removed,reason:t.reason?String(t.reason):""}}const Ct={circuitBreakers:{total:0,byState:{}},healthChecks:{total:0,byStatus:{}},connectionPools:{total:0,totalActive:0,totalIdle:0,totalConnections:0}};function xt(l){const t=JSON.parse(JSON.stringify(Ct));for(const v of je)t.circuitBreakers.byState[v]=0;for(const v of he)t.healthChecks.byStatus[v]=0;const i=z(l);if(!i||typeof i!="object"||Array.isArray(i))return t;if(i.circuitBreakers&&typeof i.circuitBreakers=="object"&&(t.circuitBreakers.total=k(i.circuitBreakers.total,0),i.circuitBreakers.byState&&typeof i.circuitBreakers.byState=="object"))for(const[v,y]of Object.entries(i.circuitBreakers.byState))typeof y=="number"&&Number.isFinite(y)&&(t.circuitBreakers.byState[v]=y);if(i.healthChecks&&typeof i.healthChecks=="object"&&(t.healthChecks.total=k(i.healthChecks.total,0),i.healthChecks.byStatus&&typeof i.healthChecks.byStatus=="object"))for(const[v,y]of Object.entries(i.healthChecks.byStatus))typeof y=="number"&&Number.isFinite(y)&&(t.healthChecks.byStatus[v]=y);return i.connectionPools&&typeof i.connectionPools=="object"&&(t.connectionPools.total=k(i.connectionPools.total,0),t.connectionPools.totalActive=k(i.connectionPools.totalActive,0),t.connectionPools.totalIdle=k(i.connectionPools.totalIdle,0),t.connectionPools.totalConnections=k(i.connectionPools.totalConnections,0)),t}function ie(l){if(l==null||l==="")return"—";const t=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(t.getTime())?String(l):t.toLocaleString("zh-CN",{hour12:!1})}const Tt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},St={class:"stat-sub"},It={class:"stat-sub"},At={class:"stat-sub"},wt={class:"stat-sub"},$t={class:"filter-bar"},zt={key:1},jt={key:2},Bt={key:3,class:"muted"},Pt={class:"filter-bar"},Ut={key:0,style:{"font-family":"monospace","font-size":"12px"}},Rt={key:3,class:"muted",style:{"font-family":"monospace","font-size":"11px"}},Ft={key:4,class:"muted"},Ot={key:1,class:"muted"},Nt={style:{"font-family":"monospace"}},Dt={style:{"margin-top":"16px"}},Mt={key:2,class:"muted"},qt={__name:"Federation",setup(l){const t=Ze(),i=ct.PRESENTED_IMAGE_SIMPLE,v=x(!1),y=x(!1),re=x(!1),ue=x([]),_e=x([]),ge=x([]),S=x({circuitBreakers:{total:0,byState:{closed:0,open:0,half_open:0}},healthChecks:{total:0,byStatus:{healthy:0,degraded:0,unhealthy:0,unknown:0}},connectionPools:{total:0,totalActive:0,totalIdle:0,totalConnections:0}}),be=x("breakers"),J=x(""),V=x(""),G=x(""),K=x(!1),W=x(!1),Y=x(!1),_=ke({nodeId:"",failureThreshold:5,successThreshold:2,openTimeout:6e4}),b=ke({nodeId:"",checkType:"heartbeat",status:"healthy",metrics:""}),g=ke({nodeId:"",min:5,max:50,idleTimeout:3e5}),Q=x(""),j=x(null),Be=[{title:"节点",key:"nodeId",dataIndex:"nodeId",width:"200px"},{title:"状态",key:"state",width:"100px"},{title:"失败计数",key:"failure",width:"120px"},{title:"成功计数",key:"success",width:"120px"},{title:"超时 (ms)",key:"openTimeout",dataIndex:"openTimeout",width:"110px"},{title:"更新时间",key:"updatedAt",width:"170px"},{title:"操作",key:"action",width:"340px"}],Pe=[{title:"ID",key:"checkId",width:"130px"},{title:"节点",key:"nodeId",dataIndex:"nodeId",width:"180px"},{title:"指标",key:"checkType",width:"120px"},{title:"状态",key:"status",width:"100px"},{title:"指标值",key:"metrics"},{title:"采集时间",key:"checkedAt",width:"170px"}],Ue=[{title:"节点",key:"nodeId",dataIndex:"nodeId",width:"200px"},{title:"活跃",key:"activeConnections",dataIndex:"activeConnections",width:"90px"},{title:"空闲",key:"idleConnections",dataIndex:"idleConnections",width:"90px"},{title:"上限",key:"maxConnections",dataIndex:"maxConnections",width:"90px"},{title:"使用率",key:"utilization",width:"160px"},{title:"排队中",key:"waitingRequests",dataIndex:"waitingRequests",width:"90px"},{title:"已创建",key:"totalCreated",dataIndex:"totalCreated",width:"90px"},{title:"创建时间",key:"createdAt",width:"170px"},{title:"操作",key:"action",width:"240px"}],Re=[{title:"指标",key:"checkType",width:"160px"},{title:"状态",key:"status",width:"120px"},{title:"采集时间",key:"checkedAt"}],Fe=se(()=>J.value?ue.value.filter(s=>s.state===J.value):ue.value),Oe=se(()=>{let s=_e.value;return V.value&&(s=s.filter(e=>e.checkType===V.value)),G.value&&(s=s.filter(e=>e.status===G.value)),s}),Ce=se(()=>(S.value.circuitBreakers.byState.open||0)+(S.value.circuitBreakers.byState.half_open||0)),xe=se(()=>{const s=S.value.circuitBreakers.total;return s?(S.value.circuitBreakers.byState.closed||0)/s*100:100});function Te(s){return s.maxConnections?Math.round(s.activeConnections/s.maxConnections*100):0}function X(s){return{closed:"闭合",open:"开路",half_open:"半开"}[s]||s}function Ne(s){return{closed:"green",open:"red",half_open:"gold"}[s]||"default"}function Z(s){return{heartbeat:"心跳",latency:"延迟",success_rate:"成功率",cpu_usage:"CPU",memory_usage:"内存"}[s]||s}function D(s){return{healthy:"健康",degraded:"降级",unhealthy:"不可用",unknown:"未知"}[s]||s}function ce(s){return{healthy:"green",degraded:"gold",unhealthy:"red",unknown:"default"}[s]||"default"}function Se(s){return s>=95?"#52c41a":s>=80?"#1677ff":s>=60?"#faad14":"#ff4d4f"}function De(s,e){return s?s.length<=e?s:s.slice(0,e)+"…":""}function B(s){return`"${String(s).replace(/"/g,'\\"')}"`}async function P(){v.value=!0;try{const[s,e,r,$]=await Promise.all([t.execute("federation breakers --limit 200 --json",1e4).catch(()=>({output:""})),t.execute("federation checks --limit 200 --json",1e4).catch(()=>({output:""})),t.execute("federation pools --json",8e3).catch(()=>({output:""})),t.execute("federation stats --json",8e3).catch(()=>({output:""}))]);ue.value=ft(s.output),_e.value=mt(e.output),ge.value=vt(r.output),S.value=xt($.output)}catch(s){m.error("加载数据失败: "+(s?.message||s))}finally{v.value=!1}}async function Me(){if(!_.nodeId.trim()){m.warning("请填写节点 ID");return}y.value=!0;try{const s=[`federation register ${B(_.nodeId.trim())}`];_.failureThreshold&&s.push(`-f ${_.failureThreshold}`),_.successThreshold&&s.push(`-s ${_.successThreshold}`),_.openTimeout&&s.push(`-t ${_.openTimeout}`),s.push("--json");const{output:e}=await t.execute(s.join(" "),1e4),r=ve(e);if(!r.ok){m.error("注册失败: "+(r.reason||e.slice(0,120)));return}m.success(`节点已注册:${r.id}`),K.value=!1,He(),await P()}catch(s){m.error("注册失败: "+(s?.message||s))}finally{y.value=!1}}async function qe(){if(!b.nodeId.trim()){m.warning("请填写节点 ID");return}y.value=!0;try{const s=[`federation check ${B(b.nodeId.trim())}`];s.push(`-t ${b.checkType}`),s.push(`-s ${b.status}`),b.metrics.trim()&&s.push(`-m ${B(b.metrics.trim())}`),s.push("--json");const{output:e}=await t.execute(s.join(" "),1e4),r=ve(e);if(!r.ok){m.error("记录失败: "+(r.reason||e.slice(0,120)));return}m.success(`检查已记录:${r.id?.slice(0,8)}`),W.value=!1,Je(),await P()}catch(s){m.error("记录失败: "+(s?.message||s))}finally{y.value=!1}}async function Ee(){if(!g.nodeId.trim()){m.warning("请填写节点 ID");return}y.value=!0;try{const s=[`federation pool-init ${B(g.nodeId.trim())}`];g.min&&s.push(`--min ${g.min}`),g.max&&s.push(`--max ${g.max}`),g.idleTimeout&&s.push(`--idle-timeout ${g.idleTimeout}`),s.push("--json");const{output:e}=await t.execute(s.join(" "),1e4),r=ve(e);if(!r.ok){m.error("创建失败: "+(r.reason||e.slice(0,120)));return}m.success(`连接池已创建:${r.id}`),Y.value=!1,Ve(),await P()}catch(s){m.error("创建失败: "+(s?.message||s))}finally{y.value=!1}}async function ee(s,e){try{const r=`federation ${e} ${B(s.nodeId)} --json`,{output:$}=await t.execute(r,8e3),C=_t($);if(!C.ok){m.warning((C.reason||"操作未生效")+(C.remainingMs?` (还需 ${C.remainingMs}ms)`:""));return}C.previousState&&C.state&&C.previousState!==C.state?m.success(`${X(C.previousState)} → ${X(C.state)}`):m.success(e==="reset"?"熔断器已重置":"已记录"),await P()}catch(r){m.error("操作失败: "+(r?.message||r))}}async function Le(s){try{const{output:e}=await t.execute(`federation remove ${B(s.nodeId)} --json`,8e3),r=bt(e);if(!r.ok){m.error("移除失败: "+(r.reason||e.slice(0,120)));return}m.success("节点已移除"),await P()}catch(e){m.error("移除失败: "+(e?.message||e))}}async function de(s,e){try{const r={acquire:"pool-acquire",release:"pool-release",destroy:"pool-destroy"}[e],{output:$}=await t.execute(`federation ${r} ${B(s.nodeId)} --json`,8e3),C=gt($);if(!C.ok){m.warning(C.reason||"操作未生效");return}e==="destroy"?m.success("连接池已销毁"):m.success(`${e==="acquire"?"已获取":"已释放"}(活跃 ${C.active} · 空闲 ${C.idle})`),await P()}catch(r){m.error("操作失败: "+(r?.message||r))}}async function Ie(){if(!Q.value.trim()){m.warning("请填写节点 ID");return}re.value=!0;try{const{output:s}=await t.execute(`federation node-health ${B(Q.value.trim())} --json`,8e3);j.value=ht(s)}catch(s){m.error("查询失败: "+(s?.message||s))}finally{re.value=!1}}function He(){_.nodeId="",_.failureThreshold=5,_.successThreshold=2,_.openTimeout=6e4}function Je(){b.nodeId="",b.checkType="heartbeat",b.status="healthy",b.metrics=""}function Ve(){g.nodeId="",g.min=5,g.max=50,g.idleTimeout=3e5}return dt(P),(s,e)=>{const r=f("a-button"),$=f("a-menu-item"),C=f("a-menu"),Ge=f("a-dropdown"),te=f("a-space"),M=f("a-statistic"),U=f("a-card"),q=f("a-col"),Ke=f("a-row"),F=f("a-radio-button"),pe=f("a-radio-group"),O=f("a-tag"),Ae=f("a-popconfirm"),oe=f("a-empty"),ae=f("a-table"),ne=f("a-tab-pane"),We=f("a-progress"),le=f("a-input"),fe=f("a-descriptions-item"),Ye=f("a-descriptions"),Qe=f("a-tabs"),w=f("a-form-item"),N=f("a-input-number"),ye=f("a-form"),me=f("a-modal"),we=f("a-select-option"),$e=f("a-select"),Xe=f("a-textarea");return c(),I("div",null,[A("div",Tt,[e[28]||(e[28]=A("div",null,[A("h2",{class:"page-title"},"联邦强化"),A("p",{class:"page-sub"},"熔断器 FSM · 健康检查 · 连接池模拟")],-1)),o(te,null,{default:a(()=>[o(r,{loading:v.value,onClick:P},{icon:a(()=>[o(h(ot))]),default:a(()=>[e[23]||(e[23]=p(" 刷新 ",-1))]),_:1},8,["loading"]),o(Ge,null,{overlay:a(()=>[o(C,null,{default:a(()=>[o($,{key:"register",onClick:e[0]||(e[0]=n=>K.value=!0)},{default:a(()=>[...e[25]||(e[25]=[p("注册节点",-1)])]),_:1}),o($,{key:"check",onClick:e[1]||(e[1]=n=>W.value=!0)},{default:a(()=>[...e[26]||(e[26]=[p("记录健康检查",-1)])]),_:1}),o($,{key:"pool",onClick:e[2]||(e[2]=n=>Y.value=!0)},{default:a(()=>[...e[27]||(e[27]=[p("新建连接池",-1)])]),_:1})]),_:1})]),default:a(()=>[o(r,{type:"primary"},{icon:a(()=>[o(h(at))]),default:a(()=>[e[24]||(e[24]=p(" 新建 ▼ ",-1))]),_:1})]),_:1})]),_:1})]),o(Ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"熔断器节点",value:S.value.circuitBreakers.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[o(h(nt))]),_:1},8,["value"]),A("div",St,d(S.value.circuitBreakers.byState.closed||0)+" 闭合 · "+d(S.value.circuitBreakers.byState.open||0)+" 开",1)]),_:1})]),_:1}),o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"健康检查",value:S.value.healthChecks.total,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[o(h(lt))]),_:1},8,["value"]),A("div",It,d(S.value.healthChecks.byStatus.healthy||0)+" 健康 · "+d(S.value.healthChecks.byStatus.unhealthy||0)+" 不可用",1)]),_:1})]),_:1}),o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"连接池",value:S.value.connectionPools.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[o(h(st))]),_:1},8,["value"]),A("div",At,d(S.value.connectionPools.totalActive)+" 活跃 · "+d(S.value.connectionPools.totalIdle)+" 空闲",1)]),_:1})]),_:1}),o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"降级节点",value:Ce.value,"value-style":{color:Ce.value>0?"#faad14":"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[o(h(it))]),_:1},8,["value","value-style"]),A("div",wt,d(S.value.circuitBreakers.byState.half_open||0)+" 半开",1)]),_:1})]),_:1}),o(q,{xs:24,sm:8,lg:4},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(M,{title:"可用率",value:xe.value,suffix:"%",precision:0,"value-style":{color:Se(xe.value),fontSize:"20px"}},{prefix:a(()=>[o(h(rt))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),o(Qe,{activeKey:be.value,"onUpdate:activeKey":e[7]||(e[7]=n=>be.value=n),class:"fed-tabs"},{default:a(()=>[o(ne,{key:"breakers",tab:"熔断器"},{default:a(()=>[A("div",$t,[o(pe,{value:J.value,"onUpdate:value":e[3]||(e[3]=n=>J.value=n),size:"small","button-style":"solid"},{default:a(()=>[o(F,{value:""},{default:a(()=>[...e[29]||(e[29]=[p("全部状态",-1)])]),_:1}),(c(!0),I(E,null,L(h(je),n=>(c(),T(F,{key:n,value:n},{default:a(()=>[p(d(X(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ae,{columns:Be,"data-source":Fe.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:v.value,"row-key":"key",style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="state"?(c(),T(O,{key:0,color:Ne(u.state)},{default:a(()=>[p(d(X(u.state)),1)]),_:2},1032,["color"])):n.key==="failure"?(c(),I("span",zt,d(u.failureCount)+" / "+d(u.failureThreshold),1)):n.key==="success"?(c(),I("span",jt,d(u.successCount)+" / "+d(u.successThreshold),1)):n.key==="updatedAt"?(c(),I("span",Bt,d(h(ie)(u.updatedAt)),1)):n.key==="action"?(c(),T(te,{key:4,size:4},{default:a(()=>[o(r,{size:"small",danger:"",onClick:R=>ee(u,"failure")},{default:a(()=>[...e[30]||(e[30]=[p("失败",-1)])]),_:1},8,["onClick"]),o(r,{size:"small",onClick:R=>ee(u,"success")},{default:a(()=>[...e[31]||(e[31]=[p("成功",-1)])]),_:1},8,["onClick"]),o(r,{size:"small",type:"dashed",onClick:R=>ee(u,"half-open")},{default:a(()=>[...e[32]||(e[32]=[p("半开",-1)])]),_:1},8,["onClick"]),o(r,{size:"small",onClick:R=>ee(u,"reset")},{default:a(()=>[...e[33]||(e[33]=[p("重置",-1)])]),_:1},8,["onClick"]),o(Ae,{title:"移除该节点?所有相关熔断器与健康检查会被删除",onConfirm:R=>Le(u)},{default:a(()=>[o(r,{size:"small",danger:"",type:"text"},{default:a(()=>[...e[34]||(e[34]=[p("移除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):H("",!0)]),emptyText:a(()=>[o(oe,{image:h(i),description:"暂无熔断器"},null,8,["image"])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ne,{key:"checks",tab:"健康检查"},{default:a(()=>[A("div",Pt,[o(pe,{value:V.value,"onUpdate:value":e[4]||(e[4]=n=>V.value=n),size:"small","button-style":"solid"},{default:a(()=>[o(F,{value:""},{default:a(()=>[...e[35]||(e[35]=[p("全部指标",-1)])]),_:1}),(c(!0),I(E,null,L(h(ze),n=>(c(),T(F,{key:n,value:n},{default:a(()=>[p(d(Z(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(pe,{value:G.value,"onUpdate:value":e[5]||(e[5]=n=>G.value=n),size:"small"},{default:a(()=>[o(F,{value:""},{default:a(()=>[...e[36]||(e[36]=[p("全部状态",-1)])]),_:1}),(c(!0),I(E,null,L(h(he),n=>(c(),T(F,{key:n,value:n},{default:a(()=>[p(d(D(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ae,{columns:Pe,"data-source":Oe.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:v.value,"row-key":"key",style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="checkId"?(c(),I("span",Ut,d(u.checkId.slice(0,12)),1)):n.key==="checkType"?(c(),T(O,{key:1,color:"blue"},{default:a(()=>[p(d(Z(u.checkType)),1)]),_:2},1024)):n.key==="status"?(c(),T(O,{key:2,color:ce(u.status)},{default:a(()=>[p(d(D(u.status)),1)]),_:2},1032,["color"])):n.key==="metrics"?(c(),I("span",Rt,d(De(u.metrics||"",50)),1)):n.key==="checkedAt"?(c(),I("span",Ft,d(h(ie)(u.checkedAt)),1)):H("",!0)]),emptyText:a(()=>[o(oe,{image:h(i),description:"暂无健康检查记录"},null,8,["image"])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ne,{key:"pools",tab:"连接池"},{default:a(()=>[o(ae,{columns:Ue,"data-source":ge.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:v.value,"row-key":"key",style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="utilization"?(c(),T(We,{key:0,percent:Te(u),"stroke-color":Se(Te(u)),size:"small"},null,8,["percent","stroke-color"])):n.key==="createdAt"?(c(),I("span",Ot,d(h(ie)(u.createdAt)),1)):n.key==="action"?(c(),T(te,{key:2,size:4},{default:a(()=>[o(r,{size:"small",type:"primary",onClick:R=>de(u,"acquire")},{default:a(()=>[...e[37]||(e[37]=[p("取连接",-1)])]),_:1},8,["onClick"]),o(r,{size:"small",onClick:R=>de(u,"release")},{default:a(()=>[...e[38]||(e[38]=[p("还连接",-1)])]),_:1},8,["onClick"]),o(Ae,{title:"销毁该连接池?",onConfirm:R=>de(u,"destroy")},{default:a(()=>[o(r,{size:"small",danger:"",type:"text"},{default:a(()=>[...e[39]||(e[39]=[p("销毁",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):H("",!0)]),emptyText:a(()=>[o(oe,{image:h(i),description:"暂无连接池"},null,8,["image"])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ne,{key:"node-health",tab:"节点健康聚合"},{default:a(()=>[o(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[o(te,null,{default:a(()=>[o(le,{value:Q.value,"onUpdate:value":e[6]||(e[6]=n=>Q.value=n),placeholder:"节点 ID",style:{width:"240px"},"allow-clear":"",onPressEnter:Ie},null,8,["value"]),o(r,{type:"primary",loading:re.value,onClick:Ie},{icon:a(()=>[o(h(ut))]),default:a(()=>[e[40]||(e[40]=p(" 查询 ",-1))]),_:1},8,["loading"])]),_:1})]),_:1}),j.value?(c(),T(U,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(Ye,{column:3,size:"small",bordered:""},{default:a(()=>[o(fe,{label:"节点"},{default:a(()=>[A("span",Nt,d(j.value.nodeId),1)]),_:1}),o(fe,{label:"聚合状态"},{default:a(()=>[o(O,{color:ce(j.value.status)},{default:a(()=>[p(d(D(j.value.status)),1)]),_:1},8,["color"])]),_:1}),o(fe,{label:"检查总数"},{default:a(()=>[p(d(j.value.checks),1)]),_:1})]),_:1}),A("div",Dt,[e[41]||(e[41]=A("h4",{style:{color:"var(--text-primary)","margin-bottom":"8px"}},"最近各指标状态",-1)),j.value.latestChecks.length?(c(),T(ae,{key:1,columns:Re,"data-source":j.value.latestChecks,pagination:!1,size:"small","row-key":"checkType",style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="checkType"?(c(),T(O,{key:0,color:"blue"},{default:a(()=>[p(d(Z(u.checkType)),1)]),_:2},1024)):n.key==="status"?(c(),T(O,{key:1,color:ce(u.status)},{default:a(()=>[p(d(D(u.status)),1)]),_:2},1032,["color"])):n.key==="checkedAt"?(c(),I("span",Mt,d(h(ie)(u.checkedAt)),1)):H("",!0)]),_:1},8,["data-source"])):(c(),T(oe,{key:0,image:h(i),description:"无最近检查"},null,8,["image"]))])]),_:1})):H("",!0)]),_:1})]),_:1},8,["activeKey"]),o(me,{open:K.value,"onUpdate:open":e[12]||(e[12]=n=>K.value=n),title:"注册联邦节点","confirm-loading":y.value,onOk:Me},{default:a(()=>[o(ye,{layout:"vertical"},{default:a(()=>[o(w,{label:"节点 ID",required:""},{default:a(()=>[o(le,{value:_.nodeId,"onUpdate:value":e[8]||(e[8]=n=>_.nodeId=n),placeholder:"如 node-shanghai-01"},null,8,["value"])]),_:1}),o(w,{label:"失败阈值(默认 5)"},{default:a(()=>[o(N,{value:_.failureThreshold,"onUpdate:value":e[9]||(e[9]=n=>_.failureThreshold=n),min:1,max:100,style:{width:"100%"}},null,8,["value"])]),_:1}),o(w,{label:"成功阈值(默认 2)"},{default:a(()=>[o(N,{value:_.successThreshold,"onUpdate:value":e[10]||(e[10]=n=>_.successThreshold=n),min:1,max:100,style:{width:"100%"}},null,8,["value"])]),_:1}),o(w,{label:"开路超时 (ms)(默认 60000)"},{default:a(()=>[o(N,{value:_.openTimeout,"onUpdate:value":e[11]||(e[11]=n=>_.openTimeout=n),min:1e3,step:1e3,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(me,{open:W.value,"onUpdate:open":e[17]||(e[17]=n=>W.value=n),title:"记录健康检查","confirm-loading":y.value,onOk:qe},{default:a(()=>[o(ye,{layout:"vertical"},{default:a(()=>[o(w,{label:"节点 ID",required:""},{default:a(()=>[o(le,{value:b.nodeId,"onUpdate:value":e[13]||(e[13]=n=>b.nodeId=n),placeholder:"必须先注册节点"},null,8,["value"])]),_:1}),o(w,{label:"指标类型",required:""},{default:a(()=>[o($e,{value:b.checkType,"onUpdate:value":e[14]||(e[14]=n=>b.checkType=n)},{default:a(()=>[(c(!0),I(E,null,L(h(ze),n=>(c(),T(we,{key:n,value:n},{default:a(()=>[p(d(Z(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(w,{label:"健康状态",required:""},{default:a(()=>[o($e,{value:b.status,"onUpdate:value":e[15]||(e[15]=n=>b.status=n)},{default:a(()=>[(c(!0),I(E,null,L(h(he),n=>(c(),T(we,{key:n,value:n},{default:a(()=>[p(d(D(n)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(w,{label:'指标 JSON(可选,如 {"latencyMs":42})'},{default:a(()=>[o(Xe,{value:b.metrics,"onUpdate:value":e[16]||(e[16]=n=>b.metrics=n),rows:3,placeholder:'{"latencyMs": 42, "cpu": 0.4}'},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(me,{open:Y.value,"onUpdate:open":e[22]||(e[22]=n=>Y.value=n),title:"新建连接池","confirm-loading":y.value,onOk:Ee},{default:a(()=>[o(ye,{layout:"vertical"},{default:a(()=>[o(w,{label:"节点 ID",required:""},{default:a(()=>[o(le,{value:g.nodeId,"onUpdate:value":e[18]||(e[18]=n=>g.nodeId=n),placeholder:"如 node-shanghai-01"},null,8,["value"])]),_:1}),o(w,{label:"最小连接数(默认 5)"},{default:a(()=>[o(N,{value:g.min,"onUpdate:value":e[19]||(e[19]=n=>g.min=n),min:1,max:500,style:{width:"100%"}},null,8,["value"])]),_:1}),o(w,{label:"最大连接数(默认 50)"},{default:a(()=>[o(N,{value:g.max,"onUpdate:value":e[20]||(e[20]=n=>g.max=n),min:1,max:500,style:{width:"100%"}},null,8,["value"])]),_:1}),o(w,{label:"空闲超时 (ms)(默认 300000)"},{default:a(()=>[o(N,{value:g.idleTimeout,"onUpdate:value":e[21]||(e[21]=n=>g.idleTimeout=n),min:1e3,step:1e3,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},eo=tt(qt,[["__scopeId","data-v-6bc17fe8"]]);export{eo as default};
|
package/src/assets/web-panel/assets/{FormItemContext-B-sn9E_W.js → FormItemContext-CnzbixSE.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as I}from"./createContext-
|
|
1
|
+
import{c as I}from"./createContext-DMZ-5dy2.js";import{d as i,i as u,o as p,w as C,g as f,j as c,r as x,p as a}from"./vendor-BVetwVfk.js";const r=Symbol("ContextProps"),s=Symbol("InternalContextProps"),S=function(n){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:c(()=>!0);const e=x(new Map),t=(m,v)=>{e.value.set(m,v),e.value=new Map(e.value)},F=m=>{e.value.delete(m),e.value=new Map(e.value)};C([o,e],()=>{}),a(r,n),a(s,{addFormItemField:t,removeFormItemField:F})},l={id:c(()=>{}),onFieldBlur:()=>{},onFieldChange:()=>{},clearValidate:()=>{}},d={addFormItemField:()=>{},removeFormItemField:()=>{}},b=()=>{const n=u(s,d),o=Symbol("FormItemFieldKey"),e=f();return n.addFormItemField(o,e.type),p(()=>{n.removeFormItemField(o)}),a(s,d),a(r,l),u(r,l)},K=i({compatConfig:{MODE:3},name:"AFormItemRest",setup(n,o){let{slots:e}=o;return a(s,d),a(r,l),()=>{var t;return(t=e.default)===null||t===void 0?void 0:t.call(e)}}}),g=I({}),M=i({name:"NoFormStatus",setup(n,o){let{slots:e}=o;return g.useProvide({}),()=>{var t;return(t=e.default)===null||t===void 0?void 0:t.call(e)}}});export{g as F,M as N,S as a,K as b,b as u};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as ee}from"./ws-Bv7YH0VB.js";import{_ as te}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{Y as ae,ai as oe,h as P,aj as j,ak as le}from"./icons-ukMaZ3tx.js";import{a as m}from"./index-
|
|
1
|
+
import{u as ee}from"./ws-Bv7YH0VB.js";import{_ as te}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{Y as ae,ai as oe,h as P,aj as j,ak as le}from"./icons-ukMaZ3tx.js";import{a as m}from"./index-BfKFNptm.js";import{F as T,D as s,c as a,x as t,r as l,q as u,v as p,J as i,u as g,m as v,I as V,G as b}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";const se={key:0,style:{"margin-bottom":"16px"}},ne={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-primary)","font-family":"'Cascadia Code', 'Fira Code', Consolas, monospace","font-size":"13px","line-height":"1.7",margin:"0"}},re={style:{display:"flex",gap:"12px","align-items":"flex-end","flex-wrap":"wrap"}},ie={style:{flex:"1","min-width":"200px"}},ue={style:{"min-width":"140px"}},de={style:{display:"flex",gap:"12px","align-items":"flex-end","flex-wrap":"wrap"}},pe={style:{flex:"1","min-width":"200px"}},ce={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-primary)","font-family":"'Cascadia Code', 'Fira Code', Consolas, monospace","font-size":"13px","line-height":"1.7",margin:"0"}},me={__name:"Git",setup(ve){const G=ee(),$=l("git"),h=l(!1),w=l(""),L=l(""),C=l(0),B=l(!1),x=l(""),O=l(!1),E=l(!1),M=l(""),z=l("markdown"),A=l(!1),S=l("./site"),D=l(!1),c=l(""),_=l(!1),k=l("");function q(o){const e=o.split(`
|
|
2
2
|
`);let n="",r=0;for(const f of e){const y=f.match(/On branch\s+(.+)/)||f.match(/分支\s+(.+)/);y&&(n=y[1].trim());const U=f.trim();/^(M|A|D|R|C|U|\?\?|MM|AM|AD)\s/.test(U)&&r++,/^(modified|new file|deleted|renamed):/i.test(U)&&r++}return{branch:n,changed:r}}async function I(){h.value=!0;try{const{output:o}=await G.execute("git status",15e3);w.value=o;const e=q(o);L.value=e.branch,C.value=e.changed}catch(o){m.error("获取 Git 状态失败: "+o.message),w.value=""}finally{h.value=!1}}function J(){E.value=!0}async function W(){E.value=!1,B.value=!0,x.value="";try{const{output:o}=await G.execute("git auto-commit",3e4);x.value=o,O.value=!o.includes("✖")&&!o.toLowerCase().includes("error"),O.value&&m.success("自动提交完成"),await I()}catch(o){x.value="提交失败: "+o.message,O.value=!1,m.error("自动提交失败")}finally{B.value=!1}}async function Y(){const o=M.value.trim();if(!o){m.warning("请输入文件路径");return}A.value=!0,c.value="",k.value="";try{const e=`import ${z.value} ${o}`,{output:n}=await G.execute(e,6e4);k.value=n;const r=n.includes("✖")||n.toLowerCase().includes("error");_.value=!r,c.value=r?"导入过程中可能存在问题,请查看输出":"导入完成",r||m.success("导入成功")}catch(e){c.value="导入失败: "+e.message,_.value=!1,m.error("导入失败")}finally{A.value=!1}}async function H(){const o=S.value.trim();if(!o){m.warning("请输入输出路径");return}D.value=!0,c.value="",k.value="";try{const e=`export site -o ${o}`,{output:n}=await G.execute(e,6e4);k.value=n;const r=n.includes("✖")||n.toLowerCase().includes("error");_.value=!r,c.value=r?"导出过程中可能存在问题,请查看输出":"导出完成",r||m.success("导出成功")}catch(e){c.value="导出失败: "+e.message,_.value=!1,m.error("导出失败")}finally{D.value=!1}}return(o,e)=>{const n=u("a-button"),r=u("a-space"),f=u("a-tag"),y=u("a-card"),U=u("a-empty"),N=u("a-alert"),R=u("a-tab-pane"),K=u("a-input"),F=u("a-select-option"),Q=u("a-select"),X=u("a-tabs"),Z=u("a-modal");return p(),T("div",null,[e[21]||(e[21]=s("div",{style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},[s("div",null,[s("h2",{class:"page-title"},"Git 与数据"),s("p",{class:"page-sub"},"版本控制 / 导入导出")])],-1)),a(X,{activeKey:$.value,"onUpdate:activeKey":e[5]||(e[5]=d=>$.value=d),type:"card"},{default:t(()=>[a(R,{key:"git"},{tab:t(()=>[a(g(P)),e[7]||(e[7]=i(" Git 仓库 ",-1))]),default:t(()=>[a(r,{style:{"margin-bottom":"16px"}},{default:t(()=>[a(n,{type:"primary",loading:h.value,onClick:I},{icon:t(()=>[a(g(ae))]),default:t(()=>[e[8]||(e[8]=i(" 刷新状态 ",-1))]),_:1},8,["loading"]),a(n,{loading:B.value,onClick:J},{icon:t(()=>[a(g(oe))]),default:t(()=>[e[9]||(e[9]=i(" 自动提交 ",-1))]),_:1},8,["loading"])]),_:1}),L.value||C.value>0?(p(),T("div",se,[a(r,null,{default:t(()=>[L.value?(p(),v(f,{key:0,color:"blue"},{default:t(()=>[a(g(P)),i(" "+V(L.value),1)]),_:1})):b("",!0),C.value>0?(p(),v(f,{key:1,color:"orange"},{default:t(()=>[i(V(C.value)+" 个文件变更",1)]),_:1})):w.value&&C.value===0?(p(),v(f,{key:2,color:"green"},{default:t(()=>[...e[10]||(e[10]=[i("工作区干净",-1)])]),_:1})):b("",!0)]),_:1})])):b("",!0),w.value?(p(),v(y,{key:1,bordered:!1,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)"}},{default:t(()=>[s("pre",ne,V(w.value),1)]),_:1})):h.value?b("",!0):(p(),v(U,{key:2,description:"点击刷新状态查看 Git 信息",style:{padding:"60px 0"}})),x.value?(p(),v(N,{key:3,message:O.value?"提交成功":"提交结果",description:x.value,type:O.value?"success":"info","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[0]||(e[0]=d=>x.value="")},null,8,["message","description","type"])):b("",!0)]),_:1}),a(R,{key:"io"},{tab:t(()=>[a(g(j)),e[11]||(e[11]=i(" 导入导出 ",-1))]),default:t(()=>[a(y,{title:"导入数据",bordered:!1,style:{background:"var(--bg-card)",border:"1px solid var(--border-color)","margin-bottom":"16px"}},{default:t(()=>[s("div",re,[s("div",ie,[e[12]||(e[12]=s("label",{style:{display:"block","margin-bottom":"6px",color:"var(--text-secondary)","font-size":"13px"}},"文件路径",-1)),a(K,{value:M.value,"onUpdate:value":e[1]||(e[1]=d=>M.value=d),placeholder:"输入文件或目录路径,如 ./docs","allow-clear":""},null,8,["value"])]),s("div",ue,[e[16]||(e[16]=s("label",{style:{display:"block","margin-bottom":"6px",color:"var(--text-secondary)","font-size":"13px"}},"格式",-1)),a(Q,{value:z.value,"onUpdate:value":e[2]||(e[2]=d=>z.value=d),style:{width:"140px"}},{default:t(()=>[a(F,{value:"markdown"},{default:t(()=>[...e[13]||(e[13]=[i("Markdown",-1)])]),_:1}),a(F,{value:"pdf"},{default:t(()=>[...e[14]||(e[14]=[i("PDF",-1)])]),_:1}),a(F,{value:"evernote"},{default:t(()=>[...e[15]||(e[15]=[i("Evernote",-1)])]),_:1})]),_:1},8,["value"])]),a(n,{type:"primary",loading:A.value,disabled:!M.value.trim(),onClick:Y},{icon:t(()=>[a(g(j))]),default:t(()=>[e[17]||(e[17]=i(" 导入 ",-1))]),_:1},8,["loading","disabled"])])]),_:1}),a(y,{title:"导出站点",bordered:!1,style:{background:"var(--bg-card)",border:"1px solid var(--border-color)","margin-bottom":"16px"}},{default:t(()=>[s("div",de,[s("div",pe,[e[18]||(e[18]=s("label",{style:{display:"block","margin-bottom":"6px",color:"var(--text-secondary)","font-size":"13px"}},"输出路径",-1)),a(K,{value:S.value,"onUpdate:value":e[3]||(e[3]=d=>S.value=d),placeholder:"输出目录,如 ./site","allow-clear":""},null,8,["value"])]),a(n,{type:"primary",loading:D.value,disabled:!S.value.trim(),onClick:H},{icon:t(()=>[a(g(le))]),default:t(()=>[e[19]||(e[19]=i(" 导出为静态站点 ",-1))]),_:1},8,["loading","disabled"])])]),_:1}),c.value?(p(),v(N,{key:0,message:_.value?"操作成功":"操作结果",description:c.value,type:_.value?"success":"info","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[4]||(e[4]=d=>c.value="")},null,8,["message","description","type"])):b("",!0),k.value?(p(),v(y,{key:1,title:"命令输出",bordered:!1,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","margin-top":"16px"}},{default:t(()=>[s("pre",ce,V(k.value),1)]),_:1})):b("",!0)]),_:1})]),_:1},8,["activeKey"]),a(Z,{open:E.value,"onUpdate:open":e[6]||(e[6]=d=>E.value=d),title:"确认自动提交","ok-text":"确认提交","cancel-text":"取消","confirm-loading":B.value,onOk:W},{default:t(()=>[...e[20]||(e[20]=[s("p",{style:{color:"var(--text-secondary)"}},[i(" 将执行 "),s("code",null,"git auto-commit"),i(" 自动提交当前所有变更。请确认工作区文件已准备就绪。 ")],-1)])]),_:1},8,["open","confirm-loading"])])}}},he=te(me,[["__scopeId","data-v-1f28d00c"]]);export{he as default};
|