chainlesschain 0.162.69 → 0.162.71

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.
Files changed (155) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/assets/{AIOps-mRHaZd6j.js → AIOps-pes7_jGr.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-DKwlStrh.js → ActionButton-DiHWdeH1.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-JKNBk90h.js → Analytics-C51UX-V_.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-D_00au6T.js → AppLayout-BE6LJLw9.js} +4 -4
  6. package/src/assets/web-panel/assets/{Audit-COIvlSub.js → Audit-CtTkLTe2.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-DM0caJ_V.js → Backup-lmpVwPxc.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-BCcZwFqj.js → BaseInput-Dr7DR1E1.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-Mzs83VXS.js → Chat-DXph6klA.js} +5 -5
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-B3WgjkqK.js → ChatBubbleRenderer-RefrXxqp.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-BSK8NcWS.js → Checkbox-BF0aS5R9.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-CEZLn0zj.js → Codegen-B-oHWNTV.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-C3wDVrB5.js → Col-B6KdyRTE.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-DgGS3UTp.js → Community-D5ac0KyO.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-BYw2zw-v.js → Compact-Dc61O2eQ.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-DkkuY155.js → Compliance-a48qvNmd.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-CExycS2P.js → Cowork-CIF9lSRj.js} +3 -3
  18. package/src/assets/web-panel/assets/{Cron-CIERLVft.js → Cron-C_gkf4xd.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-CsHN5kXa.js → Crosschain-CJt15PzW.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-BVSo2C6D.js → DID-D8I_okEj.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-DmC4cW02.js → Dashboard-O4q-qCF2.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-B73mSg7P.js → Dropdown-flRziiaw.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-B6m4si5I.js → EmailListRenderer-CnnkfGPw.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DLcJUP1r.js → FamilyGuardDashboard-CYAJpGqd.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-gzFvFfqM.js → Federation-Dm3WqzQ_.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-CR4BrjCr.js → FormItemContext-CpAIter6.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-D-vZ_Mus.js → GenericCardRenderer-ChzXcyuN.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-Cy2qd9re.js → Git-DElmMsL4.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-CCxHR2cK.js → Governance-EWmgn9io.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-CPGRthgg.js → Inference-VtOR_sef.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-rNtsv5PI.js → KnowledgeGraph-OMqlGkMR.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-D2uSdTps.js → Logs-CTgYDsTZ.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-fv9Y2P9i.js → Marketplace-DZIUTbn8.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-BXdt1OfF.js → McpTools-DWeOErCA.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-uVwjHReb.js → Memory-DwFBp-ev.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-DUekknEV.js → MobileBridge-D42xBfE3.js} +2 -2
  37. package/src/assets/web-panel/assets/MobileProjects-BHCHauUl.js +1 -0
  38. package/src/assets/web-panel/assets/{Mtc-DU7qxB15.js → Mtc-CabnNsyS.js} +6 -6
  39. package/src/assets/web-panel/assets/{MtcAudit-D82jFkm-.js → MtcAudit-Ddx9Awu5.js} +6 -6
  40. package/src/assets/web-panel/assets/{Multisig-CbXPwmLK.js → Multisig-CJpYBZ8f.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-xinU-pAd.js → NLProgramming-BvPJskVG.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-CF695fi9.js → Notes-92ELvJM2.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-DqE8Uw97.js → NotificationSettings-CXz0SUzP.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-C6OcpNmv.js → OrderTableRenderer-4iWRkMr-.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-BdSbVJSd.js → Organization-DblqJPeY.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-Cwd_BqS5.js → Overflow-CHfS3HwD.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-Cu9QkrOR.js → P2P-DIg0pLIG.js} +2 -2
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-B-qgBBLE.js → PdhVaultBrowser-BhD3DGjk.js} +3 -3
  49. package/src/assets/web-panel/assets/{Permissions-BM4iUYhq.js → Permissions-Ct7bwrz8.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-BFFOGNIt.js → PersonalDataHub-DG9c1eas.js} +4 -4
  51. package/src/assets/web-panel/assets/{Pipeline-CfgXjou1.js → Pipeline-BwQnEqG0.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-B5BKvDsX.js → Privacy-BvWaf-Ba.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-YdvJ_Keh.js → ProjectInit-BFzMHtiW.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-2WrdaB3v.js → ProjectSettings-DDpokSpH.js} +2 -2
  55. package/src/assets/web-panel/assets/{Projects-DIziui4g.js → Projects-3IL8lyPl.js} +1 -1
  56. package/src/assets/web-panel/assets/{Providers-B6_KBUE6.js → Providers-C6BsEzSR.js} +1 -1
  57. package/src/assets/web-panel/assets/{QuickAsk-CrNUnzCS.js → QuickAsk-Mh6690Ey.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-C776RdRO.js → Recommend-CJbZ6wgA.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-RMht4VQm.js → Reputation-GDcyl6iQ.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-D0WYOsJu.js → Row-6p4DKFSi.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-BVPn-wVM.js → RssFeed-BLhrkoDq.js} +3 -3
  62. package/src/assets/web-panel/assets/{Search-5G03gU05.js → Search-Ckiyt35t.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security-B7_HAVGp.js → Security-qhh-B5Qt.js} +4 -4
  64. package/src/assets/web-panel/assets/{Services-DG-gNQSw.js → Services-D7a2OwKm.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-DXUXpGp2.js → Skeleton-CSMxupKd.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-D19MUfuA.js → Skills-CGpMng8w.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-DZdS2c4B.js → Sla-CYtaU3Ar.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-DEWyi82O.js → SpeechSettings-BTCsu1uM.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-COwILO7T.js → SyncSettings-Cnzx2L5I.js} +2 -2
  70. package/src/assets/web-panel/assets/Tasks-BhnGtqaZ.js +1 -0
  71. package/src/assets/web-panel/assets/{Templates-CouCONlo.js → Templates-Ccdx_C3w.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-DJF8zjXy.js → Tenant-ZN8c86j3.js} +1 -1
  73. package/src/assets/web-panel/assets/Terminal-BfgM0oyN.js +3 -0
  74. package/src/assets/web-panel/assets/{TimelineRenderer-Hd1UCvLm.js → TimelineRenderer-CjgirE9d.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-DvR4eNpx.js → Tokens-QoRpi6Wf.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-CYslzJDF.js → Trigger-CEQKJkhs.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-Bje6U7_E.js → Trust-UTuAzV1q.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-Cz-GZJDg.js → UkeySign-JDs9I7fl.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-Bb1UWWOc.js → VideoEditing-BACYQQSd.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-B2ZGejOh.js → Wallet-C-SKluhH.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-CKJmoHdr.js → WebAuthn-9chizTFy.js} +5 -5
  82. package/src/assets/web-panel/assets/{WorkflowEditor-Whk2YLrb.js → WorkflowEditor-0mF-LAUo.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-RoIuy9Y2.js → chat-Di7QINiP.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-BhEd_bKZ.js → colors-SBmhHMM9.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-CidH0uK1.js → compact-item-BmbETbNj.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-C_rRS-Ds.js → createContext-C7hFnsJ7.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-gNvbyy4j.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-CmeIRIpe.js → hasIn-CFtthKDD.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-ys4rkmSl.js → index-B4etIqbf.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-dMw41BZp.js → index-BCcCs7LJ.js} +1 -1
  91. package/src/assets/web-panel/assets/index-BNXpMnIY.js +1 -0
  92. package/src/assets/web-panel/assets/{index-DLQQetVM.js → index-BT2uOwmA.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-CcXsvVqO.js → index-BcRTX_WO.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-Luxberfg.js → index-BcawAm_i.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-_dSvONj9.js → index-Bpo7UVJe.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CNIuqDnx.js → index-C07kpleB.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-Ds3Cg0Ae.js → index-C2CN7coN.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Ruva8uPi.js → index-C2fhXmhW.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CWd-l-yG.js → index-C6tZzsb9.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CoGpLFSs.js → index-CNpb8m5a.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DT1y-Y3f.js → index-CSnTUPQx.js} +3 -3
  102. package/src/assets/web-panel/assets/{index-qksnYfTn.js → index-CWDk3nDZ.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CX3pUViM.js → index-CcBhsVYn.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DjMeZpai.js → index-CgXQwqXr.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DPvldj2b.js → index-Cib-RTws.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DBkcH93B.js → index-ClIp4Vin.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DoZHyQzC.js → index-CovTrPpI.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CrfbYvUn.js → index-D0yO3vWh.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-C6k3kLEx.js → index-D134XFWR.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-r7fl2fJ5.js → index-D6vNUp6c.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-D-_Hp7sk.js → index-D8CeUlN0.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CEQ-hwZR.js → index-DEYnWiq1.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-B1mwMvn4.js → index-DI2xH1fU.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CONjSq4V.js → index-DRBc1Ewn.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-Np_V608u.js → index-DWfObC0n.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CZHr43Om.js → index-Dk4ez5rf.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-GjeCpE-O.js → index-Dps9xdE8.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BzUwFZ_8.js → index-Dww6gCzI.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-C5PRk4sg.js → index-NxxQTlPJ.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CNr2Jahq.js → index-PN02VlUB.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-B6m1mhdz.js → index-WjZVyLn7.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Bx_Je5Dv.js → index-_a2NG3iP.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Cb96fe_j.js → index-_hO8-EnW.js} +1 -1
  124. package/src/assets/web-panel/assets/index-gfHxqT1Q.js +1 -0
  125. package/src/assets/web-panel/assets/{index-j5F0sAV-.js → index-lRVjtXeH.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CqGJIS-s.js → index-sA4vr5WV.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-IGkFXvXp.js → index-sz0w-D-C.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-DkSV8vgw.js → initDefaultProps-B1zCwkvT.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-Cp8NKUFr.js → motion-BDGIV9KA.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-CLyMNWcC.js → move-BITqgluK.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-8eo0vufF.js → omit-uD97QKBF.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-DezDJBf9.js → pickAttrs-CZpXhSIE.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-MzOUG99n.js → placementArrow-ByUvT_08.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-BIM3OijT.js → responsiveObserve-BQG9LlBs.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-BboGfin4.js → slide-Bx9TyeEE.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-B2H0FDx9.js → statusUtils-XWaMqYM8.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-BEkY7TC8.js → styleChecker-BZ-nMyDB.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-BsmYDsvA.js → useFlexGapSupport-D_iwA3vx.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-CO3oipa2.js → useFs-DuvW_aRX.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-C-yb9KXG.js → usePersonalDataHub-BO7orS0d.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-2w5Ks8oo.js → vnode-Cc_fqAL4.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-BbwfKB6m.js → zoom-BGkBp90M.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/commands/agent.js +4 -0
  145. package/src/lib/agent-core.js +1 -0
  146. package/src/lib/cowork-workflow.js +344 -30
  147. package/src/lib/hook-manager.js +3 -2
  148. package/src/lib/workflow-state-reader.js +10 -1
  149. package/src/runtime/headless-stream.js +14 -2
  150. package/src/assets/web-panel/assets/MobileProjects-Dl8xYWOU.js +0 -1
  151. package/src/assets/web-panel/assets/Tasks-D-O2-bZx.js +0 -1
  152. package/src/assets/web-panel/assets/Terminal-BTXj0cal.js +0 -3
  153. package/src/assets/web-panel/assets/devWarning-CahsJx-O.js +0 -1
  154. package/src/assets/web-panel/assets/index-BpAHKzLk.js +0 -1
  155. package/src/assets/web-panel/assets/index-D-uS5svS.js +0 -1
@@ -1 +1 @@
1
- import{I as m,J as I,U as s,R as r,c as a,K as o,V as b,N as Y,o as G,a as Z,b as X,r as u,P as d,F as K,Z as V,S as v,Q as c}from"./vendor-BvqAck49.js";import{_ as pe,b as $,u as ee,d as g}from"./index-DT1y-Y3f.js";import{u as te}from"./useFs-CO3oipa2.js";import{aL as me,aK as de,ap as ue,aa as ge,aQ as fe,aR as _e,as as ye,a4 as ve,H as xe,a9 as be}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";const q="cc_prompt_templates",he={__name:"Templates",setup(oe,{expose:l}){l();const{t:i}=$(),e=ee(),J=Y(),A=te(),f=u(!1),h=u(!1),R=u("project"),w=u(""),k=u(null),P=u(!1),S=u(""),B=["code-project","data-science","devops","medical-triage","agriculture-expert","general-assistant","ai-media-creator","ai-doc-creator","empty"],N=X(()=>B.map(n=>({name:n,description:i(`templates.project.items.${n}`)})));function M(n){S.value=n,P.value=!0}async function E(){P.value=!1;const n=S.value;if(n){w.value=n,k.value=null;try{const p=`init --template ${n} --yes`,{output:z,exitCode:T}=await e.execute(p,3e4);k.value={success:T===0,output:z}}catch(p){k.value={success:!1,output:i("templates.messages.initFailed",{err:p.message})}}finally{w.value=""}}}const F=u(!1),O=u([]),x=u(""),j=u(null);async function L(){F.value=!0;try{const{output:n}=await e.execute("bi templates --json",15e3),p=JSON.parse(n);O.value=Array.isArray(p)?p:p.templates||[]}catch{O.value=[]}finally{F.value=!1}}async function U(n){x.value=n,j.value=null;try{const p=`bi dashboard create --template ${n} --json`,{output:z,exitCode:T}=await e.execute(p,3e4);j.value={success:T===0,output:z}}catch(p){j.value={success:!1,output:i("templates.messages.createFailed",{err:p.message})}}finally{x.value=""}}const t=u([]),C=u(!1),_=Z({name:"",category:"general",content:""});function H(){try{const n=localStorage.getItem(q);t.value=n?JSON.parse(n):[]}catch{t.value=[]}}function D(){localStorage.setItem(q,JSON.stringify(t.value))}function ae(){!_.name||!_.content||(t.value.push({name:_.name,category:_.category,content:_.content}),D(),Q(),g.success(i("templates.messages.promptSaved")))}function Q(){C.value=!1,_.name="",_.category="general",_.content=""}async function ne(){if(t.value.length){f.value=!0;try{const n=await A.saveJson({schema:1,prompts:t.value},{defaultPath:`prompt-templates-${new Date().toISOString().slice(0,10)}.json`});if(n.canceled)return;g.success(n.path?i("templates.messages.exportOk",{count:t.value.length,path:n.path}):i("templates.messages.exportOkDefault"))}catch(n){g.error(i("templates.messages.exportFailed",{err:n.message||n}))}finally{f.value=!1}}}async function le(){h.value=!0;try{const n=await A.pickFileText({title:i("templates.prompts.filePickerTitle"),filters:[{name:"JSON",extensions:["json"]}]});if(!n||n.canceled)return;if(n.reason==="too_large"){g.error(i("templates.messages.fileTooLarge"));return}let p;try{p=JSON.parse(n.content||"")}catch(y){g.error(i("templates.messages.jsonParseFailed",{err:y.message}));return}const z=Array.isArray(p)?p:Array.isArray(p?.prompts)?p.prompts:null;if(!z){g.error(i("templates.messages.fileShapeUnknown",{expected:"prompts: [...]"}));return}let T=0;for(const y of z)!y||typeof y!="object"||typeof y.name!="string"||typeof y.content!="string"||(t.value.push({name:y.name,category:typeof y.category=="string"?y.category:"general",content:y.content}),T++);T?(D(),g.success(i("templates.messages.importedCount",{count:T}))):g.warning(i("templates.messages.importEmpty"))}catch(n){g.error(i("templates.messages.importFailed",{err:n.message||n}))}finally{h.value=!1}}function re(n){t.value.splice(n,1),D(),g.success(i("templates.messages.promptDeleted"))}function se(n){navigator.clipboard.writeText(n.content).then(()=>{g.success(i("templates.messages.copiedClipboard"))}).catch(()=>{g.error(i("templates.messages.copyFailed"))})}function ie(n){J.push({path:"/chat",query:{prompt:n.content}})}function ce(n){return{general:"blue",code:"green",writing:"orange",analysis:"purple"}[n]||"default"}G(()=>{H(),L()});const W={t:i,ws:e,router:J,fs:A,exportingPrompts:f,importingPrompts:h,activeTab:R,initLoading:w,initResult:k,showInitConfirm:P,pendingTemplate:S,PROJECT_TEMPLATE_NAMES:B,projectTemplates:N,confirmInit:M,doInit:E,biLoading:F,biTemplates:O,biCreating:x,biResult:j,loadBiTemplates:L,createBiDashboard:U,STORAGE_KEY:q,promptTemplates:t,showPromptModal:C,newPrompt:_,loadPromptTemplates:H,persistPrompts:D,savePrompt:ae,resetPromptForm:Q,exportPrompts:ne,importPrompts:le,deletePrompt:re,copyPrompt:se,usePrompt:ie,categoryColor:ce,ref:u,computed:X,reactive:Z,onMounted:G,get useI18n(){return $},get useRouter(){return Y},get AppstoreOutlined(){return be},get BarChartOutlined(){return xe},get FileTextOutlined(){return ve},get PlusOutlined(){return ye},get CopyOutlined(){return _e},get DeleteOutlined(){return fe},get RocketOutlined(){return ge},get PlayCircleOutlined(){return ue},get ExportOutlined(){return de},get ImportOutlined(){return me},get message(){return g},get useWsStore(){return ee},get useFs(){return te}};return Object.defineProperty(W,"__isScriptSetup",{enumerable:!1,value:!0}),W}},we={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ke={class:"page-title"},Pe={class:"page-sub"},Oe={style:{display:"flex","align-items":"flex-start",gap:"10px"}},Ce={style:{flex:"1","min-width":"0"}},Te={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},je={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},ze={style:{"margin-top":"12px","text-align":"right"}},Ie={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Re={key:0,style:{"text-align":"center",padding:"40px"}},Se={style:{color:"var(--text-muted)","margin-top":"8px"}},Be={style:{display:"flex","align-items":"flex-start",gap:"10px"}},Fe={style:{flex:"1","min-width":"0"}},Ae={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px"}},Ne={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ee={key:0,style:{"margin-top":"4px"}},Le={style:{"margin-top":"12px","text-align":"right"}},De={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Je={style:{"margin-bottom":"16px",display:"flex",gap:"8px"}},Me={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},Ue={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Ke={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5","max-height":"60px",overflow:"hidden","text-overflow":"ellipsis","white-space":"pre-wrap"}},Ve={style:{"margin-top":"12px",display:"flex",gap:"8px","justify-content":"flex-end"}},qe={style:{color:"var(--text-muted)","font-size":"12px"}};function He(oe,l,i,e,J,A){const f=m("a-button"),h=m("a-card"),R=m("a-col"),w=m("a-row"),k=m("a-alert"),P=m("a-tab-pane"),S=m("a-spin"),B=m("a-empty"),N=m("a-tag"),M=m("a-tabs"),E=m("a-modal"),F=m("a-input"),O=m("a-form-item"),x=m("a-select-option"),j=m("a-select"),L=m("a-textarea"),U=m("a-form");return d(),I("div",null,[s("div",we,[s("div",null,[s("h2",ke,r(e.t("templates.title")),1),s("p",Pe,r(e.t("templates.subtitle")),1)])]),a(M,{activeKey:e.activeTab,"onUpdate:activeKey":l[3]||(l[3]=t=>e.activeTab=t),type:"card"},{default:o(()=>[b(" Tab 1: Project templates "),a(P,{key:"project"},{tab:o(()=>[a(e.AppstoreOutlined),c(" "+r(e.t("templates.tabs.project")),1)]),default:o(()=>[a(w,{gutter:[16,16]},{default:o(()=>[(d(!0),I(K,null,V(e.projectTemplates,t=>(d(),v(R,{key:t.name,xs:24,sm:12,lg:8},{default:o(()=>[a(h,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[s("div",Oe,[a(e.RocketOutlined,{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}}),s("div",Ce,[s("div",Te,r(t.name),1),s("div",je,r(t.description),1)])]),s("div",ze,[a(f,{type:"primary",size:"small",loading:e.initLoading===t.name,onClick:C=>e.confirmInit(t.name)},{icon:o(()=>[a(e.PlayCircleOutlined)]),default:o(()=>[c(" "+r(e.t("templates.project.initButton")),1)]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1}),e.initResult?(d(),v(k,{key:0,message:e.initResult.success?e.t("templates.project.initSuccessAlert"):e.t("templates.project.initFailureAlert"),type:e.initResult.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:l[0]||(l[0]=t=>e.initResult=null)},{description:o(()=>[s("pre",Ie,r(e.initResult.output),1)]),_:1},8,["message","type"])):b("v-if",!0)]),_:1}),b(" Tab 2: BI templates "),a(P,{key:"bi"},{tab:o(()=>[a(e.BarChartOutlined),c(" "+r(e.t("templates.tabs.bi")),1)]),default:o(()=>[e.biLoading?(d(),I("div",Re,[a(S),s("div",Se,r(e.t("templates.bi.loadingHint")),1)])):e.biTemplates.length?(d(),v(w,{key:2,gutter:[16,16]},{default:o(()=>[(d(!0),I(K,null,V(e.biTemplates,t=>(d(),v(R,{key:t.id,xs:24,sm:12,lg:8},{default:o(()=>[a(h,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[s("div",Be,[a(e.BarChartOutlined,{style:{"font-size":"24px",color:"#722ed1","flex-shrink":"0","margin-top":"2px"}}),s("div",Fe,[s("div",Ae,r(t.name),1),s("div",Ne,r(t.description||e.t("templates.bi.noDescription")),1),t.id?(d(),I("div",Ee,[a(N,{size:"small",color:"purple"},{default:o(()=>[c(r(t.id),1)]),_:2},1024)])):b("v-if",!0)])]),s("div",Le,[a(f,{type:"primary",size:"small",loading:e.biCreating===t.id,onClick:C=>e.createBiDashboard(t.id)},{icon:o(()=>[a(e.PlayCircleOutlined)]),default:o(()=>[c(" "+r(e.t("templates.bi.createButton")),1)]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(d(),v(B,{key:1,description:e.t("templates.bi.emptyText")},null,8,["description"])),e.biResult?(d(),v(k,{key:3,message:e.biResult.success?e.t("templates.bi.createSuccessAlert"):e.t("templates.bi.createFailureAlert"),type:e.biResult.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:l[1]||(l[1]=t=>e.biResult=null)},{description:o(()=>[s("pre",De,r(e.biResult.output),1)]),_:1},8,["message","type"])):b("v-if",!0)]),_:1}),b(" Tab 3: Prompt templates "),a(P,{key:"prompts"},{tab:o(()=>[a(e.FileTextOutlined),c(" "+r(e.t("templates.tabs.prompts")),1)]),default:o(()=>[s("div",Je,[a(f,{type:"primary",onClick:l[2]||(l[2]=t=>e.showPromptModal=!0)},{icon:o(()=>[a(e.PlusOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.newButton")),1)]),_:1}),a(f,{disabled:!e.promptTemplates.length,loading:e.exportingPrompts,onClick:e.exportPrompts},{icon:o(()=>[a(e.ExportOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.exportAll")),1)]),_:1},8,["disabled","loading"]),a(f,{loading:e.importingPrompts,onClick:e.importPrompts},{icon:o(()=>[a(e.ImportOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.import")),1)]),_:1},8,["loading"])]),e.promptTemplates.length?(d(),v(w,{key:1,gutter:[16,16]},{default:o(()=>[(d(!0),I(K,null,V(e.promptTemplates,(t,C)=>(d(),v(R,{key:C,xs:24,sm:12,lg:8},{default:o(()=>[a(h,{size:"small",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[s("div",Me,[a(e.FileTextOutlined,{style:{"font-size":"18px",color:"#52c41a"}}),s("span",Ue,r(t.name),1),a(N,{color:e.categoryColor(t.category),size:"small"},{default:o(()=>[c(r(t.category),1)]),_:2},1032,["color"])]),s("div",Ke,r(t.content.length>120?t.content.slice(0,120)+"...":t.content),1),s("div",Ve,[a(f,{size:"small",onClick:_=>e.usePrompt(t)},{icon:o(()=>[a(e.RocketOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.useButton")),1)]),_:1},8,["onClick"]),a(f,{size:"small",onClick:_=>e.copyPrompt(t)},{icon:o(()=>[a(e.CopyOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.copyButton")),1)]),_:1},8,["onClick"]),a(f,{size:"small",danger:"",onClick:_=>e.deletePrompt(C)},{icon:o(()=>[a(e.DeleteOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.deleteButton")),1)]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(d(),v(B,{key:0,description:e.t("templates.prompts.emptyText")},null,8,["description"]))]),_:1})]),_:1},8,["activeKey"]),b(" Init Confirmation Modal "),a(E,{open:e.showInitConfirm,"onUpdate:open":l[4]||(l[4]=t=>e.showInitConfirm=t),title:e.t("templates.project.confirmTitle"),onOk:e.doInit,onCancel:l[5]||(l[5]=t=>e.showInitConfirm=!1),"ok-text":e.t("templates.project.confirmOk"),"cancel-text":e.t("common.cancel")},{default:o(()=>[s("p",null,[c(r(e.t("templates.project.confirmIntro"))+" ",1),s("strong",null,r(e.pendingTemplate),1),c(" "+r(e.t("templates.project.confirmIntroSuffix")),1)]),s("p",qe,r(e.t("templates.project.confirmHint")),1)]),_:1},8,["open","title","ok-text","cancel-text"]),b(" New Prompt Modal "),a(E,{open:e.showPromptModal,"onUpdate:open":l[9]||(l[9]=t=>e.showPromptModal=t),title:e.t("templates.prompts.modalTitle"),onOk:e.savePrompt,onCancel:e.resetPromptForm,"ok-text":e.t("templates.prompts.modalOk"),"cancel-text":e.t("common.cancel"),"ok-button-props":{disabled:!e.newPrompt.name||!e.newPrompt.content}},{default:o(()=>[a(U,{layout:"vertical"},{default:o(()=>[a(O,{label:e.t("templates.prompts.nameLabel"),required:""},{default:o(()=>[a(F,{value:e.newPrompt.name,"onUpdate:value":l[6]||(l[6]=t=>e.newPrompt.name=t),placeholder:e.t("templates.prompts.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(O,{label:e.t("templates.prompts.categoryLabel")},{default:o(()=>[a(j,{value:e.newPrompt.category,"onUpdate:value":l[7]||(l[7]=t=>e.newPrompt.category=t),style:{width:"100%"}},{default:o(()=>[a(x,{value:"general"},{default:o(()=>[...l[10]||(l[10]=[c("general",-1)])]),_:1}),a(x,{value:"code"},{default:o(()=>[...l[11]||(l[11]=[c("code",-1)])]),_:1}),a(x,{value:"writing"},{default:o(()=>[...l[12]||(l[12]=[c("writing",-1)])]),_:1}),a(x,{value:"analysis"},{default:o(()=>[...l[13]||(l[13]=[c("analysis",-1)])]),_:1})]),_:1},8,["value"])]),_:1},8,["label"]),a(O,{label:e.t("templates.prompts.contentLabel"),required:""},{default:o(()=>[a(L,{value:e.newPrompt.content,"onUpdate:value":l[8]||(l[8]=t=>e.newPrompt.content=t),rows:6,placeholder:e.t("templates.prompts.contentPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","ok-text","cancel-text","ok-button-props"])])}const Xe=pe(he,[["render",He],["__scopeId","data-v-82f40809"],["__file","/tmp/cc-web-panel-YJBpJd/repo/packages/web-panel/src/views/Templates.vue"]]);export{Xe as default};
1
+ import{I as m,J as I,U as s,R as r,c as a,K as o,V as b,N as W,o as Y,a as Z,b as X,r as u,P as d,F as K,Z as V,S as v,Q as c}from"./vendor-BvqAck49.js";import{_ as pe,b as $,u as ee,d as g}from"./index-CSnTUPQx.js";import{u as te}from"./useFs-DuvW_aRX.js";import{aL as me,aK as de,ap as ue,aa as ge,aQ as fe,aR as _e,as as ye,a4 as ve,H as xe,a9 as be}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";const q="cc_prompt_templates",he={__name:"Templates",setup(oe,{expose:l}){l();const{t:i}=$(),e=ee(),M=W(),B=te(),f=u(!1),h=u(!1),R=u("project"),w=u(""),k=u(null),P=u(!1),S=u(""),F=["code-project","data-science","devops","medical-triage","agriculture-expert","general-assistant","ai-media-creator","ai-doc-creator","empty"],N=X(()=>F.map(n=>({name:n,description:i(`templates.project.items.${n}`)})));function J(n){S.value=n,P.value=!0}async function D(){P.value=!1;const n=S.value;if(n){w.value=n,k.value=null;try{const p=`init --template ${n} --yes`,{output:z,exitCode:T}=await e.execute(p,3e4);k.value={success:T===0,output:z}}catch(p){k.value={success:!1,output:i("templates.messages.initFailed",{err:p.message})}}finally{w.value=""}}}const A=u(!1),O=u([]),x=u(""),j=u(null);async function E(){A.value=!0;try{const{output:n}=await e.execute("bi templates --json",15e3),p=JSON.parse(n);O.value=Array.isArray(p)?p:p.templates||[]}catch{O.value=[]}finally{A.value=!1}}async function U(n){x.value=n,j.value=null;try{const p=`bi dashboard create --template ${n} --json`,{output:z,exitCode:T}=await e.execute(p,3e4);j.value={success:T===0,output:z}}catch(p){j.value={success:!1,output:i("templates.messages.createFailed",{err:p.message})}}finally{x.value=""}}const t=u([]),C=u(!1),_=Z({name:"",category:"general",content:""});function H(){try{const n=localStorage.getItem(q);t.value=n?JSON.parse(n):[]}catch{t.value=[]}}function L(){localStorage.setItem(q,JSON.stringify(t.value))}function ae(){!_.name||!_.content||(t.value.push({name:_.name,category:_.category,content:_.content}),L(),Q(),g.success(i("templates.messages.promptSaved")))}function Q(){C.value=!1,_.name="",_.category="general",_.content=""}async function ne(){if(t.value.length){f.value=!0;try{const n=await B.saveJson({schema:1,prompts:t.value},{defaultPath:`prompt-templates-${new Date().toISOString().slice(0,10)}.json`});if(n.canceled)return;g.success(n.path?i("templates.messages.exportOk",{count:t.value.length,path:n.path}):i("templates.messages.exportOkDefault"))}catch(n){g.error(i("templates.messages.exportFailed",{err:n.message||n}))}finally{f.value=!1}}}async function le(){h.value=!0;try{const n=await B.pickFileText({title:i("templates.prompts.filePickerTitle"),filters:[{name:"JSON",extensions:["json"]}]});if(!n||n.canceled)return;if(n.reason==="too_large"){g.error(i("templates.messages.fileTooLarge"));return}let p;try{p=JSON.parse(n.content||"")}catch(y){g.error(i("templates.messages.jsonParseFailed",{err:y.message}));return}const z=Array.isArray(p)?p:Array.isArray(p?.prompts)?p.prompts:null;if(!z){g.error(i("templates.messages.fileShapeUnknown",{expected:"prompts: [...]"}));return}let T=0;for(const y of z)!y||typeof y!="object"||typeof y.name!="string"||typeof y.content!="string"||(t.value.push({name:y.name,category:typeof y.category=="string"?y.category:"general",content:y.content}),T++);T?(L(),g.success(i("templates.messages.importedCount",{count:T}))):g.warning(i("templates.messages.importEmpty"))}catch(n){g.error(i("templates.messages.importFailed",{err:n.message||n}))}finally{h.value=!1}}function re(n){t.value.splice(n,1),L(),g.success(i("templates.messages.promptDeleted"))}function se(n){navigator.clipboard.writeText(n.content).then(()=>{g.success(i("templates.messages.copiedClipboard"))}).catch(()=>{g.error(i("templates.messages.copyFailed"))})}function ie(n){M.push({path:"/chat",query:{prompt:n.content}})}function ce(n){return{general:"blue",code:"green",writing:"orange",analysis:"purple"}[n]||"default"}Y(()=>{H(),E()});const G={t:i,ws:e,router:M,fs:B,exportingPrompts:f,importingPrompts:h,activeTab:R,initLoading:w,initResult:k,showInitConfirm:P,pendingTemplate:S,PROJECT_TEMPLATE_NAMES:F,projectTemplates:N,confirmInit:J,doInit:D,biLoading:A,biTemplates:O,biCreating:x,biResult:j,loadBiTemplates:E,createBiDashboard:U,STORAGE_KEY:q,promptTemplates:t,showPromptModal:C,newPrompt:_,loadPromptTemplates:H,persistPrompts:L,savePrompt:ae,resetPromptForm:Q,exportPrompts:ne,importPrompts:le,deletePrompt:re,copyPrompt:se,usePrompt:ie,categoryColor:ce,ref:u,computed:X,reactive:Z,onMounted:Y,get useI18n(){return $},get useRouter(){return W},get AppstoreOutlined(){return be},get BarChartOutlined(){return xe},get FileTextOutlined(){return ve},get PlusOutlined(){return ye},get CopyOutlined(){return _e},get DeleteOutlined(){return fe},get RocketOutlined(){return ge},get PlayCircleOutlined(){return ue},get ExportOutlined(){return de},get ImportOutlined(){return me},get message(){return g},get useWsStore(){return ee},get useFs(){return te}};return Object.defineProperty(G,"__isScriptSetup",{enumerable:!1,value:!0}),G}},we={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ke={class:"page-title"},Pe={class:"page-sub"},Oe={style:{display:"flex","align-items":"flex-start",gap:"10px"}},Ce={style:{flex:"1","min-width":"0"}},Te={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},je={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},ze={style:{"margin-top":"12px","text-align":"right"}},Ie={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Re={key:0,style:{"text-align":"center",padding:"40px"}},Se={style:{color:"var(--text-muted)","margin-top":"8px"}},Fe={style:{display:"flex","align-items":"flex-start",gap:"10px"}},Ae={style:{flex:"1","min-width":"0"}},Be={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px"}},Ne={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},De={key:0,style:{"margin-top":"4px"}},Ee={style:{"margin-top":"12px","text-align":"right"}},Le={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Me={style:{"margin-bottom":"16px",display:"flex",gap:"8px"}},Je={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},Ue={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Ke={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5","max-height":"60px",overflow:"hidden","text-overflow":"ellipsis","white-space":"pre-wrap"}},Ve={style:{"margin-top":"12px",display:"flex",gap:"8px","justify-content":"flex-end"}},qe={style:{color:"var(--text-muted)","font-size":"12px"}};function He(oe,l,i,e,M,B){const f=m("a-button"),h=m("a-card"),R=m("a-col"),w=m("a-row"),k=m("a-alert"),P=m("a-tab-pane"),S=m("a-spin"),F=m("a-empty"),N=m("a-tag"),J=m("a-tabs"),D=m("a-modal"),A=m("a-input"),O=m("a-form-item"),x=m("a-select-option"),j=m("a-select"),E=m("a-textarea"),U=m("a-form");return d(),I("div",null,[s("div",we,[s("div",null,[s("h2",ke,r(e.t("templates.title")),1),s("p",Pe,r(e.t("templates.subtitle")),1)])]),a(J,{activeKey:e.activeTab,"onUpdate:activeKey":l[3]||(l[3]=t=>e.activeTab=t),type:"card"},{default:o(()=>[b(" Tab 1: Project templates "),a(P,{key:"project"},{tab:o(()=>[a(e.AppstoreOutlined),c(" "+r(e.t("templates.tabs.project")),1)]),default:o(()=>[a(w,{gutter:[16,16]},{default:o(()=>[(d(!0),I(K,null,V(e.projectTemplates,t=>(d(),v(R,{key:t.name,xs:24,sm:12,lg:8},{default:o(()=>[a(h,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[s("div",Oe,[a(e.RocketOutlined,{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}}),s("div",Ce,[s("div",Te,r(t.name),1),s("div",je,r(t.description),1)])]),s("div",ze,[a(f,{type:"primary",size:"small",loading:e.initLoading===t.name,onClick:C=>e.confirmInit(t.name)},{icon:o(()=>[a(e.PlayCircleOutlined)]),default:o(()=>[c(" "+r(e.t("templates.project.initButton")),1)]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1}),e.initResult?(d(),v(k,{key:0,message:e.initResult.success?e.t("templates.project.initSuccessAlert"):e.t("templates.project.initFailureAlert"),type:e.initResult.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:l[0]||(l[0]=t=>e.initResult=null)},{description:o(()=>[s("pre",Ie,r(e.initResult.output),1)]),_:1},8,["message","type"])):b("v-if",!0)]),_:1}),b(" Tab 2: BI templates "),a(P,{key:"bi"},{tab:o(()=>[a(e.BarChartOutlined),c(" "+r(e.t("templates.tabs.bi")),1)]),default:o(()=>[e.biLoading?(d(),I("div",Re,[a(S),s("div",Se,r(e.t("templates.bi.loadingHint")),1)])):e.biTemplates.length?(d(),v(w,{key:2,gutter:[16,16]},{default:o(()=>[(d(!0),I(K,null,V(e.biTemplates,t=>(d(),v(R,{key:t.id,xs:24,sm:12,lg:8},{default:o(()=>[a(h,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[s("div",Fe,[a(e.BarChartOutlined,{style:{"font-size":"24px",color:"#722ed1","flex-shrink":"0","margin-top":"2px"}}),s("div",Ae,[s("div",Be,r(t.name),1),s("div",Ne,r(t.description||e.t("templates.bi.noDescription")),1),t.id?(d(),I("div",De,[a(N,{size:"small",color:"purple"},{default:o(()=>[c(r(t.id),1)]),_:2},1024)])):b("v-if",!0)])]),s("div",Ee,[a(f,{type:"primary",size:"small",loading:e.biCreating===t.id,onClick:C=>e.createBiDashboard(t.id)},{icon:o(()=>[a(e.PlayCircleOutlined)]),default:o(()=>[c(" "+r(e.t("templates.bi.createButton")),1)]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(d(),v(F,{key:1,description:e.t("templates.bi.emptyText")},null,8,["description"])),e.biResult?(d(),v(k,{key:3,message:e.biResult.success?e.t("templates.bi.createSuccessAlert"):e.t("templates.bi.createFailureAlert"),type:e.biResult.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:l[1]||(l[1]=t=>e.biResult=null)},{description:o(()=>[s("pre",Le,r(e.biResult.output),1)]),_:1},8,["message","type"])):b("v-if",!0)]),_:1}),b(" Tab 3: Prompt templates "),a(P,{key:"prompts"},{tab:o(()=>[a(e.FileTextOutlined),c(" "+r(e.t("templates.tabs.prompts")),1)]),default:o(()=>[s("div",Me,[a(f,{type:"primary",onClick:l[2]||(l[2]=t=>e.showPromptModal=!0)},{icon:o(()=>[a(e.PlusOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.newButton")),1)]),_:1}),a(f,{disabled:!e.promptTemplates.length,loading:e.exportingPrompts,onClick:e.exportPrompts},{icon:o(()=>[a(e.ExportOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.exportAll")),1)]),_:1},8,["disabled","loading"]),a(f,{loading:e.importingPrompts,onClick:e.importPrompts},{icon:o(()=>[a(e.ImportOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.import")),1)]),_:1},8,["loading"])]),e.promptTemplates.length?(d(),v(w,{key:1,gutter:[16,16]},{default:o(()=>[(d(!0),I(K,null,V(e.promptTemplates,(t,C)=>(d(),v(R,{key:C,xs:24,sm:12,lg:8},{default:o(()=>[a(h,{size:"small",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[s("div",Je,[a(e.FileTextOutlined,{style:{"font-size":"18px",color:"#52c41a"}}),s("span",Ue,r(t.name),1),a(N,{color:e.categoryColor(t.category),size:"small"},{default:o(()=>[c(r(t.category),1)]),_:2},1032,["color"])]),s("div",Ke,r(t.content.length>120?t.content.slice(0,120)+"...":t.content),1),s("div",Ve,[a(f,{size:"small",onClick:_=>e.usePrompt(t)},{icon:o(()=>[a(e.RocketOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.useButton")),1)]),_:1},8,["onClick"]),a(f,{size:"small",onClick:_=>e.copyPrompt(t)},{icon:o(()=>[a(e.CopyOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.copyButton")),1)]),_:1},8,["onClick"]),a(f,{size:"small",danger:"",onClick:_=>e.deletePrompt(C)},{icon:o(()=>[a(e.DeleteOutlined)]),default:o(()=>[c(" "+r(e.t("templates.prompts.deleteButton")),1)]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(d(),v(F,{key:0,description:e.t("templates.prompts.emptyText")},null,8,["description"]))]),_:1})]),_:1},8,["activeKey"]),b(" Init Confirmation Modal "),a(D,{open:e.showInitConfirm,"onUpdate:open":l[4]||(l[4]=t=>e.showInitConfirm=t),title:e.t("templates.project.confirmTitle"),onOk:e.doInit,onCancel:l[5]||(l[5]=t=>e.showInitConfirm=!1),"ok-text":e.t("templates.project.confirmOk"),"cancel-text":e.t("common.cancel")},{default:o(()=>[s("p",null,[c(r(e.t("templates.project.confirmIntro"))+" ",1),s("strong",null,r(e.pendingTemplate),1),c(" "+r(e.t("templates.project.confirmIntroSuffix")),1)]),s("p",qe,r(e.t("templates.project.confirmHint")),1)]),_:1},8,["open","title","ok-text","cancel-text"]),b(" New Prompt Modal "),a(D,{open:e.showPromptModal,"onUpdate:open":l[9]||(l[9]=t=>e.showPromptModal=t),title:e.t("templates.prompts.modalTitle"),onOk:e.savePrompt,onCancel:e.resetPromptForm,"ok-text":e.t("templates.prompts.modalOk"),"cancel-text":e.t("common.cancel"),"ok-button-props":{disabled:!e.newPrompt.name||!e.newPrompt.content}},{default:o(()=>[a(U,{layout:"vertical"},{default:o(()=>[a(O,{label:e.t("templates.prompts.nameLabel"),required:""},{default:o(()=>[a(A,{value:e.newPrompt.name,"onUpdate:value":l[6]||(l[6]=t=>e.newPrompt.name=t),placeholder:e.t("templates.prompts.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(O,{label:e.t("templates.prompts.categoryLabel")},{default:o(()=>[a(j,{value:e.newPrompt.category,"onUpdate:value":l[7]||(l[7]=t=>e.newPrompt.category=t),style:{width:"100%"}},{default:o(()=>[a(x,{value:"general"},{default:o(()=>[...l[10]||(l[10]=[c("general",-1)])]),_:1}),a(x,{value:"code"},{default:o(()=>[...l[11]||(l[11]=[c("code",-1)])]),_:1}),a(x,{value:"writing"},{default:o(()=>[...l[12]||(l[12]=[c("writing",-1)])]),_:1}),a(x,{value:"analysis"},{default:o(()=>[...l[13]||(l[13]=[c("analysis",-1)])]),_:1})]),_:1},8,["value"])]),_:1},8,["label"]),a(O,{label:e.t("templates.prompts.contentLabel"),required:""},{default:o(()=>[a(E,{value:e.newPrompt.content,"onUpdate:value":l[8]||(l[8]=t=>e.newPrompt.content=t),rows:6,placeholder:e.t("templates.prompts.contentPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","ok-text","cancel-text","ok-button-props"])])}const Xe=pe(he,[["render",He],["__scopeId","data-v-82f40809"],["__file","/tmp/cc-web-panel-wQGCAD/repo/packages/web-panel/src/views/Templates.vue"]]);export{Xe as default};
@@ -1 +1 @@
1
- import{I as v,J as p,U as g,R as s,c as o,K as n,V as y,S as _,o as it,a as H,b as X,r as h,P as d,Q as m,F as C,Z as w}from"./vendor-BvqAck49.js";import{_ as Nt,u as ut,b as dt,d as b}from"./index-DT1y-Y3f.js";import{s as Ut}from"./community-parser-CO25nZFt.js";import{a8 as jt,aY as Mt,ac as Et,b4 as Bt,n as Dt,as as Qt,R as Kt}from"./icons-DP3uiYxy.js";function W(e){const l=Ut(e);if(!l)return null;try{return JSON.parse(l)}catch{}const u=l.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!u)return null;try{return JSON.parse(u[0])}catch{return null}}const Jt=Object.freeze(["free","starter","pro","enterprise"]),Vt=Object.freeze(["active","suspended","deleted"]),Wt=Object.freeze(["api_calls","storage_bytes","ai_requests"]);function z(e,l=0){return typeof e=="number"&&Number.isFinite(e)?e:l}function Yt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";if(!u)return null;const t=e.quotas&&typeof e.quotas=="object"?{...e.quotas}:{};return{key:u,id:u,name:String(e.name||u),monthlyFee:e.monthlyFee==null?null:z(e.monthlyFee,null),quotas:t,features:Array.isArray(e.features)?e.features.filter(D=>typeof D=="string"):[],_idx:l}}function ct(e){const l=W(e);return Array.isArray(l)?l.map(Yt).filter(Boolean):[]}function Gt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,name:String(e.name||u),unit:String(e.unit||""),_idx:l}:null}function mt(e){const l=W(e);return Array.isArray(l)?l.map(Gt).filter(Boolean):[]}function Zt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,name:String(e.name||""),slug:String(e.slug||""),config:e.config??null,status:String(e.status||"active").toLowerCase(),plan:String(e.plan||"free").toLowerCase(),dbPath:e.dbPath||null,ownerId:e.ownerId||"",createdAt:e.createdAt??null,updatedAt:e.updatedAt??null,deletedAt:e.deletedAt??null,_idx:l}:null}function ft(e){const l=W(e);return Array.isArray(l)?l.map(Zt).filter(Boolean):[]}function Ht(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,tenantId:String(e.tenantId||""),plan:String(e.plan||"free").toLowerCase(),status:String(e.status||"active").toLowerCase(),startedAt:e.startedAt??null,expiresAt:e.expiresAt??null,cancelledAt:e.cancelledAt??null,paymentMethod:e.paymentMethod||null,amount:e.amount==null?null:z(e.amount,null),createdAt:e.createdAt??null,_idx:l}:null}function pt(e){const l=W(e);return Array.isArray(l)?l.map(Ht).filter(Boolean):[]}function bt(e){const l=W(e);return!l||typeof l!="object"||Array.isArray(l)?null:{tenantId:String(l.tenantId||""),plan:String(l.plan||"free").toLowerCase(),metric:String(l.metric||""),period:String(l.period||""),limit:l.limit==null?null:z(l.limit,null),used:z(l.used,0),remaining:l.remaining==null?null:z(l.remaining,null),unlimited:!!l.unlimited,exceeded:!!l.exceeded}}const Xt={tenantCount:0,byStatus:{active:0,suspended:0,deleted:0},byPlan:{free:0,starter:0,pro:0,enterprise:0},subscriptionCount:0,activeSubscriptions:0,usageRecordCount:0,totalUsage:{api_calls:0,storage_bytes:0,ai_requests:0}};function yt(e){const l=JSON.parse(JSON.stringify(Xt)),u=W(e);if(!u||typeof u!="object"||Array.isArray(u))return l;if(l.tenantCount=z(u.tenantCount,0),l.subscriptionCount=z(u.subscriptionCount,0),l.activeSubscriptions=z(u.activeSubscriptions,0),l.usageRecordCount=z(u.usageRecordCount,0),u.byStatus&&typeof u.byStatus=="object")for(const t of Object.keys(l.byStatus))l.byStatus[t]=z(u.byStatus[t],0);if(u.byPlan&&typeof u.byPlan=="object")for(const t of Object.keys(l.byPlan))l.byPlan[t]=z(u.byPlan[t],0);if(u.totalUsage&&typeof u.totalUsage=="object")for(const t of Object.keys(l.totalUsage))l.totalUsage[t]=z(u.totalUsage[t],0);return l}function $t(e){if(e==null||e==="")return"—";const l=typeof e=="number"?new Date(e):new Date(String(e));return isNaN(l.getTime())?String(e):l.toLocaleString("zh-CN",{hour12:!1})}function nt(e){return typeof e!="number"||!Number.isFinite(e)||e<0?"—":e===0?"0":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(2)} GB`}function gt(e=new Date){const l=e.getFullYear(),u=String(e.getMonth()+1).padStart(2,"0");return`${l}-${u}`}const te={__name:"Tenant",setup(e,{expose:l}){l();const u=ut(),{t}=dt(),D=h(!1),$=h(!1),x=h(!1),j=h(!1),Q=h(!1),M=h([]),K=h([]),O=h([]),R=h([]),P=h({tenantCount:0,byStatus:{active:0,suspended:0,deleted:0},byPlan:{free:0,starter:0,pro:0,enterprise:0},subscriptionCount:0,activeSubscriptions:0,usageRecordCount:0,totalUsage:{api_calls:0,storage_bytes:0,ai_requests:0}}),Y=h("tenants"),A=h(""),I=h(""),E=h(!1),J=h(!1),G=h(!1),B=h(!1),T=H({name:"",slug:"",plan:"free",owner:""}),k=H({tenantId:"",plan:"pro",amount:null,duration:720*60*60*1e3}),F=h(""),q=H({tenantId:null,metric:"api_calls",period:""}),S=H({tenantId:null,metric:"api_calls",value:1,period:""}),N=h(null),V=X(()=>[{title:t("tenant.tenantCols.name"),key:"name"},{title:t("tenant.tenantCols.plan"),key:"plan",width:"110px"},{title:t("tenant.tenantCols.status"),key:"status",width:"100px"},{title:t("tenant.tenantCols.owner"),key:"owner",width:"160px"},{title:t("tenant.tenantCols.createdAt"),key:"createdAt",width:"160px"},{title:t("tenant.tenantCols.action"),key:"action",width:"280px"}]),tt=X(()=>[{title:t("tenant.subscriptionCols.tenant"),key:"tenant"},{title:t("tenant.subscriptionCols.plan"),key:"plan",width:"110px"},{title:t("tenant.subscriptionCols.amount"),key:"amount",width:"100px"},{title:t("tenant.subscriptionCols.status"),key:"status",width:"110px"},{title:t("tenant.subscriptionCols.startedAt"),key:"startedAt",width:"160px"},{title:t("tenant.subscriptionCols.expiresAt"),key:"expiresAt",width:"160px"},{title:t("tenant.subscriptionCols.action"),key:"action",width:"120px"}]),et=X(()=>{let r=M.value;return A.value&&(r=r.filter(i=>i.plan===A.value)),I.value&&(r=r.filter(i=>i.status===I.value)),r}),a=X(()=>K.value.filter(r=>r.status==="active"&&typeof r.amount=="number").reduce((r,i)=>r+i.amount,0));function c(r){const i=`tenant.planLabels.${r}`,f=t(i);return f===i?r:f}function L(r){return{free:"default",starter:"blue",pro:"purple",enterprise:"gold"}[r]||"default"}function vt(r){const i=`tenant.tenantStatusLabels.${r}`,f=t(i);return f===i?r:f}function _t(r){return{active:"green",suspended:"orange",deleted:"default"}[r]||"default"}function kt(r){const i=`tenant.subStatusLabels.${r}`,f=t(i);return f===i?r:f}function St(r){return{active:"green",cancelled:"default",expired:"red",past_due:"orange"}[r]||"default"}function ht(r){const i=M.value.find(f=>f.id===r);return i?i.name:t("tenant.deletedTenant")}function Ct(r,i){return r==null?"—":i==="storage_bytes"?nt(r):String(r)}function Ft(r,i){return r==null?t("tenant.planCard.unlimited"):i==="storage_bytes"?nt(r):r.toLocaleString()}function qt({key:r}){r==="tenant"?E.value=!0:r==="quota"?(N.value=null,G.value=!0):r==="record"&&(B.value=!0)}async function U(){D.value=!0;try{const[r,i,f,Z,Pt]=await Promise.all([u.execute("tenant list --json",1e4).catch(()=>({output:""})),u.execute("tenant subscriptions --json",1e4).catch(()=>({output:""})),u.execute("tenant plans --json",8e3).catch(()=>({output:""})),u.execute("tenant metrics --json",8e3).catch(()=>({output:""})),u.execute("tenant stats --json",8e3).catch(()=>({output:""}))]);M.value=ft(r.output),K.value=pt(i.output),O.value=ct(f.output),R.value=mt(Z.output),P.value=yt(Pt.output)}catch(r){b.error(t("tenant.msg.loadFailed")+": "+(r?.message||r))}finally{D.value=!1}}async function wt(){const r=T.name.trim(),i=T.slug.trim();if(!r||!i){b.warning(t("tenant.msg.createFieldsEmpty"));return}if(!/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/.test(i)){b.warning(t("tenant.msg.slugInvalid"));return}$.value=!0;try{const f=[`tenant create "${r.replace(/"/g,'\\"')}" "${i.replace(/"/g,'\\"')}"`];f.push(`--plan ${T.plan}`),T.owner.trim()&&f.push(`--owner "${T.owner.trim().replace(/"/g,'\\"')}"`),f.push("--json");const{output:Z}=await u.execute(f.join(" "),1e4);if(/error|Error|失败/i.test(Z)&&!/"id"/.test(Z)){b.error(t("tenant.msg.createFailed")+": "+Z.slice(0,120));return}b.success(t("tenant.msg.createSuccess")),E.value=!1,lt(),await U()}catch(f){b.error(t("tenant.msg.createFailed")+": "+(f?.message||f))}finally{$.value=!1}}function xt(r){k.tenantId=r.id,k.plan=r.plan==="free"?"starter":r.plan,k.amount=null,k.duration=720*60*60*1e3,F.value=r.name,J.value=!0}async function At(){x.value=!0;try{const r=[`tenant subscribe ${k.tenantId}`];r.push(`--plan ${k.plan}`),k.amount!=null&&r.push(`--amount ${k.amount}`),k.duration&&r.push(`--duration-ms ${k.duration}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),1e4);if(/error|Error|失败/i.test(i)&&!/"id"/.test(i)){b.error(t("tenant.msg.subscribeFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.subscribeSuccess")),J.value=!1,ot(),Y.value="subscriptions",await U()}catch(r){b.error(t("tenant.msg.subscribeFailed")+": "+(r?.message||r))}finally{x.value=!1}}async function Tt(r,i){if(i!==r.plan)try{const{output:f}=await u.execute(`tenant configure ${r.id} --plan ${i} --json`,8e3);if(/error|Error/i.test(f)&&!/"id"/.test(f)){b.error(t("tenant.msg.planChangeFailed")+": "+f.slice(0,120));return}b.success(t("tenant.msg.planChangeSuccess",{plan:c(i)})),await U()}catch(f){b.error(t("tenant.msg.planChangeFailed")+": "+(f?.message||f))}}async function Lt(r,i){try{const{output:f}=await u.execute(`tenant configure ${r.id} --status ${i} --json`,8e3);if(/error|Error/i.test(f)&&!/"id"/.test(f)){b.error(t("tenant.msg.statusChangeFailed")+": "+f.slice(0,120));return}b.success(t(i==="active"?"tenant.msg.activated":"tenant.msg.suspended")),await U()}catch(f){b.error(t("tenant.msg.statusChangeFailed")+": "+(f?.message||f))}}async function zt(r){try{const{output:i}=await u.execute(`tenant delete ${r.id} --json`,8e3);if(/error|Error/i.test(i)&&!/deleted|removed/.test(i)){b.error(t("tenant.msg.deleteFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.deleteSuccess")),await U()}catch(i){b.error(t("tenant.msg.deleteFailed")+": "+(i?.message||i))}}async function Rt(r){try{const{output:i}=await u.execute(`tenant cancel ${r.tenantId}`,8e3);if(/error|Error/i.test(i)&&!/cancelled|cancel/i.test(i)){b.error(t("tenant.msg.cancelFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.cancelSuccess")),await U()}catch(i){b.error(t("tenant.msg.cancelFailed")+": "+(i?.message||i))}}async function It(){if(!q.tenantId){b.warning(t("tenant.msg.tenantEmpty"));return}j.value=!0,N.value=null;try{const r=[`tenant check-quota ${q.tenantId} ${q.metric}`];q.period.trim()&&r.push(`--period ${q.period.trim()}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),8e3),f=bt(i);if(!f){b.error(t("tenant.msg.checkFailed")+": "+i.slice(0,120));return}N.value=f,f.exceeded&&b.warning(t("tenant.msg.exceededWarning"))}catch(r){b.error(t("tenant.msg.checkFailed")+": "+(r?.message||r))}finally{j.value=!1}}async function Ot(){if(!S.tenantId){b.warning(t("tenant.msg.tenantEmpty"));return}if(S.value==null||S.value<0){b.warning(t("tenant.msg.valueInvalid"));return}Q.value=!0;try{const r=[`tenant record ${S.tenantId} ${S.metric} ${S.value}`];S.period.trim()&&r.push(`--period ${S.period.trim()}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),8e3);if(/error|Error/i.test(i)&&!/"id"|"tenant"/.test(i)){b.error(t("tenant.msg.recordFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.recordSuccess")),B.value=!1,rt(),await U()}catch(r){b.error(t("tenant.msg.recordFailed")+": "+(r?.message||r))}finally{Q.value=!1}}function lt(){T.name="",T.slug="",T.plan="free",T.owner=""}function ot(){k.tenantId="",k.plan="pro",k.amount=null,k.duration=720*60*60*1e3,F.value=""}function rt(){S.tenantId=null,S.metric="api_calls",S.value=1,S.period=""}function at(r){r.period||(r.period=gt())}at(q),at(S),it(U);const st={ws:u,t,loading:D,creating:$,subscribing:x,checking:j,recording:Q,tenants:M,subscriptions:K,plans:O,metrics:R,stats:P,activeTab:Y,planFilter:A,statusFilter:I,showCreateModal:E,showSubscribeModal:J,showQuotaModal:G,showRecordModal:B,createForm:T,subscribeForm:k,subscribeTargetName:F,quotaForm:q,recordForm:S,quotaResult:N,tenantColumns:V,subscriptionColumns:tt,filteredTenants:et,estimatedMrr:a,planLabel:c,planColor:L,tenantStatusLabel:vt,tenantStatusColor:_t,subStatusLabel:kt,subStatusColor:St,tenantName:ht,formatMetricValue:Ct,formatQuota:Ft,handleNewClick:qt,loadAll:U,createTenant:wt,openSubscribe:xt,subscribeTenant:At,changePlan:Tt,setStatus:Lt,deleteTenant:zt,cancelSubscription:Rt,checkQuota:It,recordUsage:Ot,resetCreateForm:lt,resetSubscribeForm:ot,resetRecordForm:rt,ensurePeriodDefault:at,ref:h,computed:X,onMounted:it,reactive:H,get ReloadOutlined(){return Kt},get PlusOutlined(){return Qt},get BankOutlined(){return Dt},get CreditCardOutlined(){return Bt},get DashboardOutlined(){return Et},get LineChartOutlined(){return Mt},get ApiOutlined(){return jt},get message(){return b},get useI18n(){return dt},get useWsStore(){return ut},get parsePlans(){return ct},get parseMetrics(){return mt},get parseTenants(){return ft},get parseSubscriptions(){return pt},get parseQuotaResult(){return bt},get parseStats(){return yt},get formatTenantTime(){return $t},get formatBytes(){return nt},get currentPeriod(){return gt},get PLAN_IDS(){return Jt},get TENANT_STATUSES(){return Vt},get KNOWN_METRICS(){return Wt}};return Object.defineProperty(st,"__isScriptSetup",{enumerable:!1,value:!0}),st}},ee={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={class:"page-title"},ne={class:"page-sub"},le={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},oe={class:"filter-bar"},re={style:{color:"var(--text-primary)","font-weight":"500"}},se={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},ie={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},ue={key:1,style:{color:"var(--text-muted)"}},de={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ce={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},me={style:{color:"var(--text-primary)","font-weight":"500"}},fe={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},pe={key:0,style:{color:"#722ed1","font-weight":"500"}},be={key:1,style:{color:"var(--text-muted)"}},ye={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ge={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},ve={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},_e={class:"plan-fee"},ke={key:0},Se={class:"plan-fee-unit"},he={key:1,style:{color:"#722ed1"}},Ce={class:"plan-section"},Fe={class:"plan-section-title"},qe={class:"plan-quota-label"},we={class:"plan-quota-value"},xe={class:"plan-section"},Ae={class:"plan-section-title"},Te={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Le={style:{"font-family":"monospace",color:"var(--text-primary)"}},ze={key:0},Re={style:{"font-family":"monospace"}},Ie={key:1,style:{"margin-top":"8px"}};function Oe(e,l,u,t,D,$){const x=v("a-button"),j=v("a-menu-item"),Q=v("a-menu"),M=v("a-dropdown"),K=v("a-space"),O=v("a-statistic"),R=v("a-card"),P=v("a-col"),Y=v("a-row"),A=v("a-tag"),I=v("a-radio-button"),E=v("a-radio-group"),J=v("a-popconfirm"),G=v("a-table"),B=v("a-tab-pane"),T=v("a-tabs"),k=v("a-input"),F=v("a-form-item"),q=v("a-select-option"),S=v("a-select"),N=v("a-form"),V=v("a-modal"),tt=v("a-input-number"),et=v("a-progress");return d(),p("div",null,[g("div",ee,[g("div",null,[g("h2",ae,s(e.$t("tenant.title")),1),g("p",ne,s(e.$t("tenant.subtitle")),1)]),o(K,null,{default:n(()=>[o(x,{loading:t.loading,onClick:t.loadAll},{icon:n(()=>[o(t.ReloadOutlined)]),default:n(()=>[m(" "+s(e.$t("tenant.refresh")),1)]),_:1},8,["loading"]),o(M,{trigger:["click"]},{overlay:n(()=>[o(Q,{onClick:t.handleNewClick},{default:n(()=>[o(j,{key:"tenant"},{default:n(()=>[o(t.BankOutlined),m(" "+s(e.$t("tenant.actions.tenant")),1)]),_:1}),o(j,{key:"quota"},{default:n(()=>[o(t.DashboardOutlined),m(" "+s(e.$t("tenant.actions.quota")),1)]),_:1}),o(j,{key:"record"},{default:n(()=>[o(t.LineChartOutlined),m(" "+s(e.$t("tenant.actions.record")),1)]),_:1})]),_:1})]),default:n(()=>[o(x,{type:"primary"},{icon:n(()=>[o(t.PlusOutlined)]),default:n(()=>[m(" "+s(e.$t("tenant.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),y(" Stat cards "),o(Y,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.total"),value:t.stats.tenantCount,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[o(t.BankOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.active"),value:t.stats.activeSubscriptions,"value-style":{color:t.stats.activeSubscriptions>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:n(()=>[o(t.CreditCardOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.mrr"),value:t.estimatedMrr,precision:0,prefix:"¥","value-style":{color:"#722ed1",fontSize:"20px"}},null,8,["title","value"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.apiCalls"),value:t.stats.totalUsage.api_calls,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[o(t.ApiOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(P,{xs:24,sm:8,lg:4},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.storage"),value:t.formatBytes(t.stats.totalUsage.storage_bytes),"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1})]),_:1}),y(" Plan distribution "),t.stats.tenantCount>0?(d(),_(R,{key:0,title:e.$t("tenant.plansCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[o(K,{size:[12,8],wrap:""},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(A,{key:a,color:t.planColor(a)},{default:n(()=>[m(s(t.planLabel(a))+": "+s(t.stats.byPlan[a]||0),1)]),_:2},1032,["color"]))),128)),g("span",le,s(e.$t("tenant.summarySuffix",{active:t.stats.byStatus.active,suspended:t.stats.byStatus.suspended,deleted:t.stats.byStatus.deleted})),1)]),_:1})]),_:1},8,["title"])):y("v-if",!0),y(" Tabs "),o(T,{activeKey:t.activeTab,"onUpdate:activeKey":l[2]||(l[2]=a=>t.activeTab=a),class:"tenant-tabs"},{default:n(()=>[y(" ── Tenants tab ───────────────────────────────────────────── "),o(B,{key:"tenants",tab:e.$t("tenant.tabs.tenants")},{default:n(()=>[g("div",oe,[o(E,{value:t.planFilter,"onUpdate:value":l[0]||(l[0]=a=>t.planFilter=a),size:"small"},{default:n(()=>[o(I,{value:""},{default:n(()=>[m(s(e.$t("tenant.filter.allPlans")),1)]),_:1}),(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(I,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(E,{value:t.statusFilter,"onUpdate:value":l[1]||(l[1]=a=>t.statusFilter=a),size:"small","button-style":"solid"},{default:n(()=>[o(I,{value:""},{default:n(()=>[m(s(e.$t("tenant.filter.allStatuses")),1)]),_:1}),(d(!0),p(C,null,w(t.TENANT_STATUSES,a=>(d(),_(I,{key:a,value:a},{default:n(()=>[m(s(t.tenantStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(G,{columns:t.tenantColumns,"data-source":t.filteredTenants,pagination:{pageSize:20,showTotal:a=>e.$t("tenant.table.totalSuffix",{n:a})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:c})=>[a.key==="name"?(d(),p(C,{key:0},[g("span",re,s(c.name),1),g("div",se,s(c.slug),1)],64)):y("v-if",!0),a.key==="plan"?(d(),_(A,{key:1,color:t.planColor(c.plan)},{default:n(()=>[m(s(t.planLabel(c.plan)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="status"?(d(),_(A,{key:2,color:t.tenantStatusColor(c.status)},{default:n(()=>[m(s(t.tenantStatusLabel(c.status)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="owner"?(d(),p(C,{key:3},[c.ownerId?(d(),p("span",ie,s(c.ownerId),1)):(d(),p("span",ue,"—"))],64)):y("v-if",!0),a.key==="createdAt"?(d(),p("span",de,s(t.formatTenantTime(c.createdAt)),1)):y("v-if",!0),a.key==="action"?(d(),p(C,{key:5},[o(x,{size:"small",type:"link",onClick:L=>t.openSubscribe(c)},{default:n(()=>[m(s(e.$t("tenant.table.actionSubscribe")),1)]),_:1},8,["onClick"]),o(M,{trigger:["click"]},{overlay:n(()=>[o(Q,{onClick:L=>t.changePlan(c,L.key)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,L=>(d(),_(j,{key:L,disabled:L===c.plan},{default:n(()=>[m(s(t.planLabel(L)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:n(()=>[o(x,{size:"small",type:"link"},{default:n(()=>[m(s(e.$t("tenant.table.actionPlanDropdown")),1)]),_:1})]),_:2},1024),c.status==="active"?(d(),_(x,{key:0,size:"small",type:"link",onClick:L=>t.setStatus(c,"suspended")},{default:n(()=>[m(s(e.$t("tenant.table.actionSuspend")),1)]),_:1},8,["onClick"])):c.status==="suspended"?(d(),_(x,{key:1,size:"small",type:"link",onClick:L=>t.setStatus(c,"active")},{default:n(()=>[m(s(e.$t("tenant.table.actionActivate")),1)]),_:1},8,["onClick"])):y("v-if",!0),c.status!=="deleted"?(d(),_(J,{key:2,title:e.$t("tenant.deleteConfirm.title"),"ok-text":e.$t("tenant.deleteConfirm.ok"),"cancel-text":e.$t("tenant.deleteConfirm.cancel"),onConfirm:L=>t.deleteTenant(c)},{default:n(()=>[o(x,{size:"small",type:"link",danger:""},{default:n(()=>[m(s(e.$t("tenant.deleteConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("v-if",!0)],64)):y("v-if",!0)]),emptyText:n(()=>[g("div",ce,[o(t.BankOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+s(t.planFilter||t.statusFilter?e.$t("tenant.table.emptyTenantsFiltered"):e.$t("tenant.table.emptyTenants")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Subscriptions tab ─────────────────────────────────────── "),o(B,{key:"subscriptions",tab:e.$t("tenant.tabs.subscriptions")},{default:n(()=>[o(G,{columns:t.subscriptionColumns,"data-source":t.subscriptions,pagination:{pageSize:20,showTotal:a=>e.$t("tenant.table.totalSuffix",{n:a})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:c})=>[a.key==="tenant"?(d(),p(C,{key:0},[g("span",me,s(t.tenantName(c.tenantId)),1),g("div",fe,s(c.tenantId.slice(0,8)),1)],64)):y("v-if",!0),a.key==="plan"?(d(),_(A,{key:1,color:t.planColor(c.plan)},{default:n(()=>[m(s(t.planLabel(c.plan)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="amount"?(d(),p(C,{key:2},[c.amount!=null?(d(),p("span",pe,"¥"+s(c.amount),1)):(d(),p("span",be,"—"))],64)):y("v-if",!0),a.key==="status"?(d(),_(A,{key:3,color:t.subStatusColor(c.status)},{default:n(()=>[m(s(t.subStatusLabel(c.status)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="startedAt"?(d(),p("span",ye,s(t.formatTenantTime(c.startedAt)),1)):y("v-if",!0),a.key==="expiresAt"?(d(),p("span",ge,s(t.formatTenantTime(c.expiresAt)),1)):y("v-if",!0),a.key==="action"?(d(),p(C,{key:6},[c.status==="active"?(d(),_(J,{key:0,title:e.$t("tenant.cancelConfirm.title"),"ok-text":e.$t("tenant.cancelConfirm.ok"),"cancel-text":e.$t("tenant.cancelConfirm.cancel"),onConfirm:L=>t.cancelSubscription(c)},{default:n(()=>[o(x,{size:"small",type:"link",danger:""},{default:n(()=>[m(s(e.$t("tenant.cancelConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("v-if",!0)],64)):y("v-if",!0)]),emptyText:n(()=>[g("div",ve,[o(t.CreditCardOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+s(e.$t("tenant.table.emptySubscriptions")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Plans catalogue tab ──────────────────────────────────── "),o(B,{key:"plans",tab:e.$t("tenant.tabs.plans")},{default:n(()=>[o(Y,{gutter:[16,16]},{default:n(()=>[(d(!0),p(C,null,w(t.plans,a=>(d(),_(P,{key:a.id,xs:24,sm:12,lg:6},{default:n(()=>[o(R,{title:a.name,size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[o(A,{color:t.planColor(a.id)},{default:n(()=>[m(s(a.id),1)]),_:2},1032,["color"])]),default:n(()=>[g("div",_e,[a.monthlyFee!=null?(d(),p("span",ke,[m("¥"+s(a.monthlyFee)+" ",1),g("span",Se,s(e.$t("tenant.planCard.monthlySuffix")),1)])):(d(),p("span",he,s(e.$t("tenant.planCard.contactSales")),1))]),g("div",Ce,[g("div",Fe,s(e.$t("tenant.planCard.quotas")),1),(d(!0),p(C,null,w(t.metrics,c=>(d(),p("div",{key:c.id,class:"plan-quota-row"},[g("span",qe,s(c.name),1),g("span",we,s(t.formatQuota(a.quotas?.[c.id],c.id)),1)]))),128))]),g("div",xe,[g("div",Ae,s(e.$t("tenant.planCard.features")),1),(d(!0),p(C,null,w(a.features,c=>(d(),_(A,{key:c,style:{"font-size":"10px",margin:"1px"}},{default:n(()=>[m(s(c),1)]),_:2},1024))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),y(" ── Create tenant modal ──────────────────────────────────── "),o(V,{open:t.showCreateModal,"onUpdate:open":l[7]||(l[7]=a=>t.showCreateModal=a),title:e.$t("tenant.create_modal.title"),"confirm-loading":t.creating,width:520,"ok-text":e.$t("tenant.create_modal.ok"),"cancel-text":e.$t("tenant.create_modal.cancel"),onOk:t.createTenant,onCancel:t.resetCreateForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.create_modal.nameLabel"),required:""},{default:n(()=>[o(k,{value:t.createForm.name,"onUpdate:value":l[3]||(l[3]=a=>t.createForm.name=a),placeholder:e.$t("tenant.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.slugLabel"),required:""},{default:n(()=>[o(k,{value:t.createForm.slug,"onUpdate:value":l[4]||(l[4]=a=>t.createForm.slug=a),placeholder:e.$t("tenant.create_modal.slugPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.planLabel")},{default:n(()=>[o(S,{value:t.createForm.plan,"onUpdate:value":l[5]||(l[5]=a=>t.createForm.plan=a)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.ownerLabel")},{default:n(()=>[o(k,{value:t.createForm.owner,"onUpdate:value":l[6]||(l[6]=a=>t.createForm.owner=a),placeholder:e.$t("tenant.create_modal.ownerPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Subscribe modal ──────────────────────────────────────── "),o(V,{open:t.showSubscribeModal,"onUpdate:open":l[11]||(l[11]=a=>t.showSubscribeModal=a),title:e.$t("tenant.subscribe_modal.title",{name:t.subscribeTargetName}),"confirm-loading":t.subscribing,width:500,"ok-text":e.$t("tenant.subscribe_modal.ok"),"cancel-text":e.$t("tenant.subscribe_modal.cancel"),onOk:t.subscribeTenant,onCancel:t.resetSubscribeForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.subscribe_modal.planLabel"),required:""},{default:n(()=>[o(S,{value:t.subscribeForm.plan,"onUpdate:value":l[8]||(l[8]=a=>t.subscribeForm.plan=a)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.subscribe_modal.amountLabel")},{default:n(()=>[o(tt,{value:t.subscribeForm.amount,"onUpdate:value":l[9]||(l[9]=a=>t.subscribeForm.amount=a),min:0,placeholder:e.$t("tenant.subscribe_modal.amountPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.subscribe_modal.durationLabel")},{default:n(()=>[o(E,{value:t.subscribeForm.duration,"onUpdate:value":l[10]||(l[10]=a=>t.subscribeForm.duration=a)},{default:n(()=>[o(I,{value:720*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration30")),1)]),_:1}),o(I,{value:2160*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration90")),1)]),_:1}),o(I,{value:365*24*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration365")),1)]),_:1})]),_:1},8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Quota check modal ────────────────────────────────────── "),o(V,{open:t.showQuotaModal,"onUpdate:open":l[15]||(l[15]=a=>t.showQuotaModal=a),title:e.$t("tenant.quota_modal.title"),"confirm-loading":t.checking,width:500,"ok-text":e.$t("tenant.quota_modal.ok"),"cancel-text":e.$t("tenant.quota_modal.cancel"),onOk:t.checkQuota},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.quota_modal.tenantLabel"),required:""},{default:n(()=>[o(S,{value:t.quotaForm.tenantId,"onUpdate:value":l[12]||(l[12]=a=>t.quotaForm.tenantId=a),"show-search":"",placeholder:e.$t("tenant.quota_modal.tenantPlaceholder")},{default:n(()=>[(d(!0),p(C,null,w(t.tenants,a=>(d(),_(q,{key:a.id,value:a.id},{default:n(()=>[m(s(a.name)+" ("+s(a.slug)+")",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.quota_modal.metricLabel"),required:""},{default:n(()=>[o(S,{value:t.quotaForm.metric,"onUpdate:value":l[13]||(l[13]=a=>t.quotaForm.metric=a)},{default:n(()=>[(d(!0),p(C,null,w(t.KNOWN_METRICS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.quota_modal.periodLabel")},{default:n(()=>[o(k,{value:t.quotaForm.period,"onUpdate:value":l[14]||(l[14]=a=>t.quotaForm.period=a),placeholder:e.$t("tenant.quota_modal.periodPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.quotaResult?(d(),_(R,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:n(()=>[o(O,{title:e.$t("tenant.quota_modal.resultTitle"),value:t.quotaResult.unlimited?e.$t("tenant.quota_modal.unlimited"):t.quotaResult.exceeded?e.$t("tenant.quota_modal.exceeded"):e.$t("tenant.quota_modal.ok_state"),"value-style":{color:t.quotaResult.exceeded?"#ff4d4f":t.quotaResult.unlimited?"#722ed1":"#52c41a"}},null,8,["title","value","value-style"]),g("div",Te,[g("div",null,[m(s(e.$t("tenant.quota_modal.planLine"))+" ",1),o(A,{color:t.planColor(t.quotaResult.plan)},{default:n(()=>[m(s(t.planLabel(t.quotaResult.plan)),1)]),_:1},8,["color"])]),g("div",null,s(e.$t("tenant.quota_modal.periodLine",{period:t.quotaResult.period})),1),g("div",null,[m(s(e.$t("tenant.quota_modal.usedLine"))+" ",1),g("span",Le,s(t.formatMetricValue(t.quotaResult.used,t.quotaResult.metric)),1)]),t.quotaResult.unlimited?y("v-if",!0):(d(),p("div",ze,[m(s(e.$t("tenant.quota_modal.limitLine"))+" ",1),g("span",Re,s(t.formatMetricValue(t.quotaResult.limit,t.quotaResult.metric)),1)])),!t.quotaResult.unlimited&&t.quotaResult.limit>0?(d(),p("div",Ie,[o(et,{percent:Math.min(100,Math.round(100*t.quotaResult.used/t.quotaResult.limit)),size:"small",status:t.quotaResult.exceeded?"exception":"active"},null,8,["percent","status"])])):y("v-if",!0)])]),_:1})):y("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Record usage modal ───────────────────────────────────── "),o(V,{open:t.showRecordModal,"onUpdate:open":l[20]||(l[20]=a=>t.showRecordModal=a),title:e.$t("tenant.record_modal.title"),"confirm-loading":t.recording,width:500,"ok-text":e.$t("tenant.record_modal.ok"),"cancel-text":e.$t("tenant.record_modal.cancel"),onOk:t.recordUsage,onCancel:t.resetRecordForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.record_modal.tenantLabel"),required:""},{default:n(()=>[o(S,{value:t.recordForm.tenantId,"onUpdate:value":l[16]||(l[16]=a=>t.recordForm.tenantId=a),"show-search":"",placeholder:e.$t("tenant.record_modal.tenantPlaceholder")},{default:n(()=>[(d(!0),p(C,null,w(t.tenants,a=>(d(),_(q,{key:a.id,value:a.id},{default:n(()=>[m(s(a.name)+" ("+s(a.slug)+")",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.metricLabel"),required:""},{default:n(()=>[o(S,{value:t.recordForm.metric,"onUpdate:value":l[17]||(l[17]=a=>t.recordForm.metric=a)},{default:n(()=>[(d(!0),p(C,null,w(t.KNOWN_METRICS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.valueLabel"),required:""},{default:n(()=>[o(tt,{value:t.recordForm.value,"onUpdate:value":l[18]||(l[18]=a=>t.recordForm.value=a),min:0,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.periodLabel")},{default:n(()=>[o(k,{value:t.recordForm.period,"onUpdate:value":l[19]||(l[19]=a=>t.recordForm.period=a),placeholder:e.$t("tenant.record_modal.periodPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const Me=Nt(te,[["render",Oe],["__scopeId","data-v-c93a3192"],["__file","/tmp/cc-web-panel-YJBpJd/repo/packages/web-panel/src/views/Tenant.vue"]]);export{Me as default};
1
+ import{I as v,J as p,U as g,R as s,c as o,K as n,V as y,S as _,o as it,a as H,b as X,r as h,P as d,Q as m,F as C,Z as w}from"./vendor-BvqAck49.js";import{_ as Nt,u as ut,b as dt,d as b}from"./index-CSnTUPQx.js";import{s as Ut}from"./community-parser-CO25nZFt.js";import{a8 as jt,aY as Mt,ac as Et,b4 as Bt,n as Dt,as as Qt,R as Kt}from"./icons-DP3uiYxy.js";function J(e){const l=Ut(e);if(!l)return null;try{return JSON.parse(l)}catch{}const u=l.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!u)return null;try{return JSON.parse(u[0])}catch{return null}}const Vt=Object.freeze(["free","starter","pro","enterprise"]),Wt=Object.freeze(["active","suspended","deleted"]),Jt=Object.freeze(["api_calls","storage_bytes","ai_requests"]);function z(e,l=0){return typeof e=="number"&&Number.isFinite(e)?e:l}function Gt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";if(!u)return null;const t=e.quotas&&typeof e.quotas=="object"?{...e.quotas}:{};return{key:u,id:u,name:String(e.name||u),monthlyFee:e.monthlyFee==null?null:z(e.monthlyFee,null),quotas:t,features:Array.isArray(e.features)?e.features.filter(D=>typeof D=="string"):[],_idx:l}}function ct(e){const l=J(e);return Array.isArray(l)?l.map(Gt).filter(Boolean):[]}function Yt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,name:String(e.name||u),unit:String(e.unit||""),_idx:l}:null}function mt(e){const l=J(e);return Array.isArray(l)?l.map(Yt).filter(Boolean):[]}function Zt(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,name:String(e.name||""),slug:String(e.slug||""),config:e.config??null,status:String(e.status||"active").toLowerCase(),plan:String(e.plan||"free").toLowerCase(),dbPath:e.dbPath||null,ownerId:e.ownerId||"",createdAt:e.createdAt??null,updatedAt:e.updatedAt??null,deletedAt:e.deletedAt??null,_idx:l}:null}function ft(e){const l=J(e);return Array.isArray(l)?l.map(Zt).filter(Boolean):[]}function Ht(e,l=0){if(!e||typeof e!="object")return null;const u=e.id||"";return u?{key:u,id:u,tenantId:String(e.tenantId||""),plan:String(e.plan||"free").toLowerCase(),status:String(e.status||"active").toLowerCase(),startedAt:e.startedAt??null,expiresAt:e.expiresAt??null,cancelledAt:e.cancelledAt??null,paymentMethod:e.paymentMethod||null,amount:e.amount==null?null:z(e.amount,null),createdAt:e.createdAt??null,_idx:l}:null}function pt(e){const l=J(e);return Array.isArray(l)?l.map(Ht).filter(Boolean):[]}function bt(e){const l=J(e);return!l||typeof l!="object"||Array.isArray(l)?null:{tenantId:String(l.tenantId||""),plan:String(l.plan||"free").toLowerCase(),metric:String(l.metric||""),period:String(l.period||""),limit:l.limit==null?null:z(l.limit,null),used:z(l.used,0),remaining:l.remaining==null?null:z(l.remaining,null),unlimited:!!l.unlimited,exceeded:!!l.exceeded}}const Xt={tenantCount:0,byStatus:{active:0,suspended:0,deleted:0},byPlan:{free:0,starter:0,pro:0,enterprise:0},subscriptionCount:0,activeSubscriptions:0,usageRecordCount:0,totalUsage:{api_calls:0,storage_bytes:0,ai_requests:0}};function yt(e){const l=JSON.parse(JSON.stringify(Xt)),u=J(e);if(!u||typeof u!="object"||Array.isArray(u))return l;if(l.tenantCount=z(u.tenantCount,0),l.subscriptionCount=z(u.subscriptionCount,0),l.activeSubscriptions=z(u.activeSubscriptions,0),l.usageRecordCount=z(u.usageRecordCount,0),u.byStatus&&typeof u.byStatus=="object")for(const t of Object.keys(l.byStatus))l.byStatus[t]=z(u.byStatus[t],0);if(u.byPlan&&typeof u.byPlan=="object")for(const t of Object.keys(l.byPlan))l.byPlan[t]=z(u.byPlan[t],0);if(u.totalUsage&&typeof u.totalUsage=="object")for(const t of Object.keys(l.totalUsage))l.totalUsage[t]=z(u.totalUsage[t],0);return l}function $t(e){if(e==null||e==="")return"—";const l=typeof e=="number"?new Date(e):new Date(String(e));return isNaN(l.getTime())?String(e):l.toLocaleString("zh-CN",{hour12:!1})}function nt(e){return typeof e!="number"||!Number.isFinite(e)||e<0?"—":e===0?"0":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(2)} GB`}function gt(e=new Date){const l=e.getFullYear(),u=String(e.getMonth()+1).padStart(2,"0");return`${l}-${u}`}const te={__name:"Tenant",setup(e,{expose:l}){l();const u=ut(),{t}=dt(),D=h(!1),$=h(!1),x=h(!1),j=h(!1),Q=h(!1),M=h([]),K=h([]),O=h([]),R=h([]),P=h({tenantCount:0,byStatus:{active:0,suspended:0,deleted:0},byPlan:{free:0,starter:0,pro:0,enterprise:0},subscriptionCount:0,activeSubscriptions:0,usageRecordCount:0,totalUsage:{api_calls:0,storage_bytes:0,ai_requests:0}}),G=h("tenants"),A=h(""),I=h(""),E=h(!1),V=h(!1),Y=h(!1),B=h(!1),T=H({name:"",slug:"",plan:"free",owner:""}),k=H({tenantId:"",plan:"pro",amount:null,duration:720*60*60*1e3}),F=h(""),q=H({tenantId:null,metric:"api_calls",period:""}),S=H({tenantId:null,metric:"api_calls",value:1,period:""}),N=h(null),W=X(()=>[{title:t("tenant.tenantCols.name"),key:"name"},{title:t("tenant.tenantCols.plan"),key:"plan",width:"110px"},{title:t("tenant.tenantCols.status"),key:"status",width:"100px"},{title:t("tenant.tenantCols.owner"),key:"owner",width:"160px"},{title:t("tenant.tenantCols.createdAt"),key:"createdAt",width:"160px"},{title:t("tenant.tenantCols.action"),key:"action",width:"280px"}]),tt=X(()=>[{title:t("tenant.subscriptionCols.tenant"),key:"tenant"},{title:t("tenant.subscriptionCols.plan"),key:"plan",width:"110px"},{title:t("tenant.subscriptionCols.amount"),key:"amount",width:"100px"},{title:t("tenant.subscriptionCols.status"),key:"status",width:"110px"},{title:t("tenant.subscriptionCols.startedAt"),key:"startedAt",width:"160px"},{title:t("tenant.subscriptionCols.expiresAt"),key:"expiresAt",width:"160px"},{title:t("tenant.subscriptionCols.action"),key:"action",width:"120px"}]),et=X(()=>{let r=M.value;return A.value&&(r=r.filter(i=>i.plan===A.value)),I.value&&(r=r.filter(i=>i.status===I.value)),r}),a=X(()=>K.value.filter(r=>r.status==="active"&&typeof r.amount=="number").reduce((r,i)=>r+i.amount,0));function c(r){const i=`tenant.planLabels.${r}`,f=t(i);return f===i?r:f}function L(r){return{free:"default",starter:"blue",pro:"purple",enterprise:"gold"}[r]||"default"}function vt(r){const i=`tenant.tenantStatusLabels.${r}`,f=t(i);return f===i?r:f}function _t(r){return{active:"green",suspended:"orange",deleted:"default"}[r]||"default"}function kt(r){const i=`tenant.subStatusLabels.${r}`,f=t(i);return f===i?r:f}function St(r){return{active:"green",cancelled:"default",expired:"red",past_due:"orange"}[r]||"default"}function ht(r){const i=M.value.find(f=>f.id===r);return i?i.name:t("tenant.deletedTenant")}function Ct(r,i){return r==null?"—":i==="storage_bytes"?nt(r):String(r)}function Ft(r,i){return r==null?t("tenant.planCard.unlimited"):i==="storage_bytes"?nt(r):r.toLocaleString()}function qt({key:r}){r==="tenant"?E.value=!0:r==="quota"?(N.value=null,Y.value=!0):r==="record"&&(B.value=!0)}async function U(){D.value=!0;try{const[r,i,f,Z,Pt]=await Promise.all([u.execute("tenant list --json",1e4).catch(()=>({output:""})),u.execute("tenant subscriptions --json",1e4).catch(()=>({output:""})),u.execute("tenant plans --json",8e3).catch(()=>({output:""})),u.execute("tenant metrics --json",8e3).catch(()=>({output:""})),u.execute("tenant stats --json",8e3).catch(()=>({output:""}))]);M.value=ft(r.output),K.value=pt(i.output),O.value=ct(f.output),R.value=mt(Z.output),P.value=yt(Pt.output)}catch(r){b.error(t("tenant.msg.loadFailed")+": "+(r?.message||r))}finally{D.value=!1}}async function wt(){const r=T.name.trim(),i=T.slug.trim();if(!r||!i){b.warning(t("tenant.msg.createFieldsEmpty"));return}if(!/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/.test(i)){b.warning(t("tenant.msg.slugInvalid"));return}$.value=!0;try{const f=[`tenant create "${r.replace(/"/g,'\\"')}" "${i.replace(/"/g,'\\"')}"`];f.push(`--plan ${T.plan}`),T.owner.trim()&&f.push(`--owner "${T.owner.trim().replace(/"/g,'\\"')}"`),f.push("--json");const{output:Z}=await u.execute(f.join(" "),1e4);if(/error|Error|失败/i.test(Z)&&!/"id"/.test(Z)){b.error(t("tenant.msg.createFailed")+": "+Z.slice(0,120));return}b.success(t("tenant.msg.createSuccess")),E.value=!1,lt(),await U()}catch(f){b.error(t("tenant.msg.createFailed")+": "+(f?.message||f))}finally{$.value=!1}}function xt(r){k.tenantId=r.id,k.plan=r.plan==="free"?"starter":r.plan,k.amount=null,k.duration=720*60*60*1e3,F.value=r.name,V.value=!0}async function At(){x.value=!0;try{const r=[`tenant subscribe ${k.tenantId}`];r.push(`--plan ${k.plan}`),k.amount!=null&&r.push(`--amount ${k.amount}`),k.duration&&r.push(`--duration-ms ${k.duration}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),1e4);if(/error|Error|失败/i.test(i)&&!/"id"/.test(i)){b.error(t("tenant.msg.subscribeFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.subscribeSuccess")),V.value=!1,ot(),G.value="subscriptions",await U()}catch(r){b.error(t("tenant.msg.subscribeFailed")+": "+(r?.message||r))}finally{x.value=!1}}async function Tt(r,i){if(i!==r.plan)try{const{output:f}=await u.execute(`tenant configure ${r.id} --plan ${i} --json`,8e3);if(/error|Error/i.test(f)&&!/"id"/.test(f)){b.error(t("tenant.msg.planChangeFailed")+": "+f.slice(0,120));return}b.success(t("tenant.msg.planChangeSuccess",{plan:c(i)})),await U()}catch(f){b.error(t("tenant.msg.planChangeFailed")+": "+(f?.message||f))}}async function Lt(r,i){try{const{output:f}=await u.execute(`tenant configure ${r.id} --status ${i} --json`,8e3);if(/error|Error/i.test(f)&&!/"id"/.test(f)){b.error(t("tenant.msg.statusChangeFailed")+": "+f.slice(0,120));return}b.success(t(i==="active"?"tenant.msg.activated":"tenant.msg.suspended")),await U()}catch(f){b.error(t("tenant.msg.statusChangeFailed")+": "+(f?.message||f))}}async function zt(r){try{const{output:i}=await u.execute(`tenant delete ${r.id} --json`,8e3);if(/error|Error/i.test(i)&&!/deleted|removed/.test(i)){b.error(t("tenant.msg.deleteFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.deleteSuccess")),await U()}catch(i){b.error(t("tenant.msg.deleteFailed")+": "+(i?.message||i))}}async function Rt(r){try{const{output:i}=await u.execute(`tenant cancel ${r.tenantId}`,8e3);if(/error|Error/i.test(i)&&!/cancelled|cancel/i.test(i)){b.error(t("tenant.msg.cancelFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.cancelSuccess")),await U()}catch(i){b.error(t("tenant.msg.cancelFailed")+": "+(i?.message||i))}}async function It(){if(!q.tenantId){b.warning(t("tenant.msg.tenantEmpty"));return}j.value=!0,N.value=null;try{const r=[`tenant check-quota ${q.tenantId} ${q.metric}`];q.period.trim()&&r.push(`--period ${q.period.trim()}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),8e3),f=bt(i);if(!f){b.error(t("tenant.msg.checkFailed")+": "+i.slice(0,120));return}N.value=f,f.exceeded&&b.warning(t("tenant.msg.exceededWarning"))}catch(r){b.error(t("tenant.msg.checkFailed")+": "+(r?.message||r))}finally{j.value=!1}}async function Ot(){if(!S.tenantId){b.warning(t("tenant.msg.tenantEmpty"));return}if(S.value==null||S.value<0){b.warning(t("tenant.msg.valueInvalid"));return}Q.value=!0;try{const r=[`tenant record ${S.tenantId} ${S.metric} ${S.value}`];S.period.trim()&&r.push(`--period ${S.period.trim()}`),r.push("--json");const{output:i}=await u.execute(r.join(" "),8e3);if(/error|Error/i.test(i)&&!/"id"|"tenant"/.test(i)){b.error(t("tenant.msg.recordFailed")+": "+i.slice(0,120));return}b.success(t("tenant.msg.recordSuccess")),B.value=!1,rt(),await U()}catch(r){b.error(t("tenant.msg.recordFailed")+": "+(r?.message||r))}finally{Q.value=!1}}function lt(){T.name="",T.slug="",T.plan="free",T.owner=""}function ot(){k.tenantId="",k.plan="pro",k.amount=null,k.duration=720*60*60*1e3,F.value=""}function rt(){S.tenantId=null,S.metric="api_calls",S.value=1,S.period=""}function at(r){r.period||(r.period=gt())}at(q),at(S),it(U);const st={ws:u,t,loading:D,creating:$,subscribing:x,checking:j,recording:Q,tenants:M,subscriptions:K,plans:O,metrics:R,stats:P,activeTab:G,planFilter:A,statusFilter:I,showCreateModal:E,showSubscribeModal:V,showQuotaModal:Y,showRecordModal:B,createForm:T,subscribeForm:k,subscribeTargetName:F,quotaForm:q,recordForm:S,quotaResult:N,tenantColumns:W,subscriptionColumns:tt,filteredTenants:et,estimatedMrr:a,planLabel:c,planColor:L,tenantStatusLabel:vt,tenantStatusColor:_t,subStatusLabel:kt,subStatusColor:St,tenantName:ht,formatMetricValue:Ct,formatQuota:Ft,handleNewClick:qt,loadAll:U,createTenant:wt,openSubscribe:xt,subscribeTenant:At,changePlan:Tt,setStatus:Lt,deleteTenant:zt,cancelSubscription:Rt,checkQuota:It,recordUsage:Ot,resetCreateForm:lt,resetSubscribeForm:ot,resetRecordForm:rt,ensurePeriodDefault:at,ref:h,computed:X,onMounted:it,reactive:H,get ReloadOutlined(){return Kt},get PlusOutlined(){return Qt},get BankOutlined(){return Dt},get CreditCardOutlined(){return Bt},get DashboardOutlined(){return Et},get LineChartOutlined(){return Mt},get ApiOutlined(){return jt},get message(){return b},get useI18n(){return dt},get useWsStore(){return ut},get parsePlans(){return ct},get parseMetrics(){return mt},get parseTenants(){return ft},get parseSubscriptions(){return pt},get parseQuotaResult(){return bt},get parseStats(){return yt},get formatTenantTime(){return $t},get formatBytes(){return nt},get currentPeriod(){return gt},get PLAN_IDS(){return Vt},get TENANT_STATUSES(){return Wt},get KNOWN_METRICS(){return Jt}};return Object.defineProperty(st,"__isScriptSetup",{enumerable:!1,value:!0}),st}},ee={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={class:"page-title"},ne={class:"page-sub"},le={style:{color:"var(--text-secondary)","font-size":"12px","margin-left":"8px"}},oe={class:"filter-bar"},re={style:{color:"var(--text-primary)","font-weight":"500"}},se={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px","font-family":"monospace"}},ie={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},ue={key:1,style:{color:"var(--text-muted)"}},de={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ce={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},me={style:{color:"var(--text-primary)","font-weight":"500"}},fe={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},pe={key:0,style:{color:"#722ed1","font-weight":"500"}},be={key:1,style:{color:"var(--text-muted)"}},ye={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ge={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},ve={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},_e={class:"plan-fee"},ke={key:0},Se={class:"plan-fee-unit"},he={key:1,style:{color:"#722ed1"}},Ce={class:"plan-section"},Fe={class:"plan-section-title"},qe={class:"plan-quota-label"},we={class:"plan-quota-value"},xe={class:"plan-section"},Ae={class:"plan-section-title"},Te={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Le={style:{"font-family":"monospace",color:"var(--text-primary)"}},ze={key:0},Re={style:{"font-family":"monospace"}},Ie={key:1,style:{"margin-top":"8px"}};function Oe(e,l,u,t,D,$){const x=v("a-button"),j=v("a-menu-item"),Q=v("a-menu"),M=v("a-dropdown"),K=v("a-space"),O=v("a-statistic"),R=v("a-card"),P=v("a-col"),G=v("a-row"),A=v("a-tag"),I=v("a-radio-button"),E=v("a-radio-group"),V=v("a-popconfirm"),Y=v("a-table"),B=v("a-tab-pane"),T=v("a-tabs"),k=v("a-input"),F=v("a-form-item"),q=v("a-select-option"),S=v("a-select"),N=v("a-form"),W=v("a-modal"),tt=v("a-input-number"),et=v("a-progress");return d(),p("div",null,[g("div",ee,[g("div",null,[g("h2",ae,s(e.$t("tenant.title")),1),g("p",ne,s(e.$t("tenant.subtitle")),1)]),o(K,null,{default:n(()=>[o(x,{loading:t.loading,onClick:t.loadAll},{icon:n(()=>[o(t.ReloadOutlined)]),default:n(()=>[m(" "+s(e.$t("tenant.refresh")),1)]),_:1},8,["loading"]),o(M,{trigger:["click"]},{overlay:n(()=>[o(Q,{onClick:t.handleNewClick},{default:n(()=>[o(j,{key:"tenant"},{default:n(()=>[o(t.BankOutlined),m(" "+s(e.$t("tenant.actions.tenant")),1)]),_:1}),o(j,{key:"quota"},{default:n(()=>[o(t.DashboardOutlined),m(" "+s(e.$t("tenant.actions.quota")),1)]),_:1}),o(j,{key:"record"},{default:n(()=>[o(t.LineChartOutlined),m(" "+s(e.$t("tenant.actions.record")),1)]),_:1})]),_:1})]),default:n(()=>[o(x,{type:"primary"},{icon:n(()=>[o(t.PlusOutlined)]),default:n(()=>[m(" "+s(e.$t("tenant.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),y(" Stat cards "),o(G,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.total"),value:t.stats.tenantCount,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[o(t.BankOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.active"),value:t.stats.activeSubscriptions,"value-style":{color:t.stats.activeSubscriptions>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:n(()=>[o(t.CreditCardOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.mrr"),value:t.estimatedMrr,precision:0,prefix:"¥","value-style":{color:"#722ed1",fontSize:"20px"}},null,8,["title","value"])]),_:1})]),_:1}),o(P,{xs:12,sm:8,lg:5},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.apiCalls"),value:t.stats.totalUsage.api_calls,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[o(t.ApiOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(P,{xs:24,sm:8,lg:4},{default:n(()=>[o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(O,{title:e.$t("tenant.stats.storage"),value:t.formatBytes(t.stats.totalUsage.storage_bytes),"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1})]),_:1}),y(" Plan distribution "),t.stats.tenantCount>0?(d(),_(R,{key:0,title:e.$t("tenant.plansCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[o(K,{size:[12,8],wrap:""},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(A,{key:a,color:t.planColor(a)},{default:n(()=>[m(s(t.planLabel(a))+": "+s(t.stats.byPlan[a]||0),1)]),_:2},1032,["color"]))),128)),g("span",le,s(e.$t("tenant.summarySuffix",{active:t.stats.byStatus.active,suspended:t.stats.byStatus.suspended,deleted:t.stats.byStatus.deleted})),1)]),_:1})]),_:1},8,["title"])):y("v-if",!0),y(" Tabs "),o(T,{activeKey:t.activeTab,"onUpdate:activeKey":l[2]||(l[2]=a=>t.activeTab=a),class:"tenant-tabs"},{default:n(()=>[y(" ── Tenants tab ───────────────────────────────────────────── "),o(B,{key:"tenants",tab:e.$t("tenant.tabs.tenants")},{default:n(()=>[g("div",oe,[o(E,{value:t.planFilter,"onUpdate:value":l[0]||(l[0]=a=>t.planFilter=a),size:"small"},{default:n(()=>[o(I,{value:""},{default:n(()=>[m(s(e.$t("tenant.filter.allPlans")),1)]),_:1}),(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(I,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(E,{value:t.statusFilter,"onUpdate:value":l[1]||(l[1]=a=>t.statusFilter=a),size:"small","button-style":"solid"},{default:n(()=>[o(I,{value:""},{default:n(()=>[m(s(e.$t("tenant.filter.allStatuses")),1)]),_:1}),(d(!0),p(C,null,w(t.TENANT_STATUSES,a=>(d(),_(I,{key:a,value:a},{default:n(()=>[m(s(t.tenantStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(Y,{columns:t.tenantColumns,"data-source":t.filteredTenants,pagination:{pageSize:20,showTotal:a=>e.$t("tenant.table.totalSuffix",{n:a})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:c})=>[a.key==="name"?(d(),p(C,{key:0},[g("span",re,s(c.name),1),g("div",se,s(c.slug),1)],64)):y("v-if",!0),a.key==="plan"?(d(),_(A,{key:1,color:t.planColor(c.plan)},{default:n(()=>[m(s(t.planLabel(c.plan)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="status"?(d(),_(A,{key:2,color:t.tenantStatusColor(c.status)},{default:n(()=>[m(s(t.tenantStatusLabel(c.status)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="owner"?(d(),p(C,{key:3},[c.ownerId?(d(),p("span",ie,s(c.ownerId),1)):(d(),p("span",ue,"—"))],64)):y("v-if",!0),a.key==="createdAt"?(d(),p("span",de,s(t.formatTenantTime(c.createdAt)),1)):y("v-if",!0),a.key==="action"?(d(),p(C,{key:5},[o(x,{size:"small",type:"link",onClick:L=>t.openSubscribe(c)},{default:n(()=>[m(s(e.$t("tenant.table.actionSubscribe")),1)]),_:1},8,["onClick"]),o(M,{trigger:["click"]},{overlay:n(()=>[o(Q,{onClick:L=>t.changePlan(c,L.key)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,L=>(d(),_(j,{key:L,disabled:L===c.plan},{default:n(()=>[m(s(t.planLabel(L)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:n(()=>[o(x,{size:"small",type:"link"},{default:n(()=>[m(s(e.$t("tenant.table.actionPlanDropdown")),1)]),_:1})]),_:2},1024),c.status==="active"?(d(),_(x,{key:0,size:"small",type:"link",onClick:L=>t.setStatus(c,"suspended")},{default:n(()=>[m(s(e.$t("tenant.table.actionSuspend")),1)]),_:1},8,["onClick"])):c.status==="suspended"?(d(),_(x,{key:1,size:"small",type:"link",onClick:L=>t.setStatus(c,"active")},{default:n(()=>[m(s(e.$t("tenant.table.actionActivate")),1)]),_:1},8,["onClick"])):y("v-if",!0),c.status!=="deleted"?(d(),_(V,{key:2,title:e.$t("tenant.deleteConfirm.title"),"ok-text":e.$t("tenant.deleteConfirm.ok"),"cancel-text":e.$t("tenant.deleteConfirm.cancel"),onConfirm:L=>t.deleteTenant(c)},{default:n(()=>[o(x,{size:"small",type:"link",danger:""},{default:n(()=>[m(s(e.$t("tenant.deleteConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("v-if",!0)],64)):y("v-if",!0)]),emptyText:n(()=>[g("div",ce,[o(t.BankOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+s(t.planFilter||t.statusFilter?e.$t("tenant.table.emptyTenantsFiltered"):e.$t("tenant.table.emptyTenants")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Subscriptions tab ─────────────────────────────────────── "),o(B,{key:"subscriptions",tab:e.$t("tenant.tabs.subscriptions")},{default:n(()=>[o(Y,{columns:t.subscriptionColumns,"data-source":t.subscriptions,pagination:{pageSize:20,showTotal:a=>e.$t("tenant.table.totalSuffix",{n:a})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:c})=>[a.key==="tenant"?(d(),p(C,{key:0},[g("span",me,s(t.tenantName(c.tenantId)),1),g("div",fe,s(c.tenantId.slice(0,8)),1)],64)):y("v-if",!0),a.key==="plan"?(d(),_(A,{key:1,color:t.planColor(c.plan)},{default:n(()=>[m(s(t.planLabel(c.plan)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="amount"?(d(),p(C,{key:2},[c.amount!=null?(d(),p("span",pe,"¥"+s(c.amount),1)):(d(),p("span",be,"—"))],64)):y("v-if",!0),a.key==="status"?(d(),_(A,{key:3,color:t.subStatusColor(c.status)},{default:n(()=>[m(s(t.subStatusLabel(c.status)),1)]),_:2},1032,["color"])):y("v-if",!0),a.key==="startedAt"?(d(),p("span",ye,s(t.formatTenantTime(c.startedAt)),1)):y("v-if",!0),a.key==="expiresAt"?(d(),p("span",ge,s(t.formatTenantTime(c.expiresAt)),1)):y("v-if",!0),a.key==="action"?(d(),p(C,{key:6},[c.status==="active"?(d(),_(V,{key:0,title:e.$t("tenant.cancelConfirm.title"),"ok-text":e.$t("tenant.cancelConfirm.ok"),"cancel-text":e.$t("tenant.cancelConfirm.cancel"),onConfirm:L=>t.cancelSubscription(c)},{default:n(()=>[o(x,{size:"small",type:"link",danger:""},{default:n(()=>[m(s(e.$t("tenant.cancelConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("v-if",!0)],64)):y("v-if",!0)]),emptyText:n(()=>[g("div",ve,[o(t.CreditCardOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),m(" "+s(e.$t("tenant.table.emptySubscriptions")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Plans catalogue tab ──────────────────────────────────── "),o(B,{key:"plans",tab:e.$t("tenant.tabs.plans")},{default:n(()=>[o(G,{gutter:[16,16]},{default:n(()=>[(d(!0),p(C,null,w(t.plans,a=>(d(),_(P,{key:a.id,xs:24,sm:12,lg:6},{default:n(()=>[o(R,{title:a.name,size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[o(A,{color:t.planColor(a.id)},{default:n(()=>[m(s(a.id),1)]),_:2},1032,["color"])]),default:n(()=>[g("div",_e,[a.monthlyFee!=null?(d(),p("span",ke,[m("¥"+s(a.monthlyFee)+" ",1),g("span",Se,s(e.$t("tenant.planCard.monthlySuffix")),1)])):(d(),p("span",he,s(e.$t("tenant.planCard.contactSales")),1))]),g("div",Ce,[g("div",Fe,s(e.$t("tenant.planCard.quotas")),1),(d(!0),p(C,null,w(t.metrics,c=>(d(),p("div",{key:c.id,class:"plan-quota-row"},[g("span",qe,s(c.name),1),g("span",we,s(t.formatQuota(a.quotas?.[c.id],c.id)),1)]))),128))]),g("div",xe,[g("div",Ae,s(e.$t("tenant.planCard.features")),1),(d(!0),p(C,null,w(a.features,c=>(d(),_(A,{key:c,style:{"font-size":"10px",margin:"1px"}},{default:n(()=>[m(s(c),1)]),_:2},1024))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),y(" ── Create tenant modal ──────────────────────────────────── "),o(W,{open:t.showCreateModal,"onUpdate:open":l[7]||(l[7]=a=>t.showCreateModal=a),title:e.$t("tenant.create_modal.title"),"confirm-loading":t.creating,width:520,"ok-text":e.$t("tenant.create_modal.ok"),"cancel-text":e.$t("tenant.create_modal.cancel"),onOk:t.createTenant,onCancel:t.resetCreateForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.create_modal.nameLabel"),required:""},{default:n(()=>[o(k,{value:t.createForm.name,"onUpdate:value":l[3]||(l[3]=a=>t.createForm.name=a),placeholder:e.$t("tenant.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.slugLabel"),required:""},{default:n(()=>[o(k,{value:t.createForm.slug,"onUpdate:value":l[4]||(l[4]=a=>t.createForm.slug=a),placeholder:e.$t("tenant.create_modal.slugPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.planLabel")},{default:n(()=>[o(S,{value:t.createForm.plan,"onUpdate:value":l[5]||(l[5]=a=>t.createForm.plan=a)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.create_modal.ownerLabel")},{default:n(()=>[o(k,{value:t.createForm.owner,"onUpdate:value":l[6]||(l[6]=a=>t.createForm.owner=a),placeholder:e.$t("tenant.create_modal.ownerPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Subscribe modal ──────────────────────────────────────── "),o(W,{open:t.showSubscribeModal,"onUpdate:open":l[11]||(l[11]=a=>t.showSubscribeModal=a),title:e.$t("tenant.subscribe_modal.title",{name:t.subscribeTargetName}),"confirm-loading":t.subscribing,width:500,"ok-text":e.$t("tenant.subscribe_modal.ok"),"cancel-text":e.$t("tenant.subscribe_modal.cancel"),onOk:t.subscribeTenant,onCancel:t.resetSubscribeForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.subscribe_modal.planLabel"),required:""},{default:n(()=>[o(S,{value:t.subscribeForm.plan,"onUpdate:value":l[8]||(l[8]=a=>t.subscribeForm.plan=a)},{default:n(()=>[(d(!0),p(C,null,w(t.PLAN_IDS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(t.planLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.subscribe_modal.amountLabel")},{default:n(()=>[o(tt,{value:t.subscribeForm.amount,"onUpdate:value":l[9]||(l[9]=a=>t.subscribeForm.amount=a),min:0,placeholder:e.$t("tenant.subscribe_modal.amountPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.subscribe_modal.durationLabel")},{default:n(()=>[o(E,{value:t.subscribeForm.duration,"onUpdate:value":l[10]||(l[10]=a=>t.subscribeForm.duration=a)},{default:n(()=>[o(I,{value:720*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration30")),1)]),_:1}),o(I,{value:2160*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration90")),1)]),_:1}),o(I,{value:365*24*60*60*1e3},{default:n(()=>[m(s(e.$t("tenant.subscribe_modal.duration365")),1)]),_:1})]),_:1},8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Quota check modal ────────────────────────────────────── "),o(W,{open:t.showQuotaModal,"onUpdate:open":l[15]||(l[15]=a=>t.showQuotaModal=a),title:e.$t("tenant.quota_modal.title"),"confirm-loading":t.checking,width:500,"ok-text":e.$t("tenant.quota_modal.ok"),"cancel-text":e.$t("tenant.quota_modal.cancel"),onOk:t.checkQuota},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.quota_modal.tenantLabel"),required:""},{default:n(()=>[o(S,{value:t.quotaForm.tenantId,"onUpdate:value":l[12]||(l[12]=a=>t.quotaForm.tenantId=a),"show-search":"",placeholder:e.$t("tenant.quota_modal.tenantPlaceholder")},{default:n(()=>[(d(!0),p(C,null,w(t.tenants,a=>(d(),_(q,{key:a.id,value:a.id},{default:n(()=>[m(s(a.name)+" ("+s(a.slug)+")",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.quota_modal.metricLabel"),required:""},{default:n(()=>[o(S,{value:t.quotaForm.metric,"onUpdate:value":l[13]||(l[13]=a=>t.quotaForm.metric=a)},{default:n(()=>[(d(!0),p(C,null,w(t.KNOWN_METRICS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.quota_modal.periodLabel")},{default:n(()=>[o(k,{value:t.quotaForm.period,"onUpdate:value":l[14]||(l[14]=a=>t.quotaForm.period=a),placeholder:e.$t("tenant.quota_modal.periodPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.quotaResult?(d(),_(R,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:n(()=>[o(O,{title:e.$t("tenant.quota_modal.resultTitle"),value:t.quotaResult.unlimited?e.$t("tenant.quota_modal.unlimited"):t.quotaResult.exceeded?e.$t("tenant.quota_modal.exceeded"):e.$t("tenant.quota_modal.ok_state"),"value-style":{color:t.quotaResult.exceeded?"#ff4d4f":t.quotaResult.unlimited?"#722ed1":"#52c41a"}},null,8,["title","value","value-style"]),g("div",Te,[g("div",null,[m(s(e.$t("tenant.quota_modal.planLine"))+" ",1),o(A,{color:t.planColor(t.quotaResult.plan)},{default:n(()=>[m(s(t.planLabel(t.quotaResult.plan)),1)]),_:1},8,["color"])]),g("div",null,s(e.$t("tenant.quota_modal.periodLine",{period:t.quotaResult.period})),1),g("div",null,[m(s(e.$t("tenant.quota_modal.usedLine"))+" ",1),g("span",Le,s(t.formatMetricValue(t.quotaResult.used,t.quotaResult.metric)),1)]),t.quotaResult.unlimited?y("v-if",!0):(d(),p("div",ze,[m(s(e.$t("tenant.quota_modal.limitLine"))+" ",1),g("span",Re,s(t.formatMetricValue(t.quotaResult.limit,t.quotaResult.metric)),1)])),!t.quotaResult.unlimited&&t.quotaResult.limit>0?(d(),p("div",Ie,[o(et,{percent:Math.min(100,Math.round(100*t.quotaResult.used/t.quotaResult.limit)),size:"small",status:t.quotaResult.exceeded?"exception":"active"},null,8,["percent","status"])])):y("v-if",!0)])]),_:1})):y("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),y(" ── Record usage modal ───────────────────────────────────── "),o(W,{open:t.showRecordModal,"onUpdate:open":l[20]||(l[20]=a=>t.showRecordModal=a),title:e.$t("tenant.record_modal.title"),"confirm-loading":t.recording,width:500,"ok-text":e.$t("tenant.record_modal.ok"),"cancel-text":e.$t("tenant.record_modal.cancel"),onOk:t.recordUsage,onCancel:t.resetRecordForm},{default:n(()=>[o(N,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(F,{label:e.$t("tenant.record_modal.tenantLabel"),required:""},{default:n(()=>[o(S,{value:t.recordForm.tenantId,"onUpdate:value":l[16]||(l[16]=a=>t.recordForm.tenantId=a),"show-search":"",placeholder:e.$t("tenant.record_modal.tenantPlaceholder")},{default:n(()=>[(d(!0),p(C,null,w(t.tenants,a=>(d(),_(q,{key:a.id,value:a.id},{default:n(()=>[m(s(a.name)+" ("+s(a.slug)+")",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.metricLabel"),required:""},{default:n(()=>[o(S,{value:t.recordForm.metric,"onUpdate:value":l[17]||(l[17]=a=>t.recordForm.metric=a)},{default:n(()=>[(d(!0),p(C,null,w(t.KNOWN_METRICS,a=>(d(),_(q,{key:a,value:a},{default:n(()=>[m(s(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.valueLabel"),required:""},{default:n(()=>[o(tt,{value:t.recordForm.value,"onUpdate:value":l[18]||(l[18]=a=>t.recordForm.value=a),min:0,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(F,{label:e.$t("tenant.record_modal.periodLabel")},{default:n(()=>[o(k,{value:t.recordForm.period,"onUpdate:value":l[19]||(l[19]=a=>t.recordForm.period=a),placeholder:e.$t("tenant.record_modal.periodPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const Me=Nt(te,[["render",Oe],["__scopeId","data-v-c93a3192"],["__file","/tmp/cc-web-panel-wQGCAD/repo/packages/web-panel/src/views/Tenant.vue"]]);export{Me as default};
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./xterm-BZcWGsqw.js","./markdown-CsiA8-E5.js","./markdown-Dfs9RUU9.css","./addon-fit-CK6X9sAG.js","./xterm-DFuMZ0ql.css"])))=>i.map(i=>d[i]);
2
+ import{u as fe,_ as me,d as V,e as U}from"./index-CSnTUPQx.js";import{I as z,J as x,U as _,Q as P,S as J,K as T,V as R,c as A,F as K,Z as Y,R as E,o as Z,f as H,w as $,n as q,b as ee,r as S,P as y,_ as ve,a2 as we,a3 as he,a4 as _e}from"./vendor-BvqAck49.js";import{R as ye,b as pe,as as ge}from"./icons-DP3uiYxy.js";const k=new Map,C=new Map,N=new Set,F=new Set;let te=!1;function xe(c){te||(te=!0,c.onMessage(o=>{if(!(!o||typeof o.type!="string")){if(o.type==="terminal.stdout"){const{sessionId:s,data:e,seq:i}=o.payload||{};if(!s)return;let w;try{const d=atob(e||""),f=new Uint8Array(d.length);for(let n=0;n<d.length;n++)f[n]=d.charCodeAt(n);w=new TextDecoder("utf-8").decode(f)}catch{w=""}const u={sessionId:s,data:w,seq:i};k.get(s)?.forEach(d=>d(u)),N.forEach(d=>d(u))}else if(o.type==="terminal.exit"){const{sessionId:s,exitCode:e,signal:i}=o.payload||{};if(!s)return;const w={sessionId:s,exitCode:e,signal:i};C.get(s)?.forEach(u=>u(w)),F.forEach(u=>u(w))}}}))}function ne(c){const o=new TextEncoder().encode(c);let s="";for(let e=0;e<o.length;e++)s+=String.fromCharCode(o[e]);return btoa(s)}function ae(c){const o=atob(c||""),s=new Uint8Array(o.length);for(let e=0;e<o.length;e++)s[e]=o.charCodeAt(e);return new TextDecoder("utf-8").decode(s)}function oe(){const c=fe();xe(c);async function o(n={}){const a=await c.sendRaw({type:"terminal.create",payload:{shell:n.shell,cwd:n.cwd,env:n.env,cols:n.cols,rows:n.rows}});if(a.ok===!1)throw new Error(a.error||"terminal_create_failed");return a.result??a}async function s(){const n=await c.sendRaw({type:"terminal.list",payload:{}});if(n.ok===!1)throw new Error(n.error||"terminal_list_failed");const a=n.result??n;return Array.isArray(a.sessions)?a.sessions:[]}async function e(n,a){const r=await c.sendRaw({type:"terminal.stdin",payload:{sessionId:n,data:ne(String(a))}});if(r.ok===!1)throw new Error(r.error||"terminal_stdin_failed");return r.result??r}async function i(n,a,r){const h=await c.sendRaw({type:"terminal.resize",payload:{sessionId:n,cols:a,rows:r}});if(h.ok===!1)throw new Error(h.error||"terminal_resize_failed");return h.result??h}async function w(n){const a=await c.sendRaw({type:"terminal.close",payload:{sessionId:n}});if(a.ok===!1)throw new Error(a.error||"terminal_close_failed");return a.result??a}async function u(n,a=0){const r=await c.sendRaw({type:"terminal.history",payload:{sessionId:n,fromSeq:a}});if(r.ok===!1)throw new Error(r.error||"terminal_history_failed");const h=r.result??r;return{truncated:!!h.truncated,chunks:(h.chunks||[]).map(D=>({seq:D.seq,data:ae(D.data)}))}}function d(n,a){return n?(k.has(n)||k.set(n,new Set),k.get(n).add(a),()=>{k.get(n)?.delete(a),k.get(n)?.size===0&&k.delete(n)}):(N.add(a),()=>N.delete(a))}function f(n,a){return n?(C.has(n)||C.set(n,new Set),C.get(n).add(a),()=>{C.get(n)?.delete(a),C.get(n)?.size===0&&C.delete(n)}):(F.add(a),()=>F.delete(a))}return{create:o,list:s,stdin:e,resize:i,close:w,history:u,onStdout:d,onExit:f,_internal:{stdoutSubs:k,exitSubs:C,toBase64Utf8:ne,fromBase64Utf8:ae}}}const Se={__name:"Terminal",setup(c,{expose:o}){o();const s=oe(),e=S([]),i=S(null),w=S("pwsh"),u=S(!1),d=S(!1),f=S(""),n=S(""),a=S([]),r=[{value:"pwsh",label:"PowerShell"},{value:"cmd",label:"CMD"},{value:"bash",label:"Bash"},{value:"wsl",label:"WSL"}],h=ee(()=>e.value.find(t=>t.id===i.value));function D(t){return t?t.slice(0,8):""}let O=null,M=null;async function I(){if(O)return{xtermMod:O,fitAddonMod:M};try{O=await U(()=>import("./xterm-BZcWGsqw.js").then(t=>t.x),__vite__mapDeps([0,1,2]),import.meta.url),M=await U(()=>import("./addon-fit-CK6X9sAG.js").then(t=>t.a),__vite__mapDeps([3,1,2]),import.meta.url),await U(()=>Promise.resolve({}),__vite__mapDeps([4]),import.meta.url)}catch(t){throw n.value="xterm 资源加载失败:"+(t?.message||"未知错误"),t}return{xtermMod:O,fitAddonMod:M}}async function B(t){await q();const{xtermMod:l,fitAddonMod:p}=await I(),b=a.value.find(v=>v?.dataset?.sessionId===t.id);if(!b)return;const m=new l.Terminal({cursorBlink:!0,fontFamily:'Consolas, "Courier New", monospace',fontSize:13,theme:{background:"#1e1e1e",foreground:"#d4d4d4"},convertEol:!1}),L=new p.FitAddon;m.loadAddon(L),m.open(b);try{L.fit()}catch{}t.xterm=m,t.fitAddon=L;const ie=m.onData(v=>{s.stdin(t.id,v).catch(g=>{String(g?.message||"").includes("dangerous_keyword_blocked")?V.warning("该命令被桌面端拦截(高危关键字)"):V.error("stdin 失败: "+(g?.message||g))})}),ce=s.onStdout(t.id,({data:v,seq:g})=>{t.lastSeq=g,m.write(v)}),de=s.onExit(t.id,({exitCode:v,signal:g})=>{t.alive=!1,t.exitCode=v,t.signal=g,m.writeln(`\r
3
+ \x1B[33m[session exited, code=${v}, signal=${g??"-"}]\x1B[0m`)});t.offs=()=>{try{ie.dispose?.()}catch{}ce(),de()};try{const{chunks:v,truncated:g}=await s.history(t.id,0);g&&m.writeln("\x1B[2m[history truncated — earlier output was evicted]\x1B[0m");for(const G of v)m.write(G.data),t.lastSeq=G.seq}catch(v){m.writeln(`\x1B[31m[history fetch failed: ${v?.message||v}]\x1B[0m`)}const j=new ResizeObserver(()=>{try{L.fit(),s.resize(t.id,m.cols,m.rows).catch(()=>{})}catch{}});j.observe(b);const ue=t.offs;t.offs=()=>{try{j.disconnect()}catch{}ue()}}async function re(){u.value=!0,f.value="";try{const t=await s.create({shell:w.value,cols:80,rows:24}),l={id:t.sessionId,shell:t.shell,cwd:"",alive:!0,lastSeq:0,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(l),i.value=l.id,await B(l)}catch(t){f.value=t?.message||String(t)}finally{u.value=!1}}async function se(t){try{await s.close(t)}catch(l){f.value=l?.message||String(l)}setTimeout(()=>W(t),500)}function W(t){const l=e.value.findIndex(b=>b.id===t);if(l===-1)return;const p=e.value[l];try{p.offs?.()}catch{}try{p.xterm?.dispose?.()}catch{}e.value.splice(l,1),i.value===t&&(i.value=e.value[0]?.id||null)}function le(t){i.value=t,q(()=>{const l=e.value.find(p=>p.id===t);try{l?.fitAddon?.fit()}catch{}})}async function Q(){d.value=!0,f.value="";try{const t=await s.list();for(const l of t){const p=e.value.find(m=>m.id===l.id);if(p){p.alive=l.alive,p.lastSeq=l.lastSeq;continue}const b={id:l.id,shell:l.shell,cwd:l.cwd,alive:l.alive,lastSeq:l.lastSeq,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(b),await B(b)}!i.value&&e.value.length>0&&(i.value=e.value[0].id)}catch(t){f.value=t?.message||String(t)}finally{d.value=!1}}Z(async()=>{await Q()}),H(()=>{for(const t of e.value){try{t.offs?.()}catch{}try{t.xterm?.dispose?.()}catch{}}}),$(i,()=>{q(()=>{const t=h.value;try{t?.fitAddon?.fit()}catch{}})});const X={term:s,sessions:e,activeId:i,newShell:w,creating:u,loadingList:d,error:f,warning:n,xtermContainers:a,shellOptions:r,active:h,shortId:D,get xtermMod(){return O},set xtermMod(t){O=t},get fitAddonMod(){return M},set fitAddonMod(t){M=t},loadXterm:I,mountXterm:B,onCreate:re,onClose:se,removeSession:W,activate:le,refreshList:Q,ref:S,computed:ee,onMounted:Z,onBeforeUnmount:H,nextTick:q,watch:$,get message(){return V},get PlusOutlined(){return ge},get CloseOutlined(){return pe},get ReloadOutlined(){return ye},get useTerminal(){return oe}};return Object.defineProperty(X,"__isScriptSetup",{enumerable:!1,value:!0}),X}},be={class:"terminal-page"},ke={class:"terminal-header"},Ce={class:"page-sub"},Ae={class:"terminal-body"},Ee={class:"session-tabs"},Oe=["onClick"],Te={class:"session-shell"},Re={class:"session-id"},Me={key:0,class:"session-empty"},ze={class:"xterm-host"},De=["data-session-id"],Le={key:0,class:"xterm-placeholder"},Pe={key:1,class:"terminal-footer"},qe={key:0,class:"footer-exit"};function Be(c,o,s,e,i,w){const u=z("a-tag"),d=z("a-select"),f=z("a-button"),n=z("a-space"),a=z("a-alert");return y(),x("div",be,[_("div",ke,[_("div",null,[o[3]||(o[3]=_("h2",{class:"page-title"},"远程终端",-1)),_("p",Ce,[o[2]||(o[2]=P(" 桌面端托管的 PTY 会话;Android 端可远程操控同一通道 ",-1)),e.warning?(y(),J(u,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:T(()=>[P(E(e.warning),1)]),_:1})):R("v-if",!0)])]),A(n,null,{default:T(()=>[A(d,{value:e.newShell,"onUpdate:value":o[0]||(o[0]=r=>e.newShell=r),style:{width:"130px"},size:"small",options:e.shellOptions},null,8,["value"]),A(f,{type:"primary",size:"small",loading:e.creating,onClick:e.onCreate},{icon:T(()=>[A(e.PlusOutlined)]),default:T(()=>[o[4]||(o[4]=P(" 新会话 ",-1))]),_:1},8,["loading"]),A(f,{size:"small",loading:e.loadingList,onClick:e.refreshList},{icon:T(()=>[A(e.ReloadOutlined)]),default:T(()=>[o[5]||(o[5]=P(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),e.error?(y(),J(a,{key:0,message:e.error,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"12px"},onClose:o[1]||(o[1]=r=>e.error="")},null,8,["message"])):R("v-if",!0),_("div",Ae,[_("div",Ee,[(y(!0),x(K,null,Y(e.sessions,r=>(y(),x("div",{key:r.id,class:ve(["session-tab",{active:r.id===e.activeId,dead:!r.alive}]),onClick:h=>e.activate(r.id)},[_("span",Te,E(r.shell),1),_("span",Re,E(e.shortId(r.id)),1),A(e.CloseOutlined,{class:"session-close",onClick:we(h=>e.onClose(r.id),["stop"])},null,8,["onClick"])],10,Oe))),128)),e.sessions.length===0?(y(),x("div",Me,' 点击 "新会话" 创建第一个终端 ')):R("v-if",!0)]),_("div",ze,[(y(!0),x(K,null,Y(e.sessions,r=>he((y(),x("div",{key:r.id,ref_for:!0,ref:"xtermContainers","data-session-id":r.id,class:"xterm-container"},null,8,De)),[[_e,r.id===e.activeId]])),128)),e.sessions.length===0?(y(),x("div",Le,[...o[6]||(o[6]=[_("span",null,"无活跃会话",-1)])])):R("v-if",!0)])]),e.active?(y(),x("div",Pe,[_("span",null,E(e.active.shell)+" · "+E(e.active.cwd||"(默认 cwd)")+" · seq "+E(e.active.lastSeq),1),e.active.alive?R("v-if",!0):(y(),x("span",qe,"已退出 (code="+E(e.active.exitCode??"-")+")",1))])):R("v-if",!0)])}const Fe=me(Se,[["render",Be],["__scopeId","data-v-65366a29"],["__file","/tmp/cc-web-panel-wQGCAD/repo/packages/web-panel/src/views/Terminal.vue"]]);export{Fe as default};
@@ -1 +1 @@
1
- import{I as S,P as n,J as i,U as l,S as h,R as o,c,K as d,Q as u,V as g,b as a}from"./vendor-BvqAck49.js";import{_ as b}from"./index-DT1y-Y3f.js";import{aD as O,aH as D}from"./icons-DP3uiYxy.js";const C={__name:"TimelineRenderer",props:{event:{type:Object,required:!0}},setup(v,{expose:_}){_();const r=v,e=a(()=>r.event.content||{}),p=a(()=>{const t=r.event.source.adapter||"";return t.startsWith("travel-12306")||t.startsWith("travel-ctrip")}),m=a(()=>e.value.from&&e.value.to?`${e.value.from} → ${e.value.to}`:e.value.origin&&e.value.destination?`${e.value.origin} → ${e.value.destination}`:null),s=a(()=>r.event.place||e.value.placeName||e.value.poi),N=a(()=>e.value.trainNo),T=a(()=>e.value.flightNo),k=a(()=>e.value.title||e.value.text||e.value.description||"—"),x=a(()=>{const t=[];return e.value.departureTime&&t.push(`出发 ${e.value.departureTime}`),e.value.arrivalTime&&t.push(`到达 ${e.value.arrivalTime}`),e.value.duration&&t.push(`${e.value.duration}`),e.value.distance&&t.push(`${e.value.distance}`),t.length?t.join(" · "):null}),y=a(()=>{if(!r.event.occurredAt)return"";const t=new Date(r.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),f={props:r,c:e,isTravel:p,route:m,placeName:s,trainNo:N,flightNo:T,fallbackText:k,extraDetail:x,formattedTime:y,computed:a,get CarOutlined(){return D},get EnvironmentOutlined(){return O}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}},B={class:"timeline-event"},V={class:"dot"},w={class:"card"},E={class:"head"},R={class:"time"},j={class:"primary"},J={key:0},A={key:1},H={key:2},I={key:0,class:"trip-no"},M={key:1,class:"extra"};function P(v,_,r,e,p,m){const s=S("a-tag");return n(),i("div",B,[l("div",V,[e.isTravel?(n(),h(e.CarOutlined,{key:0})):(n(),h(e.EnvironmentOutlined,{key:1}))]),l("div",w,[l("div",E,[l("span",R,o(e.formattedTime),1),c(s,{color:"cyan"},{default:d(()=>[u(o(r.event.source.adapter),1)]),_:1}),c(s,null,{default:d(()=>[u(o(r.event.subtype),1)]),_:1})]),l("div",j,[e.route?(n(),i("span",J,o(e.route),1)):e.placeName?(n(),i("span",A,"📍 "+o(e.placeName),1)):(n(),i("span",H,o(e.fallbackText),1))]),e.trainNo||e.flightNo?(n(),i("div",I,[c(s,{color:"blue"},{default:d(()=>[u(o(e.trainNo||e.flightNo),1)]),_:1})])):g("v-if",!0),e.extraDetail?(n(),i("div",M,o(e.extraDetail),1)):g("v-if",!0)])])}const F=b(C,[["render",P],["__scopeId","data-v-18400280"],["__file","/tmp/cc-web-panel-YJBpJd/repo/packages/web-panel/src/components/pdh/renderers/TimelineRenderer.vue"]]);export{F as default};
1
+ import{I as S,P as n,J as i,U as l,S as h,R as o,c,K as d,Q as u,V as g,b as a}from"./vendor-BvqAck49.js";import{_ as b}from"./index-CSnTUPQx.js";import{aD as D,aH as O}from"./icons-DP3uiYxy.js";const C={__name:"TimelineRenderer",props:{event:{type:Object,required:!0}},setup(v,{expose:_}){_();const r=v,e=a(()=>r.event.content||{}),p=a(()=>{const t=r.event.source.adapter||"";return t.startsWith("travel-12306")||t.startsWith("travel-ctrip")}),m=a(()=>e.value.from&&e.value.to?`${e.value.from} → ${e.value.to}`:e.value.origin&&e.value.destination?`${e.value.origin} → ${e.value.destination}`:null),s=a(()=>r.event.place||e.value.placeName||e.value.poi),N=a(()=>e.value.trainNo),T=a(()=>e.value.flightNo),k=a(()=>e.value.title||e.value.text||e.value.description||"—"),x=a(()=>{const t=[];return e.value.departureTime&&t.push(`出发 ${e.value.departureTime}`),e.value.arrivalTime&&t.push(`到达 ${e.value.arrivalTime}`),e.value.duration&&t.push(`${e.value.duration}`),e.value.distance&&t.push(`${e.value.distance}`),t.length?t.join(" · "):null}),y=a(()=>{if(!r.event.occurredAt)return"";const t=new Date(r.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),f={props:r,c:e,isTravel:p,route:m,placeName:s,trainNo:N,flightNo:T,fallbackText:k,extraDetail:x,formattedTime:y,computed:a,get CarOutlined(){return O},get EnvironmentOutlined(){return D}};return Object.defineProperty(f,"__isScriptSetup",{enumerable:!1,value:!0}),f}},w={class:"timeline-event"},V={class:"dot"},B={class:"card"},E={class:"head"},R={class:"time"},j={class:"primary"},A={key:0},H={key:1},I={key:2},M={key:0,class:"trip-no"},P={key:1,class:"extra"};function Q(v,_,r,e,p,m){const s=S("a-tag");return n(),i("div",w,[l("div",V,[e.isTravel?(n(),h(e.CarOutlined,{key:0})):(n(),h(e.EnvironmentOutlined,{key:1}))]),l("div",B,[l("div",E,[l("span",R,o(e.formattedTime),1),c(s,{color:"cyan"},{default:d(()=>[u(o(r.event.source.adapter),1)]),_:1}),c(s,null,{default:d(()=>[u(o(r.event.subtype),1)]),_:1})]),l("div",j,[e.route?(n(),i("span",A,o(e.route),1)):e.placeName?(n(),i("span",H,"📍 "+o(e.placeName),1)):(n(),i("span",I,o(e.fallbackText),1))]),e.trainNo||e.flightNo?(n(),i("div",M,[c(s,{color:"blue"},{default:d(()=>[u(o(e.trainNo||e.flightNo),1)]),_:1})])):g("v-if",!0),e.extraDetail?(n(),i("div",P,o(e.extraDetail),1)):g("v-if",!0)])])}const G=b(C,[["render",Q],["__scopeId","data-v-18400280"],["__file","/tmp/cc-web-panel-wQGCAD/repo/packages/web-panel/src/components/pdh/renderers/TimelineRenderer.vue"]]);export{G as default};
@@ -1 +1 @@
1
- import{I as _,J as p,U as m,R as c,c as n,K as r,V as k,S as U,o as q,b as H,r as T,P as f,Q as h,F as B,Z as K}from"./vendor-BvqAck49.js";import{_ as _t,b as X,u as $,d as C}from"./index-DT1y-Y3f.js";import{s as st}from"./community-parser-CO25nZFt.js";import{aQ as gt,D as vt,a0 as xt,N as ht,a8 as Tt,R as St}from"./icons-DP3uiYxy.js";function N(e){const a=st(e);if(!a)return null;try{return JSON.parse(a)}catch{}const o=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!o)return null;try{return JSON.parse(o[0])}catch{return null}}const Ct=Object.freeze(["today","week","month","all"]),rt=Object.freeze(["planning","active","suspended","archived"]),lt=Object.freeze(["pending","recorded","billed","rejected","refunded"]);function d(e,a=0){return typeof e=="number"&&Number.isFinite(e)?e:a}function D(e){if(!e)return{noDb:!1,error:""};const a=st(e),o=/Database not available/i.test(a);return{noDb:o,error:o?"Database not available":""}}const Q={totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0};function tt(e){const a={...Q};return!e||typeof e!="object"||Array.isArray(e)||(a.totalCalls=d(e.total_calls??e.totalCalls,0),a.totalInputTokens=d(e.total_input_tokens??e.totalInputTokens,0),a.totalOutputTokens=d(e.total_output_tokens??e.totalOutputTokens,0),a.totalTokens=d(e.total_tokens??e.totalTokens,0),a.totalCostUsd=d(e.total_cost_usd??e.totalCostUsd,0),a.avgResponseTimeMs=d(e.avg_response_time_ms??e.avgResponseTimeMs,0)),a}function Y(e){const a=N(e);return!a||typeof a!="object"||Array.isArray(a)?{stats:{...Q},today:{...Q}}:{stats:tt(a.stats),today:tt(a.today)}}function Ot(e,a=0){if(!e||typeof e!="object")return null;const o=e.provider||"",t=e.model||"";return!o&&!t?null:{key:`${o}/${t}/${a}`,provider:String(o),model:String(t),calls:d(e.calls,0),inputTokens:d(e.input_tokens??e.inputTokens,0),outputTokens:d(e.output_tokens??e.outputTokens,0),totalTokens:d(e.total_tokens??e.totalTokens,0),costUsd:d(e.cost_usd??e.costUsd,0),_idx:a}}function et(e){const a=N(e);return Array.isArray(a)?a.map(Ot).filter(Boolean):[]}function Bt(e,a=0){if(!e||typeof e!="object")return null;const o=e.id||"";return o?{key:o,id:o,provider:String(e.provider||""),model:String(e.model||""),inputTokens:d(e.input_tokens??e.inputTokens,0),outputTokens:d(e.output_tokens??e.outputTokens,0),totalTokens:d(e.total_tokens??e.totalTokens,0),costUsd:d(e.cost_usd??e.costUsd,0),responseTimeMs:d(e.response_time_ms??e.responseTimeMs,0),endpoint:String(e.endpoint||""),createdAt:e.created_at??e.createdAt??"",_idx:a}:null}function ot(e){const a=N(e);return Array.isArray(a)?a.map(Bt).filter(Boolean):[]}const Rt={totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0};function at(e){const a={...Rt},o=N(e);return!o||typeof o!="object"||Array.isArray(o)||(a.totalEntries=d(o.total_entries??o.totalEntries,0),a.totalHits=d(o.total_hits??o.totalHits,0),a.totalTokensSaved=d(o.total_tokens_saved??o.totalTokensSaved,0),a.expiredEntries=d(o.expired_entries??o.expiredEntries,0)),a}const Et={totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}};function nt(e){const a=JSON.parse(JSON.stringify(Et));for(const t of rt)a.budgetsByStatus[t]=0;for(const t of lt)a.recordsByStatus[t]=0;const o=N(e);if(!o||typeof o!="object"||Array.isArray(o))return a;if(a.totalBudgetsV2=d(o.totalBudgetsV2,0),a.totalRecordsV2=d(o.totalRecordsV2,0),a.maxActiveBudgetsPerOwner=d(o.maxActiveBudgetsPerOwner,0),a.maxPendingRecordsPerBudget=d(o.maxPendingRecordsPerBudget,0),a.budgetIdleMs=d(o.budgetIdleMs,0),a.recordStuckMs=d(o.recordStuckMs,0),o.budgetsByStatus&&typeof o.budgetsByStatus=="object")for(const[t,v]of Object.entries(o.budgetsByStatus))typeof v=="number"&&Number.isFinite(v)&&(a.budgetsByStatus[t]=v);if(o.recordsByStatus&&typeof o.recordsByStatus=="object")for(const[t,v]of Object.entries(o.recordsByStatus))typeof v=="number"&&Number.isFinite(v)&&(a.recordsByStatus[t]=v);return a}function zt(e){if(e==null||e==="")return"—";const a=String(e),o=a.includes(" ")&&!a.includes("T")?a.replace(" ","T")+"Z":a,t=typeof e=="number"?new Date(e):new Date(o);return isNaN(t.getTime())?a:t.toLocaleString("zh-CN",{hour12:!1})}function wt(e){return typeof e!="number"||!Number.isFinite(e)?"$0":"$"+(Math.abs(e)<1?e.toFixed(4):e.toFixed(2))}const At={__name:"Tokens",setup(e,{expose:a}){a();const{t:o}=X(),t=$(),v=T(!1),I=T("all"),O=T({stats:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0},today:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0}}),R=T([]),V=T([]),M=T({totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0}),P=T({totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}}),b=T({noDb:!1,error:""}),x=T("breakdown"),g=H(()=>[{title:o("tokens.breakdownColumns.provider"),key:"provider",width:"130px"},{title:o("tokens.breakdownColumns.model"),key:"model"},{title:o("tokens.breakdownColumns.calls"),key:"calls",width:"90px"},{title:o("tokens.breakdownColumns.totalTokens"),key:"totalTokens",width:"180px"},{title:o("tokens.breakdownColumns.costUsd"),key:"costUsd",width:"180px"},{title:o("tokens.breakdownColumns.avgCost"),key:"avgCost",width:"110px"}]),z=H(()=>[{title:o("tokens.recentColumns.createdAt"),key:"createdAt",width:"160px"},{title:o("tokens.recentColumns.provider"),key:"provider",width:"130px"},{title:o("tokens.recentColumns.model"),key:"model",width:"180px"},{title:o("tokens.recentColumns.tokens"),key:"tokens",width:"160px"},{title:o("tokens.recentColumns.costUsd"),key:"costUsd",width:"110px"},{title:o("tokens.recentColumns.responseTimeMs"),key:"responseTimeMs",width:"100px"},{title:o("tokens.recentColumns.endpoint"),key:"endpoint"}]),S=H(()=>R.value.reduce((s,u)=>s+u.costUsd,0));function w(s){const u=`tokens.period.${s}`,y=o(u);return y===u?s:y}function j(s){const u=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let y=0;for(let E=0;E<(s||"").length;E++)y=y*31+s.charCodeAt(E)>>>0;return u[y%u.length]}function A(s){return s<=500?"#52c41a":s<=1500?"#1677ff":s<=3e3?"#faad14":"#ff4d4f"}function F(s){return s<=500?"green":s<=1500?"blue":s<=3e3?"gold":"red"}function J(s){return typeof s!="number"||!Number.isFinite(s)?"0":s.toLocaleString("en-US")}function l(s){return!S.value||s<=0?0:Math.min(100,Math.round(s/S.value*100))}function i(s,u){return u?Math.round(s/u*100):0}function ct(s){const u=`tokens.budgetStatus.${s}`,y=o(u);return y===u?s:y}function it(s){return{planning:"default",active:"green",suspended:"orange",archived:"default"}[s]||"default"}function dt(s){return{planning:"#888",active:"#52c41a",suspended:"#faad14",archived:"#666"}[s]||"#888"}function ut(s){const u=`tokens.recordStatus.${s}`,y=o(u);return y===u?s:y}function ft(s){return{pending:"default",recorded:"blue",billed:"green",rejected:"red",refunded:"orange"}[s]||"default"}function kt(s){return{pending:"#888",recorded:"#1677ff",billed:"#52c41a",rejected:"#ff4d4f",refunded:"#faad14"}[s]||"#888"}async function L(){v.value=!0,b.value={noDb:!1,error:""};try{const[s,u,y,E,yt]=await Promise.all([t.execute(`tokens show --period ${I.value} --json`,8e3).catch(()=>({output:""})),t.execute("tokens breakdown --json",8e3).catch(()=>({output:""})),t.execute("tokens recent -n 100 --json",1e4).catch(()=>({output:""})),t.execute("tokens cache --json",6e3).catch(()=>({output:""})),t.execute("tokens stats-v2",6e3).catch(()=>({output:""}))]),Z=[s,u,y,E].map(G=>D(G.output)).find(G=>G.noDb);Z&&(b.value=Z),O.value=Y(s.output),R.value=et(u.output),V.value=ot(y.output),M.value=at(E.output),P.value=nt(yt.output)}catch(s){C.error(o("tokens.messages.loadFailed",{err:s?.message||s}))}finally{v.value=!1}}async function mt(){try{const{output:s}=await t.execute(`tokens show --period ${I.value} --json`,8e3),u=D(s);if(u.noDb){b.value=u;return}O.value=Y(s)}catch(s){C.error(o("tokens.messages.loadShowFailed",{err:s?.message||s}))}}async function pt(){try{const{output:s}=await t.execute("tokens cache --cleanup",8e3);if(D(s).noDb){C.error(o("tokens.messages.needInit"));return}C.success(o("tokens.messages.cleanupOk")),await L()}catch(s){C.error(o("tokens.messages.cleanupFailed",{err:s?.message||s}))}}async function bt(){try{const{output:s}=await t.execute("tokens cache --clear",8e3);if(D(s).noDb){C.error(o("tokens.messages.needInit"));return}C.success(o("tokens.messages.clearOk")),await L()}catch(s){C.error(o("tokens.messages.clearFailed",{err:s?.message||s}))}}q(L);const W={t:o,ws:t,loading:v,period:I,show:O,breakdown:R,recent:V,cache:M,statsV2:P,errorState:b,activeTab:x,breakdownColumns:g,recentColumns:z,totalCost:S,periodLabel:w,providerColor:j,respColor:A,respTagColor:F,formatNumber:J,costPct:l,pctOfTotal:i,budgetStatusLabel:ct,budgetStatusColor:it,budgetBarColor:dt,recordStatusLabel:ut,recordStatusColor:ft,recordBarColor:kt,loadAll:L,loadShow:mt,cleanupExpired:pt,clearAllCache:bt,ref:T,computed:H,onMounted:q,get useI18n(){return X},get ReloadOutlined(){return St},get ApiOutlined(){return Tt},get NumberOutlined(){return ht},get ClockCircleOutlined(){return xt},get DatabaseOutlined(){return vt},get DeleteOutlined(){return gt},get message(){return C},get useWsStore(){return $},get parseShowResult(){return Y},get parseBreakdown(){return et},get parseRecent(){return ot},get parseCacheStats(){return at},get parseStatsV2(){return nt},get detectTokensError(){return D},get formatTokensTime(){return zt},get formatCost(){return wt},get PERIOD_OPTIONS(){return Ct},get BUDGET_MATURITIES_V2(){return rt},get USAGE_RECORD_LIFECYCLES_V2(){return lt}};return Object.defineProperty(W,"__isScriptSetup",{enumerable:!1,value:!0}),W}},Ut={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Dt={class:"page-title"},Nt={class:"page-sub"},It={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Vt={style:{color:"var(--text-secondary)","font-size":"12px"}},Mt={class:"stat-sub"},Pt={class:"stat-sub"},jt={class:"stat-sub"},Ft={class:"stat-sub"},Lt={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Ht={key:2,style:{color:"var(--text-secondary)"}},Jt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Gt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Kt={style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},Yt={key:5,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"12px"}},Qt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Zt={key:2,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},qt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Xt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},$t={key:4,style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},te={key:0,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},ee={key:1,style:{color:"var(--text-muted)"}},oe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ae={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}},ne={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}};function se(e,a,o,t,v,I){const O=_("a-button"),R=_("a-space"),V=_("a-alert"),M=_("a-radio-button"),P=_("a-radio-group"),b=_("a-card"),x=_("a-statistic"),g=_("a-col"),z=_("a-row"),S=_("a-tag"),w=_("a-progress"),j=_("a-table"),A=_("a-tab-pane"),F=_("a-popconfirm"),J=_("a-tabs");return f(),p("div",null,[m("div",Ut,[m("div",null,[m("h2",Dt,c(t.t("tokens.title")),1),m("p",Nt,c(t.t("tokens.subtitle")),1)]),n(R,null,{default:r(()=>[n(O,{loading:t.loading,onClick:t.loadAll},{icon:r(()=>[n(t.ReloadOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.refresh")),1)]),_:1},8,["loading"])]),_:1})]),k(" noDb banner "),t.errorState.noDb?(f(),U(V,{key:0,type:"info","show-icon":"",message:t.t("tokens.noDb.message"),description:t.t("tokens.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):k("v-if",!0),k(" Period selector "),n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[m("div",It,[m("span",Vt,c(t.t("tokens.periodLabel")),1),n(P,{value:t.period,"onUpdate:value":a[0]||(a[0]=l=>t.period=l),size:"small","button-style":"solid",onChange:t.loadShow},{default:r(()=>[(f(!0),p(B,null,K(t.PERIOD_OPTIONS,l=>(f(),U(M,{key:l,value:l},{default:r(()=>[h(c(t.periodLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1}),k(" Stat cards "),n(z,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.calls"),value:t.show.stats.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[n(t.ApiOutlined)]),_:1},8,["title","value"]),m("div",Mt,c(t.t("tokens.stats.callsToday",{count:t.show.today.totalCalls})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.totalTokens"),value:t.show.stats.totalTokens,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[n(t.NumberOutlined)]),_:1},8,["title","value"]),m("div",Pt,c(t.t("tokens.stats.tokensInOut",{inputs:t.formatNumber(t.show.stats.totalInputTokens),outputs:t.formatNumber(t.show.stats.totalOutputTokens)})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.totalCost"),value:t.show.stats.totalCostUsd,precision:t.show.stats.totalCostUsd<1?4:2,prefix:"$","value-style":{color:"#faad14",fontSize:"20px"}},null,8,["title","value","precision"]),m("div",jt,c(t.t("tokens.stats.costToday",{amount:t.formatCost(t.show.today.totalCostUsd)})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.avgResponse"),value:t.show.stats.avgResponseTimeMs,suffix:"ms",precision:0,"value-style":{color:t.respColor(t.show.stats.avgResponseTimeMs),fontSize:"20px"}},{prefix:r(()=>[n(t.ClockCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),n(g,{xs:24,sm:8,lg:4},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.cacheHits"),value:t.cache.totalHits,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[n(t.DatabaseOutlined)]),_:1},8,["title","value"]),m("div",Ft,c(t.t("tokens.stats.cacheTokensSaved",{count:t.formatNumber(t.cache.totalTokensSaved)})),1)]),_:1})]),_:1})]),_:1}),k(" Tabs "),n(J,{activeKey:t.activeTab,"onUpdate:activeKey":a[1]||(a[1]=l=>t.activeTab=l),class:"tokens-tabs"},{default:r(()=>[k(" ── Breakdown tab ────────────────────────────────────── "),n(A,{key:"breakdown",tab:t.t("tokens.tabs.breakdown")},{default:r(()=>[n(j,{columns:t.breakdownColumns,"data-source":t.breakdown,pagination:{pageSize:20,showTotal:l=>t.t("tokens.totals.models",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:i})=>[l.key==="provider"?(f(),U(S,{key:0,color:t.providerColor(i.provider),style:{"font-family":"monospace"}},{default:r(()=>[h(c(i.provider),1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="model"?(f(),p("span",Lt,c(i.model),1)):k("v-if",!0),l.key==="calls"?(f(),p("span",Ht,c(t.formatNumber(i.calls)),1)):k("v-if",!0),l.key==="totalTokens"?(f(),p(B,{key:3},[m("span",Jt,c(t.formatNumber(i.totalTokens)),1),m("div",Gt,c(t.t("tokens.breakdownDetails.tokensInOut",{inputs:t.formatNumber(i.inputTokens),outputs:t.formatNumber(i.outputTokens)})),1)],64)):k("v-if",!0),l.key==="costUsd"?(f(),p(B,{key:4},[m("span",Kt,c(t.formatCost(i.costUsd)),1),n(w,{percent:t.costPct(i.costUsd),"show-info":!1,"stroke-color":"#faad14",size:"small",style:{"margin-top":"2px"}},null,8,["percent"])],64)):k("v-if",!0),l.key==="avgCost"?(f(),p("span",Yt,c(i.calls>0?t.formatCost(i.costUsd/i.calls):"—"),1)):k("v-if",!0)]),emptyText:r(()=>[m("div",Qt,[n(t.NumberOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),h(" "+c(t.t("tokens.empty.breakdown")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),k(" ── Recent tab ───────────────────────────────────────── "),n(A,{key:"recent",tab:t.t("tokens.tabs.recent")},{default:r(()=>[n(j,{columns:t.recentColumns,"data-source":t.recent,pagination:{pageSize:20,showTotal:l=>t.t("tokens.totals.rows",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:i})=>[l.key==="createdAt"?(f(),p("span",Wt,c(t.formatTokensTime(i.createdAt)),1)):k("v-if",!0),l.key==="provider"?(f(),U(S,{key:1,color:t.providerColor(i.provider),style:{"font-family":"monospace"}},{default:r(()=>[h(c(i.provider),1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="model"?(f(),p("span",Zt,c(i.model),1)):k("v-if",!0),l.key==="tokens"?(f(),p(B,{key:3},[m("span",qt,c(t.formatNumber(i.totalTokens)),1),m("div",Xt,c(t.formatNumber(i.inputTokens))+" / "+c(t.formatNumber(i.outputTokens)),1)],64)):k("v-if",!0),l.key==="costUsd"?(f(),p("span",$t,c(t.formatCost(i.costUsd)),1)):k("v-if",!0),l.key==="responseTimeMs"?(f(),U(S,{key:5,color:t.respTagColor(i.responseTimeMs)},{default:r(()=>[h(c(i.responseTimeMs)+"ms",1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="endpoint"?(f(),p(B,{key:6},[i.endpoint?(f(),p("span",te,c(i.endpoint),1)):(f(),p("span",ee,"—"))],64)):k("v-if",!0)]),emptyText:r(()=>[m("div",oe,[n(t.ClockCircleOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),h(" "+c(t.t("tokens.empty.recent")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),k(" ── Cache tab ────────────────────────────────────────── "),n(A,{key:"cache",tab:t.t("tokens.tabs.cache")},{default:r(()=>[n(z,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:r(()=>[n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalEntries"),value:t.cache.totalEntries,"value-style":{color:"#1677ff",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalHits"),value:t.cache.totalHits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalTokensSaved"),value:t.cache.totalTokensSaved,"value-style":{color:"#13c2c2",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.expiredEntries"),value:t.cache.expiredEntries,"value-style":{color:t.cache.expiredEntries>0?"#faad14":"#888",fontSize:"18px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),n(b,{title:t.t("tokens.cache.maintenanceTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(R,null,{default:r(()=>[n(F,{title:t.t("tokens.cache.cleanupConfirm"),"ok-text":t.t("tokens.cache.cleanupOk"),"cancel-text":t.t("common.cancel"),onConfirm:t.cleanupExpired},{default:r(()=>[n(O,{disabled:t.cache.expiredEntries===0},{icon:r(()=>[n(t.DeleteOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.cache.cleanupButton",{count:t.cache.expiredEntries})),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"]),n(F,{title:t.t("tokens.cache.clearConfirm"),"ok-text":t.t("tokens.cache.clearOk"),"ok-type":"danger","cancel-text":t.t("common.cancel"),onConfirm:t.clearAllCache},{default:r(()=>[n(O,{danger:"",disabled:t.cache.totalEntries===0},{icon:r(()=>[n(t.DeleteOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.cache.clearButton")),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"])]),_:1})]),_:1},8,["title"]),n(b,{title:t.t("tokens.v2.cardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:r(()=>[n(z,{gutter:[16,16]},{default:r(()=>[n(g,{xs:24,lg:12},{default:r(()=>[m("h5",ae,c(t.t("tokens.v2.budgetsTitle")),1),(f(!0),p(B,null,K(t.BUDGET_MATURITIES_V2,l=>(f(),p("div",{key:l,class:"bd-row"},[n(S,{color:t.budgetStatusColor(l),style:{"min-width":"80px","text-align":"center"}},{default:r(()=>[h(c(t.budgetStatusLabel(l)),1)]),_:2},1032,["color"]),n(w,{percent:t.pctOfTotal(t.statsV2.budgetsByStatus[l]||0,t.statsV2.totalBudgetsV2),"stroke-color":t.budgetBarColor(l),format:()=>`${t.statsV2.budgetsByStatus[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1}),n(g,{xs:24,lg:12},{default:r(()=>[m("h5",ne,c(t.t("tokens.v2.recordsTitle")),1),(f(!0),p(B,null,K(t.USAGE_RECORD_LIFECYCLES_V2,l=>(f(),p("div",{key:l,class:"bd-row"},[n(S,{color:t.recordStatusColor(l),style:{"min-width":"80px","text-align":"center"}},{default:r(()=>[h(c(t.recordStatusLabel(l)),1)]),_:2},1032,["color"]),n(w,{percent:t.pctOfTotal(t.statsV2.recordsByStatus[l]||0,t.statsV2.totalRecordsV2),"stroke-color":t.recordBarColor(l),format:()=>`${t.statsV2.recordsByStatus[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1},8,["title"])]),_:1},8,["tab"])]),_:1},8,["activeKey"])])}const de=_t(At,[["render",se],["__scopeId","data-v-175683a8"],["__file","/tmp/cc-web-panel-YJBpJd/repo/packages/web-panel/src/views/Tokens.vue"]]);export{de as default};
1
+ import{I as _,J as p,U as m,R as c,c as n,K as r,V as k,S as D,o as q,b as H,r as T,P as f,Q as h,F as B,Z as K}from"./vendor-BvqAck49.js";import{_ as _t,b as X,u as $,d as C}from"./index-CSnTUPQx.js";import{s as st}from"./community-parser-CO25nZFt.js";import{aQ as gt,D as vt,a0 as xt,N as ht,a8 as Tt,R as St}from"./icons-DP3uiYxy.js";function N(e){const a=st(e);if(!a)return null;try{return JSON.parse(a)}catch{}const o=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!o)return null;try{return JSON.parse(o[0])}catch{return null}}const Ct=Object.freeze(["today","week","month","all"]),rt=Object.freeze(["planning","active","suspended","archived"]),lt=Object.freeze(["pending","recorded","billed","rejected","refunded"]);function d(e,a=0){return typeof e=="number"&&Number.isFinite(e)?e:a}function U(e){if(!e)return{noDb:!1,error:""};const a=st(e),o=/Database not available/i.test(a);return{noDb:o,error:o?"Database not available":""}}const Y={totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0};function tt(e){const a={...Y};return!e||typeof e!="object"||Array.isArray(e)||(a.totalCalls=d(e.total_calls??e.totalCalls,0),a.totalInputTokens=d(e.total_input_tokens??e.totalInputTokens,0),a.totalOutputTokens=d(e.total_output_tokens??e.totalOutputTokens,0),a.totalTokens=d(e.total_tokens??e.totalTokens,0),a.totalCostUsd=d(e.total_cost_usd??e.totalCostUsd,0),a.avgResponseTimeMs=d(e.avg_response_time_ms??e.avgResponseTimeMs,0)),a}function Q(e){const a=N(e);return!a||typeof a!="object"||Array.isArray(a)?{stats:{...Y},today:{...Y}}:{stats:tt(a.stats),today:tt(a.today)}}function Ot(e,a=0){if(!e||typeof e!="object")return null;const o=e.provider||"",t=e.model||"";return!o&&!t?null:{key:`${o}/${t}/${a}`,provider:String(o),model:String(t),calls:d(e.calls,0),inputTokens:d(e.input_tokens??e.inputTokens,0),outputTokens:d(e.output_tokens??e.outputTokens,0),totalTokens:d(e.total_tokens??e.totalTokens,0),costUsd:d(e.cost_usd??e.costUsd,0),_idx:a}}function et(e){const a=N(e);return Array.isArray(a)?a.map(Ot).filter(Boolean):[]}function Bt(e,a=0){if(!e||typeof e!="object")return null;const o=e.id||"";return o?{key:o,id:o,provider:String(e.provider||""),model:String(e.model||""),inputTokens:d(e.input_tokens??e.inputTokens,0),outputTokens:d(e.output_tokens??e.outputTokens,0),totalTokens:d(e.total_tokens??e.totalTokens,0),costUsd:d(e.cost_usd??e.costUsd,0),responseTimeMs:d(e.response_time_ms??e.responseTimeMs,0),endpoint:String(e.endpoint||""),createdAt:e.created_at??e.createdAt??"",_idx:a}:null}function ot(e){const a=N(e);return Array.isArray(a)?a.map(Bt).filter(Boolean):[]}const Rt={totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0};function at(e){const a={...Rt},o=N(e);return!o||typeof o!="object"||Array.isArray(o)||(a.totalEntries=d(o.total_entries??o.totalEntries,0),a.totalHits=d(o.total_hits??o.totalHits,0),a.totalTokensSaved=d(o.total_tokens_saved??o.totalTokensSaved,0),a.expiredEntries=d(o.expired_entries??o.expiredEntries,0)),a}const Et={totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}};function nt(e){const a=JSON.parse(JSON.stringify(Et));for(const t of rt)a.budgetsByStatus[t]=0;for(const t of lt)a.recordsByStatus[t]=0;const o=N(e);if(!o||typeof o!="object"||Array.isArray(o))return a;if(a.totalBudgetsV2=d(o.totalBudgetsV2,0),a.totalRecordsV2=d(o.totalRecordsV2,0),a.maxActiveBudgetsPerOwner=d(o.maxActiveBudgetsPerOwner,0),a.maxPendingRecordsPerBudget=d(o.maxPendingRecordsPerBudget,0),a.budgetIdleMs=d(o.budgetIdleMs,0),a.recordStuckMs=d(o.recordStuckMs,0),o.budgetsByStatus&&typeof o.budgetsByStatus=="object")for(const[t,v]of Object.entries(o.budgetsByStatus))typeof v=="number"&&Number.isFinite(v)&&(a.budgetsByStatus[t]=v);if(o.recordsByStatus&&typeof o.recordsByStatus=="object")for(const[t,v]of Object.entries(o.recordsByStatus))typeof v=="number"&&Number.isFinite(v)&&(a.recordsByStatus[t]=v);return a}function zt(e){if(e==null||e==="")return"—";const a=String(e),o=a.includes(" ")&&!a.includes("T")?a.replace(" ","T")+"Z":a,t=typeof e=="number"?new Date(e):new Date(o);return isNaN(t.getTime())?a:t.toLocaleString("zh-CN",{hour12:!1})}function wt(e){return typeof e!="number"||!Number.isFinite(e)?"$0":"$"+(Math.abs(e)<1?e.toFixed(4):e.toFixed(2))}const At={__name:"Tokens",setup(e,{expose:a}){a();const{t:o}=X(),t=$(),v=T(!1),I=T("all"),O=T({stats:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0},today:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0}}),R=T([]),V=T([]),M=T({totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0}),P=T({totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}}),b=T({noDb:!1,error:""}),x=T("breakdown"),g=H(()=>[{title:o("tokens.breakdownColumns.provider"),key:"provider",width:"130px"},{title:o("tokens.breakdownColumns.model"),key:"model"},{title:o("tokens.breakdownColumns.calls"),key:"calls",width:"90px"},{title:o("tokens.breakdownColumns.totalTokens"),key:"totalTokens",width:"180px"},{title:o("tokens.breakdownColumns.costUsd"),key:"costUsd",width:"180px"},{title:o("tokens.breakdownColumns.avgCost"),key:"avgCost",width:"110px"}]),z=H(()=>[{title:o("tokens.recentColumns.createdAt"),key:"createdAt",width:"160px"},{title:o("tokens.recentColumns.provider"),key:"provider",width:"130px"},{title:o("tokens.recentColumns.model"),key:"model",width:"180px"},{title:o("tokens.recentColumns.tokens"),key:"tokens",width:"160px"},{title:o("tokens.recentColumns.costUsd"),key:"costUsd",width:"110px"},{title:o("tokens.recentColumns.responseTimeMs"),key:"responseTimeMs",width:"100px"},{title:o("tokens.recentColumns.endpoint"),key:"endpoint"}]),S=H(()=>R.value.reduce((s,u)=>s+u.costUsd,0));function w(s){const u=`tokens.period.${s}`,y=o(u);return y===u?s:y}function j(s){const u=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let y=0;for(let E=0;E<(s||"").length;E++)y=y*31+s.charCodeAt(E)>>>0;return u[y%u.length]}function A(s){return s<=500?"#52c41a":s<=1500?"#1677ff":s<=3e3?"#faad14":"#ff4d4f"}function F(s){return s<=500?"green":s<=1500?"blue":s<=3e3?"gold":"red"}function G(s){return typeof s!="number"||!Number.isFinite(s)?"0":s.toLocaleString("en-US")}function l(s){return!S.value||s<=0?0:Math.min(100,Math.round(s/S.value*100))}function i(s,u){return u?Math.round(s/u*100):0}function ct(s){const u=`tokens.budgetStatus.${s}`,y=o(u);return y===u?s:y}function it(s){return{planning:"default",active:"green",suspended:"orange",archived:"default"}[s]||"default"}function dt(s){return{planning:"#888",active:"#52c41a",suspended:"#faad14",archived:"#666"}[s]||"#888"}function ut(s){const u=`tokens.recordStatus.${s}`,y=o(u);return y===u?s:y}function ft(s){return{pending:"default",recorded:"blue",billed:"green",rejected:"red",refunded:"orange"}[s]||"default"}function kt(s){return{pending:"#888",recorded:"#1677ff",billed:"#52c41a",rejected:"#ff4d4f",refunded:"#faad14"}[s]||"#888"}async function L(){v.value=!0,b.value={noDb:!1,error:""};try{const[s,u,y,E,yt]=await Promise.all([t.execute(`tokens show --period ${I.value} --json`,8e3).catch(()=>({output:""})),t.execute("tokens breakdown --json",8e3).catch(()=>({output:""})),t.execute("tokens recent -n 100 --json",1e4).catch(()=>({output:""})),t.execute("tokens cache --json",6e3).catch(()=>({output:""})),t.execute("tokens stats-v2",6e3).catch(()=>({output:""}))]),Z=[s,u,y,E].map(J=>U(J.output)).find(J=>J.noDb);Z&&(b.value=Z),O.value=Q(s.output),R.value=et(u.output),V.value=ot(y.output),M.value=at(E.output),P.value=nt(yt.output)}catch(s){C.error(o("tokens.messages.loadFailed",{err:s?.message||s}))}finally{v.value=!1}}async function mt(){try{const{output:s}=await t.execute(`tokens show --period ${I.value} --json`,8e3),u=U(s);if(u.noDb){b.value=u;return}O.value=Q(s)}catch(s){C.error(o("tokens.messages.loadShowFailed",{err:s?.message||s}))}}async function pt(){try{const{output:s}=await t.execute("tokens cache --cleanup",8e3);if(U(s).noDb){C.error(o("tokens.messages.needInit"));return}C.success(o("tokens.messages.cleanupOk")),await L()}catch(s){C.error(o("tokens.messages.cleanupFailed",{err:s?.message||s}))}}async function bt(){try{const{output:s}=await t.execute("tokens cache --clear",8e3);if(U(s).noDb){C.error(o("tokens.messages.needInit"));return}C.success(o("tokens.messages.clearOk")),await L()}catch(s){C.error(o("tokens.messages.clearFailed",{err:s?.message||s}))}}q(L);const W={t:o,ws:t,loading:v,period:I,show:O,breakdown:R,recent:V,cache:M,statsV2:P,errorState:b,activeTab:x,breakdownColumns:g,recentColumns:z,totalCost:S,periodLabel:w,providerColor:j,respColor:A,respTagColor:F,formatNumber:G,costPct:l,pctOfTotal:i,budgetStatusLabel:ct,budgetStatusColor:it,budgetBarColor:dt,recordStatusLabel:ut,recordStatusColor:ft,recordBarColor:kt,loadAll:L,loadShow:mt,cleanupExpired:pt,clearAllCache:bt,ref:T,computed:H,onMounted:q,get useI18n(){return X},get ReloadOutlined(){return St},get ApiOutlined(){return Tt},get NumberOutlined(){return ht},get ClockCircleOutlined(){return xt},get DatabaseOutlined(){return vt},get DeleteOutlined(){return gt},get message(){return C},get useWsStore(){return $},get parseShowResult(){return Q},get parseBreakdown(){return et},get parseRecent(){return ot},get parseCacheStats(){return at},get parseStatsV2(){return nt},get detectTokensError(){return U},get formatTokensTime(){return zt},get formatCost(){return wt},get PERIOD_OPTIONS(){return Ct},get BUDGET_MATURITIES_V2(){return rt},get USAGE_RECORD_LIFECYCLES_V2(){return lt}};return Object.defineProperty(W,"__isScriptSetup",{enumerable:!1,value:!0}),W}},Dt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ut={class:"page-title"},Nt={class:"page-sub"},It={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Vt={style:{color:"var(--text-secondary)","font-size":"12px"}},Mt={class:"stat-sub"},Pt={class:"stat-sub"},jt={class:"stat-sub"},Ft={class:"stat-sub"},Lt={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Ht={key:2,style:{color:"var(--text-secondary)"}},Gt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Jt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Kt={style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},Qt={key:5,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"12px"}},Yt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Zt={key:2,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},qt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Xt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},$t={key:4,style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},te={key:0,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},ee={key:1,style:{color:"var(--text-muted)"}},oe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ae={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}},ne={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}};function se(e,a,o,t,v,I){const O=_("a-button"),R=_("a-space"),V=_("a-alert"),M=_("a-radio-button"),P=_("a-radio-group"),b=_("a-card"),x=_("a-statistic"),g=_("a-col"),z=_("a-row"),S=_("a-tag"),w=_("a-progress"),j=_("a-table"),A=_("a-tab-pane"),F=_("a-popconfirm"),G=_("a-tabs");return f(),p("div",null,[m("div",Dt,[m("div",null,[m("h2",Ut,c(t.t("tokens.title")),1),m("p",Nt,c(t.t("tokens.subtitle")),1)]),n(R,null,{default:r(()=>[n(O,{loading:t.loading,onClick:t.loadAll},{icon:r(()=>[n(t.ReloadOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.refresh")),1)]),_:1},8,["loading"])]),_:1})]),k(" noDb banner "),t.errorState.noDb?(f(),D(V,{key:0,type:"info","show-icon":"",message:t.t("tokens.noDb.message"),description:t.t("tokens.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):k("v-if",!0),k(" Period selector "),n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[m("div",It,[m("span",Vt,c(t.t("tokens.periodLabel")),1),n(P,{value:t.period,"onUpdate:value":a[0]||(a[0]=l=>t.period=l),size:"small","button-style":"solid",onChange:t.loadShow},{default:r(()=>[(f(!0),p(B,null,K(t.PERIOD_OPTIONS,l=>(f(),D(M,{key:l,value:l},{default:r(()=>[h(c(t.periodLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1}),k(" Stat cards "),n(z,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.calls"),value:t.show.stats.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[n(t.ApiOutlined)]),_:1},8,["title","value"]),m("div",Mt,c(t.t("tokens.stats.callsToday",{count:t.show.today.totalCalls})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.totalTokens"),value:t.show.stats.totalTokens,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[n(t.NumberOutlined)]),_:1},8,["title","value"]),m("div",Pt,c(t.t("tokens.stats.tokensInOut",{inputs:t.formatNumber(t.show.stats.totalInputTokens),outputs:t.formatNumber(t.show.stats.totalOutputTokens)})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.totalCost"),value:t.show.stats.totalCostUsd,precision:t.show.stats.totalCostUsd<1?4:2,prefix:"$","value-style":{color:"#faad14",fontSize:"20px"}},null,8,["title","value","precision"]),m("div",jt,c(t.t("tokens.stats.costToday",{amount:t.formatCost(t.show.today.totalCostUsd)})),1)]),_:1})]),_:1}),n(g,{xs:12,sm:8,lg:5},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.avgResponse"),value:t.show.stats.avgResponseTimeMs,suffix:"ms",precision:0,"value-style":{color:t.respColor(t.show.stats.avgResponseTimeMs),fontSize:"20px"}},{prefix:r(()=>[n(t.ClockCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),n(g,{xs:24,sm:8,lg:4},{default:r(()=>[n(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.stats.cacheHits"),value:t.cache.totalHits,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[n(t.DatabaseOutlined)]),_:1},8,["title","value"]),m("div",Ft,c(t.t("tokens.stats.cacheTokensSaved",{count:t.formatNumber(t.cache.totalTokensSaved)})),1)]),_:1})]),_:1})]),_:1}),k(" Tabs "),n(G,{activeKey:t.activeTab,"onUpdate:activeKey":a[1]||(a[1]=l=>t.activeTab=l),class:"tokens-tabs"},{default:r(()=>[k(" ── Breakdown tab ────────────────────────────────────── "),n(A,{key:"breakdown",tab:t.t("tokens.tabs.breakdown")},{default:r(()=>[n(j,{columns:t.breakdownColumns,"data-source":t.breakdown,pagination:{pageSize:20,showTotal:l=>t.t("tokens.totals.models",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:i})=>[l.key==="provider"?(f(),D(S,{key:0,color:t.providerColor(i.provider),style:{"font-family":"monospace"}},{default:r(()=>[h(c(i.provider),1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="model"?(f(),p("span",Lt,c(i.model),1)):k("v-if",!0),l.key==="calls"?(f(),p("span",Ht,c(t.formatNumber(i.calls)),1)):k("v-if",!0),l.key==="totalTokens"?(f(),p(B,{key:3},[m("span",Gt,c(t.formatNumber(i.totalTokens)),1),m("div",Jt,c(t.t("tokens.breakdownDetails.tokensInOut",{inputs:t.formatNumber(i.inputTokens),outputs:t.formatNumber(i.outputTokens)})),1)],64)):k("v-if",!0),l.key==="costUsd"?(f(),p(B,{key:4},[m("span",Kt,c(t.formatCost(i.costUsd)),1),n(w,{percent:t.costPct(i.costUsd),"show-info":!1,"stroke-color":"#faad14",size:"small",style:{"margin-top":"2px"}},null,8,["percent"])],64)):k("v-if",!0),l.key==="avgCost"?(f(),p("span",Qt,c(i.calls>0?t.formatCost(i.costUsd/i.calls):"—"),1)):k("v-if",!0)]),emptyText:r(()=>[m("div",Yt,[n(t.NumberOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),h(" "+c(t.t("tokens.empty.breakdown")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),k(" ── Recent tab ───────────────────────────────────────── "),n(A,{key:"recent",tab:t.t("tokens.tabs.recent")},{default:r(()=>[n(j,{columns:t.recentColumns,"data-source":t.recent,pagination:{pageSize:20,showTotal:l=>t.t("tokens.totals.rows",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:i})=>[l.key==="createdAt"?(f(),p("span",Wt,c(t.formatTokensTime(i.createdAt)),1)):k("v-if",!0),l.key==="provider"?(f(),D(S,{key:1,color:t.providerColor(i.provider),style:{"font-family":"monospace"}},{default:r(()=>[h(c(i.provider),1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="model"?(f(),p("span",Zt,c(i.model),1)):k("v-if",!0),l.key==="tokens"?(f(),p(B,{key:3},[m("span",qt,c(t.formatNumber(i.totalTokens)),1),m("div",Xt,c(t.formatNumber(i.inputTokens))+" / "+c(t.formatNumber(i.outputTokens)),1)],64)):k("v-if",!0),l.key==="costUsd"?(f(),p("span",$t,c(t.formatCost(i.costUsd)),1)):k("v-if",!0),l.key==="responseTimeMs"?(f(),D(S,{key:5,color:t.respTagColor(i.responseTimeMs)},{default:r(()=>[h(c(i.responseTimeMs)+"ms",1)]),_:2},1032,["color"])):k("v-if",!0),l.key==="endpoint"?(f(),p(B,{key:6},[i.endpoint?(f(),p("span",te,c(i.endpoint),1)):(f(),p("span",ee,"—"))],64)):k("v-if",!0)]),emptyText:r(()=>[m("div",oe,[n(t.ClockCircleOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),h(" "+c(t.t("tokens.empty.recent")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),k(" ── Cache tab ────────────────────────────────────────── "),n(A,{key:"cache",tab:t.t("tokens.tabs.cache")},{default:r(()=>[n(z,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:r(()=>[n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalEntries"),value:t.cache.totalEntries,"value-style":{color:"#1677ff",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalHits"),value:t.cache.totalHits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.totalTokensSaved"),value:t.cache.totalTokensSaved,"value-style":{color:"#13c2c2",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),n(g,{xs:12,sm:6},{default:r(()=>[n(b,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(x,{title:t.t("tokens.cache.expiredEntries"),value:t.cache.expiredEntries,"value-style":{color:t.cache.expiredEntries>0?"#faad14":"#888",fontSize:"18px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),n(b,{title:t.t("tokens.cache.maintenanceTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(R,null,{default:r(()=>[n(F,{title:t.t("tokens.cache.cleanupConfirm"),"ok-text":t.t("tokens.cache.cleanupOk"),"cancel-text":t.t("common.cancel"),onConfirm:t.cleanupExpired},{default:r(()=>[n(O,{disabled:t.cache.expiredEntries===0},{icon:r(()=>[n(t.DeleteOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.cache.cleanupButton",{count:t.cache.expiredEntries})),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"]),n(F,{title:t.t("tokens.cache.clearConfirm"),"ok-text":t.t("tokens.cache.clearOk"),"ok-type":"danger","cancel-text":t.t("common.cancel"),onConfirm:t.clearAllCache},{default:r(()=>[n(O,{danger:"",disabled:t.cache.totalEntries===0},{icon:r(()=>[n(t.DeleteOutlined)]),default:r(()=>[h(" "+c(t.t("tokens.cache.clearButton")),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"])]),_:1})]),_:1},8,["title"]),n(b,{title:t.t("tokens.v2.cardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:r(()=>[n(z,{gutter:[16,16]},{default:r(()=>[n(g,{xs:24,lg:12},{default:r(()=>[m("h5",ae,c(t.t("tokens.v2.budgetsTitle")),1),(f(!0),p(B,null,K(t.BUDGET_MATURITIES_V2,l=>(f(),p("div",{key:l,class:"bd-row"},[n(S,{color:t.budgetStatusColor(l),style:{"min-width":"80px","text-align":"center"}},{default:r(()=>[h(c(t.budgetStatusLabel(l)),1)]),_:2},1032,["color"]),n(w,{percent:t.pctOfTotal(t.statsV2.budgetsByStatus[l]||0,t.statsV2.totalBudgetsV2),"stroke-color":t.budgetBarColor(l),format:()=>`${t.statsV2.budgetsByStatus[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1}),n(g,{xs:24,lg:12},{default:r(()=>[m("h5",ne,c(t.t("tokens.v2.recordsTitle")),1),(f(!0),p(B,null,K(t.USAGE_RECORD_LIFECYCLES_V2,l=>(f(),p("div",{key:l,class:"bd-row"},[n(S,{color:t.recordStatusColor(l),style:{"min-width":"80px","text-align":"center"}},{default:r(()=>[h(c(t.recordStatusLabel(l)),1)]),_:2},1032,["color"]),n(w,{percent:t.pctOfTotal(t.statsV2.recordsByStatus[l]||0,t.statsV2.totalRecordsV2),"stroke-color":t.recordBarColor(l),format:()=>`${t.statsV2.recordsByStatus[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1},8,["title"])]),_:1},8,["tab"])]),_:1},8,["activeKey"])])}const de=_t(At,[["render",se],["__scopeId","data-v-175683a8"],["__file","/tmp/cc-web-panel-wQGCAD/repo/packages/web-panel/src/views/Tokens.vue"]]);export{de as default};