chainlesschain 0.162.82 → 0.162.84

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 (150) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-C1dEj8Gv.js → AIOps-CUPGM_Kx.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-CzXXDnBr.js → ActionButton-Gpo_8hNk.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-hdY26dTn.js → Analytics-gUz2I_9P.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-D6vzt_W0.js → AppLayout-8S6XH1S0.js} +3 -3
  6. package/src/assets/web-panel/assets/{Audit-CyavCkKh.js → Audit-DspRXpoj.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-CN26lWvD.js → Backup-CrO4UCdI.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-DuztEFOJ.js → BaseInput-BkEVF4o4.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-BtR0IxAD.js → Chat-B9EvII6G.js} +5 -5
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-3Fqx4Hr2.js → ChatBubbleRenderer-BfXGm9lb.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-DpZIx_RE.js → Checkbox-BrDQRcU4.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-CHTbeOJl.js → Codegen-CqBoplXd.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-BpLy4N8M.js → Col-CbQa3Dci.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-Bjj8jRSr.js → Community-C03LI8ue.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-JRM5b_T8.js → Compact-D_XPXg9d.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-BhgyZEaK.js → Compliance-B5sBpZMO.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-DptkLSOO.js → Cowork-WnDWZ2l6.js} +2 -2
  18. package/src/assets/web-panel/assets/{Cron-DnKASPO9.js → Cron-CMIJXLkp.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-DyutKwBT.js → Crosschain-DLptM6-5.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-26hGyWNl.js → DID-svP2FmRz.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-TR0q4qh-.js → Dashboard-CO5hKuwh.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-xvwRnUkx.js → Dropdown-CQIK5Gf6.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-FMmTGI6O.js → EmailListRenderer-CBBq-Mwz.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BZA7U05u.js → FamilyGuardDashboard-DgcxYtqz.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-CyDZU8Vb.js → Federation-Di9NPJ6Y.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-Bwpx_qG1.js → FormItemContext-CwjF4P1N.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-BOmjGKYM.js → GenericCardRenderer-BZRv0AD7.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-BnAkhaIF.js → Git-BUpxPamc.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-C47Eochw.js → Governance-D-RKals0.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-CFUir5Av.js → Inference-CEoHP1e3.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-C-rgIKPB.js → KnowledgeGraph-Bzb02Le2.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-B2ECWeOD.js → Logs-C80J5aHm.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-Bd24otS-.js → Marketplace-CLeqc86x.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-BEh50uI4.js → McpTools-C6_3jvji.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-ClE1QgWc.js → Memory-CB1VmvbL.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-DMsIqebF.js → MobileBridge-PPO8M2EY.js} +2 -2
  37. package/src/assets/web-panel/assets/{MobileProjects-yFLjy9f4.js → MobileProjects-Bu-ul-bk.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-lnmQdmxN.js → Mtc-CY0506vU.js} +4 -4
  39. package/src/assets/web-panel/assets/{MtcAudit-DEdi9KlB.js → MtcAudit-BV-IqDNO.js} +6 -6
  40. package/src/assets/web-panel/assets/{Multisig-EMtJxjIi.js → Multisig-8YiHk7pd.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-BiUmSSO5.js → NLProgramming-DCFi8iuv.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-3lpy_K7F.js → Notes-pcK3qdfo.js} +4 -4
  43. package/src/assets/web-panel/assets/{NotificationSettings-DdV8KQ2W.js → NotificationSettings-DrU6Ac_p.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-RiYZWIrY.js → OrderTableRenderer-tCu7jh7L.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-D4pXjOf7.js → Organization-r7rkShQ7.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-Bgiby6WK.js → Overflow-DGOBthyf.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-BHxhcSMm.js → P2P-DalC-NnK.js} +2 -2
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-BdUjqoZX.js → PdhVaultBrowser-4xxODAFn.js} +5 -5
  49. package/src/assets/web-panel/assets/{Permissions-DiT7TAuH.js → Permissions-C15WSlI2.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-yX_ynMWf.js → PersonalDataHub-DAGK05sL.js} +3 -3
  51. package/src/assets/web-panel/assets/{Pipeline-DSqiTMMR.js → Pipeline-NAji3Ktw.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-CEqDwNuF.js → Privacy-CCRUEGFK.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-5QUyd1ln.js → ProjectInit-DVmQTOeF.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-CC6VlFAp.js → ProjectSettings-1NVdULNr.js} +2 -2
  55. package/src/assets/web-panel/assets/{Projects-CxRagMyT.js → Projects-ws0_zzCP.js} +1 -1
  56. package/src/assets/web-panel/assets/{Providers-MmzWjI1Z.js → Providers-Bsi5PeyG.js} +1 -1
  57. package/src/assets/web-panel/assets/{QuickAsk-BvC_QGmG.js → QuickAsk-Teh85bAz.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend--uuUiAeR.js → Recommend-CnBrDiNE.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-D4mGDQhe.js → Reputation-BRuy4vvz.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-DEHR17nP.js → Row-AknoXYnV.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-Dhd5LlvJ.js → RssFeed-BYhR3Mr1.js} +2 -2
  62. package/src/assets/web-panel/assets/{Search-BKKaAsdv.js → Search-CCVNTHhz.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security-BNEZq_5G.js → Security-DtxuRS8f.js} +3 -3
  64. package/src/assets/web-panel/assets/{Services-DnnD83Th.js → Services-CH9pcUuR.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-DRN2nuYV.js → Skeleton-BVCIpTSu.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-CZ8v6lET.js → Skills-Bh0_27fL.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-fWXby0dV.js → Sla-Dt2ZjTIC.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-W3mT-TCc.js → SpeechSettings-3oB4vztB.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-Cf6KahGB.js → SyncSettings-3EakfvY5.js} +2 -2
  70. package/src/assets/web-panel/assets/{Tasks-2y3yFyI7.js → Tasks-DrkWRRuK.js} +1 -1
  71. package/src/assets/web-panel/assets/{Templates-C35-32qQ.js → Templates-bJMb7OuJ.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-BmdzuATF.js → Tenant-9T-oGFha.js} +1 -1
  73. package/src/assets/web-panel/assets/Terminal-CPZGmFF2.js +3 -0
  74. package/src/assets/web-panel/assets/{TimelineRenderer-5tp0WznW.js → TimelineRenderer-C6IcefQF.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-DirT8R87.js → Tokens-DRBbMZ6n.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-DYnzdL_p.js → Trigger-CfBK_gR2.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-C_q6P5WI.js → Trust-Csi86O_m.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-BUeK4hfx.js → UkeySign-Dh0RMWm3.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-BS_--Xsn.js → VideoEditing-CGVRp-xp.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-Bq_HZQqC.js → Wallet-ul6ZpClL.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-CY3WJ6nC.js → WebAuthn-B96-wm1H.js} +4 -4
  82. package/src/assets/web-panel/assets/{WorkflowEditor-DlPUi0YB.js → WorkflowEditor-CHvvdMYl.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-jQtA2Ab3.js → chat-CrmxJLgQ.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-ooTwaBud.js → colors-iw0H0UBl.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-BO5q8ejQ.js → compact-item-BoP3ciR6.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-CQEFxH8G.js → createContext-CerRGWSU.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-Cjez93XF.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-Bfh8ym7j.js → hasIn-DsatQYJx.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-BLFFfptZ.js → index-0GW7IL2K.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-vz2NGSmb.js → index-4IhKBZK7.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-B_jRn2qu.js → index-7l1rmyaN.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-ttHp-hXj.js → index-8jD5bKYd.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-BDu0C8OQ.js → index-B19YcZYT.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-BRAE0gub.js → index-BMbuAe5D.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CWHoylCz.js → index-BP_JGTE7.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DIdJ8ejc.js → index-BWZD_xU3.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DYXirELz.js → index-BXvqWNro.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-_8VdJDx9.js → index-BbSrbGp1.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DSySRvTm.js → index-BcyvEERG.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-B4g0hyRy.js → index-BgHjBX0-.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-D-TuIKgh.js → index-Boik4lkC.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-wEzQ3n0H.js → index-BuhW7RGq.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D67wRcX7.js → index-C1GAAh9I.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-Vq5_4yRG.js → index-C1Ve7k2T.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-D184_rN5.js → index-C5r1VXhR.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-Dplghama.js → index-CDkkLejB.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DpvBCXK2.js → index-CIKm0ljX.js} +1 -1
  108. package/src/assets/web-panel/assets/index-CN5J59xo.js +1 -0
  109. package/src/assets/web-panel/assets/{index-DenLVGTu.js → index-CSNbpxSb.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CXiTomlG.js → index-CSbZKYQE.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Bqd69z-n.js → index-CWjQpi8r.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-oEHdC_uw.js → index-Cxc0hflR.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DHKvkxN7.js → index-D0IzrHb1.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-U6Qz-HCH.js → index-D97QUify.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-B8GMkcIp.js → index-D9Sygqi9.js} +3 -3
  116. package/src/assets/web-panel/assets/{index-DBY9StK5.js → index-DAGrtlTV.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-B28q3m82.js → index-DDrhbD6H.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-kkC2JCE-.js → index-DKuaBG68.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-D_geVHb2.js → index-Dbpu7Y9S.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-DBfaQNOv.js → index-DnQ7-JQY.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-wAc5u7Y-.js → index-DvQd5rvA.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BouXFnjK.js → index-Dx4n5tpI.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CnMG8pdx.js → index-KTJ86cMc.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-iknCkh9p.js → index-QwRb8Iww.js} +1 -1
  125. package/src/assets/web-panel/assets/index-RnzfY85C.js +1 -0
  126. package/src/assets/web-panel/assets/{index-CtbbCXw9.js → index-b43zAH3v.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-0InkUerO.js → index-ykZB3IUq.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-C0lDjMFG.js → initDefaultProps-C_C9YePV.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-CKqarhmp.js → motion-DsRTNcag.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-DU_4DXfe.js → move-CNQpgGaU.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-C486jH10.js → omit-B_C8ne12.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-Sivz4zN9.js → pickAttrs-D95no1kz.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-Ca2RquTa.js → placementArrow-CqoJQLBC.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-BvwPauMH.js → responsiveObserve-BvxPjVzY.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-B9onHJLI.js → slide-C1PZ8gjQ.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-b_AgBw9w.js → statusUtils-CXlmu_Qa.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-EtdQYqac.js → styleChecker-Yeh5dWMi.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-Cp_Cx5AB.js → useFlexGapSupport-BA1uUeeV.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-Dwp7AWMH.js → useFs-TCL7sk7I.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-BjHr52Az.js → usePersonalDataHub-DD0yPkw9.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-CJkJ5hJu.js → vnode-Cxw9uvFj.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-DJEBPq5j.js → zoom-DPRJdorO.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/lib/image-input.js +90 -0
  145. package/src/repl/agent-repl.js +50 -5
  146. package/src/runtime/headless-stream.js +18 -2
  147. package/src/assets/web-panel/assets/Terminal-B6R_Mv2d.js +0 -3
  148. package/src/assets/web-panel/assets/devWarning-cfHzirPw.js +0 -1
  149. package/src/assets/web-panel/assets/index-CWB8kLmE.js +0 -1
  150. package/src/assets/web-panel/assets/index-DtaI9LEB.js +0 -1
@@ -1 +1 @@
1
- import{I as m,J as z,U as s,R as r,c as a,K as o,V as b,N as G,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-B8GMkcIp.js";import{u as te}from"./useFs-Dwp7AWMH.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=G(),A=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 U(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:I,exitCode:T}=await e.execute(p,3e4);k.value={success:T===0,output:I}}catch(p){k.value={success:!1,output:i("templates.messages.initFailed",{err:p.message})}}finally{w.value=""}}}const B=u(!1),O=u([]),x=u(""),j=u(null);async function L(){B.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{B.value=!1}}async function J(n){x.value=n,j.value=null;try{const p=`bi dashboard create --template ${n} --json`,{output:I,exitCode:T}=await e.execute(p,3e4);j.value={success:T===0,output:I}}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 I=Array.isArray(p)?p:Array.isArray(p?.prompts)?p.prompts:null;if(!I){g.error(i("templates.messages.fileShapeUnknown",{expected:"prompts: [...]"}));return}let T=0;for(const y of I)!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){M.push({path:"/chat",query:{prompt:n.content}})}function ce(n){return{general:"blue",code:"green",writing:"orange",analysis:"purple"}[n]||"default"}Y(()=>{H(),L()});const W={t:i,ws:e,router:M,fs:A,exportingPrompts:f,importingPrompts:h,activeTab:R,initLoading:w,initResult:k,showInitConfirm:P,pendingTemplate:S,PROJECT_TEMPLATE_NAMES:F,projectTemplates:N,confirmInit:U,doInit:E,biLoading:B,biTemplates:O,biCreating:x,biResult:j,loadBiTemplates:L,createBiDashboard:J,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:Y,get useI18n(){return $},get useRouter(){return G},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"}},Ie={style:{"margin-top":"12px","text-align":"right"}},ze={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"}},Be={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"}},Me={style:{"margin-bottom":"16px",display:"flex",gap:"8px"}},Ue={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},Je={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,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"),F=m("a-empty"),N=m("a-tag"),U=m("a-tabs"),E=m("a-modal"),B=m("a-input"),O=m("a-form-item"),x=m("a-select-option"),j=m("a-select"),L=m("a-textarea"),J=m("a-form");return d(),z("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(U,{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),z(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",Ie,[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",ze,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(),z("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),z(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",Be,[s("div",Ae,r(t.name),1),s("div",Ne,r(t.description||e.t("templates.bi.noDescription")),1),t.id?(d(),z("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(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",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",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),z(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",Ue,[a(e.FileTextOutlined,{style:{"font-size":"18px",color:"#52c41a"}}),s("span",Je,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(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(J,{layout:"vertical"},{default:o(()=>[a(O,{label:e.t("templates.prompts.nameLabel"),required:""},{default:o(()=>[a(B,{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-dUwIHq/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 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-D9Sygqi9.js";import{u as te}from"./useFs-TCL7sk7I.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=Y(),A=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 U(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 B=u(!1),O=u([]),x=u(""),j=u(null);async function L(){B.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{B.value=!1}}async function J(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){M.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:M,fs:A,exportingPrompts:f,importingPrompts:h,activeTab:R,initLoading:w,initResult:k,showInitConfirm:P,pendingTemplate:S,PROJECT_TEMPLATE_NAMES:F,projectTemplates:N,confirmInit:U,doInit:E,biLoading:B,biTemplates:O,biCreating:x,biResult:j,loadBiTemplates:L,createBiDashboard:J,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"}},Fe={style:{display:"flex","align-items":"flex-start",gap:"10px"}},Be={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"}},Me={style:{"margin-bottom":"16px",display:"flex",gap:"8px"}},Ue={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},Je={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,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"),F=m("a-empty"),N=m("a-tag"),U=m("a-tabs"),E=m("a-modal"),B=m("a-input"),O=m("a-form-item"),x=m("a-select-option"),j=m("a-select"),L=m("a-textarea"),J=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(U,{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",Be,[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(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",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",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",Ue,[a(e.FileTextOutlined,{style:{"font-size":"18px",color:"#52c41a"}}),s("span",Je,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(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(J,{layout:"vertical"},{default:o(()=>[a(O,{label:e.t("templates.prompts.nameLabel"),required:""},{default:o(()=>[a(B,{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-YdUQlr/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 Z,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-B8GMkcIp.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 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=J(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=J(e);return Array.isArray(l)?l.map(Gt).filter(Boolean):[]}function Ht(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(Ht).filter(Boolean):[]}function Zt(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(Zt).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}}),Y=h("tenants"),A=h(""),I=h(""),E=h(!1),V=h(!1),G=h(!1),B=h(!1),T=Z({name:"",slug:"",plan:"free",owner:""}),k=Z({tenantId:"",plan:"pro",amount:null,duration:720*60*60*1e3}),F=h(""),q=Z({tenantId:null,metric:"api_calls",period:""}),S=Z({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,G.value=!0):r==="record"&&(B.value=!0)}async function U(){D.value=!0;try{const[r,i,f,H,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(H.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:H}=await u.execute(f.join(" "),1e4);if(/error|Error|失败/i.test(H)&&!/"id"/.test(H)){b.error(t("tenant.msg.createFailed")+": "+H.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(),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:V,showQuotaModal:G,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:Z,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"),Y=v("a-row"),A=v("a-tag"),I=v("a-radio-button"),E=v("a-radio-group"),V=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"),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(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(),_(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(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(),_(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(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(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-dUwIHq/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-D9Sygqi9.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 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=J(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=J(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=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}}),Y=h("tenants"),A=h(""),I=h(""),E=h(!1),V=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),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,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,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(),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:V,showQuotaModal:G,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"),Y=v("a-row"),A=v("a-tag"),I=v("a-radio-button"),E=v("a-radio-group"),V=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"),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(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(),_(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(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(),_(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(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(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-YdUQlr/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 U,e as V}from"./index-D9Sygqi9.js";import{I as z,J as x,U as _,Q as D,S as J,K as T,V as R,c as A,F as K,Z,R as E,o as G,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(L=>({seq:L.seq,data:ae(L.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 L(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 V(()=>import("./xterm-BZcWGsqw.js").then(t=>t.x),__vite__mapDeps([0,1,2]),import.meta.url),M=await V(()=>import("./addon-fit-CK6X9sAG.js").then(t=>t.a),__vite__mapDeps([3,1,2]),import.meta.url),await V(()=>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}),P=new p.FitAddon;m.loadAddon(P),m.open(b);try{P.fit()}catch{}t.xterm=m,t.fitAddon=P;const ie=m.onData(v=>{s.stdin(t.id,v).catch(g=>{String(g?.message||"").includes("dangerous_keyword_blocked")?U.warning("该命令被桌面端拦截(高危关键字)"):U.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 j of v)m.write(j.data),t.lastSeq=j.seq}catch(v){m.writeln(`\x1B[31m[history fetch failed: ${v?.message||v}]\x1B[0m`)}const Y=new ResizeObserver(()=>{try{P.fit(),s.resize(t.id,m.cols,m.rows).catch(()=>{})}catch{}});Y.observe(b);const ue=t.offs;t.offs=()=>{try{Y.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}}G(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:L,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:G,onBeforeUnmount:H,nextTick:q,watch:$,get message(){return U},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"},Le=["data-session-id"],Pe={key:0,class:"xterm-placeholder"},De={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]=D(" 桌面端托管的 PTY 会话;Android 端可远程操控同一通道 ",-1)),e.warning?(y(),J(u,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:T(()=>[D(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]=D(" 新会话 ",-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]=D(" 刷新 ",-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,Z(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,Z(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,Le)),[[_e,r.id===e.activeId]])),128)),e.sessions.length===0?(y(),x("div",Pe,[...o[6]||(o[6]=[_("span",null,"无活跃会话",-1)])])):R("v-if",!0)])]),e.active?(y(),x("div",De,[_("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-YdUQlr/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-B8GMkcIp.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}},w={class:"timeline-event"},V={class:"dot"},B={class:"card"},E={class:"head"},R={class:"time"},j={class:"primary"},H={key:0},I={key:1},q={key:2},A={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",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",H,o(e.route),1)):e.placeName?(n(),i("span",I,"📍 "+o(e.placeName),1)):(n(),i("span",q,o(e.fallbackText),1))]),e.trainNo||e.flightNo?(n(),i("div",A,[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 J=b(C,[["render",P],["__scopeId","data-v-18400280"],["__file","/tmp/cc-web-panel-dUwIHq/repo/packages/web-panel/src/components/pdh/renderers/TimelineRenderer.vue"]]);export{J 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-D9Sygqi9.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}},V={class:"timeline-event"},w={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",V,[l("div",w,[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 q=b(C,[["render",Q],["__scopeId","data-v-18400280"],["__file","/tmp/cc-web-panel-YdUQlr/repo/packages/web-panel/src/components/pdh/renderers/TimelineRenderer.vue"]]);export{q 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-B8GMkcIp.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 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=>D(J.output)).find(J=>J.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: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 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)"}},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"}},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"),G=_("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(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(),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",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",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-dUwIHq/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 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-D9Sygqi9.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 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=>D(J.output)).find(J=>J.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: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 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)"}},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"}},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"),G=_("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(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(),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",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",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-YdUQlr/repo/packages/web-panel/src/views/Tokens.vue"]]);export{de as default};