chainlesschain 0.162.0 → 0.162.1
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/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-Dn8q-Cu4.js → AIOps-5A54O3wF.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BePEVs4O.js → ActionButton-epuY2GkZ.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CKp-5Gi0.js → Analytics-CIdxw7T5.js} +1 -1
- package/src/assets/web-panel/assets/{AppLayout-BSudqld0.js → AppLayout-xR6YUHsS.js} +2 -2
- package/src/assets/web-panel/assets/{Audit-iefpSeRG.js → Audit-D95nRcdZ.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-Ce43ZIhD.js → Backup-Cmw7ZTJD.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BvGiwRav.js → BaseInput-DgCEAL_E.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BAaQg-Oc.js → Chat-DAQAzZsA.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-Dvn8uxKO.js → Checkbox-GRxUANnE.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CTcZCayj.js → Codegen--6KIDt1W.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CBFpGgb5.js → Col-3s6dxuMx.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DmCYaV9M.js → Community-D60pkEBz.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DnOD5uMF.js → Compact-CQR4QsWP.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-u53e9lg-.js → Compliance-KySNEhMK.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CL5ohuXH.js → Cowork-Yrrf_Vuu.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-DubcmRgt.js → Cron-DSuuSKIQ.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-BWXcUXc3.js → Crosschain-Dub0G9i4.js} +1 -1
- package/src/assets/web-panel/assets/{DID-Cw0i8WjE.js → DID-CbpCGV51.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-BbofvIWH.js → Dashboard-D29e0y01.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DN6ur5xV.js → Dropdown-DZY7X5v2.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CA-rIdkY.js → Federation-dmrLzzMB.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-D_HGU4aA.js → FormItemContext-EopsCGez.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CBWFs6Uk.js → Git-D3mb4RhK.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-Cx6PTC43.js → Governance-8v034-Nr.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-Ubk1VstS.js → Inference-Ddl-HQwQ.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DTB10MYO.js → KnowledgeGraph-DrRruyud.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Tfk4FBVC.js → Logs-Bsu6lYQe.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-BAsztG4O.js → Marketplace-Iyf2Xc23.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DliPfvuK.js → McpTools-ljVE1lIN.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-hkw6Xwyv.js → Memory-Ca48TtDU.js} +1 -1
- package/src/assets/web-panel/assets/{MobileBridge-eeNMFGj6.js → MobileBridge-DZ3Ar6da.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BP3Riowm.js → Mtc-CRjBnVAT.js} +1 -1
- package/src/assets/web-panel/assets/{MtcAudit-DvD7pE7V.js → MtcAudit-CEC2eKez.js} +1 -1
- package/src/assets/web-panel/assets/{Multisig-CPtc-fVL.js → Multisig-BHoQvNeL.js} +1 -1
- package/src/assets/web-panel/assets/{NLProgramming-1y__Epjg.js → NLProgramming-9e5hIFvL.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CEvJqMP8.js → Notes-BEhZRadw.js} +1 -1
- package/src/assets/web-panel/assets/{NotificationSettings-wmCYm99r.js → NotificationSettings-CzPbT9UE.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CSoz8gGr.js → Organization-CvFg4VAr.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-kf1mnFrM.js → Overflow-Cm7ISeJl.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-C4GfXJ8Z.js → P2P-BWN-wdfH.js} +1 -1
- package/src/assets/web-panel/assets/{Permissions-CW1Mn95X.js → Permissions-C4vKkP_t.js} +1 -1
- package/src/assets/web-panel/assets/{Pipeline-CM1ppddn.js → Pipeline-DQCShDeT.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DuAY5fEm.js → Privacy-Nc7LlSr3.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-C72779b6.js → ProjectInit-DDkqXAED.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-CAilXWam.js → ProjectSettings-ia6GQr6A.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-DTIlVTkF.js → Projects-CNqXa5XY.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-Cf6Yv8bu.js → Providers-EwarbUb8.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CK1_VVzw.js → QuickAsk-BAHQBw0d.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-QBC7KgvR.js → Recommend-Ccgu6elV.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-ju6lWzMM.js → Reputation-ai0gRNpj.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DQwipGEm.js → Row-BWLfAhHC.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DkLGmeLW.js → RssFeed-CnuRtiQH.js} +1 -1
- package/src/assets/web-panel/assets/{Search-YYhitzkt.js → Search-Da0CvI_2.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DEllaBqe.js → Security-DEFeOeUv.js} +1 -1
- package/src/assets/web-panel/assets/{Services-BgPHBq9S.js → Services-CsfvCqCH.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-DHEyJI7c.js → Skeleton-DlRaGj_n.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-c212vgf3.js → Skills-fjlZrsYq.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-COqhw_no.js → Sla-DNSDuEt2.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Bmds06su.js → SpeechSettings-Bj0t-JCf.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Bx1_A34Y.js → SyncSettings-uO7Gy-BB.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-B0Lo_9aN.js → Tasks-BSjsO-m8.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-D0RcpfuW.js → Templates-B03SSuXn.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-G0yVctLy.js → Tenant-CTCPIBzq.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DqgLtK3c.js → Terminal-CQZcdArx.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Cdt0aqCc.js → Tokens-CsNJIdNl.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DFbfZFuJ.js → Trigger-kYPQmm6P.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BQXsWPz6.js → Trust-mt-MiBeI.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DBem5Xkj.js → UkeySign-DBi8jgXw.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B1yipKKv.js → VideoEditing-CINSMEf5.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-iPJtU5QZ.js → Wallet-DCVMgW0U.js} +1 -1
- package/src/assets/web-panel/assets/{WebAuthn-HLb9srUL.js → WebAuthn-C9OjbTBs.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-BSqXL8GD.js → WorkflowEditor-LM1HJs-S.js} +1 -1
- package/src/assets/web-panel/assets/{chat-D_J-ZVBh.js → chat-Dz68Ixdp.js} +1 -1
- package/src/assets/web-panel/assets/{colors-B126JcB4.js → colors-qf63Eax9.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Bw5EEKw4.js → compact-item-r4YWRFGQ.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-xLJXI46O.js → createContext-C8Lwrn-C.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-K8QCNlyy.js → hasIn-DsPi2kPP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFwF_JeQ.js → index-1xqIvVM5.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVeuzjxG.js → index-5nOMJaLt.js} +1 -1
- package/src/assets/web-panel/assets/{index-85lab9HJ.js → index-B0KxtBNy.js} +1 -1
- package/src/assets/web-panel/assets/index-B3blziag.js +1 -0
- package/src/assets/web-panel/assets/{index-Dt0Tp8TS.js → index-B8gs4g1v.js} +1 -1
- package/src/assets/web-panel/assets/{index-mzNWO8Yy.js → index-BFV6aAoX.js} +1 -1
- package/src/assets/web-panel/assets/{index-LZYGhjVr.js → index-BKEl9Ahm.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bptjq-wQ.js → index-BfdIkZnT.js} +1 -1
- package/src/assets/web-panel/assets/{index-sAfwWh0R.js → index-BjPHuhxG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlX09aXr.js → index-BtCSUUKm.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLZZi1Km.js → index-BxNXO95B.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWBajOcE.js → index-Bz1O2KhE.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWUG9yVI.js → index-BzzFMBIM.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_PqXUkT.js → index-C2OFaKmx.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dj8BNg-z.js → index-C3VVwJcn.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdMzLeDn.js → index-C8SY0_S8.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQ_NIMQS.js → index-CCCX2ZSH.js} +1 -1
- package/src/assets/web-panel/assets/{index-DY5Oc3z6.js → index-CEbbycgJ.js} +3 -3
- package/src/assets/web-panel/assets/{index-COCq6xuZ.js → index-CINVudo7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvNCyE3A.js → index-CKRXnUTD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da7bZewp.js → index-CSCb-EY9.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bv9odL87.js → index-CY5X4uXO.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2CgD7TN.js → index-CqmyLTa_.js} +1 -1
- package/src/assets/web-panel/assets/{index-mqHxeING.js → index-Cw48kkkH.js} +1 -1
- package/src/assets/web-panel/assets/{index-qJbfToeQ.js → index-D0mFFS7Y.js} +1 -1
- package/src/assets/web-panel/assets/index-D1XYuPHf.js +1 -0
- package/src/assets/web-panel/assets/{index-DFPVNSby.js → index-D2BR3WQ-.js} +1 -1
- package/src/assets/web-panel/assets/{index-xJkPbv0L.js → index-D4XgKgOF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CvAey6iD.js → index-DBpVVgRI.js} +1 -1
- package/src/assets/web-panel/assets/{index-zEr6BW9X.js → index-DGXVjiyF.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSgvvXgq.js → index-DQSweK5-.js} +1 -1
- package/src/assets/web-panel/assets/{index-BaXXyyT0.js → index-DXBc_lyR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZcij18m.js → index-DycrmZ_r.js} +1 -1
- package/src/assets/web-panel/assets/{index-fMwtau_-.js → index-I55BAmVG.js} +1 -1
- package/src/assets/web-panel/assets/{index-yhA-qP4Y.js → index-LQYz2tRO.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9ztiTnX.js → index-cTFVNgoS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsbKjK1o.js → index-qLyVEtRM.js} +1 -1
- package/src/assets/web-panel/assets/{index-p3d5_s7V.js → index-qcVx0s-M.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrfiELFa.js → index-wVpfPJXE.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CacwmJft.js → initDefaultProps-CAgx2aHm.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BWrP7Lz6.js → motion-DFuREFOd.js} +1 -1
- package/src/assets/web-panel/assets/{move-imnbiy1n.js → move-DfcQIXuy.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BlaOv91I.js → omit-BFZV2hmZ.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DUGKp0ro.js → pickAttrs-D98WQSur.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-P0ZA4yAK.js → placementArrow-BlP2AN9q.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CZz-M9cI.js → responsiveObserve-DuI2xGQd.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BEnICwoX.js → slide-DSvqah_S.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DdYKRSiH.js → statusUtils-B-96ZLWF.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DgUxvOQt.js → styleChecker-Br0YrCOO.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BUEmeWdR.js → useFlexGapSupport-BD4Xr9XU.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BXsj6Z5e.js → useFs-Ch5L3BnA.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-B3Pp583L.js → vnode-BQi3uWRC.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-D-LYfiQh.js → zoom-DaW-jbu7.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/assets/web-panel/assets/index-BEYypR_d.js +0 -1
- package/src/assets/web-panel/assets/index-DZWfmuM2.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as me,b as ve,u as ge,d as k}from"./index-
|
|
1
|
+
import{_ as me,b as ve,u as ge,d as k}from"./index-CEbbycgJ.js";import{R as _e,aq as be,K as he,z as xe,U as Y,a6 as ke}from"./icons-NT6gy8Ee.js";import{o as we,M as f,R,P as i,u as l,c as t,N as a,r as u,K as p,L as c,O as m,Q as O,S as g,F as Ce,Y as Ie,f as Z}from"./vendor-M5lGV-wr.js";const Re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Te={class:"page-title"},Le={class:"page-sub"},Oe={key:0,style:{"text-align":"center",padding:"60px"}},ze={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},De={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ae={key:0,style:{"margin-top":"12px"}},Ne={style:{color:"var(--text-secondary)","margin-bottom":"6px"}},Se={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)"}},We={key:0,style:{"margin-top":"8px"}},Fe={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Me={key:0,style:{"margin-top":"8px"}},Be={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Pe={key:0,style:{"text-align":"center",padding:"60px"}},Ee={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ke={key:1,style:{color:"#e0e0e0"}},Ue={key:2,style:{color:"var(--text-secondary)"}},Ve={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},$e={__name:"Security",setup(qe){const{t:e}=ve(),T=ge(),N=u("did"),M=u(!1);async function ee(){M.value=!0;try{N.value==="did"?await W():N.value==="audit"&&await J()}finally{M.value=!1}}function te(s){s==="did"&&K.value.length===0&&W(),s==="audit"&&F.value.length===0&&J()}const B=u(!1),P=u(!1),E=u(!1),K=u([]),U=u(!1),S=u(""),z=u(""),ae=Z(()=>[{title:e("security.didColumns.did"),key:"did",dataIndex:"did",ellipsis:!0},{title:e("security.didColumns.method"),key:"method",dataIndex:"method",width:"100px"},{title:e("security.didColumns.created"),key:"created",dataIndex:"created",width:"180px"},{title:e("security.didColumns.status"),key:"status",width:"80px"}]);async function W(){B.value=!0;try{const{output:s}=await T.execute("did list",15e3);K.value=se(s)}catch(s){k.error(e("security.messages.loadDidsFailed",{err:s.message}))}finally{B.value=!1}}function se(s){const o=[],_=s.split(`
|
|
2
2
|
`);for(const I of _){const n=I.trim();if(!n||n.startsWith("─")||n.startsWith("DID")||n.match(/^\d+ identit/i))continue;const d=n.match(/(did:\w+:\w+)/);if(d){const y=d[1],b=y.split(":")[1]||"key",x=/default|默认|\*/.test(n),h=n.match(/(\d{4}-\d{2}-\d{2}[\sT]?\d{2}:\d{2}(?::\d{2})?)/);o.push({key:y,did:y,method:b,created:h?h[1]:"-",isDefault:x})}}return o}async function le(){P.value=!0;try{const{output:s}=await T.execute("did create",2e4);s.includes("error")||s.includes("失败")?k.error(e("security.messages.didCreateFailed",{err:s.slice(0,120)})):(k.success(e("security.messages.didCreateOk")),await W())}catch(s){k.error(e("security.messages.didCreateFailed",{err:s.message}))}finally{P.value=!1}}async function oe(){if(!S.value.trim()){k.warning(e("security.messages.messageRequired"));return}E.value=!0,z.value="";try{const{output:s}=await T.execute(`did sign "${S.value.replace(/"/g,'\\"')}"`,15e3);z.value=s,!s.includes("error")&&!s.includes("失败")&&k.success(e("security.messages.signOk"))}catch(s){z.value=e("security.messages.signFailed",{err:s.message})}finally{E.value=!1}}const D=u(""),A=u(""),V=u(!1),$=u(!1),w=u(null),C=u(null);async function re(){if(D.value.trim()){V.value=!0,w.value=null;try{const{output:s,exitCode:o}=await T.execute(`encrypt file "${D.value.trim()}"`,3e4);w.value={success:o===0&&!s.includes("error")&&!s.includes("失败"),output:s||e("security.encrypt.encryptDefault")},w.value.success&&k.success(e("security.messages.encryptOk"))}catch(s){w.value={success:!1,output:e("security.messages.encryptFailed",{err:s.message})}}finally{V.value=!1}}}async function ie(){if(A.value.trim()){$.value=!0,C.value=null;try{const{output:s,exitCode:o}=await T.execute(`decrypt file "${A.value.trim()}"`,3e4);C.value={success:o===0&&!s.includes("error")&&!s.includes("失败"),output:s||e("security.encrypt.decryptDefault")},C.value.success&&k.success(e("security.messages.decryptOk"))}catch(s){C.value={success:!1,output:e("security.messages.decryptFailed",{err:s.message})}}finally{$.value=!1}}}const q=u(!1),F=u([]),H=u([]),ne=Z(()=>[{title:e("security.auditColumns.time"),key:"time",dataIndex:"time",width:"180px"},{title:e("security.auditColumns.event"),key:"event",dataIndex:"event",width:"200px"},{title:e("security.auditColumns.user"),key:"user",dataIndex:"user",width:"120px"},{title:e("security.auditColumns.level"),key:"level",dataIndex:"level",width:"80px"},{title:e("security.auditColumns.detail"),key:"detail",dataIndex:"detail",ellipsis:!0}]);function ce(s){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(s||"").toLowerCase()]||"default"}async function J(){q.value=!0;try{const[s,o]=await Promise.all([T.execute("audit log",15e3),T.execute("audit stats",15e3)]);F.value=ue(s.output),H.value=de(o.output)}catch(s){k.error(e("security.messages.loadAuditFailed",{err:s.message}))}finally{q.value=!1}}function ue(s){const o=[],_=s.split(`
|
|
3
3
|
`);for(const I of _){const n=I.trim();if(!n||n.startsWith("─")||n.startsWith("Audit")||n.startsWith("Recent"))continue;const d=n.split(/\s*[|│]\s*/);if(d.length>=3){o.push({key:o.length,time:d[0]||"-",event:d[1]||"-",user:d[2]||"-",level:d[3]||"info",detail:d.slice(4).join(" ")||""});continue}const y=n.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(y){const b=y[2],x=b.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);o.push({key:o.length,time:y[1],event:b.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:x?x[1].toLowerCase():"info",detail:""})}else n.length>3&&!n.match(/^\d+ event/i)&&o.push({key:o.length,time:"-",event:n.slice(0,80),user:"-",level:"info",detail:""})}return o}function de(s){const o=[],_=s.split(`
|
|
4
4
|
`),I=["#1677ff","#52c41a","#faad14","#ff4d4f"];let n=0;for(const d of _){const y=d.trim();if(!y||y.startsWith("─")||y.startsWith("Audit"))continue;const b=y.match(/^(.+?)\s*[:=:]\s*(.+)$/);if(b){const x=b[1].trim(),h=b[2].trim(),L=h.match(/^(\d+)/);o.push({label:x,value:L?parseInt(L[1],10):h,color:I[n%I.length]}),n++}}return o.length===0&&o.push({label:e("security.audit.totalEvents"),value:F.value.length,color:"#1677ff"},{label:e("security.audit.statusLabel"),value:e("security.audit.ready"),color:"#52c41a"}),o}return we(()=>{W()}),(s,o)=>{const _=p("a-button"),I=p("a-space"),n=p("a-spin"),d=p("a-tag"),y=p("a-empty"),b=p("a-table"),x=p("a-input"),h=p("a-form-item"),L=p("a-form"),pe=p("a-modal"),j=p("a-tab-pane"),G=p("a-card"),Q=p("a-col"),X=p("a-row"),ye=p("a-statistic"),fe=p("a-tabs");return c(),f("div",null,[R("div",Re,[R("div",null,[R("h2",Te,i(l(e)("security.title")),1),R("p",Le,i(l(e)("security.subtitle")),1)]),t(_,{type:"primary",ghost:"",loading:M.value,onClick:ee},{icon:a(()=>[t(l(_e))]),default:a(()=>[m(" "+i(l(e)("security.refresh")),1)]),_:1},8,["loading"])]),t(fe,{activeKey:N.value,"onUpdate:activeKey":o[5]||(o[5]=r=>N.value=r),onChange:te},{default:a(()=>[t(j,{key:"did"},{tab:a(()=>[t(l(xe)),m(" "+i(l(e)("security.tabs.did")),1)]),default:a(()=>[t(I,{style:{"margin-bottom":"16px"}},{default:a(()=>[t(_,{type:"primary",loading:P.value,onClick:le},{icon:a(()=>[t(l(be))]),default:a(()=>[m(" "+i(l(e)("security.did.createButton")),1)]),_:1},8,["loading"]),t(_,{onClick:o[0]||(o[0]=r=>U.value=!0)},{icon:a(()=>[t(l(he))]),default:a(()=>[m(" "+i(l(e)("security.did.signButton")),1)]),_:1})]),_:1}),B.value?(c(),f("div",Oe,[t(n,{size:"large"})])):(c(),O(b,{key:1,columns:ae.value,"data-source":K.value,pagination:{pageSize:20,showTotal:r=>l(e)("security.totals.rows",{count:r})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:r,record:v})=>[r.key==="did"?(c(),f("span",ze,i(v.did),1)):g("",!0),r.key==="method"?(c(),O(d,{key:1,color:"blue"},{default:a(()=>[m(i(v.method),1)]),_:2},1024)):g("",!0),r.key==="created"?(c(),f("span",De,i(v.created),1)):g("",!0),r.key==="status"?(c(),O(d,{key:3,color:v.isDefault?"green":"default"},{default:a(()=>[m(i(v.isDefault?l(e)("security.did.default"):l(e)("security.did.available")),1)]),_:2},1032,["color"])):g("",!0)]),emptyText:a(()=>[t(y,{description:l(e)("security.did.emptyText")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"])),t(pe,{open:U.value,"onUpdate:open":o[2]||(o[2]=r=>U.value=r),title:l(e)("security.did.signTitle"),"confirm-loading":E.value,onOk:oe,"ok-text":l(e)("security.did.signOk"),"cancel-text":l(e)("common.cancel")},{default:a(()=>[t(L,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[t(h,{label:l(e)("security.did.messageLabel"),required:""},{default:a(()=>[t(x,{value:S.value,"onUpdate:value":o[1]||(o[1]=r=>S.value=r),placeholder:l(e)("security.did.messagePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),z.value?(c(),f("div",Ae,[R("p",Ne,i(l(e)("security.did.signResultLabel")),1),R("pre",Se,i(z.value),1)])):g("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1}),t(j,{key:"encrypt"},{tab:a(()=>[t(l(Y)),m(" "+i(l(e)("security.tabs.encrypt")),1)]),default:a(()=>[t(X,{gutter:[24,24]},{default:a(()=>[t(Q,{xs:24,md:12},{default:a(()=>[t(G,{title:l(e)("security.encrypt.encryptCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(h,{label:l(e)("security.encrypt.pathLabel")},{default:a(()=>[t(x,{value:D.value,"onUpdate:value":o[3]||(o[3]=r=>D.value=r),placeholder:l(e)("security.encrypt.encryptPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(h,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(_,{type:"primary",loading:V.value,disabled:!D.value.trim(),onClick:re},{icon:a(()=>[t(l(Y))]),default:a(()=>[m(" "+i(l(e)("security.encrypt.encryptButton")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),w.value?(c(),f("div",We,[t(d,{color:w.value.success?"green":"red"},{default:a(()=>[m(i(w.value.success?l(e)("security.encrypt.successTag"):l(e)("security.encrypt.failureTag")),1)]),_:1},8,["color"]),R("pre",Fe,i(w.value.output),1)])):g("",!0)]),_:1},8,["title"])]),_:1}),t(Q,{xs:24,md:12},{default:a(()=>[t(G,{title:l(e)("security.encrypt.decryptCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(h,{label:l(e)("security.encrypt.pathLabel")},{default:a(()=>[t(x,{value:A.value,"onUpdate:value":o[4]||(o[4]=r=>A.value=r),placeholder:l(e)("security.encrypt.decryptPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(h,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(_,{type:"primary",loading:$.value,disabled:!A.value.trim(),onClick:ie},{icon:a(()=>[t(l(Y))]),default:a(()=>[m(" "+i(l(e)("security.encrypt.decryptButton")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),C.value?(c(),f("div",Me,[t(d,{color:C.value.success?"green":"red"},{default:a(()=>[m(i(C.value.success?l(e)("security.encrypt.successTag"):l(e)("security.encrypt.failureTag")),1)]),_:1},8,["color"]),R("pre",Be,i(C.value.output),1)])):g("",!0)]),_:1},8,["title"])]),_:1})]),_:1})]),_:1}),t(j,{key:"audit"},{tab:a(()=>[t(l(ke)),m(" "+i(l(e)("security.tabs.audit")),1)]),default:a(()=>[t(X,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(c(!0),f(Ce,null,Ie(H.value,r=>(c(),O(Q,{xs:12,sm:6,key:r.label},{default:a(()=>[t(G,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[t(ye,{title:r.label,value:r.value,"value-style":{color:r.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),q.value?(c(),f("div",Pe,[t(n,{size:"large"})])):(c(),O(b,{key:1,columns:ne.value,"data-source":F.value,pagination:{pageSize:20,showTotal:r=>l(e)("security.totals.rows",{count:r})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:r,record:v})=>[r.key==="time"?(c(),f("span",Ee,i(v.time),1)):g("",!0),r.key==="event"?(c(),f("span",Ke,i(v.event),1)):g("",!0),r.key==="user"?(c(),f("span",Ue,i(v.user),1)):g("",!0),r.key==="level"?(c(),O(d,{key:3,color:ce(v.level)},{default:a(()=>[m(i(v.level),1)]),_:2},1032,["color"])):g("",!0),r.key==="detail"?(c(),f("span",Ve,i(v.detail),1)):g("",!0)]),emptyText:a(()=>[t(y,{description:l(e)("security.audit.emptyText")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Ye=me($e,[["__scopeId","data-v-e07c8b3b"]]);export{Ye as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as K,u as Q}from"./index-
|
|
1
|
+
import{_ as K,u as Q}from"./index-CEbbycgJ.js";import{R as q,V as J,n as V,ab as U,f as X,ap as Y,l as Z}from"./icons-NT6gy8Ee.js";import{o as ee,M as d,R as m,c as e,N as t,r,K as n,L as s,O as y,u as c,P as u,S as g,Q as $,f as te}from"./vendor-M5lGV-wr.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=Q(),N=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),W=r(""),z=r(!1),L=r(""),k=r(""),D=r(""),M=r(!1),h=r(""),w=r(""),B=r([]),R=te(()=>S.status==="connected"),E=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function I(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);W.value=o,F(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function F(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(L.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],D.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
|
|
2
2
|
`).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));B.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function P(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee(I),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),T=n("a-tag"),j=n("a-spin"),A=n("a-badge"),G=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:I},{icon:t(()=>[e(c(q))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(J))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",ae,"版本: "+u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c(V))]),_:1}),m("div",re," 端口: "+u(c(N).wsPort||18800)+" · "+u(c(N).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(U))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",le,u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(X))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(T,{color:R.value?"green":"red"},{default:t(()=>[y(" WS "+u(R.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(j)])):(s(),$(G,{key:1,columns:E,"data-source":B.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),$(A,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:P,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Y))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Z))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(V))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},be=K(pe,[["__scopeId","data-v-13be6bfe"]]);export{be as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as C,l as N,m as D,h as o,K as G,q as W}from"./index-
|
|
1
|
+
import{i as C,l as N,m as D,h as o,K as G,q as W}from"./index-CEbbycgJ.js";import{i as j}from"./initDefaultProps-CAgx2aHm.js";import{d as I,c}from"./vendor-M5lGV-wr.js";const z=()=>({prefixCls:String,width:{type:[Number,String]}}),O=I({compatConfig:{MODE:3},name:"SkeletonTitle",props:z(),setup(e){return()=>{const{prefixCls:t,width:n}=e,r=typeof n=="number"?`${n}px`:n;return c("h3",{class:t,style:{width:r}},null)}}}),X=()=>({prefixCls:String,width:{type:[Number,String,Array]},rows:Number}),q=I({compatConfig:{MODE:3},name:"SkeletonParagraph",props:X(),setup(e){const t=n=>{const{width:r,rows:l=2}=e;if(Array.isArray(r))return r[n];if(l-1===n)return r};return()=>{const{prefixCls:n,rows:r}=e,l=[...Array(r)].map((i,a)=>{const d=t(a);return c("li",{key:a,style:{width:typeof d=="number"?`${d}px`:d}},null)});return c("ul",{class:n},[l])}}}),ie=()=>({prefixCls:String,size:[String,Number],shape:String,active:{type:Boolean,default:void 0}}),L=e=>{const{prefixCls:t,size:n,shape:r}=e,l=C({[`${t}-lg`]:n==="large",[`${t}-sm`]:n==="small"}),i=C({[`${t}-circle`]:r==="circle",[`${t}-square`]:r==="square",[`${t}-round`]:r==="round"}),a=typeof n=="number"?{width:`${n}px`,height:`${n}px`,lineHeight:`${n}px`}:{};return c("span",{class:C(t,l,i),style:a},null)};L.displayName="SkeletonElement";const F=new G("ant-skeleton-loading",{"0%":{transform:"translateX(-37.5%)"},"100%":{transform:"translateX(37.5%)"}}),v=e=>({height:e,lineHeight:`${e}px`}),m=e=>o({width:e},v(e)),_=e=>({position:"relative",zIndex:0,overflow:"hidden",background:"transparent","&::after":{position:"absolute",top:0,insetInlineEnd:"-150%",bottom:0,insetInlineStart:"-150%",background:e.skeletonLoadingBackground,animationName:F,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite",content:'""'}}),P=e=>o({width:e*5,minWidth:e*5},v(e)),K=e=>{const{skeletonAvatarCls:t,color:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i}=e;return{[`${t}`]:o({display:"inline-block",verticalAlign:"top",background:n},m(r)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:o({},m(l)),[`${t}${t}-sm`]:o({},m(i))}},V=e=>{const{controlHeight:t,borderRadiusSM:n,skeletonInputCls:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return{[`${r}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:n},P(t)),[`${r}-lg`]:o({},P(l)),[`${r}-sm`]:o({},P(i))}},M=e=>o({width:e},v(e)),J=e=>{const{skeletonImageCls:t,imageSizeBase:n,color:r,borderRadiusSM:l}=e;return{[`${t}`]:o(o({display:"flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",background:r,borderRadius:l},M(n*2)),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:o(o({},M(n)),{maxWidth:n*4,maxHeight:n*4}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}},x=(e,t,n)=>{const{skeletonButtonCls:r}=e;return{[`${n}${r}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${n}${r}-round`]:{borderRadius:t}}},E=e=>o({width:e*2,minWidth:e*2},v(e)),Q=e=>{const{borderRadiusSM:t,skeletonButtonCls:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return o(o(o(o(o({[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:t,width:r*2,minWidth:r*2},E(r))},x(e,r,n)),{[`${n}-lg`]:o({},E(l))}),x(e,l,`${n}-lg`)),{[`${n}-sm`]:o({},E(i))}),x(e,i,`${n}-sm`))},U=e=>{const{componentCls:t,skeletonAvatarCls:n,skeletonTitleCls:r,skeletonParagraphCls:l,skeletonButtonCls:i,skeletonInputCls:a,skeletonImageCls:d,controlHeight:y,controlHeightLG:f,controlHeightSM:p,color:g,padding:w,marginSM:B,borderRadius:s,skeletonTitleHeight:h,skeletonBlockRadius:u,skeletonParagraphLineHeight:$,controlHeightXS:k,skeletonParagraphMarginTop:S}=e;return{[`${t}`]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:w,verticalAlign:"top",[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:g},m(y)),[`${n}-circle`]:{borderRadius:"50%"},[`${n}-lg`]:o({},m(f)),[`${n}-sm`]:o({},m(p))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[`${r}`]:{width:"100%",height:h,background:g,borderRadius:u,[`+ ${l}`]:{marginBlockStart:p}},[`${l}`]:{padding:0,"> li":{width:"100%",height:$,listStyle:"none",background:g,borderRadius:u,"+ li":{marginBlockStart:k}}},[`${l}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${r}, ${l} > li`]:{borderRadius:s}}},[`${t}-with-avatar ${t}-content`]:{[`${r}`]:{marginBlockStart:B,[`+ ${l}`]:{marginBlockStart:S}}},[`${t}${t}-element`]:o(o(o(o({display:"inline-block",width:"auto"},Q(e)),K(e)),V(e)),J(e)),[`${t}${t}-block`]:{width:"100%",[`${i}`]:{width:"100%"},[`${a}`]:{width:"100%"}},[`${t}${t}-active`]:{[`
|
|
2
2
|
${r},
|
|
3
3
|
${l} > li,
|
|
4
4
|
${n},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{E as q,r as v,f as h,o as B,M as m,R as i,P as y,u as n,c as r,N as d,F as C,Y as L,K as p,I as E,L as c,O as g,Q as M}from"./vendor-M5lGV-wr.js";import{u as N,_ as Q}from"./index-
|
|
1
|
+
import{E as q,r as v,f as h,o as B,M as m,R as i,P as y,u as n,c as r,N as d,F as C,Y as L,K as p,I as E,L as c,O as g,Q as M}from"./vendor-M5lGV-wr.js";import{u as N,_ as Q}from"./index-CEbbycgJ.js";import{u as j}from"./useShellMode-CgR0wCYM.js";import{p as F}from"./parsers-DftYMnlk.js";import{u as V}from"./chat-Dz68Ixdp.js";import{m as $,R as P,ao as T}from"./icons-NT6gy8Ee.js";const U=q("skills",()=>{const _=v(!1),t=v([]),u=v(""),f=v("all"),x=h(()=>{const a=new Set(["all"]);return t.value.forEach(o=>{o.category&&a.add(o.category),o.executionMode&&a.add(o.executionMode)}),[...a]}),k=h(()=>{let a=t.value;if(f.value!=="all"&&(a=a.filter(o=>o.category===f.value||o.executionMode===f.value)),u.value){const o=u.value.toLowerCase();a=a.filter(l=>l.name?.toLowerCase().includes(o)||l.description?.toLowerCase().includes(o)||l.title?.toLowerCase().includes(o))}return a});async function b(){const a=N();_.value=!0;try{if(j().isEmbedded){const e=await a.sendRaw({type:"skill.list"},2e4);e?.ok&&Array.isArray(e.result?.skills)?t.value=e.result.skills:(console.error("skill.list custom topic failed:",e?.error),t.value=[]);return}const{output:o}=await a.execute("skill list",2e4),l=F(o);t.value=l}catch(o){console.error("Failed to load skills:",o)}finally{_.value=!1}}return{loading:_,allSkills:t,searchQuery:u,selectedCategory:f,categories:x,filteredSkills:k,loadSkills:b}}),D={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},K={class:"page-sub"},W={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},Y={key:0,style:{"text-align":"center",padding:"60px"}},G={key:1,class:"skills-grid"},H={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},J={style:{flex:"1","min-width":"0"}},X={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Z={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},ee={style:{"margin-left":"12px","flex-shrink":"0"}},te={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},le={key:2,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},oe={__name:"Skills",setup(_){const t=U(),u=V(),f=E(),x=h(()=>t.categories.filter(l=>l!=="all").slice(0,6));function k(l){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[l]||l}function b(l){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[l]||l||"未知"}function a(l){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[l]||"default"}async function o(l){await u.createSession("agent"),f.push("/chat"),setTimeout(()=>{u.currentSessionId&&u.sendMessage(u.currentSessionId,`/skill run ${l}`)},300)}return B(()=>{t.allSkills.length||t.loadSkills()}),(l,e)=>{const S=p("a-button"),z=p("a-input-search"),w=p("a-radio-button"),I=p("a-radio-group"),A=p("a-spin"),O=p("a-tag"),R=p("a-card");return c(),m("div",null,[i("div",D,[i("div",null,[e[3]||(e[3]=i("h2",{class:"page-title"},"技能管理",-1)),i("p",K,y(n(t).allSkills.length)+" 个可用技能",1)]),r(S,{type:"primary",ghost:"",loading:n(t).loading,onClick:e[0]||(e[0]=s=>n(t).loadSkills())},{icon:d(()=>[r(n(P))]),default:d(()=>[e[4]||(e[4]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),i("div",W,[r(z,{value:n(t).searchQuery,"onUpdate:value":e[1]||(e[1]=s=>n(t).searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),r(I,{value:n(t).selectedCategory,"onUpdate:value":e[2]||(e[2]=s=>n(t).selectedCategory=s),"button-style":"solid"},{default:d(()=>[r(w,{value:"all"},{default:d(()=>[...e[5]||(e[5]=[g("全部",-1)])]),_:1}),(c(!0),m(C,null,L(x.value,s=>(c(),M(w,{key:s,value:s},{default:d(()=>[g(y(k(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),n(t).loading?(c(),m("div",Y,[r(A,{size:"large"}),e[6]||(e[6]=i("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):n(t).filteredSkills.length?(c(),m("div",G,[(c(!0),m(C,null,L(n(t).filteredSkills,s=>(c(),M(R,{key:s.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:d(()=>[i("div",H,[i("div",J,[i("div",X,y(s.name),1),i("div",Z,y(s.description||"暂无描述"),1)]),i("div",ee,[r(O,{color:a(s.executionMode),style:{"font-size":"10px"}},{default:d(()=>[g(y(b(s.executionMode)),1)]),_:2},1032,["color"])])]),i("div",te,[r(S,{size:"small",type:"primary",ghost:"",onClick:se=>o(s.name)},{icon:d(()=>[r(n(T))]),default:d(()=>[e[7]||(e[7]=g(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])):(c(),m("div",le,[r(n($),{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),i("div",null,y(n(t).allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)]))])}}},ce=Q(oe,[["__scopeId","data-v-a1cd8dd9"]]);export{ce as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as _t,u as gt,b as kt,E as xt,d as h}from"./index-DY5Oc3z6.js";import{s as Je}from"./community-parser-CO25nZFt.js";import{R as ht,aQ as Ct,aq as St,aR as Me,f as Be,O as $t,ak as Tt,aG as It}from"./icons-NT6gy8Ee.js";import{o as zt,M as d,R as g,P as i,c as o,N as l,Q as S,S as y,K as b,r as k,L as u,O as m,u as x,F,Y as D,_ as At,f as P,a as Pe}from"./vendor-M5lGV-wr.js";function N(n){const r=Je(n);if(!r)return null;try{return JSON.parse(r)}catch{}const a=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!a)return null;try{return JSON.parse(a[0])}catch{return null}}const me=Object.freeze(["gold","silver","bronze"]),ze=Object.freeze(["active","expired","terminated"]),pe=Object.freeze(["availability","response_time","throughput","error_rate"]),se=Object.freeze(["minor","moderate","major","critical"]),Ft=Object.freeze(["open","acknowledged","resolved","waived"]);function p(n,r=0){return typeof n=="number"&&Number.isFinite(n)?n:r}function W(n){if(!n)return{noDb:!1,error:""};const r=Je(n),a=/Database not available/i.test(r);return{noDb:a,error:a?"Database not available":""}}function wt(n,r=0){if(!n||typeof n!="object")return null;const a=n.name||"";return a?{key:a,name:a,availability:p(n.availability,0),maxResponseTime:p(n.maxResponseTime,0),minThroughput:p(n.minThroughput,0),maxErrorRate:p(n.maxErrorRate,0),compensationRate:p(n.compensationRate,0),_idx:r}:null}function Ot(n){const r=N(n);return Array.isArray(r)?r.map(wt).filter(Boolean):[]}function jt(n){const r={availability:0,maxResponseTime:0,minThroughput:0,maxErrorRate:0,compensationRate:0};return!n||typeof n!="object"||Array.isArray(n)?r:{availability:p(n.availability,0),maxResponseTime:p(n.maxResponseTime,0),minThroughput:p(n.minThroughput,0),maxErrorRate:p(n.maxErrorRate,0),compensationRate:p(n.compensationRate,0)}}function qe(n,r=0){if(!n||typeof n!="object")return null;const a=n.slaId||n.sla_id||"";return a?{key:a,slaId:a,orgId:String(n.orgId??n.org_id??""),tier:String(n.tier||"").toLowerCase(),terms:jt(n.terms),monthlyFee:p(n.monthlyFee??n.monthly_fee,0),startDate:n.startDate??n.start_date??null,endDate:n.endDate??n.end_date??null,status:String(n.status||"active").toLowerCase(),createdAt:n.createdAt??n.created_at??null,updatedAt:n.updatedAt??n.updated_at??null,_idx:r}:null}function Rt(n){const r=N(n);return Array.isArray(r)?r.map(qe).filter(Boolean):[]}function Dt(n){const r=N(n);return!r||typeof r!="object"||Array.isArray(r)?null:qe(r,0)}function He(n){return!n||typeof n!="object"?null:{count:p(n.count,0),mean:p(n.mean,0),min:p(n.min,0),max:p(n.max,0),p95:p(n.p95,0)}}function Vt(n){const r=N(n);if(!r||typeof r!="object"||Array.isArray(r))return{slaId:"",totalSamples:0,byTerm:{}};const a={};if(r.byTerm&&typeof r.byTerm=="object")for(const[f,_]of Object.entries(r.byTerm)){const w=He(_);w&&(a[f]=w)}return{slaId:String(r.slaId||""),totalSamples:p(r.totalSamples,0),byTerm:a}}function Ke(n,r=0){if(!n||typeof n!="object")return null;const a=n.violationId||n.violation_id||"";return a?{key:a,violationId:a,slaId:String(n.slaId??n.sla_id??""),term:String(n.term||"").toLowerCase(),severity:String(n.severity||"minor").toLowerCase(),expectedValue:p(n.expectedValue??n.expected_value,0),actualValue:p(n.actualValue??n.actual_value,0),deviationPercent:p(n.deviationPercent??n.deviation_percent,0),compensationAmount:typeof n.compensationAmount=="number"?n.compensationAmount:typeof n.compensation_amount=="number"?n.compensation_amount:null,occurredAt:n.occurredAt??n.occurred_at??null,resolvedAt:n.resolvedAt??n.resolved_at??null,v2Status:n.v2Status?String(n.v2Status).toLowerCase():"open",v2Note:n.v2Note??"",_idx:r}:null}function Lt(n){const r=N(n);return Array.isArray(r)?r.map(Ke).filter(Boolean):[]}function Et(n){const r=N(n);return!r||typeof r!="object"||Array.isArray(r)?{slaId:"",checkedAt:null,totalViolations:0,violations:[]}:{slaId:String(r.slaId||""),checkedAt:r.checkedAt??null,totalViolations:p(r.totalViolations,0),violations:Array.isArray(r.violations)?r.violations.map(Ke).filter(Boolean):[]}}function Nt(n){const r=N(n);return!r||typeof r!="object"||Array.isArray(r)?null:{violationId:String(r.violationId||""),slaId:String(r.slaId||""),severity:String(r.severity||""),base:p(r.base,0),multiplier:p(r.multiplier,0),amount:p(r.amount,0)}}const Ut={slaId:"",tier:"",compliance:0,startDate:null,endDate:null,metricsByTerm:{},violations:{total:0,byTerm:{},bySeverity:{},totalCompensation:0}};function Mt(n){const r=JSON.parse(JSON.stringify(Ut));for(const f of pe)r.violations.byTerm[f]=0;for(const f of se)r.violations.bySeverity[f]=0;const a=N(n);if(!a||typeof a!="object"||Array.isArray(a))return r;if(r.slaId=String(a.slaId||""),r.tier=String(a.tier||"").toLowerCase(),r.compliance=p(a.compliance,0),r.startDate=a.startDate??null,r.endDate=a.endDate??null,a.metricsByTerm&&typeof a.metricsByTerm=="object")for(const[f,_]of Object.entries(a.metricsByTerm)){const w=He(_);w&&(r.metricsByTerm[f]=w)}if(a.violations&&typeof a.violations=="object"){if(r.violations.total=p(a.violations.total,0),r.violations.totalCompensation=p(a.violations.totalCompensation,0),a.violations.byTerm&&typeof a.violations.byTerm=="object")for(const[f,_]of Object.entries(a.violations.byTerm))typeof _=="number"&&Number.isFinite(_)&&(r.violations.byTerm[f]=_);if(a.violations.bySeverity&&typeof a.violations.bySeverity=="object")for(const[f,_]of Object.entries(a.violations.bySeverity))typeof _=="number"&&Number.isFinite(_)&&(r.violations.bySeverity[f]=_)}return r}const Bt={totalContracts:0,activeContracts:0,activeOrgs:0,maxActiveSlasPerOrg:0,byStatus:{},byTier:{},violations:{total:0,byTerm:{},bySeverity:{},byStatus:{},totalCompensation:0}};function Pt(n){const r=JSON.parse(JSON.stringify(Bt));for(const f of ze)r.byStatus[f]=0;for(const f of me)r.byTier[f]=0;for(const f of pe)r.violations.byTerm[f]=0;for(const f of se)r.violations.bySeverity[f]=0;for(const f of Ft)r.violations.byStatus[f]=0;const a=N(n);if(!a||typeof a!="object"||Array.isArray(a))return r;if(r.totalContracts=p(a.totalContracts,0),r.activeContracts=p(a.activeContracts,0),r.activeOrgs=p(a.activeOrgs,0),r.maxActiveSlasPerOrg=p(a.maxActiveSlasPerOrg,0),a.byStatus&&typeof a.byStatus=="object")for(const[f,_]of Object.entries(a.byStatus))typeof _=="number"&&Number.isFinite(_)&&(r.byStatus[f]=_);if(a.byTier&&typeof a.byTier=="object")for(const[f,_]of Object.entries(a.byTier))typeof _=="number"&&Number.isFinite(_)&&(r.byTier[f]=_);if(a.violations&&typeof a.violations=="object"){r.violations.total=p(a.violations.total,0),r.violations.totalCompensation=p(a.violations.totalCompensation,0);for(const f of["byTerm","bySeverity","byStatus"])if(a.violations[f]&&typeof a.violations[f]=="object")for(const[_,w]of Object.entries(a.violations[f]))typeof w=="number"&&Number.isFinite(w)&&(r.violations[f][_]=w)}return r}function Ie(n){if(n==null||n==="")return"—";const r=typeof n=="number"?new Date(n):new Date(String(n));return isNaN(r.getTime())?String(n):r.toLocaleString("zh-CN",{hour12:!1})}const Jt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},qt={class:"page-title"},Ht={class:"page-sub"},Kt={class:"tier-head"},Gt={class:"tier-comp"},Qt={class:"tier-terms"},Wt={class:"tier-term"},Yt={class:"tier-term"},Xt={class:"tier-term"},Zt={class:"tier-term"},ea={class:"filter-bar"},ta={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},aa={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},oa={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},la={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},sa={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},na={class:"filter-bar"},ra={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},ia={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ua={key:5,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ca={key:0,style:{color:"#faad14","font-weight":"500"}},da={key:1,style:{color:"var(--text-muted)"}},ma={key:7,style:{color:"var(--text-secondary)","font-size":"11px"}},pa={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},fa={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},va={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},ya={key:0,style:{"padding-top":"8px"}},ba={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 10px"}},_a={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ga={key:2,style:{"font-family":"monospace","font-size":"12px"}},ka={key:0,style:{"padding-top":"8px"}},xa={style:{"margin-left":"8px","font-family":"monospace","font-size":"12px"}},ha={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},Ca={style:{"margin-left":"auto",color:"#ff4d4f","font-weight":"500"}},Sa={key:0,style:{"padding-top":"8px"}},$a={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Ta={key:0,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Ia={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},za={key:2,style:{"font-family":"monospace","font-size":"12px"}},Aa={key:0,style:{"padding-top":"8px"}},Fa={style:{"font-family":"monospace","font-size":"12px"}},wa={style:{"font-family":"monospace"}},Oa={style:{"font-family":"monospace"}},ja={style:{color:"#faad14","font-weight":"600","font-family":"monospace","font-size":"14px"}},Ra={__name:"Sla",setup(n){const r=gt(),{t:a}=kt(),f=xt.PRESENTED_IMAGE_SIMPLE,_=k(!1),w=k(!1),fe=k(!1),Ae=k([]),ve=k([]),Fe=k([]),C=k({totalContracts:0,activeContracts:0,activeOrgs:0,maxActiveSlasPerOrg:0,byStatus:{},byTier:{},violations:{total:0,byTerm:{},bySeverity:{},byStatus:{},totalCompensation:0}}),ye=k({noDb:!1,error:""}),we=k("contracts"),Y=k(""),X=k(""),Z=k(""),ne=k(!1),re=k(!1),be=k(!1),_e=k(!1),ge=k(!1),ie=k(!1),$=Pe({orgId:"",tier:"silver",monthlyFee:1e3,durationDays:30}),T=Pe({slaId:null,term:"availability",value:null}),I=k(null),ee=k({slaId:"",totalSamples:0,byTerm:{}}),V=k(null),A=k(null),ke=k(null),j=k(null),Ge=P(()=>[{title:a("sla.contractCols.slaId"),key:"slaId",width:"120px"},{title:a("sla.contractCols.orgId"),key:"orgId",width:"160px"},{title:a("sla.contractCols.tier"),key:"tier",width:"90px"},{title:a("sla.contractCols.status"),key:"status",width:"100px"},{title:a("sla.contractCols.monthlyFee"),key:"monthlyFee",width:"110px"},{title:a("sla.contractCols.endDate"),key:"endDate",width:"160px"},{title:a("sla.contractCols.action"),key:"action",width:"260px"}]),Qe=P(()=>[{title:a("sla.violationCols.id"),key:"violationId",width:"120px"},{title:a("sla.violationCols.term"),key:"term",width:"140px"},{title:a("sla.violationCols.severity"),key:"severity",width:"100px"},{title:a("sla.violationCols.deviation"),key:"deviation",width:"180px"},{title:a("sla.violationCols.expected"),key:"expected",width:"110px"},{title:a("sla.violationCols.actual"),key:"actual",width:"110px"},{title:a("sla.violationCols.compensation"),key:"compensation",width:"110px"},{title:a("sla.violationCols.occurredAt"),key:"occurredAt",width:"160px"},{title:a("sla.violationCols.action"),key:"action",width:"120px"}]),Oe=P(()=>[{title:a("sla.aggCols.term"),key:"term",width:"140px"},{title:a("sla.aggCols.expected"),key:"expected",width:"110px"},{title:a("sla.aggCols.mean"),key:"mean",width:"110px"},{title:a("sla.aggCols.p95"),key:"p95",width:"110px"},{title:a("sla.aggCols.min"),key:"min",width:"110px"},{title:a("sla.aggCols.max"),key:"max",width:"110px"},{title:a("sla.aggCols.count"),key:"count",width:"90px"}]),We=P(()=>{let e=ve.value;return Y.value&&(e=e.filter(s=>s.tier===Y.value)),X.value&&(e=e.filter(s=>s.status===X.value)),e}),Ye=P(()=>{let e=Fe.value;return Z.value&&(e=e.filter(s=>s.severity===Z.value)),e}),Xe=P(()=>I.value?Object.entries(ee.value.byTerm).map(([e,s])=>({key:e,term:e,expected:je(I.value.terms,e),...s})):[]),Ze=P(()=>!A.value||!I.value?[]:Object.entries(A.value.metricsByTerm).map(([e,s])=>({key:e,term:e,expected:je(I.value.terms,e),...s})));function je(e,s){if(!e)return 0;switch(s){case"availability":return e.availability;case"response_time":return e.maxResponseTime;case"throughput":return e.minThroughput;case"error_rate":return e.maxErrorRate;default:return 0}}function ue(e){return{gold:"gold",silver:"default",bronze:"orange"}[e]||"default"}function Re(e){return{gold:"#faad14",silver:"#8c8c8c",bronze:"#d4a373"}[e]||"#888"}function xe(e){const s=`sla.statusLabels.${e}`,v=a(s);return v===s?e:v}function De(e){return{active:"green",expired:"default",terminated:"red"}[e]||"default"}function et(e){return{active:"#52c41a",expired:"#888",terminated:"#ff4d4f"}[e]||"#888"}function J(e){const s=`sla.termLabels.${e}`,v=a(s);return v===s?e:v}function tt(e){if(!e)return"";const s=`sla.termHints.${e}`,v=a(s);return v===s?"":v}function U(e,s){return typeof s!="number"||!Number.isFinite(s)?"—":e==="availability"||e==="error_rate"?(s*100).toFixed(3)+"%":e==="response_time"?s.toFixed(1)+"ms":e==="throughput"?s.toFixed(0)+" rps":s.toFixed(4)}function q(e){const s=`sla.severityLabels.${e}`,v=a(s);return v===s?e:v}function te(e){return{minor:"default",moderate:"gold",major:"orange",critical:"red"}[e]||"default"}function he(e){return{minor:"#888",moderate:"#faad14",major:"#fa8c16",critical:"#ff4d4f"}[e]||"#888"}function at(e){return e>=.99?"#52c41a":e>=.9?"#1677ff":e>=.7?"#faad14":"#ff4d4f"}function ae(e,s){return s?Math.round(e/s*100):0}async function H(){_.value=!0,ye.value={noDb:!1,error:""};try{const[e,s,v,oe]=await Promise.all([r.execute("sla tiers --json",8e3).catch(()=>({output:""})),r.execute("sla list --limit 200 --json",1e4).catch(()=>({output:""})),r.execute("sla violations --limit 200 --json",1e4).catch(()=>({output:""})),r.execute("sla stats-v2",8e3).catch(()=>({output:""}))]),M=[s,v,oe].map(O=>W(O.output)).find(O=>O.noDb);M&&(ye.value=M),Ae.value=Ot(e.output),ve.value=Rt(s.output),Fe.value=Lt(v.output),C.value=Pt(oe.output)}catch(e){h.error(a("sla.msg.loadFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function ot(){if(!$.orgId.trim()){h.warning(a("sla.msg.orgEmpty"));return}w.value=!0;try{const e=$.durationDays*24*60*60*1e3,s=[`sla create "${$.orgId.trim().replace(/"/g,'\\"')}"`,`-t ${$.tier}`,`-d ${e}`,`-f ${$.monthlyFee||0}`,"--json"],{output:v}=await r.execute(s.join(" "),1e4);if(W(v).noDb){h.error(a("sla.msg.needCcInit"));return}const M=Dt(v);if(!M){h.error(a("sla.msg.createFailed")+": "+v.slice(0,120));return}h.success(a("sla.msg.createSuccess",{id:M.slaId.slice(0,8)})),ne.value=!1,Ve(),await H()}catch(e){h.error(a("sla.msg.createFailed")+": "+(e?.message||e))}finally{w.value=!1}}async function lt(){if(!T.slaId){h.warning(a("sla.msg.slaEmpty"));return}if(T.value===null||T.value===void 0){h.warning(a("sla.msg.valueEmpty"));return}fe.value=!0;try{const{output:e}=await r.execute(`sla record ${T.slaId} ${T.term} ${T.value} --json`,8e3);if(W(e).noDb){h.error(a("sla.msg.needCcInit"));return}if(!/"metricId"|"term"/.test(e)){h.error(a("sla.msg.recordFailed")+": "+e.slice(0,120));return}h.success(a("sla.msg.recordSuccess")),re.value=!1,Le()}catch(e){h.error(a("sla.msg.recordFailed")+": "+(e?.message||e))}finally{fe.value=!1}}async function st(e){try{const{output:s}=await r.execute(`sla terminate ${e.slaId}`,8e3);if(W(s).noDb){h.error(a("sla.msg.needCcInit"));return}if(/Failed/i.test(s)&&!/terminated/i.test(s)){h.error(a("sla.msg.terminateFailed")+": "+s.slice(0,120));return}h.success(a("sla.msg.terminateSuccess")),await H()}catch(s){h.error(a("sla.msg.terminateFailed")+": "+(s?.message||s))}}async function nt(e){I.value=e,ee.value={slaId:"",totalSamples:0,byTerm:{}},be.value=!0;try{const{output:s}=await r.execute(`sla metrics ${e.slaId} --json`,8e3);ee.value=Vt(s)}catch(s){h.error(a("sla.msg.loadMetricsFailed")+": "+(s?.message||s))}}async function rt(e){I.value=e,V.value=null,_e.value=!0;try{const{output:s}=await r.execute(`sla check ${e.slaId} --json`,1e4);if(W(s).noDb){h.error(a("sla.msg.needCcInit"));return}V.value=Et(s),V.value.totalViolations>0&&await H()}catch(s){h.error(a("sla.msg.checkFailed")+": "+(s?.message||s))}}async function it(e){I.value=e,A.value=null,ge.value=!0;try{const{output:s}=await r.execute(`sla report ${e.slaId} --json`,1e4);A.value=Mt(s)}catch(s){h.error(a("sla.msg.loadReportFailed")+": "+(s?.message||s))}}async function ut(e){ke.value=e,j.value=null;try{const{output:s}=await r.execute(`sla compensate ${e.violationId} --json`,8e3);if(W(s).noDb){h.error(a("sla.msg.needCcInit"));return}if(j.value=Nt(s),!j.value){h.error(a("sla.msg.compFailed")+": "+s.slice(0,120));return}ie.value=!0,await H()}catch(s){h.error(a("sla.msg.compFailed")+": "+(s?.message||s))}}function ct(e){ke.value=e,j.value={violationId:e.violationId,slaId:e.slaId,severity:e.severity,base:0,multiplier:0,amount:e.compensationAmount||0},ie.value=!0}function Ve(){$.orgId="",$.tier="silver",$.monthlyFee=1e3,$.durationDays=30}function Le(){T.slaId=null,T.term="availability",T.value=null}return zt(H),(e,s)=>{const v=b("a-button"),oe=b("a-space"),M=b("a-alert"),O=b("a-statistic"),L=b("a-card"),R=b("a-col"),ce=b("a-row"),z=b("a-tag"),K=b("a-radio-button"),Ce=b("a-radio-group"),dt=b("a-popconfirm"),de=b("a-table"),Se=b("a-tab-pane"),G=b("a-progress"),mt=b("a-tabs"),pt=b("a-input"),B=b("a-form-item"),Ee=b("a-select-option"),$e=b("a-select"),Te=b("a-input-number"),Ne=b("a-form"),Q=b("a-modal"),E=b("a-descriptions-item"),Ue=b("a-descriptions"),ft=b("a-empty"),vt=b("a-result"),yt=b("a-list-item"),bt=b("a-list");return u(),d("div",null,[g("div",Jt,[g("div",null,[g("h2",qt,i(e.$t("sla.title")),1),g("p",Ht,i(e.$t("sla.subtitle")),1)]),o(oe,null,{default:l(()=>[o(v,{loading:_.value,onClick:H},{icon:l(()=>[o(x(ht))]),default:l(()=>[m(" "+i(e.$t("sla.refresh")),1)]),_:1},8,["loading"]),o(v,{onClick:s[0]||(s[0]=t=>re.value=!0)},{icon:l(()=>[o(x(Ct))]),default:l(()=>[m(" "+i(e.$t("sla.recordMetric")),1)]),_:1}),o(v,{type:"primary",onClick:s[1]||(s[1]=t=>ne.value=!0)},{icon:l(()=>[o(x(St))]),default:l(()=>[m(" "+i(e.$t("sla.create")),1)]),_:1})]),_:1})]),ye.value.noDb?(u(),S(M,{key:0,type:"info","show-icon":"",message:e.$t("sla.noDb.message"),description:e.$t("sla.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):y("",!0),o(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[o(R,{xs:12,sm:8,lg:5},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.totalContracts"),value:C.value.totalContracts,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:l(()=>[o(x(Me))]),_:1},8,["title","value"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.active"),value:C.value.activeContracts,"value-style":{color:C.value.activeContracts>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:l(()=>[o(x(Be))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.orgs"),value:C.value.activeOrgs,"value-style":{color:"#722ed1",fontSize:"20px"},suffix:C.value.maxActiveSlasPerOrg?`· cap=${C.value.maxActiveSlasPerOrg}`:""},{prefix:l(()=>[o(x($t))]),_:1},8,["title","value","suffix"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.violations"),value:C.value.violations.total,"value-style":{color:C.value.violations.total>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:l(()=>[o(x(Tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(R,{xs:24,sm:8,lg:4},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.compensation"),value:C.value.violations.totalCompensation,precision:2,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:l(()=>[o(x(It))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),o(L,{title:e.$t("sla.tierCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:l(()=>[o(ce,{gutter:[12,12]},{default:l(()=>[(u(!0),d(F,null,D(Ae.value,t=>(u(),S(R,{key:t.name,xs:24,sm:8},{default:l(()=>[g("div",{class:"tier-pill",style:At({borderLeftColor:Re(t.name)})},[g("div",Kt,[o(z,{color:ue(t.name),style:{"font-family":"monospace","font-size":"13px"}},{default:l(()=>[m(i(t.name.toUpperCase()),1)]),_:2},1032,["color"]),g("span",Gt,i(e.$t("sla.tierCompRate",{pct:(t.compensationRate*100).toFixed(1)})),1)]),g("div",Qt,[g("span",Wt,i(e.$t("sla.tierTerms.availability",{pct:(t.availability*100).toFixed(2)})),1),g("span",Yt,i(e.$t("sla.tierTerms.p95",{ms:t.maxResponseTime})),1),g("span",Xt,i(e.$t("sla.tierTerms.rps",{n:t.minThroughput})),1),g("span",Zt,i(e.$t("sla.tierTerms.errorRate",{pct:(t.maxErrorRate*100).toFixed(2)})),1)])],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),o(mt,{activeKey:we.value,"onUpdate:activeKey":s[5]||(s[5]=t=>we.value=t),class:"sla-tabs"},{default:l(()=>[o(Se,{key:"contracts",tab:e.$t("sla.tabs.contracts")},{default:l(()=>[g("div",ea,[o(Ce,{value:Y.value,"onUpdate:value":s[2]||(s[2]=t=>Y.value=t),size:"small","button-style":"solid"},{default:l(()=>[o(K,{value:""},{default:l(()=>[m(i(e.$t("sla.filter.allTiers")),1)]),_:1}),(u(!0),d(F,null,D(x(me),t=>(u(),S(K,{key:t,value:t},{default:l(()=>[m(i(t.toUpperCase()),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(Ce,{value:X.value,"onUpdate:value":s[3]||(s[3]=t=>X.value=t),size:"small"},{default:l(()=>[o(K,{value:""},{default:l(()=>[m(i(e.$t("sla.filter.allStatuses")),1)]),_:1}),(u(!0),d(F,null,D(x(ze),t=>(u(),S(K,{key:t,value:t},{default:l(()=>[m(i(xe(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(de,{columns:Ge.value,"data-source":We.value,pagination:{pageSize:20,showTotal:t=>e.$t("sla.table.contractsSuffix",{n:t})},size:"small",loading:_.value,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:t,record:c})=>[t.key==="slaId"?(u(),d("span",ta,i(c.slaId.slice(0,12)),1)):y("",!0),t.key==="orgId"?(u(),d("span",aa,i(c.orgId),1)):y("",!0),t.key==="tier"?(u(),S(z,{key:2,color:ue(c.tier),style:{"font-family":"monospace"}},{default:l(()=>[m(i(c.tier.toUpperCase()),1)]),_:2},1032,["color"])):y("",!0),t.key==="status"?(u(),S(z,{key:3,color:De(c.status)},{default:l(()=>[m(i(xe(c.status)),1)]),_:2},1032,["color"])):y("",!0),t.key==="monthlyFee"?(u(),d("span",oa,i(c.monthlyFee.toFixed(2)),1)):y("",!0),t.key==="endDate"?(u(),d("span",la,i(x(Ie)(c.endDate)),1)):y("",!0),t.key==="action"?(u(),d(F,{key:6},[o(v,{size:"small",type:"link",onClick:le=>nt(c)},{default:l(()=>[m(i(e.$t("sla.table.actionMetrics")),1)]),_:1},8,["onClick"]),o(v,{size:"small",type:"link",onClick:le=>rt(c)},{default:l(()=>[m(i(e.$t("sla.table.actionCheck")),1)]),_:1},8,["onClick"]),o(v,{size:"small",type:"link",onClick:le=>it(c)},{default:l(()=>[m(i(e.$t("sla.table.actionReport")),1)]),_:1},8,["onClick"]),c.status==="active"?(u(),S(dt,{key:0,title:e.$t("sla.terminateConfirm.title"),"ok-text":e.$t("sla.terminateConfirm.ok"),"cancel-text":e.$t("sla.terminateConfirm.cancel"),onConfirm:le=>st(c)},{default:l(()=>[o(v,{size:"small",type:"link",danger:""},{default:l(()=>[m(i(e.$t("sla.terminateConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("",!0)],64)):y("",!0)]),emptyText:l(()=>[g("div",sa,[o(x(Me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+i(Y.value||X.value?e.$t("sla.table.emptyContractsFiltered"):e.$t("sla.table.emptyContracts")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),o(Se,{key:"violations",tab:e.$t("sla.tabs.violations")},{default:l(()=>[g("div",na,[o(Ce,{value:Z.value,"onUpdate:value":s[4]||(s[4]=t=>Z.value=t),size:"small","button-style":"solid"},{default:l(()=>[o(K,{value:""},{default:l(()=>[m(i(e.$t("sla.filter.allSeverities")),1)]),_:1}),(u(!0),d(F,null,D(x(se),t=>(u(),S(K,{key:t,value:t},{default:l(()=>[m(i(q(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(de,{columns:Qe.value,"data-source":Ye.value,pagination:{pageSize:20,showTotal:t=>e.$t("sla.table.totalSuffix",{n:t})},size:"small",loading:_.value,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:t,record:c})=>[t.key==="violationId"?(u(),d("span",ra,i(c.violationId.slice(0,12)),1)):y("",!0),t.key==="term"?(u(),S(z,{key:1,color:"default",style:{"font-family":"monospace"}},{default:l(()=>[m(i(J(c.term)),1)]),_:2},1024)):y("",!0),t.key==="severity"?(u(),S(z,{key:2,color:te(c.severity)},{default:l(()=>[m(i(q(c.severity)),1)]),_:2},1032,["color"])):y("",!0),t.key==="deviation"?(u(),S(G,{key:3,percent:Math.min(100,Math.round(c.deviationPercent)),"stroke-color":he(c.severity),size:"small",format:()=>`${c.deviationPercent.toFixed(1)}%`},null,8,["percent","stroke-color","format"])):y("",!0),t.key==="expected"?(u(),d("span",ia,i(U(c.term,c.expectedValue)),1)):y("",!0),t.key==="actual"?(u(),d("span",ua,i(U(c.term,c.actualValue)),1)):y("",!0),t.key==="compensation"?(u(),d(F,{key:6},[c.compensationAmount!==null?(u(),d("span",ca,i(c.compensationAmount.toFixed(2)),1)):(u(),d("span",da,i(e.$t("sla.table.uncomputed")),1))],64)):y("",!0),t.key==="occurredAt"?(u(),d("span",ma,i(x(Ie)(c.occurredAt)),1)):y("",!0),t.key==="action"?(u(),d(F,{key:8},[c.compensationAmount===null?(u(),S(v,{key:0,size:"small",type:"link",onClick:le=>ut(c)},{default:l(()=>[m(i(e.$t("sla.table.actionComputeComp")),1)]),_:1},8,["onClick"])):(u(),S(v,{key:1,size:"small",type:"link",onClick:le=>ct(c)},{default:l(()=>[m(i(e.$t("sla.table.actionView")),1)]),_:1},8,["onClick"]))],64)):y("",!0)]),emptyText:l(()=>[g("div",pa,[o(x(Be),{style:{"font-size":"36px","margin-bottom":"10px",display:"block",color:"#52c41a"}}),m(" "+i(Z.value?e.$t("sla.table.emptyViolationsFiltered"):e.$t("sla.table.emptyViolations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),o(Se,{key:"breakdown",tab:e.$t("sla.tabs.breakdown")},{default:l(()=>[o(ce,{gutter:[16,16]},{default:l(()=>[o(R,{xs:24,lg:12},{default:l(()=>[o(L,{title:e.$t("sla.breakdown.contractsByStatus"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"12px"}},{default:l(()=>[(u(!0),d(F,null,D(x(ze),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:De(t),style:{"min-width":"80px","text-align":"center"}},{default:l(()=>[m(i(xe(t)),1)]),_:2},1032,["color"]),o(G,{percent:ae(C.value.byStatus[t]||0,C.value.totalContracts),"stroke-color":et(t),format:()=>`${C.value.byStatus[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"]),o(L,{title:e.$t("sla.breakdown.contractsByTier"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[(u(!0),d(F,null,D(x(me),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:ue(t),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:l(()=>[m(i(t.toUpperCase()),1)]),_:2},1032,["color"]),o(G,{percent:ae(C.value.byTier[t]||0,C.value.totalContracts),"stroke-color":Re(t),format:()=>`${C.value.byTier[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),o(R,{xs:24,lg:12},{default:l(()=>[o(L,{title:e.$t("sla.breakdown.violationsBySeverity"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"12px"}},{default:l(()=>[(u(!0),d(F,null,D(x(se),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:te(t),style:{"min-width":"80px","text-align":"center"}},{default:l(()=>[m(i(q(t)),1)]),_:2},1032,["color"]),o(G,{percent:ae(C.value.violations.bySeverity[t]||0,C.value.violations.total),"stroke-color":he(t),format:()=>`${C.value.violations.bySeverity[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"]),o(L,{title:e.$t("sla.breakdown.violationsByTerm"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[(u(!0),d(F,null,D(x(pe),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:"default",style:{"min-width":"110px","text-align":"center","font-family":"monospace","font-size":"11px"}},{default:l(()=>[m(i(J(t)),1)]),_:2},1024),o(G,{percent:ae(C.value.violations.byTerm[t]||0,C.value.violations.total),"stroke-color":"#fa8c16",format:()=>`${C.value.violations.byTerm[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","format"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),o(Q,{open:ne.value,"onUpdate:open":s[10]||(s[10]=t=>ne.value=t),title:e.$t("sla.create_modal.title"),"confirm-loading":w.value,width:540,"ok-text":e.$t("sla.create_modal.ok"),"cancel-text":e.$t("sla.create_modal.cancel"),onOk:ot,onCancel:Ve},{default:l(()=>[o(Ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(B,{label:e.$t("sla.create_modal.orgLabel"),required:""},{default:l(()=>[o(pt,{value:$.orgId,"onUpdate:value":s[6]||(s[6]=t=>$.orgId=t),placeholder:e.$t("sla.create_modal.orgPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.create_modal.tierLabel"),required:""},{default:l(()=>[o($e,{value:$.tier,"onUpdate:value":s[7]||(s[7]=t=>$.tier=t)},{default:l(()=>[(u(!0),d(F,null,D(x(me),t=>(u(),S(Ee,{key:t,value:t},{default:l(()=>[m(i(t.toUpperCase()),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.create_modal.feeLabel")},{default:l(()=>[o(Te,{value:$.monthlyFee,"onUpdate:value":s[8]||(s[8]=t=>$.monthlyFee=t),min:0,step:100,style:{width:"160px"}},null,8,["value"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.create_modal.durationLabel")},{default:l(()=>[o(Te,{value:$.durationDays,"onUpdate:value":s[9]||(s[9]=t=>$.durationDays=t),min:1,step:30,style:{width:"160px"}},null,8,["value"]),g("span",fa,i(e.$t("sla.create_modal.durationHint")),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),o(Q,{open:re.value,"onUpdate:open":s[14]||(s[14]=t=>re.value=t),title:e.$t("sla.record_modal.title"),"confirm-loading":fe.value,width:540,"ok-text":e.$t("sla.record_modal.ok"),"cancel-text":e.$t("sla.record_modal.cancel"),onOk:lt,onCancel:Le},{default:l(()=>[o(Ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(B,{label:e.$t("sla.record_modal.slaLabel"),required:""},{default:l(()=>[o($e,{value:T.slaId,"onUpdate:value":s[11]||(s[11]=t=>T.slaId=t),placeholder:e.$t("sla.record_modal.slaPlaceholder"),options:ve.value.map(t=>({value:t.slaId,label:`${t.slaId.slice(0,8)} · ${t.orgId} [${t.tier}]`})),"show-search":""},null,8,["value","placeholder","options"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.record_modal.termLabel"),required:""},{default:l(()=>[o($e,{value:T.term,"onUpdate:value":s[12]||(s[12]=t=>T.term=t)},{default:l(()=>[(u(!0),d(F,null,D(x(pe),t=>(u(),S(Ee,{key:t,value:t},{default:l(()=>[m(i(J(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.record_modal.valueLabel"),required:""},{default:l(()=>[o(Te,{value:T.value,"onUpdate:value":s[13]||(s[13]=t=>T.value=t),step:.01,style:{width:"200px"}},null,8,["value"]),g("div",va,i(tt(T.term)),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),o(Q,{open:be.value,"onUpdate:open":s[15]||(s[15]=t=>be.value=t),title:e.$t("sla.metrics_modal.title",{id:I.value?.slaId?.slice(0,12)||""}),width:640,footer:null},{default:l(()=>[I.value?(u(),d("div",ya,[o(Ue,{column:2,size:"small",bordered:""},{default:l(()=>[o(E,{label:e.$t("sla.metrics_modal.org")},{default:l(()=>[m(i(I.value.orgId),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.metrics_modal.tier")},{default:l(()=>[o(z,{color:ue(I.value.tier)},{default:l(()=>[m(i(I.value.tier.toUpperCase()),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(E,{label:e.$t("sla.metrics_modal.samples")},{default:l(()=>[m(i(ee.value.totalSamples),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.metrics_modal.monthlyFee")},{default:l(()=>[m(i(I.value.monthlyFee.toFixed(2)),1)]),_:1},8,["label"])]),_:1}),g("h4",ba,i(e.$t("sla.metrics_modal.byTerm")),1),Object.keys(ee.value.byTerm).length?(u(),S(de,{key:1,columns:Oe.value,"data-source":Xe.value,size:"small",pagination:!1,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:t,record:c})=>[t.key==="term"?(u(),S(z,{key:0,color:"default",style:{"font-family":"monospace"}},{default:l(()=>[m(i(J(c.term)),1)]),_:2},1024)):y("",!0),t.key==="expected"?(u(),d("span",_a,i(U(c.term,c.expected)),1)):["mean","p95","min","max"].includes(t.key)?(u(),d("span",ga,i(U(c.term,c[t.key])),1)):y("",!0)]),_:1},8,["columns","data-source"])):(u(),S(ft,{key:0,description:e.$t("sla.metrics_modal.empty"),image:x(f)},null,8,["description","image"]))])):y("",!0)]),_:1},8,["open","title"]),o(Q,{open:_e.value,"onUpdate:open":s[16]||(s[16]=t=>_e.value=t),title:e.$t("sla.check_modal.title",{id:I.value?.slaId?.slice(0,12)||""}),width:640,footer:null},{default:l(()=>[V.value?(u(),d("div",ka,[o(vt,{status:V.value.totalViolations===0?"success":"warning",title:V.value.totalViolations===0?e.$t("sla.check_modal.noViolations"):e.$t("sla.check_modal.withViolations",{n:V.value.totalViolations}),"sub-title":e.$t("sla.check_modal.checkedAt",{time:x(Ie)(V.value.checkedAt)})},null,8,["status","title","sub-title"]),V.value.totalViolations>0?(u(),S(bt,{key:0,size:"small","data-source":V.value.violations},{renderItem:l(({item:t})=>[o(yt,null,{default:l(()=>[o(z,{color:te(t.severity),style:{"min-width":"50px","text-align":"center"}},{default:l(()=>[m(i(q(t.severity)),1)]),_:2},1032,["color"]),g("span",xa,i(J(t.term)),1),g("span",ha,i(e.$t("sla.check_modal.expectedActual",{expected:U(t.term,t.expectedValue),actual:U(t.term,t.actualValue)})),1),g("span",Ca,i(t.deviationPercent.toFixed(2))+"%",1)]),_:2},1024)]),_:1},8,["data-source"])):y("",!0)])):y("",!0)]),_:1},8,["open","title"]),o(Q,{open:ge.value,"onUpdate:open":s[17]||(s[17]=t=>ge.value=t),title:e.$t("sla.report_modal.title",{id:I.value?.slaId?.slice(0,12)||""}),width:720,footer:null},{default:l(()=>[A.value?(u(),d("div",Sa,[o(ce,{gutter:12,style:{"margin-bottom":"16px"}},{default:l(()=>[o(R,{span:8},{default:l(()=>[o(O,{title:e.$t("sla.report_modal.compliance"),value:A.value.compliance*100,suffix:"%",precision:2,"value-style":{color:at(A.value.compliance),fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1}),o(R,{span:8},{default:l(()=>[o(O,{title:e.$t("sla.report_modal.violations"),value:A.value.violations.total,"value-style":{color:"#ff4d4f",fontSize:"20px"}},null,8,["title","value"])]),_:1}),o(R,{span:8},{default:l(()=>[o(O,{title:e.$t("sla.report_modal.compensation"),value:A.value.violations.totalCompensation,precision:2,"value-style":{color:"#faad14",fontSize:"20px"}},null,8,["title","value"])]),_:1})]),_:1}),g("h4",$a,i(e.$t("sla.breakdown.violationsBySeverityHeader")),1),(u(!0),d(F,null,D(x(se),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:te(t),style:{"min-width":"80px","text-align":"center"}},{default:l(()=>[m(i(q(t)),1)]),_:2},1032,["color"]),o(G,{percent:ae(A.value.violations.bySeverity[t]||0,A.value.violations.total),"stroke-color":he(t),format:()=>`${A.value.violations.bySeverity[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),Object.keys(A.value.metricsByTerm).length?(u(),d("h4",Ta,i(e.$t("sla.breakdown.metricsAggregation")),1)):y("",!0),Object.keys(A.value.metricsByTerm).length?(u(),S(de,{key:1,columns:Oe.value,"data-source":Ze.value,size:"small",pagination:!1,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:t,record:c})=>[t.key==="term"?(u(),S(z,{key:0,color:"default",style:{"font-family":"monospace"}},{default:l(()=>[m(i(J(c.term)),1)]),_:2},1024)):y("",!0),t.key==="expected"?(u(),d("span",Ia,i(U(c.term,c.expected)),1)):["mean","p95","min","max"].includes(t.key)?(u(),d("span",za,i(U(c.term,c[t.key])),1)):y("",!0)]),_:1},8,["columns","data-source"])):y("",!0)])):y("",!0)]),_:1},8,["open","title"]),o(Q,{open:ie.value,"onUpdate:open":s[18]||(s[18]=t=>ie.value=t),title:e.$t("sla.compensation_modal.title",{id:ke.value?.violationId?.slice(0,12)||""}),width:540,footer:null},{default:l(()=>[j.value?(u(),d("div",Aa,[o(Ue,{column:2,size:"small",bordered:""},{default:l(()=>[o(E,{label:e.$t("sla.compensation_modal.violationId"),span:2},{default:l(()=>[g("span",Fa,i(j.value.violationId),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.compensation_modal.severity")},{default:l(()=>[o(z,{color:te(j.value.severity)},{default:l(()=>[m(i(q(j.value.severity)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(E,{label:e.$t("sla.compensation_modal.base")},{default:l(()=>[g("span",wa,i(j.value.base.toFixed(4)),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.compensation_modal.multiplier")},{default:l(()=>[g("span",Oa,"×"+i(j.value.multiplier.toFixed(2)),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.compensation_modal.amount")},{default:l(()=>[g("span",ja,i(j.value.amount.toFixed(2)),1)]),_:1},8,["label"])]),_:1})])):y("",!0)]),_:1},8,["open","title"])])}}},Na=_t(Ra,[["__scopeId","data-v-3294250d"]]);export{Na as default};
|
|
1
|
+
import{_ as _t,u as gt,b as kt,E as xt,d as h}from"./index-CEbbycgJ.js";import{s as Je}from"./community-parser-CO25nZFt.js";import{R as ht,aQ as Ct,aq as St,aR as Me,f as Be,O as $t,ak as Tt,aG as It}from"./icons-NT6gy8Ee.js";import{o as zt,M as d,R as g,P as i,c as o,N as l,Q as S,S as y,K as b,r as k,L as u,O as m,u as x,F,Y as D,_ as At,f as P,a as Pe}from"./vendor-M5lGV-wr.js";function N(n){const r=Je(n);if(!r)return null;try{return JSON.parse(r)}catch{}const a=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!a)return null;try{return JSON.parse(a[0])}catch{return null}}const me=Object.freeze(["gold","silver","bronze"]),ze=Object.freeze(["active","expired","terminated"]),pe=Object.freeze(["availability","response_time","throughput","error_rate"]),se=Object.freeze(["minor","moderate","major","critical"]),Ft=Object.freeze(["open","acknowledged","resolved","waived"]);function p(n,r=0){return typeof n=="number"&&Number.isFinite(n)?n:r}function W(n){if(!n)return{noDb:!1,error:""};const r=Je(n),a=/Database not available/i.test(r);return{noDb:a,error:a?"Database not available":""}}function wt(n,r=0){if(!n||typeof n!="object")return null;const a=n.name||"";return a?{key:a,name:a,availability:p(n.availability,0),maxResponseTime:p(n.maxResponseTime,0),minThroughput:p(n.minThroughput,0),maxErrorRate:p(n.maxErrorRate,0),compensationRate:p(n.compensationRate,0),_idx:r}:null}function Ot(n){const r=N(n);return Array.isArray(r)?r.map(wt).filter(Boolean):[]}function jt(n){const r={availability:0,maxResponseTime:0,minThroughput:0,maxErrorRate:0,compensationRate:0};return!n||typeof n!="object"||Array.isArray(n)?r:{availability:p(n.availability,0),maxResponseTime:p(n.maxResponseTime,0),minThroughput:p(n.minThroughput,0),maxErrorRate:p(n.maxErrorRate,0),compensationRate:p(n.compensationRate,0)}}function qe(n,r=0){if(!n||typeof n!="object")return null;const a=n.slaId||n.sla_id||"";return a?{key:a,slaId:a,orgId:String(n.orgId??n.org_id??""),tier:String(n.tier||"").toLowerCase(),terms:jt(n.terms),monthlyFee:p(n.monthlyFee??n.monthly_fee,0),startDate:n.startDate??n.start_date??null,endDate:n.endDate??n.end_date??null,status:String(n.status||"active").toLowerCase(),createdAt:n.createdAt??n.created_at??null,updatedAt:n.updatedAt??n.updated_at??null,_idx:r}:null}function Rt(n){const r=N(n);return Array.isArray(r)?r.map(qe).filter(Boolean):[]}function Dt(n){const r=N(n);return!r||typeof r!="object"||Array.isArray(r)?null:qe(r,0)}function He(n){return!n||typeof n!="object"?null:{count:p(n.count,0),mean:p(n.mean,0),min:p(n.min,0),max:p(n.max,0),p95:p(n.p95,0)}}function Vt(n){const r=N(n);if(!r||typeof r!="object"||Array.isArray(r))return{slaId:"",totalSamples:0,byTerm:{}};const a={};if(r.byTerm&&typeof r.byTerm=="object")for(const[f,_]of Object.entries(r.byTerm)){const w=He(_);w&&(a[f]=w)}return{slaId:String(r.slaId||""),totalSamples:p(r.totalSamples,0),byTerm:a}}function Ke(n,r=0){if(!n||typeof n!="object")return null;const a=n.violationId||n.violation_id||"";return a?{key:a,violationId:a,slaId:String(n.slaId??n.sla_id??""),term:String(n.term||"").toLowerCase(),severity:String(n.severity||"minor").toLowerCase(),expectedValue:p(n.expectedValue??n.expected_value,0),actualValue:p(n.actualValue??n.actual_value,0),deviationPercent:p(n.deviationPercent??n.deviation_percent,0),compensationAmount:typeof n.compensationAmount=="number"?n.compensationAmount:typeof n.compensation_amount=="number"?n.compensation_amount:null,occurredAt:n.occurredAt??n.occurred_at??null,resolvedAt:n.resolvedAt??n.resolved_at??null,v2Status:n.v2Status?String(n.v2Status).toLowerCase():"open",v2Note:n.v2Note??"",_idx:r}:null}function Lt(n){const r=N(n);return Array.isArray(r)?r.map(Ke).filter(Boolean):[]}function Et(n){const r=N(n);return!r||typeof r!="object"||Array.isArray(r)?{slaId:"",checkedAt:null,totalViolations:0,violations:[]}:{slaId:String(r.slaId||""),checkedAt:r.checkedAt??null,totalViolations:p(r.totalViolations,0),violations:Array.isArray(r.violations)?r.violations.map(Ke).filter(Boolean):[]}}function Nt(n){const r=N(n);return!r||typeof r!="object"||Array.isArray(r)?null:{violationId:String(r.violationId||""),slaId:String(r.slaId||""),severity:String(r.severity||""),base:p(r.base,0),multiplier:p(r.multiplier,0),amount:p(r.amount,0)}}const Ut={slaId:"",tier:"",compliance:0,startDate:null,endDate:null,metricsByTerm:{},violations:{total:0,byTerm:{},bySeverity:{},totalCompensation:0}};function Mt(n){const r=JSON.parse(JSON.stringify(Ut));for(const f of pe)r.violations.byTerm[f]=0;for(const f of se)r.violations.bySeverity[f]=0;const a=N(n);if(!a||typeof a!="object"||Array.isArray(a))return r;if(r.slaId=String(a.slaId||""),r.tier=String(a.tier||"").toLowerCase(),r.compliance=p(a.compliance,0),r.startDate=a.startDate??null,r.endDate=a.endDate??null,a.metricsByTerm&&typeof a.metricsByTerm=="object")for(const[f,_]of Object.entries(a.metricsByTerm)){const w=He(_);w&&(r.metricsByTerm[f]=w)}if(a.violations&&typeof a.violations=="object"){if(r.violations.total=p(a.violations.total,0),r.violations.totalCompensation=p(a.violations.totalCompensation,0),a.violations.byTerm&&typeof a.violations.byTerm=="object")for(const[f,_]of Object.entries(a.violations.byTerm))typeof _=="number"&&Number.isFinite(_)&&(r.violations.byTerm[f]=_);if(a.violations.bySeverity&&typeof a.violations.bySeverity=="object")for(const[f,_]of Object.entries(a.violations.bySeverity))typeof _=="number"&&Number.isFinite(_)&&(r.violations.bySeverity[f]=_)}return r}const Bt={totalContracts:0,activeContracts:0,activeOrgs:0,maxActiveSlasPerOrg:0,byStatus:{},byTier:{},violations:{total:0,byTerm:{},bySeverity:{},byStatus:{},totalCompensation:0}};function Pt(n){const r=JSON.parse(JSON.stringify(Bt));for(const f of ze)r.byStatus[f]=0;for(const f of me)r.byTier[f]=0;for(const f of pe)r.violations.byTerm[f]=0;for(const f of se)r.violations.bySeverity[f]=0;for(const f of Ft)r.violations.byStatus[f]=0;const a=N(n);if(!a||typeof a!="object"||Array.isArray(a))return r;if(r.totalContracts=p(a.totalContracts,0),r.activeContracts=p(a.activeContracts,0),r.activeOrgs=p(a.activeOrgs,0),r.maxActiveSlasPerOrg=p(a.maxActiveSlasPerOrg,0),a.byStatus&&typeof a.byStatus=="object")for(const[f,_]of Object.entries(a.byStatus))typeof _=="number"&&Number.isFinite(_)&&(r.byStatus[f]=_);if(a.byTier&&typeof a.byTier=="object")for(const[f,_]of Object.entries(a.byTier))typeof _=="number"&&Number.isFinite(_)&&(r.byTier[f]=_);if(a.violations&&typeof a.violations=="object"){r.violations.total=p(a.violations.total,0),r.violations.totalCompensation=p(a.violations.totalCompensation,0);for(const f of["byTerm","bySeverity","byStatus"])if(a.violations[f]&&typeof a.violations[f]=="object")for(const[_,w]of Object.entries(a.violations[f]))typeof w=="number"&&Number.isFinite(w)&&(r.violations[f][_]=w)}return r}function Ie(n){if(n==null||n==="")return"—";const r=typeof n=="number"?new Date(n):new Date(String(n));return isNaN(r.getTime())?String(n):r.toLocaleString("zh-CN",{hour12:!1})}const Jt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},qt={class:"page-title"},Ht={class:"page-sub"},Kt={class:"tier-head"},Gt={class:"tier-comp"},Qt={class:"tier-terms"},Wt={class:"tier-term"},Yt={class:"tier-term"},Xt={class:"tier-term"},Zt={class:"tier-term"},ea={class:"filter-bar"},ta={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},aa={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},oa={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},la={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},sa={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},na={class:"filter-bar"},ra={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},ia={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ua={key:5,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ca={key:0,style:{color:"#faad14","font-weight":"500"}},da={key:1,style:{color:"var(--text-muted)"}},ma={key:7,style:{color:"var(--text-secondary)","font-size":"11px"}},pa={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},fa={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},va={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},ya={key:0,style:{"padding-top":"8px"}},ba={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 10px"}},_a={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ga={key:2,style:{"font-family":"monospace","font-size":"12px"}},ka={key:0,style:{"padding-top":"8px"}},xa={style:{"margin-left":"8px","font-family":"monospace","font-size":"12px"}},ha={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},Ca={style:{"margin-left":"auto",color:"#ff4d4f","font-weight":"500"}},Sa={key:0,style:{"padding-top":"8px"}},$a={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Ta={key:0,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Ia={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},za={key:2,style:{"font-family":"monospace","font-size":"12px"}},Aa={key:0,style:{"padding-top":"8px"}},Fa={style:{"font-family":"monospace","font-size":"12px"}},wa={style:{"font-family":"monospace"}},Oa={style:{"font-family":"monospace"}},ja={style:{color:"#faad14","font-weight":"600","font-family":"monospace","font-size":"14px"}},Ra={__name:"Sla",setup(n){const r=gt(),{t:a}=kt(),f=xt.PRESENTED_IMAGE_SIMPLE,_=k(!1),w=k(!1),fe=k(!1),Ae=k([]),ve=k([]),Fe=k([]),C=k({totalContracts:0,activeContracts:0,activeOrgs:0,maxActiveSlasPerOrg:0,byStatus:{},byTier:{},violations:{total:0,byTerm:{},bySeverity:{},byStatus:{},totalCompensation:0}}),ye=k({noDb:!1,error:""}),we=k("contracts"),Y=k(""),X=k(""),Z=k(""),ne=k(!1),re=k(!1),be=k(!1),_e=k(!1),ge=k(!1),ie=k(!1),$=Pe({orgId:"",tier:"silver",monthlyFee:1e3,durationDays:30}),T=Pe({slaId:null,term:"availability",value:null}),I=k(null),ee=k({slaId:"",totalSamples:0,byTerm:{}}),V=k(null),A=k(null),ke=k(null),j=k(null),Ge=P(()=>[{title:a("sla.contractCols.slaId"),key:"slaId",width:"120px"},{title:a("sla.contractCols.orgId"),key:"orgId",width:"160px"},{title:a("sla.contractCols.tier"),key:"tier",width:"90px"},{title:a("sla.contractCols.status"),key:"status",width:"100px"},{title:a("sla.contractCols.monthlyFee"),key:"monthlyFee",width:"110px"},{title:a("sla.contractCols.endDate"),key:"endDate",width:"160px"},{title:a("sla.contractCols.action"),key:"action",width:"260px"}]),Qe=P(()=>[{title:a("sla.violationCols.id"),key:"violationId",width:"120px"},{title:a("sla.violationCols.term"),key:"term",width:"140px"},{title:a("sla.violationCols.severity"),key:"severity",width:"100px"},{title:a("sla.violationCols.deviation"),key:"deviation",width:"180px"},{title:a("sla.violationCols.expected"),key:"expected",width:"110px"},{title:a("sla.violationCols.actual"),key:"actual",width:"110px"},{title:a("sla.violationCols.compensation"),key:"compensation",width:"110px"},{title:a("sla.violationCols.occurredAt"),key:"occurredAt",width:"160px"},{title:a("sla.violationCols.action"),key:"action",width:"120px"}]),Oe=P(()=>[{title:a("sla.aggCols.term"),key:"term",width:"140px"},{title:a("sla.aggCols.expected"),key:"expected",width:"110px"},{title:a("sla.aggCols.mean"),key:"mean",width:"110px"},{title:a("sla.aggCols.p95"),key:"p95",width:"110px"},{title:a("sla.aggCols.min"),key:"min",width:"110px"},{title:a("sla.aggCols.max"),key:"max",width:"110px"},{title:a("sla.aggCols.count"),key:"count",width:"90px"}]),We=P(()=>{let e=ve.value;return Y.value&&(e=e.filter(s=>s.tier===Y.value)),X.value&&(e=e.filter(s=>s.status===X.value)),e}),Ye=P(()=>{let e=Fe.value;return Z.value&&(e=e.filter(s=>s.severity===Z.value)),e}),Xe=P(()=>I.value?Object.entries(ee.value.byTerm).map(([e,s])=>({key:e,term:e,expected:je(I.value.terms,e),...s})):[]),Ze=P(()=>!A.value||!I.value?[]:Object.entries(A.value.metricsByTerm).map(([e,s])=>({key:e,term:e,expected:je(I.value.terms,e),...s})));function je(e,s){if(!e)return 0;switch(s){case"availability":return e.availability;case"response_time":return e.maxResponseTime;case"throughput":return e.minThroughput;case"error_rate":return e.maxErrorRate;default:return 0}}function ue(e){return{gold:"gold",silver:"default",bronze:"orange"}[e]||"default"}function Re(e){return{gold:"#faad14",silver:"#8c8c8c",bronze:"#d4a373"}[e]||"#888"}function xe(e){const s=`sla.statusLabels.${e}`,v=a(s);return v===s?e:v}function De(e){return{active:"green",expired:"default",terminated:"red"}[e]||"default"}function et(e){return{active:"#52c41a",expired:"#888",terminated:"#ff4d4f"}[e]||"#888"}function J(e){const s=`sla.termLabels.${e}`,v=a(s);return v===s?e:v}function tt(e){if(!e)return"";const s=`sla.termHints.${e}`,v=a(s);return v===s?"":v}function U(e,s){return typeof s!="number"||!Number.isFinite(s)?"—":e==="availability"||e==="error_rate"?(s*100).toFixed(3)+"%":e==="response_time"?s.toFixed(1)+"ms":e==="throughput"?s.toFixed(0)+" rps":s.toFixed(4)}function q(e){const s=`sla.severityLabels.${e}`,v=a(s);return v===s?e:v}function te(e){return{minor:"default",moderate:"gold",major:"orange",critical:"red"}[e]||"default"}function he(e){return{minor:"#888",moderate:"#faad14",major:"#fa8c16",critical:"#ff4d4f"}[e]||"#888"}function at(e){return e>=.99?"#52c41a":e>=.9?"#1677ff":e>=.7?"#faad14":"#ff4d4f"}function ae(e,s){return s?Math.round(e/s*100):0}async function H(){_.value=!0,ye.value={noDb:!1,error:""};try{const[e,s,v,oe]=await Promise.all([r.execute("sla tiers --json",8e3).catch(()=>({output:""})),r.execute("sla list --limit 200 --json",1e4).catch(()=>({output:""})),r.execute("sla violations --limit 200 --json",1e4).catch(()=>({output:""})),r.execute("sla stats-v2",8e3).catch(()=>({output:""}))]),M=[s,v,oe].map(O=>W(O.output)).find(O=>O.noDb);M&&(ye.value=M),Ae.value=Ot(e.output),ve.value=Rt(s.output),Fe.value=Lt(v.output),C.value=Pt(oe.output)}catch(e){h.error(a("sla.msg.loadFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function ot(){if(!$.orgId.trim()){h.warning(a("sla.msg.orgEmpty"));return}w.value=!0;try{const e=$.durationDays*24*60*60*1e3,s=[`sla create "${$.orgId.trim().replace(/"/g,'\\"')}"`,`-t ${$.tier}`,`-d ${e}`,`-f ${$.monthlyFee||0}`,"--json"],{output:v}=await r.execute(s.join(" "),1e4);if(W(v).noDb){h.error(a("sla.msg.needCcInit"));return}const M=Dt(v);if(!M){h.error(a("sla.msg.createFailed")+": "+v.slice(0,120));return}h.success(a("sla.msg.createSuccess",{id:M.slaId.slice(0,8)})),ne.value=!1,Ve(),await H()}catch(e){h.error(a("sla.msg.createFailed")+": "+(e?.message||e))}finally{w.value=!1}}async function lt(){if(!T.slaId){h.warning(a("sla.msg.slaEmpty"));return}if(T.value===null||T.value===void 0){h.warning(a("sla.msg.valueEmpty"));return}fe.value=!0;try{const{output:e}=await r.execute(`sla record ${T.slaId} ${T.term} ${T.value} --json`,8e3);if(W(e).noDb){h.error(a("sla.msg.needCcInit"));return}if(!/"metricId"|"term"/.test(e)){h.error(a("sla.msg.recordFailed")+": "+e.slice(0,120));return}h.success(a("sla.msg.recordSuccess")),re.value=!1,Le()}catch(e){h.error(a("sla.msg.recordFailed")+": "+(e?.message||e))}finally{fe.value=!1}}async function st(e){try{const{output:s}=await r.execute(`sla terminate ${e.slaId}`,8e3);if(W(s).noDb){h.error(a("sla.msg.needCcInit"));return}if(/Failed/i.test(s)&&!/terminated/i.test(s)){h.error(a("sla.msg.terminateFailed")+": "+s.slice(0,120));return}h.success(a("sla.msg.terminateSuccess")),await H()}catch(s){h.error(a("sla.msg.terminateFailed")+": "+(s?.message||s))}}async function nt(e){I.value=e,ee.value={slaId:"",totalSamples:0,byTerm:{}},be.value=!0;try{const{output:s}=await r.execute(`sla metrics ${e.slaId} --json`,8e3);ee.value=Vt(s)}catch(s){h.error(a("sla.msg.loadMetricsFailed")+": "+(s?.message||s))}}async function rt(e){I.value=e,V.value=null,_e.value=!0;try{const{output:s}=await r.execute(`sla check ${e.slaId} --json`,1e4);if(W(s).noDb){h.error(a("sla.msg.needCcInit"));return}V.value=Et(s),V.value.totalViolations>0&&await H()}catch(s){h.error(a("sla.msg.checkFailed")+": "+(s?.message||s))}}async function it(e){I.value=e,A.value=null,ge.value=!0;try{const{output:s}=await r.execute(`sla report ${e.slaId} --json`,1e4);A.value=Mt(s)}catch(s){h.error(a("sla.msg.loadReportFailed")+": "+(s?.message||s))}}async function ut(e){ke.value=e,j.value=null;try{const{output:s}=await r.execute(`sla compensate ${e.violationId} --json`,8e3);if(W(s).noDb){h.error(a("sla.msg.needCcInit"));return}if(j.value=Nt(s),!j.value){h.error(a("sla.msg.compFailed")+": "+s.slice(0,120));return}ie.value=!0,await H()}catch(s){h.error(a("sla.msg.compFailed")+": "+(s?.message||s))}}function ct(e){ke.value=e,j.value={violationId:e.violationId,slaId:e.slaId,severity:e.severity,base:0,multiplier:0,amount:e.compensationAmount||0},ie.value=!0}function Ve(){$.orgId="",$.tier="silver",$.monthlyFee=1e3,$.durationDays=30}function Le(){T.slaId=null,T.term="availability",T.value=null}return zt(H),(e,s)=>{const v=b("a-button"),oe=b("a-space"),M=b("a-alert"),O=b("a-statistic"),L=b("a-card"),R=b("a-col"),ce=b("a-row"),z=b("a-tag"),K=b("a-radio-button"),Ce=b("a-radio-group"),dt=b("a-popconfirm"),de=b("a-table"),Se=b("a-tab-pane"),G=b("a-progress"),mt=b("a-tabs"),pt=b("a-input"),B=b("a-form-item"),Ee=b("a-select-option"),$e=b("a-select"),Te=b("a-input-number"),Ne=b("a-form"),Q=b("a-modal"),E=b("a-descriptions-item"),Ue=b("a-descriptions"),ft=b("a-empty"),vt=b("a-result"),yt=b("a-list-item"),bt=b("a-list");return u(),d("div",null,[g("div",Jt,[g("div",null,[g("h2",qt,i(e.$t("sla.title")),1),g("p",Ht,i(e.$t("sla.subtitle")),1)]),o(oe,null,{default:l(()=>[o(v,{loading:_.value,onClick:H},{icon:l(()=>[o(x(ht))]),default:l(()=>[m(" "+i(e.$t("sla.refresh")),1)]),_:1},8,["loading"]),o(v,{onClick:s[0]||(s[0]=t=>re.value=!0)},{icon:l(()=>[o(x(Ct))]),default:l(()=>[m(" "+i(e.$t("sla.recordMetric")),1)]),_:1}),o(v,{type:"primary",onClick:s[1]||(s[1]=t=>ne.value=!0)},{icon:l(()=>[o(x(St))]),default:l(()=>[m(" "+i(e.$t("sla.create")),1)]),_:1})]),_:1})]),ye.value.noDb?(u(),S(M,{key:0,type:"info","show-icon":"",message:e.$t("sla.noDb.message"),description:e.$t("sla.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):y("",!0),o(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[o(R,{xs:12,sm:8,lg:5},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.totalContracts"),value:C.value.totalContracts,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:l(()=>[o(x(Me))]),_:1},8,["title","value"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.active"),value:C.value.activeContracts,"value-style":{color:C.value.activeContracts>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:l(()=>[o(x(Be))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.orgs"),value:C.value.activeOrgs,"value-style":{color:"#722ed1",fontSize:"20px"},suffix:C.value.maxActiveSlasPerOrg?`· cap=${C.value.maxActiveSlasPerOrg}`:""},{prefix:l(()=>[o(x($t))]),_:1},8,["title","value","suffix"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.violations"),value:C.value.violations.total,"value-style":{color:C.value.violations.total>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:l(()=>[o(x(Tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(R,{xs:24,sm:8,lg:4},{default:l(()=>[o(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[o(O,{title:e.$t("sla.stats.compensation"),value:C.value.violations.totalCompensation,precision:2,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:l(()=>[o(x(It))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),o(L,{title:e.$t("sla.tierCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:l(()=>[o(ce,{gutter:[12,12]},{default:l(()=>[(u(!0),d(F,null,D(Ae.value,t=>(u(),S(R,{key:t.name,xs:24,sm:8},{default:l(()=>[g("div",{class:"tier-pill",style:At({borderLeftColor:Re(t.name)})},[g("div",Kt,[o(z,{color:ue(t.name),style:{"font-family":"monospace","font-size":"13px"}},{default:l(()=>[m(i(t.name.toUpperCase()),1)]),_:2},1032,["color"]),g("span",Gt,i(e.$t("sla.tierCompRate",{pct:(t.compensationRate*100).toFixed(1)})),1)]),g("div",Qt,[g("span",Wt,i(e.$t("sla.tierTerms.availability",{pct:(t.availability*100).toFixed(2)})),1),g("span",Yt,i(e.$t("sla.tierTerms.p95",{ms:t.maxResponseTime})),1),g("span",Xt,i(e.$t("sla.tierTerms.rps",{n:t.minThroughput})),1),g("span",Zt,i(e.$t("sla.tierTerms.errorRate",{pct:(t.maxErrorRate*100).toFixed(2)})),1)])],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),o(mt,{activeKey:we.value,"onUpdate:activeKey":s[5]||(s[5]=t=>we.value=t),class:"sla-tabs"},{default:l(()=>[o(Se,{key:"contracts",tab:e.$t("sla.tabs.contracts")},{default:l(()=>[g("div",ea,[o(Ce,{value:Y.value,"onUpdate:value":s[2]||(s[2]=t=>Y.value=t),size:"small","button-style":"solid"},{default:l(()=>[o(K,{value:""},{default:l(()=>[m(i(e.$t("sla.filter.allTiers")),1)]),_:1}),(u(!0),d(F,null,D(x(me),t=>(u(),S(K,{key:t,value:t},{default:l(()=>[m(i(t.toUpperCase()),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(Ce,{value:X.value,"onUpdate:value":s[3]||(s[3]=t=>X.value=t),size:"small"},{default:l(()=>[o(K,{value:""},{default:l(()=>[m(i(e.$t("sla.filter.allStatuses")),1)]),_:1}),(u(!0),d(F,null,D(x(ze),t=>(u(),S(K,{key:t,value:t},{default:l(()=>[m(i(xe(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(de,{columns:Ge.value,"data-source":We.value,pagination:{pageSize:20,showTotal:t=>e.$t("sla.table.contractsSuffix",{n:t})},size:"small",loading:_.value,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:t,record:c})=>[t.key==="slaId"?(u(),d("span",ta,i(c.slaId.slice(0,12)),1)):y("",!0),t.key==="orgId"?(u(),d("span",aa,i(c.orgId),1)):y("",!0),t.key==="tier"?(u(),S(z,{key:2,color:ue(c.tier),style:{"font-family":"monospace"}},{default:l(()=>[m(i(c.tier.toUpperCase()),1)]),_:2},1032,["color"])):y("",!0),t.key==="status"?(u(),S(z,{key:3,color:De(c.status)},{default:l(()=>[m(i(xe(c.status)),1)]),_:2},1032,["color"])):y("",!0),t.key==="monthlyFee"?(u(),d("span",oa,i(c.monthlyFee.toFixed(2)),1)):y("",!0),t.key==="endDate"?(u(),d("span",la,i(x(Ie)(c.endDate)),1)):y("",!0),t.key==="action"?(u(),d(F,{key:6},[o(v,{size:"small",type:"link",onClick:le=>nt(c)},{default:l(()=>[m(i(e.$t("sla.table.actionMetrics")),1)]),_:1},8,["onClick"]),o(v,{size:"small",type:"link",onClick:le=>rt(c)},{default:l(()=>[m(i(e.$t("sla.table.actionCheck")),1)]),_:1},8,["onClick"]),o(v,{size:"small",type:"link",onClick:le=>it(c)},{default:l(()=>[m(i(e.$t("sla.table.actionReport")),1)]),_:1},8,["onClick"]),c.status==="active"?(u(),S(dt,{key:0,title:e.$t("sla.terminateConfirm.title"),"ok-text":e.$t("sla.terminateConfirm.ok"),"cancel-text":e.$t("sla.terminateConfirm.cancel"),onConfirm:le=>st(c)},{default:l(()=>[o(v,{size:"small",type:"link",danger:""},{default:l(()=>[m(i(e.$t("sla.terminateConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("",!0)],64)):y("",!0)]),emptyText:l(()=>[g("div",sa,[o(x(Me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+i(Y.value||X.value?e.$t("sla.table.emptyContractsFiltered"):e.$t("sla.table.emptyContracts")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),o(Se,{key:"violations",tab:e.$t("sla.tabs.violations")},{default:l(()=>[g("div",na,[o(Ce,{value:Z.value,"onUpdate:value":s[4]||(s[4]=t=>Z.value=t),size:"small","button-style":"solid"},{default:l(()=>[o(K,{value:""},{default:l(()=>[m(i(e.$t("sla.filter.allSeverities")),1)]),_:1}),(u(!0),d(F,null,D(x(se),t=>(u(),S(K,{key:t,value:t},{default:l(()=>[m(i(q(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(de,{columns:Qe.value,"data-source":Ye.value,pagination:{pageSize:20,showTotal:t=>e.$t("sla.table.totalSuffix",{n:t})},size:"small",loading:_.value,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:t,record:c})=>[t.key==="violationId"?(u(),d("span",ra,i(c.violationId.slice(0,12)),1)):y("",!0),t.key==="term"?(u(),S(z,{key:1,color:"default",style:{"font-family":"monospace"}},{default:l(()=>[m(i(J(c.term)),1)]),_:2},1024)):y("",!0),t.key==="severity"?(u(),S(z,{key:2,color:te(c.severity)},{default:l(()=>[m(i(q(c.severity)),1)]),_:2},1032,["color"])):y("",!0),t.key==="deviation"?(u(),S(G,{key:3,percent:Math.min(100,Math.round(c.deviationPercent)),"stroke-color":he(c.severity),size:"small",format:()=>`${c.deviationPercent.toFixed(1)}%`},null,8,["percent","stroke-color","format"])):y("",!0),t.key==="expected"?(u(),d("span",ia,i(U(c.term,c.expectedValue)),1)):y("",!0),t.key==="actual"?(u(),d("span",ua,i(U(c.term,c.actualValue)),1)):y("",!0),t.key==="compensation"?(u(),d(F,{key:6},[c.compensationAmount!==null?(u(),d("span",ca,i(c.compensationAmount.toFixed(2)),1)):(u(),d("span",da,i(e.$t("sla.table.uncomputed")),1))],64)):y("",!0),t.key==="occurredAt"?(u(),d("span",ma,i(x(Ie)(c.occurredAt)),1)):y("",!0),t.key==="action"?(u(),d(F,{key:8},[c.compensationAmount===null?(u(),S(v,{key:0,size:"small",type:"link",onClick:le=>ut(c)},{default:l(()=>[m(i(e.$t("sla.table.actionComputeComp")),1)]),_:1},8,["onClick"])):(u(),S(v,{key:1,size:"small",type:"link",onClick:le=>ct(c)},{default:l(()=>[m(i(e.$t("sla.table.actionView")),1)]),_:1},8,["onClick"]))],64)):y("",!0)]),emptyText:l(()=>[g("div",pa,[o(x(Be),{style:{"font-size":"36px","margin-bottom":"10px",display:"block",color:"#52c41a"}}),m(" "+i(Z.value?e.$t("sla.table.emptyViolationsFiltered"):e.$t("sla.table.emptyViolations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),o(Se,{key:"breakdown",tab:e.$t("sla.tabs.breakdown")},{default:l(()=>[o(ce,{gutter:[16,16]},{default:l(()=>[o(R,{xs:24,lg:12},{default:l(()=>[o(L,{title:e.$t("sla.breakdown.contractsByStatus"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"12px"}},{default:l(()=>[(u(!0),d(F,null,D(x(ze),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:De(t),style:{"min-width":"80px","text-align":"center"}},{default:l(()=>[m(i(xe(t)),1)]),_:2},1032,["color"]),o(G,{percent:ae(C.value.byStatus[t]||0,C.value.totalContracts),"stroke-color":et(t),format:()=>`${C.value.byStatus[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"]),o(L,{title:e.$t("sla.breakdown.contractsByTier"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[(u(!0),d(F,null,D(x(me),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:ue(t),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:l(()=>[m(i(t.toUpperCase()),1)]),_:2},1032,["color"]),o(G,{percent:ae(C.value.byTier[t]||0,C.value.totalContracts),"stroke-color":Re(t),format:()=>`${C.value.byTier[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),o(R,{xs:24,lg:12},{default:l(()=>[o(L,{title:e.$t("sla.breakdown.violationsBySeverity"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"12px"}},{default:l(()=>[(u(!0),d(F,null,D(x(se),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:te(t),style:{"min-width":"80px","text-align":"center"}},{default:l(()=>[m(i(q(t)),1)]),_:2},1032,["color"]),o(G,{percent:ae(C.value.violations.bySeverity[t]||0,C.value.violations.total),"stroke-color":he(t),format:()=>`${C.value.violations.bySeverity[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"]),o(L,{title:e.$t("sla.breakdown.violationsByTerm"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[(u(!0),d(F,null,D(x(pe),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:"default",style:{"min-width":"110px","text-align":"center","font-family":"monospace","font-size":"11px"}},{default:l(()=>[m(i(J(t)),1)]),_:2},1024),o(G,{percent:ae(C.value.violations.byTerm[t]||0,C.value.violations.total),"stroke-color":"#fa8c16",format:()=>`${C.value.violations.byTerm[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","format"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),o(Q,{open:ne.value,"onUpdate:open":s[10]||(s[10]=t=>ne.value=t),title:e.$t("sla.create_modal.title"),"confirm-loading":w.value,width:540,"ok-text":e.$t("sla.create_modal.ok"),"cancel-text":e.$t("sla.create_modal.cancel"),onOk:ot,onCancel:Ve},{default:l(()=>[o(Ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(B,{label:e.$t("sla.create_modal.orgLabel"),required:""},{default:l(()=>[o(pt,{value:$.orgId,"onUpdate:value":s[6]||(s[6]=t=>$.orgId=t),placeholder:e.$t("sla.create_modal.orgPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.create_modal.tierLabel"),required:""},{default:l(()=>[o($e,{value:$.tier,"onUpdate:value":s[7]||(s[7]=t=>$.tier=t)},{default:l(()=>[(u(!0),d(F,null,D(x(me),t=>(u(),S(Ee,{key:t,value:t},{default:l(()=>[m(i(t.toUpperCase()),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.create_modal.feeLabel")},{default:l(()=>[o(Te,{value:$.monthlyFee,"onUpdate:value":s[8]||(s[8]=t=>$.monthlyFee=t),min:0,step:100,style:{width:"160px"}},null,8,["value"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.create_modal.durationLabel")},{default:l(()=>[o(Te,{value:$.durationDays,"onUpdate:value":s[9]||(s[9]=t=>$.durationDays=t),min:1,step:30,style:{width:"160px"}},null,8,["value"]),g("span",fa,i(e.$t("sla.create_modal.durationHint")),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),o(Q,{open:re.value,"onUpdate:open":s[14]||(s[14]=t=>re.value=t),title:e.$t("sla.record_modal.title"),"confirm-loading":fe.value,width:540,"ok-text":e.$t("sla.record_modal.ok"),"cancel-text":e.$t("sla.record_modal.cancel"),onOk:lt,onCancel:Le},{default:l(()=>[o(Ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:l(()=>[o(B,{label:e.$t("sla.record_modal.slaLabel"),required:""},{default:l(()=>[o($e,{value:T.slaId,"onUpdate:value":s[11]||(s[11]=t=>T.slaId=t),placeholder:e.$t("sla.record_modal.slaPlaceholder"),options:ve.value.map(t=>({value:t.slaId,label:`${t.slaId.slice(0,8)} · ${t.orgId} [${t.tier}]`})),"show-search":""},null,8,["value","placeholder","options"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.record_modal.termLabel"),required:""},{default:l(()=>[o($e,{value:T.term,"onUpdate:value":s[12]||(s[12]=t=>T.term=t)},{default:l(()=>[(u(!0),d(F,null,D(x(pe),t=>(u(),S(Ee,{key:t,value:t},{default:l(()=>[m(i(J(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(B,{label:e.$t("sla.record_modal.valueLabel"),required:""},{default:l(()=>[o(Te,{value:T.value,"onUpdate:value":s[13]||(s[13]=t=>T.value=t),step:.01,style:{width:"200px"}},null,8,["value"]),g("div",va,i(tt(T.term)),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),o(Q,{open:be.value,"onUpdate:open":s[15]||(s[15]=t=>be.value=t),title:e.$t("sla.metrics_modal.title",{id:I.value?.slaId?.slice(0,12)||""}),width:640,footer:null},{default:l(()=>[I.value?(u(),d("div",ya,[o(Ue,{column:2,size:"small",bordered:""},{default:l(()=>[o(E,{label:e.$t("sla.metrics_modal.org")},{default:l(()=>[m(i(I.value.orgId),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.metrics_modal.tier")},{default:l(()=>[o(z,{color:ue(I.value.tier)},{default:l(()=>[m(i(I.value.tier.toUpperCase()),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(E,{label:e.$t("sla.metrics_modal.samples")},{default:l(()=>[m(i(ee.value.totalSamples),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.metrics_modal.monthlyFee")},{default:l(()=>[m(i(I.value.monthlyFee.toFixed(2)),1)]),_:1},8,["label"])]),_:1}),g("h4",ba,i(e.$t("sla.metrics_modal.byTerm")),1),Object.keys(ee.value.byTerm).length?(u(),S(de,{key:1,columns:Oe.value,"data-source":Xe.value,size:"small",pagination:!1,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:t,record:c})=>[t.key==="term"?(u(),S(z,{key:0,color:"default",style:{"font-family":"monospace"}},{default:l(()=>[m(i(J(c.term)),1)]),_:2},1024)):y("",!0),t.key==="expected"?(u(),d("span",_a,i(U(c.term,c.expected)),1)):["mean","p95","min","max"].includes(t.key)?(u(),d("span",ga,i(U(c.term,c[t.key])),1)):y("",!0)]),_:1},8,["columns","data-source"])):(u(),S(ft,{key:0,description:e.$t("sla.metrics_modal.empty"),image:x(f)},null,8,["description","image"]))])):y("",!0)]),_:1},8,["open","title"]),o(Q,{open:_e.value,"onUpdate:open":s[16]||(s[16]=t=>_e.value=t),title:e.$t("sla.check_modal.title",{id:I.value?.slaId?.slice(0,12)||""}),width:640,footer:null},{default:l(()=>[V.value?(u(),d("div",ka,[o(vt,{status:V.value.totalViolations===0?"success":"warning",title:V.value.totalViolations===0?e.$t("sla.check_modal.noViolations"):e.$t("sla.check_modal.withViolations",{n:V.value.totalViolations}),"sub-title":e.$t("sla.check_modal.checkedAt",{time:x(Ie)(V.value.checkedAt)})},null,8,["status","title","sub-title"]),V.value.totalViolations>0?(u(),S(bt,{key:0,size:"small","data-source":V.value.violations},{renderItem:l(({item:t})=>[o(yt,null,{default:l(()=>[o(z,{color:te(t.severity),style:{"min-width":"50px","text-align":"center"}},{default:l(()=>[m(i(q(t.severity)),1)]),_:2},1032,["color"]),g("span",xa,i(J(t.term)),1),g("span",ha,i(e.$t("sla.check_modal.expectedActual",{expected:U(t.term,t.expectedValue),actual:U(t.term,t.actualValue)})),1),g("span",Ca,i(t.deviationPercent.toFixed(2))+"%",1)]),_:2},1024)]),_:1},8,["data-source"])):y("",!0)])):y("",!0)]),_:1},8,["open","title"]),o(Q,{open:ge.value,"onUpdate:open":s[17]||(s[17]=t=>ge.value=t),title:e.$t("sla.report_modal.title",{id:I.value?.slaId?.slice(0,12)||""}),width:720,footer:null},{default:l(()=>[A.value?(u(),d("div",Sa,[o(ce,{gutter:12,style:{"margin-bottom":"16px"}},{default:l(()=>[o(R,{span:8},{default:l(()=>[o(O,{title:e.$t("sla.report_modal.compliance"),value:A.value.compliance*100,suffix:"%",precision:2,"value-style":{color:at(A.value.compliance),fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1}),o(R,{span:8},{default:l(()=>[o(O,{title:e.$t("sla.report_modal.violations"),value:A.value.violations.total,"value-style":{color:"#ff4d4f",fontSize:"20px"}},null,8,["title","value"])]),_:1}),o(R,{span:8},{default:l(()=>[o(O,{title:e.$t("sla.report_modal.compensation"),value:A.value.violations.totalCompensation,precision:2,"value-style":{color:"#faad14",fontSize:"20px"}},null,8,["title","value"])]),_:1})]),_:1}),g("h4",$a,i(e.$t("sla.breakdown.violationsBySeverityHeader")),1),(u(!0),d(F,null,D(x(se),t=>(u(),d("div",{key:t,class:"bd-row"},[o(z,{color:te(t),style:{"min-width":"80px","text-align":"center"}},{default:l(()=>[m(i(q(t)),1)]),_:2},1032,["color"]),o(G,{percent:ae(A.value.violations.bySeverity[t]||0,A.value.violations.total),"stroke-color":he(t),format:()=>`${A.value.violations.bySeverity[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),Object.keys(A.value.metricsByTerm).length?(u(),d("h4",Ta,i(e.$t("sla.breakdown.metricsAggregation")),1)):y("",!0),Object.keys(A.value.metricsByTerm).length?(u(),S(de,{key:1,columns:Oe.value,"data-source":Ze.value,size:"small",pagination:!1,style:{background:"var(--bg-card)"}},{bodyCell:l(({column:t,record:c})=>[t.key==="term"?(u(),S(z,{key:0,color:"default",style:{"font-family":"monospace"}},{default:l(()=>[m(i(J(c.term)),1)]),_:2},1024)):y("",!0),t.key==="expected"?(u(),d("span",Ia,i(U(c.term,c.expected)),1)):["mean","p95","min","max"].includes(t.key)?(u(),d("span",za,i(U(c.term,c[t.key])),1)):y("",!0)]),_:1},8,["columns","data-source"])):y("",!0)])):y("",!0)]),_:1},8,["open","title"]),o(Q,{open:ie.value,"onUpdate:open":s[18]||(s[18]=t=>ie.value=t),title:e.$t("sla.compensation_modal.title",{id:ke.value?.violationId?.slice(0,12)||""}),width:540,footer:null},{default:l(()=>[j.value?(u(),d("div",Aa,[o(Ue,{column:2,size:"small",bordered:""},{default:l(()=>[o(E,{label:e.$t("sla.compensation_modal.violationId"),span:2},{default:l(()=>[g("span",Fa,i(j.value.violationId),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.compensation_modal.severity")},{default:l(()=>[o(z,{color:te(j.value.severity)},{default:l(()=>[m(i(q(j.value.severity)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(E,{label:e.$t("sla.compensation_modal.base")},{default:l(()=>[g("span",wa,i(j.value.base.toFixed(4)),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.compensation_modal.multiplier")},{default:l(()=>[g("span",Oa,"×"+i(j.value.multiplier.toFixed(2)),1)]),_:1},8,["label"]),o(E,{label:e.$t("sla.compensation_modal.amount")},{default:l(()=>[g("span",ja,i(j.value.amount.toFixed(2)),1)]),_:1},8,["label"])]),_:1})])):y("",!0)]),_:1},8,["open","title"])])}}},Na=_t(Ra,[["__scopeId","data-v-3294250d"]]);export{Na as default};
|
package/src/assets/web-panel/assets/{SpeechSettings-Bmds06su.js → SpeechSettings-Bj0t-JCf.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as D,b as G,u as W,d as O}from"./index-DY5Oc3z6.js";import{R as M,S as Q}from"./icons-NT6gy8Ee.js";import{a as q,r as E,o as X,M as R,R as v,P as c,u as n,c as t,N as a,K as h,L as P,O as u,Q as C,S as A,f as z}from"./vendor-M5lGV-wr.js";const y=Object.freeze({defaultEngine:"webspeech",webSpeech:{lang:"zh-CN"},whisperAPI:{apiKey:"",baseURL:"https://api.openai.com/v1",model:"whisper-1",language:"zh",timeout:6e4},whisperLocal:{serverUrl:"http://localhost:8002",modelSize:"base",device:"auto",timeout:12e4}}),Y=["webspeech","whisper-api","whisper-local"];function Z(g){if(!g)return null;const e=g.trim();try{return JSON.parse(e)}catch{const f=e.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!f)return null;try{return JSON.parse(f[1])}catch{return null}}}function K(g,e){if(typeof g=="number"&&Number.isFinite(g))return g;const f=parseFloat(g);return Number.isFinite(f)?f:e}function ee(g){return JSON.parse(JSON.stringify(g))}function te(g){const e=ee(y);if(!g)return e;const f=g.trim();if(!f||/key not found/i.test(f))return e;const o=Z(f);if(!o||typeof o!="object"||Array.isArray(o))return e;if(typeof o.defaultEngine=="string"&&Y.includes(o.defaultEngine)&&(e.defaultEngine=o.defaultEngine),o.webSpeech&&typeof o.webSpeech=="object"&&typeof o.webSpeech.lang=="string"&&o.webSpeech.lang&&(e.webSpeech.lang=o.webSpeech.lang),o.whisperAPI&&typeof o.whisperAPI=="object"){const l=o.whisperAPI;typeof l.apiKey=="string"&&(e.whisperAPI.apiKey=l.apiKey),typeof l.baseURL=="string"&&l.baseURL&&(e.whisperAPI.baseURL=l.baseURL),typeof l.model=="string"&&l.model&&(e.whisperAPI.model=l.model),typeof l.language=="string"&&l.language&&(e.whisperAPI.language=l.language),l.timeout!==void 0&&(e.whisperAPI.timeout=K(l.timeout,y.whisperAPI.timeout))}if(o.whisperLocal&&typeof o.whisperLocal=="object"){const l=o.whisperLocal;typeof l.serverUrl=="string"&&l.serverUrl&&(e.whisperLocal.serverUrl=l.serverUrl),typeof l.modelSize=="string"&&l.modelSize&&(e.whisperLocal.modelSize=l.modelSize),typeof l.device=="string"&&l.device&&(e.whisperLocal.device=l.device),l.timeout!==void 0&&(e.whisperLocal.timeout=K(l.timeout,y.whisperLocal.timeout))}return e}function T(g,e){const f={};g.defaultEngine!==e.defaultEngine&&(f.defaultEngine=e.defaultEngine);for(const o of["webSpeech","whisperAPI","whisperLocal"]){const l=g[o]||{},i=e[o]||{};for(const m of Object.keys(y[o]))l[m]!==i[m]&&(f[`${o}.${m}`]=i[m])}return f}const ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},se={class:"page-title"},le={class:"page-sub"},ie={style:{color:"var(--text-primary)"}},ne={style:{color:"var(--text-muted)","font-size":"11px"}},oe={style:{color:"var(--text-primary)"}},re={style:{color:"var(--text-primary)"}},pe={style:{color:"var(--text-primary)"}},ue={style:{display:"flex",gap:"12px","align-items":"center"}},de={key:0,style:{color:"#faad14","font-size":"12px"}},ce={__name:"SpeechSettings",setup(g){const{t:e}=G(),f=W(),o=E(!1),l=E(!1),i=q(JSON.parse(JSON.stringify(y))),m=E(JSON.parse(JSON.stringify(y))),F=z(()=>[{value:"webspeech",label:e("speechSettings.engineOptions.webspeech")},{value:"whisper-api",label:e("speechSettings.engineOptions.whisper-api")},{value:"whisper-local",label:e("speechSettings.engineOptions.whisper-local")}]),B=z(()=>{const d=`speechSettings.engineHint.${i.defaultEngine}`,s=e(d);return s===d?"":s}),J=z(()=>Object.keys(T(m.value,i)).length>0);function U(d){i.defaultEngine=d.defaultEngine,Object.assign(i.webSpeech,d.webSpeech),Object.assign(i.whisperAPI,d.whisperAPI),Object.assign(i.whisperLocal,d.whisperLocal),m.value=JSON.parse(JSON.stringify(d))}async function k(){o.value=!0;try{const{output:d}=await f.execute("config get speech",1e4);U(te(d))}catch(d){/key not found/i.test(d.message)?U(JSON.parse(JSON.stringify(y))):O.error(e("speechSettings.messages.loadFailed",{err:d.message}))}finally{o.value=!1}}function $(){U(m.value)}async function H(){const d=T(m.value,i),s=Object.keys(d);if(s.length===0){O.info(e("speechSettings.messages.noChanges"));return}l.value=!0;let S=0,_=0;for(const w of s){const b=d[w],L=String(b).replace(/"/g,'\\"'),x=`config set speech.${w} "${L}"`;try{const{output:p,exitCode:N}=await f.execute(x,1e4);N!==0||/error|failed|失败/i.test(p)?(_++,O.error(e("speechSettings.messages.saveItemFailed",{key:w,err:p.slice(0,80)}))):S++}catch(p){_++,O.error(e("speechSettings.messages.saveItemFailed",{key:w,err:p.message}))}}l.value=!1,_===0?(O.success(e("speechSettings.messages.saveOk",{count:S})),m.value=JSON.parse(JSON.stringify(i))):S>0&&(O.warning(e("speechSettings.messages.savePartial",{ok:S,fail:_})),await k())}return X(()=>{k()}),(d,s)=>{const S=h("a-button"),_=h("a-alert"),w=h("a-select"),b=h("a-form-item"),L=h("a-form"),x=h("a-card"),p=h("a-select-option"),N=h("a-input-password"),I=h("a-input"),j=h("a-input-number"),V=h("a-spin");return P(),R("div",null,[v("div",ae,[v("div",null,[v("h2",se,c(n(e)("speechSettings.title")),1),v("p",le,c(n(e)("speechSettings.subtitle")),1)]),t(S,{loading:o.value,onClick:k},{icon:a(()=>[t(n(M))]),default:a(()=>[u(" "+c(n(e)("speechSettings.refresh")),1)]),_:1},8,["loading"])]),t(_,{message:n(e)("speechSettings.alert.message"),description:n(e)("speechSettings.alert.description"),type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),t(V,{spinning:o.value},{default:a(()=>[t(x,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[v("span",ie,[t(n(Q),{style:{"margin-right":"8px"}}),u(c(n(e)("speechSettings.engineCardTitle")),1)])]),default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[t(b,{label:n(e)("speechSettings.engineLabel")},{extra:a(()=>[v("span",ne,c(B.value),1)]),default:a(()=>[t(w,{value:i.defaultEngine,"onUpdate:value":s[0]||(s[0]=r=>i.defaultEngine=r),style:{width:"320px"},disabled:l.value,options:F.value},null,8,["value","disabled","options"])]),_:1},8,["label"])]),_:1})]),_:1}),i.defaultEngine==="webspeech"?(P(),C(x,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[v("span",oe,c(n(e)("speechSettings.webSpeech.cardTitle")),1)]),default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[t(b,{label:n(e)("speechSettings.webSpeech.langLabel")},{default:a(()=>[t(w,{value:i.webSpeech.lang,"onUpdate:value":s[1]||(s[1]=r=>i.webSpeech.lang=r),style:{width:"240px"},disabled:l.value},{default:a(()=>[t(p,{value:"zh-CN"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.zh-CN")),1)]),_:1}),t(p,{value:"zh-TW"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.zh-TW")),1)]),_:1}),t(p,{value:"en-US"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.en-US")),1)]),_:1}),t(p,{value:"en-GB"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.en-GB")),1)]),_:1}),t(p,{value:"ja-JP"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.ja-JP")),1)]),_:1}),t(p,{value:"ko-KR"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.ko-KR")),1)]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):A("",!0),i.defaultEngine==="whisper-api"?(P(),C(x,{key:1,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[v("span",re,c(n(e)("speechSettings.whisperAPI.cardTitle")),1)]),default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[t(b,{label:n(e)("speechSettings.whisperAPI.apiKeyLabel")},{default:a(()=>[t(N,{value:i.whisperAPI.apiKey,"onUpdate:value":s[2]||(s[2]=r=>i.whisperAPI.apiKey=r),placeholder:"sk-...",disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperAPI.baseUrlLabel")},{default:a(()=>[t(I,{value:i.whisperAPI.baseURL,"onUpdate:value":s[3]||(s[3]=r=>i.whisperAPI.baseURL=r),disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperAPI.modelLabel")},{default:a(()=>[t(I,{value:i.whisperAPI.model,"onUpdate:value":s[4]||(s[4]=r=>i.whisperAPI.model=r),disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperAPI.languageLabel")},{default:a(()=>[t(I,{value:i.whisperAPI.language,"onUpdate:value":s[5]||(s[5]=r=>i.whisperAPI.language=r),disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperAPI.timeoutLabel")},{default:a(()=>[t(j,{value:i.whisperAPI.timeout,"onUpdate:value":s[6]||(s[6]=r=>i.whisperAPI.timeout=r),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):A("",!0),i.defaultEngine==="whisper-local"?(P(),C(x,{key:2,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[v("span",pe,c(n(e)("speechSettings.whisperLocal.cardTitle")),1)]),default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[t(b,{label:n(e)("speechSettings.whisperLocal.serverUrlLabel")},{default:a(()=>[t(I,{value:i.whisperLocal.serverUrl,"onUpdate:value":s[7]||(s[7]=r=>i.whisperLocal.serverUrl=r),placeholder:"http://localhost:8002",disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperLocal.modelSizeLabel")},{default:a(()=>[t(w,{value:i.whisperLocal.modelSize,"onUpdate:value":s[8]||(s[8]=r=>i.whisperLocal.modelSize=r),style:{width:"180px"},disabled:l.value},{default:a(()=>[t(p,{value:"tiny"},{default:a(()=>[...s[11]||(s[11]=[u("tiny",-1)])]),_:1}),t(p,{value:"base"},{default:a(()=>[...s[12]||(s[12]=[u("base",-1)])]),_:1}),t(p,{value:"small"},{default:a(()=>[...s[13]||(s[13]=[u("small",-1)])]),_:1}),t(p,{value:"medium"},{default:a(()=>[...s[14]||(s[14]=[u("medium",-1)])]),_:1}),t(p,{value:"large"},{default:a(()=>[...s[15]||(s[15]=[u("large",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperLocal.deviceLabel")},{default:a(()=>[t(w,{value:i.whisperLocal.device,"onUpdate:value":s[9]||(s[9]=r=>i.whisperLocal.device=r),style:{width:"180px"},disabled:l.value},{default:a(()=>[t(p,{value:"auto"},{default:a(()=>[...s[16]||(s[16]=[u("auto",-1)])]),_:1}),t(p,{value:"cpu"},{default:a(()=>[...s[17]||(s[17]=[u("cpu",-1)])]),_:1}),t(p,{value:"cuda"},{default:a(()=>[...s[18]||(s[18]=[u("cuda",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperLocal.timeoutLabel")},{default:a(()=>[t(j,{value:i.whisperLocal.timeout,"onUpdate:value":s[10]||(s[10]=r=>i.whisperLocal.timeout=r),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):A("",!0),v("div",ue,[t(S,{onClick:$,disabled:l.value||o.value},{default:a(()=>[u(c(n(e)("speechSettings.buttons.reset")),1)]),_:1},8,["disabled"]),t(S,{type:"primary",loading:l.value,disabled:!J.value,onClick:H},{default:a(()=>[u(c(n(e)("speechSettings.buttons.save")),1)]),_:1},8,["loading","disabled"]),J.value?(P(),R("span",de,c(n(e)("speechSettings.dirtyHint")),1)):A("",!0)])]),_:1},8,["spinning"])])}}},he=D(ce,[["__scopeId","data-v-578b4107"]]);export{he as default};
|
|
1
|
+
import{_ as D,b as G,u as W,d as O}from"./index-CEbbycgJ.js";import{R as M,S as Q}from"./icons-NT6gy8Ee.js";import{a as q,r as E,o as X,M as R,R as v,P as c,u as n,c as t,N as a,K as h,L as P,O as u,Q as C,S as A,f as z}from"./vendor-M5lGV-wr.js";const y=Object.freeze({defaultEngine:"webspeech",webSpeech:{lang:"zh-CN"},whisperAPI:{apiKey:"",baseURL:"https://api.openai.com/v1",model:"whisper-1",language:"zh",timeout:6e4},whisperLocal:{serverUrl:"http://localhost:8002",modelSize:"base",device:"auto",timeout:12e4}}),Y=["webspeech","whisper-api","whisper-local"];function Z(g){if(!g)return null;const e=g.trim();try{return JSON.parse(e)}catch{const f=e.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!f)return null;try{return JSON.parse(f[1])}catch{return null}}}function K(g,e){if(typeof g=="number"&&Number.isFinite(g))return g;const f=parseFloat(g);return Number.isFinite(f)?f:e}function ee(g){return JSON.parse(JSON.stringify(g))}function te(g){const e=ee(y);if(!g)return e;const f=g.trim();if(!f||/key not found/i.test(f))return e;const o=Z(f);if(!o||typeof o!="object"||Array.isArray(o))return e;if(typeof o.defaultEngine=="string"&&Y.includes(o.defaultEngine)&&(e.defaultEngine=o.defaultEngine),o.webSpeech&&typeof o.webSpeech=="object"&&typeof o.webSpeech.lang=="string"&&o.webSpeech.lang&&(e.webSpeech.lang=o.webSpeech.lang),o.whisperAPI&&typeof o.whisperAPI=="object"){const l=o.whisperAPI;typeof l.apiKey=="string"&&(e.whisperAPI.apiKey=l.apiKey),typeof l.baseURL=="string"&&l.baseURL&&(e.whisperAPI.baseURL=l.baseURL),typeof l.model=="string"&&l.model&&(e.whisperAPI.model=l.model),typeof l.language=="string"&&l.language&&(e.whisperAPI.language=l.language),l.timeout!==void 0&&(e.whisperAPI.timeout=K(l.timeout,y.whisperAPI.timeout))}if(o.whisperLocal&&typeof o.whisperLocal=="object"){const l=o.whisperLocal;typeof l.serverUrl=="string"&&l.serverUrl&&(e.whisperLocal.serverUrl=l.serverUrl),typeof l.modelSize=="string"&&l.modelSize&&(e.whisperLocal.modelSize=l.modelSize),typeof l.device=="string"&&l.device&&(e.whisperLocal.device=l.device),l.timeout!==void 0&&(e.whisperLocal.timeout=K(l.timeout,y.whisperLocal.timeout))}return e}function T(g,e){const f={};g.defaultEngine!==e.defaultEngine&&(f.defaultEngine=e.defaultEngine);for(const o of["webSpeech","whisperAPI","whisperLocal"]){const l=g[o]||{},i=e[o]||{};for(const m of Object.keys(y[o]))l[m]!==i[m]&&(f[`${o}.${m}`]=i[m])}return f}const ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},se={class:"page-title"},le={class:"page-sub"},ie={style:{color:"var(--text-primary)"}},ne={style:{color:"var(--text-muted)","font-size":"11px"}},oe={style:{color:"var(--text-primary)"}},re={style:{color:"var(--text-primary)"}},pe={style:{color:"var(--text-primary)"}},ue={style:{display:"flex",gap:"12px","align-items":"center"}},de={key:0,style:{color:"#faad14","font-size":"12px"}},ce={__name:"SpeechSettings",setup(g){const{t:e}=G(),f=W(),o=E(!1),l=E(!1),i=q(JSON.parse(JSON.stringify(y))),m=E(JSON.parse(JSON.stringify(y))),F=z(()=>[{value:"webspeech",label:e("speechSettings.engineOptions.webspeech")},{value:"whisper-api",label:e("speechSettings.engineOptions.whisper-api")},{value:"whisper-local",label:e("speechSettings.engineOptions.whisper-local")}]),B=z(()=>{const d=`speechSettings.engineHint.${i.defaultEngine}`,s=e(d);return s===d?"":s}),J=z(()=>Object.keys(T(m.value,i)).length>0);function U(d){i.defaultEngine=d.defaultEngine,Object.assign(i.webSpeech,d.webSpeech),Object.assign(i.whisperAPI,d.whisperAPI),Object.assign(i.whisperLocal,d.whisperLocal),m.value=JSON.parse(JSON.stringify(d))}async function k(){o.value=!0;try{const{output:d}=await f.execute("config get speech",1e4);U(te(d))}catch(d){/key not found/i.test(d.message)?U(JSON.parse(JSON.stringify(y))):O.error(e("speechSettings.messages.loadFailed",{err:d.message}))}finally{o.value=!1}}function $(){U(m.value)}async function H(){const d=T(m.value,i),s=Object.keys(d);if(s.length===0){O.info(e("speechSettings.messages.noChanges"));return}l.value=!0;let S=0,_=0;for(const w of s){const b=d[w],L=String(b).replace(/"/g,'\\"'),x=`config set speech.${w} "${L}"`;try{const{output:p,exitCode:N}=await f.execute(x,1e4);N!==0||/error|failed|失败/i.test(p)?(_++,O.error(e("speechSettings.messages.saveItemFailed",{key:w,err:p.slice(0,80)}))):S++}catch(p){_++,O.error(e("speechSettings.messages.saveItemFailed",{key:w,err:p.message}))}}l.value=!1,_===0?(O.success(e("speechSettings.messages.saveOk",{count:S})),m.value=JSON.parse(JSON.stringify(i))):S>0&&(O.warning(e("speechSettings.messages.savePartial",{ok:S,fail:_})),await k())}return X(()=>{k()}),(d,s)=>{const S=h("a-button"),_=h("a-alert"),w=h("a-select"),b=h("a-form-item"),L=h("a-form"),x=h("a-card"),p=h("a-select-option"),N=h("a-input-password"),I=h("a-input"),j=h("a-input-number"),V=h("a-spin");return P(),R("div",null,[v("div",ae,[v("div",null,[v("h2",se,c(n(e)("speechSettings.title")),1),v("p",le,c(n(e)("speechSettings.subtitle")),1)]),t(S,{loading:o.value,onClick:k},{icon:a(()=>[t(n(M))]),default:a(()=>[u(" "+c(n(e)("speechSettings.refresh")),1)]),_:1},8,["loading"])]),t(_,{message:n(e)("speechSettings.alert.message"),description:n(e)("speechSettings.alert.description"),type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),t(V,{spinning:o.value},{default:a(()=>[t(x,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[v("span",ie,[t(n(Q),{style:{"margin-right":"8px"}}),u(c(n(e)("speechSettings.engineCardTitle")),1)])]),default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[t(b,{label:n(e)("speechSettings.engineLabel")},{extra:a(()=>[v("span",ne,c(B.value),1)]),default:a(()=>[t(w,{value:i.defaultEngine,"onUpdate:value":s[0]||(s[0]=r=>i.defaultEngine=r),style:{width:"320px"},disabled:l.value,options:F.value},null,8,["value","disabled","options"])]),_:1},8,["label"])]),_:1})]),_:1}),i.defaultEngine==="webspeech"?(P(),C(x,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[v("span",oe,c(n(e)("speechSettings.webSpeech.cardTitle")),1)]),default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[t(b,{label:n(e)("speechSettings.webSpeech.langLabel")},{default:a(()=>[t(w,{value:i.webSpeech.lang,"onUpdate:value":s[1]||(s[1]=r=>i.webSpeech.lang=r),style:{width:"240px"},disabled:l.value},{default:a(()=>[t(p,{value:"zh-CN"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.zh-CN")),1)]),_:1}),t(p,{value:"zh-TW"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.zh-TW")),1)]),_:1}),t(p,{value:"en-US"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.en-US")),1)]),_:1}),t(p,{value:"en-GB"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.en-GB")),1)]),_:1}),t(p,{value:"ja-JP"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.ja-JP")),1)]),_:1}),t(p,{value:"ko-KR"},{default:a(()=>[u(c(n(e)("speechSettings.webSpeech.langOptions.ko-KR")),1)]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):A("",!0),i.defaultEngine==="whisper-api"?(P(),C(x,{key:1,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[v("span",re,c(n(e)("speechSettings.whisperAPI.cardTitle")),1)]),default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[t(b,{label:n(e)("speechSettings.whisperAPI.apiKeyLabel")},{default:a(()=>[t(N,{value:i.whisperAPI.apiKey,"onUpdate:value":s[2]||(s[2]=r=>i.whisperAPI.apiKey=r),placeholder:"sk-...",disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperAPI.baseUrlLabel")},{default:a(()=>[t(I,{value:i.whisperAPI.baseURL,"onUpdate:value":s[3]||(s[3]=r=>i.whisperAPI.baseURL=r),disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperAPI.modelLabel")},{default:a(()=>[t(I,{value:i.whisperAPI.model,"onUpdate:value":s[4]||(s[4]=r=>i.whisperAPI.model=r),disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperAPI.languageLabel")},{default:a(()=>[t(I,{value:i.whisperAPI.language,"onUpdate:value":s[5]||(s[5]=r=>i.whisperAPI.language=r),disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperAPI.timeoutLabel")},{default:a(()=>[t(j,{value:i.whisperAPI.timeout,"onUpdate:value":s[6]||(s[6]=r=>i.whisperAPI.timeout=r),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):A("",!0),i.defaultEngine==="whisper-local"?(P(),C(x,{key:2,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[v("span",pe,c(n(e)("speechSettings.whisperLocal.cardTitle")),1)]),default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[t(b,{label:n(e)("speechSettings.whisperLocal.serverUrlLabel")},{default:a(()=>[t(I,{value:i.whisperLocal.serverUrl,"onUpdate:value":s[7]||(s[7]=r=>i.whisperLocal.serverUrl=r),placeholder:"http://localhost:8002",disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperLocal.modelSizeLabel")},{default:a(()=>[t(w,{value:i.whisperLocal.modelSize,"onUpdate:value":s[8]||(s[8]=r=>i.whisperLocal.modelSize=r),style:{width:"180px"},disabled:l.value},{default:a(()=>[t(p,{value:"tiny"},{default:a(()=>[...s[11]||(s[11]=[u("tiny",-1)])]),_:1}),t(p,{value:"base"},{default:a(()=>[...s[12]||(s[12]=[u("base",-1)])]),_:1}),t(p,{value:"small"},{default:a(()=>[...s[13]||(s[13]=[u("small",-1)])]),_:1}),t(p,{value:"medium"},{default:a(()=>[...s[14]||(s[14]=[u("medium",-1)])]),_:1}),t(p,{value:"large"},{default:a(()=>[...s[15]||(s[15]=[u("large",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperLocal.deviceLabel")},{default:a(()=>[t(w,{value:i.whisperLocal.device,"onUpdate:value":s[9]||(s[9]=r=>i.whisperLocal.device=r),style:{width:"180px"},disabled:l.value},{default:a(()=>[t(p,{value:"auto"},{default:a(()=>[...s[16]||(s[16]=[u("auto",-1)])]),_:1}),t(p,{value:"cpu"},{default:a(()=>[...s[17]||(s[17]=[u("cpu",-1)])]),_:1}),t(p,{value:"cuda"},{default:a(()=>[...s[18]||(s[18]=[u("cuda",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1},8,["label"]),t(b,{label:n(e)("speechSettings.whisperLocal.timeoutLabel")},{default:a(()=>[t(j,{value:i.whisperLocal.timeout,"onUpdate:value":s[10]||(s[10]=r=>i.whisperLocal.timeout=r),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:l.value},null,8,["value","disabled"])]),_:1},8,["label"])]),_:1})]),_:1})):A("",!0),v("div",ue,[t(S,{onClick:$,disabled:l.value||o.value},{default:a(()=>[u(c(n(e)("speechSettings.buttons.reset")),1)]),_:1},8,["disabled"]),t(S,{type:"primary",loading:l.value,disabled:!J.value,onClick:H},{default:a(()=>[u(c(n(e)("speechSettings.buttons.save")),1)]),_:1},8,["loading","disabled"]),J.value?(P(),R("span",de,c(n(e)("speechSettings.dirtyHint")),1)):A("",!0)])]),_:1},8,["spinning"])])}}},he=D(ce,[["__scopeId","data-v-578b4107"]]);export{he as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as _e,u as ke,d as n}from"./index-DY5Oc3z6.js";import{R as he,X as j,as as te,u as xe,at as Se,ak as Ce}from"./icons-NT6gy8Ee.js";import{o as Pe,M as w,R as f,c as a,N as o,Q as b,S,r as g,K as d,a as oe,f as J,L as i,O as c,u as k,P as v}from"./vendor-M5lGV-wr.js";const Re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ue={key:0,style:{"margin-top":"16px"}},Ne={key:0},De={key:1,style:{color:"var(--text-secondary)"}},Ae={key:0},Le={key:1,style:{color:"var(--text-secondary)"}},$e={style:{color:"#ff4d4f","word-break":"break-all"}},ze={key:0,style:{"text-align":"center",padding:"30px"}},Ee={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Ve={key:0,style:{"margin-top":"16px"}},Oe={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},We={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"var(--text-primary)","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap","font-family":"'Cascadia Code', 'Fira Code', Consolas, monospace"}},Ge={key:0,style:{"text-align":"center",padding:"30px"}},Ie={__name:"SyncSettings",setup(Te){const m=ke(),D=g(!1),A=g(""),O=g(0),W=g(0),L=g(0),h=g(0),G=g(!1),I=g(!1),C=g(""),T=g(""),B=g(!1),P=g([]),re=[{title:"ID",dataIndex:"id",key:"id",width:220,ellipsis:!0},{title:"资源 ID",dataIndex:"resource_id",key:"resource_id",ellipsis:!0},{title:"类型",dataIndex:"resource_type",key:"resource_type",width:120},{title:"操作",key:"action",width:200}];async function $(){D.value=!0,A.value="";try{const t=await m.sendRaw({type:"sync.status"},15e3),e=t?.result;if(!t?.ok||!e?.success)throw new Error(e?.error||t?.error||"获取失败");O.value=Number(e.totalResources??0),W.value=Number(e.pending??0),L.value=Number(e.synced??0),h.value=Number(e.conflicts??0),h.value>0?await se():P.value=[]}catch(t){A.value="获取状态失败:"+(t?.message||String(t))}finally{D.value=!1}}async function se(){B.value=!0;try{const t=await m.sendRaw({type:"sync.conflicts"},15e3),e=Array.isArray(t?.result?.conflicts)?t.result.conflicts:[];P.value=e}catch{P.value=[]}finally{B.value=!1}}async function le(){G.value=!0,T.value="sync.push";try{const t=await m.sendRaw({type:"sync.push"},6e4),e=t?.result;C.value=JSON.stringify(e,null,2),t?.ok&&e?.success?(n.success(`推送完成 (${e.pushed??0} / ${e.total??0})`),await $()):n.error("推送失败:"+(e?.error||t?.error||""))}catch(t){C.value=t?.message||String(t),n.error("推送失败:"+(t?.message||""))}finally{G.value=!1}}async function ne(){I.value=!0,T.value="sync.pull";try{const t=await m.sendRaw({type:"sync.pull"},6e4),e=t?.result;C.value=JSON.stringify(e,null,2),t?.ok&&e?.success?(n.success(`拉取完成 (检查 ${e.checked??0}, 更新 ${e.updated??0})`),await $()):n.error("拉取失败:"+(e?.error||t?.error||""))}catch(t){C.value=t?.message||String(t),n.error("拉取失败:"+(t?.message||""))}finally{I.value=!1}}async function q(t,e){try{const l=await m.sendRaw({type:"sync.resolve",conflictId:t,side:e},3e4),R=l?.result;l?.ok&&R?.success?(n.success(`已用${e==="local"?"本地":"远程"}版本解决`),await $()):n.error("解决失败:"+(R?.error||l?.error||""))}catch(l){n.error("解决失败:"+(l?.message||""))}}const r=oe({configured:!1,maskedPassword:"",form:{url:"",username:"",password:"",remotePath:"/chainlesschain"},status:null,saving:!1,testing:!1,running:!1,busy:J(()=>r.saving||r.testing||r.running)}),ue=J(()=>{const t=r.status?.lastRunStatus;return t==="success"?"green":t==="conflict"?"orange":t==="failed"?"red":"default"}),ie=J(()=>{const t=r.status?.lastRunStatus;return t?t==="success"?"成功":t==="conflict"?"有冲突跳过":t==="failed"?"失败":t:r.configured?"已配置":"未配置"});function de(t){const e=new Date(t);return`${e.toLocaleDateString()} ${e.toLocaleTimeString()}`}async function M(){try{const t=await m.sendRaw({type:"sync.webdav.config-get"},1e4);if(!t||t.ok===!1)return;const e=t.result?.data||{};r.form.url=e.url||"",r.form.username=e.username||"",r.form.remotePath=e.remotePath||"/chainlesschain",r.form.password="",r.maskedPassword=e.password||"",r.configured=!!e.configured,r.status=e.status||null}catch(t){console.warn("[SyncSettings] webdav.config-get failed:",t?.message)}}async function F(){r.saving=!0;try{const t=await m.sendRaw({type:"sync.webdav.config-set",payload:{url:r.form.url.trim(),username:r.form.username,password:r.form.password,remotePath:r.form.remotePath||"/"}},15e3),e=t?.result;t?.ok&&e?.success?(n.success("WebDAV 配置已保存"),r.form.password="",await M()):n.error("保存失败:"+(e?.error||t?.error||"未知错误"))}catch(t){n.error("保存失败:"+(t?.message||""))}finally{r.saving=!1}}async function ce(){r.form.url&&r.form.password&&!r.configured&&await F(),r.testing=!0;try{const t=await m.sendRaw({type:"sync.webdav.test"},3e4),e=t?.result;t?.ok&&e?.success?n.success("WebDAV 连接成功"):n.error("连接失败:"+(e?.error||t?.error||"未知错误"))}catch(t){n.error("连接失败:"+(t?.message||""))}finally{r.testing=!1}}async function fe(){r.running=!0;try{const t=await m.sendRaw({type:"sync.webdav.run"},3e5),e=t?.result;if(t?.ok&&e?.success){const l=`推送 ${e.pushed} / 跳过 ${e.skipped} / 删除 ${e.deleted}`;e.status==="conflict"?n.warning("同步完成(有跳过):"+l):n.success("同步完成:"+l)}else n.error("同步失败:"+(e?.error||t?.error||"未知错误"));await M()}catch(t){n.error("同步失败:"+(t?.message||""))}finally{r.running=!1}}async function me(){try{const t=await m.sendRaw({type:"sync.webdav.config-clear"},5e3),e=t?.result;t?.ok&&e?.success?(n.success("已清除 WebDAV 凭证"),r.form.url="",r.form.username="",r.form.password="",r.form.remotePath="/chainlesschain",r.configured=!1,r.maskedPassword="",r.status=null):n.error("清除失败:"+(e?.error||t?.error||"未知错误"))}catch(t){n.error("清除失败:"+(t?.message||""))}}const s=oe({configured:!1,maskedPassword:"",saving:!1,form:{enabled:!1,autoSync:!1,remoteUrl:"",repoPath:"",authorName:"",authorEmail:"",username:"",password:""}});async function H(){try{const t=await m.sendRaw({type:"git.config-get"},1e4);if(!t||t.ok===!1)return;const e=t.result;if(!e?.success)return;const l=e.data||{};s.form.enabled=!!l.enabled,s.form.autoSync=!!l.autoSync,s.form.remoteUrl=l.remoteUrl||"",s.form.repoPath=l.repoPath||"",s.form.authorName=l.authorName||"",s.form.authorEmail=l.authorEmail||"",s.form.username=l.auth?.username||"",s.form.password="",s.maskedPassword=l.auth?.password||l.auth?.token||"",s.configured=!!l.configured}catch(t){console.warn("[SyncSettings] git.config-get failed:",t?.message)}}async function pe(){s.saving=!0;try{const t={enabled:s.form.enabled,autoSync:s.form.autoSync,remoteUrl:s.form.remoteUrl.trim(),repoPath:s.form.repoPath.trim(),authorName:s.form.authorName,authorEmail:s.form.authorEmail,auth:{username:s.form.username,password:s.form.password}},e=await m.sendRaw({type:"git.config-set",payload:t},15e3),l=e?.result;e?.ok&&l?.success?(n.success("Git 配置已保存"),s.form.password="",await H()):n.error("保存失败:"+(l?.error||e?.error||"未知错误"))}catch(t){n.error("保存失败:"+(t?.message||""))}finally{s.saving=!1}}async function ye(){try{const t=await m.sendRaw({type:"git.config-clear"},5e3),e=t?.result;t?.ok&&e?.success?(n.success("已清除 Git 凭证"),s.form.username="",s.form.password="",s.form.enabled=!1,s.maskedPassword="",s.configured=!1):n.error("清除失败:"+(e?.error||t?.error||"未知错误"))}catch(t){n.error("清除失败:"+(t?.message||""))}}async function K(){await Promise.all([$(),M(),H()])}return Pe(K),(t,e)=>{const l=d("a-button"),R=d("a-alert"),_=d("a-space"),z=d("a-tag"),x=d("a-input"),p=d("a-form-item"),y=d("a-col"),Q=d("a-input-password"),U=d("a-row"),X=d("a-popconfirm"),Y=d("a-form"),E=d("a-descriptions-item"),ge=d("a-descriptions"),N=d("a-card"),Z=d("a-switch"),ee=d("a-spin"),V=d("a-statistic"),ve=d("a-empty"),we=d("a-table");return i(),w("div",null,[f("div",Re,[e[13]||(e[13]=f("div",null,[f("h2",{class:"page-title"},"同步设置"),f("p",{class:"page-sub"},"通过 web-shell sync.* WS topic 直连主进程同步引擎")],-1)),a(l,{type:"primary",ghost:"",loading:D.value,onClick:K},{icon:o(()=>[a(k(he))]),default:o(()=>[e[12]||(e[12]=c(" 刷新 ",-1))]),_:1},8,["loading"])]),a(R,{type:"info","show-icon":"",message:"本页 status / push / pull 通过 web-shell sync.* WS topic 直连 main 进程;WebDAV 在下方独立段",description:"其它 provider(Git / P2P / S3 等)的细粒度配置仍在 V5/V6 桌面 shell。",style:{"margin-bottom":"16px"}}),a(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(te)),e[14]||(e[14]=f("span",null,"WebDAV 网盘同步",-1))]),_:1})]),extra:o(()=>[r.configured?(i(),b(z,{key:0,color:ue.value},{default:o(()=>[c(v(ie.value),1)]),_:1},8,["color"])):(i(),b(z,{key:1,color:"default"},{default:o(()=>[...e[15]||(e[15]=[c("未配置",-1)])]),_:1}))]),default:o(()=>[a(Y,{model:r.form,layout:"vertical",disabled:r.busy},{default:o(()=>[a(p,{label:"服务器 URL",required:""},{default:o(()=>[a(x,{value:r.form.url,"onUpdate:value":e[0]||(e[0]=u=>r.form.url=u),placeholder:"https://dav.jianguoyun.com/dav/","allow-clear":""},null,8,["value"])]),_:1}),a(U,{gutter:16},{default:o(()=>[a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"用户名"},{default:o(()=>[a(x,{value:r.form.username,"onUpdate:value":e[1]||(e[1]=u=>r.form.username=u),placeholder:"user@example.com","allow-clear":""},null,8,["value"])]),_:1})]),_:1}),a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"密码"},{default:o(()=>[a(Q,{value:r.form.password,"onUpdate:value":e[2]||(e[2]=u=>r.form.password=u),placeholder:r.configured?r.maskedPassword||"(已保存,留空保持不变)":"请输入密码",autocomplete:"new-password"},null,8,["value","placeholder"])]),_:1})]),_:1})]),_:1}),a(p,{label:"远端路径"},{default:o(()=>[a(x,{value:r.form.remotePath,"onUpdate:value":e[3]||(e[3]=u=>r.form.remotePath=u),placeholder:"/chainlesschain","allow-clear":""},null,8,["value"])]),_:1}),a(_,{wrap:""},{default:o(()=>[a(l,{type:"primary",loading:r.saving,onClick:F},{default:o(()=>[...e[16]||(e[16]=[c("保存",-1)])]),_:1},8,["loading"]),a(l,{loading:r.testing,onClick:ce},{default:o(()=>[...e[17]||(e[17]=[c("测试连接",-1)])]),_:1},8,["loading"]),a(l,{type:"primary",loading:r.running,disabled:!r.configured,onClick:fe},{icon:o(()=>[a(k(j))]),default:o(()=>[e[18]||(e[18]=c(" 立即同步 ",-1))]),_:1},8,["loading","disabled"]),r.configured?(i(),b(X,{key:0,title:"确定要清除 WebDAV 凭证吗?已推送到远端的文件不会被删除。","ok-text":"清除","cancel-text":"取消",onConfirm:me},{default:o(()=>[a(l,{danger:""},{default:o(()=>[...e[19]||(e[19]=[c("断开连接",-1)])]),_:1})]),_:1})):S("",!0)]),_:1})]),_:1},8,["model","disabled"]),r.status?(i(),w("div",Ue,[a(ge,{column:2,size:"small",bordered:""},{default:o(()=>[a(E,{label:"上次同步"},{default:o(()=>[r.status.lastSyncAt?(i(),w("span",Ne,v(de(r.status.lastSyncAt)),1)):(i(),w("span",De,"未同步过"))]),_:1}),a(E,{label:"耗时"},{default:o(()=>[r.status.lastRunDurationMs!=null?(i(),w("span",Ae,v(r.status.lastRunDurationMs)+" ms",1)):(i(),w("span",Le,"—"))]),_:1}),a(E,{label:"累积推送",span:2},{default:o(()=>[e[20]||(e[20]=c(" 已推送 ",-1)),f("b",null,v(r.status.itemsPushed),1),e[21]||(e[21]=c(" · 已跳过 ",-1)),f("b",null,v(r.status.itemsSkipped),1),e[22]||(e[22]=c(" · 已删除 ",-1)),f("b",null,v(r.status.itemsDeleted),1)]),_:1}),r.status.lastRunError?(i(),b(E,{key:0,label:"错误",span:2},{default:o(()=>[f("span",$e,v(r.status.lastRunError),1)]),_:1})):S("",!0)]),_:1})])):S("",!0)]),_:1}),a(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(xe)),e[23]||(e[23]=f("span",null,"Git 仓库",-1))]),_:1})]),extra:o(()=>[a(z,{color:s.configured&&s.form.enabled?"green":"default"},{default:o(()=>[c(v(s.configured?s.form.enabled?"已启用":"已配置未启用":"未配置"),1)]),_:1},8,["color"])]),default:o(()=>[a(Y,{model:s.form,layout:"vertical",disabled:s.saving},{default:o(()=>[a(U,{gutter:16},{default:o(()=>[a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"启用 Git 同步"},{default:o(()=>[a(Z,{checked:s.form.enabled,"onUpdate:checked":e[4]||(e[4]=u=>s.form.enabled=u)},null,8,["checked"])]),_:1})]),_:1}),a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"自动同步"},{default:o(()=>[a(Z,{checked:s.form.autoSync,"onUpdate:checked":e[5]||(e[5]=u=>s.form.autoSync=u)},null,8,["checked"])]),_:1})]),_:1})]),_:1}),a(p,{label:"远程仓库 URL"},{default:o(()=>[a(x,{value:s.form.remoteUrl,"onUpdate:value":e[6]||(e[6]=u=>s.form.remoteUrl=u),placeholder:"https://github.com/user/repo.git","allow-clear":""},null,8,["value"])]),_:1}),a(p,{label:"本地仓库路径"},{default:o(()=>[a(x,{value:s.form.repoPath,"onUpdate:value":e[7]||(e[7]=u=>s.form.repoPath=u),placeholder:"留空使用默认 (userData/git-repo)","allow-clear":""},null,8,["value"])]),_:1}),a(U,{gutter:16},{default:o(()=>[a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"作者名"},{default:o(()=>[a(x,{value:s.form.authorName,"onUpdate:value":e[8]||(e[8]=u=>s.form.authorName=u),placeholder:"ChainlessChain User","allow-clear":""},null,8,["value"])]),_:1})]),_:1}),a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"作者邮箱"},{default:o(()=>[a(x,{value:s.form.authorEmail,"onUpdate:value":e[9]||(e[9]=u=>s.form.authorEmail=u),placeholder:"user@chainlesschain.com","allow-clear":""},null,8,["value"])]),_:1})]),_:1})]),_:1}),a(U,{gutter:16},{default:o(()=>[a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"用户名"},{default:o(()=>[a(x,{value:s.form.username,"onUpdate:value":e[10]||(e[10]=u=>s.form.username=u),placeholder:"GitHub 用户名 / 邮箱","allow-clear":""},null,8,["value"])]),_:1})]),_:1}),a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"密码 / Token",help:s.configured&&!s.form.password?"留空则沿用已保存的值":""},{default:o(()=>[a(Q,{value:s.form.password,"onUpdate:value":e[11]||(e[11]=u=>s.form.password=u),placeholder:s.configured?s.maskedPassword||"(已保存,留空保持不变)":"Personal Access Token 或密码",autocomplete:"new-password"},null,8,["value","placeholder"])]),_:1},8,["help"])]),_:1})]),_:1}),a(R,{type:"warning","show-icon":"",message:"Git 凭证当前以明文存储在 git-config.json — 建议使用 Personal Access Token 而非账号密码,且 token 范围尽量收敛 (repo 即可)。",style:{"margin-bottom":"16px"}}),a(_,{wrap:""},{default:o(()=>[a(l,{type:"primary",loading:s.saving,onClick:pe},{default:o(()=>[...e[24]||(e[24]=[c("保存",-1)])]),_:1},8,["loading"]),s.configured?(i(),b(X,{key:0,title:"确定要清除 Git 凭证吗?远程仓库 URL / 路径会保留。","ok-text":"清除","cancel-text":"取消",onConfirm:ye},{default:o(()=>[a(l,{danger:""},{default:o(()=>[...e[25]||(e[25]=[c("清除凭证",-1)])]),_:1})]),_:1})):S("",!0)]),_:1})]),_:1},8,["model","disabled"])]),_:1}),a(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(te)),e[26]||(e[26]=f("span",null,"同步状态",-1))]),_:1})]),extra:o(()=>[a(z,{color:h.value>0?"red":L.value>0?"green":"default"},{default:o(()=>[c(v(h.value>0?`${h.value} 个冲突`:O.value===0?"无资源":"正常"),1)]),_:1},8,["color"])]),default:o(()=>[D.value?(i(),w("div",ze,[a(ee)])):(i(),b(U,{key:1,gutter:[16,16]},{default:o(()=>[a(y,{xs:12,sm:6},{default:o(()=>[a(V,{title:"资源总数",value:O.value,"value-style":{fontSize:"20px"}},null,8,["value"])]),_:1}),a(y,{xs:12,sm:6},{default:o(()=>[a(V,{title:"待同步",value:W.value,"value-style":{color:W.value>0?"#faad14":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1}),a(y,{xs:12,sm:6},{default:o(()=>[a(V,{title:"已同步",value:L.value,"value-style":{color:L.value>0?"#52c41a":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1}),a(y,{xs:12,sm:6},{default:o(()=>[a(V,{title:"冲突",value:h.value,"value-style":{color:h.value>0?"#ff4d4f":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1})]),_:1})),A.value?(i(),w("div",Ee,v(A.value),1)):S("",!0)]),_:1}),a(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(j)),e[27]||(e[27]=f("span",null,"同步操作",-1))]),_:1})]),default:o(()=>[a(_,null,{default:o(()=>[a(l,{type:"primary",loading:G.value,onClick:le},{icon:o(()=>[a(k(j))]),default:o(()=>[e[28]||(e[28]=c(" 推送本地变更 (push) ",-1))]),_:1},8,["loading"]),a(l,{loading:I.value,onClick:ne},{icon:o(()=>[a(k(Se))]),default:o(()=>[e[29]||(e[29]=c(" 拉取远程变更 (pull) ",-1))]),_:1},8,["loading"])]),_:1}),C.value?(i(),w("div",Ve,[f("div",Oe," 最近一次操作 ("+v(T.value)+") ",1),f("pre",We,v(C.value),1)])):S("",!0)]),_:1}),h.value>0?(i(),b(N,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(Ce),{style:{color:"#ff4d4f"}}),e[30]||(e[30]=f("span",null,"待解决冲突",-1))]),_:1})]),default:o(()=>[B.value?(i(),w("div",Ge,[a(ee)])):P.value.length===0?(i(),b(ve,{key:1,description:"没有详细冲突数据"})):(i(),b(we,{key:2,columns:re,"data-source":P.value,pagination:{pageSize:10},size:"small","row-key":"id"},{bodyCell:o(({column:u,record:ae})=>[u.key==="action"?(i(),b(_,{key:0},{default:o(()=>[a(l,{size:"small",type:"link",onClick:be=>q(ae.id,"local")},{default:o(()=>[...e[31]||(e[31]=[c("用本地版本",-1)])]),_:1},8,["onClick"]),a(l,{size:"small",type:"link",onClick:be=>q(ae.id,"remote")},{default:o(()=>[...e[32]||(e[32]=[c("用远程版本",-1)])]),_:1},8,["onClick"])]),_:2},1024)):S("",!0)]),_:1},8,["data-source"]))]),_:1})):S("",!0)])}}},Je=_e(Ie,[["__scopeId","data-v-719c2a8b"]]);export{Je as default};
|
|
1
|
+
import{_ as _e,u as ke,d as n}from"./index-CEbbycgJ.js";import{R as he,X as j,as as te,u as xe,at as Se,ak as Ce}from"./icons-NT6gy8Ee.js";import{o as Pe,M as w,R as f,c as a,N as o,Q as b,S,r as g,K as d,a as oe,f as J,L as i,O as c,u as k,P as v}from"./vendor-M5lGV-wr.js";const Re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ue={key:0,style:{"margin-top":"16px"}},Ne={key:0},De={key:1,style:{color:"var(--text-secondary)"}},Ae={key:0},Le={key:1,style:{color:"var(--text-secondary)"}},$e={style:{color:"#ff4d4f","word-break":"break-all"}},ze={key:0,style:{"text-align":"center",padding:"30px"}},Ee={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Ve={key:0,style:{"margin-top":"16px"}},Oe={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},We={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"var(--text-primary)","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap","font-family":"'Cascadia Code', 'Fira Code', Consolas, monospace"}},Ge={key:0,style:{"text-align":"center",padding:"30px"}},Ie={__name:"SyncSettings",setup(Te){const m=ke(),D=g(!1),A=g(""),O=g(0),W=g(0),L=g(0),h=g(0),G=g(!1),I=g(!1),C=g(""),T=g(""),B=g(!1),P=g([]),re=[{title:"ID",dataIndex:"id",key:"id",width:220,ellipsis:!0},{title:"资源 ID",dataIndex:"resource_id",key:"resource_id",ellipsis:!0},{title:"类型",dataIndex:"resource_type",key:"resource_type",width:120},{title:"操作",key:"action",width:200}];async function $(){D.value=!0,A.value="";try{const t=await m.sendRaw({type:"sync.status"},15e3),e=t?.result;if(!t?.ok||!e?.success)throw new Error(e?.error||t?.error||"获取失败");O.value=Number(e.totalResources??0),W.value=Number(e.pending??0),L.value=Number(e.synced??0),h.value=Number(e.conflicts??0),h.value>0?await se():P.value=[]}catch(t){A.value="获取状态失败:"+(t?.message||String(t))}finally{D.value=!1}}async function se(){B.value=!0;try{const t=await m.sendRaw({type:"sync.conflicts"},15e3),e=Array.isArray(t?.result?.conflicts)?t.result.conflicts:[];P.value=e}catch{P.value=[]}finally{B.value=!1}}async function le(){G.value=!0,T.value="sync.push";try{const t=await m.sendRaw({type:"sync.push"},6e4),e=t?.result;C.value=JSON.stringify(e,null,2),t?.ok&&e?.success?(n.success(`推送完成 (${e.pushed??0} / ${e.total??0})`),await $()):n.error("推送失败:"+(e?.error||t?.error||""))}catch(t){C.value=t?.message||String(t),n.error("推送失败:"+(t?.message||""))}finally{G.value=!1}}async function ne(){I.value=!0,T.value="sync.pull";try{const t=await m.sendRaw({type:"sync.pull"},6e4),e=t?.result;C.value=JSON.stringify(e,null,2),t?.ok&&e?.success?(n.success(`拉取完成 (检查 ${e.checked??0}, 更新 ${e.updated??0})`),await $()):n.error("拉取失败:"+(e?.error||t?.error||""))}catch(t){C.value=t?.message||String(t),n.error("拉取失败:"+(t?.message||""))}finally{I.value=!1}}async function q(t,e){try{const l=await m.sendRaw({type:"sync.resolve",conflictId:t,side:e},3e4),R=l?.result;l?.ok&&R?.success?(n.success(`已用${e==="local"?"本地":"远程"}版本解决`),await $()):n.error("解决失败:"+(R?.error||l?.error||""))}catch(l){n.error("解决失败:"+(l?.message||""))}}const r=oe({configured:!1,maskedPassword:"",form:{url:"",username:"",password:"",remotePath:"/chainlesschain"},status:null,saving:!1,testing:!1,running:!1,busy:J(()=>r.saving||r.testing||r.running)}),ue=J(()=>{const t=r.status?.lastRunStatus;return t==="success"?"green":t==="conflict"?"orange":t==="failed"?"red":"default"}),ie=J(()=>{const t=r.status?.lastRunStatus;return t?t==="success"?"成功":t==="conflict"?"有冲突跳过":t==="failed"?"失败":t:r.configured?"已配置":"未配置"});function de(t){const e=new Date(t);return`${e.toLocaleDateString()} ${e.toLocaleTimeString()}`}async function M(){try{const t=await m.sendRaw({type:"sync.webdav.config-get"},1e4);if(!t||t.ok===!1)return;const e=t.result?.data||{};r.form.url=e.url||"",r.form.username=e.username||"",r.form.remotePath=e.remotePath||"/chainlesschain",r.form.password="",r.maskedPassword=e.password||"",r.configured=!!e.configured,r.status=e.status||null}catch(t){console.warn("[SyncSettings] webdav.config-get failed:",t?.message)}}async function F(){r.saving=!0;try{const t=await m.sendRaw({type:"sync.webdav.config-set",payload:{url:r.form.url.trim(),username:r.form.username,password:r.form.password,remotePath:r.form.remotePath||"/"}},15e3),e=t?.result;t?.ok&&e?.success?(n.success("WebDAV 配置已保存"),r.form.password="",await M()):n.error("保存失败:"+(e?.error||t?.error||"未知错误"))}catch(t){n.error("保存失败:"+(t?.message||""))}finally{r.saving=!1}}async function ce(){r.form.url&&r.form.password&&!r.configured&&await F(),r.testing=!0;try{const t=await m.sendRaw({type:"sync.webdav.test"},3e4),e=t?.result;t?.ok&&e?.success?n.success("WebDAV 连接成功"):n.error("连接失败:"+(e?.error||t?.error||"未知错误"))}catch(t){n.error("连接失败:"+(t?.message||""))}finally{r.testing=!1}}async function fe(){r.running=!0;try{const t=await m.sendRaw({type:"sync.webdav.run"},3e5),e=t?.result;if(t?.ok&&e?.success){const l=`推送 ${e.pushed} / 跳过 ${e.skipped} / 删除 ${e.deleted}`;e.status==="conflict"?n.warning("同步完成(有跳过):"+l):n.success("同步完成:"+l)}else n.error("同步失败:"+(e?.error||t?.error||"未知错误"));await M()}catch(t){n.error("同步失败:"+(t?.message||""))}finally{r.running=!1}}async function me(){try{const t=await m.sendRaw({type:"sync.webdav.config-clear"},5e3),e=t?.result;t?.ok&&e?.success?(n.success("已清除 WebDAV 凭证"),r.form.url="",r.form.username="",r.form.password="",r.form.remotePath="/chainlesschain",r.configured=!1,r.maskedPassword="",r.status=null):n.error("清除失败:"+(e?.error||t?.error||"未知错误"))}catch(t){n.error("清除失败:"+(t?.message||""))}}const s=oe({configured:!1,maskedPassword:"",saving:!1,form:{enabled:!1,autoSync:!1,remoteUrl:"",repoPath:"",authorName:"",authorEmail:"",username:"",password:""}});async function H(){try{const t=await m.sendRaw({type:"git.config-get"},1e4);if(!t||t.ok===!1)return;const e=t.result;if(!e?.success)return;const l=e.data||{};s.form.enabled=!!l.enabled,s.form.autoSync=!!l.autoSync,s.form.remoteUrl=l.remoteUrl||"",s.form.repoPath=l.repoPath||"",s.form.authorName=l.authorName||"",s.form.authorEmail=l.authorEmail||"",s.form.username=l.auth?.username||"",s.form.password="",s.maskedPassword=l.auth?.password||l.auth?.token||"",s.configured=!!l.configured}catch(t){console.warn("[SyncSettings] git.config-get failed:",t?.message)}}async function pe(){s.saving=!0;try{const t={enabled:s.form.enabled,autoSync:s.form.autoSync,remoteUrl:s.form.remoteUrl.trim(),repoPath:s.form.repoPath.trim(),authorName:s.form.authorName,authorEmail:s.form.authorEmail,auth:{username:s.form.username,password:s.form.password}},e=await m.sendRaw({type:"git.config-set",payload:t},15e3),l=e?.result;e?.ok&&l?.success?(n.success("Git 配置已保存"),s.form.password="",await H()):n.error("保存失败:"+(l?.error||e?.error||"未知错误"))}catch(t){n.error("保存失败:"+(t?.message||""))}finally{s.saving=!1}}async function ye(){try{const t=await m.sendRaw({type:"git.config-clear"},5e3),e=t?.result;t?.ok&&e?.success?(n.success("已清除 Git 凭证"),s.form.username="",s.form.password="",s.form.enabled=!1,s.maskedPassword="",s.configured=!1):n.error("清除失败:"+(e?.error||t?.error||"未知错误"))}catch(t){n.error("清除失败:"+(t?.message||""))}}async function K(){await Promise.all([$(),M(),H()])}return Pe(K),(t,e)=>{const l=d("a-button"),R=d("a-alert"),_=d("a-space"),z=d("a-tag"),x=d("a-input"),p=d("a-form-item"),y=d("a-col"),Q=d("a-input-password"),U=d("a-row"),X=d("a-popconfirm"),Y=d("a-form"),E=d("a-descriptions-item"),ge=d("a-descriptions"),N=d("a-card"),Z=d("a-switch"),ee=d("a-spin"),V=d("a-statistic"),ve=d("a-empty"),we=d("a-table");return i(),w("div",null,[f("div",Re,[e[13]||(e[13]=f("div",null,[f("h2",{class:"page-title"},"同步设置"),f("p",{class:"page-sub"},"通过 web-shell sync.* WS topic 直连主进程同步引擎")],-1)),a(l,{type:"primary",ghost:"",loading:D.value,onClick:K},{icon:o(()=>[a(k(he))]),default:o(()=>[e[12]||(e[12]=c(" 刷新 ",-1))]),_:1},8,["loading"])]),a(R,{type:"info","show-icon":"",message:"本页 status / push / pull 通过 web-shell sync.* WS topic 直连 main 进程;WebDAV 在下方独立段",description:"其它 provider(Git / P2P / S3 等)的细粒度配置仍在 V5/V6 桌面 shell。",style:{"margin-bottom":"16px"}}),a(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(te)),e[14]||(e[14]=f("span",null,"WebDAV 网盘同步",-1))]),_:1})]),extra:o(()=>[r.configured?(i(),b(z,{key:0,color:ue.value},{default:o(()=>[c(v(ie.value),1)]),_:1},8,["color"])):(i(),b(z,{key:1,color:"default"},{default:o(()=>[...e[15]||(e[15]=[c("未配置",-1)])]),_:1}))]),default:o(()=>[a(Y,{model:r.form,layout:"vertical",disabled:r.busy},{default:o(()=>[a(p,{label:"服务器 URL",required:""},{default:o(()=>[a(x,{value:r.form.url,"onUpdate:value":e[0]||(e[0]=u=>r.form.url=u),placeholder:"https://dav.jianguoyun.com/dav/","allow-clear":""},null,8,["value"])]),_:1}),a(U,{gutter:16},{default:o(()=>[a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"用户名"},{default:o(()=>[a(x,{value:r.form.username,"onUpdate:value":e[1]||(e[1]=u=>r.form.username=u),placeholder:"user@example.com","allow-clear":""},null,8,["value"])]),_:1})]),_:1}),a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"密码"},{default:o(()=>[a(Q,{value:r.form.password,"onUpdate:value":e[2]||(e[2]=u=>r.form.password=u),placeholder:r.configured?r.maskedPassword||"(已保存,留空保持不变)":"请输入密码",autocomplete:"new-password"},null,8,["value","placeholder"])]),_:1})]),_:1})]),_:1}),a(p,{label:"远端路径"},{default:o(()=>[a(x,{value:r.form.remotePath,"onUpdate:value":e[3]||(e[3]=u=>r.form.remotePath=u),placeholder:"/chainlesschain","allow-clear":""},null,8,["value"])]),_:1}),a(_,{wrap:""},{default:o(()=>[a(l,{type:"primary",loading:r.saving,onClick:F},{default:o(()=>[...e[16]||(e[16]=[c("保存",-1)])]),_:1},8,["loading"]),a(l,{loading:r.testing,onClick:ce},{default:o(()=>[...e[17]||(e[17]=[c("测试连接",-1)])]),_:1},8,["loading"]),a(l,{type:"primary",loading:r.running,disabled:!r.configured,onClick:fe},{icon:o(()=>[a(k(j))]),default:o(()=>[e[18]||(e[18]=c(" 立即同步 ",-1))]),_:1},8,["loading","disabled"]),r.configured?(i(),b(X,{key:0,title:"确定要清除 WebDAV 凭证吗?已推送到远端的文件不会被删除。","ok-text":"清除","cancel-text":"取消",onConfirm:me},{default:o(()=>[a(l,{danger:""},{default:o(()=>[...e[19]||(e[19]=[c("断开连接",-1)])]),_:1})]),_:1})):S("",!0)]),_:1})]),_:1},8,["model","disabled"]),r.status?(i(),w("div",Ue,[a(ge,{column:2,size:"small",bordered:""},{default:o(()=>[a(E,{label:"上次同步"},{default:o(()=>[r.status.lastSyncAt?(i(),w("span",Ne,v(de(r.status.lastSyncAt)),1)):(i(),w("span",De,"未同步过"))]),_:1}),a(E,{label:"耗时"},{default:o(()=>[r.status.lastRunDurationMs!=null?(i(),w("span",Ae,v(r.status.lastRunDurationMs)+" ms",1)):(i(),w("span",Le,"—"))]),_:1}),a(E,{label:"累积推送",span:2},{default:o(()=>[e[20]||(e[20]=c(" 已推送 ",-1)),f("b",null,v(r.status.itemsPushed),1),e[21]||(e[21]=c(" · 已跳过 ",-1)),f("b",null,v(r.status.itemsSkipped),1),e[22]||(e[22]=c(" · 已删除 ",-1)),f("b",null,v(r.status.itemsDeleted),1)]),_:1}),r.status.lastRunError?(i(),b(E,{key:0,label:"错误",span:2},{default:o(()=>[f("span",$e,v(r.status.lastRunError),1)]),_:1})):S("",!0)]),_:1})])):S("",!0)]),_:1}),a(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(xe)),e[23]||(e[23]=f("span",null,"Git 仓库",-1))]),_:1})]),extra:o(()=>[a(z,{color:s.configured&&s.form.enabled?"green":"default"},{default:o(()=>[c(v(s.configured?s.form.enabled?"已启用":"已配置未启用":"未配置"),1)]),_:1},8,["color"])]),default:o(()=>[a(Y,{model:s.form,layout:"vertical",disabled:s.saving},{default:o(()=>[a(U,{gutter:16},{default:o(()=>[a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"启用 Git 同步"},{default:o(()=>[a(Z,{checked:s.form.enabled,"onUpdate:checked":e[4]||(e[4]=u=>s.form.enabled=u)},null,8,["checked"])]),_:1})]),_:1}),a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"自动同步"},{default:o(()=>[a(Z,{checked:s.form.autoSync,"onUpdate:checked":e[5]||(e[5]=u=>s.form.autoSync=u)},null,8,["checked"])]),_:1})]),_:1})]),_:1}),a(p,{label:"远程仓库 URL"},{default:o(()=>[a(x,{value:s.form.remoteUrl,"onUpdate:value":e[6]||(e[6]=u=>s.form.remoteUrl=u),placeholder:"https://github.com/user/repo.git","allow-clear":""},null,8,["value"])]),_:1}),a(p,{label:"本地仓库路径"},{default:o(()=>[a(x,{value:s.form.repoPath,"onUpdate:value":e[7]||(e[7]=u=>s.form.repoPath=u),placeholder:"留空使用默认 (userData/git-repo)","allow-clear":""},null,8,["value"])]),_:1}),a(U,{gutter:16},{default:o(()=>[a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"作者名"},{default:o(()=>[a(x,{value:s.form.authorName,"onUpdate:value":e[8]||(e[8]=u=>s.form.authorName=u),placeholder:"ChainlessChain User","allow-clear":""},null,8,["value"])]),_:1})]),_:1}),a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"作者邮箱"},{default:o(()=>[a(x,{value:s.form.authorEmail,"onUpdate:value":e[9]||(e[9]=u=>s.form.authorEmail=u),placeholder:"user@chainlesschain.com","allow-clear":""},null,8,["value"])]),_:1})]),_:1})]),_:1}),a(U,{gutter:16},{default:o(()=>[a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"用户名"},{default:o(()=>[a(x,{value:s.form.username,"onUpdate:value":e[10]||(e[10]=u=>s.form.username=u),placeholder:"GitHub 用户名 / 邮箱","allow-clear":""},null,8,["value"])]),_:1})]),_:1}),a(y,{xs:24,sm:12},{default:o(()=>[a(p,{label:"密码 / Token",help:s.configured&&!s.form.password?"留空则沿用已保存的值":""},{default:o(()=>[a(Q,{value:s.form.password,"onUpdate:value":e[11]||(e[11]=u=>s.form.password=u),placeholder:s.configured?s.maskedPassword||"(已保存,留空保持不变)":"Personal Access Token 或密码",autocomplete:"new-password"},null,8,["value","placeholder"])]),_:1},8,["help"])]),_:1})]),_:1}),a(R,{type:"warning","show-icon":"",message:"Git 凭证当前以明文存储在 git-config.json — 建议使用 Personal Access Token 而非账号密码,且 token 范围尽量收敛 (repo 即可)。",style:{"margin-bottom":"16px"}}),a(_,{wrap:""},{default:o(()=>[a(l,{type:"primary",loading:s.saving,onClick:pe},{default:o(()=>[...e[24]||(e[24]=[c("保存",-1)])]),_:1},8,["loading"]),s.configured?(i(),b(X,{key:0,title:"确定要清除 Git 凭证吗?远程仓库 URL / 路径会保留。","ok-text":"清除","cancel-text":"取消",onConfirm:ye},{default:o(()=>[a(l,{danger:""},{default:o(()=>[...e[25]||(e[25]=[c("清除凭证",-1)])]),_:1})]),_:1})):S("",!0)]),_:1})]),_:1},8,["model","disabled"])]),_:1}),a(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(te)),e[26]||(e[26]=f("span",null,"同步状态",-1))]),_:1})]),extra:o(()=>[a(z,{color:h.value>0?"red":L.value>0?"green":"default"},{default:o(()=>[c(v(h.value>0?`${h.value} 个冲突`:O.value===0?"无资源":"正常"),1)]),_:1},8,["color"])]),default:o(()=>[D.value?(i(),w("div",ze,[a(ee)])):(i(),b(U,{key:1,gutter:[16,16]},{default:o(()=>[a(y,{xs:12,sm:6},{default:o(()=>[a(V,{title:"资源总数",value:O.value,"value-style":{fontSize:"20px"}},null,8,["value"])]),_:1}),a(y,{xs:12,sm:6},{default:o(()=>[a(V,{title:"待同步",value:W.value,"value-style":{color:W.value>0?"#faad14":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1}),a(y,{xs:12,sm:6},{default:o(()=>[a(V,{title:"已同步",value:L.value,"value-style":{color:L.value>0?"#52c41a":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1}),a(y,{xs:12,sm:6},{default:o(()=>[a(V,{title:"冲突",value:h.value,"value-style":{color:h.value>0?"#ff4d4f":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1})]),_:1})),A.value?(i(),w("div",Ee,v(A.value),1)):S("",!0)]),_:1}),a(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(j)),e[27]||(e[27]=f("span",null,"同步操作",-1))]),_:1})]),default:o(()=>[a(_,null,{default:o(()=>[a(l,{type:"primary",loading:G.value,onClick:le},{icon:o(()=>[a(k(j))]),default:o(()=>[e[28]||(e[28]=c(" 推送本地变更 (push) ",-1))]),_:1},8,["loading"]),a(l,{loading:I.value,onClick:ne},{icon:o(()=>[a(k(Se))]),default:o(()=>[e[29]||(e[29]=c(" 拉取远程变更 (pull) ",-1))]),_:1},8,["loading"])]),_:1}),C.value?(i(),w("div",Ve,[f("div",Oe," 最近一次操作 ("+v(T.value)+") ",1),f("pre",We,v(C.value),1)])):S("",!0)]),_:1}),h.value>0?(i(),b(N,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:o(()=>[a(_,null,{default:o(()=>[a(k(Ce),{style:{color:"#ff4d4f"}}),e[30]||(e[30]=f("span",null,"待解决冲突",-1))]),_:1})]),default:o(()=>[B.value?(i(),w("div",Ge,[a(ee)])):P.value.length===0?(i(),b(ve,{key:1,description:"没有详细冲突数据"})):(i(),b(we,{key:2,columns:re,"data-source":P.value,pagination:{pageSize:10},size:"small","row-key":"id"},{bodyCell:o(({column:u,record:ae})=>[u.key==="action"?(i(),b(_,{key:0},{default:o(()=>[a(l,{size:"small",type:"link",onClick:be=>q(ae.id,"local")},{default:o(()=>[...e[31]||(e[31]=[c("用本地版本",-1)])]),_:1},8,["onClick"]),a(l,{size:"small",type:"link",onClick:be=>q(ae.id,"remote")},{default:o(()=>[...e[32]||(e[32]=[c("用远程版本",-1)])]),_:1},8,["onClick"])]),_:2},1024)):S("",!0)]),_:1},8,["data-source"]))]),_:1})):S("",!0)])}}},Je=_e(Ie,[["__scopeId","data-v-719c2a8b"]]);export{Je as default};
|