chainlesschain 0.162.27 → 0.162.28
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-D67bnWOm.js → AIOps-BJpLJcb4.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-z7o1N942.js → ActionButton-7H2keiUd.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-ygwetD7a.js → Analytics-D5jXlBKr.js} +1 -1
- package/src/assets/web-panel/assets/{AppLayout-DKIKC0vr.js → AppLayout-C40opRc7.js} +2 -2
- package/src/assets/web-panel/assets/{Audit-RfvwANd0.js → Audit-DG6F79Ky.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CLC0Npju.js → Backup-DbjXbE0Y.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-Cy955ldQ.js → BaseInput-DpSsCNpF.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Di1G3WpZ.js → Chat-CdNaRMh9.js} +1 -1
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-D2CwVV3N.js → ChatBubbleRenderer-DZf8Uz-e.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-mM6T49x7.js → Checkbox-Bp3BHLCL.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CFRknQ28.js → Codegen-DHoSt0fQ.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Md7VPq32.js → Col-ns3mBD4a.js} +1 -1
- package/src/assets/web-panel/assets/{Community-B75271cm.js → Community-DV1mT7OV.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BOrAa1JM.js → Compact-Dse9t2DM.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CqgTFpLC.js → Compliance-B4qoNIJZ.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Bvdzx2lF.js → Cowork-Ceth1tHo.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-BP3ZLMIx.js → Cron-BEEFxvkn.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-Dy8IWecD.js → Crosschain-DWv2VhyT.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DxnpBszy.js → DID-BDPgz_-9.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-h8TY-9dT.js → Dashboard-C00ovbjU.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CfIh_9pn.js → Dropdown-BRsMIdMe.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-egkHFDB9.js → EmailListRenderer-ixR__zVN.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-iXsC9ljf.js → Federation-CTqx_W7v.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-D16LYrK1.js → FormItemContext-osTx97Qg.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-B2l7qvIp.js → GenericCardRenderer-BjGqcYmH.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DshuXpeI.js → Git-oP8J-vJU.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-BzgoQvxX.js → Governance-baRRVUT3.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CMikYc6i.js → Inference-BJv9RIRT.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DAP_uKkx.js → KnowledgeGraph-urHzEIyA.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Zax7aDPt.js → Logs-DolRJl-U.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DC8_c3hX.js → Marketplace-D2UVsgpF.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CvpCNH6E.js → McpTools-Yd5JqbVW.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-BVgvCyNB.js → Memory-Dmk1-QZv.js} +1 -1
- package/src/assets/web-panel/assets/{MobileBridge-BvffJp-I.js → MobileBridge-BU0oWbkq.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BBEmZ56X.js → MobileProjects-BqS_vUeM.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-D4Lg-E10.js → Mtc-DopMOA8k.js} +1 -1
- package/src/assets/web-panel/assets/{MtcAudit-BpuX4w67.js → MtcAudit-CXu5uROY.js} +1 -1
- package/src/assets/web-panel/assets/{Multisig-CclH6FTt.js → Multisig-BphW6Mdt.js} +1 -1
- package/src/assets/web-panel/assets/{NLProgramming-DPBSg0ot.js → NLProgramming-BklgesRi.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CapzFL8Y.js → Notes-CANQbrRq.js} +1 -1
- package/src/assets/web-panel/assets/{NotificationSettings-Fxts3vW8.js → NotificationSettings-CWSzkcZb.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DexmnSf8.js → OrderTableRenderer-BT5PI7wT.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-Cx9wnh2C.js → Organization-5Hqtt2ym.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-uNU3Jy_O.js → Overflow-DyMWk2Y6.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DZqGX3zP.js → P2P-eGxbaV5X.js} +1 -1
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BbXlJUmU.js → PdhVaultBrowser-wWHjmRU4.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-tSlqIXRk.js → Permissions-DFWwuL2q.js} +1 -1
- package/src/assets/web-panel/assets/{PersonalDataHub-DdPngiX0.js → PersonalDataHub-DuRBj5l4.js} +1 -1
- package/src/assets/web-panel/assets/{Pipeline-G-YXvU25.js → Pipeline-DliZt2Mv.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BIDsJhkC.js → Privacy-ZNOMPGHQ.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DTGzvgQ9.js → ProjectInit-CWk2snFE.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-8QjihLTL.js → ProjectSettings-CoAjW4AL.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-D7S7x7R1.js → Projects-C6KMgAJt.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DpTXneeZ.js → Providers-CYqA3mCx.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-C83JwW8d.js → QuickAsk-Cr-eGAv7.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-PO0TXid1.js → Recommend-DElC1UQt.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-pwXhN9Lv.js → Reputation-bWKeJttZ.js} +1 -1
- package/src/assets/web-panel/assets/{Row-829tJQ3D.js → Row-DRJDsOPE.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Btnw67Mk.js → RssFeed-Bp6Tmfev.js} +1 -1
- package/src/assets/web-panel/assets/{Search-olQ94qFA.js → Search-QoWOwCEz.js} +1 -1
- package/src/assets/web-panel/assets/{Security-C_Vfuu0K.js → Security-B8j-H_67.js} +1 -1
- package/src/assets/web-panel/assets/{Services-ByfhJMDp.js → Services-bKvYVLGg.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-CWxck8Jk.js → Skeleton-CqpVlrnn.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-yady6VUJ.js → Skills-PMfgZ2KF.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Dc_HEsj7.js → Sla-B-Zgl1dF.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings--vhH3ORV.js → SpeechSettings-D6goSbXE.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-GUPyaG2O.js → SyncSettings-C2VNylKT.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-Sj1OYuDS.js → Tasks-Dx1H9prx.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-rdiV_eFo.js → Templates-BRu5cbS4.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-N76bdElE.js → Tenant-DvIQuTba.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-KZ1H0ObH.js → Terminal-B266kmrZ.js} +1 -1
- package/src/assets/web-panel/assets/{TimelineRenderer-D7nI-o49.js → TimelineRenderer-iBpF5BMU.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-c2LL4v7q.js → Tokens-BoG6Zx_M.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-B57LuN-B.js → Trigger-LqfyMoOL.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BMmdOSoP.js → Trust-xAoRgKxa.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CtGUfuxi.js → UkeySign-CtirepJZ.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CzrCzzLF.js → VideoEditing-6IuStjZ5.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Ciiwlppn.js → Wallet-Dk56EY1_.js} +1 -1
- package/src/assets/web-panel/assets/{WebAuthn-BPFoLjnF.js → WebAuthn-BvPmwWnm.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-Bf8UZPRx.js → WorkflowEditor-Bw6-cx6j.js} +1 -1
- package/src/assets/web-panel/assets/{chat-aoVkknKT.js → chat-Cdj1kT2p.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CKv2MZMK.js → colors-DeYVkmQB.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-1FPS5mTP.js → compact-item-YdLwHUnK.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-o2GXZ1sO.js → createContext-BgVweRe_.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-CMm7HgH-.js → hasIn-BfPrzImU.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ch-sPaT4.js → index-1D1GHz6V.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSqFVnSI.js → index-3f7tGA57.js} +1 -1
- package/src/assets/web-panel/assets/{index-Chh-oVTw.js → index-BCXxYTy1.js} +1 -1
- package/src/assets/web-panel/assets/{index-u3FjYN52.js → index-BCj6XF7T.js} +1 -1
- package/src/assets/web-panel/assets/{index-CalorQK0.js → index-BD1wkCPJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDP25Jlo.js → index-BH3xc-lf.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFgWbJuM.js → index-BQwckG0J.js} +1 -1
- package/src/assets/web-panel/assets/{index-g4LWpdR7.js → index-BW19IY_8.js} +1 -1
- package/src/assets/web-panel/assets/{index-JP5LGd1K.js → index-Bdaro36b.js} +3 -3
- package/src/assets/web-panel/assets/{index-Cr2EOK21.js → index-BfLZ_2PS.js} +1 -1
- package/src/assets/web-panel/assets/{index-DT76REiB.js → index-Bq8pMiMX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUWd4FFK.js → index-Br-pkGhZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-yhq2Pttf.js → index-Bu3HR-0d.js} +1 -1
- package/src/assets/web-panel/assets/{index-Y_UOzu30.js → index-BwFGZ0gC.js} +1 -1
- package/src/assets/web-panel/assets/{index-bJ5UBvQQ.js → index-BwWqMM1e.js} +1 -1
- package/src/assets/web-panel/assets/{index-8AzFTShP.js → index-C5KeLwZA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCxs8O-B.js → index-C64Y8_Py.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcfXX0ID.js → index-CHqE69u0.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1QEfzq_.js → index-CWl44ndZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Crp4UcP-.js → index-CdpvXrvI.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3aMAQEQ.js → index-Cn6Ft9Zm.js} +1 -1
- package/src/assets/web-panel/assets/index-Cyu-87SR.js +1 -0
- package/src/assets/web-panel/assets/{index-BQcTgRAZ.js → index-CzUQB78O.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3bKIme7.js → index-D2XbFRiY.js} +1 -1
- package/src/assets/web-panel/assets/index-D2gby4S0.js +1 -0
- package/src/assets/web-panel/assets/{index-CdDX6sEY.js → index-D3z7vVsU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BwA5hOgO.js → index-D5lJG4eM.js} +1 -1
- package/src/assets/web-panel/assets/{index-DoVMBKvC.js → index-D6KKj0k2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BbJDxap_.js → index-DRkpHBkk.js} +1 -1
- package/src/assets/web-panel/assets/{index-dXE5uCaT.js → index-Db7x8taS.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bb7YRgoc.js → index-DjjhIPMi.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cr1ZwF59.js → index-DlTYhL0_.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXDN0kh7.js → index-DnbTnTqA.js} +1 -1
- package/src/assets/web-panel/assets/{index-De4hAcPZ.js → index-Dqo4LqpA.js} +1 -1
- package/src/assets/web-panel/assets/{index-fyC4Vx7E.js → index-LKKW1K6I.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXHs9New.js → index-YxGhixbd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZ747YY7.js → index-k9Q7n8PP.js} +1 -1
- package/src/assets/web-panel/assets/{index-866hrngI.js → index-m-5_Wzm1.js} +1 -1
- package/src/assets/web-panel/assets/{index-OiF8vib7.js → index-wZaESifz.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Co0jgVso.js → initDefaultProps-BnQhVe4d.js} +1 -1
- package/src/assets/web-panel/assets/{motion-Zw-nUuCZ.js → motion-BNLEv9Xs.js} +1 -1
- package/src/assets/web-panel/assets/{move-O_Pya0SD.js → move-1kzEwUL4.js} +1 -1
- package/src/assets/web-panel/assets/{omit-bqQYnuYR.js → omit-BAxRDX2e.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-PeesUh3N.js → pickAttrs-DUNlz8hS.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DoUJMHry.js → placementArrow-C4hgKCO_.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-QHPYy6hK.js → responsiveObserve-Dx_PXbJ8.js} +1 -1
- package/src/assets/web-panel/assets/{slide-H_RDRwbZ.js → slide-BZh1EbeV.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-RuUT_noY.js → statusUtils-BK_Kgswi.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DuWlOmft.js → styleChecker-k0u8jXS4.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-CJmU3crw.js → useFlexGapSupport-BtS62yHN.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CBYaEAuH.js → useFs-C6K_Uzdm.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-B0x06BwX.js → usePersonalDataHub-CzwYxdJv.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-B2BMGDRL.js → vnode-AyvpNFtY.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-D_OEfpnp.js → zoom-CVFICRzk.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/assets/web-panel/assets/index-BHtt98Qo.js +0 -1
- package/src/assets/web-panel/assets/index-Cul_OH-A.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as Ze,u as He,b as Qe,d as C}from"./index-JP5LGd1K.js";import{s as Se}from"./community-parser-CO25nZFt.js";import{R as Xe,as as et,z as me,aq as tt,a6 as lt,l as at,Z as ve,W as V,aU as nt,f as it,L as st,d as ot,y as rt}from"./icons-AILO5ZcK.js";import{o as pt,M as b,R as S,P as p,c as i,N as a,Q as y,S as m,K as v,r as $,L as r,O as f,u as c,F as z,Y as L,Z as ut,f as te,a as ct}from"./vendor-DhFY8mDK.js";function W(t){const o=Se(t);if(!o)return null;try{return JSON.parse(o)}catch{}const n=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const Ae=Object.freeze(["pending","running","paused","completed","failed","cancelled"]),dt=Object.freeze(["pending","running","gate-waiting","completed","failed","skipped"]),be=Object.freeze(["requirement","architecture","code-generation","testing","code-review","deploy","monitoring"]),le=Object.freeze(["feature","bugfix","refactor","security-audit"]),ft=Object.freeze(["git-pr","docker","npm-publish","local","staging","custom"]),_e=Object.freeze(["code-review","deploy"]);function N(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function ke(t){if(!t)return{noDb:!1,error:""};const o=Se(t),n=/No database/i.test(o);return{noDb:n,error:n?"No database":""}}function gt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),stageIndex:N(t.stageIndex,o),name:String(t.name||""),status:String(t.status||"pending").toLowerCase(),gateRequired:!!t.gateRequired,gateApproved:!!t.gateApproved,gateRejectReason:t.gateRejectReason||"",input:t.input??null,output:t.output??null,errorMessage:t.errorMessage||"",startedAt:t.startedAt??null,completedAt:t.completedAt??null,_idx:o}:null}function yt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";if(!n)return null;const g=Array.isArray(t.stages)?t.stages.map(gt).filter(Boolean):[];return{key:n,id:n,name:t.name||"",template:String(t.template||""),config:t.config??null,status:String(t.status||"pending").toLowerCase(),currentStage:N(t.currentStage,0),result:t.result??null,errorMessage:t.errorMessage||"",createdAt:t.createdAt??null,updatedAt:t.updatedAt??null,startedAt:t.startedAt??null,completedAt:t.completedAt??null,stages:g,_idx:o}}function mt(t){const o=W(t);return Array.isArray(o)?o.map(yt).filter(Boolean):[]}function vt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),strategy:String(t.strategy||"").toLowerCase(),config:t.config??null,status:String(t.status||"pending").toLowerCase(),result:t.result??null,errorMessage:t.errorMessage||"",rolledBackAt:t.rolledBackAt??null,rollbackReason:t.rollbackReason||"",createdAt:t.createdAt??null,completedAt:t.completedAt??null,_idx:o}:null}function bt(t){const o=W(t);return Array.isArray(o)?o.map(vt).filter(Boolean):[]}function _t(t,o=0){if(!t||typeof t!="object")return null;const n=t.name||"";return n?{key:n,name:n,description:String(t.description||""),stages:Array.isArray(t.stages)?t.stages.filter(g=>typeof g=="string"):[],gateStages:Array.isArray(t.gateStages)?t.gateStages.filter(g=>typeof g=="string"):[],_idx:o}:null}function kt(t){const o=W(t);return Array.isArray(o)?o.map(_t).filter(Boolean):[]}const St={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function At(t){const o=JSON.parse(JSON.stringify(St));for(const g of le)o.pipelinesByTemplate[g]=0;for(const g of Ae)o.pipelinesByStatus[g]=0;for(const g of dt)o.stagesByStatus[g]=0;for(const g of ft)o.deploysByStrategy[g]=0;const n=W(t);if(!n||typeof n!="object"||Array.isArray(n))return o;if(o.totalPipelines=N(n.totalPipelines,0),o.totalStages=N(n.totalStages,0),o.totalArtifacts=N(n.totalArtifacts,0),o.totalDeploys=N(n.totalDeploys,0),n.pipelinesByTemplate&&typeof n.pipelinesByTemplate=="object")for(const[g,_]of Object.entries(n.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByTemplate[g]=_);if(n.pipelinesByStatus&&typeof n.pipelinesByStatus=="object")for(const[g,_]of Object.entries(n.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByStatus[g]=_);if(n.stagesByStatus&&typeof n.stagesByStatus=="object")for(const[g,_]of Object.entries(n.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.stagesByStatus[g]=_);if(n.deploysByStrategy&&typeof n.deploysByStrategy=="object")for(const[g,_]of Object.entries(n.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(o.deploysByStrategy[g]=_);return o}function j(t){if(t==null||t==="")return"—";const o=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(o.getTime())?String(t):o.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xt={class:"page-title"},ht={class:"page-sub"},zt={class:"stage-flow"},Ct={class:"stage-idx"},Bt={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Lt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},jt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Nt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0 0 10px"}},Ft={class:"tpl-stages"},Mt={key:0,style:{"padding-top":"8px"}},Jt={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},It={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},Ut={style:{color:"var(--text-primary)","font-weight":"500"}},wt={key:0,style:{color:"#52c41a","margin-left":"4px"}},qt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},Gt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Kt={key:0},Vt={__name:"Pipeline",setup(t){const o=He(),{t:n}=Qe(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),Y=$({noDb:!1,error:""}),se=$("pipelines"),R=$(""),E=$(""),I=$(!1),Z=$(!1),k=ct({template:"feature",name:"",configJson:""}),A=$(null),$e=te(()=>[{title:n("pipeline.cols.name"),key:"name"},{title:n("pipeline.cols.template"),key:"template",width:"110px"},{title:n("pipeline.cols.progress"),key:"progress",width:"160px"},{title:n("pipeline.cols.currentStage"),key:"currentStage",width:"140px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt",width:"160px"},{title:n("pipeline.cols.action"),key:"action",width:"260px"}]),xe=te(()=>[{title:n("pipeline.cols.pipeline"),key:"pipeline",width:"180px"},{title:n("pipeline.cols.strategy"),key:"strategy",width:"120px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt"}]),he=te(()=>{let e=ae.value;return R.value&&(e=e.filter(s=>s.template===R.value)),E.value&&(e=e.filter(s=>s.status===E.value)),e});function F(e){const s=`pipeline.templateLabels.${e}`,d=n(s);return d===s?e:d}function H(e){return{feature:"green",bugfix:"red",refactor:"purple","security-audit":"volcano"}[e]||"default"}function U(e){const s=`pipeline.stageLabels.${e}`,d=n(s);return d===s?e:d}function Q(e){const s=`pipeline.pipelineStatusLabels.${e}`,d=n(s);return d===s?e:d}function oe(e){return{pending:"default",running:"processing",paused:"orange",completed:"green",failed:"red",cancelled:"default"}[e]||"default"}function ze(e){const s=`pipeline.stageStatusLabels.${e}`,d=n(s);return d===s?e:d}function re(e){return{pending:"default",running:"processing","gate-waiting":"gold",completed:"green",failed:"red",skipped:"default"}[e]||"default"}function Ce(e){const s=`pipeline.deployStatusLabels.${e}`,d=n(s);return d===s?e:d}function Be(e){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[e]||"default"}function Te(e){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[e]||"default"}function Pe(e){return{pending:"gray",running:"blue","gate-waiting":"gold",completed:"green",failed:"red",skipped:"gray"}[e]||"gray"}function pe(e){if(!e.stages.length)return 0;const s=e.stages.filter(d=>d.status==="completed").length;return Math.round(100*s/e.stages.length)}function w(e){if(!e.stages.length)return null;const s=Math.min(e.currentStage,e.stages.length-1);return e.stages[s]||null}function Oe(e){if(e.status!=="running")return!1;const s=w(e);return s&&s.status==="gate-waiting"&&s.gateRequired&&!s.gateApproved}function Le(e){return e.status==="pending"||e.status==="running"||e.status==="paused"}async function q(){g.value=!0,Y.value={noDb:!1,error:""};try{const[e,s,d,x]=await Promise.all([o.execute("pipeline list",1e4).catch(()=>({output:""})),o.execute("pipeline deploys",1e4).catch(()=>({output:""})),o.execute("pipeline templates",8e3).catch(()=>({output:""})),o.execute("pipeline stats",8e3).catch(()=>({output:""}))]),G=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);G&&(Y.value=G),ae.value=mt(e.output),ne.value=bt(s.output),ie.value=kt(d.output),T.value=At(x.output)}catch(e){C.error(n("pipeline.msg.loadFailed")+": "+(e?.message||e))}finally{g.value=!1}}async function De(){if(!k.template){C.warning(n("pipeline.msg.selectTemplate"));return}if(k.configJson.trim())try{JSON.parse(k.configJson)}catch{C.warning(n("pipeline.msg.badConfigJson"));return}_.value=!0;try{const e=[`pipeline create --template ${k.template}`];k.name.trim()&&e.push(`--name "${k.name.trim().replace(/"/g,'\\"')}"`),k.configJson.trim()&&e.push(`--config '${k.configJson.trim().replace(/'/g,"'\\''")}'`);const{output:s}=await o.execute(e.join(" "),1e4);if(ke(s).noDb){C.error(n("pipeline.msg.needCcInit"));return}if(/error|Error|失败/i.test(s)&&!/"id"/.test(s)){C.error(n("pipeline.msg.createFailed")+": "+s.slice(0,120));return}C.success(n("pipeline.msg.createSuccess")),I.value=!1,ue(),await q()}catch(e){C.error(n("pipeline.msg.createFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function je(e){await M(e,`pipeline start ${e.id}`,n("pipeline.msg.started"))}async function Ne(e){await M(e,`pipeline pause ${e.id}`,n("pipeline.msg.paused"))}async function Re(e){await M(e,`pipeline resume ${e.id}`,n("pipeline.msg.resumed"))}async function Ee(e){await M(e,`pipeline approve ${e.id}`,n("pipeline.msg.gateApproved"))}async function Fe(e){await M(e,`pipeline cancel ${e.id}`,n("pipeline.msg.cancelled"))}async function M(e,s,d){try{const{output:x}=await o.execute(s,8e3);if(/error|Error|失败/i.test(x)&&!/"id"/.test(x)){C.error(n("pipeline.msg.actionFailed")+": "+x.slice(0,120));return}C.success(d),await q()}catch(x){C.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Me(e){A.value=e,Z.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(q),(e,s)=>{const d=v("a-button"),x=v("a-space"),G=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),K=v("a-radio-button"),de=v("a-radio-group"),h=v("a-tag"),fe=v("a-progress"),Je=v("a-popconfirm"),ge=v("a-table"),X=v("a-tab-pane"),Ie=v("a-tabs"),Ue=v("a-select-option"),we=v("a-select"),ee=v("a-form-item"),qe=v("a-input"),Ge=v("a-textarea"),Ke=v("a-form"),ye=v("a-modal"),J=v("a-descriptions-item"),Ve=v("a-descriptions"),We=v("a-timeline-item"),Ye=v("a-timeline");return r(),b("div",null,[S("div",$t,[S("div",null,[S("h2",xt,p(e.$t("pipeline.title")),1),S("p",ht,p(e.$t("pipeline.subtitle")),1)]),i(x,null,{default:a(()=>[i(d,{loading:g.value,onClick:q},{icon:a(()=>[i(c(Xe))]),default:a(()=>[f(" "+p(e.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(d,{type:"primary",onClick:s[0]||(s[0]=l=>I.value=!0)},{icon:a(()=>[i(c(et))]),default:a(()=>[f(" "+p(e.$t("pipeline.create")),1)]),_:1})]),_:1})]),Y.value.noDb?(r(),y(G,{key:0,type:"info","show-icon":"",message:e.$t("pipeline.noDb.message"),description:e.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):m("",!0),i(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalPipelines"),value:T.value.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[i(c(me))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.running"),value:T.value.pipelinesByStatus.running||0,"value-style":{color:(T.value.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[i(c(tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalStages"),value:T.value.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[i(c(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalArtifacts"),value:T.value.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[i(c(at))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:24,sm:8,lg:4},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalDeploys"),value:T.value.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[i(c(ve))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),i(P,{title:e.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[S("div",zt,[(r(!0),b(z,null,L(c(be),(l,u)=>(r(),b(z,{key:l},[S("span",{class:ut(["stage-pill",{"is-gate":c(_e).includes(l)}])},[S("span",Ct,p(u+1),1),f(" "+p(U(l))+" ",1),c(_e).includes(l)?(r(),y(c(V),{key:0,class:"gate-icon"})):m("",!0)],2),u<c(be).length-1?(r(),y(c(nt),{key:0,class:"stage-arrow"})):m("",!0)],64))),128))])]),_:1},8,["title"]),i(Ie,{activeKey:se.value,"onUpdate:activeKey":s[3]||(s[3]=l=>se.value=l),class:"pipeline-tabs"},{default:a(()=>[i(X,{key:"pipelines",tab:e.$t("pipeline.tabs.pipelines")},{default:a(()=>[S("div",Bt,[i(de,{value:R.value,"onUpdate:value":s[1]||(s[1]=l=>R.value=l),size:"small","button-style":"solid"},{default:a(()=>[i(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(z,null,L(c(le),l=>(r(),y(K,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(de,{value:E.value,"onUpdate:value":s[2]||(s[2]=l=>E.value=l),size:"small"},{default:a(()=>[i(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(z,null,L(c(Ae),l=>(r(),y(K,{key:l,value:l},{default:a(()=>[f(p(Q(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(ge,{columns:$e.value,"data-source":he.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="name"?(r(),b(z,{key:0},[S("span",Tt,p(u.name||e.$t("pipeline.table.unnamed")),1),S("div",Pt,p(u.id.slice(0,16)),1)],64)):m("",!0),l.key==="template"?(r(),y(h,{key:1,color:H(u.template)},{default:a(()=>[f(p(F(u.template)),1)]),_:2},1032,["color"])):m("",!0),l.key==="progress"?(r(),y(fe,{key:2,percent:pe(u),size:"small",status:u.status==="failed"?"exception":u.status==="completed"?"success":"active",format:()=>`${u.currentStage}/${u.stages.length}`},null,8,["percent","status","format"])):m("",!0),l.key==="currentStage"?(r(),b(z,{key:3},[w(u)?(r(),y(h,{key:0,color:re(w(u).status)},{default:a(()=>[f(p(U(w(u).name)),1)]),_:2},1032,["color"])):(r(),b("span",Ot,"—"))],64)):m("",!0),l.key==="status"?(r(),y(h,{key:4,color:oe(u.status)},{default:a(()=>[f(p(Q(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Lt,p(c(j)(u.createdAt)),1)):m("",!0),l.key==="action"?(r(),b(z,{key:6},[i(d,{size:"small",type:"link",onClick:O=>Me(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),u.status==="pending"?(r(),y(d,{key:0,size:"small",type:"link",onClick:O=>je(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="running"?(r(),y(d,{key:1,size:"small",type:"link",onClick:O=>Ne(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="paused"?(r(),y(d,{key:2,size:"small",type:"link",onClick:O=>Re(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):m("",!0),Oe(u)?(r(),y(d,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:O=>Ee(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):m("",!0),Le(u)?(r(),y(Je,{key:4,title:e.$t("pipeline.table.cancelConfirm"),"ok-text":e.$t("pipeline.table.cancelOk"),"cancel-text":e.$t("pipeline.table.cancelBack"),onConfirm:O=>Fe(u)},{default:a(()=>[i(d,{size:"small",type:"link",danger:""},{default:a(()=>[f(p(e.$t("pipeline.table.actions.cancel")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):m("",!0)],64)):m("",!0)]),emptyText:a(()=>[S("div",Dt,[i(c(me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(R.value||E.value?e.$t("pipeline.table.emptyFiltered"):e.$t("pipeline.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"deploys",tab:e.$t("pipeline.tabs.deploys")},{default:a(()=>[i(ge,{columns:xe.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="pipeline"?(r(),b("span",jt,p(u.pipelineId.slice(0,12)),1)):m("",!0),l.key==="strategy"?(r(),y(h,{key:1,color:Te(u.strategy),style:{"font-family":"monospace"}},{default:a(()=>[f(p(u.strategy),1)]),_:2},1032,["color"])):m("",!0),l.key==="status"?(r(),y(h,{key:2,color:Be(u.status)},{default:a(()=>[f(p(Ce(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Nt,p(c(j)(u.createdAt)),1)):m("",!0)]),emptyText:a(()=>[S("div",Rt,[i(c(ve),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(e.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"templates",tab:e.$t("pipeline.tabs.templates")},{default:a(()=>[i(ce,{gutter:[16,16]},{default:a(()=>[(r(!0),b(z,null,L(ie.value,l=>(r(),y(D,{key:l.name,xs:24,sm:12,lg:12},{default:a(()=>[i(P,{title:F(l.name),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[i(h,{color:H(l.name)},{default:a(()=>[f(p(l.name),1)]),_:2},1032,["color"])]),default:a(()=>[S("p",Et,p(l.description),1),S("div",Ft,[(r(!0),b(z,null,L(l.stages,(u,O)=>(r(),y(h,{key:u,color:l.gateStages.includes(u)?"gold":"blue",style:{"font-size":"11px"}},{default:a(()=>[f(p(O+1)+". "+p(U(u))+" ",1),l.gateStages.includes(u)?(r(),y(c(V),{key:0,style:{"font-size":"10px","margin-left":"2px"}})):m("",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),i(ye,{open:I.value,"onUpdate:open":s[7]||(s[7]=l=>I.value=l),title:e.$t("pipeline.create_modal.title"),"confirm-loading":_.value,width:540,"ok-text":e.$t("pipeline.create_modal.ok"),"cancel-text":e.$t("pipeline.create_modal.cancel"),onOk:De,onCancel:ue},{default:a(()=>[i(Ke,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[i(ee,{label:e.$t("pipeline.create_modal.templateLabel"),required:""},{default:a(()=>[i(we,{value:k.template,"onUpdate:value":s[4]||(s[4]=l=>k.template=l)},{default:a(()=>[(r(!0),b(z,null,L(c(le),l=>(r(),y(Ue,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.nameLabel")},{default:a(()=>[i(qe,{value:k.name,"onUpdate:value":s[5]||(s[5]=l=>k.name=l),placeholder:e.$t("pipeline.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.configLabel")},{default:a(()=>[i(Ge,{value:k.configJson,"onUpdate:value":s[6]||(s[6]=l=>k.configJson=l),placeholder:e.$t("pipeline.create_modal.configPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),i(ye,{open:Z.value,"onUpdate:open":s[8]||(s[8]=l=>Z.value=l),title:e.$t("pipeline.details.title",{label:A.value?.name||A.value?.id?.slice(0,12)||""}),width:780,footer:null},{default:a(()=>[A.value?(r(),b("div",Mt,[i(Ve,{column:2,size:"small",bordered:""},{default:a(()=>[i(J,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:H(A.value.template)},{default:a(()=>[f(p(F(A.value.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.status")},{default:a(()=>[i(h,{color:oe(A.value.status)},{default:a(()=>[f(p(Q(A.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.progress"),span:2},{default:a(()=>[i(fe,{percent:pe(A.value),status:A.value.status==="failed"?"exception":A.value.status==="completed"?"success":"active",size:"small"},null,8,["percent","status"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.createdAt")},{default:a(()=>[f(p(c(j)(A.value.createdAt)),1)]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.startedAt")},{default:a(()=>[f(p(c(j)(A.value.startedAt)),1)]),_:1},8,["label"])]),_:1}),S("h4",Jt,p(e.$t("pipeline.details.stagesHeader")),1),i(Ye,{mode:"left"},{default:a(()=>[(r(!0),b(z,null,L(A.value.stages,l=>(r(),y(We,{key:l.id,color:Pe(l.status)},{dot:a(()=>[l.status==="completed"?(r(),y(c(it),{key:0,style:{color:"#52c41a"}})):l.status==="running"?(r(),y(c(st),{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(r(),y(c(ot),{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(r(),y(c(V),{key:3,style:{color:"#faad14"}})):(r(),y(c(rt),{key:4,style:{color:"var(--text-muted)"}}))]),default:a(()=>[S("div",It,[S("span",Ut,p(l.stageIndex+1)+". "+p(U(l.name)),1),i(h,{color:re(l.status),style:{"font-size":"11px"}},{default:a(()=>[f(p(ze(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(r(),y(h,{key:0,color:"gold",style:{"font-size":"10px"}},{default:a(()=>[i(c(V)),f(" "+p(e.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(r(),b("span",wt,p(e.$t("pipeline.details.approved")),1)):m("",!0)]),_:2},1024)):m("",!0)]),l.errorMessage?(r(),b("div",qt,p(e.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):m("",!0),l.startedAt?(r(),b("div",Gt,[f(p(c(j)(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Kt," → "+p(c(j)(l.completedAt)),1)):m("",!0)])):m("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):m("",!0)]),_:1},8,["open","title"])])}}},Qt=Ze(Vt,[["__scopeId","data-v-8e02619c"]]);export{Qt as default};
|
|
1
|
+
import{_ as Ze,u as He,b as Qe,d as C}from"./index-Bdaro36b.js";import{s as Se}from"./community-parser-CO25nZFt.js";import{R as Xe,as as et,z as me,aq as tt,a6 as lt,l as at,Z as ve,W as V,aU as nt,f as it,L as st,d as ot,y as rt}from"./icons-AILO5ZcK.js";import{o as pt,M as b,R as S,P as p,c as i,N as a,Q as y,S as m,K as v,r as $,L as r,O as f,u as c,F as z,Y as L,Z as ut,f as te,a as ct}from"./vendor-DhFY8mDK.js";function W(t){const o=Se(t);if(!o)return null;try{return JSON.parse(o)}catch{}const n=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const Ae=Object.freeze(["pending","running","paused","completed","failed","cancelled"]),dt=Object.freeze(["pending","running","gate-waiting","completed","failed","skipped"]),be=Object.freeze(["requirement","architecture","code-generation","testing","code-review","deploy","monitoring"]),le=Object.freeze(["feature","bugfix","refactor","security-audit"]),ft=Object.freeze(["git-pr","docker","npm-publish","local","staging","custom"]),_e=Object.freeze(["code-review","deploy"]);function N(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function ke(t){if(!t)return{noDb:!1,error:""};const o=Se(t),n=/No database/i.test(o);return{noDb:n,error:n?"No database":""}}function gt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),stageIndex:N(t.stageIndex,o),name:String(t.name||""),status:String(t.status||"pending").toLowerCase(),gateRequired:!!t.gateRequired,gateApproved:!!t.gateApproved,gateRejectReason:t.gateRejectReason||"",input:t.input??null,output:t.output??null,errorMessage:t.errorMessage||"",startedAt:t.startedAt??null,completedAt:t.completedAt??null,_idx:o}:null}function yt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";if(!n)return null;const g=Array.isArray(t.stages)?t.stages.map(gt).filter(Boolean):[];return{key:n,id:n,name:t.name||"",template:String(t.template||""),config:t.config??null,status:String(t.status||"pending").toLowerCase(),currentStage:N(t.currentStage,0),result:t.result??null,errorMessage:t.errorMessage||"",createdAt:t.createdAt??null,updatedAt:t.updatedAt??null,startedAt:t.startedAt??null,completedAt:t.completedAt??null,stages:g,_idx:o}}function mt(t){const o=W(t);return Array.isArray(o)?o.map(yt).filter(Boolean):[]}function vt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),strategy:String(t.strategy||"").toLowerCase(),config:t.config??null,status:String(t.status||"pending").toLowerCase(),result:t.result??null,errorMessage:t.errorMessage||"",rolledBackAt:t.rolledBackAt??null,rollbackReason:t.rollbackReason||"",createdAt:t.createdAt??null,completedAt:t.completedAt??null,_idx:o}:null}function bt(t){const o=W(t);return Array.isArray(o)?o.map(vt).filter(Boolean):[]}function _t(t,o=0){if(!t||typeof t!="object")return null;const n=t.name||"";return n?{key:n,name:n,description:String(t.description||""),stages:Array.isArray(t.stages)?t.stages.filter(g=>typeof g=="string"):[],gateStages:Array.isArray(t.gateStages)?t.gateStages.filter(g=>typeof g=="string"):[],_idx:o}:null}function kt(t){const o=W(t);return Array.isArray(o)?o.map(_t).filter(Boolean):[]}const St={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function At(t){const o=JSON.parse(JSON.stringify(St));for(const g of le)o.pipelinesByTemplate[g]=0;for(const g of Ae)o.pipelinesByStatus[g]=0;for(const g of dt)o.stagesByStatus[g]=0;for(const g of ft)o.deploysByStrategy[g]=0;const n=W(t);if(!n||typeof n!="object"||Array.isArray(n))return o;if(o.totalPipelines=N(n.totalPipelines,0),o.totalStages=N(n.totalStages,0),o.totalArtifacts=N(n.totalArtifacts,0),o.totalDeploys=N(n.totalDeploys,0),n.pipelinesByTemplate&&typeof n.pipelinesByTemplate=="object")for(const[g,_]of Object.entries(n.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByTemplate[g]=_);if(n.pipelinesByStatus&&typeof n.pipelinesByStatus=="object")for(const[g,_]of Object.entries(n.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByStatus[g]=_);if(n.stagesByStatus&&typeof n.stagesByStatus=="object")for(const[g,_]of Object.entries(n.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.stagesByStatus[g]=_);if(n.deploysByStrategy&&typeof n.deploysByStrategy=="object")for(const[g,_]of Object.entries(n.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(o.deploysByStrategy[g]=_);return o}function j(t){if(t==null||t==="")return"—";const o=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(o.getTime())?String(t):o.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xt={class:"page-title"},ht={class:"page-sub"},zt={class:"stage-flow"},Ct={class:"stage-idx"},Bt={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Lt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},jt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Nt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0 0 10px"}},Ft={class:"tpl-stages"},Mt={key:0,style:{"padding-top":"8px"}},Jt={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},It={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},Ut={style:{color:"var(--text-primary)","font-weight":"500"}},wt={key:0,style:{color:"#52c41a","margin-left":"4px"}},qt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},Gt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Kt={key:0},Vt={__name:"Pipeline",setup(t){const o=He(),{t:n}=Qe(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),Y=$({noDb:!1,error:""}),se=$("pipelines"),R=$(""),E=$(""),I=$(!1),Z=$(!1),k=ct({template:"feature",name:"",configJson:""}),A=$(null),$e=te(()=>[{title:n("pipeline.cols.name"),key:"name"},{title:n("pipeline.cols.template"),key:"template",width:"110px"},{title:n("pipeline.cols.progress"),key:"progress",width:"160px"},{title:n("pipeline.cols.currentStage"),key:"currentStage",width:"140px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt",width:"160px"},{title:n("pipeline.cols.action"),key:"action",width:"260px"}]),xe=te(()=>[{title:n("pipeline.cols.pipeline"),key:"pipeline",width:"180px"},{title:n("pipeline.cols.strategy"),key:"strategy",width:"120px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt"}]),he=te(()=>{let e=ae.value;return R.value&&(e=e.filter(s=>s.template===R.value)),E.value&&(e=e.filter(s=>s.status===E.value)),e});function F(e){const s=`pipeline.templateLabels.${e}`,d=n(s);return d===s?e:d}function H(e){return{feature:"green",bugfix:"red",refactor:"purple","security-audit":"volcano"}[e]||"default"}function U(e){const s=`pipeline.stageLabels.${e}`,d=n(s);return d===s?e:d}function Q(e){const s=`pipeline.pipelineStatusLabels.${e}`,d=n(s);return d===s?e:d}function oe(e){return{pending:"default",running:"processing",paused:"orange",completed:"green",failed:"red",cancelled:"default"}[e]||"default"}function ze(e){const s=`pipeline.stageStatusLabels.${e}`,d=n(s);return d===s?e:d}function re(e){return{pending:"default",running:"processing","gate-waiting":"gold",completed:"green",failed:"red",skipped:"default"}[e]||"default"}function Ce(e){const s=`pipeline.deployStatusLabels.${e}`,d=n(s);return d===s?e:d}function Be(e){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[e]||"default"}function Te(e){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[e]||"default"}function Pe(e){return{pending:"gray",running:"blue","gate-waiting":"gold",completed:"green",failed:"red",skipped:"gray"}[e]||"gray"}function pe(e){if(!e.stages.length)return 0;const s=e.stages.filter(d=>d.status==="completed").length;return Math.round(100*s/e.stages.length)}function w(e){if(!e.stages.length)return null;const s=Math.min(e.currentStage,e.stages.length-1);return e.stages[s]||null}function Oe(e){if(e.status!=="running")return!1;const s=w(e);return s&&s.status==="gate-waiting"&&s.gateRequired&&!s.gateApproved}function Le(e){return e.status==="pending"||e.status==="running"||e.status==="paused"}async function q(){g.value=!0,Y.value={noDb:!1,error:""};try{const[e,s,d,x]=await Promise.all([o.execute("pipeline list",1e4).catch(()=>({output:""})),o.execute("pipeline deploys",1e4).catch(()=>({output:""})),o.execute("pipeline templates",8e3).catch(()=>({output:""})),o.execute("pipeline stats",8e3).catch(()=>({output:""}))]),G=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);G&&(Y.value=G),ae.value=mt(e.output),ne.value=bt(s.output),ie.value=kt(d.output),T.value=At(x.output)}catch(e){C.error(n("pipeline.msg.loadFailed")+": "+(e?.message||e))}finally{g.value=!1}}async function De(){if(!k.template){C.warning(n("pipeline.msg.selectTemplate"));return}if(k.configJson.trim())try{JSON.parse(k.configJson)}catch{C.warning(n("pipeline.msg.badConfigJson"));return}_.value=!0;try{const e=[`pipeline create --template ${k.template}`];k.name.trim()&&e.push(`--name "${k.name.trim().replace(/"/g,'\\"')}"`),k.configJson.trim()&&e.push(`--config '${k.configJson.trim().replace(/'/g,"'\\''")}'`);const{output:s}=await o.execute(e.join(" "),1e4);if(ke(s).noDb){C.error(n("pipeline.msg.needCcInit"));return}if(/error|Error|失败/i.test(s)&&!/"id"/.test(s)){C.error(n("pipeline.msg.createFailed")+": "+s.slice(0,120));return}C.success(n("pipeline.msg.createSuccess")),I.value=!1,ue(),await q()}catch(e){C.error(n("pipeline.msg.createFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function je(e){await M(e,`pipeline start ${e.id}`,n("pipeline.msg.started"))}async function Ne(e){await M(e,`pipeline pause ${e.id}`,n("pipeline.msg.paused"))}async function Re(e){await M(e,`pipeline resume ${e.id}`,n("pipeline.msg.resumed"))}async function Ee(e){await M(e,`pipeline approve ${e.id}`,n("pipeline.msg.gateApproved"))}async function Fe(e){await M(e,`pipeline cancel ${e.id}`,n("pipeline.msg.cancelled"))}async function M(e,s,d){try{const{output:x}=await o.execute(s,8e3);if(/error|Error|失败/i.test(x)&&!/"id"/.test(x)){C.error(n("pipeline.msg.actionFailed")+": "+x.slice(0,120));return}C.success(d),await q()}catch(x){C.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Me(e){A.value=e,Z.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(q),(e,s)=>{const d=v("a-button"),x=v("a-space"),G=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),K=v("a-radio-button"),de=v("a-radio-group"),h=v("a-tag"),fe=v("a-progress"),Je=v("a-popconfirm"),ge=v("a-table"),X=v("a-tab-pane"),Ie=v("a-tabs"),Ue=v("a-select-option"),we=v("a-select"),ee=v("a-form-item"),qe=v("a-input"),Ge=v("a-textarea"),Ke=v("a-form"),ye=v("a-modal"),J=v("a-descriptions-item"),Ve=v("a-descriptions"),We=v("a-timeline-item"),Ye=v("a-timeline");return r(),b("div",null,[S("div",$t,[S("div",null,[S("h2",xt,p(e.$t("pipeline.title")),1),S("p",ht,p(e.$t("pipeline.subtitle")),1)]),i(x,null,{default:a(()=>[i(d,{loading:g.value,onClick:q},{icon:a(()=>[i(c(Xe))]),default:a(()=>[f(" "+p(e.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(d,{type:"primary",onClick:s[0]||(s[0]=l=>I.value=!0)},{icon:a(()=>[i(c(et))]),default:a(()=>[f(" "+p(e.$t("pipeline.create")),1)]),_:1})]),_:1})]),Y.value.noDb?(r(),y(G,{key:0,type:"info","show-icon":"",message:e.$t("pipeline.noDb.message"),description:e.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):m("",!0),i(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalPipelines"),value:T.value.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[i(c(me))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.running"),value:T.value.pipelinesByStatus.running||0,"value-style":{color:(T.value.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[i(c(tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalStages"),value:T.value.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[i(c(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalArtifacts"),value:T.value.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[i(c(at))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:24,sm:8,lg:4},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalDeploys"),value:T.value.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[i(c(ve))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),i(P,{title:e.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[S("div",zt,[(r(!0),b(z,null,L(c(be),(l,u)=>(r(),b(z,{key:l},[S("span",{class:ut(["stage-pill",{"is-gate":c(_e).includes(l)}])},[S("span",Ct,p(u+1),1),f(" "+p(U(l))+" ",1),c(_e).includes(l)?(r(),y(c(V),{key:0,class:"gate-icon"})):m("",!0)],2),u<c(be).length-1?(r(),y(c(nt),{key:0,class:"stage-arrow"})):m("",!0)],64))),128))])]),_:1},8,["title"]),i(Ie,{activeKey:se.value,"onUpdate:activeKey":s[3]||(s[3]=l=>se.value=l),class:"pipeline-tabs"},{default:a(()=>[i(X,{key:"pipelines",tab:e.$t("pipeline.tabs.pipelines")},{default:a(()=>[S("div",Bt,[i(de,{value:R.value,"onUpdate:value":s[1]||(s[1]=l=>R.value=l),size:"small","button-style":"solid"},{default:a(()=>[i(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(z,null,L(c(le),l=>(r(),y(K,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(de,{value:E.value,"onUpdate:value":s[2]||(s[2]=l=>E.value=l),size:"small"},{default:a(()=>[i(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(z,null,L(c(Ae),l=>(r(),y(K,{key:l,value:l},{default:a(()=>[f(p(Q(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(ge,{columns:$e.value,"data-source":he.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="name"?(r(),b(z,{key:0},[S("span",Tt,p(u.name||e.$t("pipeline.table.unnamed")),1),S("div",Pt,p(u.id.slice(0,16)),1)],64)):m("",!0),l.key==="template"?(r(),y(h,{key:1,color:H(u.template)},{default:a(()=>[f(p(F(u.template)),1)]),_:2},1032,["color"])):m("",!0),l.key==="progress"?(r(),y(fe,{key:2,percent:pe(u),size:"small",status:u.status==="failed"?"exception":u.status==="completed"?"success":"active",format:()=>`${u.currentStage}/${u.stages.length}`},null,8,["percent","status","format"])):m("",!0),l.key==="currentStage"?(r(),b(z,{key:3},[w(u)?(r(),y(h,{key:0,color:re(w(u).status)},{default:a(()=>[f(p(U(w(u).name)),1)]),_:2},1032,["color"])):(r(),b("span",Ot,"—"))],64)):m("",!0),l.key==="status"?(r(),y(h,{key:4,color:oe(u.status)},{default:a(()=>[f(p(Q(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Lt,p(c(j)(u.createdAt)),1)):m("",!0),l.key==="action"?(r(),b(z,{key:6},[i(d,{size:"small",type:"link",onClick:O=>Me(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),u.status==="pending"?(r(),y(d,{key:0,size:"small",type:"link",onClick:O=>je(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="running"?(r(),y(d,{key:1,size:"small",type:"link",onClick:O=>Ne(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="paused"?(r(),y(d,{key:2,size:"small",type:"link",onClick:O=>Re(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):m("",!0),Oe(u)?(r(),y(d,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:O=>Ee(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):m("",!0),Le(u)?(r(),y(Je,{key:4,title:e.$t("pipeline.table.cancelConfirm"),"ok-text":e.$t("pipeline.table.cancelOk"),"cancel-text":e.$t("pipeline.table.cancelBack"),onConfirm:O=>Fe(u)},{default:a(()=>[i(d,{size:"small",type:"link",danger:""},{default:a(()=>[f(p(e.$t("pipeline.table.actions.cancel")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):m("",!0)],64)):m("",!0)]),emptyText:a(()=>[S("div",Dt,[i(c(me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(R.value||E.value?e.$t("pipeline.table.emptyFiltered"):e.$t("pipeline.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"deploys",tab:e.$t("pipeline.tabs.deploys")},{default:a(()=>[i(ge,{columns:xe.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="pipeline"?(r(),b("span",jt,p(u.pipelineId.slice(0,12)),1)):m("",!0),l.key==="strategy"?(r(),y(h,{key:1,color:Te(u.strategy),style:{"font-family":"monospace"}},{default:a(()=>[f(p(u.strategy),1)]),_:2},1032,["color"])):m("",!0),l.key==="status"?(r(),y(h,{key:2,color:Be(u.status)},{default:a(()=>[f(p(Ce(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Nt,p(c(j)(u.createdAt)),1)):m("",!0)]),emptyText:a(()=>[S("div",Rt,[i(c(ve),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(e.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"templates",tab:e.$t("pipeline.tabs.templates")},{default:a(()=>[i(ce,{gutter:[16,16]},{default:a(()=>[(r(!0),b(z,null,L(ie.value,l=>(r(),y(D,{key:l.name,xs:24,sm:12,lg:12},{default:a(()=>[i(P,{title:F(l.name),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[i(h,{color:H(l.name)},{default:a(()=>[f(p(l.name),1)]),_:2},1032,["color"])]),default:a(()=>[S("p",Et,p(l.description),1),S("div",Ft,[(r(!0),b(z,null,L(l.stages,(u,O)=>(r(),y(h,{key:u,color:l.gateStages.includes(u)?"gold":"blue",style:{"font-size":"11px"}},{default:a(()=>[f(p(O+1)+". "+p(U(u))+" ",1),l.gateStages.includes(u)?(r(),y(c(V),{key:0,style:{"font-size":"10px","margin-left":"2px"}})):m("",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),i(ye,{open:I.value,"onUpdate:open":s[7]||(s[7]=l=>I.value=l),title:e.$t("pipeline.create_modal.title"),"confirm-loading":_.value,width:540,"ok-text":e.$t("pipeline.create_modal.ok"),"cancel-text":e.$t("pipeline.create_modal.cancel"),onOk:De,onCancel:ue},{default:a(()=>[i(Ke,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[i(ee,{label:e.$t("pipeline.create_modal.templateLabel"),required:""},{default:a(()=>[i(we,{value:k.template,"onUpdate:value":s[4]||(s[4]=l=>k.template=l)},{default:a(()=>[(r(!0),b(z,null,L(c(le),l=>(r(),y(Ue,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.nameLabel")},{default:a(()=>[i(qe,{value:k.name,"onUpdate:value":s[5]||(s[5]=l=>k.name=l),placeholder:e.$t("pipeline.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.configLabel")},{default:a(()=>[i(Ge,{value:k.configJson,"onUpdate:value":s[6]||(s[6]=l=>k.configJson=l),placeholder:e.$t("pipeline.create_modal.configPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),i(ye,{open:Z.value,"onUpdate:open":s[8]||(s[8]=l=>Z.value=l),title:e.$t("pipeline.details.title",{label:A.value?.name||A.value?.id?.slice(0,12)||""}),width:780,footer:null},{default:a(()=>[A.value?(r(),b("div",Mt,[i(Ve,{column:2,size:"small",bordered:""},{default:a(()=>[i(J,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:H(A.value.template)},{default:a(()=>[f(p(F(A.value.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.status")},{default:a(()=>[i(h,{color:oe(A.value.status)},{default:a(()=>[f(p(Q(A.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.progress"),span:2},{default:a(()=>[i(fe,{percent:pe(A.value),status:A.value.status==="failed"?"exception":A.value.status==="completed"?"success":"active",size:"small"},null,8,["percent","status"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.createdAt")},{default:a(()=>[f(p(c(j)(A.value.createdAt)),1)]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.startedAt")},{default:a(()=>[f(p(c(j)(A.value.startedAt)),1)]),_:1},8,["label"])]),_:1}),S("h4",Jt,p(e.$t("pipeline.details.stagesHeader")),1),i(Ye,{mode:"left"},{default:a(()=>[(r(!0),b(z,null,L(A.value.stages,l=>(r(),y(We,{key:l.id,color:Pe(l.status)},{dot:a(()=>[l.status==="completed"?(r(),y(c(it),{key:0,style:{color:"#52c41a"}})):l.status==="running"?(r(),y(c(st),{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(r(),y(c(ot),{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(r(),y(c(V),{key:3,style:{color:"#faad14"}})):(r(),y(c(rt),{key:4,style:{color:"var(--text-muted)"}}))]),default:a(()=>[S("div",It,[S("span",Ut,p(l.stageIndex+1)+". "+p(U(l.name)),1),i(h,{color:re(l.status),style:{"font-size":"11px"}},{default:a(()=>[f(p(ze(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(r(),y(h,{key:0,color:"gold",style:{"font-size":"10px"}},{default:a(()=>[i(c(V)),f(" "+p(e.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(r(),b("span",wt,p(e.$t("pipeline.details.approved")),1)):m("",!0)]),_:2},1024)):m("",!0)]),l.errorMessage?(r(),b("div",qt,p(e.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):m("",!0),l.startedAt?(r(),b("div",Gt,[f(p(c(j)(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Kt," → "+p(c(j)(l.completedAt)),1)):m("",!0)])):m("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):m("",!0)]),_:1},8,["open","title"])])}}},Qt=Ze(Vt,[["__scopeId","data-v-8e02619c"]]);export{Qt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as Ze,u as et,b as tt,d as v}from"./index-JP5LGd1K.js";import{s as at}from"./community-parser-CO25nZFt.js";import{R as lt,as as ot,a0 as pe,z as ce,W as Le,J as it,a$ as nt}from"./icons-AILO5ZcK.js";import{o as rt,M as m,R as f,P as s,c as a,N as o,K as g,r as h,L as u,O as y,u as _,F as z,Y as T,Q as C,S as k,_ as st,f as J,a as Z}from"./vendor-DhFY8mDK.js";function H(i){const r=at(i);if(!r)return null;try{return JSON.parse(r)}catch{}const n=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const ut=Object.freeze(["initializing","training","aggregating","completed","failed"]),pt=Object.freeze(["pending","computing","completed"]),Re=Object.freeze(["shamir","beaver","gmw"]),ct=Object.freeze(["laplace","gaussian","exponential"]),dt=Object.freeze(["paillier","bfv","ckks"]),mt=Object.freeze(["sum","product","mean","count"]);function b(i,r=0){return typeof i=="number"&&Number.isFinite(i)?i:r}function yt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||n),description:String(i.description||""),_idx:r}:null}function de(i){const r=H(i);return Array.isArray(r)?r.map(yt).filter(Boolean):[]}function vt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||""),modelType:i.modelType??i.model_type??"neural_network",architecture:String(i.architecture||""),status:String(i.status||"initializing").toLowerCase(),currentRound:b(i.currentRound??i.current_round,0),totalRounds:b(i.totalRounds??i.total_rounds,0),participantCount:b(i.participantCount??i.participant_count,0),accuracy:b(i.accuracy,0),loss:i.loss==null?null:b(i.loss,null),learningRate:b(i.learningRate??i.learning_rate,0),aggregationStrategy:i.aggregationStrategy??i.aggregation_strategy??"",privacyBudgetSpent:b(i.privacyBudgetSpent??i.privacy_budget_spent,0),createdAt:i.createdAt??i.created_at??null,updatedAt:i.updatedAt??i.updated_at??null,_idx:r}:null}function ft(i){const r=H(i);return Array.isArray(r)?r.map(vt).filter(Boolean):[]}function gt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";if(!n)return null;let L=i.participantIds??i.participant_ids??[];if(typeof L=="string")try{L=JSON.parse(L)}catch{L=[]}return Array.isArray(L)||(L=[]),{key:n,id:n,computationType:i.computationType??i.computation_type??"",protocol:String(i.protocol||"shamir").toLowerCase(),participantCount:b(i.participantCount??i.participant_count,0),participantIds:L,resultHash:i.resultHash??i.result_hash??null,status:String(i.status||"pending").toLowerCase(),sharesReceived:b(i.sharesReceived??i.shares_received,0),sharesRequired:b(i.sharesRequired??i.shares_required,0),computationTimeMs:i.computationTimeMs??i.computation_time_ms??null,errorMessage:i.errorMessage??i.error_message??"",createdAt:i.createdAt??i.created_at??null,completedAt:i.completedAt??i.completed_at??null,_idx:r}}function bt(i){const r=H(i);return Array.isArray(r)?r.map(gt).filter(Boolean):[]}function ht(i){const r=H(i);return!r||typeof r!="object"||Array.isArray(r)?null:{published:!!r.published,reason:r.reason||null,data:r.data??null,epsilon:b(r.epsilon,0),delta:b(r.delta,0),mechanism:String(r.mechanism||""),budgetSpent:b(r.budgetSpent??r.budget_spent,0),budgetRemaining:b(r.budgetRemaining??r.budget_remaining,0)}}function _t(i){const r=H(i);return!r||typeof r!="object"||Array.isArray(r)?null:{result:r.result??null,operation:String(r.operation||""),scheme:String(r.scheme||""),inputCount:b(r.inputCount??r.input_count,0),encrypted:r.encrypted!==!1}}const kt={privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}};function $t(i){const r=JSON.parse(JSON.stringify(kt)),n=H(i);if(!n||typeof n!="object"||Array.isArray(n))return r;if(n.privacyBudget&&typeof n.privacyBudget=="object"&&(r.privacyBudget.spent=b(n.privacyBudget.spent,0),r.privacyBudget.limit=b(n.privacyBudget.limit,0),r.privacyBudget.remaining=b(n.privacyBudget.remaining,0),r.privacyBudget.exhausted=!!n.privacyBudget.exhausted),n.federatedLearning&&typeof n.federatedLearning=="object"&&(r.federatedLearning.totalModels=b(n.federatedLearning.totalModels,0),r.federatedLearning.completed=b(n.federatedLearning.completed,0),r.federatedLearning.training=b(n.federatedLearning.training,0),r.federatedLearning.avgAccuracy=b(n.federatedLearning.avgAccuracy,0)),n.mpc&&typeof n.mpc=="object"&&(r.mpc.totalComputations=b(n.mpc.totalComputations,0),r.mpc.completed=b(n.mpc.completed,0),r.mpc.pending=b(n.mpc.pending,0),n.mpc.byProtocol&&typeof n.mpc.byProtocol=="object"))for(const[L,j]of Object.entries(n.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(r.mpc.byProtocol[L]=j);return r}function Ae(i){if(i==null||i==="")return"—";const r=typeof i=="number"?new Date(i):new Date(String(i));return isNaN(r.getTime())?String(i):r.toLocaleString("zh-CN",{hour12:!1})}const St={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},xt={class:"page-sub"},zt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Lt={class:"catalog-name"},Rt={class:"catalog-desc"},At={class:"catalog-name"},Mt={class:"catalog-desc"},jt={class:"catalog-name"},Ft={class:"catalog-desc"},Tt={class:"filter-bar"},Ot={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Bt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Ut={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},wt={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},Nt={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},Et={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},qt={class:"filter-bar"},It={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},Jt={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},Ht={key:1,style:{color:"var(--text-muted)"}},Dt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Kt={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Vt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Qt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Yt={__name:"Privacy",setup(i){const r=et(),{t:n}=tt(),L=h(!1),j=h(!1),ee=h(!1),te=h(!1),ae=h(""),le=h(""),me=h([]),ye=h([]),ve=h([]),oe=h([]),fe=h([]),R=h({privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}}),ie=h("models"),D=h(""),V=h(""),W=h(""),Q=h(!1),Y=h(!1),ne=h(!1),re=h(!1),c=Z({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),$=Z({type:"",protocol:"shamir",participants:"",threshold:null}),S=Z({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=Z({data:"",operation:"sum",scheme:"paillier"}),M=h(null),O=h(null),Me=J(()=>[{title:n("privacy.modelCols.name"),key:"name"},{title:n("privacy.modelCols.status"),key:"status",width:"120px"},{title:n("privacy.modelCols.progress"),key:"progress",width:"160px"},{title:n("privacy.modelCols.accuracy"),key:"accuracy",width:"110px"},{title:n("privacy.modelCols.participants"),key:"participants",width:"90px"},{title:n("privacy.modelCols.budget"),key:"budget",width:"100px"},{title:n("privacy.modelCols.updatedAt"),key:"updatedAt",width:"160px"},{title:n("privacy.modelCols.action"),key:"action",width:"180px"}]),je=J(()=>[{title:n("privacy.computationCols.type"),key:"type",width:"160px"},{title:n("privacy.computationCols.protocol"),key:"protocol",width:"100px"},{title:n("privacy.computationCols.progress"),key:"progress"},{title:n("privacy.computationCols.status"),key:"status",width:"110px"},{title:n("privacy.computationCols.time"),key:"time",width:"110px"},{title:n("privacy.computationCols.createdAt"),key:"createdAt",width:"160px"},{title:n("privacy.computationCols.action"),key:"action",width:"160px"}]),Fe=J(()=>R.value.federatedLearning.avgAccuracy*100),Te=J(()=>{const e=R.value.privacyBudget.remaining,l=R.value.privacyBudget.limit;if(l===0)return"#888";const d=e/l;return d<.2?"#ff4d4f":d<.5?"#faad14":"#52c41a"}),Oe=J(()=>D.value?oe.value.filter(e=>e.status===D.value):oe.value),Pe=J(()=>{let e=fe.value;return V.value&&(e=e.filter(l=>l.protocol===V.value)),W.value&&(e=e.filter(l=>l.status===W.value)),e});function ge(e){const l=`privacy.flStatusLabels.${e}`,d=n(l);return d===l?e:d}function Be(e){return{initializing:"default",training:"processing",aggregating:"cyan",completed:"green",failed:"red"}[e]||"default"}function be(e){const l=`privacy.mpcStatusLabels.${e}`,d=n(l);return d===l?e:d}function Ue(e){return{pending:"default",computing:"processing",completed:"green"}[e]||"default"}function we(e){return e>=.85?"#52c41a":e>=.6?"#faad14":"#ff4d4f"}function Ne(e){return e.status==="initializing"||e.status==="training"||e.status==="aggregating"}function Ee({key:e}){e==="model"?Q.value=!0:e==="computation"?Y.value=!0:e==="dp"?(M.value=null,ne.value=!0):e==="he"&&(O.value=null,re.value=!0)}async function B(){L.value=!0;try{const[e,l,d,q,se,ue]=await Promise.all([r.execute("privacy protocols --json",8e3).catch(()=>({output:""})),r.execute("privacy dp-mechanisms --json",8e3).catch(()=>({output:""})),r.execute("privacy he-schemes --json",8e3).catch(()=>({output:""})),r.execute("privacy models --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy computations --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy report --json",8e3).catch(()=>({output:""}))]);me.value=de(e.output),ye.value=de(l.output),ve.value=de(d.output),oe.value=ft(q.output),fe.value=bt(se.output),R.value=$t(ue.output)}catch(e){v.error(n("privacy.msg.loadFailed")+": "+(e?.message||e))}finally{L.value=!1}}async function qe(){if(!c.name.trim()){v.warning(n("privacy.msg.modelNameEmpty"));return}j.value=!0;try{const e=[`privacy create-model "${c.name.trim().replace(/"/g,'\\"')}"`];c.modelType.trim()&&e.push(`--type "${c.modelType.trim().replace(/"/g,'\\"')}"`),c.architecture.trim()&&e.push(`--arch "${c.architecture.trim().replace(/"/g,'\\"')}"`),c.rounds!=null&&e.push(`--rounds ${c.rounds}`),c.lr!=null&&e.push(`--lr ${c.lr}`),c.participants!=null&&e.push(`--participants ${c.participants}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),12e3);if(/error|失败/i.test(l)&&!/"modelId"/.test(l)){v.error(n("privacy.msg.modelCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.modelCreateSuccess")),Q.value=!1,he(),await B()}catch(e){v.error(n("privacy.msg.modelCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function Ie(){if(!$.type.trim()){v.warning(n("privacy.msg.computationTypeEmpty"));return}j.value=!0;try{const e=[`privacy create-computation "${$.type.trim().replace(/"/g,'\\"')}"`];if(e.push(`--protocol ${$.protocol}`),$.participants.trim()){const d=$.participants.split(/[,\s]+/).filter(Boolean).join(",");d&&e.push(`--participants "${d}"`)}$.threshold!=null&&e.push(`--threshold ${$.threshold}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4);if(/error|失败|invalid/i.test(l)&&!/"computationId"/.test(l)){v.error(n("privacy.msg.computationCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.computationCreateSuccess")),Y.value=!1,_e(),ie.value="computations",await B()}catch(e){v.error(n("privacy.msg.computationCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function Je(e){ae.value=e.id;try{const{output:l}=await r.execute(`privacy train ${e.id} --json`,12e3);if(/error|失败/i.test(l)&&!/"trained"/.test(l)){v.error(n("privacy.msg.trainFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.trainSuccess")),await B()}catch(l){v.error(n("privacy.msg.trainFailed")+": "+(l?.message||l))}finally{ae.value=""}}async function He(e){try{const{output:l}=await r.execute(`privacy fail-model ${e.id} --json`,8e3);if(/error/i.test(l)&&!/"failed"/.test(l)){v.error(n("privacy.msg.failMarkFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.failMarkSuccess")),await B()}catch(l){v.error(n("privacy.msg.failMarkFailed")+": "+(l?.message||l))}}async function De(e){le.value=e.id;try{const{output:l}=await r.execute(`privacy submit-share ${e.id} --json`,1e4);if(/error|失败/i.test(l)&&!/"submitted"/.test(l)){v.error(n("privacy.msg.submitFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.submitSuccess")),await B()}catch(l){v.error(n("privacy.msg.submitFailed")+": "+(l?.message||l))}finally{le.value=""}}async function Ke(){if(!S.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}ee.value=!0,M.value=null;try{const e=["privacy dp-publish"];e.push(`--data ${JSON.stringify(S.data.trim())}`),e.push(`--mechanism ${S.mechanism}`),S.epsilon!=null&&e.push(`--epsilon ${S.epsilon}`),S.delta!=null&&e.push(`--delta ${S.delta}`),S.sensitivity!=null&&e.push(`--sensitivity ${S.sensitivity}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=ht(l);if(!d){v.error(n("privacy.msg.dpFailed")+": "+l.slice(0,120));return}M.value=d,d.published?(v.success(n("privacy.msg.dpSuccess")),await B()):v.warning(n("privacy.msg.dpRejected",{reason:d.reason||"unknown"}))}catch(e){v.error(n("privacy.msg.dpFailed")+": "+(e?.message||e))}finally{ee.value=!1}}async function Ve(){if(!A.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}try{JSON.parse(A.data)}catch{v.warning(n("privacy.msg.dataInvalidJson"));return}te.value=!0,O.value=null;try{const e=["privacy he-query"];e.push(`--data ${JSON.stringify(A.data.trim())}`),e.push(`--operation ${A.operation}`),e.push(`--scheme ${A.scheme}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=_t(l);if(!d){v.error(n("privacy.msg.heFailed")+": "+l.slice(0,120));return}O.value=d,v.success(n("privacy.msg.heSuccess",{scheme:d.scheme,op:d.operation}))}catch(e){v.error(n("privacy.msg.heFailed")+": "+(e?.message||e))}finally{te.value=!1}}function he(){c.name="",c.modelType="",c.architecture="",c.rounds=10,c.lr=.01,c.participants=0}function _e(){$.type="",$.protocol="shamir",$.participants="",$.threshold=null}return rt(B),(e,l)=>{const d=g("a-button"),q=g("a-menu-item"),se=g("a-menu"),ue=g("a-dropdown"),We=g("a-space"),U=g("a-statistic"),F=g("a-card"),w=g("a-col"),ke=g("a-row"),N=g("a-tag"),P=g("a-radio-button"),I=g("a-radio-group"),$e=g("a-progress"),Qe=g("a-popconfirm"),Se=g("a-table"),Ce=g("a-tab-pane"),Ye=g("a-tabs"),K=g("a-input"),x=g("a-form-item"),E=g("a-input-number"),G=g("a-form"),X=g("a-modal"),Ge=g("a-select-option"),Xe=g("a-select"),xe=g("a-textarea");return u(),m("div",null,[f("div",St,[f("div",null,[f("h2",Ct,s(e.$t("privacy.title")),1),f("p",xt,s(e.$t("privacy.subtitle")),1)]),a(We,null,{default:o(()=>[a(d,{loading:L.value,onClick:B},{icon:o(()=>[a(_(lt))]),default:o(()=>[y(" "+s(e.$t("privacy.refresh")),1)]),_:1},8,["loading"]),a(ue,{trigger:["click"]},{overlay:o(()=>[a(se,{onClick:Ee},{default:o(()=>[a(q,{key:"model"},{default:o(()=>[a(_(pe)),y(" "+s(e.$t("privacy.actions.model")),1)]),_:1}),a(q,{key:"computation"},{default:o(()=>[a(_(ce)),y(" "+s(e.$t("privacy.actions.computation")),1)]),_:1}),a(q,{key:"dp"},{default:o(()=>[a(_(Le)),y(" "+s(e.$t("privacy.actions.dp")),1)]),_:1}),a(q,{key:"he"},{default:o(()=>[a(_(it)),y(" "+s(e.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:o(()=>[a(d,{type:"primary"},{icon:o(()=>[a(_(ot))]),default:o(()=>[y(" "+s(e.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.models"),value:R.value.federatedLearning.totalModels,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(_(pe))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.avgAccuracy"),value:Fe.value,precision:1,suffix:"%","value-style":{color:R.value.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(_(nt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.computations"),value:R.value.mpc.totalComputations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(_(ce))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budget"),value:R.value.privacyBudget.remaining,precision:2,"value-style":{color:Te.value,fontSize:"20px"}},{prefix:o(()=>[a(_(Le))]),suffix:o(()=>[f("span",zt,"/ "+s(R.value.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:24,sm:8,lg:4},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budgetState"),value:R.value.privacyBudget.exhausted?e.$t("privacy.stats.exhausted"):e.$t("privacy.stats.ample"),"value-style":{color:R.value.privacyBudget.exhausted?"#ff4d4f":"#52c41a",fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.protocols"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(me.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",Lt,s(t.name),1),f("span",Rt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ye.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"orange",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",At,s(t.name),1),f("span",Mt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ve.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",jt,s(t.name),1),f("span",Ft,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1})]),_:1}),a(Ye,{activeKey:ie.value,"onUpdate:activeKey":l[3]||(l[3]=t=>ie.value=t),class:"privacy-tabs"},{default:o(()=>[a(Ce,{key:"models",tab:e.$t("privacy.tabs.models")},{default:o(()=>[f("div",Tt,[a(I,{value:D.value,"onUpdate:value":l[0]||(l[0]=t=>D.value=t),size:"small","button-style":"solid"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.all")),1)]),_:1}),(u(!0),m(z,null,T(_(ut),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:Me.value,"data-source":Oe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="name"?(u(),m(z,{key:0},[f("span",Ot,s(p.name),1),f("div",Pt,s(p.modelType)+" / "+s(p.architecture),1)],64)):k("",!0),t.key==="status"?(u(),C(N,{key:1,color:Be(p.status)},{default:o(()=>[y(s(ge(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="progress"?(u(),m(z,{key:2},[a($e,{percent:p.totalRounds?Math.round(100*p.currentRound/p.totalRounds):0,size:"small",status:p.status==="failed"?"exception":p.status==="completed"?"success":"active"},null,8,["percent","status"]),f("div",Bt,s(e.$t("privacy.table.rounds",{cur:p.currentRound,total:p.totalRounds})),1)],64)):k("",!0),t.key==="accuracy"?(u(),m(z,{key:3},[f("span",{style:st({color:we(p.accuracy),fontFamily:"monospace"})},s((p.accuracy*100).toFixed(1))+"% ",5),p.loss!=null?(u(),m("div",Ut," loss "+s(p.loss.toFixed(3)),1)):k("",!0)],64)):k("",!0),t.key==="participants"?(u(),C(N,{key:4,color:"blue",style:{"font-size":"11px"}},{default:o(()=>[y(s(p.participantCount),1)]),_:2},1024)):k("",!0),t.key==="budget"?(u(),m("span",wt,s(p.privacyBudgetSpent.toFixed(3)),1)):k("",!0),t.key==="updatedAt"?(u(),m("span",Nt,s(_(Ae)(p.updatedAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:7},[Ne(p)?(u(),C(d,{key:0,size:"small",type:"link",loading:ae.value===p.id,onClick:ze=>Je(p)},{default:o(()=>[y(s(e.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):k("",!0),p.status!=="failed"&&p.status!=="completed"?(u(),C(Qe,{key:1,title:e.$t("privacy.table.failConfirm"),"ok-text":e.$t("privacy.table.failOk"),"cancel-text":e.$t("privacy.table.failCancel"),onConfirm:ze=>He(p)},{default:o(()=>[a(d,{size:"small",type:"link",danger:""},{default:o(()=>[y(s(e.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):k("",!0)],64)):k("",!0)]),emptyText:o(()=>[f("div",Et,[a(_(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(D.value?e.$t("privacy.table.emptyModelsFiltered"):e.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(Ce,{key:"computations",tab:e.$t("privacy.tabs.computations")},{default:o(()=>[f("div",qt,[a(I,{value:V.value,"onUpdate:value":l[1]||(l[1]=t=>V.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allProtocols")),1)]),_:1}),(u(!0),m(z,null,T(_(Re),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(I,{value:W.value,"onUpdate:value":l[2]||(l[2]=t=>W.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allStatuses")),1)]),_:1}),(u(!0),m(z,null,T(_(pt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(be(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:je.value,"data-source":Pe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="type"?(u(),m("span",It,s(p.computationType),1)):k("",!0),t.key==="protocol"?(u(),C(N,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(p.protocol),1)]),_:2},1024)):k("",!0),t.key==="progress"?(u(),C($e,{key:2,percent:p.sharesRequired?Math.round(100*p.sharesReceived/p.sharesRequired):0,size:"small",status:p.status==="completed"?"success":"active",format:()=>`${p.sharesReceived}/${p.sharesRequired}`},null,8,["percent","status","format"])):k("",!0),t.key==="status"?(u(),C(N,{key:3,color:Ue(p.status)},{default:o(()=>[y(s(be(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="time"?(u(),m(z,{key:4},[p.computationTimeMs!=null?(u(),m("span",Jt,s(p.computationTimeMs)+" ms ",1)):(u(),m("span",Ht,"—"))],64)):k("",!0),t.key==="createdAt"?(u(),m("span",Dt,s(_(Ae)(p.createdAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:6},[p.status!=="completed"?(u(),C(d,{key:0,size:"small",type:"link",loading:le.value===p.id,onClick:ze=>De(p)},{default:o(()=>[y(s(e.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(u(),m("span",Kt," hash "+s(p.resultHash?.slice(0,8)||"—"),1))],64)):k("",!0)]),emptyText:o(()=>[f("div",Vt,[a(_(ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(e.$t("privacy.table.emptyComputations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(X,{open:Q.value,"onUpdate:open":l[10]||(l[10]=t=>Q.value=t),title:e.$t("privacy.model_modal.title"),"confirm-loading":j.value,width:540,"ok-text":e.$t("privacy.model_modal.ok"),"cancel-text":e.$t("privacy.model_modal.cancel"),onOk:qe,onCancel:he},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.model_modal.nameLabel"),required:""},{default:o(()=>[a(K,{value:c.name,"onUpdate:value":l[4]||(l[4]=t=>c.name=t),placeholder:e.$t("privacy.model_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.typeLabel")},{default:o(()=>[a(K,{value:c.modelType,"onUpdate:value":l[5]||(l[5]=t=>c.modelType=t),placeholder:e.$t("privacy.model_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.archLabel")},{default:o(()=>[a(K,{value:c.architecture,"onUpdate:value":l[6]||(l[6]=t=>c.architecture=t),placeholder:e.$t("privacy.model_modal.archPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.roundsLabel")},{default:o(()=>[a(E,{value:c.rounds,"onUpdate:value":l[7]||(l[7]=t=>c.rounds=t),min:1,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.lrLabel")},{default:o(()=>[a(E,{value:c.lr,"onUpdate:value":l[8]||(l[8]=t=>c.lr=t),min:0,max:1,step:.001,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.participantsLabel")},{default:o(()=>[a(E,{value:c.participants,"onUpdate:value":l[9]||(l[9]=t=>c.participants=t),min:0,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:Y.value,"onUpdate:open":l[15]||(l[15]=t=>Y.value=t),title:e.$t("privacy.computation_modal.title"),"confirm-loading":j.value,width:520,"ok-text":e.$t("privacy.computation_modal.ok"),"cancel-text":e.$t("privacy.computation_modal.cancel"),onOk:Ie,onCancel:_e},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.computation_modal.typeLabel"),required:""},{default:o(()=>[a(K,{value:$.type,"onUpdate:value":l[11]||(l[11]=t=>$.type=t),placeholder:e.$t("privacy.computation_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.protocolLabel")},{default:o(()=>[a(Xe,{value:$.protocol,"onUpdate:value":l[12]||(l[12]=t=>$.protocol=t)},{default:o(()=>[(u(!0),m(z,null,T(_(Re),t=>(u(),C(Ge,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.participantsLabel")},{default:o(()=>[a(xe,{value:$.participants,"onUpdate:value":l[13]||(l[13]=t=>$.participants=t),placeholder:e.$t("privacy.computation_modal.participantsPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.thresholdLabel")},{default:o(()=>[a(E,{value:$.threshold,"onUpdate:value":l[14]||(l[14]=t=>$.threshold=t),min:2,max:100,placeholder:e.$t("privacy.computation_modal.thresholdPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:ne.value,"onUpdate:open":l[21]||(l[21]=t=>ne.value=t),title:e.$t("privacy.dp_modal.title"),"confirm-loading":ee.value,width:520,"ok-text":e.$t("privacy.dp_modal.ok"),"cancel-text":e.$t("privacy.dp_modal.cancel"),onOk:Ke},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.dp_modal.dataLabel"),required:""},{default:o(()=>[a(K,{value:S.data,"onUpdate:value":l[16]||(l[16]=t=>S.data=t),placeholder:e.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.mechanismLabel")},{default:o(()=>[a(I,{value:S.mechanism,"onUpdate:value":l[17]||(l[17]=t=>S.mechanism=t)},{default:o(()=>[(u(!0),m(z,null,T(_(ct),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.epsilonLabel")},{default:o(()=>[a(E,{value:S.epsilon,"onUpdate:value":l[18]||(l[18]=t=>S.epsilon=t),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.deltaLabel")},{default:o(()=>[a(E,{value:S.delta,"onUpdate:value":l[19]||(l[19]=t=>S.delta=t),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.sensitivityLabel")},{default:o(()=>[a(E,{value:S.sensitivity,"onUpdate:value":l[20]||(l[20]=t=>S.sensitivity=t),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),M.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[M.value.published?(u(),m(z,{key:0},[a(U,{title:e.$t("privacy.dp_modal.noisedTitle"),value:M.value.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),f("div",Wt,[f("div",null,s(e.$t("privacy.dp_modal.spentLine",{n:M.value.budgetSpent.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.remainingLine",{n:M.value.budgetRemaining.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.mechanismLine",{name:M.value.mechanism,epsilon:M.value.epsilon})),1)])],64)):(u(),C(U,{key:1,title:e.$t("privacy.dp_modal.failedTitle"),value:M.value.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:re.value,"onUpdate:open":l[25]||(l[25]=t=>re.value=t),title:e.$t("privacy.he_modal.title"),"confirm-loading":te.value,width:500,"ok-text":e.$t("privacy.he_modal.ok"),"cancel-text":e.$t("privacy.he_modal.cancel"),onOk:Ve},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.he_modal.dataLabel"),required:""},{default:o(()=>[a(xe,{value:A.data,"onUpdate:value":l[22]||(l[22]=t=>A.data=t),placeholder:e.$t("privacy.he_modal.dataPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.operationLabel")},{default:o(()=>[a(I,{value:A.operation,"onUpdate:value":l[23]||(l[23]=t=>A.operation=t)},{default:o(()=>[(u(!0),m(z,null,T(_(mt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.schemeLabel")},{default:o(()=>[a(I,{value:A.scheme,"onUpdate:value":l[24]||(l[24]=t=>A.scheme=t)},{default:o(()=>[(u(!0),m(z,null,T(_(dt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),O.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[a(U,{title:e.$t("privacy.he_modal.resultTitle"),value:O.value.result,"value-style":{color:"#1677ff"}},null,8,["title","value"]),f("div",Qt,[f("div",null,s(e.$t("privacy.he_modal.schemeLine",{name:O.value.scheme})),1),f("div",null,s(e.$t("privacy.he_modal.operationLine",{name:O.value.operation})),1),f("div",null,s(e.$t("privacy.he_modal.inputCountLine",{n:O.value.inputCount})),1),O.value.encrypted?(u(),C(N,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:o(()=>[y(s(e.$t("privacy.he_modal.encrypted")),1)]),_:1})):k("",!0)])]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},ta=Ze(Yt,[["__scopeId","data-v-fe89c543"]]);export{ta as default};
|
|
1
|
+
import{_ as Ze,u as et,b as tt,d as v}from"./index-Bdaro36b.js";import{s as at}from"./community-parser-CO25nZFt.js";import{R as lt,as as ot,a0 as pe,z as ce,W as Le,J as it,a$ as nt}from"./icons-AILO5ZcK.js";import{o as rt,M as m,R as f,P as s,c as a,N as o,K as g,r as h,L as u,O as y,u as _,F as z,Y as T,Q as C,S as k,_ as st,f as J,a as Z}from"./vendor-DhFY8mDK.js";function H(i){const r=at(i);if(!r)return null;try{return JSON.parse(r)}catch{}const n=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const ut=Object.freeze(["initializing","training","aggregating","completed","failed"]),pt=Object.freeze(["pending","computing","completed"]),Re=Object.freeze(["shamir","beaver","gmw"]),ct=Object.freeze(["laplace","gaussian","exponential"]),dt=Object.freeze(["paillier","bfv","ckks"]),mt=Object.freeze(["sum","product","mean","count"]);function b(i,r=0){return typeof i=="number"&&Number.isFinite(i)?i:r}function yt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||n),description:String(i.description||""),_idx:r}:null}function de(i){const r=H(i);return Array.isArray(r)?r.map(yt).filter(Boolean):[]}function vt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||""),modelType:i.modelType??i.model_type??"neural_network",architecture:String(i.architecture||""),status:String(i.status||"initializing").toLowerCase(),currentRound:b(i.currentRound??i.current_round,0),totalRounds:b(i.totalRounds??i.total_rounds,0),participantCount:b(i.participantCount??i.participant_count,0),accuracy:b(i.accuracy,0),loss:i.loss==null?null:b(i.loss,null),learningRate:b(i.learningRate??i.learning_rate,0),aggregationStrategy:i.aggregationStrategy??i.aggregation_strategy??"",privacyBudgetSpent:b(i.privacyBudgetSpent??i.privacy_budget_spent,0),createdAt:i.createdAt??i.created_at??null,updatedAt:i.updatedAt??i.updated_at??null,_idx:r}:null}function ft(i){const r=H(i);return Array.isArray(r)?r.map(vt).filter(Boolean):[]}function gt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";if(!n)return null;let L=i.participantIds??i.participant_ids??[];if(typeof L=="string")try{L=JSON.parse(L)}catch{L=[]}return Array.isArray(L)||(L=[]),{key:n,id:n,computationType:i.computationType??i.computation_type??"",protocol:String(i.protocol||"shamir").toLowerCase(),participantCount:b(i.participantCount??i.participant_count,0),participantIds:L,resultHash:i.resultHash??i.result_hash??null,status:String(i.status||"pending").toLowerCase(),sharesReceived:b(i.sharesReceived??i.shares_received,0),sharesRequired:b(i.sharesRequired??i.shares_required,0),computationTimeMs:i.computationTimeMs??i.computation_time_ms??null,errorMessage:i.errorMessage??i.error_message??"",createdAt:i.createdAt??i.created_at??null,completedAt:i.completedAt??i.completed_at??null,_idx:r}}function bt(i){const r=H(i);return Array.isArray(r)?r.map(gt).filter(Boolean):[]}function ht(i){const r=H(i);return!r||typeof r!="object"||Array.isArray(r)?null:{published:!!r.published,reason:r.reason||null,data:r.data??null,epsilon:b(r.epsilon,0),delta:b(r.delta,0),mechanism:String(r.mechanism||""),budgetSpent:b(r.budgetSpent??r.budget_spent,0),budgetRemaining:b(r.budgetRemaining??r.budget_remaining,0)}}function _t(i){const r=H(i);return!r||typeof r!="object"||Array.isArray(r)?null:{result:r.result??null,operation:String(r.operation||""),scheme:String(r.scheme||""),inputCount:b(r.inputCount??r.input_count,0),encrypted:r.encrypted!==!1}}const kt={privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}};function $t(i){const r=JSON.parse(JSON.stringify(kt)),n=H(i);if(!n||typeof n!="object"||Array.isArray(n))return r;if(n.privacyBudget&&typeof n.privacyBudget=="object"&&(r.privacyBudget.spent=b(n.privacyBudget.spent,0),r.privacyBudget.limit=b(n.privacyBudget.limit,0),r.privacyBudget.remaining=b(n.privacyBudget.remaining,0),r.privacyBudget.exhausted=!!n.privacyBudget.exhausted),n.federatedLearning&&typeof n.federatedLearning=="object"&&(r.federatedLearning.totalModels=b(n.federatedLearning.totalModels,0),r.federatedLearning.completed=b(n.federatedLearning.completed,0),r.federatedLearning.training=b(n.federatedLearning.training,0),r.federatedLearning.avgAccuracy=b(n.federatedLearning.avgAccuracy,0)),n.mpc&&typeof n.mpc=="object"&&(r.mpc.totalComputations=b(n.mpc.totalComputations,0),r.mpc.completed=b(n.mpc.completed,0),r.mpc.pending=b(n.mpc.pending,0),n.mpc.byProtocol&&typeof n.mpc.byProtocol=="object"))for(const[L,j]of Object.entries(n.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(r.mpc.byProtocol[L]=j);return r}function Ae(i){if(i==null||i==="")return"—";const r=typeof i=="number"?new Date(i):new Date(String(i));return isNaN(r.getTime())?String(i):r.toLocaleString("zh-CN",{hour12:!1})}const St={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},xt={class:"page-sub"},zt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Lt={class:"catalog-name"},Rt={class:"catalog-desc"},At={class:"catalog-name"},Mt={class:"catalog-desc"},jt={class:"catalog-name"},Ft={class:"catalog-desc"},Tt={class:"filter-bar"},Ot={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Bt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Ut={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},wt={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},Nt={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},Et={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},qt={class:"filter-bar"},It={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},Jt={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},Ht={key:1,style:{color:"var(--text-muted)"}},Dt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Kt={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Vt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Qt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Yt={__name:"Privacy",setup(i){const r=et(),{t:n}=tt(),L=h(!1),j=h(!1),ee=h(!1),te=h(!1),ae=h(""),le=h(""),me=h([]),ye=h([]),ve=h([]),oe=h([]),fe=h([]),R=h({privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}}),ie=h("models"),D=h(""),V=h(""),W=h(""),Q=h(!1),Y=h(!1),ne=h(!1),re=h(!1),c=Z({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),$=Z({type:"",protocol:"shamir",participants:"",threshold:null}),S=Z({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=Z({data:"",operation:"sum",scheme:"paillier"}),M=h(null),O=h(null),Me=J(()=>[{title:n("privacy.modelCols.name"),key:"name"},{title:n("privacy.modelCols.status"),key:"status",width:"120px"},{title:n("privacy.modelCols.progress"),key:"progress",width:"160px"},{title:n("privacy.modelCols.accuracy"),key:"accuracy",width:"110px"},{title:n("privacy.modelCols.participants"),key:"participants",width:"90px"},{title:n("privacy.modelCols.budget"),key:"budget",width:"100px"},{title:n("privacy.modelCols.updatedAt"),key:"updatedAt",width:"160px"},{title:n("privacy.modelCols.action"),key:"action",width:"180px"}]),je=J(()=>[{title:n("privacy.computationCols.type"),key:"type",width:"160px"},{title:n("privacy.computationCols.protocol"),key:"protocol",width:"100px"},{title:n("privacy.computationCols.progress"),key:"progress"},{title:n("privacy.computationCols.status"),key:"status",width:"110px"},{title:n("privacy.computationCols.time"),key:"time",width:"110px"},{title:n("privacy.computationCols.createdAt"),key:"createdAt",width:"160px"},{title:n("privacy.computationCols.action"),key:"action",width:"160px"}]),Fe=J(()=>R.value.federatedLearning.avgAccuracy*100),Te=J(()=>{const e=R.value.privacyBudget.remaining,l=R.value.privacyBudget.limit;if(l===0)return"#888";const d=e/l;return d<.2?"#ff4d4f":d<.5?"#faad14":"#52c41a"}),Oe=J(()=>D.value?oe.value.filter(e=>e.status===D.value):oe.value),Pe=J(()=>{let e=fe.value;return V.value&&(e=e.filter(l=>l.protocol===V.value)),W.value&&(e=e.filter(l=>l.status===W.value)),e});function ge(e){const l=`privacy.flStatusLabels.${e}`,d=n(l);return d===l?e:d}function Be(e){return{initializing:"default",training:"processing",aggregating:"cyan",completed:"green",failed:"red"}[e]||"default"}function be(e){const l=`privacy.mpcStatusLabels.${e}`,d=n(l);return d===l?e:d}function Ue(e){return{pending:"default",computing:"processing",completed:"green"}[e]||"default"}function we(e){return e>=.85?"#52c41a":e>=.6?"#faad14":"#ff4d4f"}function Ne(e){return e.status==="initializing"||e.status==="training"||e.status==="aggregating"}function Ee({key:e}){e==="model"?Q.value=!0:e==="computation"?Y.value=!0:e==="dp"?(M.value=null,ne.value=!0):e==="he"&&(O.value=null,re.value=!0)}async function B(){L.value=!0;try{const[e,l,d,q,se,ue]=await Promise.all([r.execute("privacy protocols --json",8e3).catch(()=>({output:""})),r.execute("privacy dp-mechanisms --json",8e3).catch(()=>({output:""})),r.execute("privacy he-schemes --json",8e3).catch(()=>({output:""})),r.execute("privacy models --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy computations --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy report --json",8e3).catch(()=>({output:""}))]);me.value=de(e.output),ye.value=de(l.output),ve.value=de(d.output),oe.value=ft(q.output),fe.value=bt(se.output),R.value=$t(ue.output)}catch(e){v.error(n("privacy.msg.loadFailed")+": "+(e?.message||e))}finally{L.value=!1}}async function qe(){if(!c.name.trim()){v.warning(n("privacy.msg.modelNameEmpty"));return}j.value=!0;try{const e=[`privacy create-model "${c.name.trim().replace(/"/g,'\\"')}"`];c.modelType.trim()&&e.push(`--type "${c.modelType.trim().replace(/"/g,'\\"')}"`),c.architecture.trim()&&e.push(`--arch "${c.architecture.trim().replace(/"/g,'\\"')}"`),c.rounds!=null&&e.push(`--rounds ${c.rounds}`),c.lr!=null&&e.push(`--lr ${c.lr}`),c.participants!=null&&e.push(`--participants ${c.participants}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),12e3);if(/error|失败/i.test(l)&&!/"modelId"/.test(l)){v.error(n("privacy.msg.modelCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.modelCreateSuccess")),Q.value=!1,he(),await B()}catch(e){v.error(n("privacy.msg.modelCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function Ie(){if(!$.type.trim()){v.warning(n("privacy.msg.computationTypeEmpty"));return}j.value=!0;try{const e=[`privacy create-computation "${$.type.trim().replace(/"/g,'\\"')}"`];if(e.push(`--protocol ${$.protocol}`),$.participants.trim()){const d=$.participants.split(/[,\s]+/).filter(Boolean).join(",");d&&e.push(`--participants "${d}"`)}$.threshold!=null&&e.push(`--threshold ${$.threshold}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4);if(/error|失败|invalid/i.test(l)&&!/"computationId"/.test(l)){v.error(n("privacy.msg.computationCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.computationCreateSuccess")),Y.value=!1,_e(),ie.value="computations",await B()}catch(e){v.error(n("privacy.msg.computationCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function Je(e){ae.value=e.id;try{const{output:l}=await r.execute(`privacy train ${e.id} --json`,12e3);if(/error|失败/i.test(l)&&!/"trained"/.test(l)){v.error(n("privacy.msg.trainFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.trainSuccess")),await B()}catch(l){v.error(n("privacy.msg.trainFailed")+": "+(l?.message||l))}finally{ae.value=""}}async function He(e){try{const{output:l}=await r.execute(`privacy fail-model ${e.id} --json`,8e3);if(/error/i.test(l)&&!/"failed"/.test(l)){v.error(n("privacy.msg.failMarkFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.failMarkSuccess")),await B()}catch(l){v.error(n("privacy.msg.failMarkFailed")+": "+(l?.message||l))}}async function De(e){le.value=e.id;try{const{output:l}=await r.execute(`privacy submit-share ${e.id} --json`,1e4);if(/error|失败/i.test(l)&&!/"submitted"/.test(l)){v.error(n("privacy.msg.submitFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.submitSuccess")),await B()}catch(l){v.error(n("privacy.msg.submitFailed")+": "+(l?.message||l))}finally{le.value=""}}async function Ke(){if(!S.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}ee.value=!0,M.value=null;try{const e=["privacy dp-publish"];e.push(`--data ${JSON.stringify(S.data.trim())}`),e.push(`--mechanism ${S.mechanism}`),S.epsilon!=null&&e.push(`--epsilon ${S.epsilon}`),S.delta!=null&&e.push(`--delta ${S.delta}`),S.sensitivity!=null&&e.push(`--sensitivity ${S.sensitivity}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=ht(l);if(!d){v.error(n("privacy.msg.dpFailed")+": "+l.slice(0,120));return}M.value=d,d.published?(v.success(n("privacy.msg.dpSuccess")),await B()):v.warning(n("privacy.msg.dpRejected",{reason:d.reason||"unknown"}))}catch(e){v.error(n("privacy.msg.dpFailed")+": "+(e?.message||e))}finally{ee.value=!1}}async function Ve(){if(!A.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}try{JSON.parse(A.data)}catch{v.warning(n("privacy.msg.dataInvalidJson"));return}te.value=!0,O.value=null;try{const e=["privacy he-query"];e.push(`--data ${JSON.stringify(A.data.trim())}`),e.push(`--operation ${A.operation}`),e.push(`--scheme ${A.scheme}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=_t(l);if(!d){v.error(n("privacy.msg.heFailed")+": "+l.slice(0,120));return}O.value=d,v.success(n("privacy.msg.heSuccess",{scheme:d.scheme,op:d.operation}))}catch(e){v.error(n("privacy.msg.heFailed")+": "+(e?.message||e))}finally{te.value=!1}}function he(){c.name="",c.modelType="",c.architecture="",c.rounds=10,c.lr=.01,c.participants=0}function _e(){$.type="",$.protocol="shamir",$.participants="",$.threshold=null}return rt(B),(e,l)=>{const d=g("a-button"),q=g("a-menu-item"),se=g("a-menu"),ue=g("a-dropdown"),We=g("a-space"),U=g("a-statistic"),F=g("a-card"),w=g("a-col"),ke=g("a-row"),N=g("a-tag"),P=g("a-radio-button"),I=g("a-radio-group"),$e=g("a-progress"),Qe=g("a-popconfirm"),Se=g("a-table"),Ce=g("a-tab-pane"),Ye=g("a-tabs"),K=g("a-input"),x=g("a-form-item"),E=g("a-input-number"),G=g("a-form"),X=g("a-modal"),Ge=g("a-select-option"),Xe=g("a-select"),xe=g("a-textarea");return u(),m("div",null,[f("div",St,[f("div",null,[f("h2",Ct,s(e.$t("privacy.title")),1),f("p",xt,s(e.$t("privacy.subtitle")),1)]),a(We,null,{default:o(()=>[a(d,{loading:L.value,onClick:B},{icon:o(()=>[a(_(lt))]),default:o(()=>[y(" "+s(e.$t("privacy.refresh")),1)]),_:1},8,["loading"]),a(ue,{trigger:["click"]},{overlay:o(()=>[a(se,{onClick:Ee},{default:o(()=>[a(q,{key:"model"},{default:o(()=>[a(_(pe)),y(" "+s(e.$t("privacy.actions.model")),1)]),_:1}),a(q,{key:"computation"},{default:o(()=>[a(_(ce)),y(" "+s(e.$t("privacy.actions.computation")),1)]),_:1}),a(q,{key:"dp"},{default:o(()=>[a(_(Le)),y(" "+s(e.$t("privacy.actions.dp")),1)]),_:1}),a(q,{key:"he"},{default:o(()=>[a(_(it)),y(" "+s(e.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:o(()=>[a(d,{type:"primary"},{icon:o(()=>[a(_(ot))]),default:o(()=>[y(" "+s(e.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.models"),value:R.value.federatedLearning.totalModels,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(_(pe))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.avgAccuracy"),value:Fe.value,precision:1,suffix:"%","value-style":{color:R.value.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(_(nt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.computations"),value:R.value.mpc.totalComputations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(_(ce))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budget"),value:R.value.privacyBudget.remaining,precision:2,"value-style":{color:Te.value,fontSize:"20px"}},{prefix:o(()=>[a(_(Le))]),suffix:o(()=>[f("span",zt,"/ "+s(R.value.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:24,sm:8,lg:4},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budgetState"),value:R.value.privacyBudget.exhausted?e.$t("privacy.stats.exhausted"):e.$t("privacy.stats.ample"),"value-style":{color:R.value.privacyBudget.exhausted?"#ff4d4f":"#52c41a",fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.protocols"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(me.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",Lt,s(t.name),1),f("span",Rt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ye.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"orange",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",At,s(t.name),1),f("span",Mt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ve.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",jt,s(t.name),1),f("span",Ft,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1})]),_:1}),a(Ye,{activeKey:ie.value,"onUpdate:activeKey":l[3]||(l[3]=t=>ie.value=t),class:"privacy-tabs"},{default:o(()=>[a(Ce,{key:"models",tab:e.$t("privacy.tabs.models")},{default:o(()=>[f("div",Tt,[a(I,{value:D.value,"onUpdate:value":l[0]||(l[0]=t=>D.value=t),size:"small","button-style":"solid"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.all")),1)]),_:1}),(u(!0),m(z,null,T(_(ut),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:Me.value,"data-source":Oe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="name"?(u(),m(z,{key:0},[f("span",Ot,s(p.name),1),f("div",Pt,s(p.modelType)+" / "+s(p.architecture),1)],64)):k("",!0),t.key==="status"?(u(),C(N,{key:1,color:Be(p.status)},{default:o(()=>[y(s(ge(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="progress"?(u(),m(z,{key:2},[a($e,{percent:p.totalRounds?Math.round(100*p.currentRound/p.totalRounds):0,size:"small",status:p.status==="failed"?"exception":p.status==="completed"?"success":"active"},null,8,["percent","status"]),f("div",Bt,s(e.$t("privacy.table.rounds",{cur:p.currentRound,total:p.totalRounds})),1)],64)):k("",!0),t.key==="accuracy"?(u(),m(z,{key:3},[f("span",{style:st({color:we(p.accuracy),fontFamily:"monospace"})},s((p.accuracy*100).toFixed(1))+"% ",5),p.loss!=null?(u(),m("div",Ut," loss "+s(p.loss.toFixed(3)),1)):k("",!0)],64)):k("",!0),t.key==="participants"?(u(),C(N,{key:4,color:"blue",style:{"font-size":"11px"}},{default:o(()=>[y(s(p.participantCount),1)]),_:2},1024)):k("",!0),t.key==="budget"?(u(),m("span",wt,s(p.privacyBudgetSpent.toFixed(3)),1)):k("",!0),t.key==="updatedAt"?(u(),m("span",Nt,s(_(Ae)(p.updatedAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:7},[Ne(p)?(u(),C(d,{key:0,size:"small",type:"link",loading:ae.value===p.id,onClick:ze=>Je(p)},{default:o(()=>[y(s(e.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):k("",!0),p.status!=="failed"&&p.status!=="completed"?(u(),C(Qe,{key:1,title:e.$t("privacy.table.failConfirm"),"ok-text":e.$t("privacy.table.failOk"),"cancel-text":e.$t("privacy.table.failCancel"),onConfirm:ze=>He(p)},{default:o(()=>[a(d,{size:"small",type:"link",danger:""},{default:o(()=>[y(s(e.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):k("",!0)],64)):k("",!0)]),emptyText:o(()=>[f("div",Et,[a(_(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(D.value?e.$t("privacy.table.emptyModelsFiltered"):e.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(Ce,{key:"computations",tab:e.$t("privacy.tabs.computations")},{default:o(()=>[f("div",qt,[a(I,{value:V.value,"onUpdate:value":l[1]||(l[1]=t=>V.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allProtocols")),1)]),_:1}),(u(!0),m(z,null,T(_(Re),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(I,{value:W.value,"onUpdate:value":l[2]||(l[2]=t=>W.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allStatuses")),1)]),_:1}),(u(!0),m(z,null,T(_(pt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(be(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:je.value,"data-source":Pe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="type"?(u(),m("span",It,s(p.computationType),1)):k("",!0),t.key==="protocol"?(u(),C(N,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(p.protocol),1)]),_:2},1024)):k("",!0),t.key==="progress"?(u(),C($e,{key:2,percent:p.sharesRequired?Math.round(100*p.sharesReceived/p.sharesRequired):0,size:"small",status:p.status==="completed"?"success":"active",format:()=>`${p.sharesReceived}/${p.sharesRequired}`},null,8,["percent","status","format"])):k("",!0),t.key==="status"?(u(),C(N,{key:3,color:Ue(p.status)},{default:o(()=>[y(s(be(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="time"?(u(),m(z,{key:4},[p.computationTimeMs!=null?(u(),m("span",Jt,s(p.computationTimeMs)+" ms ",1)):(u(),m("span",Ht,"—"))],64)):k("",!0),t.key==="createdAt"?(u(),m("span",Dt,s(_(Ae)(p.createdAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:6},[p.status!=="completed"?(u(),C(d,{key:0,size:"small",type:"link",loading:le.value===p.id,onClick:ze=>De(p)},{default:o(()=>[y(s(e.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(u(),m("span",Kt," hash "+s(p.resultHash?.slice(0,8)||"—"),1))],64)):k("",!0)]),emptyText:o(()=>[f("div",Vt,[a(_(ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(e.$t("privacy.table.emptyComputations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(X,{open:Q.value,"onUpdate:open":l[10]||(l[10]=t=>Q.value=t),title:e.$t("privacy.model_modal.title"),"confirm-loading":j.value,width:540,"ok-text":e.$t("privacy.model_modal.ok"),"cancel-text":e.$t("privacy.model_modal.cancel"),onOk:qe,onCancel:he},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.model_modal.nameLabel"),required:""},{default:o(()=>[a(K,{value:c.name,"onUpdate:value":l[4]||(l[4]=t=>c.name=t),placeholder:e.$t("privacy.model_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.typeLabel")},{default:o(()=>[a(K,{value:c.modelType,"onUpdate:value":l[5]||(l[5]=t=>c.modelType=t),placeholder:e.$t("privacy.model_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.archLabel")},{default:o(()=>[a(K,{value:c.architecture,"onUpdate:value":l[6]||(l[6]=t=>c.architecture=t),placeholder:e.$t("privacy.model_modal.archPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.roundsLabel")},{default:o(()=>[a(E,{value:c.rounds,"onUpdate:value":l[7]||(l[7]=t=>c.rounds=t),min:1,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.lrLabel")},{default:o(()=>[a(E,{value:c.lr,"onUpdate:value":l[8]||(l[8]=t=>c.lr=t),min:0,max:1,step:.001,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.participantsLabel")},{default:o(()=>[a(E,{value:c.participants,"onUpdate:value":l[9]||(l[9]=t=>c.participants=t),min:0,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:Y.value,"onUpdate:open":l[15]||(l[15]=t=>Y.value=t),title:e.$t("privacy.computation_modal.title"),"confirm-loading":j.value,width:520,"ok-text":e.$t("privacy.computation_modal.ok"),"cancel-text":e.$t("privacy.computation_modal.cancel"),onOk:Ie,onCancel:_e},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.computation_modal.typeLabel"),required:""},{default:o(()=>[a(K,{value:$.type,"onUpdate:value":l[11]||(l[11]=t=>$.type=t),placeholder:e.$t("privacy.computation_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.protocolLabel")},{default:o(()=>[a(Xe,{value:$.protocol,"onUpdate:value":l[12]||(l[12]=t=>$.protocol=t)},{default:o(()=>[(u(!0),m(z,null,T(_(Re),t=>(u(),C(Ge,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.participantsLabel")},{default:o(()=>[a(xe,{value:$.participants,"onUpdate:value":l[13]||(l[13]=t=>$.participants=t),placeholder:e.$t("privacy.computation_modal.participantsPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.thresholdLabel")},{default:o(()=>[a(E,{value:$.threshold,"onUpdate:value":l[14]||(l[14]=t=>$.threshold=t),min:2,max:100,placeholder:e.$t("privacy.computation_modal.thresholdPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:ne.value,"onUpdate:open":l[21]||(l[21]=t=>ne.value=t),title:e.$t("privacy.dp_modal.title"),"confirm-loading":ee.value,width:520,"ok-text":e.$t("privacy.dp_modal.ok"),"cancel-text":e.$t("privacy.dp_modal.cancel"),onOk:Ke},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.dp_modal.dataLabel"),required:""},{default:o(()=>[a(K,{value:S.data,"onUpdate:value":l[16]||(l[16]=t=>S.data=t),placeholder:e.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.mechanismLabel")},{default:o(()=>[a(I,{value:S.mechanism,"onUpdate:value":l[17]||(l[17]=t=>S.mechanism=t)},{default:o(()=>[(u(!0),m(z,null,T(_(ct),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.epsilonLabel")},{default:o(()=>[a(E,{value:S.epsilon,"onUpdate:value":l[18]||(l[18]=t=>S.epsilon=t),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.deltaLabel")},{default:o(()=>[a(E,{value:S.delta,"onUpdate:value":l[19]||(l[19]=t=>S.delta=t),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.sensitivityLabel")},{default:o(()=>[a(E,{value:S.sensitivity,"onUpdate:value":l[20]||(l[20]=t=>S.sensitivity=t),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),M.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[M.value.published?(u(),m(z,{key:0},[a(U,{title:e.$t("privacy.dp_modal.noisedTitle"),value:M.value.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),f("div",Wt,[f("div",null,s(e.$t("privacy.dp_modal.spentLine",{n:M.value.budgetSpent.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.remainingLine",{n:M.value.budgetRemaining.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.mechanismLine",{name:M.value.mechanism,epsilon:M.value.epsilon})),1)])],64)):(u(),C(U,{key:1,title:e.$t("privacy.dp_modal.failedTitle"),value:M.value.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:re.value,"onUpdate:open":l[25]||(l[25]=t=>re.value=t),title:e.$t("privacy.he_modal.title"),"confirm-loading":te.value,width:500,"ok-text":e.$t("privacy.he_modal.ok"),"cancel-text":e.$t("privacy.he_modal.cancel"),onOk:Ve},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.he_modal.dataLabel"),required:""},{default:o(()=>[a(xe,{value:A.data,"onUpdate:value":l[22]||(l[22]=t=>A.data=t),placeholder:e.$t("privacy.he_modal.dataPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.operationLabel")},{default:o(()=>[a(I,{value:A.operation,"onUpdate:value":l[23]||(l[23]=t=>A.operation=t)},{default:o(()=>[(u(!0),m(z,null,T(_(mt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.schemeLabel")},{default:o(()=>[a(I,{value:A.scheme,"onUpdate:value":l[24]||(l[24]=t=>A.scheme=t)},{default:o(()=>[(u(!0),m(z,null,T(_(dt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),O.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[a(U,{title:e.$t("privacy.he_modal.resultTitle"),value:O.value.result,"value-style":{color:"#1677ff"}},null,8,["title","value"]),f("div",Qt,[f("div",null,s(e.$t("privacy.he_modal.schemeLine",{name:O.value.scheme})),1),f("div",null,s(e.$t("privacy.he_modal.operationLine",{name:O.value.operation})),1),f("div",null,s(e.$t("privacy.he_modal.inputCountLine",{n:O.value.inputCount})),1),O.value.encrypted?(u(),C(N,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:o(()=>[y(s(e.$t("privacy.he_modal.encrypted")),1)]),_:1})):k("",!0)])]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},ta=Ze(Yt,[["__scopeId","data-v-fe89c543"]]);export{ta as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as se,b as le,u as re,d as T}from"./index-
|
|
1
|
+
import{_ as se,b as le,u as re,d as T}from"./index-Bdaro36b.js";import{u as ne}from"./useFs-C6K_Uzdm.js";import{R as ie,f as $,j as S,_ as B,an as H,ar as A}from"./icons-AILO5ZcK.js";import{o as ce,M as m,R as d,P as l,u as e,c as a,N as o,Q as _,S as y,r as v,K as g,a as de,L as r,O as b,F as K,Y as Q,Z as ue,$ as pe,_ as fe,f as me}from"./vendor-DhFY8mDK.js";import"./useShellMode-CgR0wCYM.js";const ve={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ge={class:"page-title"},_e={class:"page-sub"},ye={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},xe={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},be={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},he={style:{"font-family":"monospace",color:"#ccc"}},je={style:{display:"flex","align-items":"flex-start",gap:"10px"}},ke={style:{flex:"1","min-width":"0"}},we={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},Ce={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},ze={key:0,style:{"margin-top":"8px","text-align":"right"}},De={style:{"margin-top":"16px",display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Pe={key:1,style:{color:"var(--text-secondary)","font-size":"12px"}},Se={key:0,style:{"margin-top":"12px",padding:"10px 12px",background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px","font-size":"12px",display:"flex","align-items":"center",gap:"10px"}},Fe={style:{"font-family":"monospace",color:"var(--text-secondary)",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Le={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Me={key:0,style:{"text-align":"center",padding:"30px"}},Re={style:{color:"var(--text-muted)","margin-top":"8px"}},Ie={key:1},Oe={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"400px","overflow-y":"auto","white-space":"pre-wrap"}},Te={__name:"ProjectInit",setup($e){const{t}=le(),z=re(),U=ne(),F=v(!1),L=v(!1),D=v(!1),M=v(!1),h=v(""),w=v(""),j=v(null),R=v(!1),I=v([]),p=v(null),k=v(!1),n=de({running:!1,edition:"",llmProvider:"",llmModel:"",setupDone:!1,setupDate:""}),W=[{name:"code-project",icon:B},{name:"medical-triage",icon:A},{name:"agriculture-expert",icon:S},{name:"general-assistant",icon:$},{name:"ai-media-creator",icon:S},{name:"ai-doc-creator",icon:B}],N=me(()=>W.map(s=>({...s,description:t(`projects.templates.${s.name}`)})));function Y(s){n.running=s.includes("Desktop app running")||s.includes("Running");const u=s.match(/Edition:\s+(\S+)/i);u&&(n.edition=u[1]);const c=s.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(c)n.llmProvider=c[1],n.llmModel=c[2];else{const i=s.match(/LLM:\s+(\S+)/i);i&&(n.llmProvider=i[1])}n.setupDone=s.includes("Setup completed");const x=s.match(/Setup completed \(([^)]+)\)/i);if(x)try{n.setupDate=new Date(x[1]).toLocaleDateString("zh-CN")}catch{n.setupDate=""}}function Z(s){const u=[],c=s.split(`
|
|
2
2
|
`);for(const x of c){const i=x.match(/^\s*(\S+)\s*[=:]\s*(.+)$/);i&&u.push({key:i[1].trim(),value:i[2].trim()})}I.value=u,R.value=u.length>0}async function O(){F.value=!0;try{const[s,u]=await Promise.all([z.execute("status",15e3),z.execute("config list",15e3)]);Y(s.output),Z(u.output)}catch(s){console.error("refresh failed:",s)}finally{F.value=!1}}async function q(){if(h.value){if(p.value&&k.value){T.info(t("projects.messages.alreadyProjectInfo"));return}L.value=!0,j.value=null;try{let s=`init --template ${h.value} --yes`;p.value&&(s+=` --cwd "${p.value}"`);const{output:u,exitCode:c}=await z.execute(s,3e4);j.value={success:c===0,output:u},c===0&&(p.value&&(k.value=!0),await O())}catch(s){j.value={success:!1,output:t("projects.messages.initFailed",{err:s.message})}}finally{L.value=!1}}}async function G(){M.value=!0;try{const s=await U.pickDirectory({title:t("projects.folder.pickerTitle")});if(s.unsupported){T.warning(t("projects.messages.browserUnsupported"));return}if(s.canceled)return;p.value=s.path,k.value=s.initialized}catch(s){T.error(t("projects.messages.pickFolderFailed",{err:s.message}))}finally{M.value=!1}}function J(){p.value=null,k.value=!1}async function X(){D.value=!0,w.value="";try{const{output:s}=await z.execute("doctor",3e4);w.value=s}catch(s){w.value=t("projects.messages.doctorFailed",{err:s.message})}finally{D.value=!1}}return ce(O),(s,u)=>{const c=g("a-button"),x=g("a-statistic"),i=g("a-card"),C=g("a-col"),E=g("a-row"),ee=g("a-descriptions-item"),te=g("a-descriptions"),P=g("a-tag"),V=g("a-alert"),oe=g("a-spin"),ae=g("a-empty");return r(),m("div",null,[d("div",ve,[d("div",null,[d("h2",ge,l(e(t)("projects.title")),1),d("p",_e,l(e(t)("projects.subtitle")),1)]),a(c,{type:"primary",ghost:"",loading:F.value,onClick:O},{icon:o(()=>[a(e(ie))]),default:o(()=>[b(" "+l(e(t)("projects.refresh")),1)]),_:1},8,["loading"])]),a(E,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(C,{xs:24,sm:12,lg:6},{default:o(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(x,{title:e(t)("projects.stats.system"),value:n.running?e(t)("projects.stats.running"):e(t)("projects.stats.notRunning"),"value-style":{color:n.running?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(e($))]),_:1},8,["title","value","value-style"]),n.edition?(r(),m("div",ye,l(e(t)("projects.stats.editionPrefix",{edition:n.edition})),1)):y("",!0)]),_:1})]),_:1}),a(C,{xs:24,sm:12,lg:6},{default:o(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(x,{title:e(t)("projects.stats.llmProvider"),value:n.llmProvider||e(t)("projects.stats.notConfigured"),"value-style":{color:n.llmProvider?"#1677ff":"#888",fontSize:"16px"}},{prefix:o(()=>[a(e(S))]),_:1},8,["title","value","value-style"]),n.llmModel?(r(),m("div",xe,l(n.llmModel),1)):y("",!0)]),_:1})]),_:1}),a(C,{xs:24,sm:12,lg:6},{default:o(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(x,{title:e(t)("projects.stats.init"),value:n.setupDone?e(t)("projects.stats.done"):e(t)("projects.stats.notDone"),"value-style":{color:n.setupDone?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:o(()=>[a(e($))]),_:1},8,["title","value","value-style"]),n.setupDate?(r(),m("div",be,l(n.setupDate),1)):y("",!0)]),_:1})]),_:1}),a(C,{xs:24,sm:12,lg:6},{default:o(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(x,{title:e(t)("projects.stats.config"),value:R.value?e(t)("projects.stats.loaded"):e(t)("projects.stats.notLoaded"),"value-style":{color:R.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(e(B))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),I.value.length?(r(),_(i,{key:0,title:e(t)("projects.configCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:o(()=>[a(te,{column:{xs:1,sm:2,lg:3},bordered:"",size:"small"},{default:o(()=>[(r(!0),m(K,null,Q(I.value,f=>(r(),_(ee,{key:f.key,label:f.key},{default:o(()=>[d("span",he,l(f.value),1)]),_:2},1032,["label"]))),128))]),_:1})]),_:1},8,["title"])):y("",!0),a(i,{title:e(t)("projects.initCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(P,{color:"blue"},{default:o(()=>[b(l(e(t)("projects.templateCount",{count:N.value.length})),1)]),_:1})]),default:o(()=>[a(E,{gutter:[16,16]},{default:o(()=>[(r(!0),m(K,null,Q(N.value,f=>(r(),_(C,{key:f.name,xs:24,sm:12,lg:8},{default:o(()=>[a(i,{size:"small",hoverable:"",class:ue(["template-card",{"template-selected":h.value===f.name}]),style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"pointer"},onClick:Be=>h.value=f.name},{default:o(()=>[d("div",je,[(r(),_(pe(f.icon),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}})),d("div",ke,[d("div",we,l(f.name),1),d("div",Ce,l(f.description),1)])]),h.value===f.name?(r(),m("div",ze,[a(P,{color:"green"},{default:o(()=>[b(l(e(t)("projects.selected")),1)]),_:1})])):y("",!0)]),_:2},1032,["class","onClick"])]),_:2},1024))),128))]),_:1}),d("div",De,[a(c,{type:"primary",loading:L.value,disabled:!h.value||p.value&&k.value,onClick:q},{icon:o(()=>[a(e(S))]),default:o(()=>[b(" "+l(p.value?e(t)("projects.actions.initInFolder"):e(t)("projects.actions.initCwd")),1)]),_:1},8,["loading","disabled"]),a(c,{loading:M.value,onClick:G},{icon:o(()=>[a(e(H))]),default:o(()=>[b(" "+l(e(t)("projects.actions.pickFolder")),1)]),_:1},8,["loading"]),p.value?(r(),_(c,{key:0,size:"small",type:"text",onClick:J},{default:o(()=>[b(l(e(t)("projects.actions.clear")),1)]),_:1})):y("",!0),h.value?(r(),m("span",Pe,l(e(t)("projects.actions.templatePrefix",{name:h.value})),1)):y("",!0)]),p.value?(r(),m("div",Se,[a(e(H),{style:fe({color:k.value?"#52c41a":"#1677ff"})},null,8,["style"]),d("span",Fe,l(p.value),1),k.value?(r(),_(P,{key:0,color:"green"},{default:o(()=>[b(l(e(t)("projects.folder.alreadyProject")),1)]),_:1})):(r(),_(P,{key:1,color:"blue"},{default:o(()=>[b(l(e(t)("projects.folder.pendingInit")),1)]),_:1}))])):y("",!0),p.value&&k.value?(r(),_(V,{key:1,type:"info","show-icon":"",style:{"margin-top":"12px"},message:e(t)("projects.folder.alreadyMessage"),description:e(t)("projects.folder.alreadyDescription")},null,8,["message","description"])):y("",!0),j.value?(r(),_(V,{key:2,message:j.value.success?e(t)("projects.initResult.success"):e(t)("projects.initResult.failure"),type:j.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:u[0]||(u[0]=f=>j.value=null)},{description:o(()=>[d("pre",Le,l(j.value.output),1)]),_:1},8,["message","type"])):y("",!0)]),_:1},8,["title"]),a(i,{title:e(t)("projects.doctor.cardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(c,{loading:D.value,onClick:X,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(e(A))]),default:o(()=>[b(" "+l(e(t)("projects.doctor.runButton")),1)]),_:1},8,["loading"])]),default:o(()=>[D.value?(r(),m("div",Me,[a(oe),d("div",Re,l(e(t)("projects.doctor.runningHint")),1)])):w.value?(r(),m("div",Ie,[d("pre",Oe,l(w.value),1)])):(r(),_(ae,{key:2,description:e(t)("projects.doctor.emptyHint")},null,8,["description"]))]),_:1},8,["title"])])}}},Ke=se(Te,[["__scopeId","data-v-c641f2a0"]]);export{Ke as default};
|
package/src/assets/web-panel/assets/{ProjectSettings-8QjihLTL.js → ProjectSettings-CoAjW4AL.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as R,u as V,d as k}from"./index-
|
|
1
|
+
import{_ as R,u as V,d as k}from"./index-Bdaro36b.js";import{R as A,F as E}from"./icons-AILO5ZcK.js";import{a as L,r as P,o as T,M as O,R as v,c as a,N as l,K as i,L as M,O as B,u as I,Q as D,S as N,f as W}from"./vendor-DhFY8mDK.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function K(s){if(!s)return null;const e=s.trim();try{return JSON.parse(e)}catch{const o=e.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!o)return null;try{return JSON.parse(o[1])}catch{return null}}}function $(s){if(typeof s=="boolean")return s;const e=String(s).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}function j(s,e){if(typeof s=="number"&&Number.isFinite(s))return s;const o=parseFloat(s);return Number.isFinite(o)?o:e}function Q(s){const e={...c};if(!s)return e;const o=s.trim();if(!o||/key not found/i.test(o))return e;const n=K(o);if(n&&typeof n=="object"&&!Array.isArray(n))return n.rootPath!==void 0&&(e.rootPath=String(n.rootPath||"")),n.maxSizeMB!==void 0&&(e.maxSizeMB=j(n.maxSizeMB,c.maxSizeMB)),n.autoSync!==void 0&&(e.autoSync=$(n.autoSync)),n.syncIntervalSeconds!==void 0&&(e.syncIntervalSeconds=j(n.syncIntervalSeconds,c.syncIntervalSeconds)),e;const r=o.split(`
|
|
2
2
|
`);for(const u of r){const p=u.trim().match(/^(?:project\.)?(rootPath|maxSizeMB|autoSync|syncIntervalSeconds)\s*[=:]\s*(.+)$/i);if(!p)continue;const b=p[1],g=p[2].trim();b==="rootPath"?e.rootPath=g:b==="maxSizeMB"?e.maxSizeMB=j(g,c.maxSizeMB):b==="autoSync"?e.autoSync=$(g):b==="syncIntervalSeconds"&&(e.syncIntervalSeconds=j(g,c.syncIntervalSeconds))}return e}function F(s,e){const o={};for(const n of Object.keys(c))s[n]!==e[n]&&(o[n]=e[n]);return o}const q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},G={style:{color:"var(--text-primary)"}},H={key:0,style:{color:"#faad14","font-size":"12px","margin-left":"8px"}},X={__name:"ProjectSettings",setup(s){const e=V(),o=P(!1),n=P(!1),r=L({...c}),u=P({...c}),h=W(()=>Object.keys(F(u.value,r)).length>0);async function p(){o.value=!0;try{const{output:d}=await e.execute("config get project",1e4),t=Q(d);Object.assign(r,t),u.value={...t}}catch(d){/key not found/i.test(d.message)?(Object.assign(r,c),u.value={...c}):k.error("加载配置失败: "+d.message)}finally{o.value=!1}}function b(){Object.assign(r,u.value)}async function g(){const d=F(u.value,r),t=Object.keys(d);if(t.length===0){k.info("没有需要保存的修改");return}n.value=!0;let f=0,S=0;for(const _ of t){const m=d[_],w=String(m).replace(/"/g,'\\"'),z=`config set project.${_} "${w}"`;try{const{output:x,exitCode:C}=await e.execute(z,1e4);C!==0||/error|failed|失败/i.test(x)?(S++,k.error(`保存 ${_} 失败: ${x.slice(0,80)}`)):f++}catch(x){S++,k.error(`保存 ${_} 失败: ${x.message}`)}}n.value=!1,S===0?(k.success(`保存成功(${f} 项)`),u.value={...r}):f>0&&(k.warning(`部分保存成功:${f} 成功 / ${S} 失败`),await p())}return T(()=>{p()}),(d,t)=>{const f=i("a-button"),S=i("a-alert"),_=i("a-input"),m=i("a-form-item"),w=i("a-input-number"),z=i("a-switch"),x=i("a-space"),C=i("a-form"),U=i("a-spin"),J=i("a-card");return M(),O("div",null,[v("div",q,[t[5]||(t[5]=v("div",null,[v("h2",{class:"page-title"},"项目存储配置"),v("p",{class:"page-sub"},"根目录 / 配额 / 自动同步")],-1)),a(f,{loading:o.value,onClick:p},{icon:l(()=>[a(I(A))]),default:l(()=>[t[4]||(t[4]=B(" 刷新 ",-1))]),_:1},8,["loading"])]),a(S,{message:"仅 Web 模式",description:"目录选择器(原生文件对话框)仅在桌面端可用,本页面需手动输入路径。修改根目录后需重启桌面应用生效;web 端只影响后端配置文件。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),a(J,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:l(()=>[v("span",G,[a(I(E),{style:{"margin-right":"8px"}}),t[6]||(t[6]=B("项目存储 ",-1))])]),default:l(()=>[a(U,{spinning:o.value},{default:l(()=>[a(C,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:l(()=>[a(m,{label:"项目根目录"},{extra:l(()=>[...t[7]||(t[7]=[v("span",{style:{color:"var(--text-muted)","font-size":"11px"}}," 需绝对路径;修改后重启桌面应用生效 ",-1)])]),default:l(()=>[a(_,{value:r.rootPath,"onUpdate:value":t[0]||(t[0]=y=>r.rootPath=y),placeholder:"项目文件存储的根目录绝对路径",disabled:n.value},null,8,["value","disabled"])]),_:1}),a(m,{label:"最大项目大小"},{default:l(()=>[a(w,{value:r.maxSizeMB,"onUpdate:value":t[1]||(t[1]=y=>r.maxSizeMB=y),min:100,max:1e4,step:100,"addon-after":"MB",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1}),a(m,{label:"自动同步"},{default:l(()=>[a(z,{checked:r.autoSync,"onUpdate:checked":t[2]||(t[2]=y=>r.autoSync=y),disabled:n.value},null,8,["checked","disabled"]),t[8]||(t[8]=v("span",{style:{"margin-left":"12px",color:"var(--text-secondary)","font-size":"12px"}}," 自动同步项目到后端服务器 ",-1))]),_:1}),r.autoSync?(M(),D(m,{key:0,label:"同步间隔"},{default:l(()=>[a(w,{value:r.syncIntervalSeconds,"onUpdate:value":t[3]||(t[3]=y=>r.syncIntervalSeconds=y),min:60,max:3600,step:60,"addon-after":"秒",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1})):N("",!0),a(m,{"wrapper-col":{offset:6,span:18}},{default:l(()=>[a(x,null,{default:l(()=>[a(f,{onClick:b,disabled:n.value||o.value},{default:l(()=>[...t[9]||(t[9]=[B(" 重置 ",-1)])]),_:1},8,["disabled"]),a(f,{type:"primary",loading:n.value,disabled:!h.value,onClick:g},{default:l(()=>[...t[10]||(t[10]=[B(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),h.value?(M(),O("span",H," 有未保存的修改 ")):N("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]),_:1})])}}},te=R(X,[["__scopeId","data-v-17603429"]]);export{te as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as Ee,M as x,R as C,P as i,u as k,O as n,c as t,N as a,Q as w,S as A,K as r,r as d,f as ie,L as c,F as de,a1 as Me}from"./vendor-DhFY8mDK.js";import{_ as Te,b as qe,u as Ve,d as u}from"./index-JP5LGd1K.js";import{u as We}from"./useShellMode-CgR0wCYM.js";import{R as Je,as as Ke,F as Qe,f as Ge,l as He,aM as Xe,aN as Ye,aO as Ze}from"./icons-AILO5ZcK.js";const et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},at={class:"page-sub"},lt={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},ot={key:0,style:{"font-size":"12px",color:"#888"}},nt={key:0,style:{color:"#888","font-size":"12px"}},rt={key:0},st={key:1,style:{color:"#888"}},ut=["onClick"],it={key:0,style:{color:"#888","font-size":"12px"}},dt={__name:"Projects",setup(ct){const{t:ce}=qe(),oe=Ve(),{isEmbedded:fe}=We();async function _(l,e,te,m=8e3){if(fe){const b=await oe.sendRaw({...e,type:l},m);if(!b?.ok){const j=b?.error;throw new Error(typeof j=="string"?j:j?.message||`${l} failed`)}return b.result}return oe.executeJson(te,m)}const S=d(!1),F=d([]),L=d(""),N=d(""),h=d(!1),s=d(null),O=d([]),P=d(!1),B=d(!1),G=d(!1),f=d({name:"",description:"",type:"document",rootPath:""}),pe=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],H=ie(()=>{const l={active:0,draft:0,completed:0,archived:0};for(const e of F.value)l[e.status]!==void 0&&(l[e.status]+=1);return l}),ve=ie(()=>F.value.filter(l=>!(L.value&&l.status!==L.value||N.value&&!l.name.toLowerCase().includes(N.value.toLowerCase()))));function ne(l){switch(l){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function re(l){switch(l){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function X(l){return!l&&l!==0?"-":new Date(typeof l=="number"?l:parseInt(l,10)).toLocaleString("zh-CN",{hour12:!1})}async function $(){S.value=!0;try{const l=await _("project.list",{limit:500},"project list --limit 500 --json",1e4);F.value=Array.isArray(l?.projects)?l.projects:Array.isArray(l)?l:[]}catch(l){u.error("加载失败: "+(l.message||l)),F.value=[]}finally{S.value=!1}}function _e(l){return{onClick:()=>se(l)}}async function se(l){s.value=l,h.value=!0,P.value=!0,O.value=[];try{const e=await _("project.listFiles",{projectId:l.id,limit:200},`project list-files ${l.id} --json`,8e3);O.value=Array.isArray(e?.files)?e.files:[]}catch{O.value=[]}finally{P.value=!1}}async function me(l){try{(await _("project.delete",{id:l.id},`project delete ${l.id} --json`,8e3))?.ok?(u.success(`已删除项目 '${l.name}'`),h.value=!1,await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}function ye(){f.value={name:"",description:"",type:"document",rootPath:""},B.value=!0}async function ge(){if(!f.value.name.trim()){u.warning("请输入项目名称");return}G.value=!0;try{const l=await _("project.init",{name:f.value.name.trim(),description:f.value.description||null,projectType:f.value.type,rootPath:f.value.rootPath||null},`project init "${f.value.name.trim()}" --type ${f.value.type} --json`,8e3);l?.id?(u.success(`已创建项目 '${l.name}'`),B.value=!1,await $()):u.error("创建失败")}catch(l){u.error(l.message||String(l))}finally{G.value=!1}}const E=d(!1),Y=d(!1),g=d({path:"",content:""}),M=d(!1),Z=d(!1),I=d({path:""}),T=d(!1),D=d(null),q=d(""),ee=d(!1);function ke(){g.value={path:"",content:""},E.value=!0}function we(){I.value={path:""},M.value=!0}async function V(){if(s.value){P.value=!0;try{const l=await _("project.listFiles",{projectId:s.value.id,limit:200},`project list-files ${s.value.id} --json`,8e3);O.value=Array.isArray(l?.files)?l.files:[]}catch(l){u.error("刷新文件失败: "+(l.message||l))}finally{P.value=!1}}}async function be(){if(!g.value.path.trim()){u.warning("请输入文件路径");return}if(s.value){Y.value=!0;try{const l=await _("project.createFile",{projectId:s.value.id,filePath:g.value.path.trim(),content:g.value.content||""},`project create-file ${s.value.id} "${g.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件 '${l.file_name}'`),E.value=!1,await V(),await $()):u.error("创建文件失败")}catch(l){u.error(l.message||String(l))}finally{Y.value=!1}}}async function je(){if(!I.value.path.trim()){u.warning("请输入文件夹路径");return}if(s.value){Z.value=!0;try{const l=await _("project.createFolder",{projectId:s.value.id,folderPath:I.value.path.trim()},`project create-folder ${s.value.id} "${I.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件夹 '${l.file_name}'`),M.value=!1,await V(),await $()):u.error("创建文件夹失败")}catch(l){u.error(l.message||String(l))}finally{Z.value=!1}}}async function xe(l){try{(await _("project.deleteFile",{fileId:l.id},`project delete-file ${l.id} --json`,8e3))?.deleted?(u.success(`已删除 '${l.file_name}'`),await V(),await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}async function Ce(l){if(l.is_folder){u.info("文件夹无内容可编辑");return}try{const e=await _("project.getFile",{fileId:l.id},`project get-file ${l.id} --json`,8e3);D.value=l,q.value=e?.content||"",T.value=!0}catch(e){u.error("读取文件失败: "+(e.message||e))}}async function Fe(){if(D.value){ee.value=!0;try{(await _("project.writeFile",{fileId:D.value.id,content:q.value},`project write-file ${D.value.id} --json`,8e3))?.id?(u.success("已保存"),T.value=!1,await V()):u.error("保存失败")}catch(l){u.error(l.message||String(l))}finally{ee.value=!1}}}return Ee(()=>{$()}),(l,e)=>{const te=r("router-link"),m=r("a-button"),b=r("a-space"),j=r("a-statistic"),W=r("a-card"),J=r("a-col"),$e=r("a-row"),R=r("a-radio-button"),ze=r("a-radio-group"),Se=r("a-input-search"),Oe=r("a-alert"),U=r("a-tag"),ue=r("a-popconfirm"),Pe=r("a-table"),v=r("a-descriptions-item"),Ie=r("a-descriptions"),Ue=r("a-divider"),Ae=r("a-empty"),De=r("a-list-item"),Re=r("a-list"),Le=r("a-spin"),Ne=r("a-drawer"),K=r("a-input"),z=r("a-form-item"),ae=r("a-textarea"),le=r("a-form"),Q=r("a-modal"),y=r("a-select-option"),he=r("a-select");return c(),x("div",null,[C("div",et,[C("div",null,[C("h2",tt,i(k(ce)("projects.title")),1),C("p",at,[e[17]||(e[17]=n("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(te,{to:"/project-init"},{default:a(()=>[...e[16]||(e[16]=[n("项目初始化 / 环境设置",-1)])]),_:1}),e[18]||(e[18]=n(")",-1))])]),t(b,null,{default:a(()=>[t(m,{loading:S.value,onClick:$},{icon:a(()=>[t(k(Je))]),default:a(()=>[e[19]||(e[19]=n(" 刷新 ",-1))]),_:1},8,["loading"]),t(m,{type:"primary",onClick:ye},{icon:a(()=>[t(k(Ke))]),default:a(()=>[e[20]||(e[20]=n(" 新建项目 ",-1))]),_:1})]),_:1})]),t($e,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"总项目",value:F.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(k(Qe))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"活跃",value:H.value.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(k(Ge))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"草稿",value:H.value.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(k(He))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"已完成",value:H.value.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(k(Xe))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),C("div",lt,[t(ze,{value:L.value,"onUpdate:value":e[0]||(e[0]=o=>L.value=o),size:"small","button-style":"solid"},{default:a(()=>[t(R,{value:""},{default:a(()=>[...e[21]||(e[21]=[n("全部",-1)])]),_:1}),t(R,{value:"active"},{default:a(()=>[...e[22]||(e[22]=[n("活跃",-1)])]),_:1}),t(R,{value:"draft"},{default:a(()=>[...e[23]||(e[23]=[n("草稿",-1)])]),_:1}),t(R,{value:"completed"},{default:a(()=>[...e[24]||(e[24]=[n("已完成",-1)])]),_:1}),t(R,{value:"archived"},{default:a(()=>[...e[25]||(e[25]=[n("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(Se,{value:N.value,"onUpdate:value":e[1]||(e[1]=o=>N.value=o),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!F.value.length&&!S.value?(c(),w(Oe,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):A("",!0),F.value.length||S.value?(c(),w(Pe,{key:1,columns:pe,"data-source":ve.value,loading:S.value,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":_e},{bodyCell:a(({column:o,record:p})=>[o.key==="id"?(c(),x("code",ot,i(p.id.slice(0,8))+"…",1)):o.key==="name"?(c(),x(de,{key:1},[C("strong",null,i(p.name),1),p.description?(c(),x("div",nt,i(p.description),1)):A("",!0)],64)):o.key==="project_type"?(c(),w(U,{key:2},{default:a(()=>[n(i(p.project_type),1)]),_:2},1024)):o.key==="status"?(c(),w(U,{key:3,color:ne(p.status)},{default:a(()=>[n(i(p.status),1)]),_:2},1032,["color"])):o.key==="sync_status"?(c(),w(U,{key:4,color:re(p.sync_status)},{default:a(()=>[n(i(p.sync_status||"unknown"),1)]),_:2},1032,["color"])):o.key==="updated_at"?(c(),x(de,{key:5},[n(i(X(p.updated_at)),1)],64)):o.key==="actions"?(c(),w(b,{key:6,onClick:e[2]||(e[2]=Me(()=>{},["stop"]))},{default:a(()=>[t(m,{size:"small",onClick:Be=>se(p)},{default:a(()=>[...e[26]||(e[26]=[n("详情",-1)])]),_:1},8,["onClick"]),t(ue,{title:`删除项目 '${p.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:Be=>me(p)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[27]||(e[27]=[n("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):A("",!0)]),_:1},8,["data-source","loading"])):A("",!0),t(Ne,{open:h.value,"onUpdate:open":e[3]||(e[3]=o=>h.value=o),title:s.value?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[s.value?(c(),w(Ie,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(v,{label:"ID"},{default:a(()=>[C("code",null,i(s.value.id),1)]),_:1}),t(v,{label:"名称"},{default:a(()=>[n(i(s.value.name),1)]),_:1}),t(v,{label:"描述"},{default:a(()=>[n(i(s.value.description||"-"),1)]),_:1}),t(v,{label:"类型"},{default:a(()=>[t(U,null,{default:a(()=>[n(i(s.value.project_type),1)]),_:1})]),_:1}),t(v,{label:"状态"},{default:a(()=>[t(U,{color:ne(s.value.status)},{default:a(()=>[n(i(s.value.status),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"同步状态"},{default:a(()=>[t(U,{color:re(s.value.sync_status)},{default:a(()=>[n(i(s.value.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"用户"},{default:a(()=>[n(i(s.value.user_id),1)]),_:1}),t(v,{label:"根路径"},{default:a(()=>[s.value.root_path?(c(),x("code",rt,i(s.value.root_path),1)):(c(),x("span",st,"(无)"))]),_:1}),t(v,{label:"文件数"},{default:a(()=>[n(i(s.value.file_count||0),1)]),_:1}),t(v,{label:"创建"},{default:a(()=>[n(i(X(s.value.created_at)),1)]),_:1}),t(v,{label:"更新"},{default:a(()=>[n(i(X(s.value.updated_at)),1)]),_:1})]),_:1})):A("",!0),t(Ue,null,{default:a(()=>[...e[28]||(e[28]=[n("文件",-1)])]),_:1}),t(b,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(m,{size:"small",type:"primary",disabled:!s.value,onClick:ke},{default:a(()=>[t(k(Ye)),e[29]||(e[29]=n(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(m,{size:"small",disabled:!s.value,onClick:we},{default:a(()=>[t(k(Ze)),e[30]||(e[30]=n(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(Le,{spinning:P.value},{default:a(()=>[!O.value.length&&!P.value?(c(),w(Ae,{key:0,description:"无文件 (点上方按钮新建)"})):(c(),w(Re,{key:1,size:"small","data-source":O.value},{renderItem:a(({item:o})=>[t(De,null,{extra:a(()=>[t(b,null,{default:a(()=>[o.file_size?(c(),x("span",it,i(o.file_size)+" B",1)):A("",!0),t(ue,{title:`删除 ${o.is_folder?"文件夹":"文件"} '${o.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:p=>xe(o)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[31]||(e[31]=[n("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[C("span",{style:{cursor:"pointer"},onClick:p=>Ce(o)},i(o.is_folder?"📁":"📄")+" "+i(o.file_path),9,ut)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),t(Q,{open:E.value,"onUpdate:open":e[6]||(e[6]=o=>E.value=o),title:"新建文件","confirm-loading":Y.value,"ok-text":"创建","cancel-text":"取消",onOk:be},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(K,{value:g.value.path,"onUpdate:value":e[4]||(e[4]=o=>g.value.path=o),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(z,{label:"初始内容(可选)"},{default:a(()=>[t(ae,{value:g.value.content,"onUpdate:value":e[5]||(e[5]=o=>g.value.content=o),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(Q,{open:M.value,"onUpdate:open":e[8]||(e[8]=o=>M.value=o),title:"新建文件夹","confirm-loading":Z.value,"ok-text":"创建","cancel-text":"取消",onOk:je},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(K,{value:I.value.path,"onUpdate:value":e[7]||(e[7]=o=>I.value.path=o),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(Q,{open:T.value,"onUpdate:open":e[10]||(e[10]=o=>T.value=o),title:`编辑 ${D.value?.file_name||""}`,"confirm-loading":ee.value,"ok-text":"保存","cancel-text":"取消",onOk:Fe,width:"720"},{default:a(()=>[t(ae,{value:q.value,"onUpdate:value":e[9]||(e[9]=o=>q.value=o),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),t(Q,{open:B.value,"onUpdate:open":e[15]||(e[15]=o=>B.value=o),title:"新建项目","confirm-loading":G.value,"ok-text":"创建","cancel-text":"取消",onOk:ge},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"项目名称",required:""},{default:a(()=>[t(K,{value:f.value.name,"onUpdate:value":e[11]||(e[11]=o=>f.value.name=o),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(z,{label:"描述"},{default:a(()=>[t(ae,{value:f.value.description,"onUpdate:value":e[12]||(e[12]=o=>f.value.description=o),rows:2},null,8,["value"])]),_:1}),t(z,{label:"类型"},{default:a(()=>[t(he,{value:f.value.type,"onUpdate:value":e[13]||(e[13]=o=>f.value.type=o)},{default:a(()=>[t(y,{value:"document"},{default:a(()=>[...e[32]||(e[32]=[n("文档 (document)",-1)])]),_:1}),t(y,{value:"data"},{default:a(()=>[...e[33]||(e[33]=[n("数据 (data)",-1)])]),_:1}),t(y,{value:"web"},{default:a(()=>[...e[34]||(e[34]=[n("Web",-1)])]),_:1}),t(y,{value:"app"},{default:a(()=>[...e[35]||(e[35]=[n("应用 (app)",-1)])]),_:1}),t(y,{value:"presentation"},{default:a(()=>[...e[36]||(e[36]=[n("演示文稿",-1)])]),_:1}),t(y,{value:"spreadsheet"},{default:a(()=>[...e[37]||(e[37]=[n("表格",-1)])]),_:1}),t(y,{value:"design"},{default:a(()=>[...e[38]||(e[38]=[n("设计",-1)])]),_:1}),t(y,{value:"code"},{default:a(()=>[...e[39]||(e[39]=[n("代码",-1)])]),_:1}),t(y,{value:"workflow"},{default:a(()=>[...e[40]||(e[40]=[n("工作流",-1)])]),_:1}),t(y,{value:"knowledge"},{default:a(()=>[...e[41]||(e[41]=[n("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(z,{label:"根路径 (可选)"},{default:a(()=>[t(K,{value:f.value.rootPath,"onUpdate:value":e[14]||(e[14]=o=>f.value.rootPath=o),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},mt=Te(dt,[["__scopeId","data-v-e27c9ce1"]]);export{mt as default};
|
|
1
|
+
import{o as Ee,M as x,R as C,P as i,u as k,O as n,c as t,N as a,Q as w,S as A,K as r,r as d,f as ie,L as c,F as de,a1 as Me}from"./vendor-DhFY8mDK.js";import{_ as Te,b as qe,u as Ve,d as u}from"./index-Bdaro36b.js";import{u as We}from"./useShellMode-CgR0wCYM.js";import{R as Je,as as Ke,F as Qe,f as Ge,l as He,aM as Xe,aN as Ye,aO as Ze}from"./icons-AILO5ZcK.js";const et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},at={class:"page-sub"},lt={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},ot={key:0,style:{"font-size":"12px",color:"#888"}},nt={key:0,style:{color:"#888","font-size":"12px"}},rt={key:0},st={key:1,style:{color:"#888"}},ut=["onClick"],it={key:0,style:{color:"#888","font-size":"12px"}},dt={__name:"Projects",setup(ct){const{t:ce}=qe(),oe=Ve(),{isEmbedded:fe}=We();async function _(l,e,te,m=8e3){if(fe){const b=await oe.sendRaw({...e,type:l},m);if(!b?.ok){const j=b?.error;throw new Error(typeof j=="string"?j:j?.message||`${l} failed`)}return b.result}return oe.executeJson(te,m)}const S=d(!1),F=d([]),L=d(""),N=d(""),h=d(!1),s=d(null),O=d([]),P=d(!1),B=d(!1),G=d(!1),f=d({name:"",description:"",type:"document",rootPath:""}),pe=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],H=ie(()=>{const l={active:0,draft:0,completed:0,archived:0};for(const e of F.value)l[e.status]!==void 0&&(l[e.status]+=1);return l}),ve=ie(()=>F.value.filter(l=>!(L.value&&l.status!==L.value||N.value&&!l.name.toLowerCase().includes(N.value.toLowerCase()))));function ne(l){switch(l){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function re(l){switch(l){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function X(l){return!l&&l!==0?"-":new Date(typeof l=="number"?l:parseInt(l,10)).toLocaleString("zh-CN",{hour12:!1})}async function $(){S.value=!0;try{const l=await _("project.list",{limit:500},"project list --limit 500 --json",1e4);F.value=Array.isArray(l?.projects)?l.projects:Array.isArray(l)?l:[]}catch(l){u.error("加载失败: "+(l.message||l)),F.value=[]}finally{S.value=!1}}function _e(l){return{onClick:()=>se(l)}}async function se(l){s.value=l,h.value=!0,P.value=!0,O.value=[];try{const e=await _("project.listFiles",{projectId:l.id,limit:200},`project list-files ${l.id} --json`,8e3);O.value=Array.isArray(e?.files)?e.files:[]}catch{O.value=[]}finally{P.value=!1}}async function me(l){try{(await _("project.delete",{id:l.id},`project delete ${l.id} --json`,8e3))?.ok?(u.success(`已删除项目 '${l.name}'`),h.value=!1,await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}function ye(){f.value={name:"",description:"",type:"document",rootPath:""},B.value=!0}async function ge(){if(!f.value.name.trim()){u.warning("请输入项目名称");return}G.value=!0;try{const l=await _("project.init",{name:f.value.name.trim(),description:f.value.description||null,projectType:f.value.type,rootPath:f.value.rootPath||null},`project init "${f.value.name.trim()}" --type ${f.value.type} --json`,8e3);l?.id?(u.success(`已创建项目 '${l.name}'`),B.value=!1,await $()):u.error("创建失败")}catch(l){u.error(l.message||String(l))}finally{G.value=!1}}const E=d(!1),Y=d(!1),g=d({path:"",content:""}),M=d(!1),Z=d(!1),I=d({path:""}),T=d(!1),D=d(null),q=d(""),ee=d(!1);function ke(){g.value={path:"",content:""},E.value=!0}function we(){I.value={path:""},M.value=!0}async function V(){if(s.value){P.value=!0;try{const l=await _("project.listFiles",{projectId:s.value.id,limit:200},`project list-files ${s.value.id} --json`,8e3);O.value=Array.isArray(l?.files)?l.files:[]}catch(l){u.error("刷新文件失败: "+(l.message||l))}finally{P.value=!1}}}async function be(){if(!g.value.path.trim()){u.warning("请输入文件路径");return}if(s.value){Y.value=!0;try{const l=await _("project.createFile",{projectId:s.value.id,filePath:g.value.path.trim(),content:g.value.content||""},`project create-file ${s.value.id} "${g.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件 '${l.file_name}'`),E.value=!1,await V(),await $()):u.error("创建文件失败")}catch(l){u.error(l.message||String(l))}finally{Y.value=!1}}}async function je(){if(!I.value.path.trim()){u.warning("请输入文件夹路径");return}if(s.value){Z.value=!0;try{const l=await _("project.createFolder",{projectId:s.value.id,folderPath:I.value.path.trim()},`project create-folder ${s.value.id} "${I.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件夹 '${l.file_name}'`),M.value=!1,await V(),await $()):u.error("创建文件夹失败")}catch(l){u.error(l.message||String(l))}finally{Z.value=!1}}}async function xe(l){try{(await _("project.deleteFile",{fileId:l.id},`project delete-file ${l.id} --json`,8e3))?.deleted?(u.success(`已删除 '${l.file_name}'`),await V(),await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}async function Ce(l){if(l.is_folder){u.info("文件夹无内容可编辑");return}try{const e=await _("project.getFile",{fileId:l.id},`project get-file ${l.id} --json`,8e3);D.value=l,q.value=e?.content||"",T.value=!0}catch(e){u.error("读取文件失败: "+(e.message||e))}}async function Fe(){if(D.value){ee.value=!0;try{(await _("project.writeFile",{fileId:D.value.id,content:q.value},`project write-file ${D.value.id} --json`,8e3))?.id?(u.success("已保存"),T.value=!1,await V()):u.error("保存失败")}catch(l){u.error(l.message||String(l))}finally{ee.value=!1}}}return Ee(()=>{$()}),(l,e)=>{const te=r("router-link"),m=r("a-button"),b=r("a-space"),j=r("a-statistic"),W=r("a-card"),J=r("a-col"),$e=r("a-row"),R=r("a-radio-button"),ze=r("a-radio-group"),Se=r("a-input-search"),Oe=r("a-alert"),U=r("a-tag"),ue=r("a-popconfirm"),Pe=r("a-table"),v=r("a-descriptions-item"),Ie=r("a-descriptions"),Ue=r("a-divider"),Ae=r("a-empty"),De=r("a-list-item"),Re=r("a-list"),Le=r("a-spin"),Ne=r("a-drawer"),K=r("a-input"),z=r("a-form-item"),ae=r("a-textarea"),le=r("a-form"),Q=r("a-modal"),y=r("a-select-option"),he=r("a-select");return c(),x("div",null,[C("div",et,[C("div",null,[C("h2",tt,i(k(ce)("projects.title")),1),C("p",at,[e[17]||(e[17]=n("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(te,{to:"/project-init"},{default:a(()=>[...e[16]||(e[16]=[n("项目初始化 / 环境设置",-1)])]),_:1}),e[18]||(e[18]=n(")",-1))])]),t(b,null,{default:a(()=>[t(m,{loading:S.value,onClick:$},{icon:a(()=>[t(k(Je))]),default:a(()=>[e[19]||(e[19]=n(" 刷新 ",-1))]),_:1},8,["loading"]),t(m,{type:"primary",onClick:ye},{icon:a(()=>[t(k(Ke))]),default:a(()=>[e[20]||(e[20]=n(" 新建项目 ",-1))]),_:1})]),_:1})]),t($e,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"总项目",value:F.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(k(Qe))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"活跃",value:H.value.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(k(Ge))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"草稿",value:H.value.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(k(He))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"已完成",value:H.value.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(k(Xe))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),C("div",lt,[t(ze,{value:L.value,"onUpdate:value":e[0]||(e[0]=o=>L.value=o),size:"small","button-style":"solid"},{default:a(()=>[t(R,{value:""},{default:a(()=>[...e[21]||(e[21]=[n("全部",-1)])]),_:1}),t(R,{value:"active"},{default:a(()=>[...e[22]||(e[22]=[n("活跃",-1)])]),_:1}),t(R,{value:"draft"},{default:a(()=>[...e[23]||(e[23]=[n("草稿",-1)])]),_:1}),t(R,{value:"completed"},{default:a(()=>[...e[24]||(e[24]=[n("已完成",-1)])]),_:1}),t(R,{value:"archived"},{default:a(()=>[...e[25]||(e[25]=[n("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(Se,{value:N.value,"onUpdate:value":e[1]||(e[1]=o=>N.value=o),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!F.value.length&&!S.value?(c(),w(Oe,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):A("",!0),F.value.length||S.value?(c(),w(Pe,{key:1,columns:pe,"data-source":ve.value,loading:S.value,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":_e},{bodyCell:a(({column:o,record:p})=>[o.key==="id"?(c(),x("code",ot,i(p.id.slice(0,8))+"…",1)):o.key==="name"?(c(),x(de,{key:1},[C("strong",null,i(p.name),1),p.description?(c(),x("div",nt,i(p.description),1)):A("",!0)],64)):o.key==="project_type"?(c(),w(U,{key:2},{default:a(()=>[n(i(p.project_type),1)]),_:2},1024)):o.key==="status"?(c(),w(U,{key:3,color:ne(p.status)},{default:a(()=>[n(i(p.status),1)]),_:2},1032,["color"])):o.key==="sync_status"?(c(),w(U,{key:4,color:re(p.sync_status)},{default:a(()=>[n(i(p.sync_status||"unknown"),1)]),_:2},1032,["color"])):o.key==="updated_at"?(c(),x(de,{key:5},[n(i(X(p.updated_at)),1)],64)):o.key==="actions"?(c(),w(b,{key:6,onClick:e[2]||(e[2]=Me(()=>{},["stop"]))},{default:a(()=>[t(m,{size:"small",onClick:Be=>se(p)},{default:a(()=>[...e[26]||(e[26]=[n("详情",-1)])]),_:1},8,["onClick"]),t(ue,{title:`删除项目 '${p.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:Be=>me(p)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[27]||(e[27]=[n("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):A("",!0)]),_:1},8,["data-source","loading"])):A("",!0),t(Ne,{open:h.value,"onUpdate:open":e[3]||(e[3]=o=>h.value=o),title:s.value?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[s.value?(c(),w(Ie,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(v,{label:"ID"},{default:a(()=>[C("code",null,i(s.value.id),1)]),_:1}),t(v,{label:"名称"},{default:a(()=>[n(i(s.value.name),1)]),_:1}),t(v,{label:"描述"},{default:a(()=>[n(i(s.value.description||"-"),1)]),_:1}),t(v,{label:"类型"},{default:a(()=>[t(U,null,{default:a(()=>[n(i(s.value.project_type),1)]),_:1})]),_:1}),t(v,{label:"状态"},{default:a(()=>[t(U,{color:ne(s.value.status)},{default:a(()=>[n(i(s.value.status),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"同步状态"},{default:a(()=>[t(U,{color:re(s.value.sync_status)},{default:a(()=>[n(i(s.value.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"用户"},{default:a(()=>[n(i(s.value.user_id),1)]),_:1}),t(v,{label:"根路径"},{default:a(()=>[s.value.root_path?(c(),x("code",rt,i(s.value.root_path),1)):(c(),x("span",st,"(无)"))]),_:1}),t(v,{label:"文件数"},{default:a(()=>[n(i(s.value.file_count||0),1)]),_:1}),t(v,{label:"创建"},{default:a(()=>[n(i(X(s.value.created_at)),1)]),_:1}),t(v,{label:"更新"},{default:a(()=>[n(i(X(s.value.updated_at)),1)]),_:1})]),_:1})):A("",!0),t(Ue,null,{default:a(()=>[...e[28]||(e[28]=[n("文件",-1)])]),_:1}),t(b,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(m,{size:"small",type:"primary",disabled:!s.value,onClick:ke},{default:a(()=>[t(k(Ye)),e[29]||(e[29]=n(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(m,{size:"small",disabled:!s.value,onClick:we},{default:a(()=>[t(k(Ze)),e[30]||(e[30]=n(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(Le,{spinning:P.value},{default:a(()=>[!O.value.length&&!P.value?(c(),w(Ae,{key:0,description:"无文件 (点上方按钮新建)"})):(c(),w(Re,{key:1,size:"small","data-source":O.value},{renderItem:a(({item:o})=>[t(De,null,{extra:a(()=>[t(b,null,{default:a(()=>[o.file_size?(c(),x("span",it,i(o.file_size)+" B",1)):A("",!0),t(ue,{title:`删除 ${o.is_folder?"文件夹":"文件"} '${o.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:p=>xe(o)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[31]||(e[31]=[n("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[C("span",{style:{cursor:"pointer"},onClick:p=>Ce(o)},i(o.is_folder?"📁":"📄")+" "+i(o.file_path),9,ut)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),t(Q,{open:E.value,"onUpdate:open":e[6]||(e[6]=o=>E.value=o),title:"新建文件","confirm-loading":Y.value,"ok-text":"创建","cancel-text":"取消",onOk:be},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(K,{value:g.value.path,"onUpdate:value":e[4]||(e[4]=o=>g.value.path=o),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(z,{label:"初始内容(可选)"},{default:a(()=>[t(ae,{value:g.value.content,"onUpdate:value":e[5]||(e[5]=o=>g.value.content=o),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(Q,{open:M.value,"onUpdate:open":e[8]||(e[8]=o=>M.value=o),title:"新建文件夹","confirm-loading":Z.value,"ok-text":"创建","cancel-text":"取消",onOk:je},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(K,{value:I.value.path,"onUpdate:value":e[7]||(e[7]=o=>I.value.path=o),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(Q,{open:T.value,"onUpdate:open":e[10]||(e[10]=o=>T.value=o),title:`编辑 ${D.value?.file_name||""}`,"confirm-loading":ee.value,"ok-text":"保存","cancel-text":"取消",onOk:Fe,width:"720"},{default:a(()=>[t(ae,{value:q.value,"onUpdate:value":e[9]||(e[9]=o=>q.value=o),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),t(Q,{open:B.value,"onUpdate:open":e[15]||(e[15]=o=>B.value=o),title:"新建项目","confirm-loading":G.value,"ok-text":"创建","cancel-text":"取消",onOk:ge},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"项目名称",required:""},{default:a(()=>[t(K,{value:f.value.name,"onUpdate:value":e[11]||(e[11]=o=>f.value.name=o),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(z,{label:"描述"},{default:a(()=>[t(ae,{value:f.value.description,"onUpdate:value":e[12]||(e[12]=o=>f.value.description=o),rows:2},null,8,["value"])]),_:1}),t(z,{label:"类型"},{default:a(()=>[t(he,{value:f.value.type,"onUpdate:value":e[13]||(e[13]=o=>f.value.type=o)},{default:a(()=>[t(y,{value:"document"},{default:a(()=>[...e[32]||(e[32]=[n("文档 (document)",-1)])]),_:1}),t(y,{value:"data"},{default:a(()=>[...e[33]||(e[33]=[n("数据 (data)",-1)])]),_:1}),t(y,{value:"web"},{default:a(()=>[...e[34]||(e[34]=[n("Web",-1)])]),_:1}),t(y,{value:"app"},{default:a(()=>[...e[35]||(e[35]=[n("应用 (app)",-1)])]),_:1}),t(y,{value:"presentation"},{default:a(()=>[...e[36]||(e[36]=[n("演示文稿",-1)])]),_:1}),t(y,{value:"spreadsheet"},{default:a(()=>[...e[37]||(e[37]=[n("表格",-1)])]),_:1}),t(y,{value:"design"},{default:a(()=>[...e[38]||(e[38]=[n("设计",-1)])]),_:1}),t(y,{value:"code"},{default:a(()=>[...e[39]||(e[39]=[n("代码",-1)])]),_:1}),t(y,{value:"workflow"},{default:a(()=>[...e[40]||(e[40]=[n("工作流",-1)])]),_:1}),t(y,{value:"knowledge"},{default:a(()=>[...e[41]||(e[41]=[n("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(z,{label:"根路径 (可选)"},{default:a(()=>[t(K,{value:f.value.rootPath,"onUpdate:value":e[14]||(e[14]=o=>f.value.rootPath=o),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},mt=Te(dt,[["__scopeId","data-v-e27c9ce1"]]);export{mt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{E as Z,r as w,o as J,M as C,R as r,c as a,N as l,u as f,Q as k,S as z,F as X,Y as ee,K as u,a as te,L as m,O as y,P,Z as oe}from"./vendor-DhFY8mDK.js";import{u as M,_ as ae,d as b}from"./index-JP5LGd1K.js";import{a as se,b as le,c as re}from"./parsers-UEvh_ShA.js";import{R as B}from"./icons-AILO5ZcK.js";const ne=Z("providers",()=>{const T=w(!1),i=w(null),p=w([]),h=w([]),c=w(null);async function K(){const v=M();T.value=!0;try{const{output:x}=await v.execute("llm providers",15e3);p.value=se(x);const g=p.value.find(U=>U.active);g&&(c.value=g.name);const{output:_}=await v.execute("llm models",15e3);h.value=le(_)}catch(x){console.error("Failed to load providers:",x)}finally{T.value=!1}}async function t(v){await M().execute(`llm switch ${v}`,1e4),p.value.forEach(g=>g.active=g.name===v),c.value=v}async function d(v){const x=M();i.value=v;try{const{output:g,exitCode:_}=await x.execute("llm test",3e4),U=p.value.find(L=>L.name===v);return U&&(U.status=_===0?"ok":"error"),_===0}catch{const g=p.value.find(_=>_.name===v);return g&&(g.status="error"),!1}finally{i.value=null}}return{loading:T,testing:i,providers:p,localModels:h,activeProvider:c,loadProviders:K,switchProvider:t,testProvider:d}}),ie={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},de={key:1,style:{"text-align":"center",padding:"60px"}},ue={key:2},ce={class:"providers-grid"},pe={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},me={style:{"font-size":"24px"}},ve={style:{flex:"1"}},fe={style:{color:"#e0e0e0","font-weight":"500"}},ge={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},ye={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},be={key:0,style:{"margin-top":"24px"}},xe={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},_e={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},ke={class:"config-grid"},we={style:{display:"flex","align-items":"center",gap:"12px"}},he={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}},Ue={__name:"Providers",setup(T){const i=ne(),p=M(),h=w(!1),c=w(!1),K=w(!1),t=te({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let d={};const v=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],x={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},g=v.map(s=>({value:s,label:x[s]||s}));async function _(s){try{await i.switchProvider(s),b.success(`已切换到 ${s}`)}catch(e){b.error(`切换失败: ${e.message}`)}}async function U(s){await i.testProvider(s)?b.success(`${s} 连接正常`):b.warning(`${s} 连接失败,请检查配置`)}async function L(){h.value=!0;try{const{output:s}=await p.execute("config list",15e3),e=re(s);e.provider&&(t.provider=e.provider),e.model&&(t.model=e.model),e.apiKey&&(t.apiKey=e.apiKey),e.baseUrl&&(t.baseUrl=e.baseUrl),e.temperature!==void 0&&(t.temperature=e.temperature),e.maxTokens!==void 0&&(t.maxTokens=e.maxTokens),d={provider:e.provider??"",model:e.model??"",apiKey:e.apiKey??"",baseUrl:e.baseUrl??"",temperature:e.temperature??t.temperature,maxTokens:e.maxTokens??t.maxTokens},b.success("配置已加载")}catch(s){b.error(`加载配置失败: ${s.message}`)}finally{h.value=!1}}async function F(){c.value=!0;const s=[],e=[];try{if(t.provider&&t.provider!==d.provider)try{await p.execute(`config set llm.provider ${t.provider}`,1e4),e.push("provider")}catch(n){s.push(`provider: ${n.message}`)}if(t.model&&t.model!==d.model)try{await p.execute(`config set llm.model ${t.model}`,1e4),e.push("model")}catch(n){s.push(`model: ${n.message}`)}if(t.apiKey&&t.apiKey!==d.apiKey)try{await p.execute(`config set llm.apiKey ${t.apiKey}`,1e4),e.push("apiKey")}catch(n){s.push(`apiKey: ${n.message}`)}if(t.baseUrl!==void 0&&t.baseUrl!==d.baseUrl)try{await p.execute(`config set llm.baseUrl ${t.baseUrl}`,1e4),e.push("baseUrl")}catch(n){s.push(`baseUrl: ${n.message}`)}if(t.temperature!==d.temperature)try{await p.execute(`config set llm.temperature ${t.temperature}`,1e4),e.push("temperature")}catch(n){s.push(`temperature: ${n.message}`)}if(t.maxTokens!==d.maxTokens)try{await p.execute(`config set llm.maxTokens ${t.maxTokens}`,1e4),e.push("maxTokens")}catch(n){s.push(`maxTokens: ${n.message}`)}s.length>0?b.warning(`部分配置保存失败: ${s.join("; ")}`):e.length>0?(b.success(`已保存 ${e.length} 项配置`),d={...t},(e.includes("apiKey")||e.includes("provider")||e.includes("baseUrl")||e.includes("model"))&&(K.value=!0),e.includes("provider")&&i.loadProviders()):b.info("没有检测到配置变更")}catch(n){b.error(`保存配置失败: ${n.message}`)}finally{c.value=!1}}function N(){t.provider=d.provider||void 0,t.model=d.model||"",t.apiKey=d.apiKey||"",t.baseUrl=d.baseUrl||"",t.temperature=d.temperature??.7,t.maxTokens=d.maxTokens??4096}return J(()=>{i.loadProviders(),L()}),(s,e)=>{const n=u("a-button"),S=u("a-alert"),V=u("a-spin"),O=u("a-tag"),I=u("a-badge"),R=u("a-card"),q=u("a-list-item"),E=u("a-list"),G=u("a-divider"),D=u("a-select"),$=u("a-form-item"),j=u("a-input"),H=u("a-input-password"),Q=u("a-slider"),A=u("a-input-number"),W=u("a-form");return m(),C("div",null,[r("div",ie,[e[10]||(e[10]=r("div",null,[r("h2",{class:"page-title"},"LLM 配置"),r("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),a(n,{type:"primary",ghost:"",loading:f(i).loading,onClick:e[0]||(e[0]=o=>f(i).loadProviders())},{icon:l(()=>[a(f(B))]),default:l(()=>[e[9]||(e[9]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),f(i).activeProvider?(m(),k(S,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[r("span",null,[e[11]||(e[11]=y("当前激活:",-1)),r("strong",null,P(f(i).activeProvider),1)])]),_:1})):z("",!0),f(i).loading?(m(),C("div",de,[a(V,{size:"large"}),e[12]||(e[12]=r("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(m(),C("div",ue,[r("div",ce,[(m(!0),C(X,null,ee(f(i).providers,o=>(m(),k(R,{key:o.name,class:oe(["provider-card",{active:o.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[r("div",pe,[r("span",me,P(o.icon),1),r("div",ve,[r("div",fe,P(o.label),1),r("div",ge,P(o.name),1)]),r("div",null,[o.active?(m(),k(O,{key:0,color:"green"},{default:l(()=>[...e[13]||(e[13]=[y("活跃",-1)])]),_:1})):o.status==="ok"?(m(),k(I,{key:1,status:"success",text:""})):o.status==="error"?(m(),k(I,{key:2,status:"error",text:""})):z("",!0)])]),r("div",ye,[a(n,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:f(i).testing===o.name,onClick:Y=>U(o.name)},{default:l(()=>[...e[14]||(e[14]=[y(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),o.active?(m(),k(O,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...e[16]||(e[16]=[y("当前",-1)])]),_:1})):(m(),k(n,{key:0,size:"small",type:"primary",ghost:"",onClick:Y=>_(o.name)},{default:l(()=>[...e[15]||(e[15]=[y(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),f(i).localModels.length?(m(),C("div",be,[e[17]||(e[17]=r("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),a(E,{"data-source":f(i).localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:o})=>[a(q,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[a(O,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[y(P(o.size||"local"),1)]),_:2},1024)]),default:l(()=>[r("span",xe,P(o.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):z("",!0),a(G,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),K.value?(m(),k(S,{key:1,type:"warning","show-icon":"",closable:"",style:{"margin-bottom":"16px"},message:"配置已保存,但当前聊天会话仍在用旧 key",description:"桌面端的 LLM 会话只在新建会话时重读配置。请新建一个 Chat,或重启应用,新 key/Provider 才会生效。",onClose:e[1]||(e[1]=o=>K.value=!1)})):z("",!0),r("div",_e,[e[19]||(e[19]=r("h3",{class:"section-title"},"LLM 参数设置",-1)),a(n,{size:"small",loading:h.value,onClick:L,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[a(f(B))]),default:l(()=>[e[18]||(e[18]=y(" 加载配置 ",-1))]),_:1},8,["loading"])]),a(R,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[a(W,{model:t,layout:"vertical",class:"config-form"},{default:l(()=>[r("div",ke,[a($,{label:"Provider(提供商)"},{default:l(()=>[a(D,{value:t.provider,"onUpdate:value":e[2]||(e[2]=o=>t.provider=o),placeholder:"选择 LLM 提供商",options:f(g),style:{width:"100%"},disabled:c.value},null,8,["value","options","disabled"])]),_:1}),a($,{label:"Model(模型名称)"},{default:l(()=>[a(j,{value:t.model,"onUpdate:value":e[3]||(e[3]=o=>t.model=o),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),a($,{label:"API Key"},{default:l(()=>[a(H,{value:t.apiKey,"onUpdate:value":e[4]||(e[4]=o=>t.apiKey=o),placeholder:"输入 API Key",disabled:c.value},null,8,["value","disabled"])]),_:1}),a($,{label:"Base URL"},{default:l(()=>[a(j,{value:t.baseUrl,"onUpdate:value":e[5]||(e[5]=o=>t.baseUrl=o),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),a($,{label:"Temperature(温度)"},{default:l(()=>[r("div",we,[a(Q,{value:t.temperature,"onUpdate:value":e[6]||(e[6]=o=>t.temperature=o),min:0,max:2,step:.1,style:{flex:"1"},disabled:c.value},null,8,["value","disabled"]),a(A,{value:t.temperature,"onUpdate:value":e[7]||(e[7]=o=>t.temperature=o),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:c.value},null,8,["value","disabled"])])]),_:1}),a($,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[a(A,{value:t.maxTokens,"onUpdate:value":e[8]||(e[8]=o=>t.maxTokens=o),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:c.value},null,8,["value","disabled"])]),_:1})]),r("div",he,[a(n,{onClick:N,disabled:c.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...e[20]||(e[20]=[y(" 重置 ",-1)])]),_:1},8,["disabled"]),a(n,{type:"primary",loading:c.value,onClick:F},{default:l(()=>[...e[21]||(e[21]=[y(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})]))])}}},Te=ae(Ue,[["__scopeId","data-v-d7d22233"]]);export{Te as default};
|
|
1
|
+
import{E as Z,r as w,o as J,M as C,R as r,c as a,N as l,u as f,Q as k,S as z,F as X,Y as ee,K as u,a as te,L as m,O as y,P,Z as oe}from"./vendor-DhFY8mDK.js";import{u as M,_ as ae,d as b}from"./index-Bdaro36b.js";import{a as se,b as le,c as re}from"./parsers-UEvh_ShA.js";import{R as B}from"./icons-AILO5ZcK.js";const ne=Z("providers",()=>{const T=w(!1),i=w(null),p=w([]),h=w([]),c=w(null);async function K(){const v=M();T.value=!0;try{const{output:x}=await v.execute("llm providers",15e3);p.value=se(x);const g=p.value.find(U=>U.active);g&&(c.value=g.name);const{output:_}=await v.execute("llm models",15e3);h.value=le(_)}catch(x){console.error("Failed to load providers:",x)}finally{T.value=!1}}async function t(v){await M().execute(`llm switch ${v}`,1e4),p.value.forEach(g=>g.active=g.name===v),c.value=v}async function d(v){const x=M();i.value=v;try{const{output:g,exitCode:_}=await x.execute("llm test",3e4),U=p.value.find(L=>L.name===v);return U&&(U.status=_===0?"ok":"error"),_===0}catch{const g=p.value.find(_=>_.name===v);return g&&(g.status="error"),!1}finally{i.value=null}}return{loading:T,testing:i,providers:p,localModels:h,activeProvider:c,loadProviders:K,switchProvider:t,testProvider:d}}),ie={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},de={key:1,style:{"text-align":"center",padding:"60px"}},ue={key:2},ce={class:"providers-grid"},pe={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},me={style:{"font-size":"24px"}},ve={style:{flex:"1"}},fe={style:{color:"#e0e0e0","font-weight":"500"}},ge={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},ye={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},be={key:0,style:{"margin-top":"24px"}},xe={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},_e={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},ke={class:"config-grid"},we={style:{display:"flex","align-items":"center",gap:"12px"}},he={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}},Ue={__name:"Providers",setup(T){const i=ne(),p=M(),h=w(!1),c=w(!1),K=w(!1),t=te({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let d={};const v=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],x={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},g=v.map(s=>({value:s,label:x[s]||s}));async function _(s){try{await i.switchProvider(s),b.success(`已切换到 ${s}`)}catch(e){b.error(`切换失败: ${e.message}`)}}async function U(s){await i.testProvider(s)?b.success(`${s} 连接正常`):b.warning(`${s} 连接失败,请检查配置`)}async function L(){h.value=!0;try{const{output:s}=await p.execute("config list",15e3),e=re(s);e.provider&&(t.provider=e.provider),e.model&&(t.model=e.model),e.apiKey&&(t.apiKey=e.apiKey),e.baseUrl&&(t.baseUrl=e.baseUrl),e.temperature!==void 0&&(t.temperature=e.temperature),e.maxTokens!==void 0&&(t.maxTokens=e.maxTokens),d={provider:e.provider??"",model:e.model??"",apiKey:e.apiKey??"",baseUrl:e.baseUrl??"",temperature:e.temperature??t.temperature,maxTokens:e.maxTokens??t.maxTokens},b.success("配置已加载")}catch(s){b.error(`加载配置失败: ${s.message}`)}finally{h.value=!1}}async function F(){c.value=!0;const s=[],e=[];try{if(t.provider&&t.provider!==d.provider)try{await p.execute(`config set llm.provider ${t.provider}`,1e4),e.push("provider")}catch(n){s.push(`provider: ${n.message}`)}if(t.model&&t.model!==d.model)try{await p.execute(`config set llm.model ${t.model}`,1e4),e.push("model")}catch(n){s.push(`model: ${n.message}`)}if(t.apiKey&&t.apiKey!==d.apiKey)try{await p.execute(`config set llm.apiKey ${t.apiKey}`,1e4),e.push("apiKey")}catch(n){s.push(`apiKey: ${n.message}`)}if(t.baseUrl!==void 0&&t.baseUrl!==d.baseUrl)try{await p.execute(`config set llm.baseUrl ${t.baseUrl}`,1e4),e.push("baseUrl")}catch(n){s.push(`baseUrl: ${n.message}`)}if(t.temperature!==d.temperature)try{await p.execute(`config set llm.temperature ${t.temperature}`,1e4),e.push("temperature")}catch(n){s.push(`temperature: ${n.message}`)}if(t.maxTokens!==d.maxTokens)try{await p.execute(`config set llm.maxTokens ${t.maxTokens}`,1e4),e.push("maxTokens")}catch(n){s.push(`maxTokens: ${n.message}`)}s.length>0?b.warning(`部分配置保存失败: ${s.join("; ")}`):e.length>0?(b.success(`已保存 ${e.length} 项配置`),d={...t},(e.includes("apiKey")||e.includes("provider")||e.includes("baseUrl")||e.includes("model"))&&(K.value=!0),e.includes("provider")&&i.loadProviders()):b.info("没有检测到配置变更")}catch(n){b.error(`保存配置失败: ${n.message}`)}finally{c.value=!1}}function N(){t.provider=d.provider||void 0,t.model=d.model||"",t.apiKey=d.apiKey||"",t.baseUrl=d.baseUrl||"",t.temperature=d.temperature??.7,t.maxTokens=d.maxTokens??4096}return J(()=>{i.loadProviders(),L()}),(s,e)=>{const n=u("a-button"),S=u("a-alert"),V=u("a-spin"),O=u("a-tag"),I=u("a-badge"),R=u("a-card"),q=u("a-list-item"),E=u("a-list"),G=u("a-divider"),D=u("a-select"),$=u("a-form-item"),j=u("a-input"),H=u("a-input-password"),Q=u("a-slider"),A=u("a-input-number"),W=u("a-form");return m(),C("div",null,[r("div",ie,[e[10]||(e[10]=r("div",null,[r("h2",{class:"page-title"},"LLM 配置"),r("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),a(n,{type:"primary",ghost:"",loading:f(i).loading,onClick:e[0]||(e[0]=o=>f(i).loadProviders())},{icon:l(()=>[a(f(B))]),default:l(()=>[e[9]||(e[9]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),f(i).activeProvider?(m(),k(S,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[r("span",null,[e[11]||(e[11]=y("当前激活:",-1)),r("strong",null,P(f(i).activeProvider),1)])]),_:1})):z("",!0),f(i).loading?(m(),C("div",de,[a(V,{size:"large"}),e[12]||(e[12]=r("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(m(),C("div",ue,[r("div",ce,[(m(!0),C(X,null,ee(f(i).providers,o=>(m(),k(R,{key:o.name,class:oe(["provider-card",{active:o.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[r("div",pe,[r("span",me,P(o.icon),1),r("div",ve,[r("div",fe,P(o.label),1),r("div",ge,P(o.name),1)]),r("div",null,[o.active?(m(),k(O,{key:0,color:"green"},{default:l(()=>[...e[13]||(e[13]=[y("活跃",-1)])]),_:1})):o.status==="ok"?(m(),k(I,{key:1,status:"success",text:""})):o.status==="error"?(m(),k(I,{key:2,status:"error",text:""})):z("",!0)])]),r("div",ye,[a(n,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:f(i).testing===o.name,onClick:Y=>U(o.name)},{default:l(()=>[...e[14]||(e[14]=[y(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),o.active?(m(),k(O,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...e[16]||(e[16]=[y("当前",-1)])]),_:1})):(m(),k(n,{key:0,size:"small",type:"primary",ghost:"",onClick:Y=>_(o.name)},{default:l(()=>[...e[15]||(e[15]=[y(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),f(i).localModels.length?(m(),C("div",be,[e[17]||(e[17]=r("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),a(E,{"data-source":f(i).localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:o})=>[a(q,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[a(O,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[y(P(o.size||"local"),1)]),_:2},1024)]),default:l(()=>[r("span",xe,P(o.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):z("",!0),a(G,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),K.value?(m(),k(S,{key:1,type:"warning","show-icon":"",closable:"",style:{"margin-bottom":"16px"},message:"配置已保存,但当前聊天会话仍在用旧 key",description:"桌面端的 LLM 会话只在新建会话时重读配置。请新建一个 Chat,或重启应用,新 key/Provider 才会生效。",onClose:e[1]||(e[1]=o=>K.value=!1)})):z("",!0),r("div",_e,[e[19]||(e[19]=r("h3",{class:"section-title"},"LLM 参数设置",-1)),a(n,{size:"small",loading:h.value,onClick:L,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[a(f(B))]),default:l(()=>[e[18]||(e[18]=y(" 加载配置 ",-1))]),_:1},8,["loading"])]),a(R,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[a(W,{model:t,layout:"vertical",class:"config-form"},{default:l(()=>[r("div",ke,[a($,{label:"Provider(提供商)"},{default:l(()=>[a(D,{value:t.provider,"onUpdate:value":e[2]||(e[2]=o=>t.provider=o),placeholder:"选择 LLM 提供商",options:f(g),style:{width:"100%"},disabled:c.value},null,8,["value","options","disabled"])]),_:1}),a($,{label:"Model(模型名称)"},{default:l(()=>[a(j,{value:t.model,"onUpdate:value":e[3]||(e[3]=o=>t.model=o),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),a($,{label:"API Key"},{default:l(()=>[a(H,{value:t.apiKey,"onUpdate:value":e[4]||(e[4]=o=>t.apiKey=o),placeholder:"输入 API Key",disabled:c.value},null,8,["value","disabled"])]),_:1}),a($,{label:"Base URL"},{default:l(()=>[a(j,{value:t.baseUrl,"onUpdate:value":e[5]||(e[5]=o=>t.baseUrl=o),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),a($,{label:"Temperature(温度)"},{default:l(()=>[r("div",we,[a(Q,{value:t.temperature,"onUpdate:value":e[6]||(e[6]=o=>t.temperature=o),min:0,max:2,step:.1,style:{flex:"1"},disabled:c.value},null,8,["value","disabled"]),a(A,{value:t.temperature,"onUpdate:value":e[7]||(e[7]=o=>t.temperature=o),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:c.value},null,8,["value","disabled"])])]),_:1}),a($,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[a(A,{value:t.maxTokens,"onUpdate:value":e[8]||(e[8]=o=>t.maxTokens=o),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:c.value},null,8,["value","disabled"])]),_:1})]),r("div",he,[a(n,{onClick:N,disabled:c.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...e[20]||(e[20]=[y(" 重置 ",-1)])]),_:1},8,["disabled"]),a(n,{type:"primary",loading:c.value,onClick:F},{default:l(()=>[...e[21]||(e[21]=[y(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})]))])}}},Te=ae(Ue,[["__scopeId","data-v-d7d22233"]]);export{Te as default};
|