chainlesschain 0.158.0 → 0.159.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-9QEKGr43.js → AIOps-ztGJppiG.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-BQElVBgD.js → ActionButton-DCuat-R-.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DbZbFR_a.js → Analytics-m_EtU-RR.js} +2 -2
  6. package/src/assets/web-panel/assets/AppLayout-8HizVjee.css +1 -0
  7. package/src/assets/web-panel/assets/AppLayout-Crz8jbEC.js +1 -0
  8. package/src/assets/web-panel/assets/Audit-CNLWjMXN.js +1 -0
  9. package/src/assets/web-panel/assets/Audit-kU7vbN-D.css +1 -0
  10. package/src/assets/web-panel/assets/Backup-CggaSq9O.js +1 -0
  11. package/src/assets/web-panel/assets/Backup-DxLiJzmk.css +1 -0
  12. package/src/assets/web-panel/assets/{BaseInput-60t9IMEz.js → BaseInput-BssiYvl6.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-3Kj2JQP4.js → Chat-tuVfpQUO.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-Ba1Rf2Ea.js → Checkbox-BUUkXdQg.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-WiYmL3oB.js → Codegen-CHu-7YGr.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-D2zhpSqE.js → Col-2IaMFwmX.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-DgqmUGwT.js → Community-CYL7Fvjq.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-D_dbJDbi.js → Compact-5yRVELhA.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-BVcVb-e2.js → Compliance-CKuIDJHK.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-pgKzBNDo.js → Cowork-CFkkMMDK.js} +4 -4
  21. package/src/assets/web-panel/assets/{Cron-Cs5QaKTP.js → Cron-DIfkI7vf.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-pjWfIM8s.js → Crosschain-BkjY-lst.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-DQtsjz3X.js → DID-ChzRkgNy.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-sqj42zKx.js → Dashboard-DKrbXVNn.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-BM_ljd87.js → Dropdown-BYGoxH1z.js} +1 -1
  26. package/src/assets/web-panel/assets/{Federation-CId-3zn6.js → Federation-B8QX-IaA.js} +1 -1
  27. package/src/assets/web-panel/assets/{FormItemContext-CnzbixSE.js → FormItemContext-Be6TSNxz.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-B38QeOPF.js → Git-BBnGgbBR.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-DrGkAjd1.js → Governance-CxUHZMsp.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-BjkHB4sD.js → Inference-BlnOG71q.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-Trs1XJFK.js → KnowledgeGraph-vkVq38kC.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-B39LUZs9.js → Logs-Bxx7WARH.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-BnpOoITi.js → Marketplace-Bh8ExT9_.js} +1 -1
  34. package/src/assets/web-panel/assets/McpTools-CTQrNVAQ.css +1 -0
  35. package/src/assets/web-panel/assets/McpTools-Djj_a3ko.js +5 -0
  36. package/src/assets/web-panel/assets/{Memory-BHXHpldt.js → Memory-DlgNgAov.js} +2 -2
  37. package/src/assets/web-panel/assets/{NLProgramming-B3BALajs.js → NLProgramming-BN3jaoen.js} +1 -1
  38. package/src/assets/web-panel/assets/Notes-DKkPfXlY.css +1 -0
  39. package/src/assets/web-panel/assets/Notes-De7mIkkV.js +7 -0
  40. package/src/assets/web-panel/assets/{Organization-CQ1X722j.js → Organization-B-98mdK2.js} +4 -4
  41. package/src/assets/web-panel/assets/{Overflow-DHKu8e8g.js → Overflow-G0I8IlY3.js} +1 -1
  42. package/src/assets/web-panel/assets/{OverrideContext-DEW2m7K6.js → OverrideContext-GHsJf9ok.js} +1 -1
  43. package/src/assets/web-panel/assets/{P2P-BflX74Hm.js → P2P-DIUgHZ1z.js} +2 -2
  44. package/src/assets/web-panel/assets/{Permissions-B2XrAUBW.js → Permissions-B8XycCVk.js} +4 -4
  45. package/src/assets/web-panel/assets/{Pipeline-C0K9-DnR.js → Pipeline-cUpETlXS.js} +1 -1
  46. package/src/assets/web-panel/assets/Portal-SsPhn64D.js +1 -0
  47. package/src/assets/web-panel/assets/Privacy-B6J89UBw.js +1 -0
  48. package/src/assets/web-panel/assets/{ProjectSettings-C34C7hFt.js → ProjectSettings-2Ftw0zt_.js} +2 -2
  49. package/src/assets/web-panel/assets/{Projects-DLvUzeIB.js → Projects-CcOdFpgr.js} +2 -2
  50. package/src/assets/web-panel/assets/{Providers-BFiMVWaM.js → Providers-D0r2qSf-.js} +2 -2
  51. package/src/assets/web-panel/assets/QuickAsk-CwsPpfkq.js +1 -0
  52. package/src/assets/web-panel/assets/{Recommend-BmUhysGC.js → Recommend-BYEDetJm.js} +1 -1
  53. package/src/assets/web-panel/assets/{Reputation-BlfSvJww.js → Reputation-Bli4hBGH.js} +1 -1
  54. package/src/assets/web-panel/assets/{Row-Dl74576S.js → Row-DTW9_BYi.js} +1 -1
  55. package/src/assets/web-panel/assets/{RssFeed-9_MkDUxZ.js → RssFeed-kwj_himl.js} +3 -3
  56. package/src/assets/web-panel/assets/{Search-CSRY_TYa.js → Search-DymcqASO.js} +1 -1
  57. package/src/assets/web-panel/assets/{Security-DfDoKfkl.js → Security-Bh3yvyNN.js} +3 -3
  58. package/src/assets/web-panel/assets/{Services-7Blny0Jc.js → Services-O4UZaYur.js} +2 -2
  59. package/src/assets/web-panel/assets/{Skeleton-6CF_3QUY.js → Skeleton-B82oQZTz.js} +1 -1
  60. package/src/assets/web-panel/assets/Skills-BfkrC05g.js +1 -0
  61. package/src/assets/web-panel/assets/{Sla-B93c8j92.js → Sla-DEs5XCIf.js} +1 -1
  62. package/src/assets/web-panel/assets/SpeechSettings-BWMhb10j.js +1 -0
  63. package/src/assets/web-panel/assets/SpeechSettings-CiKvsIyV.css +1 -0
  64. package/src/assets/web-panel/assets/{Tasks-Db9TRjE7.js → Tasks-CIBUb9M1.js} +1 -1
  65. package/src/assets/web-panel/assets/Templates-DAkzr0xS.css +1 -0
  66. package/src/assets/web-panel/assets/Templates-iqSuJY-O.js +1 -0
  67. package/src/assets/web-panel/assets/{Tenant-BXS8s6vl.js → Tenant-CLqZjkVq.js} +1 -1
  68. package/src/assets/web-panel/assets/{Tokens-CvmTVU7E.js → Tokens-Bwz8aQtK.js} +1 -1
  69. package/src/assets/web-panel/assets/Trigger-CxnChVoS.js +1 -0
  70. package/src/assets/web-panel/assets/{Trust-HMz40LfZ.js → Trust-Bp23lyZl.js} +1 -1
  71. package/src/assets/web-panel/assets/UkeySign-_VAMquoh.js +1 -0
  72. package/src/assets/web-panel/assets/{VideoEditing-DEhH42sI.js → VideoEditing-Bxqwg4zW.js} +1 -1
  73. package/src/assets/web-panel/assets/{Wallet-AGwfOdTM.js → Wallet-Cvht6Yrh.js} +4 -4
  74. package/src/assets/web-panel/assets/{WebAuthn-DK5tKWul.js → WebAuthn-DD4EomJu.js} +4 -4
  75. package/src/assets/web-panel/assets/WorkflowEditor-CEKNTS5G.css +1 -0
  76. package/src/assets/web-panel/assets/WorkflowEditor-CJy5e0fl.js +1 -0
  77. package/src/assets/web-panel/assets/{chat-CVn-r3oV.js → chat-DY27mJje.js} +1 -1
  78. package/src/assets/web-panel/assets/{collapseMotion-D3P4mRvK.js → collapseMotion-CyadT_6x.js} +1 -1
  79. package/src/assets/web-panel/assets/{colors-BiB5aDao.js → colors-B7fDvuJc.js} +1 -1
  80. package/src/assets/web-panel/assets/{compact-item-CHderV9n.js → compact-item-DgthOVXi.js} +1 -1
  81. package/src/assets/web-panel/assets/{createContext-DMZ-5dy2.js → createContext-Blw2vgkG.js} +1 -1
  82. package/src/assets/web-panel/assets/{hasIn-BKDBYP3s.js → hasIn-BfL1HJZl.js} +1 -1
  83. package/src/assets/web-panel/assets/{icons-ukMaZ3tx.js → icons-CJACPYXu.js} +4 -4
  84. package/src/assets/web-panel/assets/{index-DvI8Xtzv.js → index-00RNC3ZQ.js} +2 -2
  85. package/src/assets/web-panel/assets/{index-BlXskar6.js → index-B9B9Zbf3.js} +1 -1
  86. package/src/assets/web-panel/assets/index-BAsMNMbh.js +1 -0
  87. package/src/assets/web-panel/assets/{index-BfKFNptm.js → index-BB5y5Y0z.js} +3 -3
  88. package/src/assets/web-panel/assets/{index-CBYNsy51.js → index-BHnaIQEm.js} +1 -1
  89. package/src/assets/web-panel/assets/index-BVjDIZQ4.js +1 -0
  90. package/src/assets/web-panel/assets/index-BZeRnzuY.js +55 -0
  91. package/src/assets/web-panel/assets/{index-BgDX-tzO.js → index-BZfoAtZC.js} +1 -1
  92. package/src/assets/web-panel/assets/index-Bl2nXm2J.js +13 -0
  93. package/src/assets/web-panel/assets/{index-B7fivpG2.js → index-BsleJWGy.js} +2 -2
  94. package/src/assets/web-panel/assets/{index-7fxCGMoL.js → index-BuEOhTAw.js} +5 -5
  95. package/src/assets/web-panel/assets/{index-BRRFK-im.js → index-Bw1dwHWm.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BBk2e7vJ.js → index-Bw_UV2ez.js} +1 -1
  97. package/src/assets/web-panel/assets/index-C8GYpC65.js +1 -0
  98. package/src/assets/web-panel/assets/{index-BVOI707f.js → index-CBHlKa-J.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CEpcKl17.js → index-CL-7KCFI.js} +2 -2
  100. package/src/assets/web-panel/assets/{index-BBWUR4u4.js → index-CiN4NEAa.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DtDFSCfE.js → index-CqjUUbil.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DvfAkHw8.js → index-Cqtt1N0F.js} +1 -1
  103. package/src/assets/web-panel/assets/index-D1QP9Ue1.js +1 -0
  104. package/src/assets/web-panel/assets/index-D6BUjL6I.js +1 -0
  105. package/src/assets/web-panel/assets/{index-BadelvSE.js → index-DN7ywgBJ.js} +1 -1
  106. package/src/assets/web-panel/assets/index-DasW8LIs.js +1 -0
  107. package/src/assets/web-panel/assets/{index-D3lD9wgX.js → index-Dd9McFt_.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DZ8MjPLC.js → index-DdzLEdL6.js} +1 -1
  109. package/src/assets/web-panel/assets/index-DhML6F3z.js +1 -0
  110. package/src/assets/web-panel/assets/{index-Ncxqj2UN.js → index-DjN0nHiV.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-7pqZqPD2.js → index-DjhWpiZW.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BryAkWUJ.js → index-DouFuKIR.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CUT3Nmzx.js → index-DyRzaN4b.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BjSojphX.js → index-DzWwjWYN.js} +1 -1
  115. package/src/assets/web-panel/assets/index-Dza_w3kG.js +1 -0
  116. package/src/assets/web-panel/assets/{index-AIdelwOe.js → index-Q4qgOtOe.js} +1 -1
  117. package/src/assets/web-panel/assets/index-Vit9TJBu.js +36 -0
  118. package/src/assets/web-panel/assets/{index-_sntSncx.js → index-lkJllVbJ.js} +3 -3
  119. package/src/assets/web-panel/assets/{index-CbpCY2ch.js → index-uMWaXVtR.js} +2 -2
  120. package/src/assets/web-panel/assets/{index-uujjC_4g.js → index-uwh_ikIt.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-C1p_dZw0.js → index-x8iHfZRd.js} +3 -3
  122. package/src/assets/web-panel/assets/{initDefaultProps-B2vQoQga.js → initDefaultProps-BeWIEzBr.js} +1 -1
  123. package/src/assets/web-panel/assets/{motion-D2eluOJu.js → motion-CIQOKmi6.js} +3 -3
  124. package/src/assets/web-panel/assets/{move-CgcvSoZ7.js → move-ZgRPlBji.js} +1 -1
  125. package/src/assets/web-panel/assets/{omit-DvLh7wH1.js → omit-BS0H_YEP.js} +1 -1
  126. package/src/assets/web-panel/assets/{pickAttrs-BsseBclw.js → pickAttrs-BOGgGau8.js} +1 -1
  127. package/src/assets/web-panel/assets/{placementArrow-XLLtr9qD.js → placementArrow--c5TQkDQ.js} +1 -1
  128. package/src/assets/web-panel/assets/{responsiveObserve-ByCb5zZK.js → responsiveObserve-CrHOX7jp.js} +1 -1
  129. package/src/assets/web-panel/assets/{slide-CeP5JCiZ.js → slide-Dd2mJUD0.js} +1 -1
  130. package/src/assets/web-panel/assets/{statusUtils-DMVoo96t.js → statusUtils-5QFvAofV.js} +1 -1
  131. package/src/assets/web-panel/assets/{styleChecker-Cz5mJgc8.js → styleChecker-CiDrXnbi.js} +1 -1
  132. package/src/assets/web-panel/assets/{transition-DSe9CgZe.js → transition-CVd2ueaJ.js} +1 -1
  133. package/src/assets/web-panel/assets/{useConfigInject-DCcT0grw.js → useConfigInject-DIkkDpt1.js} +2 -2
  134. package/src/assets/web-panel/assets/useFlexGapSupport-rrtj6f1h.js +1 -0
  135. package/src/assets/web-panel/assets/useFs-CK8VYPus.js +1 -0
  136. package/src/assets/web-panel/assets/{useMergedState-DbHXwBgv.js → useMergedState-CLY-UHry.js} +1 -1
  137. package/src/assets/web-panel/assets/{useRefs-DRyTVik7.js → useRefs-HzOoMkZk.js} +1 -1
  138. package/src/assets/web-panel/assets/useShellMode-CgR0wCYM.js +1 -0
  139. package/src/assets/web-panel/assets/{useState-DoAhV80c.js → useState-yWVBuz1S.js} +1 -1
  140. package/src/assets/web-panel/assets/{vendor-BVetwVfk.js → vendor-D0Qjn73K.js} +1 -1
  141. package/src/assets/web-panel/assets/vnode-xRp-KMjS.js +1 -0
  142. package/src/assets/web-panel/assets/ws-4ur1fGsk.js +1 -0
  143. package/src/assets/web-panel/assets/{zoom-CDfM_sRk.js → zoom-CrI_kdTW.js} +1 -1
  144. package/src/assets/web-panel/index.html +3 -3
  145. package/src/gateways/ws/ws-session-gateway.js +12 -1
  146. package/src/lib/listen-with-port-fallback.js +103 -0
  147. package/src/runtime/agent-runtime.js +80 -18
  148. package/src/assets/web-panel/assets/AppLayout-BbfBwVfE.js +0 -1
  149. package/src/assets/web-panel/assets/AppLayout-CKMl4NLf.css +0 -1
  150. package/src/assets/web-panel/assets/Audit-DzddAZVx.js +0 -1
  151. package/src/assets/web-panel/assets/Audit-L4_ApS01.css +0 -1
  152. package/src/assets/web-panel/assets/Backup-D46qSgzQ.js +0 -1
  153. package/src/assets/web-panel/assets/Backup-fZqtfC1m.css +0 -1
  154. package/src/assets/web-panel/assets/McpTools-CyhSLDwf.css +0 -1
  155. package/src/assets/web-panel/assets/McpTools-DbwkdBUE.js +0 -4
  156. package/src/assets/web-panel/assets/Notes-BG69sJKi.css +0 -1
  157. package/src/assets/web-panel/assets/Notes-u6lLTv0t.js +0 -2
  158. package/src/assets/web-panel/assets/Portal-CHsntPCQ.js +0 -1
  159. package/src/assets/web-panel/assets/Privacy-BKPoZngH.js +0 -1
  160. package/src/assets/web-panel/assets/Skills-DowQcRe1.js +0 -1
  161. package/src/assets/web-panel/assets/Templates-DJ_hvs5c.js +0 -1
  162. package/src/assets/web-panel/assets/Templates-DOY_oZnm.css +0 -1
  163. package/src/assets/web-panel/assets/Trigger-BenSsaoN.js +0 -1
  164. package/src/assets/web-panel/assets/WorkflowEditor-D5bX6woe.css +0 -1
  165. package/src/assets/web-panel/assets/WorkflowEditor-vlujdL6I.js +0 -1
  166. package/src/assets/web-panel/assets/index-A4RpHMOa.js +0 -1
  167. package/src/assets/web-panel/assets/index-B5oebI6W.js +0 -1
  168. package/src/assets/web-panel/assets/index-D3PGpBPm.js +0 -1
  169. package/src/assets/web-panel/assets/index-D5Beu9ZA.js +0 -1
  170. package/src/assets/web-panel/assets/index-DRRzH4Ge.js +0 -13
  171. package/src/assets/web-panel/assets/index-DRcTAUJA.js +0 -1
  172. package/src/assets/web-panel/assets/index-DfcXDy2A.js +0 -36
  173. package/src/assets/web-panel/assets/index-DyXslU_B.js +0 -1
  174. package/src/assets/web-panel/assets/index-MoLxDrkb.js +0 -55
  175. package/src/assets/web-panel/assets/index-YgC7QI1N.js +0 -1
  176. package/src/assets/web-panel/assets/index-yMt4C1Gh.js +0 -1
  177. package/src/assets/web-panel/assets/useFlexGapSupport-BZkoDuF3.js +0 -1
  178. package/src/assets/web-panel/assets/vnode-Dexy2NN9.js +0 -1
  179. package/src/assets/web-panel/assets/ws-Bv7YH0VB.js +0 -1
@@ -1,4 +1,4 @@
1
- import{u as fe}from"./ws-Bv7YH0VB.js";import{_ as ve}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-BfKFNptm.js";import{Y as me,ac as ye,Q as ge,n as _e,L as H,H as be}from"./icons-ukMaZ3tx.js";import{l as xe,F as p,D as I,c as t,x as a,r,q as u,v as n,J as f,u as D,m as z,I as c,G as m,H as ke,L as he}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";const we={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={key:0,style:{"text-align":"center",padding:"60px"}},De={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Re={key:0,style:{"margin-top":"12px"}},ze={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Le={key:0,style:{"margin-top":"8px"}},Te={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ae={key:0,style:{"margin-top":"8px"}},Ne={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},We={key:0,style:{"text-align":"center",padding:"60px"}},Oe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Se={key:1,style:{color:"#e0e0e0"}},Me={key:2,style:{color:"var(--text-secondary)"}},$e={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ee={__name:"Security",setup(Ue){const C=fe(),N=r("did"),M=r(!1);async function X(){M.value=!0;try{N.value==="did"?await O():N.value==="audit"&&await Q()}finally{M.value=!1}}function Z(l){l==="did"&&V.value.length===0&&O(),l==="audit"&&S.value.length===0&&Q()}const $=r(!1),E=r(!1),U=r(!1),V=r([]),B=r(!1),W=r(""),L=r(""),ee=[{title:"DID",key:"did",dataIndex:"did",ellipsis:!0},{title:"方法",key:"method",dataIndex:"method",width:"100px"},{title:"创建时间",key:"created",dataIndex:"created",width:"180px"},{title:"状态",key:"status",width:"80px"}];async function O(){$.value=!0;try{const{output:l}=await C.execute("did list",15e3);V.value=te(l)}catch(l){x.error("加载 DID 列表失败: "+l.message)}finally{$.value=!1}}function te(l){const e=[],y=l.split(`
2
- `);for(const w of y){const s=w.trim();if(!s||s.startsWith("─")||s.startsWith("DID")||s.match(/^\d+ identit/i))continue;const i=s.match(/(did:\w+:\w+)/);if(i){const d=i[1],g=d.split(":")[1]||"key",b=/default|默认|\*/.test(s),_=s.match(/(\d{4}-\d{2}-\d{2}[\sT]?\d{2}:\d{2}(?::\d{2})?)/);e.push({key:d,did:d,method:g,created:_?_[1]:"-",isDefault:b})}}return e}async function ae(){E.value=!0;try{const{output:l}=await C.execute("did create",2e4);l.includes("error")||l.includes("失败")?x.error("创建失败: "+l.slice(0,120)):(x.success("DID 身份已创建"),await O())}catch(l){x.error("创建失败: "+l.message)}finally{E.value=!1}}async function le(){if(!W.value.trim()){x.warning("请输入消息");return}U.value=!0,L.value="";try{const{output:l}=await C.execute(`did sign "${W.value.replace(/"/g,'\\"')}"`,15e3);L.value=l,!l.includes("error")&&!l.includes("失败")&&x.success("签名成功")}catch(l){L.value="签名失败: "+l.message}finally{U.value=!1}}const T=r(""),A=r(""),F=r(!1),K=r(!1),k=r(null),h=r(null);async function oe(){if(T.value.trim()){F.value=!0,k.value=null;try{const{output:l,exitCode:e}=await C.execute(`encrypt file "${T.value.trim()}"`,3e4);k.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"加密完成"},k.value.success&&x.success("文件加密成功")}catch(l){k.value={success:!1,output:"加密失败: "+l.message}}finally{F.value=!1}}}async function se(){if(A.value.trim()){K.value=!0,h.value=null;try{const{output:l,exitCode:e}=await C.execute(`decrypt file "${A.value.trim()}"`,3e4);h.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"解密完成"},h.value.success&&x.success("文件解密成功")}catch(l){h.value={success:!1,output:"解密失败: "+l.message}}finally{K.value=!1}}}const P=r(!1),S=r([]),J=r([]),ne=[{title:"时间",key:"time",dataIndex:"time",width:"180px"},{title:"事件",key:"event",dataIndex:"event",width:"200px"},{title:"用户",key:"user",dataIndex:"user",width:"120px"},{title:"级别",key:"level",dataIndex:"level",width:"80px"},{title:"详情",key:"detail",dataIndex:"detail",ellipsis:!0}];function re(l){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(l||"").toLowerCase()]||"default"}async function Q(){P.value=!0;try{const[l,e]=await Promise.all([C.execute("audit log",15e3),C.execute("audit stats",15e3)]);S.value=ie(l.output),J.value=ue(e.output)}catch(l){x.error("加载审计日志失败: "+l.message)}finally{P.value=!1}}function ie(l){const e=[],y=l.split(`
1
+ import{u as fe}from"./ws-4ur1fGsk.js";import{_ as ve}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-BB5y5Y0z.js";import{_ as me,ah as ye,K as ge,o as _e,L as J,J as be}from"./icons-CJACPYXu.js";import{l as xe,F as p,D as I,c as t,x as a,r,q as u,v as n,J as f,u as D,m as z,I as c,G as m,H as ke,L as he}from"./vendor-D0Qjn73K.js";import"./index-Vit9TJBu.js";import"./useConfigInject-DIkkDpt1.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";const we={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={key:0,style:{"text-align":"center",padding:"60px"}},De={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Re={key:0,style:{"margin-top":"12px"}},ze={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Le={key:0,style:{"margin-top":"8px"}},Te={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ae={key:0,style:{"margin-top":"8px"}},Ne={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},We={key:0,style:{"text-align":"center",padding:"60px"}},Oe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Se={key:1,style:{color:"#e0e0e0"}},Me={key:2,style:{color:"var(--text-secondary)"}},$e={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ee={__name:"Security",setup(Ke){const C=fe(),N=r("did"),M=r(!1);async function Y(){M.value=!0;try{N.value==="did"?await O():N.value==="audit"&&await Q()}finally{M.value=!1}}function Z(l){l==="did"&&U.value.length===0&&O(),l==="audit"&&S.value.length===0&&Q()}const $=r(!1),E=r(!1),K=r(!1),U=r([]),V=r(!1),W=r(""),L=r(""),ee=[{title:"DID",key:"did",dataIndex:"did",ellipsis:!0},{title:"方法",key:"method",dataIndex:"method",width:"100px"},{title:"创建时间",key:"created",dataIndex:"created",width:"180px"},{title:"状态",key:"status",width:"80px"}];async function O(){$.value=!0;try{const{output:l}=await C.execute("did list",15e3);U.value=te(l)}catch(l){x.error("加载 DID 列表失败: "+l.message)}finally{$.value=!1}}function te(l){const e=[],y=l.split(`
2
+ `);for(const w of y){const s=w.trim();if(!s||s.startsWith("─")||s.startsWith("DID")||s.match(/^\d+ identit/i))continue;const i=s.match(/(did:\w+:\w+)/);if(i){const d=i[1],g=d.split(":")[1]||"key",b=/default|默认|\*/.test(s),_=s.match(/(\d{4}-\d{2}-\d{2}[\sT]?\d{2}:\d{2}(?::\d{2})?)/);e.push({key:d,did:d,method:g,created:_?_[1]:"-",isDefault:b})}}return e}async function ae(){E.value=!0;try{const{output:l}=await C.execute("did create",2e4);l.includes("error")||l.includes("失败")?x.error("创建失败: "+l.slice(0,120)):(x.success("DID 身份已创建"),await O())}catch(l){x.error("创建失败: "+l.message)}finally{E.value=!1}}async function le(){if(!W.value.trim()){x.warning("请输入消息");return}K.value=!0,L.value="";try{const{output:l}=await C.execute(`did sign "${W.value.replace(/"/g,'\\"')}"`,15e3);L.value=l,!l.includes("error")&&!l.includes("失败")&&x.success("签名成功")}catch(l){L.value="签名失败: "+l.message}finally{K.value=!1}}const T=r(""),A=r(""),B=r(!1),F=r(!1),k=r(null),h=r(null);async function oe(){if(T.value.trim()){B.value=!0,k.value=null;try{const{output:l,exitCode:e}=await C.execute(`encrypt file "${T.value.trim()}"`,3e4);k.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"加密完成"},k.value.success&&x.success("文件加密成功")}catch(l){k.value={success:!1,output:"加密失败: "+l.message}}finally{B.value=!1}}}async function se(){if(A.value.trim()){F.value=!0,h.value=null;try{const{output:l,exitCode:e}=await C.execute(`decrypt file "${A.value.trim()}"`,3e4);h.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"解密完成"},h.value.success&&x.success("文件解密成功")}catch(l){h.value={success:!1,output:"解密失败: "+l.message}}finally{F.value=!1}}}const P=r(!1),S=r([]),H=r([]),ne=[{title:"时间",key:"time",dataIndex:"time",width:"180px"},{title:"事件",key:"event",dataIndex:"event",width:"200px"},{title:"用户",key:"user",dataIndex:"user",width:"120px"},{title:"级别",key:"level",dataIndex:"level",width:"80px"},{title:"详情",key:"detail",dataIndex:"detail",ellipsis:!0}];function re(l){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(l||"").toLowerCase()]||"default"}async function Q(){P.value=!0;try{const[l,e]=await Promise.all([C.execute("audit log",15e3),C.execute("audit stats",15e3)]);S.value=ie(l.output),H.value=ue(e.output)}catch(l){x.error("加载审计日志失败: "+l.message)}finally{P.value=!1}}function ie(l){const e=[],y=l.split(`
3
3
  `);for(const w of y){const s=w.trim();if(!s||s.startsWith("─")||s.startsWith("Audit")||s.startsWith("Recent"))continue;const i=s.split(/\s*[|│]\s*/);if(i.length>=3){e.push({key:e.length,time:i[0]||"-",event:i[1]||"-",user:i[2]||"-",level:i[3]||"info",detail:i.slice(4).join(" ")||""});continue}const d=s.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(d){const g=d[2],b=g.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);e.push({key:e.length,time:d[1],event:g.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:b?b[1].toLowerCase():"info",detail:""})}else s.length>3&&!s.match(/^\d+ event/i)&&e.push({key:e.length,time:"-",event:s.slice(0,80),user:"-",level:"info",detail:""})}return e}function ue(l){const e=[],y=l.split(`
4
- `),w=["#1677ff","#52c41a","#faad14","#ff4d4f"];let s=0;for(const i of y){const d=i.trim();if(!d||d.startsWith("─")||d.startsWith("Audit"))continue;const g=d.match(/^(.+?)\s*[:=:]\s*(.+)$/);if(g){const b=g[1].trim(),_=g[2].trim(),R=_.match(/^(\d+)/);e.push({label:b,value:R?parseInt(R[1],10):_,color:w[s%w.length]}),s++}}return e.length===0&&e.push({label:"总事件数",value:S.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),e}return xe(()=>{O()}),(l,e)=>{const y=u("a-button"),w=u("a-space"),s=u("a-spin"),i=u("a-tag"),d=u("a-empty"),g=u("a-table"),b=u("a-input"),_=u("a-form-item"),R=u("a-form"),de=u("a-modal"),G=u("a-tab-pane"),j=u("a-card"),q=u("a-col"),Y=u("a-row"),ce=u("a-statistic"),pe=u("a-tabs");return n(),p("div",null,[I("div",we,[e[7]||(e[7]=I("div",null,[I("h2",{class:"page-title"},"安全中心"),I("p",{class:"page-sub"},"DID 身份 / 加密 / 审计")],-1)),t(y,{type:"primary",ghost:"",loading:M.value,onClick:X},{icon:a(()=>[t(D(me))]),default:a(()=>[e[6]||(e[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),t(pe,{activeKey:N.value,"onUpdate:activeKey":e[5]||(e[5]=o=>N.value=o),onChange:Z},{default:a(()=>[t(G,{key:"did"},{tab:a(()=>[t(D(_e)),e[8]||(e[8]=f(" DID 身份 ",-1))]),default:a(()=>[t(w,{style:{"margin-bottom":"16px"}},{default:a(()=>[t(y,{type:"primary",loading:E.value,onClick:ae},{icon:a(()=>[t(D(ye))]),default:a(()=>[e[9]||(e[9]=f(" 创建身份 ",-1))]),_:1},8,["loading"]),t(y,{onClick:e[0]||(e[0]=o=>B.value=!0)},{icon:a(()=>[t(D(ge))]),default:a(()=>[e[10]||(e[10]=f(" 签名消息 ",-1))]),_:1})]),_:1}),$.value?(n(),p("div",Ie,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ee,"data-source":V.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="did"?(n(),p("span",De,c(v.did),1)):m("",!0),o.key==="method"?(n(),z(i,{key:1,color:"blue"},{default:a(()=>[f(c(v.method),1)]),_:2},1024)):m("",!0),o.key==="created"?(n(),p("span",Ce,c(v.created),1)):m("",!0),o.key==="status"?(n(),z(i,{key:3,color:v.isDefault?"green":"default"},{default:a(()=>[f(c(v.isDefault?"默认":"可用"),1)]),_:2},1032,["color"])):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无 DID 身份,点击「创建身份」添加"})]),_:1},8,["data-source","pagination"])),t(de,{open:B.value,"onUpdate:open":e[2]||(e[2]=o=>B.value=o),title:"DID 签名","confirm-loading":U.value,onOk:le,"ok-text":"签名","cancel-text":"取消"},{default:a(()=>[t(R,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[t(_,{label:"消息",required:""},{default:a(()=>[t(b,{value:W.value,"onUpdate:value":e[1]||(e[1]=o=>W.value=o),placeholder:"请输入要签名的消息"},null,8,["value"])]),_:1})]),_:1}),L.value?(n(),p("div",Re,[e[11]||(e[11]=I("p",{style:{color:"var(--text-secondary)","margin-bottom":"6px"}},"签名结果:",-1)),I("pre",ze,c(L.value),1)])):m("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),t(G,{key:"encrypt"},{tab:a(()=>[t(D(H)),e[12]||(e[12]=f(" 文件加密 ",-1))]),default:a(()=>[t(Y,{gutter:[24,24]},{default:a(()=>[t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"加密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:T.value,"onUpdate:value":e[3]||(e[3]=o=>T.value=o),placeholder:"输入文件路径,如 /path/to/file.txt"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:F.value,disabled:!T.value.trim(),onClick:oe},{icon:a(()=>[t(D(H))]),default:a(()=>[e[13]||(e[13]=f(" 加密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),k.value?(n(),p("div",Le,[t(i,{color:k.value.success?"green":"red"},{default:a(()=>[f(c(k.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Te,c(k.value.output),1)])):m("",!0)]),_:1})]),_:1}),t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"解密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:A.value,"onUpdate:value":e[4]||(e[4]=o=>A.value=o),placeholder:"输入加密文件路径,如 /path/to/file.txt.enc"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:K.value,disabled:!A.value.trim(),onClick:se},{icon:a(()=>[t(D(H))]),default:a(()=>[e[14]||(e[14]=f(" 解密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),h.value?(n(),p("div",Ae,[t(i,{color:h.value.success?"green":"red"},{default:a(()=>[f(c(h.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Ne,c(h.value.output),1)])):m("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),t(G,{key:"audit"},{tab:a(()=>[t(D(be)),e[15]||(e[15]=f(" 审计日志 ",-1))]),default:a(()=>[t(Y,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(n(!0),p(ke,null,he(J.value,o=>(n(),z(q,{xs:12,sm:6,key:o.label},{default:a(()=>[t(j,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[t(ce,{title:o.label,value:o.value,"value-style":{color:o.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),P.value?(n(),p("div",We,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ne,"data-source":S.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="time"?(n(),p("span",Oe,c(v.time),1)):m("",!0),o.key==="event"?(n(),p("span",Se,c(v.event),1)):m("",!0),o.key==="user"?(n(),p("span",Me,c(v.user),1)):m("",!0),o.key==="level"?(n(),z(i,{key:3,color:re(v.level)},{default:a(()=>[f(c(v.level),1)]),_:2},1032,["color"])):m("",!0),o.key==="detail"?(n(),p("span",$e,c(v.detail),1)):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Ye=ve(Ee,[["__scopeId","data-v-d730836a"]]);export{Ye as default};
4
+ `),w=["#1677ff","#52c41a","#faad14","#ff4d4f"];let s=0;for(const i of y){const d=i.trim();if(!d||d.startsWith("─")||d.startsWith("Audit"))continue;const g=d.match(/^(.+?)\s*[:=:]\s*(.+)$/);if(g){const b=g[1].trim(),_=g[2].trim(),R=_.match(/^(\d+)/);e.push({label:b,value:R?parseInt(R[1],10):_,color:w[s%w.length]}),s++}}return e.length===0&&e.push({label:"总事件数",value:S.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),e}return xe(()=>{O()}),(l,e)=>{const y=u("a-button"),w=u("a-space"),s=u("a-spin"),i=u("a-tag"),d=u("a-empty"),g=u("a-table"),b=u("a-input"),_=u("a-form-item"),R=u("a-form"),de=u("a-modal"),G=u("a-tab-pane"),j=u("a-card"),q=u("a-col"),X=u("a-row"),ce=u("a-statistic"),pe=u("a-tabs");return n(),p("div",null,[I("div",we,[e[7]||(e[7]=I("div",null,[I("h2",{class:"page-title"},"安全中心"),I("p",{class:"page-sub"},"DID 身份 / 加密 / 审计")],-1)),t(y,{type:"primary",ghost:"",loading:M.value,onClick:Y},{icon:a(()=>[t(D(me))]),default:a(()=>[e[6]||(e[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),t(pe,{activeKey:N.value,"onUpdate:activeKey":e[5]||(e[5]=o=>N.value=o),onChange:Z},{default:a(()=>[t(G,{key:"did"},{tab:a(()=>[t(D(_e)),e[8]||(e[8]=f(" DID 身份 ",-1))]),default:a(()=>[t(w,{style:{"margin-bottom":"16px"}},{default:a(()=>[t(y,{type:"primary",loading:E.value,onClick:ae},{icon:a(()=>[t(D(ye))]),default:a(()=>[e[9]||(e[9]=f(" 创建身份 ",-1))]),_:1},8,["loading"]),t(y,{onClick:e[0]||(e[0]=o=>V.value=!0)},{icon:a(()=>[t(D(ge))]),default:a(()=>[e[10]||(e[10]=f(" 签名消息 ",-1))]),_:1})]),_:1}),$.value?(n(),p("div",Ie,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ee,"data-source":U.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="did"?(n(),p("span",De,c(v.did),1)):m("",!0),o.key==="method"?(n(),z(i,{key:1,color:"blue"},{default:a(()=>[f(c(v.method),1)]),_:2},1024)):m("",!0),o.key==="created"?(n(),p("span",Ce,c(v.created),1)):m("",!0),o.key==="status"?(n(),z(i,{key:3,color:v.isDefault?"green":"default"},{default:a(()=>[f(c(v.isDefault?"默认":"可用"),1)]),_:2},1032,["color"])):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无 DID 身份,点击「创建身份」添加"})]),_:1},8,["data-source","pagination"])),t(de,{open:V.value,"onUpdate:open":e[2]||(e[2]=o=>V.value=o),title:"DID 签名","confirm-loading":K.value,onOk:le,"ok-text":"签名","cancel-text":"取消"},{default:a(()=>[t(R,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[t(_,{label:"消息",required:""},{default:a(()=>[t(b,{value:W.value,"onUpdate:value":e[1]||(e[1]=o=>W.value=o),placeholder:"请输入要签名的消息"},null,8,["value"])]),_:1})]),_:1}),L.value?(n(),p("div",Re,[e[11]||(e[11]=I("p",{style:{color:"var(--text-secondary)","margin-bottom":"6px"}},"签名结果:",-1)),I("pre",ze,c(L.value),1)])):m("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),t(G,{key:"encrypt"},{tab:a(()=>[t(D(J)),e[12]||(e[12]=f(" 文件加密 ",-1))]),default:a(()=>[t(X,{gutter:[24,24]},{default:a(()=>[t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"加密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:T.value,"onUpdate:value":e[3]||(e[3]=o=>T.value=o),placeholder:"输入文件路径,如 /path/to/file.txt"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:B.value,disabled:!T.value.trim(),onClick:oe},{icon:a(()=>[t(D(J))]),default:a(()=>[e[13]||(e[13]=f(" 加密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),k.value?(n(),p("div",Le,[t(i,{color:k.value.success?"green":"red"},{default:a(()=>[f(c(k.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Te,c(k.value.output),1)])):m("",!0)]),_:1})]),_:1}),t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"解密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:A.value,"onUpdate:value":e[4]||(e[4]=o=>A.value=o),placeholder:"输入加密文件路径,如 /path/to/file.txt.enc"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:F.value,disabled:!A.value.trim(),onClick:se},{icon:a(()=>[t(D(J))]),default:a(()=>[e[14]||(e[14]=f(" 解密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),h.value?(n(),p("div",Ae,[t(i,{color:h.value.success?"green":"red"},{default:a(()=>[f(c(h.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Ne,c(h.value.output),1)])):m("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),t(G,{key:"audit"},{tab:a(()=>[t(D(be)),e[15]||(e[15]=f(" 审计日志 ",-1))]),default:a(()=>[t(X,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(n(!0),p(ke,null,he(H.value,o=>(n(),z(q,{xs:12,sm:6,key:o.label},{default:a(()=>[t(j,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[t(ce,{title:o.label,value:o.value,"value-style":{color:o.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),P.value?(n(),p("div",We,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ne,"data-source":S.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="time"?(n(),p("span",Oe,c(v.time),1)):m("",!0),o.key==="event"?(n(),p("span",Se,c(v.event),1)):m("",!0),o.key==="user"?(n(),p("span",Me,c(v.user),1)):m("",!0),o.key==="level"?(n(),z(i,{key:3,color:re(v.level)},{default:a(()=>[f(c(v.level),1)]),_:2},1032,["color"])):m("",!0),o.key==="detail"?(n(),p("span",$e,c(v.detail),1)):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Xe=ve(Ee,[["__scopeId","data-v-d730836a"]]);export{Xe as default};
@@ -1,2 +1,2 @@
1
- import{u as J}from"./ws-Bv7YH0VB.js";import{_ as P}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{Y,_ as Z,c as R,Z as K,aa as Q,ab as U,a as X}from"./icons-ukMaZ3tx.js";import{l as ee,F as d,D as m,c as e,x as t,r,q as n,v as s,J as y,u as c,I as u,G as g,m as V,j as te}from"./vendor-BVetwVfk.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=J(),B=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),F=r(""),z=r(!1),D=r(""),k=r(""),L=r(""),M=r(!1),h=r(""),w=r(""),I=r([]),N=te(()=>S.status==="connected"),W=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function $(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);F.value=o,j(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function j(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(D.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],L.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
2
- `).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));I.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function E(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee($),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),G=n("a-tag"),T=n("a-spin"),q=n("a-badge"),A=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:$},{icon:t(()=>[e(c(Y))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(Z))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",ae,"版本: "+u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c(R))]),_:1}),m("div",re," 端口: "+u(c(B).wsPort||18800)+" · "+u(c(B).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(K))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",le,u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(Q))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(G,{color:N.value?"green":"red"},{default:t(()=>[y(" WS "+u(N.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(T)])):(s(),V(A,{key:1,columns:W,"data-source":I.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),V(q,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:E,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(U))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(X))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(R))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},ye=P(pe,[["__scopeId","data-v-13be6bfe"]]);export{ye as default};
1
+ import{u as J}from"./ws-4ur1fGsk.js";import{_ as P}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as Z,Z as K,d as R,$ as Q,a9 as U,ag as X,b as Y}from"./icons-CJACPYXu.js";import{l as ee,F as d,D as m,c as e,x as t,r,q as n,v as s,J as y,u as c,I as u,G as g,m as V,j as te}from"./vendor-D0Qjn73K.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=J(),B=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),F=r(""),z=r(!1),D=r(""),k=r(""),L=r(""),M=r(!1),h=r(""),w=r(""),I=r([]),N=te(()=>S.status==="connected"),W=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function $(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);F.value=o,j(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function j(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(D.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],L.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
2
+ `).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));I.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function E(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee($),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),G=n("a-tag"),T=n("a-spin"),q=n("a-badge"),A=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:$},{icon:t(()=>[e(c(Z))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(K))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",ae,"版本: "+u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c(R))]),_:1}),m("div",re," 端口: "+u(c(B).wsPort||18800)+" · "+u(c(B).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(Q))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",le,u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(U))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(G,{color:N.value?"green":"red"},{default:t(()=>[y(" WS "+u(N.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(T)])):(s(),V(A,{key:1,columns:W,"data-source":I.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),V(q,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:E,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(X))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Y))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(R))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},ye=P(pe,[["__scopeId","data-v-13be6bfe"]]);export{ye as default};
@@ -1,4 +1,4 @@
1
- import{_ as o}from"./index-DfcXDy2A.js";import{c as C,g as N,m as D,u as G}from"./useConfigInject-DCcT0grw.js";import{i as W}from"./initDefaultProps-B2vQoQga.js";import{d as I,c}from"./vendor-BVetwVfk.js";import{K as j}from"./Keyframes-C7fCrnlS.js";const z=()=>({prefixCls:String,width:{type:[Number,String]}}),O=I({compatConfig:{MODE:3},name:"SkeletonTitle",props:z(),setup(e){return()=>{const{prefixCls:t,width:n}=e,r=typeof n=="number"?`${n}px`:n;return c("h3",{class:t,style:{width:r}},null)}}}),X=()=>({prefixCls:String,width:{type:[Number,String,Array]},rows:Number}),_=I({compatConfig:{MODE:3},name:"SkeletonParagraph",props:X(),setup(e){const t=n=>{const{width:r,rows:l=2}=e;if(Array.isArray(r))return r[n];if(l-1===n)return r};return()=>{const{prefixCls:n,rows:r}=e,l=[...Array(r)].map((i,a)=>{const d=t(a);return c("li",{key:a,style:{width:typeof d=="number"?`${d}px`:d}},null)});return c("ul",{class:n},[l])}}}),se=()=>({prefixCls:String,size:[String,Number],shape:String,active:{type:Boolean,default:void 0}}),L=e=>{const{prefixCls:t,size:n,shape:r}=e,l=C({[`${t}-lg`]:n==="large",[`${t}-sm`]:n==="small"}),i=C({[`${t}-circle`]:r==="circle",[`${t}-square`]:r==="square",[`${t}-round`]:r==="round"}),a=typeof n=="number"?{width:`${n}px`,height:`${n}px`,lineHeight:`${n}px`}:{};return c("span",{class:C(t,l,i),style:a},null)};L.displayName="SkeletonElement";const q=new j("ant-skeleton-loading",{"0%":{transform:"translateX(-37.5%)"},"100%":{transform:"translateX(37.5%)"}}),v=e=>({height:e,lineHeight:`${e}px`}),$=e=>o({width:e},v(e)),F=e=>({position:"relative",zIndex:0,overflow:"hidden",background:"transparent","&::after":{position:"absolute",top:0,insetInlineEnd:"-150%",bottom:0,insetInlineStart:"-150%",background:e.skeletonLoadingBackground,animationName:q,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite",content:'""'}}),P=e=>o({width:e*5,minWidth:e*5},v(e)),K=e=>{const{skeletonAvatarCls:t,color:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i}=e;return{[`${t}`]:o({display:"inline-block",verticalAlign:"top",background:n},$(r)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:o({},$(l)),[`${t}${t}-sm`]:o({},$(i))}},V=e=>{const{controlHeight:t,borderRadiusSM:n,skeletonInputCls:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return{[`${r}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:n},P(t)),[`${r}-lg`]:o({},P(l)),[`${r}-sm`]:o({},P(i))}},M=e=>o({width:e},v(e)),J=e=>{const{skeletonImageCls:t,imageSizeBase:n,color:r,borderRadiusSM:l}=e;return{[`${t}`]:o(o({display:"flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",background:r,borderRadius:l},M(n*2)),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:o(o({},M(n)),{maxWidth:n*4,maxHeight:n*4}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}},x=(e,t,n)=>{const{skeletonButtonCls:r}=e;return{[`${n}${r}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${n}${r}-round`]:{borderRadius:t}}},E=e=>o({width:e*2,minWidth:e*2},v(e)),Q=e=>{const{borderRadiusSM:t,skeletonButtonCls:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return o(o(o(o(o({[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:t,width:r*2,minWidth:r*2},E(r))},x(e,r,n)),{[`${n}-lg`]:o({},E(l))}),x(e,l,`${n}-lg`)),{[`${n}-sm`]:o({},E(i))}),x(e,i,`${n}-sm`))},U=e=>{const{componentCls:t,skeletonAvatarCls:n,skeletonTitleCls:r,skeletonParagraphCls:l,skeletonButtonCls:i,skeletonInputCls:a,skeletonImageCls:d,controlHeight:y,controlHeightLG:f,controlHeightSM:p,color:g,padding:w,marginSM:B,borderRadius:s,skeletonTitleHeight:h,skeletonBlockRadius:u,skeletonParagraphLineHeight:m,controlHeightXS:k,skeletonParagraphMarginTop:S}=e;return{[`${t}`]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:w,verticalAlign:"top",[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:g},$(y)),[`${n}-circle`]:{borderRadius:"50%"},[`${n}-lg`]:o({},$(f)),[`${n}-sm`]:o({},$(p))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[`${r}`]:{width:"100%",height:h,background:g,borderRadius:u,[`+ ${l}`]:{marginBlockStart:p}},[`${l}`]:{padding:0,"> li":{width:"100%",height:m,listStyle:"none",background:g,borderRadius:u,"+ li":{marginBlockStart:k}}},[`${l}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${r}, ${l} > li`]:{borderRadius:s}}},[`${t}-with-avatar ${t}-content`]:{[`${r}`]:{marginBlockStart:B,[`+ ${l}`]:{marginBlockStart:S}}},[`${t}${t}-element`]:o(o(o(o({display:"inline-block",width:"auto"},Q(e)),K(e)),V(e)),J(e)),[`${t}${t}-block`]:{width:"100%",[`${i}`]:{width:"100%"},[`${a}`]:{width:"100%"}},[`${t}${t}-active`]:{[`
1
+ import{_ as o}from"./index-Vit9TJBu.js";import{c as C,g as N,m as D,d as G}from"./useConfigInject-DIkkDpt1.js";import{i as W}from"./initDefaultProps-BeWIEzBr.js";import{d as I,c}from"./vendor-D0Qjn73K.js";import{K as j}from"./Keyframes-C7fCrnlS.js";const z=()=>({prefixCls:String,width:{type:[Number,String]}}),O=I({compatConfig:{MODE:3},name:"SkeletonTitle",props:z(),setup(e){return()=>{const{prefixCls:t,width:n}=e,r=typeof n=="number"?`${n}px`:n;return c("h3",{class:t,style:{width:r}},null)}}}),X=()=>({prefixCls:String,width:{type:[Number,String,Array]},rows:Number}),_=I({compatConfig:{MODE:3},name:"SkeletonParagraph",props:X(),setup(e){const t=n=>{const{width:r,rows:l=2}=e;if(Array.isArray(r))return r[n];if(l-1===n)return r};return()=>{const{prefixCls:n,rows:r}=e,l=[...Array(r)].map((i,a)=>{const d=t(a);return c("li",{key:a,style:{width:typeof d=="number"?`${d}px`:d}},null)});return c("ul",{class:n},[l])}}}),se=()=>({prefixCls:String,size:[String,Number],shape:String,active:{type:Boolean,default:void 0}}),L=e=>{const{prefixCls:t,size:n,shape:r}=e,l=C({[`${t}-lg`]:n==="large",[`${t}-sm`]:n==="small"}),i=C({[`${t}-circle`]:r==="circle",[`${t}-square`]:r==="square",[`${t}-round`]:r==="round"}),a=typeof n=="number"?{width:`${n}px`,height:`${n}px`,lineHeight:`${n}px`}:{};return c("span",{class:C(t,l,i),style:a},null)};L.displayName="SkeletonElement";const q=new j("ant-skeleton-loading",{"0%":{transform:"translateX(-37.5%)"},"100%":{transform:"translateX(37.5%)"}}),v=e=>({height:e,lineHeight:`${e}px`}),$=e=>o({width:e},v(e)),F=e=>({position:"relative",zIndex:0,overflow:"hidden",background:"transparent","&::after":{position:"absolute",top:0,insetInlineEnd:"-150%",bottom:0,insetInlineStart:"-150%",background:e.skeletonLoadingBackground,animationName:q,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite",content:'""'}}),P=e=>o({width:e*5,minWidth:e*5},v(e)),K=e=>{const{skeletonAvatarCls:t,color:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i}=e;return{[`${t}`]:o({display:"inline-block",verticalAlign:"top",background:n},$(r)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:o({},$(l)),[`${t}${t}-sm`]:o({},$(i))}},V=e=>{const{controlHeight:t,borderRadiusSM:n,skeletonInputCls:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return{[`${r}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:n},P(t)),[`${r}-lg`]:o({},P(l)),[`${r}-sm`]:o({},P(i))}},M=e=>o({width:e},v(e)),J=e=>{const{skeletonImageCls:t,imageSizeBase:n,color:r,borderRadiusSM:l}=e;return{[`${t}`]:o(o({display:"flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",background:r,borderRadius:l},M(n*2)),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:o(o({},M(n)),{maxWidth:n*4,maxHeight:n*4}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}},x=(e,t,n)=>{const{skeletonButtonCls:r}=e;return{[`${n}${r}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${n}${r}-round`]:{borderRadius:t}}},E=e=>o({width:e*2,minWidth:e*2},v(e)),Q=e=>{const{borderRadiusSM:t,skeletonButtonCls:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return o(o(o(o(o({[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:t,width:r*2,minWidth:r*2},E(r))},x(e,r,n)),{[`${n}-lg`]:o({},E(l))}),x(e,l,`${n}-lg`)),{[`${n}-sm`]:o({},E(i))}),x(e,i,`${n}-sm`))},U=e=>{const{componentCls:t,skeletonAvatarCls:n,skeletonTitleCls:r,skeletonParagraphCls:l,skeletonButtonCls:i,skeletonInputCls:a,skeletonImageCls:d,controlHeight:y,controlHeightLG:f,controlHeightSM:p,color:g,padding:w,marginSM:B,borderRadius:s,skeletonTitleHeight:h,skeletonBlockRadius:u,skeletonParagraphLineHeight:m,controlHeightXS:k,skeletonParagraphMarginTop:S}=e;return{[`${t}`]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:w,verticalAlign:"top",[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:g},$(y)),[`${n}-circle`]:{borderRadius:"50%"},[`${n}-lg`]:o({},$(f)),[`${n}-sm`]:o({},$(p))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[`${r}`]:{width:"100%",height:h,background:g,borderRadius:u,[`+ ${l}`]:{marginBlockStart:p}},[`${l}`]:{padding:0,"> li":{width:"100%",height:m,listStyle:"none",background:g,borderRadius:u,"+ li":{marginBlockStart:k}}},[`${l}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${r}, ${l} > li`]:{borderRadius:s}}},[`${t}-with-avatar ${t}-content`]:{[`${r}`]:{marginBlockStart:B,[`+ ${l}`]:{marginBlockStart:S}}},[`${t}${t}-element`]:o(o(o(o({display:"inline-block",width:"auto"},Q(e)),K(e)),V(e)),J(e)),[`${t}${t}-block`]:{width:"100%",[`${i}`]:{width:"100%"},[`${a}`]:{width:"100%"}},[`${t}${t}-active`]:{[`
2
2
  ${r},
3
3
  ${l} > li,
4
4
  ${n},
@@ -0,0 +1 @@
1
+ import{k as j,r as v,j as h,l as O,F as f,D as i,I as y,u as n,c as r,x as d,H as C,L,q as p,B as E,v as c,J as g,m as M}from"./vendor-D0Qjn73K.js";import{u as F}from"./ws-4ur1fGsk.js";import{u as N}from"./useShellMode-CgR0wCYM.js";import{p as Q}from"./parsers-DftYMnlk.js";import{u as R}from"./chat-DY27mJje.js";import{_ as V}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{c as $,_ as D,af as T}from"./icons-CJACPYXu.js";const U=j("skills",()=>{const _=v(!1),t=v([]),u=v(""),m=v("all"),x=h(()=>{const a=new Set(["all"]);return t.value.forEach(o=>{o.category&&a.add(o.category),o.executionMode&&a.add(o.executionMode)}),[...a]}),k=h(()=>{let a=t.value;if(m.value!=="all"&&(a=a.filter(o=>o.category===m.value||o.executionMode===m.value)),u.value){const o=u.value.toLowerCase();a=a.filter(l=>l.name?.toLowerCase().includes(o)||l.description?.toLowerCase().includes(o)||l.title?.toLowerCase().includes(o))}return a});async function b(){const a=F();_.value=!0;try{if(N().isEmbedded){const e=await a.sendRaw({type:"skill.list"},2e4);e?.ok&&Array.isArray(e.result?.skills)?t.value=e.result.skills:(console.error("skill.list custom topic failed:",e?.error),t.value=[]);return}const{output:o}=await a.execute("skill list",2e4),l=Q(o);t.value=l}catch(o){console.error("Failed to load skills:",o)}finally{_.value=!1}}return{loading:_,allSkills:t,searchQuery:u,selectedCategory:m,categories:x,filteredSkills:k,loadSkills:b}}),H={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},J={class:"page-sub"},P={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},W={key:0,style:{"text-align":"center",padding:"60px"}},G={key:1,class:"skills-grid"},K={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},X={style:{flex:"1","min-width":"0"}},Y={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Z={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},ee={style:{"margin-left":"12px","flex-shrink":"0"}},te={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},le={key:2,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},oe={__name:"Skills",setup(_){const t=U(),u=R(),m=E(),x=h(()=>t.categories.filter(l=>l!=="all").slice(0,6));function k(l){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[l]||l}function b(l){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[l]||l||"未知"}function a(l){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[l]||"default"}async function o(l){await u.createSession("agent"),m.push("/chat"),setTimeout(()=>{u.currentSessionId&&u.sendMessage(u.currentSessionId,`/skill run ${l}`)},300)}return O(()=>{t.allSkills.length||t.loadSkills()}),(l,e)=>{const S=p("a-button"),z=p("a-input-search"),w=p("a-radio-button"),I=p("a-radio-group"),q=p("a-spin"),A=p("a-tag"),B=p("a-card");return c(),f("div",null,[i("div",H,[i("div",null,[e[3]||(e[3]=i("h2",{class:"page-title"},"技能管理",-1)),i("p",J,y(n(t).allSkills.length)+" 个可用技能",1)]),r(S,{type:"primary",ghost:"",loading:n(t).loading,onClick:e[0]||(e[0]=s=>n(t).loadSkills())},{icon:d(()=>[r(n(D))]),default:d(()=>[e[4]||(e[4]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),i("div",P,[r(z,{value:n(t).searchQuery,"onUpdate:value":e[1]||(e[1]=s=>n(t).searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),r(I,{value:n(t).selectedCategory,"onUpdate:value":e[2]||(e[2]=s=>n(t).selectedCategory=s),"button-style":"solid"},{default:d(()=>[r(w,{value:"all"},{default:d(()=>[...e[5]||(e[5]=[g("全部",-1)])]),_:1}),(c(!0),f(C,null,L(x.value,s=>(c(),M(w,{key:s,value:s},{default:d(()=>[g(y(k(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),n(t).loading?(c(),f("div",W,[r(q,{size:"large"}),e[6]||(e[6]=i("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):n(t).filteredSkills.length?(c(),f("div",G,[(c(!0),f(C,null,L(n(t).filteredSkills,s=>(c(),M(B,{key:s.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:d(()=>[i("div",K,[i("div",X,[i("div",Y,y(s.name),1),i("div",Z,y(s.description||"暂无描述"),1)]),i("div",ee,[r(A,{color:a(s.executionMode),style:{"font-size":"10px"}},{default:d(()=>[g(y(b(s.executionMode)),1)]),_:2},1032,["color"])])]),i("div",te,[r(S,{size:"small",type:"primary",ghost:"",onClick:se=>o(s.name)},{icon:d(()=>[r(n(T))]),default:d(()=>[e[7]||(e[7]=g(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])):(c(),f("div",le,[r(n($),{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),i("div",null,y(n(t).allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)]))])}}},pe=V(oe,[["__scopeId","data-v-a1cd8dd9"]]);export{pe as default};
@@ -1 +1 @@
1
- import{u as bt}from"./ws-Bv7YH0VB.js";import{s as Be}from"./community-parser-CO25nZFt.js";import{_ as _t}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as k}from"./index-BfKFNptm.js";import{Y as xt,aI as gt,ac as kt,ag as Ue,aa as Me,w as St,aD as ht,an as Ct}from"./icons-ukMaZ3tx.js";import{E as It}from"./useConfigInject-DCcT0grw.js";import{l as Tt,F as d,D as b,c as o,x as a,m as h,G as v,q as y,r as x,v as s,J as p,u as g,H as O,L as $,N as zt,I as u,j as de,a as Pe}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function N(l){const n=Be(l);if(!n)return null;try{return JSON.parse(n)}catch{}const i=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const pe=Object.freeze(["gold","silver","bronze"]),ze=Object.freeze(["active","expired","terminated"]),fe=Object.freeze(["availability","response_time","throughput","error_rate"]),le=Object.freeze(["minor","moderate","major","critical"]),At=Object.freeze(["open","acknowledged","resolved","waived"]);function m(l,n=0){return typeof l=="number"&&Number.isFinite(l)?l:n}function W(l){if(!l)return{noDb:!1,error:""};const n=Be(l),i=/Database not available/i.test(n);return{noDb:i,error:i?"Database not available":""}}function jt(l,n=0){if(!l||typeof l!="object")return null;const i=l.name||"";return i?{key:i,name:i,availability:m(l.availability,0),maxResponseTime:m(l.maxResponseTime,0),minThroughput:m(l.minThroughput,0),maxErrorRate:m(l.maxErrorRate,0),compensationRate:m(l.compensationRate,0),_idx:n}:null}function Ot(l){const n=N(l);return Array.isArray(n)?n.map(jt).filter(Boolean):[]}function wt(l){const n={availability:0,maxResponseTime:0,minThroughput:0,maxErrorRate:0,compensationRate:0};return!l||typeof l!="object"||Array.isArray(l)?n:{availability:m(l.availability,0),maxResponseTime:m(l.maxResponseTime,0),minThroughput:m(l.minThroughput,0),maxErrorRate:m(l.maxErrorRate,0),compensationRate:m(l.compensationRate,0)}}function Je(l,n=0){if(!l||typeof l!="object")return null;const i=l.slaId||l.sla_id||"";return i?{key:i,slaId:i,orgId:String(l.orgId??l.org_id??""),tier:String(l.tier||"").toLowerCase(),terms:wt(l.terms),monthlyFee:m(l.monthlyFee??l.monthly_fee,0),startDate:l.startDate??l.start_date??null,endDate:l.endDate??l.end_date??null,status:String(l.status||"active").toLowerCase(),createdAt:l.createdAt??l.created_at??null,updatedAt:l.updatedAt??l.updated_at??null,_idx:n}:null}function Dt(l){const n=N(l);return Array.isArray(n)?n.map(Je).filter(Boolean):[]}function Ft(l){const n=N(l);return!n||typeof n!="object"||Array.isArray(n)?null:Je(n,0)}function qe(l){return!l||typeof l!="object"?null:{count:m(l.count,0),mean:m(l.mean,0),min:m(l.min,0),max:m(l.max,0),p95:m(l.p95,0)}}function Rt(l){const n=N(l);if(!n||typeof n!="object"||Array.isArray(n))return{slaId:"",totalSamples:0,byTerm:{}};const i={};if(n.byTerm&&typeof n.byTerm=="object")for(const[f,_]of Object.entries(n.byTerm)){const w=qe(_);w&&(i[f]=w)}return{slaId:String(n.slaId||""),totalSamples:m(n.totalSamples,0),byTerm:i}}function Ge(l,n=0){if(!l||typeof l!="object")return null;const i=l.violationId||l.violation_id||"";return i?{key:i,violationId:i,slaId:String(l.slaId??l.sla_id??""),term:String(l.term||"").toLowerCase(),severity:String(l.severity||"minor").toLowerCase(),expectedValue:m(l.expectedValue??l.expected_value,0),actualValue:m(l.actualValue??l.actual_value,0),deviationPercent:m(l.deviationPercent??l.deviation_percent,0),compensationAmount:typeof l.compensationAmount=="number"?l.compensationAmount:typeof l.compensation_amount=="number"?l.compensation_amount:null,occurredAt:l.occurredAt??l.occurred_at??null,resolvedAt:l.resolvedAt??l.resolved_at??null,v2Status:l.v2Status?String(l.v2Status).toLowerCase():"open",v2Note:l.v2Note??"",_idx:n}:null}function $t(l){const n=N(l);return Array.isArray(n)?n.map(Ge).filter(Boolean):[]}function Lt(l){const n=N(l);return!n||typeof n!="object"||Array.isArray(n)?{slaId:"",checkedAt:null,totalViolations:0,violations:[]}:{slaId:String(n.slaId||""),checkedAt:n.checkedAt??null,totalViolations:m(n.totalViolations,0),violations:Array.isArray(n.violations)?n.violations.map(Ge).filter(Boolean):[]}}function Vt(l){const n=N(l);return!n||typeof n!="object"||Array.isArray(n)?null:{violationId:String(n.violationId||""),slaId:String(n.slaId||""),severity:String(n.severity||""),base:m(n.base,0),multiplier:m(n.multiplier,0),amount:m(n.amount,0)}}const Et={slaId:"",tier:"",compliance:0,startDate:null,endDate:null,metricsByTerm:{},violations:{total:0,byTerm:{},bySeverity:{},totalCompensation:0}};function Nt(l){const n=JSON.parse(JSON.stringify(Et));for(const f of fe)n.violations.byTerm[f]=0;for(const f of le)n.violations.bySeverity[f]=0;const i=N(l);if(!i||typeof i!="object"||Array.isArray(i))return n;if(n.slaId=String(i.slaId||""),n.tier=String(i.tier||"").toLowerCase(),n.compliance=m(i.compliance,0),n.startDate=i.startDate??null,n.endDate=i.endDate??null,i.metricsByTerm&&typeof i.metricsByTerm=="object")for(const[f,_]of Object.entries(i.metricsByTerm)){const w=qe(_);w&&(n.metricsByTerm[f]=w)}if(i.violations&&typeof i.violations=="object"){if(n.violations.total=m(i.violations.total,0),n.violations.totalCompensation=m(i.violations.totalCompensation,0),i.violations.byTerm&&typeof i.violations.byTerm=="object")for(const[f,_]of Object.entries(i.violations.byTerm))typeof _=="number"&&Number.isFinite(_)&&(n.violations.byTerm[f]=_);if(i.violations.bySeverity&&typeof i.violations.bySeverity=="object")for(const[f,_]of Object.entries(i.violations.bySeverity))typeof _=="number"&&Number.isFinite(_)&&(n.violations.bySeverity[f]=_)}return n}const Ut={totalContracts:0,activeContracts:0,activeOrgs:0,maxActiveSlasPerOrg:0,byStatus:{},byTier:{},violations:{total:0,byTerm:{},bySeverity:{},byStatus:{},totalCompensation:0}};function Mt(l){const n=JSON.parse(JSON.stringify(Ut));for(const f of ze)n.byStatus[f]=0;for(const f of pe)n.byTier[f]=0;for(const f of fe)n.violations.byTerm[f]=0;for(const f of le)n.violations.bySeverity[f]=0;for(const f of At)n.violations.byStatus[f]=0;const i=N(l);if(!i||typeof i!="object"||Array.isArray(i))return n;if(n.totalContracts=m(i.totalContracts,0),n.activeContracts=m(i.activeContracts,0),n.activeOrgs=m(i.activeOrgs,0),n.maxActiveSlasPerOrg=m(i.maxActiveSlasPerOrg,0),i.byStatus&&typeof i.byStatus=="object")for(const[f,_]of Object.entries(i.byStatus))typeof _=="number"&&Number.isFinite(_)&&(n.byStatus[f]=_);if(i.byTier&&typeof i.byTier=="object")for(const[f,_]of Object.entries(i.byTier))typeof _=="number"&&Number.isFinite(_)&&(n.byTier[f]=_);if(i.violations&&typeof i.violations=="object"){n.violations.total=m(i.violations.total,0),n.violations.totalCompensation=m(i.violations.totalCompensation,0);for(const f of["byTerm","bySeverity","byStatus"])if(i.violations[f]&&typeof i.violations[f]=="object")for(const[_,w]of Object.entries(i.violations[f]))typeof w=="number"&&Number.isFinite(w)&&(n.violations[f][_]=w)}return n}function Te(l){if(l==null||l==="")return"—";const n=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(n.getTime())?String(l):n.toLocaleString("zh-CN",{hour12:!1})}const Pt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Bt={class:"tier-head"},Jt={class:"tier-comp"},qt={class:"tier-terms"},Gt={class:"tier-term"},Kt={class:"tier-term"},Ht={class:"tier-term"},Wt={class:"tier-term"},Yt={class:"filter-bar"},Qt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Xt={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Zt={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},eo={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},to={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},oo={class:"filter-bar"},ao={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},lo={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},no={key:5,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ro={key:0,style:{color:"#faad14","font-weight":"500"}},io={key:1,style:{color:"var(--text-muted)"}},so={key:7,style:{color:"var(--text-secondary)","font-size":"11px"}},uo={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},co={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},po={key:0,style:{"padding-top":"8px"}},fo={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},mo={key:2,style:{"font-family":"monospace","font-size":"12px"}},vo={key:0,style:{"padding-top":"8px"}},yo={style:{"margin-left":"8px","font-family":"monospace","font-size":"12px"}},bo={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},_o={style:{"margin-left":"auto",color:"#ff4d4f","font-weight":"500"}},xo={key:0,style:{"padding-top":"8px"}},go={key:0,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},ko={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},So={key:2,style:{"font-family":"monospace","font-size":"12px"}},ho={key:0,style:{"padding-top":"8px"}},Co={style:{"font-family":"monospace","font-size":"12px"}},Io={style:{"font-family":"monospace"}},To={style:{"font-family":"monospace"}},zo={style:{color:"#faad14","font-weight":"600","font-family":"monospace","font-size":"14px"}},Ao={__name:"Sla",setup(l){const n=bt(),i=It.PRESENTED_IMAGE_SIMPLE,f=x(!1),_=x(!1),w=x(!1),Ae=x([]),me=x([]),je=x([]),S=x({totalContracts:0,activeContracts:0,activeOrgs:0,maxActiveSlasPerOrg:0,byStatus:{},byTier:{},violations:{total:0,byTerm:{},bySeverity:{},byStatus:{},totalCompensation:0}}),ve=x({noDb:!1,error:""}),Oe=x("contracts"),Y=x(""),Q=x(""),X=x(""),ne=x(!1),re=x(!1),ye=x(!1),be=x(!1),_e=x(!1),ie=x(!1),I=Pe({orgId:"",tier:"silver",monthlyFee:1e3,durationDays:30}),T=Pe({slaId:null,term:"availability",value:null}),z=x(null),Z=x({slaId:"",totalSamples:0,byTerm:{}}),L=x(null),j=x(null),xe=x(null),F=x(null),Ke=[{title:"SLA ID",key:"slaId",width:"120px"},{title:"组织",key:"orgId",width:"160px"},{title:"等级",key:"tier",width:"90px"},{title:"状态",key:"status",width:"100px"},{title:"月费",key:"monthlyFee",width:"110px"},{title:"到期",key:"endDate",width:"160px"},{title:"操作",key:"action",width:"260px"}],He=[{title:"ID",key:"violationId",width:"120px"},{title:"指标",key:"term",width:"140px"},{title:"严重度",key:"severity",width:"100px"},{title:"偏差",key:"deviation",width:"180px"},{title:"期望",key:"expected",width:"110px"},{title:"实际",key:"actual",width:"110px"},{title:"补偿",key:"compensation",width:"110px"},{title:"发生时间",key:"occurredAt",width:"160px"},{title:"操作",key:"action",width:"120px"}],we=[{title:"指标",key:"term",width:"140px"},{title:"期望",key:"expected",width:"110px"},{title:"均值",key:"mean",width:"110px"},{title:"p95",key:"p95",width:"110px"},{title:"最小",key:"min",width:"110px"},{title:"最大",key:"max",width:"110px"},{title:"样本数",key:"count",width:"90px"}],We=de(()=>{let r=me.value;return Y.value&&(r=r.filter(t=>t.tier===Y.value)),Q.value&&(r=r.filter(t=>t.status===Q.value)),r}),Ye=de(()=>{let r=je.value;return X.value&&(r=r.filter(t=>t.severity===X.value)),r}),Qe=de(()=>z.value?Object.entries(Z.value.byTerm).map(([r,t])=>({key:r,term:r,expected:De(z.value.terms,r),...t})):[]),Xe=de(()=>!j.value||!z.value?[]:Object.entries(j.value.metricsByTerm).map(([r,t])=>({key:r,term:r,expected:De(z.value.terms,r),...t})));function De(r,t){if(!r)return 0;switch(t){case"availability":return r.availability;case"response_time":return r.maxResponseTime;case"throughput":return r.minThroughput;case"error_rate":return r.maxErrorRate;default:return 0}}function se(r){return{gold:"gold",silver:"default",bronze:"orange"}[r]||"default"}function Fe(r){return{gold:"#faad14",silver:"#8c8c8c",bronze:"#d4a373"}[r]||"#888"}function ge(r){return{active:"活跃",expired:"已过期",terminated:"已终止"}[r]||r}function Re(r){return{active:"green",expired:"default",terminated:"red"}[r]||"default"}function Ze(r){return{active:"#52c41a",expired:"#888",terminated:"#ff4d4f"}[r]||"#888"}function B(r){return{availability:"可用性",response_time:"响应时间",throughput:"吞吐量",error_rate:"错误率"}[r]||r}function et(r){return{availability:"比例 0~1,例如 0.997",response_time:"毫秒,例如 120",throughput:"每秒请求数,例如 850",error_rate:"比例 0~1,例如 0.003"}[r]||""}function U(r,t){return typeof t!="number"||!Number.isFinite(t)?"—":r==="availability"||r==="error_rate"?(t*100).toFixed(3)+"%":r==="response_time"?t.toFixed(1)+"ms":r==="throughput"?t.toFixed(0)+" rps":t.toFixed(4)}function J(r){return{minor:"轻微",moderate:"中等",major:"严重",critical:"关键"}[r]||r}function ee(r){return{minor:"default",moderate:"gold",major:"orange",critical:"red"}[r]||"default"}function ke(r){return{minor:"#888",moderate:"#faad14",major:"#fa8c16",critical:"#ff4d4f"}[r]||"#888"}function tt(r){return r>=.99?"#52c41a":r>=.9?"#1677ff":r>=.7?"#faad14":"#ff4d4f"}function te(r,t){return t?Math.round(r/t*100):0}async function q(){f.value=!0,ve.value={noDb:!1,error:""};try{const[r,t,C,oe]=await Promise.all([n.execute("sla tiers --json",8e3).catch(()=>({output:""})),n.execute("sla list --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("sla violations --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("sla stats-v2",8e3).catch(()=>({output:""}))]),M=[t,C,oe].map(D=>W(D.output)).find(D=>D.noDb);M&&(ve.value=M),Ae.value=Ot(r.output),me.value=Dt(t.output),je.value=$t(C.output),S.value=Mt(oe.output)}catch(r){k.error("加载 SLA 数据失败: "+(r?.message||r))}finally{f.value=!1}}async function ot(){if(!I.orgId.trim()){k.warning("请填写组织 ID");return}_.value=!0;try{const r=I.durationDays*24*60*60*1e3,t=[`sla create "${I.orgId.trim().replace(/"/g,'\\"')}"`,`-t ${I.tier}`,`-d ${r}`,`-f ${I.monthlyFee||0}`,"--json"],{output:C}=await n.execute(t.join(" "),1e4);if(W(C).noDb){k.error("需要先 cc init 初始化项目");return}const M=Ft(C);if(!M){k.error("创建失败: "+C.slice(0,120));return}k.success(`合约已创建:${M.slaId.slice(0,8)}`),ne.value=!1,$e(),await q()}catch(r){k.error("创建失败: "+(r?.message||r))}finally{_.value=!1}}async function at(){if(!T.slaId){k.warning("请选择 SLA 合约");return}if(T.value===null||T.value===void 0){k.warning("请填写指标数值");return}w.value=!0;try{const{output:r}=await n.execute(`sla record ${T.slaId} ${T.term} ${T.value} --json`,8e3);if(W(r).noDb){k.error("需要先 cc init 初始化项目");return}if(!/"metricId"|"term"/.test(r)){k.error("记录失败: "+r.slice(0,120));return}k.success("指标已记录"),re.value=!1,Le()}catch(r){k.error("记录失败: "+(r?.message||r))}finally{w.value=!1}}async function lt(r){try{const{output:t}=await n.execute(`sla terminate ${r.slaId}`,8e3);if(W(t).noDb){k.error("需要先 cc init 初始化项目");return}if(/Failed/i.test(t)&&!/terminated/i.test(t)){k.error("终止失败: "+t.slice(0,120));return}k.success("合约已终止"),await q()}catch(t){k.error("终止失败: "+(t?.message||t))}}async function nt(r){z.value=r,Z.value={slaId:"",totalSamples:0,byTerm:{}},ye.value=!0;try{const{output:t}=await n.execute(`sla metrics ${r.slaId} --json`,8e3);Z.value=Rt(t)}catch(t){k.error("加载指标失败: "+(t?.message||t))}}async function rt(r){z.value=r,L.value=null,be.value=!0;try{const{output:t}=await n.execute(`sla check ${r.slaId} --json`,1e4);if(W(t).noDb){k.error("需要先 cc init 初始化项目");return}L.value=Lt(t),L.value.totalViolations>0&&await q()}catch(t){k.error("检查失败: "+(t?.message||t))}}async function it(r){z.value=r,j.value=null,_e.value=!0;try{const{output:t}=await n.execute(`sla report ${r.slaId} --json`,1e4);j.value=Nt(t)}catch(t){k.error("加载报告失败: "+(t?.message||t))}}async function st(r){xe.value=r,F.value=null;try{const{output:t}=await n.execute(`sla compensate ${r.violationId} --json`,8e3);if(W(t).noDb){k.error("需要先 cc init 初始化项目");return}if(F.value=Vt(t),!F.value){k.error("计算失败: "+t.slice(0,120));return}ie.value=!0,await q()}catch(t){k.error("计算失败: "+(t?.message||t))}}function ut(r){xe.value=r,F.value={violationId:r.violationId,slaId:r.slaId,severity:r.severity,base:0,multiplier:0,amount:r.compensationAmount||0},ie.value=!0}function $e(){I.orgId="",I.tier="silver",I.monthlyFee=1e3,I.durationDays=30}function Le(){T.slaId=null,T.term="availability",T.value=null}return Tt(q),(r,t)=>{const C=y("a-button"),oe=y("a-space"),M=y("a-alert"),D=y("a-statistic"),V=y("a-card"),R=y("a-col"),ue=y("a-row"),A=y("a-tag"),G=y("a-radio-button"),Se=y("a-radio-group"),ct=y("a-popconfirm"),ce=y("a-table"),he=y("a-tab-pane"),K=y("a-progress"),dt=y("a-tabs"),pt=y("a-input"),P=y("a-form-item"),Ve=y("a-select-option"),Ce=y("a-select"),Ie=y("a-input-number"),Ee=y("a-form"),H=y("a-modal"),E=y("a-descriptions-item"),Ne=y("a-descriptions"),ft=y("a-empty"),mt=y("a-result"),vt=y("a-list-item"),yt=y("a-list");return s(),d("div",null,[b("div",Pt,[t[22]||(t[22]=b("div",null,[b("h2",{class:"page-title"},"SLA 管理"),b("p",{class:"page-sub"},"服务等级合约 · 指标记录 · 偏差检测 · 补偿计算")],-1)),o(oe,null,{default:a(()=>[o(C,{loading:f.value,onClick:q},{icon:a(()=>[o(g(xt))]),default:a(()=>[t[19]||(t[19]=p(" 刷新 ",-1))]),_:1},8,["loading"]),o(C,{onClick:t[0]||(t[0]=e=>re.value=!0)},{icon:a(()=>[o(g(gt))]),default:a(()=>[t[20]||(t[20]=p(" 记录指标 ",-1))]),_:1}),o(C,{type:"primary",onClick:t[1]||(t[1]=e=>ne.value=!0)},{icon:a(()=>[o(g(kt))]),default:a(()=>[t[21]||(t[21]=p(" 新建合约 ",-1))]),_:1})]),_:1})]),ve.value.noDb?(s(),h(M,{key:0,type:"info","show-icon":"",message:"该模块需要项目级数据库",description:"`cc sla ...` 命令仅在 chainlesschain 项目目录下可用。请先运行 `cc init` 初始化项目,或在已初始化的目录启动 `cc serve`。",style:{"margin-bottom":"16px"}})):v("",!0),o(ue,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[o(R,{xs:12,sm:8,lg:5},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(D,{title:"合约总数",value:S.value.totalContracts,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[o(g(Ue))]),_:1},8,["value"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(D,{title:"活跃合约",value:S.value.activeContracts,"value-style":{color:S.value.activeContracts>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[o(g(Me))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(D,{title:"合作组织",value:S.value.activeOrgs,"value-style":{color:"#722ed1",fontSize:"20px"},suffix:S.value.maxActiveSlasPerOrg?`· cap=${S.value.maxActiveSlasPerOrg}`:""},{prefix:a(()=>[o(g(St))]),_:1},8,["value","suffix"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(D,{title:"违规总数",value:S.value.violations.total,"value-style":{color:S.value.violations.total>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:a(()=>[o(g(ht))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),o(R,{xs:24,sm:8,lg:4},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(D,{title:"累计补偿",value:S.value.violations.totalCompensation,precision:2,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[o(g(Ct))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(V,{title:"SLA 等级",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[o(ue,{gutter:[12,12]},{default:a(()=>[(s(!0),d(O,null,$(Ae.value,e=>(s(),h(R,{key:e.name,xs:24,sm:8},{default:a(()=>[b("div",{class:"tier-pill",style:zt({borderLeftColor:Fe(e.name)})},[b("div",Bt,[o(A,{color:se(e.name),style:{"font-family":"monospace","font-size":"13px"}},{default:a(()=>[p(u(e.name.toUpperCase()),1)]),_:2},1032,["color"]),b("span",Jt,"补偿率 "+u((e.compensationRate*100).toFixed(1))+"%",1)]),b("div",qt,[b("span",Gt,"可用性 ≥ "+u((e.availability*100).toFixed(2))+"%",1),b("span",Kt,"p95 ≤ "+u(e.maxResponseTime)+"ms",1),b("span",Ht,"RPS ≥ "+u(e.minThroughput),1),b("span",Wt,"错误率 ≤ "+u((e.maxErrorRate*100).toFixed(2))+"%",1)])],4)]),_:2},1024))),128))]),_:1})]),_:1}),o(dt,{activeKey:Oe.value,"onUpdate:activeKey":t[5]||(t[5]=e=>Oe.value=e),class:"sla-tabs"},{default:a(()=>[o(he,{key:"contracts",tab:"合约"},{default:a(()=>[b("div",Yt,[o(Se,{value:Y.value,"onUpdate:value":t[2]||(t[2]=e=>Y.value=e),size:"small","button-style":"solid"},{default:a(()=>[o(G,{value:""},{default:a(()=>[...t[23]||(t[23]=[p("全部等级",-1)])]),_:1}),(s(!0),d(O,null,$(g(pe),e=>(s(),h(G,{key:e,value:e},{default:a(()=>[p(u(e.toUpperCase()),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(Se,{value:Q.value,"onUpdate:value":t[3]||(t[3]=e=>Q.value=e),size:"small"},{default:a(()=>[o(G,{value:""},{default:a(()=>[...t[24]||(t[24]=[p("全部状态",-1)])]),_:1}),(s(!0),d(O,null,$(g(ze),e=>(s(),h(G,{key:e,value:e},{default:a(()=>[p(u(ge(e)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ce,{columns:Ke,"data-source":We.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 个合约`},size:"small",loading:f.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:e,record:c})=>[e.key==="slaId"?(s(),d("span",Qt,u(c.slaId.slice(0,12)),1)):v("",!0),e.key==="orgId"?(s(),d("span",Xt,u(c.orgId),1)):v("",!0),e.key==="tier"?(s(),h(A,{key:2,color:se(c.tier),style:{"font-family":"monospace"}},{default:a(()=>[p(u(c.tier.toUpperCase()),1)]),_:2},1032,["color"])):v("",!0),e.key==="status"?(s(),h(A,{key:3,color:Re(c.status)},{default:a(()=>[p(u(ge(c.status)),1)]),_:2},1032,["color"])):v("",!0),e.key==="monthlyFee"?(s(),d("span",Zt,u(c.monthlyFee.toFixed(2)),1)):v("",!0),e.key==="endDate"?(s(),d("span",eo,u(g(Te)(c.endDate)),1)):v("",!0),e.key==="action"?(s(),d(O,{key:6},[o(C,{size:"small",type:"link",onClick:ae=>nt(c)},{default:a(()=>[...t[25]||(t[25]=[p("指标",-1)])]),_:1},8,["onClick"]),o(C,{size:"small",type:"link",onClick:ae=>rt(c)},{default:a(()=>[...t[26]||(t[26]=[p("检查",-1)])]),_:1},8,["onClick"]),o(C,{size:"small",type:"link",onClick:ae=>it(c)},{default:a(()=>[...t[27]||(t[27]=[p("报告",-1)])]),_:1},8,["onClick"]),c.status==="active"?(s(),h(ct,{key:0,title:"终止该合约?","ok-text":"终止","cancel-text":"取消",onConfirm:ae=>lt(c)},{default:a(()=>[o(C,{size:"small",type:"link",danger:""},{default:a(()=>[...t[28]||(t[28]=[p("终止",-1)])]),_:1})]),_:1},8,["onConfirm"])):v("",!0)],64)):v("",!0)]),emptyText:a(()=>[b("div",to,[o(g(Ue),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+u(Y.value||Q.value?"没有符合条件的合约":'暂无合约,点"新建合约"创建第一个'),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(he,{key:"violations",tab:"违规"},{default:a(()=>[b("div",oo,[o(Se,{value:X.value,"onUpdate:value":t[4]||(t[4]=e=>X.value=e),size:"small","button-style":"solid"},{default:a(()=>[o(G,{value:""},{default:a(()=>[...t[29]||(t[29]=[p("全部严重度",-1)])]),_:1}),(s(!0),d(O,null,$(g(le),e=>(s(),h(G,{key:e,value:e},{default:a(()=>[p(u(J(e)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ce,{columns:He,"data-source":Ye.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:f.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:e,record:c})=>[e.key==="violationId"?(s(),d("span",ao,u(c.violationId.slice(0,12)),1)):v("",!0),e.key==="term"?(s(),h(A,{key:1,color:"default",style:{"font-family":"monospace"}},{default:a(()=>[p(u(B(c.term)),1)]),_:2},1024)):v("",!0),e.key==="severity"?(s(),h(A,{key:2,color:ee(c.severity)},{default:a(()=>[p(u(J(c.severity)),1)]),_:2},1032,["color"])):v("",!0),e.key==="deviation"?(s(),h(K,{key:3,percent:Math.min(100,Math.round(c.deviationPercent)),"stroke-color":ke(c.severity),size:"small",format:()=>`${c.deviationPercent.toFixed(1)}%`},null,8,["percent","stroke-color","format"])):v("",!0),e.key==="expected"?(s(),d("span",lo,u(U(c.term,c.expectedValue)),1)):v("",!0),e.key==="actual"?(s(),d("span",no,u(U(c.term,c.actualValue)),1)):v("",!0),e.key==="compensation"?(s(),d(O,{key:6},[c.compensationAmount!==null?(s(),d("span",ro,u(c.compensationAmount.toFixed(2)),1)):(s(),d("span",io,"未计算"))],64)):v("",!0),e.key==="occurredAt"?(s(),d("span",so,u(g(Te)(c.occurredAt)),1)):v("",!0),e.key==="action"?(s(),d(O,{key:8},[c.compensationAmount===null?(s(),h(C,{key:0,size:"small",type:"link",onClick:ae=>st(c)},{default:a(()=>[...t[30]||(t[30]=[p("计算补偿",-1)])]),_:1},8,["onClick"])):(s(),h(C,{key:1,size:"small",type:"link",onClick:ae=>ut(c)},{default:a(()=>[...t[31]||(t[31]=[p("查看",-1)])]),_:1},8,["onClick"]))],64)):v("",!0)]),emptyText:a(()=>[b("div",uo,[o(g(Me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block",color:"#52c41a"}}),p(" "+u(X.value?"没有符合条件的违规":"暂无违规记录"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(he,{key:"breakdown",tab:"分布统计"},{default:a(()=>[o(ue,{gutter:[16,16]},{default:a(()=>[o(R,{xs:24,lg:12},{default:a(()=>[o(V,{title:"合约 — 按状态",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"12px"}},{default:a(()=>[(s(!0),d(O,null,$(g(ze),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:Re(e),style:{"min-width":"80px","text-align":"center"}},{default:a(()=>[p(u(ge(e)),1)]),_:2},1032,["color"]),o(K,{percent:te(S.value.byStatus[e]||0,S.value.totalContracts),"stroke-color":Ze(e),format:()=>`${S.value.byStatus[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1}),o(V,{title:"合约 — 按等级",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[(s(!0),d(O,null,$(g(pe),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:se(e),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:a(()=>[p(u(e.toUpperCase()),1)]),_:2},1032,["color"]),o(K,{percent:te(S.value.byTier[e]||0,S.value.totalContracts),"stroke-color":Fe(e),format:()=>`${S.value.byTier[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1}),o(R,{xs:24,lg:12},{default:a(()=>[o(V,{title:"违规 — 按严重度",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"12px"}},{default:a(()=>[(s(!0),d(O,null,$(g(le),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:ee(e),style:{"min-width":"80px","text-align":"center"}},{default:a(()=>[p(u(J(e)),1)]),_:2},1032,["color"]),o(K,{percent:te(S.value.violations.bySeverity[e]||0,S.value.violations.total),"stroke-color":ke(e),format:()=>`${S.value.violations.bySeverity[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1}),o(V,{title:"违规 — 按指标",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[(s(!0),d(O,null,$(g(fe),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:"default",style:{"min-width":"110px","text-align":"center","font-family":"monospace","font-size":"11px"}},{default:a(()=>[p(u(B(e)),1)]),_:2},1024),o(K,{percent:te(S.value.violations.byTerm[e]||0,S.value.violations.total),"stroke-color":"#fa8c16",format:()=>`${S.value.violations.byTerm[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","format"])]))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["activeKey"]),o(H,{open:ne.value,"onUpdate:open":t[10]||(t[10]=e=>ne.value=e),title:"新建 SLA 合约","confirm-loading":_.value,width:540,"ok-text":"创建","cancel-text":"取消",onOk:ot,onCancel:$e},{default:a(()=>[o(Ee,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(P,{label:"组织 ID",required:""},{default:a(()=>[o(pt,{value:I.orgId,"onUpdate:value":t[6]||(t[6]=e=>I.orgId=e),placeholder:"例如 org-acme"},null,8,["value"])]),_:1}),o(P,{label:"等级",required:""},{default:a(()=>[o(Ce,{value:I.tier,"onUpdate:value":t[7]||(t[7]=e=>I.tier=e)},{default:a(()=>[(s(!0),d(O,null,$(g(pe),e=>(s(),h(Ve,{key:e,value:e},{default:a(()=>[p(u(e.toUpperCase()),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(P,{label:"月费"},{default:a(()=>[o(Ie,{value:I.monthlyFee,"onUpdate:value":t[8]||(t[8]=e=>I.monthlyFee=e),min:0,step:100,style:{width:"160px"}},null,8,["value"])]),_:1}),o(P,{label:"期限 (天)"},{default:a(()=>[o(Ie,{value:I.durationDays,"onUpdate:value":t[9]||(t[9]=e=>I.durationDays=e),min:1,step:30,style:{width:"160px"}},null,8,["value"]),t[32]||(t[32]=b("span",{style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},"默认 30 天",-1))]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(H,{open:re.value,"onUpdate:open":t[14]||(t[14]=e=>re.value=e),title:"记录指标","confirm-loading":w.value,width:540,"ok-text":"记录","cancel-text":"取消",onOk:at,onCancel:Le},{default:a(()=>[o(Ee,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(P,{label:"SLA",required:""},{default:a(()=>[o(Ce,{value:T.slaId,"onUpdate:value":t[11]||(t[11]=e=>T.slaId=e),placeholder:"选择合约",options:me.value.map(e=>({value:e.slaId,label:`${e.slaId.slice(0,8)} · ${e.orgId} [${e.tier}]`})),"show-search":""},null,8,["value","options"])]),_:1}),o(P,{label:"指标",required:""},{default:a(()=>[o(Ce,{value:T.term,"onUpdate:value":t[12]||(t[12]=e=>T.term=e)},{default:a(()=>[(s(!0),d(O,null,$(g(fe),e=>(s(),h(Ve,{key:e,value:e},{default:a(()=>[p(u(B(e)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(P,{label:"数值",required:""},{default:a(()=>[o(Ie,{value:T.value,"onUpdate:value":t[13]||(t[13]=e=>T.value=e),step:.01,style:{width:"200px"}},null,8,["value"]),b("div",co,u(et(T.term)),1)]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(H,{open:ye.value,"onUpdate:open":t[15]||(t[15]=e=>ye.value=e),title:`指标聚合:${z.value?.slaId?.slice(0,12)||""}`,width:640,footer:null},{default:a(()=>[z.value?(s(),d("div",po,[o(Ne,{column:2,size:"small",bordered:""},{default:a(()=>[o(E,{label:"组织"},{default:a(()=>[p(u(z.value.orgId),1)]),_:1}),o(E,{label:"等级"},{default:a(()=>[o(A,{color:se(z.value.tier)},{default:a(()=>[p(u(z.value.tier.toUpperCase()),1)]),_:1},8,["color"])]),_:1}),o(E,{label:"样本数"},{default:a(()=>[p(u(Z.value.totalSamples),1)]),_:1}),o(E,{label:"月费"},{default:a(()=>[p(u(z.value.monthlyFee.toFixed(2)),1)]),_:1})]),_:1}),t[33]||(t[33]=b("h4",{style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 10px"}},"按指标聚合",-1)),Object.keys(Z.value.byTerm).length?(s(),h(ce,{key:1,columns:we,"data-source":Qe.value,size:"small",pagination:!1,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:e,record:c})=>[e.key==="term"?(s(),h(A,{key:0,color:"default",style:{"font-family":"monospace"}},{default:a(()=>[p(u(B(c.term)),1)]),_:2},1024)):v("",!0),e.key==="expected"?(s(),d("span",fo,u(U(c.term,c.expected)),1)):["mean","p95","min","max"].includes(e.key)?(s(),d("span",mo,u(U(c.term,c[e.key])),1)):v("",!0)]),_:1},8,["data-source"])):(s(),h(ft,{key:0,description:"尚无指标数据",image:g(i)},null,8,["image"]))])):v("",!0)]),_:1},8,["open","title"]),o(H,{open:be.value,"onUpdate:open":t[16]||(t[16]=e=>be.value=e),title:`违规检测:${z.value?.slaId?.slice(0,12)||""}`,width:640,footer:null},{default:a(()=>[L.value?(s(),d("div",vo,[o(mt,{status:L.value.totalViolations===0?"success":"warning",title:L.value.totalViolations===0?"未检测到违规":`检测到 ${L.value.totalViolations} 项违规`,"sub-title":`检测时间: ${g(Te)(L.value.checkedAt)}`},null,8,["status","title","sub-title"]),L.value.totalViolations>0?(s(),h(yt,{key:0,size:"small","data-source":L.value.violations},{renderItem:a(({item:e})=>[o(vt,null,{default:a(()=>[o(A,{color:ee(e.severity),style:{"min-width":"50px","text-align":"center"}},{default:a(()=>[p(u(J(e.severity)),1)]),_:2},1032,["color"]),b("span",yo,u(B(e.term)),1),b("span",bo," 期望 "+u(U(e.term,e.expectedValue))+" · 实际 "+u(U(e.term,e.actualValue)),1),b("span",_o,u(e.deviationPercent.toFixed(2))+"%",1)]),_:2},1024)]),_:1},8,["data-source"])):v("",!0)])):v("",!0)]),_:1},8,["open","title"]),o(H,{open:_e.value,"onUpdate:open":t[17]||(t[17]=e=>_e.value=e),title:`合规报告:${z.value?.slaId?.slice(0,12)||""}`,width:720,footer:null},{default:a(()=>[j.value?(s(),d("div",xo,[o(ue,{gutter:12,style:{"margin-bottom":"16px"}},{default:a(()=>[o(R,{span:8},{default:a(()=>[o(D,{title:"合规率",value:j.value.compliance*100,suffix:"%",precision:2,"value-style":{color:tt(j.value.compliance),fontSize:"20px"}},null,8,["value","value-style"])]),_:1}),o(R,{span:8},{default:a(()=>[o(D,{title:"违规总数",value:j.value.violations.total,"value-style":{color:"#ff4d4f",fontSize:"20px"}},null,8,["value"])]),_:1}),o(R,{span:8},{default:a(()=>[o(D,{title:"累计补偿",value:j.value.violations.totalCompensation,precision:2,"value-style":{color:"#faad14",fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t[34]||(t[34]=b("h4",{style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},"违规分布 — 按严重度",-1)),(s(!0),d(O,null,$(g(le),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:ee(e),style:{"min-width":"80px","text-align":"center"}},{default:a(()=>[p(u(J(e)),1)]),_:2},1032,["color"]),o(K,{percent:te(j.value.violations.bySeverity[e]||0,j.value.violations.total),"stroke-color":ke(e),format:()=>`${j.value.violations.bySeverity[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),Object.keys(j.value.metricsByTerm).length?(s(),d("h4",go,"指标聚合")):v("",!0),Object.keys(j.value.metricsByTerm).length?(s(),h(ce,{key:1,columns:we,"data-source":Xe.value,size:"small",pagination:!1,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:e,record:c})=>[e.key==="term"?(s(),h(A,{key:0,color:"default",style:{"font-family":"monospace"}},{default:a(()=>[p(u(B(c.term)),1)]),_:2},1024)):v("",!0),e.key==="expected"?(s(),d("span",ko,u(U(c.term,c.expected)),1)):["mean","p95","min","max"].includes(e.key)?(s(),d("span",So,u(U(c.term,c[e.key])),1)):v("",!0)]),_:1},8,["data-source"])):v("",!0)])):v("",!0)]),_:1},8,["open","title"]),o(H,{open:ie.value,"onUpdate:open":t[18]||(t[18]=e=>ie.value=e),title:`补偿计算:${xe.value?.violationId?.slice(0,12)||""}`,width:540,footer:null},{default:a(()=>[F.value?(s(),d("div",ho,[o(Ne,{column:2,size:"small",bordered:""},{default:a(()=>[o(E,{label:"违规 ID",span:2},{default:a(()=>[b("span",Co,u(F.value.violationId),1)]),_:1}),o(E,{label:"严重度"},{default:a(()=>[o(A,{color:ee(F.value.severity)},{default:a(()=>[p(u(J(F.value.severity)),1)]),_:1},8,["color"])]),_:1}),o(E,{label:"基础金额"},{default:a(()=>[b("span",Io,u(F.value.base.toFixed(4)),1)]),_:1}),o(E,{label:"偏差倍数"},{default:a(()=>[b("span",To,"×"+u(F.value.multiplier.toFixed(2)),1)]),_:1}),o(E,{label:"最终补偿"},{default:a(()=>[b("span",zo,u(F.value.amount.toFixed(2)),1)]),_:1})]),_:1})])):v("",!0)]),_:1},8,["open","title"])])}}},Mo=_t(Ao,[["__scopeId","data-v-049d391a"]]);export{Mo as default};
1
+ import{u as bt}from"./ws-4ur1fGsk.js";import{s as Be}from"./community-parser-CO25nZFt.js";import{_ as _t}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as k}from"./index-BB5y5Y0z.js";import{_ as xt,aJ as gt,ah as kt,am as Ue,a9 as Me,x as St,aa as ht,as as Ct}from"./icons-CJACPYXu.js";import{E as It}from"./useConfigInject-DIkkDpt1.js";import{l as Tt,F as d,D as b,c as o,x as a,m as h,G as v,q as y,r as x,v as s,J as p,u as g,H as O,L as $,N as zt,I as u,j as de,a as Pe}from"./vendor-D0Qjn73K.js";import"./index-Vit9TJBu.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";function N(l){const n=Be(l);if(!n)return null;try{return JSON.parse(n)}catch{}const i=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const pe=Object.freeze(["gold","silver","bronze"]),ze=Object.freeze(["active","expired","terminated"]),fe=Object.freeze(["availability","response_time","throughput","error_rate"]),le=Object.freeze(["minor","moderate","major","critical"]),At=Object.freeze(["open","acknowledged","resolved","waived"]);function m(l,n=0){return typeof l=="number"&&Number.isFinite(l)?l:n}function W(l){if(!l)return{noDb:!1,error:""};const n=Be(l),i=/Database not available/i.test(n);return{noDb:i,error:i?"Database not available":""}}function jt(l,n=0){if(!l||typeof l!="object")return null;const i=l.name||"";return i?{key:i,name:i,availability:m(l.availability,0),maxResponseTime:m(l.maxResponseTime,0),minThroughput:m(l.minThroughput,0),maxErrorRate:m(l.maxErrorRate,0),compensationRate:m(l.compensationRate,0),_idx:n}:null}function Ot(l){const n=N(l);return Array.isArray(n)?n.map(jt).filter(Boolean):[]}function wt(l){const n={availability:0,maxResponseTime:0,minThroughput:0,maxErrorRate:0,compensationRate:0};return!l||typeof l!="object"||Array.isArray(l)?n:{availability:m(l.availability,0),maxResponseTime:m(l.maxResponseTime,0),minThroughput:m(l.minThroughput,0),maxErrorRate:m(l.maxErrorRate,0),compensationRate:m(l.compensationRate,0)}}function Je(l,n=0){if(!l||typeof l!="object")return null;const i=l.slaId||l.sla_id||"";return i?{key:i,slaId:i,orgId:String(l.orgId??l.org_id??""),tier:String(l.tier||"").toLowerCase(),terms:wt(l.terms),monthlyFee:m(l.monthlyFee??l.monthly_fee,0),startDate:l.startDate??l.start_date??null,endDate:l.endDate??l.end_date??null,status:String(l.status||"active").toLowerCase(),createdAt:l.createdAt??l.created_at??null,updatedAt:l.updatedAt??l.updated_at??null,_idx:n}:null}function Ft(l){const n=N(l);return Array.isArray(n)?n.map(Je).filter(Boolean):[]}function Dt(l){const n=N(l);return!n||typeof n!="object"||Array.isArray(n)?null:Je(n,0)}function qe(l){return!l||typeof l!="object"?null:{count:m(l.count,0),mean:m(l.mean,0),min:m(l.min,0),max:m(l.max,0),p95:m(l.p95,0)}}function Rt(l){const n=N(l);if(!n||typeof n!="object"||Array.isArray(n))return{slaId:"",totalSamples:0,byTerm:{}};const i={};if(n.byTerm&&typeof n.byTerm=="object")for(const[f,_]of Object.entries(n.byTerm)){const w=qe(_);w&&(i[f]=w)}return{slaId:String(n.slaId||""),totalSamples:m(n.totalSamples,0),byTerm:i}}function Ge(l,n=0){if(!l||typeof l!="object")return null;const i=l.violationId||l.violation_id||"";return i?{key:i,violationId:i,slaId:String(l.slaId??l.sla_id??""),term:String(l.term||"").toLowerCase(),severity:String(l.severity||"minor").toLowerCase(),expectedValue:m(l.expectedValue??l.expected_value,0),actualValue:m(l.actualValue??l.actual_value,0),deviationPercent:m(l.deviationPercent??l.deviation_percent,0),compensationAmount:typeof l.compensationAmount=="number"?l.compensationAmount:typeof l.compensation_amount=="number"?l.compensation_amount:null,occurredAt:l.occurredAt??l.occurred_at??null,resolvedAt:l.resolvedAt??l.resolved_at??null,v2Status:l.v2Status?String(l.v2Status).toLowerCase():"open",v2Note:l.v2Note??"",_idx:n}:null}function $t(l){const n=N(l);return Array.isArray(n)?n.map(Ge).filter(Boolean):[]}function Lt(l){const n=N(l);return!n||typeof n!="object"||Array.isArray(n)?{slaId:"",checkedAt:null,totalViolations:0,violations:[]}:{slaId:String(n.slaId||""),checkedAt:n.checkedAt??null,totalViolations:m(n.totalViolations,0),violations:Array.isArray(n.violations)?n.violations.map(Ge).filter(Boolean):[]}}function Vt(l){const n=N(l);return!n||typeof n!="object"||Array.isArray(n)?null:{violationId:String(n.violationId||""),slaId:String(n.slaId||""),severity:String(n.severity||""),base:m(n.base,0),multiplier:m(n.multiplier,0),amount:m(n.amount,0)}}const Et={slaId:"",tier:"",compliance:0,startDate:null,endDate:null,metricsByTerm:{},violations:{total:0,byTerm:{},bySeverity:{},totalCompensation:0}};function Nt(l){const n=JSON.parse(JSON.stringify(Et));for(const f of fe)n.violations.byTerm[f]=0;for(const f of le)n.violations.bySeverity[f]=0;const i=N(l);if(!i||typeof i!="object"||Array.isArray(i))return n;if(n.slaId=String(i.slaId||""),n.tier=String(i.tier||"").toLowerCase(),n.compliance=m(i.compliance,0),n.startDate=i.startDate??null,n.endDate=i.endDate??null,i.metricsByTerm&&typeof i.metricsByTerm=="object")for(const[f,_]of Object.entries(i.metricsByTerm)){const w=qe(_);w&&(n.metricsByTerm[f]=w)}if(i.violations&&typeof i.violations=="object"){if(n.violations.total=m(i.violations.total,0),n.violations.totalCompensation=m(i.violations.totalCompensation,0),i.violations.byTerm&&typeof i.violations.byTerm=="object")for(const[f,_]of Object.entries(i.violations.byTerm))typeof _=="number"&&Number.isFinite(_)&&(n.violations.byTerm[f]=_);if(i.violations.bySeverity&&typeof i.violations.bySeverity=="object")for(const[f,_]of Object.entries(i.violations.bySeverity))typeof _=="number"&&Number.isFinite(_)&&(n.violations.bySeverity[f]=_)}return n}const Ut={totalContracts:0,activeContracts:0,activeOrgs:0,maxActiveSlasPerOrg:0,byStatus:{},byTier:{},violations:{total:0,byTerm:{},bySeverity:{},byStatus:{},totalCompensation:0}};function Mt(l){const n=JSON.parse(JSON.stringify(Ut));for(const f of ze)n.byStatus[f]=0;for(const f of pe)n.byTier[f]=0;for(const f of fe)n.violations.byTerm[f]=0;for(const f of le)n.violations.bySeverity[f]=0;for(const f of At)n.violations.byStatus[f]=0;const i=N(l);if(!i||typeof i!="object"||Array.isArray(i))return n;if(n.totalContracts=m(i.totalContracts,0),n.activeContracts=m(i.activeContracts,0),n.activeOrgs=m(i.activeOrgs,0),n.maxActiveSlasPerOrg=m(i.maxActiveSlasPerOrg,0),i.byStatus&&typeof i.byStatus=="object")for(const[f,_]of Object.entries(i.byStatus))typeof _=="number"&&Number.isFinite(_)&&(n.byStatus[f]=_);if(i.byTier&&typeof i.byTier=="object")for(const[f,_]of Object.entries(i.byTier))typeof _=="number"&&Number.isFinite(_)&&(n.byTier[f]=_);if(i.violations&&typeof i.violations=="object"){n.violations.total=m(i.violations.total,0),n.violations.totalCompensation=m(i.violations.totalCompensation,0);for(const f of["byTerm","bySeverity","byStatus"])if(i.violations[f]&&typeof i.violations[f]=="object")for(const[_,w]of Object.entries(i.violations[f]))typeof w=="number"&&Number.isFinite(w)&&(n.violations[f][_]=w)}return n}function Te(l){if(l==null||l==="")return"—";const n=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(n.getTime())?String(l):n.toLocaleString("zh-CN",{hour12:!1})}const Pt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Bt={class:"tier-head"},Jt={class:"tier-comp"},qt={class:"tier-terms"},Gt={class:"tier-term"},Kt={class:"tier-term"},Ht={class:"tier-term"},Wt={class:"tier-term"},Yt={class:"filter-bar"},Qt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Xt={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Zt={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},eo={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},to={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},oo={class:"filter-bar"},ao={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},lo={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},no={key:5,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ro={key:0,style:{color:"#faad14","font-weight":"500"}},io={key:1,style:{color:"var(--text-muted)"}},so={key:7,style:{color:"var(--text-secondary)","font-size":"11px"}},uo={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},co={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},po={key:0,style:{"padding-top":"8px"}},fo={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},mo={key:2,style:{"font-family":"monospace","font-size":"12px"}},vo={key:0,style:{"padding-top":"8px"}},yo={style:{"margin-left":"8px","font-family":"monospace","font-size":"12px"}},bo={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},_o={style:{"margin-left":"auto",color:"#ff4d4f","font-weight":"500"}},xo={key:0,style:{"padding-top":"8px"}},go={key:0,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},ko={key:1,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},So={key:2,style:{"font-family":"monospace","font-size":"12px"}},ho={key:0,style:{"padding-top":"8px"}},Co={style:{"font-family":"monospace","font-size":"12px"}},Io={style:{"font-family":"monospace"}},To={style:{"font-family":"monospace"}},zo={style:{color:"#faad14","font-weight":"600","font-family":"monospace","font-size":"14px"}},Ao={__name:"Sla",setup(l){const n=bt(),i=It.PRESENTED_IMAGE_SIMPLE,f=x(!1),_=x(!1),w=x(!1),Ae=x([]),me=x([]),je=x([]),S=x({totalContracts:0,activeContracts:0,activeOrgs:0,maxActiveSlasPerOrg:0,byStatus:{},byTier:{},violations:{total:0,byTerm:{},bySeverity:{},byStatus:{},totalCompensation:0}}),ve=x({noDb:!1,error:""}),Oe=x("contracts"),Y=x(""),Q=x(""),X=x(""),ne=x(!1),re=x(!1),ye=x(!1),be=x(!1),_e=x(!1),ie=x(!1),I=Pe({orgId:"",tier:"silver",monthlyFee:1e3,durationDays:30}),T=Pe({slaId:null,term:"availability",value:null}),z=x(null),Z=x({slaId:"",totalSamples:0,byTerm:{}}),L=x(null),j=x(null),xe=x(null),D=x(null),Ke=[{title:"SLA ID",key:"slaId",width:"120px"},{title:"组织",key:"orgId",width:"160px"},{title:"等级",key:"tier",width:"90px"},{title:"状态",key:"status",width:"100px"},{title:"月费",key:"monthlyFee",width:"110px"},{title:"到期",key:"endDate",width:"160px"},{title:"操作",key:"action",width:"260px"}],He=[{title:"ID",key:"violationId",width:"120px"},{title:"指标",key:"term",width:"140px"},{title:"严重度",key:"severity",width:"100px"},{title:"偏差",key:"deviation",width:"180px"},{title:"期望",key:"expected",width:"110px"},{title:"实际",key:"actual",width:"110px"},{title:"补偿",key:"compensation",width:"110px"},{title:"发生时间",key:"occurredAt",width:"160px"},{title:"操作",key:"action",width:"120px"}],we=[{title:"指标",key:"term",width:"140px"},{title:"期望",key:"expected",width:"110px"},{title:"均值",key:"mean",width:"110px"},{title:"p95",key:"p95",width:"110px"},{title:"最小",key:"min",width:"110px"},{title:"最大",key:"max",width:"110px"},{title:"样本数",key:"count",width:"90px"}],We=de(()=>{let r=me.value;return Y.value&&(r=r.filter(t=>t.tier===Y.value)),Q.value&&(r=r.filter(t=>t.status===Q.value)),r}),Ye=de(()=>{let r=je.value;return X.value&&(r=r.filter(t=>t.severity===X.value)),r}),Qe=de(()=>z.value?Object.entries(Z.value.byTerm).map(([r,t])=>({key:r,term:r,expected:Fe(z.value.terms,r),...t})):[]),Xe=de(()=>!j.value||!z.value?[]:Object.entries(j.value.metricsByTerm).map(([r,t])=>({key:r,term:r,expected:Fe(z.value.terms,r),...t})));function Fe(r,t){if(!r)return 0;switch(t){case"availability":return r.availability;case"response_time":return r.maxResponseTime;case"throughput":return r.minThroughput;case"error_rate":return r.maxErrorRate;default:return 0}}function se(r){return{gold:"gold",silver:"default",bronze:"orange"}[r]||"default"}function De(r){return{gold:"#faad14",silver:"#8c8c8c",bronze:"#d4a373"}[r]||"#888"}function ge(r){return{active:"活跃",expired:"已过期",terminated:"已终止"}[r]||r}function Re(r){return{active:"green",expired:"default",terminated:"red"}[r]||"default"}function Ze(r){return{active:"#52c41a",expired:"#888",terminated:"#ff4d4f"}[r]||"#888"}function B(r){return{availability:"可用性",response_time:"响应时间",throughput:"吞吐量",error_rate:"错误率"}[r]||r}function et(r){return{availability:"比例 0~1,例如 0.997",response_time:"毫秒,例如 120",throughput:"每秒请求数,例如 850",error_rate:"比例 0~1,例如 0.003"}[r]||""}function U(r,t){return typeof t!="number"||!Number.isFinite(t)?"—":r==="availability"||r==="error_rate"?(t*100).toFixed(3)+"%":r==="response_time"?t.toFixed(1)+"ms":r==="throughput"?t.toFixed(0)+" rps":t.toFixed(4)}function J(r){return{minor:"轻微",moderate:"中等",major:"严重",critical:"关键"}[r]||r}function ee(r){return{minor:"default",moderate:"gold",major:"orange",critical:"red"}[r]||"default"}function ke(r){return{minor:"#888",moderate:"#faad14",major:"#fa8c16",critical:"#ff4d4f"}[r]||"#888"}function tt(r){return r>=.99?"#52c41a":r>=.9?"#1677ff":r>=.7?"#faad14":"#ff4d4f"}function te(r,t){return t?Math.round(r/t*100):0}async function q(){f.value=!0,ve.value={noDb:!1,error:""};try{const[r,t,C,oe]=await Promise.all([n.execute("sla tiers --json",8e3).catch(()=>({output:""})),n.execute("sla list --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("sla violations --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("sla stats-v2",8e3).catch(()=>({output:""}))]),M=[t,C,oe].map(F=>W(F.output)).find(F=>F.noDb);M&&(ve.value=M),Ae.value=Ot(r.output),me.value=Ft(t.output),je.value=$t(C.output),S.value=Mt(oe.output)}catch(r){k.error("加载 SLA 数据失败: "+(r?.message||r))}finally{f.value=!1}}async function ot(){if(!I.orgId.trim()){k.warning("请填写组织 ID");return}_.value=!0;try{const r=I.durationDays*24*60*60*1e3,t=[`sla create "${I.orgId.trim().replace(/"/g,'\\"')}"`,`-t ${I.tier}`,`-d ${r}`,`-f ${I.monthlyFee||0}`,"--json"],{output:C}=await n.execute(t.join(" "),1e4);if(W(C).noDb){k.error("需要先 cc init 初始化项目");return}const M=Dt(C);if(!M){k.error("创建失败: "+C.slice(0,120));return}k.success(`合约已创建:${M.slaId.slice(0,8)}`),ne.value=!1,$e(),await q()}catch(r){k.error("创建失败: "+(r?.message||r))}finally{_.value=!1}}async function at(){if(!T.slaId){k.warning("请选择 SLA 合约");return}if(T.value===null||T.value===void 0){k.warning("请填写指标数值");return}w.value=!0;try{const{output:r}=await n.execute(`sla record ${T.slaId} ${T.term} ${T.value} --json`,8e3);if(W(r).noDb){k.error("需要先 cc init 初始化项目");return}if(!/"metricId"|"term"/.test(r)){k.error("记录失败: "+r.slice(0,120));return}k.success("指标已记录"),re.value=!1,Le()}catch(r){k.error("记录失败: "+(r?.message||r))}finally{w.value=!1}}async function lt(r){try{const{output:t}=await n.execute(`sla terminate ${r.slaId}`,8e3);if(W(t).noDb){k.error("需要先 cc init 初始化项目");return}if(/Failed/i.test(t)&&!/terminated/i.test(t)){k.error("终止失败: "+t.slice(0,120));return}k.success("合约已终止"),await q()}catch(t){k.error("终止失败: "+(t?.message||t))}}async function nt(r){z.value=r,Z.value={slaId:"",totalSamples:0,byTerm:{}},ye.value=!0;try{const{output:t}=await n.execute(`sla metrics ${r.slaId} --json`,8e3);Z.value=Rt(t)}catch(t){k.error("加载指标失败: "+(t?.message||t))}}async function rt(r){z.value=r,L.value=null,be.value=!0;try{const{output:t}=await n.execute(`sla check ${r.slaId} --json`,1e4);if(W(t).noDb){k.error("需要先 cc init 初始化项目");return}L.value=Lt(t),L.value.totalViolations>0&&await q()}catch(t){k.error("检查失败: "+(t?.message||t))}}async function it(r){z.value=r,j.value=null,_e.value=!0;try{const{output:t}=await n.execute(`sla report ${r.slaId} --json`,1e4);j.value=Nt(t)}catch(t){k.error("加载报告失败: "+(t?.message||t))}}async function st(r){xe.value=r,D.value=null;try{const{output:t}=await n.execute(`sla compensate ${r.violationId} --json`,8e3);if(W(t).noDb){k.error("需要先 cc init 初始化项目");return}if(D.value=Vt(t),!D.value){k.error("计算失败: "+t.slice(0,120));return}ie.value=!0,await q()}catch(t){k.error("计算失败: "+(t?.message||t))}}function ut(r){xe.value=r,D.value={violationId:r.violationId,slaId:r.slaId,severity:r.severity,base:0,multiplier:0,amount:r.compensationAmount||0},ie.value=!0}function $e(){I.orgId="",I.tier="silver",I.monthlyFee=1e3,I.durationDays=30}function Le(){T.slaId=null,T.term="availability",T.value=null}return Tt(q),(r,t)=>{const C=y("a-button"),oe=y("a-space"),M=y("a-alert"),F=y("a-statistic"),V=y("a-card"),R=y("a-col"),ue=y("a-row"),A=y("a-tag"),G=y("a-radio-button"),Se=y("a-radio-group"),ct=y("a-popconfirm"),ce=y("a-table"),he=y("a-tab-pane"),K=y("a-progress"),dt=y("a-tabs"),pt=y("a-input"),P=y("a-form-item"),Ve=y("a-select-option"),Ce=y("a-select"),Ie=y("a-input-number"),Ee=y("a-form"),H=y("a-modal"),E=y("a-descriptions-item"),Ne=y("a-descriptions"),ft=y("a-empty"),mt=y("a-result"),vt=y("a-list-item"),yt=y("a-list");return s(),d("div",null,[b("div",Pt,[t[22]||(t[22]=b("div",null,[b("h2",{class:"page-title"},"SLA 管理"),b("p",{class:"page-sub"},"服务等级合约 · 指标记录 · 偏差检测 · 补偿计算")],-1)),o(oe,null,{default:a(()=>[o(C,{loading:f.value,onClick:q},{icon:a(()=>[o(g(xt))]),default:a(()=>[t[19]||(t[19]=p(" 刷新 ",-1))]),_:1},8,["loading"]),o(C,{onClick:t[0]||(t[0]=e=>re.value=!0)},{icon:a(()=>[o(g(gt))]),default:a(()=>[t[20]||(t[20]=p(" 记录指标 ",-1))]),_:1}),o(C,{type:"primary",onClick:t[1]||(t[1]=e=>ne.value=!0)},{icon:a(()=>[o(g(kt))]),default:a(()=>[t[21]||(t[21]=p(" 新建合约 ",-1))]),_:1})]),_:1})]),ve.value.noDb?(s(),h(M,{key:0,type:"info","show-icon":"",message:"该模块需要项目级数据库",description:"`cc sla ...` 命令仅在 chainlesschain 项目目录下可用。请先运行 `cc init` 初始化项目,或在已初始化的目录启动 `cc serve`。",style:{"margin-bottom":"16px"}})):v("",!0),o(ue,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[o(R,{xs:12,sm:8,lg:5},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(F,{title:"合约总数",value:S.value.totalContracts,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[o(g(Ue))]),_:1},8,["value"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(F,{title:"活跃合约",value:S.value.activeContracts,"value-style":{color:S.value.activeContracts>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[o(g(Me))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(F,{title:"合作组织",value:S.value.activeOrgs,"value-style":{color:"#722ed1",fontSize:"20px"},suffix:S.value.maxActiveSlasPerOrg?`· cap=${S.value.maxActiveSlasPerOrg}`:""},{prefix:a(()=>[o(g(St))]),_:1},8,["value","suffix"])]),_:1})]),_:1}),o(R,{xs:12,sm:8,lg:5},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(F,{title:"违规总数",value:S.value.violations.total,"value-style":{color:S.value.violations.total>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:a(()=>[o(g(ht))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),o(R,{xs:24,sm:8,lg:4},{default:a(()=>[o(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(F,{title:"累计补偿",value:S.value.violations.totalCompensation,precision:2,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[o(g(Ct))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(V,{title:"SLA 等级",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[o(ue,{gutter:[12,12]},{default:a(()=>[(s(!0),d(O,null,$(Ae.value,e=>(s(),h(R,{key:e.name,xs:24,sm:8},{default:a(()=>[b("div",{class:"tier-pill",style:zt({borderLeftColor:De(e.name)})},[b("div",Bt,[o(A,{color:se(e.name),style:{"font-family":"monospace","font-size":"13px"}},{default:a(()=>[p(u(e.name.toUpperCase()),1)]),_:2},1032,["color"]),b("span",Jt,"补偿率 "+u((e.compensationRate*100).toFixed(1))+"%",1)]),b("div",qt,[b("span",Gt,"可用性 ≥ "+u((e.availability*100).toFixed(2))+"%",1),b("span",Kt,"p95 ≤ "+u(e.maxResponseTime)+"ms",1),b("span",Ht,"RPS ≥ "+u(e.minThroughput),1),b("span",Wt,"错误率 ≤ "+u((e.maxErrorRate*100).toFixed(2))+"%",1)])],4)]),_:2},1024))),128))]),_:1})]),_:1}),o(dt,{activeKey:Oe.value,"onUpdate:activeKey":t[5]||(t[5]=e=>Oe.value=e),class:"sla-tabs"},{default:a(()=>[o(he,{key:"contracts",tab:"合约"},{default:a(()=>[b("div",Yt,[o(Se,{value:Y.value,"onUpdate:value":t[2]||(t[2]=e=>Y.value=e),size:"small","button-style":"solid"},{default:a(()=>[o(G,{value:""},{default:a(()=>[...t[23]||(t[23]=[p("全部等级",-1)])]),_:1}),(s(!0),d(O,null,$(g(pe),e=>(s(),h(G,{key:e,value:e},{default:a(()=>[p(u(e.toUpperCase()),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(Se,{value:Q.value,"onUpdate:value":t[3]||(t[3]=e=>Q.value=e),size:"small"},{default:a(()=>[o(G,{value:""},{default:a(()=>[...t[24]||(t[24]=[p("全部状态",-1)])]),_:1}),(s(!0),d(O,null,$(g(ze),e=>(s(),h(G,{key:e,value:e},{default:a(()=>[p(u(ge(e)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ce,{columns:Ke,"data-source":We.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 个合约`},size:"small",loading:f.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:e,record:c})=>[e.key==="slaId"?(s(),d("span",Qt,u(c.slaId.slice(0,12)),1)):v("",!0),e.key==="orgId"?(s(),d("span",Xt,u(c.orgId),1)):v("",!0),e.key==="tier"?(s(),h(A,{key:2,color:se(c.tier),style:{"font-family":"monospace"}},{default:a(()=>[p(u(c.tier.toUpperCase()),1)]),_:2},1032,["color"])):v("",!0),e.key==="status"?(s(),h(A,{key:3,color:Re(c.status)},{default:a(()=>[p(u(ge(c.status)),1)]),_:2},1032,["color"])):v("",!0),e.key==="monthlyFee"?(s(),d("span",Zt,u(c.monthlyFee.toFixed(2)),1)):v("",!0),e.key==="endDate"?(s(),d("span",eo,u(g(Te)(c.endDate)),1)):v("",!0),e.key==="action"?(s(),d(O,{key:6},[o(C,{size:"small",type:"link",onClick:ae=>nt(c)},{default:a(()=>[...t[25]||(t[25]=[p("指标",-1)])]),_:1},8,["onClick"]),o(C,{size:"small",type:"link",onClick:ae=>rt(c)},{default:a(()=>[...t[26]||(t[26]=[p("检查",-1)])]),_:1},8,["onClick"]),o(C,{size:"small",type:"link",onClick:ae=>it(c)},{default:a(()=>[...t[27]||(t[27]=[p("报告",-1)])]),_:1},8,["onClick"]),c.status==="active"?(s(),h(ct,{key:0,title:"终止该合约?","ok-text":"终止","cancel-text":"取消",onConfirm:ae=>lt(c)},{default:a(()=>[o(C,{size:"small",type:"link",danger:""},{default:a(()=>[...t[28]||(t[28]=[p("终止",-1)])]),_:1})]),_:1},8,["onConfirm"])):v("",!0)],64)):v("",!0)]),emptyText:a(()=>[b("div",to,[o(g(Ue),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+u(Y.value||Q.value?"没有符合条件的合约":'暂无合约,点"新建合约"创建第一个'),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(he,{key:"violations",tab:"违规"},{default:a(()=>[b("div",oo,[o(Se,{value:X.value,"onUpdate:value":t[4]||(t[4]=e=>X.value=e),size:"small","button-style":"solid"},{default:a(()=>[o(G,{value:""},{default:a(()=>[...t[29]||(t[29]=[p("全部严重度",-1)])]),_:1}),(s(!0),d(O,null,$(g(le),e=>(s(),h(G,{key:e,value:e},{default:a(()=>[p(u(J(e)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ce,{columns:He,"data-source":Ye.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:f.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:e,record:c})=>[e.key==="violationId"?(s(),d("span",ao,u(c.violationId.slice(0,12)),1)):v("",!0),e.key==="term"?(s(),h(A,{key:1,color:"default",style:{"font-family":"monospace"}},{default:a(()=>[p(u(B(c.term)),1)]),_:2},1024)):v("",!0),e.key==="severity"?(s(),h(A,{key:2,color:ee(c.severity)},{default:a(()=>[p(u(J(c.severity)),1)]),_:2},1032,["color"])):v("",!0),e.key==="deviation"?(s(),h(K,{key:3,percent:Math.min(100,Math.round(c.deviationPercent)),"stroke-color":ke(c.severity),size:"small",format:()=>`${c.deviationPercent.toFixed(1)}%`},null,8,["percent","stroke-color","format"])):v("",!0),e.key==="expected"?(s(),d("span",lo,u(U(c.term,c.expectedValue)),1)):v("",!0),e.key==="actual"?(s(),d("span",no,u(U(c.term,c.actualValue)),1)):v("",!0),e.key==="compensation"?(s(),d(O,{key:6},[c.compensationAmount!==null?(s(),d("span",ro,u(c.compensationAmount.toFixed(2)),1)):(s(),d("span",io,"未计算"))],64)):v("",!0),e.key==="occurredAt"?(s(),d("span",so,u(g(Te)(c.occurredAt)),1)):v("",!0),e.key==="action"?(s(),d(O,{key:8},[c.compensationAmount===null?(s(),h(C,{key:0,size:"small",type:"link",onClick:ae=>st(c)},{default:a(()=>[...t[30]||(t[30]=[p("计算补偿",-1)])]),_:1},8,["onClick"])):(s(),h(C,{key:1,size:"small",type:"link",onClick:ae=>ut(c)},{default:a(()=>[...t[31]||(t[31]=[p("查看",-1)])]),_:1},8,["onClick"]))],64)):v("",!0)]),emptyText:a(()=>[b("div",uo,[o(g(Me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block",color:"#52c41a"}}),p(" "+u(X.value?"没有符合条件的违规":"暂无违规记录"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(he,{key:"breakdown",tab:"分布统计"},{default:a(()=>[o(ue,{gutter:[16,16]},{default:a(()=>[o(R,{xs:24,lg:12},{default:a(()=>[o(V,{title:"合约 — 按状态",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"12px"}},{default:a(()=>[(s(!0),d(O,null,$(g(ze),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:Re(e),style:{"min-width":"80px","text-align":"center"}},{default:a(()=>[p(u(ge(e)),1)]),_:2},1032,["color"]),o(K,{percent:te(S.value.byStatus[e]||0,S.value.totalContracts),"stroke-color":Ze(e),format:()=>`${S.value.byStatus[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1}),o(V,{title:"合约 — 按等级",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[(s(!0),d(O,null,$(g(pe),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:se(e),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:a(()=>[p(u(e.toUpperCase()),1)]),_:2},1032,["color"]),o(K,{percent:te(S.value.byTier[e]||0,S.value.totalContracts),"stroke-color":De(e),format:()=>`${S.value.byTier[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1}),o(R,{xs:24,lg:12},{default:a(()=>[o(V,{title:"违规 — 按严重度",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"12px"}},{default:a(()=>[(s(!0),d(O,null,$(g(le),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:ee(e),style:{"min-width":"80px","text-align":"center"}},{default:a(()=>[p(u(J(e)),1)]),_:2},1032,["color"]),o(K,{percent:te(S.value.violations.bySeverity[e]||0,S.value.violations.total),"stroke-color":ke(e),format:()=>`${S.value.violations.bySeverity[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1}),o(V,{title:"违规 — 按指标",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[(s(!0),d(O,null,$(g(fe),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:"default",style:{"min-width":"110px","text-align":"center","font-family":"monospace","font-size":"11px"}},{default:a(()=>[p(u(B(e)),1)]),_:2},1024),o(K,{percent:te(S.value.violations.byTerm[e]||0,S.value.violations.total),"stroke-color":"#fa8c16",format:()=>`${S.value.violations.byTerm[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","format"])]))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["activeKey"]),o(H,{open:ne.value,"onUpdate:open":t[10]||(t[10]=e=>ne.value=e),title:"新建 SLA 合约","confirm-loading":_.value,width:540,"ok-text":"创建","cancel-text":"取消",onOk:ot,onCancel:$e},{default:a(()=>[o(Ee,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(P,{label:"组织 ID",required:""},{default:a(()=>[o(pt,{value:I.orgId,"onUpdate:value":t[6]||(t[6]=e=>I.orgId=e),placeholder:"例如 org-acme"},null,8,["value"])]),_:1}),o(P,{label:"等级",required:""},{default:a(()=>[o(Ce,{value:I.tier,"onUpdate:value":t[7]||(t[7]=e=>I.tier=e)},{default:a(()=>[(s(!0),d(O,null,$(g(pe),e=>(s(),h(Ve,{key:e,value:e},{default:a(()=>[p(u(e.toUpperCase()),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(P,{label:"月费"},{default:a(()=>[o(Ie,{value:I.monthlyFee,"onUpdate:value":t[8]||(t[8]=e=>I.monthlyFee=e),min:0,step:100,style:{width:"160px"}},null,8,["value"])]),_:1}),o(P,{label:"期限 (天)"},{default:a(()=>[o(Ie,{value:I.durationDays,"onUpdate:value":t[9]||(t[9]=e=>I.durationDays=e),min:1,step:30,style:{width:"160px"}},null,8,["value"]),t[32]||(t[32]=b("span",{style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},"默认 30 天",-1))]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(H,{open:re.value,"onUpdate:open":t[14]||(t[14]=e=>re.value=e),title:"记录指标","confirm-loading":w.value,width:540,"ok-text":"记录","cancel-text":"取消",onOk:at,onCancel:Le},{default:a(()=>[o(Ee,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(P,{label:"SLA",required:""},{default:a(()=>[o(Ce,{value:T.slaId,"onUpdate:value":t[11]||(t[11]=e=>T.slaId=e),placeholder:"选择合约",options:me.value.map(e=>({value:e.slaId,label:`${e.slaId.slice(0,8)} · ${e.orgId} [${e.tier}]`})),"show-search":""},null,8,["value","options"])]),_:1}),o(P,{label:"指标",required:""},{default:a(()=>[o(Ce,{value:T.term,"onUpdate:value":t[12]||(t[12]=e=>T.term=e)},{default:a(()=>[(s(!0),d(O,null,$(g(fe),e=>(s(),h(Ve,{key:e,value:e},{default:a(()=>[p(u(B(e)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(P,{label:"数值",required:""},{default:a(()=>[o(Ie,{value:T.value,"onUpdate:value":t[13]||(t[13]=e=>T.value=e),step:.01,style:{width:"200px"}},null,8,["value"]),b("div",co,u(et(T.term)),1)]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(H,{open:ye.value,"onUpdate:open":t[15]||(t[15]=e=>ye.value=e),title:`指标聚合:${z.value?.slaId?.slice(0,12)||""}`,width:640,footer:null},{default:a(()=>[z.value?(s(),d("div",po,[o(Ne,{column:2,size:"small",bordered:""},{default:a(()=>[o(E,{label:"组织"},{default:a(()=>[p(u(z.value.orgId),1)]),_:1}),o(E,{label:"等级"},{default:a(()=>[o(A,{color:se(z.value.tier)},{default:a(()=>[p(u(z.value.tier.toUpperCase()),1)]),_:1},8,["color"])]),_:1}),o(E,{label:"样本数"},{default:a(()=>[p(u(Z.value.totalSamples),1)]),_:1}),o(E,{label:"月费"},{default:a(()=>[p(u(z.value.monthlyFee.toFixed(2)),1)]),_:1})]),_:1}),t[33]||(t[33]=b("h4",{style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 10px"}},"按指标聚合",-1)),Object.keys(Z.value.byTerm).length?(s(),h(ce,{key:1,columns:we,"data-source":Qe.value,size:"small",pagination:!1,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:e,record:c})=>[e.key==="term"?(s(),h(A,{key:0,color:"default",style:{"font-family":"monospace"}},{default:a(()=>[p(u(B(c.term)),1)]),_:2},1024)):v("",!0),e.key==="expected"?(s(),d("span",fo,u(U(c.term,c.expected)),1)):["mean","p95","min","max"].includes(e.key)?(s(),d("span",mo,u(U(c.term,c[e.key])),1)):v("",!0)]),_:1},8,["data-source"])):(s(),h(ft,{key:0,description:"尚无指标数据",image:g(i)},null,8,["image"]))])):v("",!0)]),_:1},8,["open","title"]),o(H,{open:be.value,"onUpdate:open":t[16]||(t[16]=e=>be.value=e),title:`违规检测:${z.value?.slaId?.slice(0,12)||""}`,width:640,footer:null},{default:a(()=>[L.value?(s(),d("div",vo,[o(mt,{status:L.value.totalViolations===0?"success":"warning",title:L.value.totalViolations===0?"未检测到违规":`检测到 ${L.value.totalViolations} 项违规`,"sub-title":`检测时间: ${g(Te)(L.value.checkedAt)}`},null,8,["status","title","sub-title"]),L.value.totalViolations>0?(s(),h(yt,{key:0,size:"small","data-source":L.value.violations},{renderItem:a(({item:e})=>[o(vt,null,{default:a(()=>[o(A,{color:ee(e.severity),style:{"min-width":"50px","text-align":"center"}},{default:a(()=>[p(u(J(e.severity)),1)]),_:2},1032,["color"]),b("span",yo,u(B(e.term)),1),b("span",bo," 期望 "+u(U(e.term,e.expectedValue))+" · 实际 "+u(U(e.term,e.actualValue)),1),b("span",_o,u(e.deviationPercent.toFixed(2))+"%",1)]),_:2},1024)]),_:1},8,["data-source"])):v("",!0)])):v("",!0)]),_:1},8,["open","title"]),o(H,{open:_e.value,"onUpdate:open":t[17]||(t[17]=e=>_e.value=e),title:`合规报告:${z.value?.slaId?.slice(0,12)||""}`,width:720,footer:null},{default:a(()=>[j.value?(s(),d("div",xo,[o(ue,{gutter:12,style:{"margin-bottom":"16px"}},{default:a(()=>[o(R,{span:8},{default:a(()=>[o(F,{title:"合规率",value:j.value.compliance*100,suffix:"%",precision:2,"value-style":{color:tt(j.value.compliance),fontSize:"20px"}},null,8,["value","value-style"])]),_:1}),o(R,{span:8},{default:a(()=>[o(F,{title:"违规总数",value:j.value.violations.total,"value-style":{color:"#ff4d4f",fontSize:"20px"}},null,8,["value"])]),_:1}),o(R,{span:8},{default:a(()=>[o(F,{title:"累计补偿",value:j.value.violations.totalCompensation,precision:2,"value-style":{color:"#faad14",fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t[34]||(t[34]=b("h4",{style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},"违规分布 — 按严重度",-1)),(s(!0),d(O,null,$(g(le),e=>(s(),d("div",{key:e,class:"bd-row"},[o(A,{color:ee(e),style:{"min-width":"80px","text-align":"center"}},{default:a(()=>[p(u(J(e)),1)]),_:2},1032,["color"]),o(K,{percent:te(j.value.violations.bySeverity[e]||0,j.value.violations.total),"stroke-color":ke(e),format:()=>`${j.value.violations.bySeverity[e]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),Object.keys(j.value.metricsByTerm).length?(s(),d("h4",go,"指标聚合")):v("",!0),Object.keys(j.value.metricsByTerm).length?(s(),h(ce,{key:1,columns:we,"data-source":Xe.value,size:"small",pagination:!1,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:e,record:c})=>[e.key==="term"?(s(),h(A,{key:0,color:"default",style:{"font-family":"monospace"}},{default:a(()=>[p(u(B(c.term)),1)]),_:2},1024)):v("",!0),e.key==="expected"?(s(),d("span",ko,u(U(c.term,c.expected)),1)):["mean","p95","min","max"].includes(e.key)?(s(),d("span",So,u(U(c.term,c[e.key])),1)):v("",!0)]),_:1},8,["data-source"])):v("",!0)])):v("",!0)]),_:1},8,["open","title"]),o(H,{open:ie.value,"onUpdate:open":t[18]||(t[18]=e=>ie.value=e),title:`补偿计算:${xe.value?.violationId?.slice(0,12)||""}`,width:540,footer:null},{default:a(()=>[D.value?(s(),d("div",ho,[o(Ne,{column:2,size:"small",bordered:""},{default:a(()=>[o(E,{label:"违规 ID",span:2},{default:a(()=>[b("span",Co,u(D.value.violationId),1)]),_:1}),o(E,{label:"严重度"},{default:a(()=>[o(A,{color:ee(D.value.severity)},{default:a(()=>[p(u(J(D.value.severity)),1)]),_:1},8,["color"])]),_:1}),o(E,{label:"基础金额"},{default:a(()=>[b("span",Io,u(D.value.base.toFixed(4)),1)]),_:1}),o(E,{label:"偏差倍数"},{default:a(()=>[b("span",To,"×"+u(D.value.multiplier.toFixed(2)),1)]),_:1}),o(E,{label:"最终补偿"},{default:a(()=>[b("span",zo,u(D.value.amount.toFixed(2)),1)]),_:1})]),_:1})])):v("",!0)]),_:1},8,["open","title"])])}}},Mo=_t(Ao,[["__scopeId","data-v-049d391a"]]);export{Mo as default};
@@ -0,0 +1 @@
1
+ import{u as T}from"./ws-4ur1fGsk.js";import{_ as V}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as _}from"./index-BB5y5Y0z.js";import{_ as G,S as H}from"./icons-CJACPYXu.js";import{a as q,r as N,l as M,F as J,D as b,c as l,x as a,q as m,v as I,J as u,u as j,I as Q,m as k,G as P,j as z}from"./vendor-D0Qjn73K.js";import"./index-Vit9TJBu.js";import"./useConfigInject-DIkkDpt1.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";const w=Object.freeze({defaultEngine:"webspeech",webSpeech:{lang:"zh-CN"},whisperAPI:{apiKey:"",baseURL:"https://api.openai.com/v1",model:"whisper-1",language:"zh",timeout:6e4},whisperLocal:{serverUrl:"http://localhost:8002",modelSize:"base",device:"auto",timeout:12e4}}),X=["webspeech","whisper-api","whisper-local"];function Y(p){if(!p)return null;const i=p.trim();try{return JSON.parse(i)}catch{const n=i.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!n)return null;try{return JSON.parse(n[1])}catch{return null}}}function W(p,i){if(typeof p=="number"&&Number.isFinite(p))return p;const n=parseFloat(p);return Number.isFinite(n)?n:i}function Z(p){return JSON.parse(JSON.stringify(p))}function ee(p){const i=Z(w);if(!p)return i;const n=p.trim();if(!n||/key not found/i.test(n))return i;const s=Y(n);if(!s||typeof s!="object"||Array.isArray(s))return i;if(typeof s.defaultEngine=="string"&&X.includes(s.defaultEngine)&&(i.defaultEngine=s.defaultEngine),s.webSpeech&&typeof s.webSpeech=="object"&&typeof s.webSpeech.lang=="string"&&s.webSpeech.lang&&(i.webSpeech.lang=s.webSpeech.lang),s.whisperAPI&&typeof s.whisperAPI=="object"){const t=s.whisperAPI;typeof t.apiKey=="string"&&(i.whisperAPI.apiKey=t.apiKey),typeof t.baseURL=="string"&&t.baseURL&&(i.whisperAPI.baseURL=t.baseURL),typeof t.model=="string"&&t.model&&(i.whisperAPI.model=t.model),typeof t.language=="string"&&t.language&&(i.whisperAPI.language=t.language),t.timeout!==void 0&&(i.whisperAPI.timeout=W(t.timeout,w.whisperAPI.timeout))}if(s.whisperLocal&&typeof s.whisperLocal=="object"){const t=s.whisperLocal;typeof t.serverUrl=="string"&&t.serverUrl&&(i.whisperLocal.serverUrl=t.serverUrl),typeof t.modelSize=="string"&&t.modelSize&&(i.whisperLocal.modelSize=t.modelSize),typeof t.device=="string"&&t.device&&(i.whisperLocal.device=t.device),t.timeout!==void 0&&(i.whisperLocal.timeout=W(t.timeout,w.whisperLocal.timeout))}return i}function $(p,i){const n={};p.defaultEngine!==i.defaultEngine&&(n.defaultEngine=i.defaultEngine);for(const s of["webSpeech","whisperAPI","whisperLocal"]){const t=p[s]||{},c=i[s]||{};for(const y of Object.keys(w[s]))t[y]!==c[y]&&(n[`${s}.${y}`]=c[y])}return n}const te={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},le={style:{color:"var(--text-primary)"}},ae={style:{color:"var(--text-muted)","font-size":"11px"}},se={style:{display:"flex",gap:"12px","align-items":"center"}},ie={key:0,style:{color:"#faad14","font-size":"12px"}},oe={__name:"SpeechSettings",setup(p){const i=T(),n=N(!1),s=N(!1),t=q(JSON.parse(JSON.stringify(w))),c=N(JSON.parse(JSON.stringify(w))),y=[{value:"webspeech",label:"Web Speech API(浏览器内置)"},{value:"whisper-api",label:"Whisper API(OpenAI 云端)"},{value:"whisper-local",label:"Whisper Local(本地服务)"}],R={webspeech:"✓ 免费,无需配置;准确度较低","whisper-api":"⚠ 需要 OpenAI API 密钥,按使用量计费;准确度高","whisper-local":"✓ 免费,需要本地部署 Whisper 服务;准确度高"},K=z(()=>R[t.defaultEngine]||""),E=z(()=>Object.keys($(c.value,t)).length>0);function L(d){t.defaultEngine=d.defaultEngine,Object.assign(t.webSpeech,d.webSpeech),Object.assign(t.whisperAPI,d.whisperAPI),Object.assign(t.whisperLocal,d.whisperLocal),c.value=JSON.parse(JSON.stringify(d))}async function U(){n.value=!0;try{const{output:d}=await i.execute("config get speech",1e4);L(ee(d))}catch(d){/key not found/i.test(d.message)?L(JSON.parse(JSON.stringify(w))):_.error("加载配置失败: "+d.message)}finally{n.value=!1}}function B(){L(c.value)}async function F(){const d=$(c.value,t),e=Object.keys(d);if(e.length===0){_.info("没有需要保存的修改");return}s.value=!0;let v=0,h=0;for(const g of e){const f=d[g],S=String(f).replace(/"/g,'\\"'),x=`config set speech.${g} "${S}"`;try{const{output:r,exitCode:O}=await i.execute(x,1e4);O!==0||/error|failed|失败/i.test(r)?(h++,_.error(`保存 speech.${g} 失败: ${r.slice(0,80)}`)):v++}catch(r){h++,_.error(`保存 speech.${g} 失败: ${r.message}`)}}s.value=!1,h===0?(_.success(`保存成功(${v} 项)`),c.value=JSON.parse(JSON.stringify(t))):v>0&&(_.warning(`部分保存成功:${v} 成功 / ${h} 失败`),await U())}return M(()=>{U()}),(d,e)=>{const v=m("a-button"),h=m("a-alert"),g=m("a-select"),f=m("a-form-item"),S=m("a-form"),x=m("a-card"),r=m("a-select-option"),O=m("a-input-password"),A=m("a-input"),C=m("a-input-number"),D=m("a-spin");return I(),J("div",null,[b("div",te,[e[12]||(e[12]=b("div",null,[b("h2",{class:"page-title"},"语音识别配置"),b("p",{class:"page-sub"},"引擎选择 / Web Speech / Whisper API / Whisper Local")],-1)),l(v,{loading:n.value,onClick:U},{icon:a(()=>[l(j(G))]),default:a(()=>[e[11]||(e[11]=u(" 刷新 ",-1))]),_:1},8,["loading"])]),l(h,{message:"部分配置仍在桌面端",description:"高级 storage / audio / 知识库集成 / 性能选项仍在桌面端 SystemSettings 编辑(低频使用,未迁移)。本页覆盖引擎选择 + 三种引擎各自的核心配置。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),l(D,{spinning:n.value},{default:a(()=>[l(x,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[b("span",le,[l(j(H),{style:{"margin-right":"8px"}}),e[13]||(e[13]=u("识别引擎 ",-1))])]),default:a(()=>[l(S,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[l(f,{label:"默认引擎"},{extra:a(()=>[b("span",ae,Q(K.value),1)]),default:a(()=>[l(g,{value:t.defaultEngine,"onUpdate:value":e[0]||(e[0]=o=>t.defaultEngine=o),style:{width:"320px"},disabled:s.value,options:y},null,8,["value","disabled"])]),_:1})]),_:1})]),_:1}),t.defaultEngine==="webspeech"?(I(),k(x,{key:0,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[...e[14]||(e[14]=[b("span",{style:{color:"var(--text-primary)"}},"Web Speech API 配置",-1)])]),default:a(()=>[l(S,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[l(f,{label:"语言"},{default:a(()=>[l(g,{value:t.webSpeech.lang,"onUpdate:value":e[1]||(e[1]=o=>t.webSpeech.lang=o),style:{width:"240px"},disabled:s.value},{default:a(()=>[l(r,{value:"zh-CN"},{default:a(()=>[...e[15]||(e[15]=[u("中文(简体)",-1)])]),_:1}),l(r,{value:"zh-TW"},{default:a(()=>[...e[16]||(e[16]=[u("中文(繁体)",-1)])]),_:1}),l(r,{value:"en-US"},{default:a(()=>[...e[17]||(e[17]=[u("English (US)",-1)])]),_:1}),l(r,{value:"en-GB"},{default:a(()=>[...e[18]||(e[18]=[u("English (UK)",-1)])]),_:1}),l(r,{value:"ja-JP"},{default:a(()=>[...e[19]||(e[19]=[u("日本語",-1)])]),_:1}),l(r,{value:"ko-KR"},{default:a(()=>[...e[20]||(e[20]=[u("한국어",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1})]),_:1})]),_:1})):P("",!0),t.defaultEngine==="whisper-api"?(I(),k(x,{key:1,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[...e[21]||(e[21]=[b("span",{style:{color:"var(--text-primary)"}},"Whisper API 配置",-1)])]),default:a(()=>[l(S,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[l(f,{label:"API Key"},{default:a(()=>[l(O,{value:t.whisperAPI.apiKey,"onUpdate:value":e[2]||(e[2]=o=>t.whisperAPI.apiKey=o),placeholder:"sk-...",disabled:s.value},null,8,["value","disabled"])]),_:1}),l(f,{label:"Base URL"},{default:a(()=>[l(A,{value:t.whisperAPI.baseURL,"onUpdate:value":e[3]||(e[3]=o=>t.whisperAPI.baseURL=o),disabled:s.value},null,8,["value","disabled"])]),_:1}),l(f,{label:"模型"},{default:a(()=>[l(A,{value:t.whisperAPI.model,"onUpdate:value":e[4]||(e[4]=o=>t.whisperAPI.model=o),disabled:s.value},null,8,["value","disabled"])]),_:1}),l(f,{label:"语言代码"},{default:a(()=>[l(A,{value:t.whisperAPI.language,"onUpdate:value":e[5]||(e[5]=o=>t.whisperAPI.language=o),disabled:s.value},null,8,["value","disabled"])]),_:1}),l(f,{label:"超时(毫秒)"},{default:a(()=>[l(C,{value:t.whisperAPI.timeout,"onUpdate:value":e[6]||(e[6]=o=>t.whisperAPI.timeout=o),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:s.value},null,8,["value","disabled"])]),_:1})]),_:1})]),_:1})):P("",!0),t.defaultEngine==="whisper-local"?(I(),k(x,{key:2,style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:a(()=>[...e[22]||(e[22]=[b("span",{style:{color:"var(--text-primary)"}},"Whisper Local 配置",-1)])]),default:a(()=>[l(S,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:a(()=>[l(f,{label:"服务地址"},{default:a(()=>[l(A,{value:t.whisperLocal.serverUrl,"onUpdate:value":e[7]||(e[7]=o=>t.whisperLocal.serverUrl=o),placeholder:"http://localhost:8002",disabled:s.value},null,8,["value","disabled"])]),_:1}),l(f,{label:"模型规模"},{default:a(()=>[l(g,{value:t.whisperLocal.modelSize,"onUpdate:value":e[8]||(e[8]=o=>t.whisperLocal.modelSize=o),style:{width:"180px"},disabled:s.value},{default:a(()=>[l(r,{value:"tiny"},{default:a(()=>[...e[23]||(e[23]=[u("tiny",-1)])]),_:1}),l(r,{value:"base"},{default:a(()=>[...e[24]||(e[24]=[u("base",-1)])]),_:1}),l(r,{value:"small"},{default:a(()=>[...e[25]||(e[25]=[u("small",-1)])]),_:1}),l(r,{value:"medium"},{default:a(()=>[...e[26]||(e[26]=[u("medium",-1)])]),_:1}),l(r,{value:"large"},{default:a(()=>[...e[27]||(e[27]=[u("large",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1}),l(f,{label:"设备"},{default:a(()=>[l(g,{value:t.whisperLocal.device,"onUpdate:value":e[9]||(e[9]=o=>t.whisperLocal.device=o),style:{width:"180px"},disabled:s.value},{default:a(()=>[l(r,{value:"auto"},{default:a(()=>[...e[28]||(e[28]=[u("auto",-1)])]),_:1}),l(r,{value:"cpu"},{default:a(()=>[...e[29]||(e[29]=[u("cpu",-1)])]),_:1}),l(r,{value:"cuda"},{default:a(()=>[...e[30]||(e[30]=[u("cuda",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1}),l(f,{label:"超时(毫秒)"},{default:a(()=>[l(C,{value:t.whisperLocal.timeout,"onUpdate:value":e[10]||(e[10]=o=>t.whisperLocal.timeout=o),min:1e3,max:6e5,step:1e3,style:{width:"200px"},disabled:s.value},null,8,["value","disabled"])]),_:1})]),_:1})]),_:1})):P("",!0),b("div",se,[l(v,{onClick:B,disabled:s.value||n.value},{default:a(()=>[...e[31]||(e[31]=[u("重置",-1)])]),_:1},8,["disabled"]),l(v,{type:"primary",loading:s.value,disabled:!E.value,onClick:F},{default:a(()=>[...e[32]||(e[32]=[u(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),E.value?(I(),J("span",ie,"有未保存的修改")):P("",!0)])]),_:1},8,["spinning"])])}}},we=V(oe,[["__scopeId","data-v-5139e78a"]]);export{we as default};
@@ -0,0 +1 @@
1
+ [data-v-5139e78a] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}
@@ -1 +1 @@
1
- import{k as F,r as $,j as I,l as P,M as R,F as d,D as f,c as o,x as l,u as s,m as T,G as b,q as _,v as r,J as g,I as u,H as A,L as V}from"./vendor-BVetwVfk.js";import{u as B}from"./ws-Bv7YH0VB.js";import{_ as L}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{Y as E}from"./icons-ukMaZ3tx.js";const M=F("tasks",()=>{const v=$([]),t=$(!1);let w=null,k=null;const S=I(()=>v.value.filter(e=>e.status==="running")),x=I(()=>v.value.filter(e=>e.status==="pending")),i=I(()=>v.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function a(){const e=B();t.value=!0;try{const p=await e.sendRaw({type:"tasks-list"});p&&Array.isArray(p.tasks)&&(v.value=p.tasks)}catch{}finally{t.value=!1}}async function N(e){const p=B();try{await p.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await a()}}const C=$(null);function z(e=5e3){y(),a(),w=setInterval(a,e),m()}function y(){w&&(clearInterval(w),w=null),k&&(k(),k=null)}function m(){const e=B();if(k)return;const p=n=>{n.type==="task:notification"&&n.payload?.task&&(C.value=n.payload.task,a(),setTimeout(()=>{C.value=null},8e3))};k=e.onRuntimeEvent(p)}function h(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function D(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:v,loading:t,running:S,pending:x,completed:i,lastNotification:C,fetchTasks:a,stopTask:N,startPolling:z,stopPolling:y,formatDuration:h,getStatusColor:D}}),U={class:"page-header"},j={key:0,class:"error-text"},q={key:1},G={class:"task-header"},H={class:"task-desc"},J={class:"task-id"},O={class:"task-meta"},W=["title"],Y={key:0,class:"error-text"},K={key:1,class:"success-text"},Q={key:2,class:"muted-text"},X={__name:"Tasks",setup(v){const t=M(),w=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function k(i){return i.status==="running"&&i.startedAt?t.formatDuration(Date.now()-i.startedAt):i.completedAt&&i.startedAt?t.formatDuration(i.completedAt-i.startedAt):"-"}function S(i){return i?new Date(i).toLocaleString():"-"}function x(i,a){return i?i.length>a?`${i.slice(0,a)}...`:i:""}return P(()=>t.startPolling(5e3)),R(()=>t.stopPolling()),(i,a)=>{const N=_("a-button"),C=_("a-space"),z=_("a-alert"),y=_("a-statistic"),m=_("a-card"),h=_("a-col"),D=_("a-row"),e=_("a-tag"),p=_("a-table");return r(),d("div",null,[f("div",U,[a[3]||(a[3]=f("div",null,[f("h2",{class:"page-title"},"后台任务"),f("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),o(C,null,{default:l(()=>[o(N,{ghost:"",loading:s(t).loading,onClick:a[0]||(a[0]=n=>s(t).fetchTasks())},{icon:l(()=>[o(s(E))]),default:l(()=>[a[2]||(a[2]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(t).lastNotification?(r(),T(z,{key:0,type:s(t).lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:a[1]||(a[1]=n=>s(t).lastNotification=null)},{message:l(()=>[g(" 任务"+u(s(t).lastNotification.status==="completed"?"完成":"结束")+": "+u(s(t).lastNotification.description||s(t).lastNotification.id.slice(0,16)),1)]),description:l(()=>[s(t).lastNotification.error?(r(),d("span",j,u(s(t).lastNotification.error),1)):s(t).lastNotification.result?(r(),d("span",q,u(x(String(s(t).lastNotification.result),120)),1)):b("",!0)]),_:1},8,["type"])):b("",!0),o(D,{gutter:[16,16],class:"stats-row"},{default:l(()=>[o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"全部任务",value:s(t).tasks.length},null,8,["value"])]),_:1})]),_:1}),o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"运行中",value:s(t).running.length},null,8,["value"])]),_:1})]),_:1}),o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"等待中",value:s(t).pending.length},null,8,["value"])]),_:1})]),_:1}),o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"已完成",value:s(t).completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),s(t).running.length>0?(r(),T(m,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:l(()=>[(r(!0),d(A,null,V(s(t).running,n=>(r(),d("div",{key:n.id,class:"task-item running"},[f("div",G,[o(e,{color:s(t).getStatusColor(n.status)},{default:l(()=>[g(u(n.status.toUpperCase()),1)]),_:2},1032,["color"]),f("span",H,u(n.description),1),f("span",J,u(n.id.slice(0,16)),1)]),f("div",O,[f("span",null,"类型: "+u(n.type||"-"),1),f("span",null,"已运行: "+u(s(t).formatDuration(Date.now()-n.startedAt)),1),o(N,{size:"small",danger:"",onClick:c=>s(t).stopTask(n.id)},{default:l(()=>[...a[4]||(a[4]=[g("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):b("",!0),o(m,{class:"panel-card"},{default:l(()=>[o(p,{columns:w,"data-source":s(t).tasks,pagination:{pageSize:15,size:"small"},loading:s(t).loading,"row-key":"id",size:"small"},{bodyCell:l(({column:n,record:c})=>[n.key==="status"?(r(),T(e,{key:0,color:s(t).getStatusColor(c.status)},{default:l(()=>[g(u(c.status),1)]),_:2},1032,["color"])):n.key==="description"?(r(),d("span",{key:1,title:c.command},u(c.description),9,W)):n.key==="duration"?(r(),d(A,{key:2},[g(u(k(c)),1)],64)):n.key==="createdAt"?(r(),d(A,{key:3},[g(u(S(c.createdAt)),1)],64)):n.key==="result"?(r(),d(A,{key:4},[c.error?(r(),d("span",Y,u(x(c.error,60)),1)):c.result?(r(),d("span",K,u(x(String(c.result),60)),1)):(r(),d("span",Q,"-"))],64)):n.key==="action"?(r(),d(A,{key:5},[c.status==="running"?(r(),T(N,{key:0,size:"small",danger:"",onClick:Z=>s(t).stopTask(c.id)},{default:l(()=>[...a[5]||(a[5]=[g(" 停止 ",-1)])]),_:1},8,["onClick"])):b("",!0)],64)):b("",!0)]),_:1},8,["data-source","loading"])]),_:1})])}}},nt=L(X,[["__scopeId","data-v-c8e3e605"]]);export{nt as default};
1
+ import{k as F,r as $,j as I,l as P,M as R,F as d,D as f,c as o,x as l,u as s,m as T,G as b,q as _,v as r,J as g,I as u,H as A,L as V}from"./vendor-D0Qjn73K.js";import{u as B}from"./ws-4ur1fGsk.js";import{_ as L}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as E}from"./icons-CJACPYXu.js";const M=F("tasks",()=>{const v=$([]),t=$(!1);let w=null,k=null;const S=I(()=>v.value.filter(e=>e.status==="running")),x=I(()=>v.value.filter(e=>e.status==="pending")),i=I(()=>v.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function a(){const e=B();t.value=!0;try{const p=await e.sendRaw({type:"tasks-list"});p&&Array.isArray(p.tasks)&&(v.value=p.tasks)}catch{}finally{t.value=!1}}async function N(e){const p=B();try{await p.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await a()}}const C=$(null);function z(e=5e3){y(),a(),w=setInterval(a,e),m()}function y(){w&&(clearInterval(w),w=null),k&&(k(),k=null)}function m(){const e=B();if(k)return;const p=n=>{n.type==="task:notification"&&n.payload?.task&&(C.value=n.payload.task,a(),setTimeout(()=>{C.value=null},8e3))};k=e.onRuntimeEvent(p)}function h(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function D(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:v,loading:t,running:S,pending:x,completed:i,lastNotification:C,fetchTasks:a,stopTask:N,startPolling:z,stopPolling:y,formatDuration:h,getStatusColor:D}}),U={class:"page-header"},j={key:0,class:"error-text"},q={key:1},G={class:"task-header"},H={class:"task-desc"},J={class:"task-id"},O={class:"task-meta"},W=["title"],K={key:0,class:"error-text"},Q={key:1,class:"success-text"},X={key:2,class:"muted-text"},Y={__name:"Tasks",setup(v){const t=M(),w=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function k(i){return i.status==="running"&&i.startedAt?t.formatDuration(Date.now()-i.startedAt):i.completedAt&&i.startedAt?t.formatDuration(i.completedAt-i.startedAt):"-"}function S(i){return i?new Date(i).toLocaleString():"-"}function x(i,a){return i?i.length>a?`${i.slice(0,a)}...`:i:""}return P(()=>t.startPolling(5e3)),R(()=>t.stopPolling()),(i,a)=>{const N=_("a-button"),C=_("a-space"),z=_("a-alert"),y=_("a-statistic"),m=_("a-card"),h=_("a-col"),D=_("a-row"),e=_("a-tag"),p=_("a-table");return r(),d("div",null,[f("div",U,[a[3]||(a[3]=f("div",null,[f("h2",{class:"page-title"},"后台任务"),f("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),o(C,null,{default:l(()=>[o(N,{ghost:"",loading:s(t).loading,onClick:a[0]||(a[0]=n=>s(t).fetchTasks())},{icon:l(()=>[o(s(E))]),default:l(()=>[a[2]||(a[2]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(t).lastNotification?(r(),T(z,{key:0,type:s(t).lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:a[1]||(a[1]=n=>s(t).lastNotification=null)},{message:l(()=>[g(" 任务"+u(s(t).lastNotification.status==="completed"?"完成":"结束")+": "+u(s(t).lastNotification.description||s(t).lastNotification.id.slice(0,16)),1)]),description:l(()=>[s(t).lastNotification.error?(r(),d("span",j,u(s(t).lastNotification.error),1)):s(t).lastNotification.result?(r(),d("span",q,u(x(String(s(t).lastNotification.result),120)),1)):b("",!0)]),_:1},8,["type"])):b("",!0),o(D,{gutter:[16,16],class:"stats-row"},{default:l(()=>[o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"全部任务",value:s(t).tasks.length},null,8,["value"])]),_:1})]),_:1}),o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"运行中",value:s(t).running.length},null,8,["value"])]),_:1})]),_:1}),o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"等待中",value:s(t).pending.length},null,8,["value"])]),_:1})]),_:1}),o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"已完成",value:s(t).completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),s(t).running.length>0?(r(),T(m,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:l(()=>[(r(!0),d(A,null,V(s(t).running,n=>(r(),d("div",{key:n.id,class:"task-item running"},[f("div",G,[o(e,{color:s(t).getStatusColor(n.status)},{default:l(()=>[g(u(n.status.toUpperCase()),1)]),_:2},1032,["color"]),f("span",H,u(n.description),1),f("span",J,u(n.id.slice(0,16)),1)]),f("div",O,[f("span",null,"类型: "+u(n.type||"-"),1),f("span",null,"已运行: "+u(s(t).formatDuration(Date.now()-n.startedAt)),1),o(N,{size:"small",danger:"",onClick:c=>s(t).stopTask(n.id)},{default:l(()=>[...a[4]||(a[4]=[g("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):b("",!0),o(m,{class:"panel-card"},{default:l(()=>[o(p,{columns:w,"data-source":s(t).tasks,pagination:{pageSize:15,size:"small"},loading:s(t).loading,"row-key":"id",size:"small"},{bodyCell:l(({column:n,record:c})=>[n.key==="status"?(r(),T(e,{key:0,color:s(t).getStatusColor(c.status)},{default:l(()=>[g(u(c.status),1)]),_:2},1032,["color"])):n.key==="description"?(r(),d("span",{key:1,title:c.command},u(c.description),9,W)):n.key==="duration"?(r(),d(A,{key:2},[g(u(k(c)),1)],64)):n.key==="createdAt"?(r(),d(A,{key:3},[g(u(S(c.createdAt)),1)],64)):n.key==="result"?(r(),d(A,{key:4},[c.error?(r(),d("span",K,u(x(c.error,60)),1)):c.result?(r(),d("span",Q,u(x(String(c.result),60)),1)):(r(),d("span",X,"-"))],64)):n.key==="action"?(r(),d(A,{key:5},[c.status==="running"?(r(),T(N,{key:0,size:"small",danger:"",onClick:Z=>s(t).stopTask(c.id)},{default:l(()=>[...a[5]||(a[5]=[g(" 停止 ",-1)])]),_:1},8,["onClick"])):b("",!0)],64)):b("",!0)]),_:1},8,["data-source","loading"])]),_:1})])}}},nt=L(Y,[["__scopeId","data-v-c8e3e605"]]);export{nt as default};
@@ -0,0 +1 @@
1
+ .template-card[data-v-9cc19fb7]{transition:border-color .2s,box-shadow .2s}.template-card[data-v-9cc19fb7]:hover{border-color:#1677ff!important;box-shadow:0 0 0 2px #1677ff26}
@@ -0,0 +1 @@
1
+ import{l as be,F as k,D as s,c as t,x as o,r as m,q as r,a as ke,B as we,v as c,H as F,L as R,u as d,I as y,J as l,m as b,G as U}from"./vendor-D0Qjn73K.js";import{u as Ce}from"./ws-4ur1fGsk.js";import{u as he}from"./useFs-CK8VYPus.js";import{_ as ze}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as W,af as Y,c as Oe,z as Q,ah as Pe,aq as $e,ap as Ie,b as X,av as Se,au as Te}from"./icons-CJACPYXu.js";import{a as v}from"./index-BB5y5Y0z.js";import"./useShellMode-CgR0wCYM.js";import"./index-Vit9TJBu.js";import"./useConfigInject-DIkkDpt1.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";const Be={style:{display:"flex","align-items":"flex-start",gap:"10px"}},je={style:{flex:"1","min-width":"0"}},Ne={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},Ae={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Je={style:{"margin-top":"12px","text-align":"right"}},De={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Fe={key:0,style:{"text-align":"center",padding:"40px"}},Re={style:{display:"flex","align-items":"flex-start",gap:"10px"}},Ue={style:{flex:"1","min-width":"0"}},qe={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px"}},Le={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ee={key:0,style:{"margin-top":"4px"}},Ke={style:{"margin-top":"12px","text-align":"right"}},Ve={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"}},Ge={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},He={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},We={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5","max-height":"60px",overflow:"hidden","text-overflow":"ellipsis","white-space":"pre-wrap"}},Ye={style:{"margin-top":"12px",display:"flex",gap:"8px","justify-content":"flex-end"}},Z="cc_prompt_templates",Qe={__name:"Templates",setup(Xe){const P=Ce(),ee=we(),q=he(),$=m(!1),I=m(!1),L=m("project"),S=m(""),x=m(null),w=m(!1),T=m(""),te=[{name:"code-project",description:"代码项目 — 代码审查、重构、单元测试"},{name:"data-science",description:"数据科学 — ML/数据分析、可视化"},{name:"devops",description:"DevOps — 基础设施、部署、监控"},{name:"medical-triage",description:"医疗分诊 — 症状分析、分诊建议"},{name:"agriculture-expert",description:"农业专家 — 作物管理、病虫害"},{name:"general-assistant",description:"通用助手 — 日常问答、任务管理"},{name:"ai-media-creator",description:"AI 媒体创作 — 图文生成、视频脚本"},{name:"ai-doc-creator",description:"AI 文档创作 — 文档生成、格式转换"},{name:"empty",description:"空白模板 — 最小项目结构"}];function oe(a){T.value=a,w.value=!0}async function ae(){w.value=!1;const a=T.value;if(a){S.value=a,x.value=null;try{const e=`init --template ${a} --yes`,{output:p,exitCode:g}=await P.execute(e,3e4);x.value={success:g===0,output:p}}catch(e){x.value={success:!1,output:`初始化失败: ${e.message}`}}finally{S.value=""}}}const B=m(!1),C=m([]),j=m(""),_=m(null);async function ne(){B.value=!0;try{const{output:a}=await P.execute("bi templates --json",15e3),e=JSON.parse(a);C.value=Array.isArray(e)?e:e.templates||[]}catch{C.value=[]}finally{B.value=!1}}async function se(a){j.value=a,_.value=null;try{const e=`bi dashboard create --template ${a} --json`,{output:p,exitCode:g}=await P.execute(e,3e4);_.value={success:g===0,output:p}}catch(e){_.value={success:!1,output:`创建失败: ${e.message}`}}finally{j.value=""}}const f=m([]),h=m(!1),i=ke({name:"",category:"general",content:""});function le(){try{const a=localStorage.getItem(Z);f.value=a?JSON.parse(a):[]}catch{f.value=[]}}function N(){localStorage.setItem(Z,JSON.stringify(f.value))}function re(){!i.name||!i.content||(f.value.push({name:i.name,category:i.category,content:i.content}),N(),E(),v.success("模板已保存"))}function E(){h.value=!1,i.name="",i.category="general",i.content=""}async function ie(){if(f.value.length){$.value=!0;try{const a=await q.saveJson({schema:1,prompts:f.value},{defaultPath:`prompt-templates-${new Date().toISOString().slice(0,10)}.json`});if(a.canceled)return;v.success(a.path?`已导出 ${f.value.length} 条到 ${a.path}`:"已导出")}catch(a){v.error(`导出失败: ${a.message||a}`)}finally{$.value=!1}}}async function pe(){I.value=!0;try{const a=await q.pickFileText({title:"选择 prompt-templates JSON",filters:[{name:"JSON",extensions:["json"]}]});if(!a||a.canceled)return;if(a.reason==="too_large"){v.error("文件过大");return}let e;try{e=JSON.parse(a.content||"")}catch(u){v.error(`JSON 解析失败: ${u.message}`);return}const p=Array.isArray(e)?e:Array.isArray(e?.prompts)?e.prompts:null;if(!p){v.error("文件格式不识别(期待 {prompts: [...]} 或数组)");return}let g=0;for(const u of p)!u||typeof u!="object"||typeof u.name!="string"||typeof u.content!="string"||(f.value.push({name:u.name,category:typeof u.category=="string"?u.category:"general",content:u.content}),g++);g?(N(),v.success(`已导入 ${g} 条`)):v.warning("文件中没有有效的 prompt 条目")}catch(a){v.error(`导入失败: ${a.message||a}`)}finally{I.value=!1}}function ue(a){f.value.splice(a,1),N(),v.success("模板已删除")}function ce(a){navigator.clipboard.writeText(a.content).then(()=>{v.success("已复制到剪贴板")}).catch(()=>{v.error("复制失败")})}function de(a){ee.push({path:"/chat",query:{prompt:a.content}})}function me(a){return{general:"blue",code:"green",writing:"orange",analysis:"purple"}[a]||"default"}return be(()=>{le(),ne()}),(a,e)=>{const p=r("a-button"),g=r("a-card"),u=r("a-col"),A=r("a-row"),K=r("a-alert"),J=r("a-tab-pane"),fe=r("a-spin"),V=r("a-empty"),M=r("a-tag"),ve=r("a-tabs"),G=r("a-modal"),ge=r("a-input"),D=r("a-form-item"),z=r("a-select-option"),ye=r("a-select"),xe=r("a-textarea"),_e=r("a-form");return c(),k("div",null,[e[29]||(e[29]=s("div",{style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},[s("div",null,[s("h2",{class:"page-title"},"模板中心"),s("p",{class:"page-sub"},"项目模板 / BI 模板 / Prompt 模板")])],-1)),t(ve,{activeKey:L.value,"onUpdate:activeKey":e[3]||(e[3]=n=>L.value=n),type:"card"},{default:o(()=>[t(J,{key:"project"},{tab:o(()=>[t(d(Oe)),e[10]||(e[10]=l(" 项目模板 ",-1))]),default:o(()=>[t(A,{gutter:[16,16]},{default:o(()=>[(c(),k(F,null,R(te,n=>t(u,{key:n.name,xs:24,sm:12,lg:8},{default:o(()=>[t(g,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[s("div",Be,[t(d(W),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}}),s("div",je,[s("div",Ne,y(n.name),1),s("div",Ae,y(n.description),1)])]),s("div",Je,[t(p,{type:"primary",size:"small",loading:S.value===n.name,onClick:O=>oe(n.name)},{icon:o(()=>[t(d(Y))]),default:o(()=>[e[11]||(e[11]=l(" 初始化 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024)),64))]),_:1}),x.value?(c(),b(K,{key:0,message:x.value.success?"初始化成功":"初始化失败",type:x.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[0]||(e[0]=n=>x.value=null)},{description:o(()=>[s("pre",De,y(x.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(J,{key:"bi"},{tab:o(()=>[t(d(Q)),e[12]||(e[12]=l(" BI 模板 ",-1))]),default:o(()=>[B.value?(c(),k("div",Fe,[t(fe),e[13]||(e[13]=s("div",{style:{color:"var(--text-muted)","margin-top":"8px"}},"加载 BI 模板...",-1))])):C.value.length?(c(),b(A,{key:2,gutter:[16,16]},{default:o(()=>[(c(!0),k(F,null,R(C.value,n=>(c(),b(u,{key:n.id,xs:24,sm:12,lg:8},{default:o(()=>[t(g,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[s("div",Re,[t(d(Q),{style:{"font-size":"24px",color:"#722ed1","flex-shrink":"0","margin-top":"2px"}}),s("div",Ue,[s("div",qe,y(n.name),1),s("div",Le,y(n.description||"暂无描述"),1),n.id?(c(),k("div",Ee,[t(M,{size:"small",color:"purple"},{default:o(()=>[l(y(n.id),1)]),_:2},1024)])):U("",!0)])]),s("div",Ke,[t(p,{type:"primary",size:"small",loading:j.value===n.id,onClick:O=>se(n.id)},{icon:o(()=>[t(d(Y))]),default:o(()=>[e[14]||(e[14]=l(" 创建仪表板 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(c(),b(V,{key:1,description:"暂无 BI 模板"})),_.value?(c(),b(K,{key:3,message:_.value.success?"仪表板创建成功":"创建失败",type:_.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[1]||(e[1]=n=>_.value=null)},{description:o(()=>[s("pre",Ve,y(_.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(J,{key:"prompts"},{tab:o(()=>[t(d(X)),e[15]||(e[15]=l(" Prompt 模板 ",-1))]),default:o(()=>[s("div",Me,[t(p,{type:"primary",onClick:e[2]||(e[2]=n=>h.value=!0)},{icon:o(()=>[t(d(Pe))]),default:o(()=>[e[16]||(e[16]=l(" 新建模板 ",-1))]),_:1}),t(p,{disabled:!f.value.length,loading:$.value,onClick:ie},{icon:o(()=>[t(d($e))]),default:o(()=>[e[17]||(e[17]=l(" 导出全部 ",-1))]),_:1},8,["disabled","loading"]),t(p,{loading:I.value,onClick:pe},{icon:o(()=>[t(d(Ie))]),default:o(()=>[e[18]||(e[18]=l(" 导入 ",-1))]),_:1},8,["loading"])]),f.value.length?(c(),b(A,{key:1,gutter:[16,16]},{default:o(()=>[(c(!0),k(F,null,R(f.value,(n,O)=>(c(),b(u,{key:O,xs:24,sm:12,lg:8},{default:o(()=>[t(g,{size:"small",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[s("div",Ge,[t(d(X),{style:{"font-size":"18px",color:"#52c41a"}}),s("span",He,y(n.name),1),t(M,{color:me(n.category),size:"small"},{default:o(()=>[l(y(n.category),1)]),_:2},1032,["color"])]),s("div",We,y(n.content.length>120?n.content.slice(0,120)+"...":n.content),1),s("div",Ye,[t(p,{size:"small",onClick:H=>de(n)},{icon:o(()=>[t(d(W))]),default:o(()=>[e[19]||(e[19]=l(" 使用 ",-1))]),_:1},8,["onClick"]),t(p,{size:"small",onClick:H=>ce(n)},{icon:o(()=>[t(d(Se))]),default:o(()=>[e[20]||(e[20]=l(" 复制 ",-1))]),_:1},8,["onClick"]),t(p,{size:"small",danger:"",onClick:H=>ue(O)},{icon:o(()=>[t(d(Te))]),default:o(()=>[e[21]||(e[21]=l(" 删除 ",-1))]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(c(),b(V,{key:0,description:"暂无 Prompt 模板,点击上方按钮创建"}))]),_:1})]),_:1},8,["activeKey"]),t(G,{open:w.value,"onUpdate:open":e[4]||(e[4]=n=>w.value=n),title:"确认初始化",onOk:ae,onCancel:e[5]||(e[5]=n=>w.value=!1),"ok-text":"确认","cancel-text":"取消"},{default:o(()=>[s("p",null,[e[22]||(e[22]=l("确定要使用模板 ",-1)),s("strong",null,y(T.value),1),e[23]||(e[23]=l(" 初始化项目吗?",-1))]),e[24]||(e[24]=s("p",{style:{color:"var(--text-muted)","font-size":"12px"}},"这将在当前工作目录创建项目结构。",-1))]),_:1},8,["open"]),t(G,{open:h.value,"onUpdate:open":e[9]||(e[9]=n=>h.value=n),title:"新建 Prompt 模板",onOk:re,onCancel:E,"ok-text":"保存","cancel-text":"取消","ok-button-props":{disabled:!i.name||!i.content}},{default:o(()=>[t(_e,{layout:"vertical"},{default:o(()=>[t(D,{label:"模板名称",required:""},{default:o(()=>[t(ge,{value:i.name,"onUpdate:value":e[6]||(e[6]=n=>i.name=n),placeholder:"输入模板名称"},null,8,["value"])]),_:1}),t(D,{label:"分类"},{default:o(()=>[t(ye,{value:i.category,"onUpdate:value":e[7]||(e[7]=n=>i.category=n),style:{width:"100%"}},{default:o(()=>[t(z,{value:"general"},{default:o(()=>[...e[25]||(e[25]=[l("general",-1)])]),_:1}),t(z,{value:"code"},{default:o(()=>[...e[26]||(e[26]=[l("code",-1)])]),_:1}),t(z,{value:"writing"},{default:o(()=>[...e[27]||(e[27]=[l("writing",-1)])]),_:1}),t(z,{value:"analysis"},{default:o(()=>[...e[28]||(e[28]=[l("analysis",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(D,{label:"模板内容",required:""},{default:o(()=>[t(xe,{value:i.content,"onUpdate:value":e[8]||(e[8]=n=>i.content=n),rows:6,placeholder:"输入 Prompt 模板内容"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","ok-button-props"])])}}},dt=ze(Qe,[["__scopeId","data-v-9cc19fb7"]]);export{dt as default};