chainlesschain 0.159.0 → 0.160.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/AIOps-BHiKMxFI.js +1 -0
- package/src/assets/web-panel/assets/AIOps-Cchx1iXI.css +1 -0
- package/src/assets/web-panel/assets/ActionButton-5QD5uzWP.js +1 -0
- package/src/assets/web-panel/assets/Analytics-C1-TXmTC.css +1 -0
- package/src/assets/web-panel/assets/Analytics-D1JxsGBN.js +3 -0
- package/src/assets/web-panel/assets/AppLayout-CtGprHSx.css +1 -0
- package/src/assets/web-panel/assets/AppLayout-DykU9tOE.js +1 -0
- package/src/assets/web-panel/assets/Audit-6ZMsXmrO.css +1 -0
- package/src/assets/web-panel/assets/Audit-TGBqld9c.js +1 -0
- package/src/assets/web-panel/assets/Backup-CY9QozR7.css +1 -0
- package/src/assets/web-panel/assets/Backup-DjpzIwA6.js +1 -0
- package/src/assets/web-panel/assets/BaseInput-joQlVauq.js +1 -0
- package/src/assets/web-panel/assets/Chat-9TYfosy-.js +2 -0
- package/src/assets/web-panel/assets/{Chat-DmX5bWvL.css → Chat-ByiYUboW.css} +1 -1
- package/src/assets/web-panel/assets/Checkbox-OEOFA9GM.js +1 -0
- package/src/assets/web-panel/assets/Codegen-5H5UgHJu.js +1 -0
- package/src/assets/web-panel/assets/Codegen-BLP7id2a.css +1 -0
- package/src/assets/web-panel/assets/Col-BnLUipDp.js +1 -0
- package/src/assets/web-panel/assets/Community-BF3R5GAl.js +1 -0
- package/src/assets/web-panel/assets/Community-C2RejeOY.css +1 -0
- package/src/assets/web-panel/assets/Compact-C1EkTFek.js +1 -0
- package/src/assets/web-panel/assets/Compliance-CpP-ODRU.js +1 -0
- package/src/assets/web-panel/assets/Compliance-DOys4Ov1.css +1 -0
- package/src/assets/web-panel/assets/{Cowork-CFkkMMDK.js → Cowork-CCgGSKVR.js} +4 -4
- package/src/assets/web-panel/assets/Cron-CZ5pjRxn.js +2 -0
- package/src/assets/web-panel/assets/Crosschain-C0P-5sm3.js +1 -0
- package/src/assets/web-panel/assets/Crosschain-C7Le4Pte.css +1 -0
- package/src/assets/web-panel/assets/DID-BX6k3jZi.css +1 -0
- package/src/assets/web-panel/assets/DID-DPZKMApP.js +2 -0
- package/src/assets/web-panel/assets/Dashboard-G-BDDAov.js +3 -0
- package/src/assets/web-panel/assets/Dashboard-MFDcsVcM.css +1 -0
- package/src/assets/web-panel/assets/Dropdown-CeywCcVQ.js +1 -0
- package/src/assets/web-panel/assets/Federation-CgmfLbx1.css +1 -0
- package/src/assets/web-panel/assets/Federation-DuFRY867.js +1 -0
- package/src/assets/web-panel/assets/{FormItemContext-Be6TSNxz.js → FormItemContext-CFSiPqbu.js} +1 -1
- package/src/assets/web-panel/assets/Git-CjVRJDLg.js +2 -0
- package/src/assets/web-panel/assets/{Git-DGcuBXST.css → Git-DPuaGtg7.css} +1 -1
- package/src/assets/web-panel/assets/Governance-BoipmXaM.css +1 -0
- package/src/assets/web-panel/assets/Governance-C0lyocJc.js +1 -0
- package/src/assets/web-panel/assets/Inference-BVSAexgk.js +1 -0
- package/src/assets/web-panel/assets/Inference-BWxYJF9-.css +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-CztPDA96.css +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-SE4jCwIn.js +1 -0
- package/src/assets/web-panel/assets/Logs-BD5C-wTx.js +2 -0
- package/src/assets/web-panel/assets/Marketplace-CL93dFBs.js +1 -0
- package/src/assets/web-panel/assets/Marketplace-Djp5q9dS.css +1 -0
- package/src/assets/web-panel/assets/McpTools-CDjHmzxH.css +1 -0
- package/src/assets/web-panel/assets/McpTools-x-Tibae-.js +5 -0
- package/src/assets/web-panel/assets/Memory-Bcc2hxOA.css +1 -0
- package/src/assets/web-panel/assets/Memory-CR8LXq37.js +2 -0
- package/src/assets/web-panel/assets/Mtc-C-PfF5B3.css +1 -0
- package/src/assets/web-panel/assets/Mtc-CEtRtMcc.js +1 -0
- package/src/assets/web-panel/assets/NLProgramming-B09F6gt2.js +1 -0
- package/src/assets/web-panel/assets/NLProgramming-CLOvy-35.css +1 -0
- package/src/assets/web-panel/assets/Notes-BYIn2GOe.js +7 -0
- package/src/assets/web-panel/assets/Organization-BX-cIO8M.css +1 -0
- package/src/assets/web-panel/assets/Organization-CybJTFN9.js +4 -0
- package/src/assets/web-panel/assets/Overflow-W4YLQ7yY.js +1 -0
- package/src/assets/web-panel/assets/{OverrideContext-GHsJf9ok.js → OverrideContext-Nubhv68k.js} +1 -1
- package/src/assets/web-panel/assets/P2P-Cx88UaiD.css +1 -0
- package/src/assets/web-panel/assets/P2P-kVj43R4j.js +2 -0
- package/src/assets/web-panel/assets/Permissions-CfYE4XFJ.js +4 -0
- package/src/assets/web-panel/assets/Pipeline-BVLo32Ak.js +1 -0
- package/src/assets/web-panel/assets/Pipeline-DxkXqrH2.css +1 -0
- package/src/assets/web-panel/assets/Privacy-CrsfSFKd.css +1 -0
- package/src/assets/web-panel/assets/Privacy-Efyb3xpJ.js +1 -0
- package/src/assets/web-panel/assets/ProjectSettings-cBqrIhNN.js +2 -0
- package/src/assets/web-panel/assets/Projects-B5IgXt-x.css +1 -0
- package/src/assets/web-panel/assets/Projects-BYY38oZd.js +2 -0
- package/src/assets/web-panel/assets/Providers-BsS27cWs.js +2 -0
- package/src/assets/web-panel/assets/QuickAsk-6FgX9DC6.js +1 -0
- package/src/assets/web-panel/assets/Recommend-BvMXwWFN.js +1 -0
- package/src/assets/web-panel/assets/Recommend-CH6wKzGo.css +1 -0
- package/src/assets/web-panel/assets/Reputation-D6VPNEd0.css +1 -0
- package/src/assets/web-panel/assets/Reputation-DmwTtBfl.js +1 -0
- package/src/assets/web-panel/assets/Row-N-X7EJ3w.js +1 -0
- package/src/assets/web-panel/assets/RssFeed-D9TjnwgF.js +3 -0
- package/src/assets/web-panel/assets/Search-B6RalzTB.css +1 -0
- package/src/assets/web-panel/assets/Search-Hapv-QkV.js +1 -0
- package/src/assets/web-panel/assets/Security-13K57V_v.css +1 -0
- package/src/assets/web-panel/assets/Security-DWbFJK10.js +4 -0
- package/src/assets/web-panel/assets/Services-BPUmhVoH.js +2 -0
- package/src/assets/web-panel/assets/Skeleton-Bo5qPHbE.js +8 -0
- package/src/assets/web-panel/assets/Skills-JJ8uInMW.js +1 -0
- package/src/assets/web-panel/assets/Sla-CEDF9zdV.js +1 -0
- package/src/assets/web-panel/assets/Sla-K19oOyQc.css +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-DYPJTDKz.css +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-oIoX_vCx.js +1 -0
- package/src/assets/web-panel/assets/Tasks-Cx5wgv5Z.js +1 -0
- package/src/assets/web-panel/assets/Templates-BWTV8-2E.css +1 -0
- package/src/assets/web-panel/assets/Templates-BomcBlkN.js +1 -0
- package/src/assets/web-panel/assets/Tenant-BxSQZUNh.js +1 -0
- package/src/assets/web-panel/assets/Tenant-D3zkSAV0.css +1 -0
- package/src/assets/web-panel/assets/Tokens-BBOdNRHQ.css +1 -0
- package/src/assets/web-panel/assets/Tokens-BlPPoB3C.js +1 -0
- package/src/assets/web-panel/assets/Trigger-Bhjmjsc5.js +1 -0
- package/src/assets/web-panel/assets/Trust-DeOo0xAh.css +1 -0
- package/src/assets/web-panel/assets/Trust-Dsjv7rkb.js +1 -0
- package/src/assets/web-panel/assets/UkeySign-Cux8_Ib_.js +1 -0
- package/src/assets/web-panel/assets/VideoEditing-BsVR1PN8.js +1 -0
- package/src/assets/web-panel/assets/VideoEditing-DksiizfS.css +1 -0
- package/src/assets/web-panel/assets/Wallet-dcRAYsdL.js +4 -0
- package/src/assets/web-panel/assets/Wallet-gR0ZvZbK.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-SSh5VhVO.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-oqIS5PCi.js +5 -0
- package/src/assets/web-panel/assets/WorkflowEditor-C_fYMBvB.js +1 -0
- package/src/assets/web-panel/assets/WorkflowEditor-IiwsD8Kh.css +1 -0
- package/src/assets/web-panel/assets/{chat-DY27mJje.js → chat-BQ-Nk2XY.js} +1 -1
- package/src/assets/web-panel/assets/{collapseMotion-CyadT_6x.js → collapseMotion-BIjDVXtT.js} +1 -1
- package/src/assets/web-panel/assets/{colors-B7fDvuJc.js → colors-D2P6CqS5.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DgthOVXi.js → compact-item-CG7qutT_.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Blw2vgkG.js → createContext-y4UPKgbA.js} +1 -1
- package/src/assets/web-panel/assets/echarts-DmBLM6YO.js +19 -0
- package/src/assets/web-panel/assets/{hasIn-BfL1HJZl.js → hasIn-Butbu9jZ.js} +1 -1
- package/src/assets/web-panel/assets/icons-DvZE-RKs.js +57 -0
- package/src/assets/web-panel/assets/index-38mVlGHc.js +1 -0
- package/src/assets/web-panel/assets/{index-x8iHfZRd.js → index-89HJLKZ-.js} +3 -3
- package/src/assets/web-panel/assets/index-B4Jfv4EB.js +1 -0
- package/src/assets/web-panel/assets/index-B5FRjJMb.js +1 -0
- package/src/assets/web-panel/assets/{index-00RNC3ZQ.js → index-B6U6cYUa.js} +8 -8
- package/src/assets/web-panel/assets/index-B7FV5EnN.js +1 -0
- package/src/assets/web-panel/assets/index-BCQ0WlB2.js +1 -0
- package/src/assets/web-panel/assets/index-BEfvpbz-.js +1 -0
- package/src/assets/web-panel/assets/index-BJN_3RTO.js +1 -0
- package/src/assets/web-panel/assets/index-BQfow_sh.js +1 -0
- package/src/assets/web-panel/assets/index-BQr8Y0o5.js +1 -0
- package/src/assets/web-panel/assets/index-BYZPJS7A.js +1 -0
- package/src/assets/web-panel/assets/index-Bs9aHxDD.js +13 -0
- package/src/assets/web-panel/assets/index-BtuwtDUE.js +1 -0
- package/src/assets/web-panel/assets/index-BvJgRWBq.js +3 -0
- package/src/assets/web-panel/assets/index-C1mK1Ga3.js +1 -0
- package/src/assets/web-panel/assets/index-C1ucrJLg.js +1 -0
- package/src/assets/web-panel/assets/index-C2K61jP8.js +55 -0
- package/src/assets/web-panel/assets/index-CAeKBs9n.js +1 -0
- package/src/assets/web-panel/assets/{index-CiN4NEAa.js → index-CWh3IxEh.js} +2 -2
- package/src/assets/web-panel/assets/{index-DyRzaN4b.js → index-CYlDKn3O.js} +3 -3
- package/src/assets/web-panel/assets/index-C_8hWf5_.js +6 -0
- package/src/assets/web-panel/assets/index-Cc77JZKd.js +1 -0
- package/src/assets/web-panel/assets/index-Ceaxjpqh.js +13 -0
- package/src/assets/web-panel/assets/index-CfX1DEtk.css +1 -0
- package/src/assets/web-panel/assets/index-Ci6jXp3l.js +7 -0
- package/src/assets/web-panel/assets/index-CyqU4Tck.js +65 -0
- package/src/assets/web-panel/assets/{index-BuEOhTAw.js → index-DLMJy9pE.js} +5 -5
- package/src/assets/web-panel/assets/index-DdgjeX4z.js +1 -0
- package/src/assets/web-panel/assets/index-DnI4Aq0q.js +3 -0
- package/src/assets/web-panel/assets/index-DrVnyYpX.js +1 -0
- package/src/assets/web-panel/assets/index-DtNHlrxp.js +1 -0
- package/src/assets/web-panel/assets/index-Dx_ZTZo_.js +1 -0
- package/src/assets/web-panel/assets/{index-BHnaIQEm.js → index-YmGOWX7h.js} +2 -2
- package/src/assets/web-panel/assets/index-gWmZm8_Q.js +21 -0
- package/src/assets/web-panel/assets/index-hSilB_Q-.js +12 -0
- package/src/assets/web-panel/assets/index-qXvwlbkq.js +3 -0
- package/src/assets/web-panel/assets/index-rIbVsjde.js +12 -0
- package/src/assets/web-panel/assets/{index-BsleJWGy.js → index-vC5cTycG.js} +2 -2
- package/src/assets/web-panel/assets/{initDefaultProps-BeWIEzBr.js → initDefaultProps-CZRZ-1bk.js} +1 -1
- package/src/assets/web-panel/assets/motion-CvU8SiWF.js +11 -0
- package/src/assets/web-panel/assets/move-ipAfWhya.js +4 -0
- package/src/assets/web-panel/assets/mtc-parser-pGMSt10g.js +1 -0
- package/src/assets/web-panel/assets/{omit-BS0H_YEP.js → omit-D6bJEjz9.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BOGgGau8.js → pickAttrs-Dpvzf7sL.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow--c5TQkDQ.js → placementArrow-D_tEolP1.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CrHOX7jp.js → responsiveObserve-BEFI7neO.js} +1 -1
- package/src/assets/web-panel/assets/slide-Bte_KOqM.js +4 -0
- package/src/assets/web-panel/assets/statusUtils-K4xaDRuO.js +1 -0
- package/src/assets/web-panel/assets/{styleChecker-CiDrXnbi.js → styleChecker-Cl9YgOVY.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-DNstl1wK.js +1 -0
- package/src/assets/web-panel/assets/useFs-BD-YRwbU.js +1 -0
- package/src/assets/web-panel/assets/{useMergedState-CLY-UHry.js → useMergedState-TP9VIF2K.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-HzOoMkZk.js → useRefs-BhIz_lC3.js} +1 -1
- package/src/assets/web-panel/assets/{useState-yWVBuz1S.js → useState-CpKsyozn.js} +1 -1
- package/src/assets/web-panel/assets/vendor-B6ToihkA.js +1 -0
- package/src/assets/web-panel/assets/vnode-ChB-8cXr.js +1 -0
- package/src/assets/web-panel/assets/{ws-4ur1fGsk.js → ws-D_5-FRIb.js} +1 -1
- package/src/assets/web-panel/assets/zoom-meTNBulL.js +4 -0
- package/src/assets/web-panel/index.html +4 -4
- package/src/commands/audit.js +296 -0
- package/src/commands/init.js +16 -1
- package/src/commands/mtc.js +1401 -86
- package/src/lib/audit-mtc.js +504 -0
- package/src/assets/web-panel/assets/AIOps-Bfzpnnlg.css +0 -1
- package/src/assets/web-panel/assets/AIOps-ztGJppiG.js +0 -1
- package/src/assets/web-panel/assets/ActionButton-DCuat-R-.js +0 -1
- package/src/assets/web-panel/assets/Analytics-BFI7jbwM.css +0 -1
- package/src/assets/web-panel/assets/Analytics-m_EtU-RR.js +0 -3
- package/src/assets/web-panel/assets/AppLayout-8HizVjee.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-Crz8jbEC.js +0 -1
- package/src/assets/web-panel/assets/Audit-CNLWjMXN.js +0 -1
- package/src/assets/web-panel/assets/Audit-kU7vbN-D.css +0 -1
- package/src/assets/web-panel/assets/Backup-CggaSq9O.js +0 -1
- package/src/assets/web-panel/assets/Backup-DxLiJzmk.css +0 -1
- package/src/assets/web-panel/assets/BaseInput-BssiYvl6.js +0 -1
- package/src/assets/web-panel/assets/Chat-tuVfpQUO.js +0 -2
- package/src/assets/web-panel/assets/Checkbox-BUUkXdQg.js +0 -1
- package/src/assets/web-panel/assets/Codegen-AVAcL7NA.css +0 -1
- package/src/assets/web-panel/assets/Codegen-CHu-7YGr.js +0 -1
- package/src/assets/web-panel/assets/Col-2IaMFwmX.js +0 -1
- package/src/assets/web-panel/assets/Community-CYL7Fvjq.js +0 -1
- package/src/assets/web-panel/assets/Community-DqDfLQui.css +0 -1
- package/src/assets/web-panel/assets/Compact-5yRVELhA.js +0 -1
- package/src/assets/web-panel/assets/Compliance-CKuIDJHK.js +0 -1
- package/src/assets/web-panel/assets/Compliance-CKxw6vIq.css +0 -1
- package/src/assets/web-panel/assets/Cron-DIfkI7vf.js +0 -2
- package/src/assets/web-panel/assets/Crosschain-BkjY-lst.js +0 -1
- package/src/assets/web-panel/assets/Crosschain-DThGgQk8.css +0 -1
- package/src/assets/web-panel/assets/DID-BDvsVa08.css +0 -1
- package/src/assets/web-panel/assets/DID-ChzRkgNy.js +0 -2
- package/src/assets/web-panel/assets/Dashboard-Cviwdc26.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-DKrbXVNn.js +0 -3
- package/src/assets/web-panel/assets/Dropdown-BYGoxH1z.js +0 -1
- package/src/assets/web-panel/assets/Federation-B8QX-IaA.js +0 -1
- package/src/assets/web-panel/assets/Federation-BftELHDw.css +0 -1
- package/src/assets/web-panel/assets/Git-BBnGgbBR.js +0 -2
- package/src/assets/web-panel/assets/Governance-BfmfQBGB.css +0 -1
- package/src/assets/web-panel/assets/Governance-CxUHZMsp.js +0 -1
- package/src/assets/web-panel/assets/Inference-BlnOG71q.js +0 -1
- package/src/assets/web-panel/assets/Inference-EFFc7eNZ.css +0 -1
- package/src/assets/web-panel/assets/Keyframes-C7fCrnlS.js +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-U8ps3aGJ.css +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-vkVq38kC.js +0 -19
- package/src/assets/web-panel/assets/Logs-Bxx7WARH.js +0 -2
- package/src/assets/web-panel/assets/Marketplace-B-4uYu_j.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-Bh8ExT9_.js +0 -1
- package/src/assets/web-panel/assets/McpTools-CTQrNVAQ.css +0 -1
- package/src/assets/web-panel/assets/McpTools-Djj_a3ko.js +0 -5
- package/src/assets/web-panel/assets/Memory-DRghrGJr.css +0 -1
- package/src/assets/web-panel/assets/Memory-DlgNgAov.js +0 -2
- package/src/assets/web-panel/assets/NLProgramming-BN3jaoen.js +0 -1
- package/src/assets/web-panel/assets/NLProgramming-jURs-f-a.css +0 -1
- package/src/assets/web-panel/assets/Notes-De7mIkkV.js +0 -7
- package/src/assets/web-panel/assets/Organization-B-98mdK2.js +0 -4
- package/src/assets/web-panel/assets/Organization-DdOOM4ic.css +0 -1
- package/src/assets/web-panel/assets/Overflow-G0I8IlY3.js +0 -1
- package/src/assets/web-panel/assets/P2P-DIUgHZ1z.js +0 -2
- package/src/assets/web-panel/assets/P2P-OEzOeMZX.css +0 -1
- package/src/assets/web-panel/assets/Permissions-B8XycCVk.js +0 -4
- package/src/assets/web-panel/assets/Pipeline-DyqCLFVr.css +0 -1
- package/src/assets/web-panel/assets/Pipeline-cUpETlXS.js +0 -1
- package/src/assets/web-panel/assets/Portal-SsPhn64D.js +0 -1
- package/src/assets/web-panel/assets/Privacy-B6J89UBw.js +0 -1
- package/src/assets/web-panel/assets/Privacy-B_cAicd1.css +0 -1
- package/src/assets/web-panel/assets/ProjectSettings-2Ftw0zt_.js +0 -2
- package/src/assets/web-panel/assets/Projects-CcOdFpgr.js +0 -2
- package/src/assets/web-panel/assets/Projects-DxKelI5h.css +0 -1
- package/src/assets/web-panel/assets/Providers-D0r2qSf-.js +0 -2
- package/src/assets/web-panel/assets/QuickAsk-CwsPpfkq.js +0 -1
- package/src/assets/web-panel/assets/Recommend-BYEDetJm.js +0 -1
- package/src/assets/web-panel/assets/Recommend-DgNSCgRX.css +0 -1
- package/src/assets/web-panel/assets/Reputation-Bli4hBGH.js +0 -1
- package/src/assets/web-panel/assets/Reputation-y-46ThW8.css +0 -1
- package/src/assets/web-panel/assets/Row-DTW9_BYi.js +0 -1
- package/src/assets/web-panel/assets/RssFeed-kwj_himl.js +0 -3
- package/src/assets/web-panel/assets/Search-BTk9rglb.css +0 -1
- package/src/assets/web-panel/assets/Search-DymcqASO.js +0 -1
- package/src/assets/web-panel/assets/Security-Bh3yvyNN.js +0 -4
- package/src/assets/web-panel/assets/Security-Dwxw7rfP.css +0 -1
- package/src/assets/web-panel/assets/Services-O4UZaYur.js +0 -2
- package/src/assets/web-panel/assets/Skeleton-B82oQZTz.js +0 -8
- package/src/assets/web-panel/assets/Skills-BfkrC05g.js +0 -1
- package/src/assets/web-panel/assets/Sla-C1WYuQKf.css +0 -1
- package/src/assets/web-panel/assets/Sla-DEs5XCIf.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-BWMhb10j.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-CiKvsIyV.css +0 -1
- package/src/assets/web-panel/assets/Tasks-CIBUb9M1.js +0 -1
- package/src/assets/web-panel/assets/Templates-DAkzr0xS.css +0 -1
- package/src/assets/web-panel/assets/Templates-iqSuJY-O.js +0 -1
- package/src/assets/web-panel/assets/Tenant-BJr-h-_0.css +0 -1
- package/src/assets/web-panel/assets/Tenant-CLqZjkVq.js +0 -1
- package/src/assets/web-panel/assets/Tokens-Bwz8aQtK.js +0 -1
- package/src/assets/web-panel/assets/Tokens-KvJRHQcl.css +0 -1
- package/src/assets/web-panel/assets/Trigger-CxnChVoS.js +0 -1
- package/src/assets/web-panel/assets/Trust-BLI308Ik.css +0 -1
- package/src/assets/web-panel/assets/Trust-Bp23lyZl.js +0 -1
- package/src/assets/web-panel/assets/UkeySign-_VAMquoh.js +0 -1
- package/src/assets/web-panel/assets/VideoEditing-BA1N-5kq.css +0 -1
- package/src/assets/web-panel/assets/VideoEditing-Bxqwg4zW.js +0 -1
- package/src/assets/web-panel/assets/Wallet-Cvht6Yrh.js +0 -4
- package/src/assets/web-panel/assets/Wallet-DnIumafl.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-CNPl2VQR.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-DD4EomJu.js +0 -5
- package/src/assets/web-panel/assets/WorkflowEditor-CEKNTS5G.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-CJy5e0fl.js +0 -1
- package/src/assets/web-panel/assets/_plugin-vue_export-helper-DlAUqK2U.js +0 -1
- package/src/assets/web-panel/assets/icons-CJACPYXu.js +0 -57
- package/src/assets/web-panel/assets/index-B9B9Zbf3.js +0 -1
- package/src/assets/web-panel/assets/index-BAsMNMbh.js +0 -1
- package/src/assets/web-panel/assets/index-BB5y5Y0z.js +0 -14
- package/src/assets/web-panel/assets/index-BVjDIZQ4.js +0 -1
- package/src/assets/web-panel/assets/index-BZeRnzuY.js +0 -55
- package/src/assets/web-panel/assets/index-BZfoAtZC.js +0 -1
- package/src/assets/web-panel/assets/index-Bl2nXm2J.js +0 -13
- package/src/assets/web-panel/assets/index-Bw1dwHWm.js +0 -1
- package/src/assets/web-panel/assets/index-Bw_UV2ez.js +0 -13
- package/src/assets/web-panel/assets/index-C8GYpC65.js +0 -1
- package/src/assets/web-panel/assets/index-CBHlKa-J.js +0 -3
- package/src/assets/web-panel/assets/index-CL-7KCFI.js +0 -3
- package/src/assets/web-panel/assets/index-CqjUUbil.js +0 -12
- package/src/assets/web-panel/assets/index-Cqtt1N0F.js +0 -1
- package/src/assets/web-panel/assets/index-CyGyEIVX.css +0 -1
- package/src/assets/web-panel/assets/index-D1QP9Ue1.js +0 -1
- package/src/assets/web-panel/assets/index-D6BUjL6I.js +0 -1
- package/src/assets/web-panel/assets/index-DN7ywgBJ.js +0 -1
- package/src/assets/web-panel/assets/index-DasW8LIs.js +0 -1
- package/src/assets/web-panel/assets/index-Dd9McFt_.js +0 -1
- package/src/assets/web-panel/assets/index-DdzLEdL6.js +0 -7
- package/src/assets/web-panel/assets/index-DhML6F3z.js +0 -1
- package/src/assets/web-panel/assets/index-DjN0nHiV.js +0 -1
- package/src/assets/web-panel/assets/index-DjhWpiZW.js +0 -1
- package/src/assets/web-panel/assets/index-DouFuKIR.js +0 -1
- package/src/assets/web-panel/assets/index-DzWwjWYN.js +0 -21
- package/src/assets/web-panel/assets/index-Dza_w3kG.js +0 -1
- package/src/assets/web-panel/assets/index-Q4qgOtOe.js +0 -12
- package/src/assets/web-panel/assets/index-U4Zd5IK6.js +0 -8
- package/src/assets/web-panel/assets/index-Vit9TJBu.js +0 -36
- package/src/assets/web-panel/assets/index-lkJllVbJ.js +0 -6
- package/src/assets/web-panel/assets/index-uMWaXVtR.js +0 -3
- package/src/assets/web-panel/assets/index-uwh_ikIt.js +0 -1
- package/src/assets/web-panel/assets/motion-CIQOKmi6.js +0 -11
- package/src/assets/web-panel/assets/move-ZgRPlBji.js +0 -4
- package/src/assets/web-panel/assets/slide-Dd2mJUD0.js +0 -4
- package/src/assets/web-panel/assets/statusUtils-5QFvAofV.js +0 -1
- package/src/assets/web-panel/assets/transition-CVd2ueaJ.js +0 -1
- package/src/assets/web-panel/assets/useConfigInject-DIkkDpt1.js +0 -2
- package/src/assets/web-panel/assets/useFlexGapSupport-rrtj6f1h.js +0 -1
- package/src/assets/web-panel/assets/useFs-CK8VYPus.js +0 -1
- package/src/assets/web-panel/assets/vendor-D0Qjn73K.js +0 -1
- package/src/assets/web-panel/assets/vnode-xRp-KMjS.js +0 -1
- package/src/assets/web-panel/assets/zoom-CrI_kdTW.js +0 -4
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as z,w as $e,l as He,m,x as t,q as d,B as Qe,C as Xe,v as r,c as e,D as a,E as K,u as n,F as u,G as O,H as w,I as b,J as i,K as Ze,L as he,j as g}from"./vendor-D0Qjn73K.js";import{u as et}from"./ws-4ur1fGsk.js";import{u as tt,T as ot}from"./index-Vit9TJBu.js";import{u as nt}from"./useShellMode-CgR0wCYM.js";import{_ as st}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as C,G as F,D as j,M as J,a as x,R as Y,C as L,A as $,N as H,b as Q,c as X,d as Z,e as h,S as ee,B as te,f as E,h as oe,i as ne,j as se,k as ie,l as le,m as ae,n as re,P as de,o as R,K as B,p as N,q as ue,I as pe,L as ke,W as ye,r as D,s as me,t as ce,E as I,u as fe,v as ge,w as _e,x as ve,y as Oe,z as be,H as we,U as Ce,J as Se,O as Ae,Q as Te,V as it,X as Ke,Y as lt,Z as at}from"./icons-CJACPYXu.js";import rt from"./index-x8iHfZRd.js";import{a as S}from"./index-BB5y5Y0z.js";import"./useConfigInject-DIkkDpt1.js";import"./KeyCode-D63Tfrq7.js";import"./omit-BS0H_YEP.js";import"./pickAttrs-BOGgGau8.js";import"./initDefaultProps-BeWIEzBr.js";import"./transition-CVd2ueaJ.js";import"./index-U4Zd5IK6.js";import"./motion-CIQOKmi6.js";import"./Portal-SsPhn64D.js";import"./raf-Deuc0E8-.js";import"./index-DhML6F3z.js";import"./index-Dd9McFt_.js";import"./isVisible-C7tPsqfj.js";import"./useState-yWVBuz1S.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-DgthOVXi.js";import"./createContext-Blw2vgkG.js";import"./Compact-5yRVELhA.js";import"./_getTag-CWA3v-Ds.js";import"./styleChecker-CiDrXnbi.js";import"./Keyframes-C7fCrnlS.js";import"./zoom-CrI_kdTW.js";import"./ActionButton-DCuat-R-.js";import"./vnode-xRp-KMjS.js";const dt=""+new URL("logo-DBCYUiWP.png",import.meta.url).href,ut=["src"],pt={key:0,class:"logo-text"},kt={key:0,class:"mode-banner project"},yt={class:"banner-info"},mt={class:"banner-name"},ct={key:1,class:"mode-banner global"},ft=["title"],gt={key:0,class:"footer-text"},_t={class:"header-left"},vt={class:"header-right"},Ot={class:"theme-switcher"},bt=["data-theme-key","onClick"],wt={class:"version-tag"},je="cc.web-panel.sidebar.openKeys",Ct={__name:"AppLayout",setup(St){const xe=Qe(),Le=Xe(),_=et(),P=tt(),U=nt(),p=z(!1),v=window.__CC_CONFIG__||{},c=g(()=>v.mode==="project"),Ee="v5.0.3.1",Re=g(()=>P.current),Be=g(()=>P.config.vars["--menu-mode"]),G=g(()=>{const l=Le.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp",quickask:"quick-ask",ukeysign:"ukey-sign"}[l]||l]}),W=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function Ne(){try{const l=localStorage.getItem(je);if(l){const o=JSON.parse(l);if(Array.isArray(o))return o.filter(s=>W.includes(s))}}catch{}return[...W]}const M=z(Ne());$e(M,l=>{try{localStorage.setItem(je,JSON.stringify(l))}catch{}},{deep:!0});const A=g(()=>_.status),De=g(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[_.status]||"default"),Ie=g(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[_.status]||"未知");function Pe(l){P.setTheme(l)}async function Ue(l){try{const o=await _.sendRaw({type:"window.open",role:l},1e4);if(o?.ok===!1){S.error(`打开失败:${o.error||"未知"}`);return}const s=o?.result??o;s?.reason==="role_reserved"?S.warning("该窗口角色被保留"):s?.reason}catch(o){S.error(`打开桌面窗口失败:${o.message||o}`)}}async function Me(){rt.confirm({title:"切换到桌面壳?",content:"回到 V5/V6 桌面壳。完整 electronAPI 表面(UKey 硬件 / 原生对话框 / 系统设置等)会重新可用,但失去 web-panel 的 SPA 体验。保存后需要重启应用才生效。",okText:"切换并重启",cancelText:"取消",centered:!0,async onOk(){try{const l=await _.sendRaw({type:"shell.switch",target:"desktop"},5e3);if(l?.ok===!1)throw new Error(l.error||"shell.switch returned failure");S.loading({content:"正在重启…",duration:0})}catch(l){const o=l instanceof Error?l.message:String(l);S.error("切换失败:"+o)}}})}function Ve({key:l}){if(typeof l=="string"&&l.startsWith("desktop:")){Ue(l);return}xe.push({mcp:"/mcp"}[l]||`/${l}`)}return He(()=>_.connect()),(l,o)=>{const s=d("a-menu-item"),k=d("a-sub-menu"),f=d("a-menu-divider"),Fe=d("a-menu"),Ge=d("a-badge"),We=d("a-layout-sider"),V=d("a-tooltip"),qe=d("a-tag"),ze=d("a-layout-header"),Je=d("router-view"),Ye=d("a-layout-content"),q=d("a-layout");return r(),m(q,{class:"app-root"},{default:t(()=>[e(We,{collapsed:p.value,"onUpdate:collapsed":o[2]||(o[2]=y=>p.value=y),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:K(["logo",{collapsed:p.value}])},[a("img",{src:n(dt),alt:"ChainlessChain",class:"logo-icon"},null,8,ut),p.value?O("",!0):(r(),u("span",pt,"ChainlessChain"))],2),p.value?(r(),u("div",{key:1,class:"mode-icon-sm",title:c.value?n(v).projectName:"全局模式"},[c.value?(r(),m(n(C),{key:0,style:{color:"#1677ff"}})):(r(),m(n(F),{key:1,style:{color:"#722ed1"}}))],8,ft)):(r(),u(w,{key:0},[c.value?(r(),u("div",kt,[e(n(C),{class:"banner-icon"}),a("div",yt,[a("div",mt,b(n(v).projectName||"项目"),1),o[3]||(o[3]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(r(),u("div",ct,[e(n(F),{class:"banner-icon"}),o[4]||(o[4]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(Fe,{selectedKeys:G.value,"onUpdate:selectedKeys":o[0]||(o[0]=y=>G.value=y),openKeys:M.value,"onUpdate:openKeys":o[1]||(o[1]=y=>M.value=y),theme:Be.value,mode:"inline","inline-collapsed":p.value,class:"side-menu",onClick:Ve},{default:t(()=>[p.value?(r(),u(w,{key:1},[e(s,{key:"dashboard"},{icon:t(()=>[e(n(j))]),_:1}),e(s,{key:"chat"},{icon:t(()=>[e(n(J))]),_:1}),e(s,{key:"quick-ask"},{icon:t(()=>[e(n(x))]),_:1}),e(s,{key:"cowork"},{icon:t(()=>[e(n(Y))]),_:1}),e(s,{key:"services"},{icon:t(()=>[e(n(L))]),_:1}),e(s,{key:"aiops"},{icon:t(()=>[e(n($))]),_:1}),e(s,{key:"tokens"},{icon:t(()=>[e(n(H))]),_:1}),e(s,{key:"logs"},{icon:t(()=>[e(n(Q))]),_:1}),e(f,{class:"divider-sm"}),e(s,{key:"skills"},{icon:t(()=>[e(n(X))]),_:1}),e(s,{key:"providers"},{icon:t(()=>[e(n(Z))]),_:1}),e(s,{key:"mcp"},{icon:t(()=>[e(n(h))]),_:1}),e(s,{key:"project-settings"},{icon:t(()=>[e(n(C))]),_:1}),e(s,{key:"speech-settings"},{icon:t(()=>[e(n(ee))]),_:1}),e(s,{key:"nlprog"},{icon:t(()=>[e(n(te))]),_:1}),e(s,{key:"codegen"},{icon:t(()=>[e(n(E))]),_:1}),e(f,{class:"divider-sm"}),e(s,{key:"notes"},{icon:t(()=>[e(n(oe))]),_:1}),e(s,{key:"search"},{icon:t(()=>[e(n(ne))]),_:1}),e(s,{key:"memory"},{icon:t(()=>[e(n(se))]),_:1}),e(s,{key:"knowledge"},{icon:t(()=>[e(n(ie))]),_:1}),e(s,{key:"marketplace"},{icon:t(()=>[e(n(le))]),_:1}),e(s,{key:"cron"},{icon:t(()=>[e(n(ae))]),_:1}),e(s,{key:"workflow"},{icon:t(()=>[e(n(re))]),_:1}),e(s,{key:"pipeline"},{icon:t(()=>[e(n(de))]),_:1}),e(s,{key:"tasks"},{icon:t(()=>[e(n(x))]),_:1}),e(f,{class:"divider-sm"}),e(s,{key:"security"},{icon:t(()=>[e(n(R))]),_:1}),e(s,{key:"ukey-sign"},{icon:t(()=>[e(n(B))]),_:1}),e(s,{key:"trust"},{icon:t(()=>[e(n(N))]),_:1}),e(s,{key:"audit"},{icon:t(()=>[e(n(ue))]),_:1}),e(s,{key:"did"},{icon:t(()=>[e(n(pe))]),_:1}),e(s,{key:"permissions"},{icon:t(()=>[e(n(ke))]),_:1}),e(s,{key:"p2p"},{icon:t(()=>[e(n(ye))]),_:1}),e(s,{key:"backup"},{icon:t(()=>[e(n(D))]),_:1}),e(s,{key:"git"},{icon:t(()=>[e(n(E))]),_:1}),e(s,{key:"projects"},{icon:t(()=>[e(n(me))]),_:1}),e(s,{key:"crosschain"},{icon:t(()=>[e(n(ce))]),_:1}),e(s,{key:"compliance"},{icon:t(()=>[e(n(N))]),_:1}),e(s,{key:"privacy"},{icon:t(()=>[e(n(I))]),_:1}),e(s,{key:"inference"},{icon:t(()=>[e(n(fe))]),_:1}),e(s,{key:"federation"},{icon:t(()=>[e(n(ge))]),_:1}),e(f,{class:"divider-sm"}),e(s,{key:"wallet"},{icon:t(()=>[e(n(_e))]),_:1}),e(s,{key:"organization"},{icon:t(()=>[e(n(ve))]),_:1}),e(s,{key:"tenant"},{icon:t(()=>[e(n(Oe))]),_:1}),e(s,{key:"sla"},{icon:t(()=>[e(n(j))]),_:1}),e(s,{key:"analytics"},{icon:t(()=>[e(n(be))]),_:1}),e(s,{key:"templates"},{icon:t(()=>[e(n(we))]),_:1}),e(f,{class:"divider-sm"}),e(s,{key:"community"},{icon:t(()=>[e(n(Ce))]),_:1}),e(s,{key:"governance"},{icon:t(()=>[e(n(Se))]),_:1}),e(s,{key:"reputation"},{icon:t(()=>[e(n(Ae))]),_:1}),e(s,{key:"recommend"},{icon:t(()=>[e(n(Te))]),_:1}),e(f,{class:"divider-sm"}),e(s,{key:"rssfeed"},{icon:t(()=>[e(n(Ke))]),_:1}),e(s,{key:"webauthn"},{icon:t(()=>[e(n(B))]),_:1}),n(U).isEmbedded?(r(),u(w,{key:0},[e(f,{class:"divider-sm"}),e(s,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n(R))]),_:1}),e(s,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n(D))]),_:1}),e(s,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n(I))]),_:1}),e(s,{key:"desktop:settings"},{icon:t(()=>[e(n(L))]),_:1})],64)):O("",!0)],64)):(r(),u(w,{key:0},[e(k,{key:"g-overview"},{title:t(()=>[...o[5]||(o[5]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(s,{key:"dashboard"},{icon:t(()=>[e(n(j))]),default:t(()=>[o[6]||(o[6]=i("仪表板",-1))]),_:1}),e(s,{key:"chat"},{icon:t(()=>[e(n(J))]),default:t(()=>[o[7]||(o[7]=i("AI 对话",-1))]),_:1}),e(s,{key:"quick-ask"},{icon:t(()=>[e(n(x))]),default:t(()=>[o[8]||(o[8]=i("Quick Ask",-1))]),_:1}),e(s,{key:"cowork"},{icon:t(()=>[e(n(Y))]),default:t(()=>[o[9]||(o[9]=i("日常协作",-1))]),_:1}),e(s,{key:"services"},{icon:t(()=>[e(n(L))]),default:t(()=>[o[10]||(o[10]=i("服务管理",-1))]),_:1}),e(s,{key:"aiops"},{icon:t(()=>[e(n($))]),default:t(()=>[o[11]||(o[11]=i("AIOps",-1))]),_:1}),e(s,{key:"tokens"},{icon:t(()=>[e(n(H))]),default:t(()=>[o[12]||(o[12]=i("Token 用量",-1))]),_:1}),e(s,{key:"logs"},{icon:t(()=>[e(n(Q))]),default:t(()=>[o[13]||(o[13]=i("日志查看",-1))]),_:1})]),_:1}),e(k,{key:"g-config"},{title:t(()=>[...o[14]||(o[14]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(s,{key:"skills"},{icon:t(()=>[e(n(X))]),default:t(()=>[o[15]||(o[15]=i("技能管理",-1))]),_:1}),e(s,{key:"providers"},{icon:t(()=>[e(n(Z))]),default:t(()=>[o[16]||(o[16]=i("LLM 配置",-1))]),_:1}),e(s,{key:"mcp"},{icon:t(()=>[e(n(h))]),default:t(()=>[o[17]||(o[17]=i("MCP 工具",-1))]),_:1}),e(s,{key:"project-settings"},{icon:t(()=>[e(n(C))]),default:t(()=>[o[18]||(o[18]=i("项目存储",-1))]),_:1}),e(s,{key:"speech-settings"},{icon:t(()=>[e(n(ee))]),default:t(()=>[o[19]||(o[19]=i("语音识别",-1))]),_:1}),e(s,{key:"nlprog"},{icon:t(()=>[e(n(te))]),default:t(()=>[o[20]||(o[20]=i("自然语言编程",-1))]),_:1}),e(s,{key:"codegen"},{icon:t(()=>[e(n(E))]),default:t(()=>[o[21]||(o[21]=i("代码生成",-1))]),_:1})]),_:1}),e(k,{key:"g-data"},{title:t(()=>[...o[22]||(o[22]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(s,{key:"notes"},{icon:t(()=>[e(n(oe))]),default:t(()=>[o[23]||(o[23]=i("笔记管理",-1))]),_:1}),e(s,{key:"search"},{icon:t(()=>[e(n(ne))]),default:t(()=>[o[24]||(o[24]=i("RAG 搜索",-1))]),_:1}),e(s,{key:"memory"},{icon:t(()=>[e(n(se))]),default:t(()=>[o[25]||(o[25]=i("记忆文件",-1))]),_:1}),e(s,{key:"knowledge"},{icon:t(()=>[e(n(ie))]),default:t(()=>[o[26]||(o[26]=i("知识图谱",-1))]),_:1}),e(s,{key:"marketplace"},{icon:t(()=>[e(n(le))]),default:t(()=>[o[27]||(o[27]=i("技能市场",-1))]),_:1}),e(s,{key:"cron"},{icon:t(()=>[e(n(ae))]),default:t(()=>[o[28]||(o[28]=i("定时任务",-1))]),_:1}),e(s,{key:"workflow"},{icon:t(()=>[e(n(re))]),default:t(()=>[o[29]||(o[29]=i("工作流编辑",-1))]),_:1}),e(s,{key:"pipeline"},{icon:t(()=>[e(n(de))]),default:t(()=>[o[30]||(o[30]=i("开发流水线",-1))]),_:1}),e(s,{key:"tasks"},{icon:t(()=>[e(n(x))]),default:t(()=>[o[31]||(o[31]=i("后台任务",-1))]),_:1})]),_:1}),e(k,{key:"g-advanced"},{title:t(()=>[...o[32]||(o[32]=[a("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(s,{key:"security"},{icon:t(()=>[e(n(R))]),default:t(()=>[o[33]||(o[33]=i("安全中心",-1))]),_:1}),e(s,{key:"ukey-sign"},{icon:t(()=>[e(n(B))]),default:t(()=>[o[34]||(o[34]=i("U-Key 签名",-1))]),_:1}),e(s,{key:"trust"},{icon:t(()=>[e(n(N))]),default:t(()=>[o[35]||(o[35]=i("信任与安全",-1))]),_:1}),e(s,{key:"audit"},{icon:t(()=>[e(n(ue))]),default:t(()=>[o[36]||(o[36]=i("审计日志",-1))]),_:1}),e(s,{key:"did"},{icon:t(()=>[e(n(pe))]),default:t(()=>[o[37]||(o[37]=i("DID 身份",-1))]),_:1}),e(s,{key:"permissions"},{icon:t(()=>[e(n(ke))]),default:t(()=>[o[38]||(o[38]=i("权限管理",-1))]),_:1}),e(s,{key:"p2p"},{icon:t(()=>[e(n(ye))]),default:t(()=>[o[39]||(o[39]=i("P2P 网络",-1))]),_:1}),e(s,{key:"backup"},{icon:t(()=>[e(n(D))]),default:t(()=>[o[40]||(o[40]=i("备份同步",-1))]),_:1}),e(s,{key:"git"},{icon:t(()=>[e(n(E))]),default:t(()=>[o[41]||(o[41]=i("Git 与数据",-1))]),_:1}),e(s,{key:"projects"},{icon:t(()=>[e(n(me))]),default:t(()=>[o[42]||(o[42]=i("项目管理",-1))]),_:1}),e(s,{key:"crosschain"},{icon:t(()=>[e(n(ce))]),default:t(()=>[o[43]||(o[43]=i("跨链桥",-1))]),_:1}),e(s,{key:"compliance"},{icon:t(()=>[e(n(N))]),default:t(()=>[o[44]||(o[44]=i("合规与情报",-1))]),_:1}),e(s,{key:"privacy"},{icon:t(()=>[e(n(I))]),default:t(()=>[o[45]||(o[45]=i("隐私计算",-1))]),_:1}),e(s,{key:"inference"},{icon:t(()=>[e(n(fe))]),default:t(()=>[o[46]||(o[46]=i("推理网络",-1))]),_:1}),e(s,{key:"federation"},{icon:t(()=>[e(n(ge))]),default:t(()=>[o[47]||(o[47]=i("联邦强化",-1))]),_:1})]),_:1}),e(k,{key:"g-enterprise"},{title:t(()=>[...o[48]||(o[48]=[a("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(s,{key:"wallet"},{icon:t(()=>[e(n(_e))]),default:t(()=>[o[49]||(o[49]=i("钱包管理",-1))]),_:1}),e(s,{key:"organization"},{icon:t(()=>[e(n(ve))]),default:t(()=>[o[50]||(o[50]=i("组织管理",-1))]),_:1}),e(s,{key:"tenant"},{icon:t(()=>[e(n(Oe))]),default:t(()=>[o[51]||(o[51]=i("多租户 SaaS",-1))]),_:1}),e(s,{key:"sla"},{icon:t(()=>[e(n(j))]),default:t(()=>[o[52]||(o[52]=i("SLA 管理",-1))]),_:1}),e(s,{key:"analytics"},{icon:t(()=>[e(n(be))]),default:t(()=>[o[53]||(o[53]=i("使用分析",-1))]),_:1}),e(s,{key:"templates"},{icon:t(()=>[e(n(we))]),default:t(()=>[o[54]||(o[54]=i("模板中心",-1))]),_:1})]),_:1}),e(k,{key:"g-social"},{title:t(()=>[...o[55]||(o[55]=[a("span",{class:"group-label"},"社 交",-1)])]),default:t(()=>[e(s,{key:"community"},{icon:t(()=>[e(n(Ce))]),default:t(()=>[o[56]||(o[56]=i("社区",-1))]),_:1}),e(s,{key:"governance"},{icon:t(()=>[e(n(Se))]),default:t(()=>[o[57]||(o[57]=i("社区治理",-1))]),_:1}),e(s,{key:"reputation"},{icon:t(()=>[e(n(Ae))]),default:t(()=>[o[58]||(o[58]=i("声誉优化",-1))]),_:1}),e(s,{key:"recommend"},{icon:t(()=>[e(n(Te))]),default:t(()=>[o[59]||(o[59]=i("智能推荐",-1))]),_:1})]),_:1}),e(k,{key:"g-media"},{title:t(()=>[...o[60]||(o[60]=[a("span",{class:"group-label"},"媒 体",-1)])]),default:t(()=>[e(s,{key:"video"},{icon:t(()=>[e(n(it))]),default:t(()=>[o[61]||(o[61]=i("视频剪辑",-1))]),_:1})]),_:1}),e(k,{key:"g-extension"},{title:t(()=>[...o[62]||(o[62]=[a("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(s,{key:"rssfeed"},{icon:t(()=>[e(n(Ke))]),default:t(()=>[o[63]||(o[63]=i("RSS 订阅",-1))]),_:1}),e(s,{key:"webauthn"},{icon:t(()=>[e(n(B))]),default:t(()=>[o[64]||(o[64]=i("身份认证",-1))]),_:1})]),_:1}),n(U).isEmbedded?(r(),m(k,{key:"g-desktop"},{title:t(()=>[...o[65]||(o[65]=[a("span",{class:"group-label"},"桌面专属",-1)])]),default:t(()=>[e(s,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n(R))]),default:t(()=>[o[66]||(o[66]=i("硬件钱包",-1))]),_:1}),e(s,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n(D))]),default:t(()=>[o[67]||(o[67]=i("备份与恢复",-1))]),_:1}),e(s,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n(I))]),default:t(()=>[o[68]||(o[68]=i("LLM 测试",-1))]),_:1}),e(s,{key:"desktop:settings"},{icon:t(()=>[e(n(L))]),default:t(()=>[o[69]||(o[69]=i("系统设置",-1))]),_:1})]),_:1})):O("",!0)],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),a("div",{class:K(["sidebar-footer",{collapsed:p.value}])},[e(Ge,{status:De.value},null,8,["status"]),p.value?O("",!0):(r(),u("span",gt,b(Ie.value),1))],2)]),_:1},8,["collapsed"]),e(q,{class:"main-area"},{default:t(()=>[e(ze,{class:"app-header"},{default:t(()=>[a("div",_t,[a("div",{class:K(["scope-tag",c.value?"project":"global"])},[(r(),m(Ze(c.value?n(C):n(F)))),a("span",null,b(c.value?n(v).projectName||"项目":"全局模式"),1),c.value&&n(v).projectRoot?(r(),m(V,{key:0,title:n(v).projectRoot},{default:t(()=>[e(n(lt),{class:"info-icon"})]),_:1},8,["title"])):O("",!0)],2)]),a("div",vt,[a("div",Ot,[(r(!0),u(w,null,he(n(ot),(y,T)=>(r(),m(V,{key:T,title:y.label},{default:t(()=>[a("button",{class:K(["theme-btn",{active:Re.value===T}]),"data-theme-key":T,onClick:At=>Pe(T)},b(y.icon),11,bt)]),_:2},1032,["title"]))),128))]),a("span",wt,b(n(Ee)),1),n(U).isEmbedded?(r(),m(V,{key:0,title:"切换到桌面壳(保存后重启生效)"},{default:t(()=>[a("button",{type:"button",class:"shell-switch-btn",onClick:Me},[e(n(at))])]),_:1})):O("",!0),e(qe,{color:A.value==="connected"?"green":A.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[i(b(A.value==="connected"?"已连接":A.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(Ye,{class:"page-content"},{default:t(()=>[e(Je)]),_:1})]),_:1})]),_:1})}}},io=st(Ct,[["__scopeId","data-v-54c0cd71"]]);export{io as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as Ae}from"./ws-4ur1fGsk.js";import{u as Ce}from"./useFs-CK8VYPus.js";import{s as ie}from"./community-parser-CO25nZFt.js";import{_ as Oe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as E}from"./index-BB5y5Y0z.js";import{_ as De,aj as Re,q as se,ab as Ne,aa as we,A as Ee,a9 as je}from"./icons-CJACPYXu.js";import{l as Fe,F as d,D as _,c as t,x as e,m as L,G as b,q as v,r as S,v as r,J as y,u as g,H as C,L as j,N as Ie,I as i,j as G}from"./vendor-D0Qjn73K.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";function ue(s){const n=ie(s);if(!n)return null;try{return JSON.parse(n)}catch{}const u=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!u)return null;try{return JSON.parse(u[0])}catch{return null}}const B=Object.freeze(["auth","permission","data","system","file","did","crypto","api"]),Y=Object.freeze(["low","medium","high","critical"]);function H(s,n=0){return typeof s=="number"&&Number.isFinite(s)?s:n}function re(s){if(!s)return{noDb:!1,error:""};const n=ie(s),u=/Database not available/i.test(n);return{noDb:u,error:u?"Database not available":""}}function Je(s,n=0){if(!s||typeof s!="object")return null;const u=s.id||"";if(!u)return null;let f=s.details;if(typeof f=="string"&&f)try{f=JSON.parse(f)}catch{}const x=typeof s.success=="boolean"?s.success:s.success===1||s.success==="1"||s.success===!0;return{key:u,id:u,eventType:String(s.event_type??s.eventType??"").toLowerCase(),operation:String(s.operation||""),actor:s.actor??"",target:s.target??"",details:f??null,riskLevel:String(s.risk_level??s.riskLevel??"low").toLowerCase(),ipAddress:s.ip_address??s.ipAddress??"",userAgent:s.user_agent??s.userAgent??"",success:x,errorMessage:s.error_message??s.errorMessage??"",createdAt:s.created_at??s.createdAt??"",_idx:n}}function Me(s){const n=ue(s);return Array.isArray(n)?n.map(Je).filter(Boolean):[]}const Ue={total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}};function Be(s){const n=JSON.parse(JSON.stringify(Ue));for(const f of B)n.byEventType[f]=0;for(const f of Y)n.byRiskLevel[f]=0;const u=ue(s);if(!u||typeof u!="object"||Array.isArray(u))return n;if(n.total=H(u.total,0),n.failures=H(u.failures,0),n.highRisk=H(u.highRisk,0),u.byEventType&&typeof u.byEventType=="object")for(const[f,x]of Object.entries(u.byEventType))typeof x=="number"&&Number.isFinite(x)&&(n.byEventType[f]=x);if(u.byRiskLevel&&typeof u.byRiskLevel=="object")for(const[f,x]of Object.entries(u.byRiskLevel))typeof x=="number"&&Number.isFinite(x)&&(n.byRiskLevel[f]=x);return n}function ne(s){if(s==null||s==="")return"—";const n=String(s),u=n.includes(" ")&&!n.includes("T")?n.replace(" ","T")+"Z":n,f=new Date(u);return isNaN(f.getTime())?n:f.toLocaleString("zh-CN",{hour12:!1})}const $e={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Pe={class:"type-name"},Ve={class:"type-count"},Ke={class:"filter-bar"},qe={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},We={style:{color:"var(--text-primary)","font-weight":"500","font-family":"monospace","font-size":"12px"}},Ge={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"2px"}},He={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Ye={key:1,style:{color:"var(--text-muted)"}},Ze={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Qe={key:1,style:{color:"var(--text-muted)"}},Xe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},et={key:0,style:{"padding-top":"8px"}},tt={style:{"font-family":"monospace","font-size":"12px"}},at={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},ot={style:{"font-family":"monospace"}},lt={key:0,style:{"font-family":"monospace","font-size":"12px"}},st={key:1,style:{color:"var(--text-muted)"}},rt={key:0,style:{"font-family":"monospace","font-size":"12px"}},nt={key:1,style:{color:"var(--text-muted)"}},it={style:{"font-family":"monospace","font-size":"12px"}},ut={style:{"font-family":"monospace","font-size":"11px"}},ct={style:{color:"#ff4d4f"}},dt={class:"details-pre"},ft={__name:"Audit",setup(s){const n=Ae(),u=Ce(),f=S(!1),x=S([]),p=S({total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}}),$=S({noDb:!1,error:""}),Z=S("events"),F=S(""),O=S(""),D=S(""),R=S(""),I=S(!1),P=S(!1),c=S(null),ce=[{title:"时间",key:"createdAt",width:"160px"},{title:"类型",key:"eventType",width:"110px"},{title:"操作",key:"operation"},{title:"角色",key:"actor",width:"140px"},{title:"目标",key:"target",width:"180px"},{title:"风险",key:"riskLevel",width:"90px"},{title:"状态",key:"success",width:"80px"},{title:"操作",key:"action",width:"80px"}],V=G(()=>p.value.total?(p.value.total-p.value.failures)/p.value.total*100:100),de=G(()=>!!(O.value||D.value||R.value||I.value)),fe=G(()=>{let a=x.value;if(D.value&&(a=a.filter(l=>l.eventType===D.value)),R.value&&(a=a.filter(l=>l.riskLevel===R.value)),I.value&&(a=a.filter(l=>!l.success)),O.value){const l=O.value.toLowerCase();a=a.filter(k=>(k.operation||"").toLowerCase().includes(l)||(k.actor||"").toLowerCase().includes(l)||(k.target||"").toLowerCase().includes(l))}return a});function K(a){return{auth:"认证",permission:"权限",data:"数据",system:"系统",file:"文件",did:"DID",crypto:"加密",api:"API"}[a]||a}function J(a){return{auth:"blue",permission:"purple",data:"cyan",system:"default",file:"green",did:"gold",crypto:"magenta",api:"volcano"}[a]||"default"}function Q(a){return{auth:"#1677ff",permission:"#722ed1",data:"#13c2c2",system:"#888",file:"#52c41a",did:"#faad14",crypto:"#eb2f96",api:"#fa541c"}[a]||"#888"}function M(a){return{low:"低",medium:"中",high:"高",critical:"关键"}[a]||a}function q(a){return{low:"default",medium:"gold",high:"orange",critical:"red"}[a]||"default"}function pe(a){return{low:"#888",medium:"#faad14",high:"#fa8c16",critical:"#ff4d4f"}[a]||"#888"}function X(a,l){return l?Math.round(a/l*100):0}function ve(a,l){return a?a.length<=l?a:a.slice(0,l)+"…":""}function ye(a){if(typeof a=="string")return a;try{return JSON.stringify(a,null,2)}catch{return String(a)}}let ee=null;function _e(){clearTimeout(ee),ee=setTimeout(()=>{O.value=F.value.trim()},300)}function me(){O.value=F.value.trim()}async function te(){f.value=!0,$.value={noDb:!1,error:""};try{const[a,l]=await Promise.all([n.execute("audit log --json -n 200",12e3).catch(()=>({output:""})),n.execute("audit stats --json",8e3).catch(()=>({output:""}))]),k=[a,l].map(N=>re(N.output)).find(N=>N.noDb);k&&($.value=k),x.value=Me(a.output),p.value=Be(l.output)}catch(a){E.error("加载审计日志失败: "+(a?.message||a))}finally{f.value=!1}}function be(a){c.value=a,P.value=!0}async function ge(){try{const{output:a}=await n.execute("audit export -f json -n 10000",2e4);if(re(a).noDb){E.error("需要先 cc init 初始化项目");return}if(!a.trim().startsWith("[")){E.error("导出失败: "+a.slice(0,120));return}const k=await u.saveText(a.trim(),{defaultPath:`audit-${new Date().toISOString().slice(0,10)}.json`,filters:[{name:"JSON",extensions:["json"]}]});if(k.canceled)return;E.success(k.path?`已导出到 ${k.path}`:"已导出")}catch(a){E.error("导出失败: "+(a?.message||a))}}return Fe(te),(a,l)=>{const k=v("a-button"),N=v("a-space"),ke=v("a-alert"),w=v("a-statistic"),z=v("a-card"),A=v("a-col"),W=v("a-row"),T=v("a-tag"),xe=v("a-input-search"),U=v("a-radio-button"),ae=v("a-radio-group"),he=v("a-checkbox"),Le=v("a-table"),oe=v("a-tab-pane"),le=v("a-progress"),Se=v("a-tabs"),h=v("a-descriptions-item"),Te=v("a-descriptions"),ze=v("a-modal");return r(),d("div",null,[_("div",$e,[l[8]||(l[8]=_("div",null,[_("h2",{class:"page-title"},"审计日志"),_("p",{class:"page-sub"},"安全事件追踪 · 风险评估 · 合规导出")],-1)),t(N,null,{default:e(()=>[t(k,{loading:f.value,onClick:te},{icon:e(()=>[t(g(De))]),default:e(()=>[l[6]||(l[6]=y(" 刷新 ",-1))]),_:1},8,["loading"]),t(k,{onClick:ge},{icon:e(()=>[t(g(Re))]),default:e(()=>[l[7]||(l[7]=y(" 导出 JSON ",-1))]),_:1})]),_:1})]),$.value.noDb?(r(),L(ke,{key:0,type:"info","show-icon":"",message:"该模块需要项目级数据库",description:"`cc audit ...` 命令仅在 chainlesschain 项目目录下可用。请先运行 `cc init` 初始化项目,或在已初始化的目录启动 `cc serve`。",style:{"margin-bottom":"16px"}})):b("",!0),t(W,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:e(()=>[t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(w,{title:"事件总数",value:p.value.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:e(()=>[t(g(se))]),_:1},8,["value"])]),_:1})]),_:1}),t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(w,{title:"失败次数",value:p.value.failures,"value-style":{color:p.value.failures>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[t(g(Ne))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(w,{title:"高风险",value:p.value.highRisk,"value-style":{color:p.value.highRisk>0?"#fa8c16":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[t(g(we))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:12,sm:8,lg:5},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(w,{title:"关键事件",value:p.value.byRiskLevel.critical||0,"value-style":{color:(p.value.byRiskLevel.critical||0)>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:e(()=>[t(g(Ee))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(A,{xs:24,sm:8,lg:4},{default:e(()=>[t(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[t(w,{title:"成功率",value:V.value,suffix:"%",precision:1,"value-style":{color:V.value>=95?"#52c41a":V.value>=80?"#faad14":"#ff4d4f",fontSize:"20px"}},{prefix:e(()=>[t(g(je))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),t(z,{title:"事件类型",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:e(()=>[t(W,{gutter:[12,12]},{default:e(()=>[(r(!0),d(C,null,j(g(B),o=>(r(),L(A,{key:o,xs:12,sm:8,lg:3},{default:e(()=>[_("div",{class:"type-pill",style:Ie({borderLeftColor:Q(o)})},[t(T,{color:J(o),style:{"font-family":"monospace","font-size":"11px"}},{default:e(()=>[y(i(o),1)]),_:2},1032,["color"]),_("div",Pe,i(K(o)),1),_("div",Ve,i(p.value.byEventType[o]||0),1)],4)]),_:2},1024))),128))]),_:1})]),_:1}),t(Se,{activeKey:Z.value,"onUpdate:activeKey":l[4]||(l[4]=o=>Z.value=o),class:"audit-tabs"},{default:e(()=>[t(oe,{key:"events",tab:"事件流"},{default:e(()=>[_("div",Ke,[t(xe,{value:F.value,"onUpdate:value":l[0]||(l[0]=o=>F.value=o),placeholder:"搜索操作 / 角色 / 目标...","allow-clear":"",style:{"max-width":"280px"},onSearch:me,onInput:_e},null,8,["value"]),t(ae,{value:D.value,"onUpdate:value":l[1]||(l[1]=o=>D.value=o),size:"small","button-style":"solid"},{default:e(()=>[t(U,{value:""},{default:e(()=>[...l[9]||(l[9]=[y("全部类型",-1)])]),_:1}),(r(!0),d(C,null,j(g(B),o=>(r(),L(U,{key:o,value:o},{default:e(()=>[y(i(K(o)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(ae,{value:R.value,"onUpdate:value":l[2]||(l[2]=o=>R.value=o),size:"small"},{default:e(()=>[t(U,{value:""},{default:e(()=>[...l[10]||(l[10]=[y("全部风险",-1)])]),_:1}),(r(!0),d(C,null,j(g(Y),o=>(r(),L(U,{key:o,value:o},{default:e(()=>[y(i(M(o)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(he,{checked:I.value,"onUpdate:checked":l[3]||(l[3]=o=>I.value=o)},{default:e(()=>[...l[11]||(l[11]=[y("仅失败",-1)])]),_:1},8,["checked"])]),t(Le,{columns:ce,"data-source":fe.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",loading:f.value,style:{background:"var(--bg-card)"}},{bodyCell:e(({column:o,record:m})=>[o.key==="createdAt"?(r(),d("span",qe,i(g(ne)(m.createdAt)),1)):b("",!0),o.key==="eventType"?(r(),L(T,{key:1,color:J(m.eventType),style:{"font-family":"monospace"}},{default:e(()=>[y(i(m.eventType),1)]),_:2},1032,["color"])):b("",!0),o.key==="operation"?(r(),d(C,{key:2},[_("span",We,i(m.operation),1),m.errorMessage?(r(),d("div",Ge,i(m.errorMessage),1)):b("",!0)],64)):b("",!0),o.key==="actor"?(r(),d(C,{key:3},[m.actor?(r(),d("span",He,i(m.actor),1)):(r(),d("span",Ye,"—"))],64)):b("",!0),o.key==="target"?(r(),d(C,{key:4},[m.target?(r(),d("span",Ze,i(ve(m.target,32)),1)):(r(),d("span",Qe,"—"))],64)):b("",!0),o.key==="riskLevel"?(r(),L(T,{key:5,color:q(m.riskLevel)},{default:e(()=>[y(i(M(m.riskLevel)),1)]),_:2},1032,["color"])):b("",!0),o.key==="success"?(r(),L(T,{key:6,color:m.success?"green":"red"},{default:e(()=>[y(i(m.success?"OK":"FAIL"),1)]),_:2},1032,["color"])):b("",!0),o.key==="action"?(r(),L(k,{key:7,size:"small",type:"link",onClick:pt=>be(m)},{default:e(()=>[...l[12]||(l[12]=[y("详情",-1)])]),_:1},8,["onClick"])):b("",!0)]),emptyText:e(()=>[_("div",Xe,[t(g(se),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+i(de.value?"没有符合条件的事件":"暂无审计事件"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),t(oe,{key:"breakdown",tab:"分布统计"},{default:e(()=>[t(W,{gutter:[16,16]},{default:e(()=>[t(A,{xs:24,lg:12},{default:e(()=>[t(z,{title:"按事件类型",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(r(!0),d(C,null,j(g(B),o=>(r(),d("div",{key:o,class:"bd-row"},[t(T,{color:J(o),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:e(()=>[y(i(o),1)]),_:2},1032,["color"]),t(le,{percent:X(p.value.byEventType[o]||0,p.value.total),"stroke-color":Q(o),format:()=>`${p.value.byEventType[o]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1}),t(A,{xs:24,lg:12},{default:e(()=>[t(z,{title:"按风险等级",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(r(!0),d(C,null,j(g(Y),o=>(r(),d("div",{key:o,class:"bd-row"},[t(T,{color:q(o),style:{"min-width":"80px","text-align":"center"}},{default:e(()=>[y(i(M(o)),1)]),_:2},1032,["color"]),t(le,{percent:X(p.value.byRiskLevel[o]||0,p.value.total),"stroke-color":pe(o),format:()=>`${p.value.byRiskLevel[o]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["activeKey"]),t(ze,{open:P.value,"onUpdate:open":l[5]||(l[5]=o=>P.value=o),title:`事件详情:${c.value?.id?.slice(0,8)||""}`,width:720,footer:null},{default:e(()=>[c.value?(r(),d("div",et,[t(Te,{column:2,size:"small",bordered:""},{default:e(()=>[t(h,{label:"ID",span:2},{default:e(()=>[_("span",tt,i(c.value.id),1)]),_:1}),t(h,{label:"事件类型"},{default:e(()=>[t(T,{color:J(c.value.eventType),style:{"font-family":"monospace"}},{default:e(()=>[y(i(c.value.eventType),1)]),_:1},8,["color"]),_("span",at,i(K(c.value.eventType)),1)]),_:1}),t(h,{label:"风险等级"},{default:e(()=>[t(T,{color:q(c.value.riskLevel)},{default:e(()=>[y(i(M(c.value.riskLevel)),1)]),_:1},8,["color"])]),_:1}),t(h,{label:"操作",span:2},{default:e(()=>[_("span",ot,i(c.value.operation),1)]),_:1}),t(h,{label:"状态"},{default:e(()=>[t(T,{color:c.value.success?"green":"red"},{default:e(()=>[y(i(c.value.success?"成功":"失败"),1)]),_:1},8,["color"])]),_:1}),t(h,{label:"时间"},{default:e(()=>[y(i(g(ne)(c.value.createdAt)),1)]),_:1}),t(h,{label:"角色"},{default:e(()=>[c.value.actor?(r(),d("span",lt,i(c.value.actor),1)):(r(),d("span",st,"—"))]),_:1}),t(h,{label:"目标"},{default:e(()=>[c.value.target?(r(),d("span",rt,i(c.value.target),1)):(r(),d("span",nt,"—"))]),_:1}),c.value.ipAddress?(r(),L(h,{key:0,label:"IP"},{default:e(()=>[_("span",it,i(c.value.ipAddress),1)]),_:1})):b("",!0),c.value.userAgent?(r(),L(h,{key:1,label:"User-Agent"},{default:e(()=>[_("span",ut,i(c.value.userAgent),1)]),_:1})):b("",!0),c.value.errorMessage?(r(),L(h,{key:2,label:"错误信息",span:2},{default:e(()=>[_("span",ct,i(c.value.errorMessage),1)]),_:1})):b("",!0),c.value.details?(r(),L(h,{key:3,label:"详细信息",span:2},{default:e(()=>[_("pre",dt,i(ye(c.value.details)),1)]),_:1})):b("",!0)]),_:1})])):b("",!0)]),_:1},8,["open","title"])])}}},Ct=Oe(ft,[["__scopeId","data-v-ae622929"]]);export{Ct as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-ae622929]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-ae622929]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.audit-tabs[data-v-ae622929] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-ae622929]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.type-pill[data-v-ae622929]{padding:8px 10px;border-radius:6px;background:#1677ff0a;border:1px solid var(--border-color);border-left:3px solid #1677ff;height:100%;text-align:center}.type-name[data-v-ae622929]{color:var(--text-primary);font-size:12px;margin-top:4px}.type-count[data-v-ae622929]{color:var(--text-primary);font-size:18px;font-weight:600;margin-top:2px}.bd-row[data-v-ae622929]{display:flex;align-items:center;margin-bottom:8px}.details-pre[data-v-ae622929]{margin:0;padding:8px 10px;background:var(--bg-base);border:1px solid var(--border-color);border-radius:4px;font-size:11px;max-height:300px;overflow:auto;color:var(--text-primary)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as Ne}from"./ws-4ur1fGsk.js";import{u as Te}from"./useFs-CK8VYPus.js";import{_ as Re}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as Ee,aj as Je,ah as be,r as ie,a8 as D,aw as J,au as Ue}from"./icons-CJACPYXu.js";import{a as xe}from"./index-BB5y5Y0z.js";import{l as Ke,F as s,D as p,c as a,x as o,r as l,q as y,v as n,J as f,u as v,m as x,G as r,I as u,H as Ve}from"./vendor-D0Qjn73K.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 Ge={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},He={key:0,style:{"text-align":"center",padding:"30px"}},qe={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},We={key:1},Qe={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Xe={key:3,style:{"margin-top":"16px"}},Ye={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},Ze={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},et={key:0,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px","margin-top":"8px"}},tt={style:{"font-family":"monospace"}},at={key:0},ot={key:1,style:{"margin-top":"12px"}},lt={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},nt={key:0,style:{"text-align":"center",padding:"30px"}},st={key:0,style:{"margin-bottom":"16px"}},rt={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},it={key:0,style:{"font-family":"monospace","font-size":"12px"}},ut={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ct={key:0,style:{"text-align":"center",padding:"30px"}},dt={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},pt={key:0,style:{"text-align":"center",padding:"30px"}},vt={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},yt={key:1},ft={key:2},gt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},mt={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},bt={key:0,style:{"margin-top":"12px"}},xt={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},kt={__name:"Backup",setup(_t){const g=Ne(),ke=Te(),U=l(!1),ue=l("backup"),K=l(!1),V=l(!1),G=l(!1),I=l(""),m=l([]),h=l(""),_e=[{title:"备份 ID",key:"id"},{title:"大小",key:"size",width:120},{title:"创建时间",key:"createdAt"},{title:"操作",key:"action",width:100}];async function ce(){V.value=!0,I.value="";try{const{output:t}=await g.execute("backup list --json",15e3),e=M(t);Array.isArray(e)?m.value=e:e&&Array.isArray(e.backups)?m.value=e.backups:(m.value=[],t&&t.trim()&&(h.value=t))}catch(t){I.value=`加载备份列表失败: ${t.message}`}finally{V.value=!1}}async function he(){G.value=!0,h.value="",I.value="";try{const{output:t}=await g.execute("backup create --json",3e4);h.value=t||"备份已创建",await ce()}catch(t){h.value=`创建备份失败: ${t.message}`}finally{G.value=!1}}const H=l(!1),q=l(!1),w=l(null),z=l("");function we(t){w.value=t,z.value="",H.value=!0}async function ze(){if(w.value){q.value=!0,z.value="";try{const{output:t}=await g.execute(`backup restore ${w.value.id}`,6e4);z.value=t||"恢复完成"}catch(t){z.value=`恢复失败: ${t.message}`}finally{q.value=!1}}}const W=l(!1),L=l(""),B=l(!1),j=l("未知"),N=l(0),Q=l(""),k=l(""),X=l(!1),Y=l(!1),S=l([]),Se=[{title:"文件路径",key:"path"},{title:"冲突类型",key:"type",width:120}];async function Z(){W.value=!0,L.value="";try{const{output:t}=await g.execute("sync status --json",15e3),e=M(t);e?(B.value=e.online||e.synced||e.status==="online"||!1,j.value=B.value?"已同步":"未同步",N.value=e.pending??e.pendingChanges??0,Q.value=e.lastSync||e.lastSyncTime||""):Ce(t)}catch(t){L.value=`加载同步状态失败: ${t.message}`}finally{W.value=!1}}function Ce(t){if(!t){j.value="未知";return}B.value=/synced|online|up.to.date/i.test(t),j.value=B.value?"已同步":"未同步";const e=t.match(/pending[:\s]+(\d+)/i);N.value=e?parseInt(e[1]):0;const c=t.match(/last[:\s]+(.+)/i);c&&(Q.value=c[1].trim())}async function Ae(){X.value=!0,k.value="";try{const{output:t}=await g.execute("sync push",3e4);k.value=t||"推送完成",await Z()}catch(t){k.value=`推送失败: ${t.message}`}finally{X.value=!1}}async function $e(){Y.value=!0,k.value="";try{const{output:t}=await g.execute("sync pull",3e4);k.value=t||"拉取完成",await Z()}catch(t){k.value=`拉取失败: ${t.message}`}finally{Y.value=!1}}async function Pe(){try{const{output:t}=await g.execute("sync conflicts --json",15e3),e=M(t);Array.isArray(e)?S.value=e:e&&Array.isArray(e.conflicts)?S.value=e.conflicts:S.value=[]}catch{S.value=[]}}const ee=l(!1),T=l(""),C=l(!1),te=l(""),ae=l(!1),O=l(""),A=l([]),Ie=[{title:"CID",key:"cid"},{title:"名称",key:"name"},{title:"大小",key:"size",width:120},{title:"固定时间",key:"pinnedAt"},{title:"操作",key:"action",width:120}];async function Be(){ee.value=!0,T.value="";try{const{output:t}=await g.execute("ipfs status --json",15e3),e=M(t);if(e)C.value=e.online||e.status==="online"||e.connected||!1,te.value=e.peerId||e.id||"";else{C.value=t?/online|connected|running/i.test(t):!1;const c=t?t.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;te.value=c?c[1]:""}}catch(t){T.value=`加载 IPFS 状态失败: ${t.message}`}finally{ee.value=!1}}async function oe(){ae.value=!0,O.value="";try{const{output:t}=await g.execute("ipfs pins --json",15e3),e=M(t);Array.isArray(e)?A.value=e:e&&Array.isArray(e.pins)?A.value=e.pins:A.value=[]}catch(t){O.value=`加载固定列表失败: ${t.message}`}finally{ae.value=!1}}const le=l(!1),ne=l(!1),R=l(""),F=l("");async function de(){if(R.value.trim()){ne.value=!0,F.value="";try{const{output:t}=await g.execute(`ipfs pin "${R.value.trim()}"`,3e4);F.value=t||"固定成功",await oe()}catch(t){F.value=`固定失败: ${t.message}`}finally{ne.value=!1}}}async function Oe(t){try{await g.execute(`ipfs unpin ${t.cid}`,15e3),await oe()}catch(e){O.value=`取消固定失败: ${e.message}`}}function M(t){if(!t||!t.trim())return null;try{return JSON.parse(t.trim())}catch{const c=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(c)try{return JSON.parse(c[0])}catch{}return null}}async function Fe(){if(m.value.length){U.value=!0;try{const t=await ke.saveJson({schema:1,exportedAt:new Date().toISOString(),count:m.value.length,backups:m.value},{defaultPath:`backup-list-${new Date().toISOString().slice(0,10)}.json`});if(t.canceled)return;xe.success(t.path?`已导出 ${m.value.length} 条备份信息到 ${t.path}`:"已导出")}catch(t){xe.error(`导出失败: ${t.message||t}`)}finally{U.value=!1}}}function pe(t){if(t==null||isNaN(t))return"-";const e=Number(t);if(e===0)return"0 B";const c=["B","KB","MB","GB","TB"],_=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,_)).toFixed(_>0?1:0)+" "+c[_]}async function ve(){K.value=!0;try{await Promise.all([ce(),Z(),Pe(),Be(),oe()])}finally{K.value=!1}}return Ke(ve),(t,e)=>{const c=y("a-button"),_=y("a-space"),E=y("a-spin"),ye=y("a-empty"),se=y("a-table"),b=y("a-card"),fe=y("a-modal"),re=y("a-tab-pane"),$=y("a-statistic"),P=y("a-col"),ge=y("a-row"),me=y("a-tag"),Me=y("a-popconfirm"),De=y("a-input"),Le=y("a-tabs");return n(),s("div",null,[p("div",Ge,[e[6]||(e[6]=p("div",null,[p("h2",{class:"page-title"},"备份与同步"),p("p",{class:"page-sub"},"备份管理 / 数据同步 / IPFS")],-1)),a(c,{type:"primary",ghost:"",loading:K.value,onClick:ve},{icon:o(()=>[a(v(Ee))]),default:o(()=>[e[5]||(e[5]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),a(Le,{activeKey:ue.value,"onUpdate:activeKey":e[4]||(e[4]=i=>ue.value=i),type:"card"},{default:o(()=>[a(re,{key:"backup"},{tab:o(()=>[a(v(ie)),e[7]||(e[7]=f(" 备份管理",-1))]),default:o(()=>[a(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:o(()=>[a(_,null,{default:o(()=>[a(v(ie)),e[8]||(e[8]=p("span",null,"备份操作",-1))]),_:1})]),extra:o(()=>[a(_,null,{default:o(()=>[a(c,{disabled:!m.value.length,loading:U.value,onClick:Fe},{icon:o(()=>[a(v(Je))]),default:o(()=>[e[9]||(e[9]=f(" 导出列表 ",-1))]),_:1},8,["disabled","loading"]),a(c,{type:"primary",loading:G.value,onClick:he},{icon:o(()=>[a(v(be))]),default:o(()=>[e[10]||(e[10]=f(" 创建备份 ",-1))]),_:1},8,["loading"])]),_:1})]),default:o(()=>[V.value?(n(),s("div",He,[a(E)])):m.value.length===0&&!h.value?(n(),x(ye,{key:1,description:"暂无备份记录"})):r("",!0),m.value.length>0?(n(),x(se,{key:2,columns:_e,"data-source":m.value,pagination:!1,size:"small","row-key":"id"},{bodyCell:o(({column:i,record:d})=>[i.key==="id"?(n(),s("span",qe,u(d.id.length>20?d.id.slice(0,20)+"...":d.id),1)):r("",!0),i.key==="size"?(n(),s("span",We,u(pe(d.size)),1)):r("",!0),i.key==="createdAt"?(n(),s("span",Qe,u(d.createdAt||"-"),1)):r("",!0),i.key==="action"?(n(),x(c,{key:3,size:"small",type:"link",onClick:je=>we(d)},{default:o(()=>[...e[11]||(e[11]=[f(" 恢复 ",-1)])]),_:1},8,["onClick"])):r("",!0)]),_:1},8,["data-source"])):r("",!0),h.value?(n(),s("div",Xe,[e[12]||(e[12]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"最近操作结果",-1)),p("pre",Ye,u(h.value),1)])):r("",!0),I.value?(n(),s("div",Ze,u(I.value),1)):r("",!0)]),_:1}),a(fe,{open:H.value,"onUpdate:open":e[0]||(e[0]=i=>H.value=i),title:"确认恢复备份","ok-text":"确认恢复","cancel-text":"取消","confirm-loading":q.value,onOk:ze,"ok-type":"danger"},{default:o(()=>[e[16]||(e[16]=p("p",{style:{color:"var(--text-secondary)"}}," 确定要恢复以下备份吗?此操作将覆盖当前数据。 ",-1)),w.value?(n(),s("div",et,[p("div",null,[e[13]||(e[13]=p("strong",null,"备份 ID:",-1)),e[14]||(e[14]=f()),p("span",tt,u(w.value.id),1)]),w.value.createdAt?(n(),s("div",at,[e[15]||(e[15]=p("strong",null,"创建时间:",-1)),f(" "+u(w.value.createdAt),1)])):r("",!0)])):r("",!0),z.value?(n(),s("div",ot,[p("pre",lt,u(z.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),a(re,{key:"sync"},{tab:o(()=>[a(v(D)),e[17]||(e[17]=f(" 数据同步",-1))]),default:o(()=>[W.value?(n(),s("div",nt,[a(E)])):(n(),s(Ve,{key:1},[a(ge,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(P,{xs:24,sm:8},{default:o(()=>[a(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a($,{title:"同步状态",value:j.value,"value-style":{color:B.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(D))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a(P,{xs:24,sm:8},{default:o(()=>[a(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a($,{title:"待同步变更",value:N.value,"value-style":{color:N.value>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:o(()=>[a(v(D))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a(P,{xs:24,sm:8},{default:o(()=>[a(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a($,{title:"最近同步",value:Q.value||"无","value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:o(()=>[a(v(D))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),a(_,{style:{"margin-bottom":"16px"}},{default:o(()=>[a(c,{loading:X.value,onClick:Ae,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(ie))]),default:o(()=>[e[18]||(e[18]=f(" 推送 ",-1))]),_:1},8,["loading"]),a(c,{loading:Y.value,onClick:$e,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(D))]),default:o(()=>[e[19]||(e[19]=f(" 拉取 ",-1))]),_:1},8,["loading"])]),_:1}),k.value?(n(),s("div",st,[e[20]||(e[20]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"操作结果",-1)),p("pre",rt,u(k.value),1)])):r("",!0),S.value.length>0?(n(),x(b,{key:1,title:"冲突列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(se,{columns:Se,"data-source":S.value,pagination:!1,size:"small","row-key":"path"},{bodyCell:o(({column:i,record:d})=>[i.key==="path"?(n(),s("span",it,u(d.path),1)):r("",!0),i.key==="type"?(n(),x(me,{key:1,color:"red"},{default:o(()=>[f(u(d.type||"冲突"),1)]),_:2},1024)):r("",!0)]),_:1},8,["data-source"])]),_:1})):r("",!0)],64)),L.value?(n(),s("div",ut,u(L.value),1)):r("",!0)]),_:1}),a(re,{key:"ipfs"},{tab:o(()=>[a(v(J)),e[21]||(e[21]=f(" IPFS 存储",-1))]),default:o(()=>[a(b,{title:"IPFS 状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(me,{color:C.value?"green":"default"},{default:o(()=>[f(u(C.value?"在线":"离线"),1)]),_:1},8,["color"])]),default:o(()=>[ee.value?(n(),s("div",ct,[a(E)])):(n(),x(ge,{key:1,gutter:[16,16]},{default:o(()=>[a(P,{xs:24,sm:8},{default:o(()=>[a(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a($,{title:"节点状态",value:C.value?"已连接":"未连接","value-style":{color:C.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(J))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a(P,{xs:24,sm:8},{default:o(()=>[a(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a($,{title:"已固定文件",value:A.value.length,"value-style":{fontSize:"16px"}},{prefix:o(()=>[a(v(J))]),_:1},8,["value"])]),_:1})]),_:1}),a(P,{xs:24,sm:8},{default:o(()=>[a(b,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a($,{title:"Peer ID",value:te.value||"-","value-style":{color:"var(--text-muted)",fontSize:"12px",fontFamily:"monospace"}},{prefix:o(()=>[a(v(J))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1})),T.value?(n(),s("div",dt,u(T.value),1)):r("",!0)]),_:1}),a(b,{title:"固定文件列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(c,{size:"small",onClick:e[1]||(e[1]=i=>le.value=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(be))]),default:o(()=>[e[22]||(e[22]=f(" 固定文件 ",-1))]),_:1})]),default:o(()=>[ae.value?(n(),s("div",pt,[a(E)])):A.value.length===0?(n(),x(ye,{key:1,description:"暂无固定文件"})):(n(),x(se,{key:2,columns:Ie,"data-source":A.value,pagination:{pageSize:10},size:"small","row-key":"cid"},{bodyCell:o(({column:i,record:d})=>[i.key==="cid"?(n(),s("span",vt,u(d.cid.length>24?d.cid.slice(0,24)+"...":d.cid),1)):r("",!0),i.key==="name"?(n(),s("span",yt,u(d.name||"-"),1)):r("",!0),i.key==="size"?(n(),s("span",ft,u(pe(d.size)),1)):r("",!0),i.key==="pinnedAt"?(n(),s("span",gt,u(d.pinnedAt||"-"),1)):r("",!0),i.key==="action"?(n(),x(Me,{key:4,title:"确定取消固定?","ok-text":"确定","cancel-text":"取消",onConfirm:je=>Oe(d)},{default:o(()=>[a(c,{size:"small",type:"link",danger:""},{default:o(()=>[a(v(Ue)),e[23]||(e[23]=f(" 取消固定 ",-1))]),_:1})]),_:1},8,["onConfirm"])):r("",!0)]),_:1},8,["data-source"])),O.value?(n(),s("div",mt,u(O.value),1)):r("",!0)]),_:1}),a(fe,{open:le.value,"onUpdate:open":e[3]||(e[3]=i=>le.value=i),title:"固定文件到 IPFS","confirm-loading":ne.value,onOk:de,"ok-text":"固定","cancel-text":"取消"},{default:o(()=>[e[24]||(e[24]=p("div",{style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},"请输入要固定的文件路径",-1)),a(De,{value:R.value,"onUpdate:value":e[2]||(e[2]=i=>R.value=i),placeholder:"文件路径,例如: /path/to/file.txt",onPressEnter:de},null,8,["value"]),F.value?(n(),s("div",bt,[p("pre",xt,u(F.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1})]),_:1},8,["activeKey"])])}}},Dt=Re(kt,[["__scopeId","data-v-e43ba419"]]);export{Dt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[data-v-e43ba419] .ant-table{background:transparent}[data-v-e43ba419] .ant-tabs-card>.ant-tabs-nav .ant-tabs-tab{background:var(--bg-card);border-color:var(--border-color)}[data-v-e43ba419] .ant-tabs-card>.ant-tabs-nav .ant-tabs-tab-active{background:var(--bg-card-hover);border-bottom-color:var(--bg-card-hover)}[data-v-e43ba419] .ant-select-selector{background:var(--bg-card)!important;border-color:var(--border-color)!important}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as f}from"./useConfigInject-DIkkDpt1.js";import{P as s}from"./index-U4Zd5IK6.js";import{d as w,c as O,s as h,w as k,j as b,r as S}from"./vendor-D0Qjn73K.js";var z=function(n,u){var o={};for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&u.indexOf(t)<0&&(o[t]=n[t]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(n);r<t.length;r++)u.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(n,t[r])&&(o[t[r]]=n[t[r]]);return o};const K=w({compatConfig:{MODE:3},props:{disabled:s.looseBool,type:s.string,value:s.any,tag:{type:String,default:"input"},size:s.string,onChange:Function,onInput:Function,onBlur:Function,onFocus:Function,onKeydown:Function,onCompositionstart:Function,onCompositionend:Function,onKeyup:Function,onPaste:Function,onMousedown:Function},emits:["change","input","blur","keydown","focus","compositionstart","compositionend","keyup","paste","mousedown"],setup(n,u){let{expose:o}=u;const t=h(null);return o({focus:()=>{t.value&&t.value.focus()},blur:()=>{t.value&&t.value.blur()},input:t,setSelectionRange:(l,c,d)=>{var v;(v=t.value)===null||v===void 0||v.setSelectionRange(l,c,d)},select:()=>{var l;(l=t.value)===null||l===void 0||l.select()},getSelectionStart:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.selectionStart},getSelectionEnd:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.selectionEnd},getScrollTop:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.scrollTop}}),()=>{const{tag:l,value:c}=n,d=z(n,["tag","value"]);return O(l,f(f({},d),{},{ref:t,value:c}),null)}}});function A(n){const u=n.getBoundingClientRect(),o=document.documentElement;return{left:u.left+(window.scrollX||o.scrollLeft)-(o.clientLeft||document.body.clientLeft||0),top:u.top+(window.scrollY||o.scrollTop)-(o.clientTop||document.body.clientTop||0)}}function M(n){return Object.keys(n).reduce((u,o)=>{const t=n[o];return typeof t>"u"||t===null||(u+=`${o}: ${n[o]};`),u},"")}var L=function(n,u){var o={};for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&u.indexOf(t)<0&&(o[t]=n[t]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(n);r<t.length;r++)u.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(n,t[r])&&(o[t[r]]=n[t[r]]);return o};const H=w({compatConfig:{MODE:3},inheritAttrs:!1,props:{disabled:s.looseBool,type:s.string,value:s.any,lazy:s.bool.def(!0),tag:{type:String,default:"input"},size:s.string,style:s.oneOfType([String,Object]),class:s.string},emits:["change","input","blur","keydown","focus","compositionstart","compositionend","keyup","paste","mousedown"],setup(n,u){let{emit:o,attrs:t,expose:r}=u;const a=h(null),y=S(),i=S(!1);k([()=>n.value,i],()=>{i.value||(y.value=n.value)},{immediate:!0});const l=e=>{o("change",e)},c=e=>{i.value=!0,e.target.composing=!0,o("compositionstart",e)},d=e=>{i.value=!1,e.target.composing=!1,o("compositionend",e);const p=document.createEvent("HTMLEvents");p.initEvent("input",!0,!0),e.target.dispatchEvent(p),l(e)},v=e=>{if(i.value&&n.lazy){y.value=e.target.value;return}o("input",e)},_=e=>{o("blur",e)},C=e=>{o("focus",e)},E=()=>{a.value&&a.value.focus()},j=()=>{a.value&&a.value.blur()},F=e=>{o("keydown",e)},P=e=>{o("keyup",e)},T=(e,p,g)=>{var m;(m=a.value)===null||m===void 0||m.setSelectionRange(e,p,g)},B=()=>{var e;(e=a.value)===null||e===void 0||e.select()};r({focus:E,blur:j,input:b(()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.input}),setSelectionRange:T,select:B,getSelectionStart:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getSelectionStart()},getSelectionEnd:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getSelectionEnd()},getScrollTop:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getScrollTop()}});const R=e=>{o("mousedown",e)},x=e=>{o("paste",e)},I=b(()=>n.style&&typeof n.style!="string"?M(n.style):n.style);return()=>{const{style:e,lazy:p}=n,g=L(n,["style","lazy"]);return O(K,f(f(f({},g),t),{},{style:I.value,onInput:v,onChange:l,onBlur:_,onFocus:C,ref:a,value:y.value,onCompositionstart:c,onCompositionend:d,onKeyup:P,onKeydown:F,onPaste:x,onMousedown:R}),null)}}});export{H as B,A as g};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{v as t,F as a,D as s,m as b,u as i,I as u,G as x,E as j,j as m,w as H,l as J,c as d,x as v,H as T,L as M,J as g,O as Q,P as V,q as z,r as E,a as K,n as P}from"./vendor-D0Qjn73K.js";import{u as U}from"./chat-DY27mJje.js";import{_ as N}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a2 as W,a3 as X,m as Y,a4 as Z,a5 as ee,F as te,G as oe,M as ne,$ as se,a6 as ae}from"./icons-CJACPYXu.js";import{r as le}from"./markdown-vYH_ziAO.js";import"./ws-4ur1fGsk.js";import"./markdown-xjUYbPSW.js";const ie=["data-testid"],re={class:"cb-action__icon"},de={class:"cb-action__label"},ce={key:0,class:"cb-action__detail"},ue={key:1,class:"cb-action__caret"},pe={__name:"ToolInvocationCard",props:{item:{type:Object,required:!0},expandable:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1}},emits:["toggle"],setup(r,{emit:f}){const h=r,l=f;function y(){h.expandable&&l("toggle")}return(k,c)=>(t(),a("div",{class:j(["cb-action",[`cb-action--${r.item.status}`,{"cb-action--expandable":r.expandable,"cb-action--open":r.expanded}]]),"data-testid":`tool-card-${r.item.id}`,onClick:y},[s("span",re,[r.item.status==="done"?(t(),b(i(W),{key:0})):r.item.status==="running"?(t(),b(i(X),{key:1})):(t(),b(i(Y),{key:2}))]),s("span",de,u(r.item.label),1),r.item.detail?(t(),a("span",ce,u(r.item.detail),1)):x("",!0),r.expandable?(t(),a("span",ue,[r.expanded?(t(),b(i(Z),{key:0})):(t(),b(i(ee),{key:1}))])):x("",!0)],10,ie))}},ve=N(pe,[["__scopeId","data-v-cf5a0925"]]),xe=["innerHTML"],fe={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(r){const f=r,h=m(()=>le(f.content||""));return(l,y)=>(t(),a("div",{class:"markdown-content",innerHTML:h.value},null,8,xe))}},F=N(fe,[["__scopeId","data-v-693ca57e"]]),ye={style:{display:"flex",height:"calc(100vh - 56px - 48px)",gap:"16px"}},_e={style:{width:"240px","flex-shrink":"0",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},ge={key:0,style:{padding:"6px 12px 4px","font-size":"11px",color:"#1677ff",background:"rgba(22,119,255,.07)","border-bottom":"1px solid rgba(22,119,255,.15)",display:"flex","align-items":"center",gap:"4px"}},me=["title"],be={key:1,style:{padding:"6px 12px 4px","font-size":"11px",color:"#722ed1",background:"rgba(114,46,209,.07)","border-bottom":"1px solid rgba(114,46,209,.15)",display:"flex","align-items":"center",gap:"4px"}},ke={style:{padding:"10px 12px","border-bottom":"1px solid var(--border-color)",display:"flex",gap:"8px"}},he={style:{flex:"1","overflow-y":"auto",padding:"8px"}},we=["onClick"],Ce={class:"session-icon"},$e={class:"session-info"},Se={class:"session-title"},Oe={class:"session-meta"},Ie={key:0,style:{"text-align":"center",color:"var(--text-muted)",padding:"24px 0","font-size":"13px"}},Te={style:{flex:"1",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},Me={key:0,style:{flex:"1",display:"flex","flex-direction":"column","align-items":"center","justify-content":"center",color:"var(--text-muted)"}},ze={style:{"margin-top":"24px",display:"flex",gap:"12px"}},je={key:0,class:"tool-msg"},Ne={key:0,class:"tool-detail"},Le={class:"tool-detail__pre tool-detail__pre--input"},Re={key:0,class:"tool-detail__result"},Be={class:"tool-detail__pre tool-detail__pre--result"},Ee={key:1,class:"user-msg"},Fe={class:"bubble user"},qe={key:2,class:"assistant-msg"},Ae={key:0,class:"assistant-msg"},De={key:1,class:"question-card"},Ge={class:"question-text"},He={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"8px","margin-top":"10px"}},Je={key:2,style:{padding:"16px","border-top":"1px solid var(--border-color)"}},Qe={style:{display:"flex",gap:"8px","align-items":"flex-end"}},Ve={__name:"Chat",setup(r){const f=window.__CC_CONFIG__||{},h=m(()=>f.mode==="project"),l=U(),y=E(null),k=E(""),c=m(()=>l.currentSessionId),L=m(()=>c.value?l.getMessages(c.value):[]),I=m(()=>{const n=l.streaming[c.value];return n?.active?n.content:null}),$=m(()=>l.pendingQuestion[c.value]),S=m(()=>l.getIsLoading(c.value)),w=K(new Set);function q(n){w.has(n)?w.delete(n):w.add(n)}function A(n,e){return{id:`tool-${e}`,label:n.tool||"unknown",detail:D(n),status:n.status==="done"?"done":"running"}}function D(n){if(n.status==="running"){const C=n.input&&typeof n.input=="object"?Object.keys(n.input):[];return C.length?`参数 ${C.length} · ${C[0]}…`:"执行中"}if(n.result==null)return"完成";const p=(typeof n.result=="string"?n.result:JSON.stringify(n.result)).split(`
|
|
2
|
-
`)[0]||"";return p.length>48?`${p.slice(0,48)}…`:p||"完成"}async function O(n){await l.createSession(n)}async function R(){if(!k.value.trim()||S.value||!c.value)return;const n=k.value;k.value="",await l.sendMessage(c.value,n)}function B(n){l.answerQuestion(c.value,n)}return H([L,I],()=>{P(()=>{y.value&&(y.value.scrollTop=y.value.scrollHeight)})},{deep:!0}),J(()=>{l.loadSessions()}),(n,e)=>{const p=z("a-button"),C=z("a-input-search"),G=z("a-textarea");return t(),a("div",ye,[s("div",_e,[h.value?(t(),a("div",ge,[d(i(te)),s("span",{style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"},title:i(f).projectRoot},u(i(f).projectName||"项目"),9,me)])):(t(),a("div",be,[d(i(oe)),e[5]||(e[5]=s("span",null,"全局会话",-1))])),s("div",ke,[d(p,{type:"primary",size:"small",style:{flex:"1"},onClick:e[0]||(e[0]=o=>O("chat"))},{icon:v(()=>[d(i(ne))]),default:v(()=>[e[6]||(e[6]=g(" Chat ",-1))]),_:1}),d(p,{size:"small",style:{flex:"1"},onClick:e[1]||(e[1]=o=>O("agent"))},{icon:v(()=>[d(i(se))]),default:v(()=>[e[7]||(e[7]=g(" Agent ",-1))]),_:1})]),s("div",he,[(t(!0),a(T,null,M(i(l).sessions,o=>(t(),a("div",{key:o.id,class:j(["session-item",{active:o.id===i(l).currentSessionId}]),onClick:_=>i(l).switchSession(o.id)},[s("span",Ce,u(o.type==="agent"?"🤖":"💬"),1),s("div",$e,[s("div",Se,u(o.title||"新对话"),1),s("div",Oe,u(o.messageCount||0)+" 条消息",1)])],10,we))),128)),i(l).sessions.length?x("",!0):(t(),a("div",Ie,[...e[8]||(e[8]=[g(" 点击上方按钮",-1),s("br",null,null,-1),g("开始新对话 ",-1)])]))])]),s("div",Te,[c.value?(t(),a("div",{key:1,style:{flex:"1","overflow-y":"auto",padding:"20px"},ref_key:"messagesEl",ref:y},[(t(!0),a(T,null,M(L.value,(o,_)=>(t(),a("div",{key:_,class:j(["message-row",o.role])},[o.role==="tool"?(t(),a("div",je,[d(ve,{item:A(o,_),expandable:"",expanded:w.has(_),onToggle:Ke=>q(_)},null,8,["item","expanded","onToggle"]),w.has(_)?(t(),a("div",Ne,[s("pre",Le,u(JSON.stringify(o.input,null,2)),1),o.result?(t(),a("div",Re,[s("pre",Be,u(typeof o.result=="string"?o.result:JSON.stringify(o.result,null,2)),1)])):x("",!0)])):x("",!0)])):o.role==="user"?(t(),a("div",Ee,[s("div",Fe,u(o.content),1)])):(t(),a("div",qe,[e[14]||(e[14]=s("div",{class:"avatar"},"AI",-1)),d(F,{class:"bubble assistant",content:o.content},null,8,["content"])]))],2))),128)),I.value?(t(),a("div",Ae,[e[15]||(e[15]=s("div",{class:"avatar"},"AI",-1)),d(F,{class:"bubble assistant streaming",content:I.value},null,8,["content"])])):x("",!0),$.value?(t(),a("div",De,[s("div",Ge,u($.value.question),1),$.value.choices?.length?(t(),a("div",He,[(t(!0),a(T,null,M($.value.choices,o=>(t(),b(p,{key:o,size:"small",onClick:_=>B(o)},{default:v(()=>[g(u(o),1)]),_:2},1032,["onClick"]))),128))])):(t(),b(C,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:B}))])):x("",!0)],512)):(t(),a("div",Me,[e[11]||(e[11]=s("div",{style:{"font-size":"48px","margin-bottom":"16px"}},"💬",-1)),e[12]||(e[12]=s("div",{style:{"font-size":"16px","margin-bottom":"8px",color:"#777"}},"开始 AI 对话",-1)),e[13]||(e[13]=s("div",{style:{"font-size":"13px",color:"var(--text-muted)"}},"选择左侧会话或创建新对话",-1)),s("div",ze,[d(p,{type:"primary",onClick:e[2]||(e[2]=o=>O("chat"))},{default:v(()=>[...e[9]||(e[9]=[g("新建 Chat",-1)])]),_:1}),d(p,{style:{},onClick:e[3]||(e[3]=o=>O("agent"))},{default:v(()=>[...e[10]||(e[10]=[g("新建 Agent",-1)])]),_:1})])])),c.value?(t(),a("div",Je,[s("div",Qe,[d(G,{value:k.value,"onUpdate:value":e[4]||(e[4]=o=>k.value=o),placeholder:S.value?"等待响应中...":"输入消息,Shift+Enter 换行,Enter 发送","auto-size":{minRows:1,maxRows:6},disabled:S.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)",color:"var(--text-primary)",resize:"none",flex:"1"},onKeydown:Q(V(R,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),d(p,{type:"primary",loading:S.value,onClick:R,style:{height:"40px"}},{icon:v(()=>[d(i(ae))]),_:1},8,["loading"])])])):x("",!0)])])}}},tt=N(Ve,[["__scopeId","data-v-868f97d8"]]);export{tt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as E,_ as V}from"./useConfigInject-DIkkDpt1.js";import{_ as o}from"./index-Vit9TJBu.js";import{P as W}from"./index-U4Zd5IK6.js";import{i as F}from"./initDefaultProps-BeWIEzBr.js";import{d as I,r as f,w as M,c as h}from"./vendor-D0Qjn73K.js";var R=function(t,l){var c={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&l.indexOf(n)<0&&(c[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a<n.length;a++)l.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(t,n[a])&&(c[n[a]]=t[n[a]]);return c};const T={prefixCls:String,name:String,id:String,type:String,defaultChecked:{type:[Boolean,Number],default:void 0},checked:{type:[Boolean,Number],default:void 0},disabled:Boolean,tabindex:{type:[Number,String]},readonly:Boolean,autofocus:Boolean,value:W.any,required:Boolean},Q=I({compatConfig:{MODE:3},name:"Checkbox",inheritAttrs:!1,props:F(T,{prefixCls:"rc-checkbox",type:"checkbox",defaultChecked:!1}),emits:["click","change"],setup(t,l){let{attrs:c,emit:n,expose:a}=l;const d=f(t.checked===void 0?t.defaultChecked:t.checked),s=f();M(()=>t.checked,()=>{d.value=t.checked}),a({focus(){var e;(e=s.value)===null||e===void 0||e.focus()},blur(){var e;(e=s.value)===null||e===void 0||e.blur()}});const i=f(),m=e=>{if(t.disabled)return;t.checked===void 0&&(d.value=e.target.checked),e.shiftKey=i.value;const u={target:o(o({},t),{checked:e.target.checked}),stopPropagation(){e.stopPropagation()},preventDefault(){e.preventDefault()},nativeEvent:e};t.checked!==void 0&&(s.value.checked=!!t.checked),n("change",u),i.value=!1},y=e=>{n("click",e),i.value=e.shiftKey};return()=>{const{prefixCls:e,name:u,id:k,type:g,disabled:b,readonly:x,tabindex:C,autofocus:O,value:P,required:S}=t,_=R(t,["prefixCls","name","id","type","disabled","readonly","tabindex","autofocus","value","required"]),{class:j,onFocus:B,onBlur:w,onKeydown:K,onKeypress:N,onKeyup:D}=c,p=o(o({},_),c),$=Object.keys(p).reduce((v,r)=>((r.startsWith("data-")||r.startsWith("aria-")||r==="role")&&(v[r]=p[r]),v),{}),q=E(e,j,{[`${e}-checked`]:d.value,[`${e}-disabled`]:b}),A=o(o({name:u,id:k,type:g,readonly:x,disabled:b,tabindex:C,class:`${e}-input`,checked:!!d.value,autofocus:O,value:P},$),{onChange:m,onClick:y,onFocus:B,onBlur:w,onKeydown:K,onKeypress:N,onKeyup:D,required:S});return h("span",{class:q},[h("input",V({ref:s},A),null),h("span",{class:`${e}-inner`},null)])}}});export{Q as V};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-45239475]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-45239475]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.codegen-tabs[data-v-45239475] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-45239475]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.tmpl-pill[data-v-45239475]{padding:8px 12px;border-radius:6px;background:#1677ff0a;border:1px solid var(--border-color);border-left:3px solid #1677ff;display:flex;align-items:center;justify-content:space-between;height:100%}.tmpl-count[data-v-45239475]{color:var(--text-primary);font-size:16px;font-weight:600}.sev-mini[data-v-45239475]{display:inline-flex;gap:8px;font-family:monospace;font-size:11px;font-weight:500}.bd-row[data-v-45239475]{display:flex;align-items:center;margin-bottom:8px}.code-pre[data-v-45239475]{margin:0;padding:8px 10px;background:var(--bg-base);border:1px solid var(--border-color);border-radius:4px;font-size:11px;max-height:240px;overflow:auto;color:var(--text-primary);white-space:pre-wrap}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as st}from"./ws-4ur1fGsk.js";import{s as nt}from"./community-parser-CO25nZFt.js";import{_ as rt}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as j}from"./index-BB5y5Y0z.js";import{_ as it,p as ve,ah as ut,f as Ce,J as dt,aa as ze,aK as Ae,G as pt,a9 as ft}from"./icons-CJACPYXu.js";import{E as ct}from"./useConfigInject-DIkkDpt1.js";import{l as mt,F as p,D as v,c as e,x as t,q as m,r as b,v as r,J as f,u as _,H as $,L as Q,m as x,N as je,I as u,G as c,j as Fe,a as ge}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 q(l){const n=nt(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 le=Object.freeze(["react","vue","express","fastapi","spring_boot"]),se=Object.freeze(["critical","high","medium","low","info"]);function I(l,n=0){return typeof l=="number"&&Number.isFinite(l)?l:n}function Te(l,n=null){if(l==null)return n;if(typeof l!="string")return l;try{return JSON.parse(l)}catch{return n}}function yt(l,n=0){if(!l||typeof l!="object")return null;const i=l.id||"";return i?{key:i,id:i,prompt:String(l.prompt||""),language:l.language??"",framework:l.framework??"",generatedCode:l.generated_code??l.generatedCode??"",fileCount:I(l.file_count??l.fileCount,0),tokenCount:I(l.token_count??l.tokenCount,0),metadata:l.metadata??null,createdAt:l.created_at??l.createdAt??null,_idx:n}:null}function vt(l){const n=q(l);return Array.isArray(n)?n.map(yt).filter(Boolean):[]}function gt(l,n=0){return!l||typeof l!="object"?null:{key:n,rule:String(l.rule||""),severity:String(l.severity||"info").toLowerCase(),match:String(l.match||""),pattern:String(l.pattern||"")}}function _t(l,n=0){if(!l||typeof l!="object")return null;const i=l.id||"";if(!i)return null;const S=Te(l.severity_summary??l.severitySummary,null)??l.severity_summary??l.severitySummary,F={};for(const J of se)F[J]=0;if(S&&typeof S=="object"&&!Array.isArray(S))for(const[J,E]of Object.entries(S))typeof E=="number"&&Number.isFinite(E)&&(F[J]=E);const R=Te(l.issues_detail??l.issuesDetail,null)??l.issues_detail??l.issuesDetail,U=Array.isArray(R)?R.map(gt).filter(Boolean):[];return{key:i,id:i,generationId:l.generation_id??l.generationId??"",codeHash:String(l.code_hash??l.codeHash??""),language:l.language??"",issuesFound:I(l.issues_found??l.issuesFound,0),securityIssues:I(l.security_issues??l.securityIssues,0),severitySummary:F,issuesDetail:U,reviewedAt:l.reviewed_at??l.reviewedAt??null,_idx:n}}function kt(l){const n=q(l);return Array.isArray(n)?n.map(_t).filter(Boolean):[]}function xt(l){const n={};for(const R of se)n[R]=0;const i=q(l);if(!i||typeof i!="object"||Array.isArray(i))return{ok:!1,reviewId:null,reason:"",issuesFound:0,securityIssues:0,severitySummary:n};const S=!!i.reviewId,F={...n};if(i.severitySummary&&typeof i.severitySummary=="object"&&!Array.isArray(i.severitySummary))for(const[R,U]of Object.entries(i.severitySummary))typeof U=="number"&&Number.isFinite(U)&&(F[R]=U);return{ok:S,reviewId:i.reviewId?String(i.reviewId):null,reason:i.reason?String(i.reason):"",issuesFound:I(i.issuesFound,0),securityIssues:I(i.securityIssues,0),severitySummary:F}}function bt(l,n=0){if(!l||typeof l!="object")return null;const i=l.id||"";return i?{key:i,id:i,template:String(l.template||""),projectName:l.project_name??l.projectName??"",options:l.options??null,filesGenerated:I(l.files_generated??l.filesGenerated,0),outputPath:l.output_path??l.outputPath??"",createdAt:l.created_at??l.createdAt??null,_idx:n}:null}function wt(l){const n=q(l);return Array.isArray(n)?n.map(bt).filter(Boolean):[]}const ht={generations:{total:0,totalTokens:0,totalFiles:0,uniqueLanguages:0},reviews:{total:0,totalIssues:0,totalSecurityIssues:0,avgIssuesPerReview:0},scaffolds:{total:0,byTemplate:{}}};function St(l){const n=JSON.parse(JSON.stringify(ht));for(const S of le)n.scaffolds.byTemplate[S]=0;const i=q(l);if(!i||typeof i!="object"||Array.isArray(i))return n;if(i.generations&&typeof i.generations=="object"&&(n.generations.total=I(i.generations.total,0),n.generations.totalTokens=I(i.generations.totalTokens,0),n.generations.totalFiles=I(i.generations.totalFiles,0),n.generations.uniqueLanguages=I(i.generations.uniqueLanguages,0)),i.reviews&&typeof i.reviews=="object"&&(n.reviews.total=I(i.reviews.total,0),n.reviews.totalIssues=I(i.reviews.totalIssues,0),n.reviews.totalSecurityIssues=I(i.reviews.totalSecurityIssues,0),n.reviews.avgIssuesPerReview=I(i.reviews.avgIssuesPerReview,0)),i.scaffolds&&typeof i.scaffolds=="object"&&(n.scaffolds.total=I(i.scaffolds.total,0),i.scaffolds.byTemplate&&typeof i.scaffolds.byTemplate=="object"))for(const[S,F]of Object.entries(i.scaffolds.byTemplate))typeof F=="number"&&Number.isFinite(F)&&(n.scaffolds.byTemplate[S]=F);return n}function Ne(l){const n=q(l);if(!n||typeof n!="object"||Array.isArray(n))return{ok:!1,id:null,reason:""};const i=n.generationId||n.scaffoldId||n.reviewId||null;return{ok:!!i,id:i?String(i):null,reason:n.reason?String(n.reason):""}}function X(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 It={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"tmpl-count"},zt={class:"filter-bar"},At={style:{color:"var(--text-primary)","font-weight":"500"}},jt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Ft={key:1,style:{color:"var(--text-muted)"}},Tt={key:1,style:{color:"var(--text-muted)"}},Nt={key:3,style:{color:"var(--text-secondary)"}},$t={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Rt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Ot={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ut={style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Dt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Pt={key:1,style:{color:"var(--text-muted)"}},Lt={key:4,class:"sev-mini"},Gt={key:0,style:{color:"#ff4d4f"}},Jt={key:1,style:{color:"#fa8c16"}},Et={key:2,style:{color:"#faad14"}},Mt={key:3,style:{color:"#888"}},qt={key:4,style:{color:"#1677ff"}},Bt={key:5,style:{color:"#52c41a"}},Ht={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Vt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Kt={class:"filter-bar"},Wt={style:{color:"var(--text-primary)","font-weight":"500"}},Qt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Xt={key:2,style:{color:"var(--text-secondary)"}},Yt={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Zt={key:1,style:{color:"var(--text-muted)"}},ea={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ta={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},aa={style:{"padding-top":"8px"}},oa={key:1},la={key:0,style:{"padding-top":"8px"}},sa={style:{"font-family":"monospace","font-size":"12px"}},na={key:1,style:{color:"var(--text-muted)"}},ra={key:1,style:{color:"var(--text-muted)"}},ia={class:"code-pre"},ua={class:"code-pre"},da={key:0,style:{"padding-top":"8px"}},pa={style:{"font-family":"monospace","font-size":"12px"}},fa={style:{"font-family":"monospace","font-size":"12px"}},ca={style:{"font-family":"monospace","font-size":"12px"}},ma={key:1,style:{color:"var(--text-muted)"}},ya={key:0,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},va={style:{"margin-left":"8px","font-family":"monospace","font-size":"12px"}},ga={style:{"margin-left":"8px",padding:"1px 6px",background:"var(--bg-base)","border-radius":"3px","font-size":"11px"}},_a={__name:"Codegen",setup(l){const n=st(),i=ct.PRESENTED_IMAGE_SIMPLE,S=b(!1),F=b(!1),R=b(!1),U=b(!1),J=b([]),E=b([]),ne=b([]),P=b({generations:{total:0,totalTokens:0,totalFiles:0,uniqueLanguages:0},reviews:{total:0,totalIssues:0,totalSecurityIssues:0,avgIssuesPerReview:0},scaffolds:{total:0,byTemplate:{}}}),_e=b("generations"),B=b(""),H=b(""),V=b(""),Y=b(!1),Z=b(!1),ee=b(!1),re=b(!1),ie=b(!1),y=ge({prompt:"",language:"",framework:"",code:"",files:0,tokens:0}),C=ge({generationId:"",language:"",code:""}),g=ge({template:"react",projectName:"",optionsJson:"",files:0,outputPath:""}),w=b(null),T=b(null),h=b(null),$e=[{title:"提示词",key:"prompt"},{title:"语言",key:"language",width:"110px"},{title:"框架",key:"framework",width:"110px"},{title:"文件",key:"fileCount",width:"70px"},{title:"Tokens",key:"tokenCount",width:"110px"},{title:"创建时间",key:"createdAt",width:"160px"},{title:"操作",key:"action",width:"140px"}],Re=[{title:"代码哈希",key:"codeHash",width:"180px"},{title:"语言",key:"language",width:"110px"},{title:"问题",key:"issuesFound",width:"90px"},{title:"安全",key:"securityIssues",width:"90px"},{title:"严重度",key:"severityBreak"},{title:"审查时间",key:"reviewedAt",width:"160px"},{title:"操作",key:"action",width:"90px"}],Oe=[{title:"项目名",key:"projectName"},{title:"模板",key:"template",width:"120px"},{title:"文件数",key:"filesGenerated",width:"90px"},{title:"输出路径",key:"outputPath",width:"300px"},{title:"创建时间",key:"createdAt",width:"160px"}],Ue=Fe(()=>{let s=J.value;if(B.value.trim()){const o=B.value.trim().toLowerCase();s=s.filter(k=>(k.language||"").toLowerCase().includes(o))}if(H.value.trim()){const o=H.value.trim().toLowerCase();s=s.filter(k=>(k.framework||"").toLowerCase().includes(o))}return s}),De=Fe(()=>V.value?ne.value.filter(s=>s.template===V.value):ne.value);function ke(s){return{react:"cyan",vue:"green",express:"gold",fastapi:"magenta",spring_boot:"red"}[s]||"default"}function Pe(s){return{react:"#13c2c2",vue:"#52c41a",express:"#faad14",fastapi:"#eb2f96",spring_boot:"#ff4d4f"}[s]||"#888"}function ue(s){return{critical:"关键",high:"高",medium:"中",low:"低",info:"提示"}[s]||s}function de(s){return{critical:"red",high:"orange",medium:"gold",low:"default",info:"blue"}[s]||"default"}function Le(s){return{critical:"#ff4d4f",high:"#fa8c16",medium:"#faad14",low:"#888",info:"#1677ff"}[s]||"#888"}function Ge(s,o){return o?Math.round(s/o*100):0}function te(s,o){return s?s.length<=o?s:s.slice(0,o)+"…":""}function O(s){return`"${String(s).replace(/"/g,'\\"')}"`}async function K(){S.value=!0;try{const[s,o,k,ae]=await Promise.all([n.execute("codegen list --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("codegen reviews --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("codegen scaffolds --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("codegen stats --json",8e3).catch(()=>({output:""}))]);J.value=vt(s.output),E.value=kt(o.output),ne.value=wt(k.output),P.value=St(ae.output)}catch(s){j.error("加载数据失败: "+(s?.message||s))}finally{S.value=!1}}async function Je(){if(!y.prompt.trim()){j.warning("请填写提示词");return}F.value=!0;try{const s=[`codegen generate -p ${O(y.prompt.trim())}`];y.language.trim()&&s.push(`-l ${O(y.language.trim())}`),y.framework.trim()&&s.push(`-f ${O(y.framework.trim())}`),y.code.trim()&&s.push(`--code ${O(y.code.trim())}`),y.files>0&&s.push(`--files ${y.files}`),y.tokens>0&&s.push(`--tokens ${y.tokens}`),s.push("--json");const{output:o}=await n.execute(s.join(" "),1e4),k=Ne(o);if(!k.ok){j.error("记录失败: "+(k.reason||o.slice(0,120)));return}j.success(`生成已记录:${k.id?.slice(0,8)}`),Y.value=!1,xe(),await K()}catch(s){j.error("记录失败: "+(s?.message||s))}finally{F.value=!1}}async function Ee(){if(!C.code.trim()){j.warning("请粘贴需要审查的代码");return}R.value=!0,w.value=null;try{const s=[`codegen review -c ${O(C.code)}`];C.language.trim()&&s.push(`-l ${O(C.language.trim())}`),C.generationId.trim()&&s.push(`-g ${O(C.generationId.trim())}`),s.push("--json");const{output:o}=await n.execute(s.join(" "),1e4);w.value=xt(o),!w.value.ok&&w.value.reason?j.error("审查失败: "+w.value.reason):w.value.ok?(j.success(`审查完成:${w.value.issuesFound} 项问题(${w.value.securityIssues} 安全)`),await K()):j.error("审查失败: "+o.slice(0,120))}catch(s){j.error("审查失败: "+(s?.message||s))}finally{R.value=!1}}async function Me(s){C.generationId=s.id,C.language=s.language||"",C.code=s.generatedCode||"",w.value=null,Z.value=!0}async function qe(){if(!g.projectName.trim()){j.warning("请填写项目名");return}if(g.optionsJson.trim())try{JSON.parse(g.optionsJson)}catch{j.warning("选项 JSON 格式错误");return}U.value=!0;try{const s=[`codegen scaffold -t ${g.template}`,`-n ${O(g.projectName.trim())}`];g.optionsJson.trim()&&s.push(`-o ${O(g.optionsJson.trim())}`),g.files>0&&s.push(`--files ${g.files}`),g.outputPath.trim()&&s.push(`--output ${O(g.outputPath.trim())}`),s.push("--json");const{output:o}=await n.execute(s.join(" "),1e4),k=Ne(o);if(!k.ok){j.error("创建失败: "+(k.reason||o.slice(0,120)));return}j.success(`脚手架已创建:${k.id?.slice(0,8)}`),ee.value=!1,be(),await K()}catch(s){j.error("创建失败: "+(s?.message||s))}finally{U.value=!1}}function Be(s){T.value=s,re.value=!0}function He(s){h.value=s,ie.value=!0}function xe(){y.prompt="",y.language="",y.framework="",y.code="",y.files=0,y.tokens=0}function be(){g.template="react",g.projectName="",g.optionsJson="",g.files=0,g.outputPath=""}return mt(K),(s,o)=>{const k=m("a-button"),ae=m("a-menu-item"),Ve=m("a-menu"),Ke=m("a-dropdown"),we=m("a-space"),L=m("a-statistic"),M=m("a-card"),D=m("a-col"),pe=m("a-row"),N=m("a-tag"),G=m("a-input"),fe=m("a-table"),ce=m("a-tab-pane"),he=m("a-radio-button"),We=m("a-radio-group"),Qe=m("a-tabs"),oe=m("a-textarea"),z=m("a-form-item"),me=m("a-input-number"),ye=m("a-form"),W=m("a-modal"),Xe=m("a-divider"),Ye=m("a-empty"),Ze=m("a-alert"),et=m("a-select-option"),tt=m("a-select"),A=m("a-descriptions-item"),Se=m("a-descriptions"),at=m("a-progress"),ot=m("a-list-item"),lt=m("a-list");return r(),p("div",null,[v("div",It,[o[31]||(o[31]=v("div",null,[v("h2",{class:"page-title"},"代码生成"),v("p",{class:"page-sub"},"生成记录 · 启发式审查 · 5 类脚手架")],-1)),e(we,null,{default:t(()=>[e(k,{loading:S.value,onClick:K},{icon:t(()=>[e(_(it))]),default:t(()=>[o[26]||(o[26]=f(" 刷新 ",-1))]),_:1},8,["loading"]),e(k,{onClick:o[0]||(o[0]=a=>Z.value=!0)},{icon:t(()=>[e(_(ve))]),default:t(()=>[o[27]||(o[27]=f(" 代码审查 ",-1))]),_:1}),e(Ke,null,{overlay:t(()=>[e(Ve,null,{default:t(()=>[e(ae,{key:"generate",onClick:o[1]||(o[1]=a=>Y.value=!0)},{default:t(()=>[...o[29]||(o[29]=[f("记录生成",-1)])]),_:1}),e(ae,{key:"scaffold",onClick:o[2]||(o[2]=a=>ee.value=!0)},{default:t(()=>[...o[30]||(o[30]=[f("创建脚手架",-1)])]),_:1})]),_:1})]),default:t(()=>[e(k,{type:"primary"},{icon:t(()=>[e(_(ut))]),default:t(()=>[o[28]||(o[28]=f(" 新建 ▼ ",-1))]),_:1})]),_:1})]),_:1})]),e(pe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(D,{xs:12,sm:8,lg:5},{default:t(()=>[e(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(L,{title:"生成记录",value:P.value.generations.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[e(_(Ce))]),_:1},8,["value"])]),_:1})]),_:1}),e(D,{xs:12,sm:8,lg:5},{default:t(()=>[e(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(L,{title:"代码审查",value:P.value.reviews.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[e(_(dt))]),_:1},8,["value"])]),_:1})]),_:1}),e(D,{xs:12,sm:8,lg:5},{default:t(()=>[e(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(L,{title:"安全问题",value:P.value.reviews.totalSecurityIssues,"value-style":{color:P.value.reviews.totalSecurityIssues>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:t(()=>[e(_(ze))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),e(D,{xs:12,sm:8,lg:5},{default:t(()=>[e(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(L,{title:"脚手架",value:P.value.scaffolds.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:t(()=>[e(_(Ae))]),_:1},8,["value"])]),_:1})]),_:1}),e(D,{xs:24,sm:8,lg:4},{default:t(()=>[e(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(L,{title:"语言数",value:P.value.generations.uniqueLanguages,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:t(()=>[e(_(pt))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),e(M,{title:"脚手架模板",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:t(()=>[e(pe,{gutter:[12,12]},{default:t(()=>[(r(!0),p($,null,Q(_(le),a=>(r(),x(D,{key:a,xs:12,sm:8,lg:4},{default:t(()=>[v("div",{class:"tmpl-pill",style:je({borderLeftColor:Pe(a)})},[e(N,{color:ke(a),style:{"font-family":"monospace"}},{default:t(()=>[f(u(a),1)]),_:2},1032,["color"]),v("span",Ct,u(P.value.scaffolds.byTemplate[a]||0),1)],4)]),_:2},1024))),128))]),_:1})]),_:1}),e(Qe,{activeKey:_e.value,"onUpdate:activeKey":o[6]||(o[6]=a=>_e.value=a),class:"codegen-tabs"},{default:t(()=>[e(ce,{key:"generations",tab:"生成记录"},{default:t(()=>[v("div",zt,[e(G,{value:B.value,"onUpdate:value":o[3]||(o[3]=a=>B.value=a),placeholder:"按语言筛选...","allow-clear":"",size:"small",style:{"max-width":"180px"}},null,8,["value"]),e(G,{value:H.value,"onUpdate:value":o[4]||(o[4]=a=>H.value=a),placeholder:"按框架筛选...","allow-clear":"",size:"small",style:{"max-width":"180px"}},null,8,["value"])]),e(fe,{columns:$e,"data-source":Ue.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",loading:S.value,style:{background:"var(--bg-card)"}},{bodyCell:t(({column:a,record:d})=>[a.key==="prompt"?(r(),p($,{key:0},[v("span",At,u(te(d.prompt,60)),1),v("div",jt,u(d.id.slice(0,16)),1)],64)):c("",!0),a.key==="language"?(r(),p($,{key:1},[d.language?(r(),x(N,{key:0,color:"blue",style:{"font-family":"monospace"}},{default:t(()=>[f(u(d.language),1)]),_:2},1024)):(r(),p("span",Ft,"—"))],64)):c("",!0),a.key==="framework"?(r(),p($,{key:2},[d.framework?(r(),x(N,{key:0,color:"purple",style:{"font-family":"monospace"}},{default:t(()=>[f(u(d.framework),1)]),_:2},1024)):(r(),p("span",Tt,"—"))],64)):c("",!0),a.key==="fileCount"?(r(),p("span",Nt,u(d.fileCount),1)):c("",!0),a.key==="tokenCount"?(r(),p("span",$t,u(d.tokenCount),1)):c("",!0),a.key==="createdAt"?(r(),p("span",Rt,u(_(X)(d.createdAt)),1)):c("",!0),a.key==="action"?(r(),p($,{key:6},[e(k,{size:"small",type:"link",onClick:Ie=>Be(d)},{default:t(()=>[...o[32]||(o[32]=[f("详情",-1)])]),_:1},8,["onClick"]),d.generatedCode?(r(),x(k,{key:0,size:"small",type:"link",onClick:Ie=>Me(d)},{default:t(()=>[...o[33]||(o[33]=[f("审查",-1)])]),_:1},8,["onClick"])):c("",!0)],64)):c("",!0)]),emptyText:t(()=>[v("div",Ot,[e(_(Ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+u(B.value||H.value?"没有符合条件的生成记录":"暂无生成记录"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),e(ce,{key:"reviews",tab:"代码审查"},{default:t(()=>[e(fe,{columns:Re,"data-source":E.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",loading:S.value,style:{background:"var(--bg-card)"}},{bodyCell:t(({column:a,record:d})=>[a.key==="codeHash"?(r(),p($,{key:0},[v("span",Ut,u(d.codeHash),1),v("div",Dt,u(d.id.slice(0,16)),1)],64)):c("",!0),a.key==="language"?(r(),p($,{key:1},[d.language?(r(),x(N,{key:0,color:"blue",style:{"font-family":"monospace"}},{default:t(()=>[f(u(d.language),1)]),_:2},1024)):(r(),p("span",Pt,"—"))],64)):c("",!0),a.key==="issuesFound"?(r(),x(N,{key:2,color:d.issuesFound===0?"green":d.issuesFound>5?"red":"orange"},{default:t(()=>[f(u(d.issuesFound)+" 项 ",1)]),_:2},1032,["color"])):c("",!0),a.key==="securityIssues"?(r(),p($,{key:3},[d.securityIssues>0?(r(),x(N,{key:0,color:"red"},{default:t(()=>[e(_(ze)),f(" "+u(d.securityIssues),1)]),_:2},1024)):(r(),x(N,{key:1,color:"green"},{default:t(()=>[e(_(ft)),o[34]||(o[34]=f(" 0 ",-1))]),_:1}))],64)):c("",!0),a.key==="severityBreak"?(r(),p("span",Lt,[d.severitySummary.critical>0?(r(),p("span",Gt,"C:"+u(d.severitySummary.critical),1)):c("",!0),d.severitySummary.high>0?(r(),p("span",Jt,"H:"+u(d.severitySummary.high),1)):c("",!0),d.severitySummary.medium>0?(r(),p("span",Et,"M:"+u(d.severitySummary.medium),1)):c("",!0),d.severitySummary.low>0?(r(),p("span",Mt,"L:"+u(d.severitySummary.low),1)):c("",!0),d.severitySummary.info>0?(r(),p("span",qt,"I:"+u(d.severitySummary.info),1)):c("",!0),d.issuesFound===0?(r(),p("span",Bt,"— 无问题")):c("",!0)])):c("",!0),a.key==="reviewedAt"?(r(),p("span",Ht,u(_(X)(d.reviewedAt)),1)):c("",!0),a.key==="action"?(r(),x(k,{key:6,size:"small",type:"link",onClick:Ie=>He(d)},{default:t(()=>[...o[35]||(o[35]=[f("详情",-1)])]),_:1},8,["onClick"])):c("",!0)]),emptyText:t(()=>[v("div",Vt,[e(_(ve),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[36]||(o[36]=f(' 暂无审查记录,点"代码审查"运行第一次 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),e(ce,{key:"scaffolds",tab:"脚手架"},{default:t(()=>[v("div",Kt,[e(We,{value:V.value,"onUpdate:value":o[5]||(o[5]=a=>V.value=a),size:"small","button-style":"solid"},{default:t(()=>[e(he,{value:""},{default:t(()=>[...o[37]||(o[37]=[f("全部模板",-1)])]),_:1}),(r(!0),p($,null,Q(_(le),a=>(r(),x(he,{key:a,value:a},{default:t(()=>[f(u(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),e(fe,{columns:Oe,"data-source":De.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",loading:S.value,style:{background:"var(--bg-card)"}},{bodyCell:t(({column:a,record:d})=>[a.key==="projectName"?(r(),p($,{key:0},[v("span",Wt,u(d.projectName||"(未命名)"),1),v("div",Qt,u(d.id.slice(0,16)),1)],64)):c("",!0),a.key==="template"?(r(),x(N,{key:1,color:ke(d.template),style:{"font-family":"monospace"}},{default:t(()=>[f(u(d.template),1)]),_:2},1032,["color"])):c("",!0),a.key==="filesGenerated"?(r(),p("span",Xt,u(d.filesGenerated),1)):c("",!0),a.key==="outputPath"?(r(),p($,{key:3},[d.outputPath?(r(),p("span",Yt,u(te(d.outputPath,40)),1)):(r(),p("span",Zt,"—"))],64)):c("",!0),a.key==="createdAt"?(r(),p("span",ea,u(_(X)(d.createdAt)),1)):c("",!0)]),emptyText:t(()=>[v("div",ta,[e(_(Ae),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+u(V.value?"没有符合条件的脚手架":"暂无脚手架记录"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),e(W,{open:Y.value,"onUpdate:open":o[13]||(o[13]=a=>Y.value=a),title:"记录代码生成","confirm-loading":F.value,width:560,"ok-text":"记录","cancel-text":"取消",onOk:Je,onCancel:xe},{default:t(()=>[e(ye,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:t(()=>[e(z,{label:"提示词",required:""},{default:t(()=>[e(oe,{value:y.prompt,"onUpdate:value":o[7]||(o[7]=a=>y.prompt=a),placeholder:"例如:创建一个带防抖的搜索框组件","auto-size":{minRows:2,maxRows:5}},null,8,["value"])]),_:1}),e(z,{label:"语言"},{default:t(()=>[e(G,{value:y.language,"onUpdate:value":o[8]||(o[8]=a=>y.language=a),placeholder:"例如 typescript / python"},null,8,["value"])]),_:1}),e(z,{label:"框架"},{default:t(()=>[e(G,{value:y.framework,"onUpdate:value":o[9]||(o[9]=a=>y.framework=a),placeholder:"例如 vue / react / fastapi"},null,8,["value"])]),_:1}),e(z,{label:"生成代码"},{default:t(()=>[e(oe,{value:y.code,"onUpdate:value":o[10]||(o[10]=a=>y.code=a),placeholder:"可选 — 粘贴生成的代码","auto-size":{minRows:3,maxRows:10}},null,8,["value"])]),_:1}),e(z,{label:"文件数"},{default:t(()=>[e(me,{value:y.files,"onUpdate:value":o[11]||(o[11]=a=>y.files=a),min:0,style:{width:"120px"}},null,8,["value"])]),_:1}),e(z,{label:"Token 数"},{default:t(()=>[e(me,{value:y.tokens,"onUpdate:value":o[12]||(o[12]=a=>y.tokens=a),min:0,style:{width:"160px"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),e(W,{open:Z.value,"onUpdate:open":o[17]||(o[17]=a=>Z.value=a),title:"启发式代码审查",width:720,footer:null},{default:t(()=>[v("div",aa,[e(ye,{"label-col":{span:5},"wrapper-col":{span:19}},{default:t(()=>[e(z,{label:"语言"},{default:t(()=>[e(G,{value:C.language,"onUpdate:value":o[14]||(o[14]=a=>C.language=a),placeholder:"可选,例如 javascript / python"},null,8,["value"])]),_:1}),e(z,{label:"生成 ID"},{default:t(()=>[e(G,{value:C.generationId,"onUpdate:value":o[15]||(o[15]=a=>C.generationId=a),placeholder:"可选,关联到一条生成记录"},null,8,["value"])]),_:1}),e(z,{label:"代码",required:""},{default:t(()=>[e(oe,{value:C.code,"onUpdate:value":o[16]||(o[16]=a=>C.code=a),placeholder:"粘贴需要审查的代码(lib 内置 5 类规则:eval / SQL / XSS / path_traversal / command_injection)","auto-size":{minRows:6,maxRows:16}},null,8,["value"])]),_:1}),e(z,{"wrapper-col":{offset:5,span:19}},{default:t(()=>[e(k,{type:"primary",loading:R.value,onClick:Ee},{icon:t(()=>[e(_(ve))]),default:t(()=>[o[38]||(o[38]=f(" 开始审查 ",-1))]),_:1},8,["loading"])]),_:1})]),_:1}),e(Xe),w.value?(r(),p("div",oa,[e(pe,{gutter:12,style:{"margin-bottom":"12px"}},{default:t(()=>[e(D,{span:8},{default:t(()=>[e(L,{title:"发现问题",value:w.value.issuesFound,"value-style":{color:w.value.issuesFound>0?"#fa8c16":"#52c41a",fontSize:"18px"}},null,8,["value","value-style"])]),_:1}),e(D,{span:8},{default:t(()=>[e(L,{title:"安全问题",value:w.value.securityIssues,"value-style":{color:w.value.securityIssues>0?"#ff4d4f":"#52c41a",fontSize:"18px"}},null,8,["value","value-style"])]),_:1}),e(D,{span:8},{default:t(()=>[e(L,{title:"审查 ID",value:w.value.reviewId?w.value.reviewId.slice(0,8):"—","value-style":{fontSize:"14px",fontFamily:"monospace"}},null,8,["value"])]),_:1})]),_:1}),o[39]||(o[39]=v("h5",{style:{color:"var(--text-primary)","font-size":"12px",margin:"12px 0 6px"}},"按严重度",-1)),e(we,null,{default:t(()=>[(r(!0),p($,null,Q(_(se),a=>(r(),x(N,{key:a,color:de(a)},{default:t(()=>[f(u(ue(a))+": "+u(w.value.severitySummary[a]||0),1)]),_:2},1032,["color"]))),128))]),_:1}),w.value.reason?(r(),x(Ze,{key:0,type:"warning","show-icon":"",message:`审查失败: ${w.value.reason}`,style:{"margin-top":"12px"}},null,8,["message"])):c("",!0)])):(r(),x(Ye,{key:0,description:"尚未审查",image:_(i)},null,8,["image"]))])]),_:1},8,["open"]),e(W,{open:ee.value,"onUpdate:open":o[23]||(o[23]=a=>ee.value=a),title:"创建脚手架","confirm-loading":U.value,width:560,"ok-text":"创建","cancel-text":"取消",onOk:qe,onCancel:be},{default:t(()=>[e(ye,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:t(()=>[e(z,{label:"模板",required:""},{default:t(()=>[e(tt,{value:g.template,"onUpdate:value":o[18]||(o[18]=a=>g.template=a)},{default:t(()=>[(r(!0),p($,null,Q(_(le),a=>(r(),x(et,{key:a,value:a},{default:t(()=>[f(u(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),e(z,{label:"项目名",required:""},{default:t(()=>[e(G,{value:g.projectName,"onUpdate:value":o[19]||(o[19]=a=>g.projectName=a),placeholder:"例如 my-app"},null,8,["value"])]),_:1}),e(z,{label:"选项"},{default:t(()=>[e(oe,{value:g.optionsJson,"onUpdate:value":o[20]||(o[20]=a=>g.optionsJson=a),placeholder:'可选 JSON,例如 {"typescript":true,"router":true}',"auto-size":{minRows:2,maxRows:4}},null,8,["value"])]),_:1}),e(z,{label:"文件数"},{default:t(()=>[e(me,{value:g.files,"onUpdate:value":o[21]||(o[21]=a=>g.files=a),min:0,style:{width:"120px"}},null,8,["value"])]),_:1}),e(z,{label:"输出路径"},{default:t(()=>[e(G,{value:g.outputPath,"onUpdate:value":o[22]||(o[22]=a=>g.outputPath=a),placeholder:"可选,例如 /tmp/my-app"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),e(W,{open:re.value,"onUpdate:open":o[24]||(o[24]=a=>re.value=a),title:`生成详情:${T.value?.id?.slice(0,12)||""}`,width:780,footer:null},{default:t(()=>[T.value?(r(),p("div",la,[e(Se,{column:2,size:"small",bordered:""},{default:t(()=>[e(A,{label:"ID",span:2},{default:t(()=>[v("span",sa,u(T.value.id),1)]),_:1}),e(A,{label:"语言"},{default:t(()=>[T.value.language?(r(),x(N,{key:0,color:"blue"},{default:t(()=>[f(u(T.value.language),1)]),_:1})):(r(),p("span",na,"—"))]),_:1}),e(A,{label:"框架"},{default:t(()=>[T.value.framework?(r(),x(N,{key:0,color:"purple"},{default:t(()=>[f(u(T.value.framework),1)]),_:1})):(r(),p("span",ra,"—"))]),_:1}),e(A,{label:"文件数"},{default:t(()=>[f(u(T.value.fileCount),1)]),_:1}),e(A,{label:"Token 数"},{default:t(()=>[f(u(T.value.tokenCount),1)]),_:1}),e(A,{label:"创建时间",span:2},{default:t(()=>[f(u(_(X)(T.value.createdAt)),1)]),_:1}),e(A,{label:"提示词",span:2},{default:t(()=>[v("pre",ia,u(T.value.prompt),1)]),_:1}),T.value.generatedCode?(r(),x(A,{key:0,label:"生成代码",span:2},{default:t(()=>[v("pre",ua,u(te(T.value.generatedCode,2e3)),1)]),_:1})):c("",!0)]),_:1})])):c("",!0)]),_:1},8,["open","title"]),e(W,{open:ie.value,"onUpdate:open":o[25]||(o[25]=a=>ie.value=a),title:`审查详情:${h.value?.id?.slice(0,12)||""}`,width:720,footer:null},{default:t(()=>[h.value?(r(),p("div",da,[e(Se,{column:2,size:"small",bordered:""},{default:t(()=>[e(A,{label:"ID",span:2},{default:t(()=>[v("span",pa,u(h.value.id),1)]),_:1}),e(A,{label:"代码哈希",span:2},{default:t(()=>[v("span",fa,u(h.value.codeHash),1)]),_:1}),h.value.generationId?(r(),x(A,{key:0,label:"生成 ID",span:2},{default:t(()=>[v("span",ca,u(h.value.generationId),1)]),_:1})):c("",!0),e(A,{label:"语言"},{default:t(()=>[h.value.language?(r(),x(N,{key:0,color:"blue"},{default:t(()=>[f(u(h.value.language),1)]),_:1})):(r(),p("span",ma,"—"))]),_:1}),e(A,{label:"审查时间"},{default:t(()=>[f(u(_(X)(h.value.reviewedAt)),1)]),_:1}),e(A,{label:"发现问题"},{default:t(()=>[f(u(h.value.issuesFound),1)]),_:1}),e(A,{label:"安全问题"},{default:t(()=>[v("span",{style:je({color:h.value.securityIssues>0?"#ff4d4f":"#52c41a"})},u(h.value.securityIssues),5)]),_:1})]),_:1}),o[40]||(o[40]=v("h4",{style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},"按严重度",-1)),(r(!0),p($,null,Q(_(se),a=>(r(),p("div",{key:a,class:"bd-row"},[e(N,{color:de(a),style:{"min-width":"70px","text-align":"center"}},{default:t(()=>[f(u(ue(a)),1)]),_:2},1032,["color"]),e(at,{percent:Ge(h.value.severitySummary[a]||0,h.value.issuesFound),"stroke-color":Le(a),format:()=>`${h.value.severitySummary[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),h.value.issuesDetail.length?(r(),p("h4",ya,"问题列表")):c("",!0),h.value.issuesDetail.length?(r(),x(lt,{key:1,size:"small","data-source":h.value.issuesDetail,pagination:{pageSize:8}},{renderItem:t(({item:a})=>[e(ot,null,{default:t(()=>[e(N,{color:de(a.severity),style:{"min-width":"60px","text-align":"center"}},{default:t(()=>[f(u(ue(a.severity)),1)]),_:2},1032,["color"]),v("span",va,u(a.rule),1),v("code",ga,u(te(a.match,60)),1)]),_:2},1024)]),_:1},8,["data-source"])):c("",!0)])):c("",!0)]),_:1},8,["open","title"])])}}},Ta=rt(_a,[["__scopeId","data-v-45239475"]]);export{Ta as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as O,_ as m,c as _}from"./useConfigInject-DIkkDpt1.js";import{_ as $}from"./index-Vit9TJBu.js";import{u as w,a as G}from"./index-Cqtt1N0F.js";import{d as I,c as R,j as g}from"./vendor-D0Qjn73K.js";function A(r){return typeof r=="number"?`${r} ${r} auto`:/^\d+(\.\d+)?(px|em|rem|%)$/.test(r)?`0 0 ${r}`:r}const E=()=>({span:[String,Number],order:[String,Number],offset:[String,Number],push:[String,Number],pull:[String,Number],xs:{type:[String,Number,Object],default:void 0},sm:{type:[String,Number,Object],default:void 0},md:{type:[String,Number,Object],default:void 0},lg:{type:[String,Number,Object],default:void 0},xl:{type:[String,Number,Object],default:void 0},xxl:{type:[String,Number,Object],default:void 0},prefixCls:String,flex:[String,Number]}),F=["xs","sm","md","lg","xl","xxl"],D=I({compatConfig:{MODE:3},name:"ACol",inheritAttrs:!1,props:E(),setup(r,b){let{slots:p,attrs:d}=b;const{gutter:S,supportFlexGap:h,wrap:x}=w(),{prefixCls:f,direction:y}=O("col",r),[N,v]=G(f),j=g(()=>{const{span:n,order:u,offset:s,push:o,pull:c}=r,t=f.value;let i={};return F.forEach(l=>{let e={};const a=r[l];typeof a=="number"?e.span=a:typeof a=="object"&&(e=a||{}),i=$($({},i),{[`${t}-${l}-${e.span}`]:e.span!==void 0,[`${t}-${l}-order-${e.order}`]:e.order||e.order===0,[`${t}-${l}-offset-${e.offset}`]:e.offset||e.offset===0,[`${t}-${l}-push-${e.push}`]:e.push||e.push===0,[`${t}-${l}-pull-${e.pull}`]:e.pull||e.pull===0,[`${t}-rtl`]:y.value==="rtl"})}),_(t,{[`${t}-${n}`]:n!==void 0,[`${t}-order-${u}`]:u,[`${t}-offset-${s}`]:s,[`${t}-push-${o}`]:o,[`${t}-pull-${c}`]:c},i,d.class,v.value)}),C=g(()=>{const{flex:n}=r,u=S.value,s={};if(u&&u[0]>0){const o=`${u[0]/2}px`;s.paddingLeft=o,s.paddingRight=o}if(u&&u[1]>0&&!h.value){const o=`${u[1]/2}px`;s.paddingTop=o,s.paddingBottom=o}return n&&(s.flex=A(n),x.value===!1&&!s.minWidth&&(s.minWidth=0)),s});return()=>{var n;return N(R("div",m(m({},d),{},{class:j.value,style:[C.value,d.style]}),[(n=p.default)===null||n===void 0?void 0:n.call(p)]))}}});export{D as C};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as bt}from"./ws-4ur1fGsk.js";import{S as wt,p as ht,a as Ct,b as zt,c as St}from"./community-parser-CO25nZFt.js";import{_ as $t}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as c}from"./index-BB5y5Y0z.js";import{_ as It,aB as At,ar as Ft,x as X,aC as Y,b as Z,M as Rt,aD as Tt,aE as Ut}from"./icons-CJACPYXu.js";import{r as _,l as Nt,F as d,D as m,c as e,x as a,q as u,v as l,J as p,u as f,H as I,L as Ot,m as A,N as Dt,I as v,G as k,j as tt,a as et}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 jt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},qt={key:0,style:{"text-align":"center",padding:"60px"}},Bt={key:1,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},Lt={key:2,class:"post-feed"},Pt={class:"post-head"},Mt={class:"post-meta"},Et={class:"post-author"},Vt={class:"post-time"},Kt={class:"post-body"},Ht={style:{color:"var(--text-primary)","font-weight":"500"}},Gt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Jt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={key:0,style:{color:"var(--text-primary)","font-weight":"500"}},Qt={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Xt={key:1,style:{color:"var(--text-muted)"}},Yt={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Zt={key:1,style:{color:"var(--text-muted)"}},te={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},ee={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ae={__name:"Community",setup(oe){const g=bt(),z=_(!1),N=_(!1),O=_(!1),D=_(""),C=_({...wt}),j=_([]),q=_([]),F=_([]),B=_("posts"),R=_(!1),T=_(!1),b=et({author:"",content:""}),i=et({name:"",did:"",email:"",notes:""}),at=[{title:"姓名",key:"name",dataIndex:"name",width:"160px"},{title:"DID",key:"did",dataIndex:"did"},{title:"邮箱",key:"email",dataIndex:"email",width:"200px"},{title:"创建时间",key:"createdAt",dataIndex:"createdAt",width:"160px"},{title:"操作",key:"action",width:"180px"}],ot=[{title:"联系人",key:"contact"},{title:"状态",key:"status",width:"120px"},{title:"建立时间",key:"createdAt",dataIndex:"createdAt",width:"160px"},{title:"操作",key:"action",width:"100px"}],nt=tt(()=>q.value.map(o=>{const t=j.value.find(s=>s.id===o.contactId);return{...o,contactName:t?t.name:""}})),st=tt(()=>new Set(q.value.map(o=>o.contactId)));function lt(o){return st.value.has(o)}function it(o){const t=["#1677ff","#52c41a","#722ed1","#faad14","#ff4d4f","#13c2c2","#eb2f96"];let s=0;for(let x=0;x<o.length;x++)s=s*31+o.charCodeAt(x)>>>0;return t[s%t.length]}function rt(o){return o?o.length>28?o.slice(0,16)+"..."+o.slice(-8):o:""}function P(o){if(!o)return"—";if(typeof o!="string")return String(o);const t=new Date(o);return isNaN(t.getTime())?o:t.toLocaleString("zh-CN",{hour12:!1})}function ct(o){return{accepted:"green",pending:"orange",blocked:"red"}[o]||"default"}function ut(o){return{accepted:"已接受",pending:"待处理",blocked:"已屏蔽"}[o]||o}async function w(){z.value=!0;try{const[o,t,s,x]=await Promise.all([g.execute("social stats --json",1e4).catch(()=>({output:""})),g.execute("social contact list --json",1e4).catch(()=>({output:""})),g.execute("social friend list --json",1e4).catch(()=>({output:""})),g.execute("social post list --json",1e4).catch(()=>({output:""}))]);C.value=ht(o.output),j.value=Ct(t.output),q.value=zt(s.output),F.value=St(x.output).sort((y,h)=>(h.createdAt||"").localeCompare(y.createdAt||""))}catch(o){c.error("加载社区数据失败: "+(o?.message||o))}finally{z.value=!1}}async function dt(){const o=b.content.trim();if(!o){c.warning("请输入帖子内容");return}N.value=!0;try{const t=o.replace(/"/g,'\\"'),s=b.author.trim(),x=s?`social post publish "${t}" --author "${s.replace(/"/g,'\\"')}"`:`social post publish "${t}"`,{output:y}=await g.execute(x,15e3);if(/error|失败/i.test(y)&&!/"id"/.test(y)){c.error("发布失败: "+y.slice(0,120));return}c.success("帖子已发布"),R.value=!1,M(),await w()}catch(t){c.error("发布失败: "+(t?.message||t))}finally{N.value=!1}}async function pt(){const o=i.name.trim();if(!o){c.warning("请输入联系人姓名");return}O.value=!0;try{const t=[`social contact add "${o.replace(/"/g,'\\"')}"`];i.did.trim()&&t.push(`--did "${i.did.trim().replace(/"/g,'\\"')}"`),i.email.trim()&&t.push(`--email "${i.email.trim().replace(/"/g,'\\"')}"`),i.notes.trim()&&t.push(`--notes "${i.notes.trim().replace(/"/g,'\\"')}"`);const{output:s}=await g.execute(t.join(" "),15e3);if(/error|失败/i.test(s)&&!/"id"/.test(s)){c.error("添加失败: "+s.slice(0,120));return}c.success("联系人已添加"),T.value=!1,E(),await w()}catch(t){c.error("添加失败: "+(t?.message||t))}finally{O.value=!1}}async function mt(o){try{const{output:t}=await g.execute(`social contact delete ${o.id}`,1e4);if(/error|失败/i.test(t)){c.error("删除失败: "+t.slice(0,120));return}c.success("联系人已删除"),await w()}catch(t){c.error("删除失败: "+(t?.message||t))}}async function ft(o){D.value=o.id;try{const{output:t}=await g.execute(`social friend add ${o.id}`,1e4);if(/error|失败/i.test(t)&&!/"id"/.test(t)){c.error("好友请求失败: "+t.slice(0,120));return}c.success("好友请求已发送"),await w(),B.value="friends"}catch(t){c.error("好友请求失败: "+(t?.message||t))}finally{D.value=""}}async function vt(o){try{const{output:t}=await g.execute(`social friend remove ${o.contactId}`,1e4);if(/error|失败/i.test(t)){c.error("移除失败: "+t.slice(0,120));return}c.success("已移除好友"),await w()}catch(t){c.error("移除失败: "+(t?.message||t))}}async function yt(o){try{await g.execute(`social post like ${o.id}`,1e4),o.likes++,w()}catch(t){c.error("点赞失败: "+(t?.message||t))}}function M(){b.author="",b.content=""}function E(){i.name="",i.did="",i.email="",i.notes=""}return Nt(w),(o,t)=>{const s=u("a-button"),x=u("a-space"),y=u("a-statistic"),h=u("a-card"),$=u("a-col"),_t=u("a-row"),gt=u("a-spin"),xt=u("a-avatar"),L=u("a-tab-pane"),V=u("a-tag"),K=u("a-popconfirm"),H=u("a-table"),kt=u("a-tabs"),U=u("a-input"),S=u("a-form-item"),G=u("a-textarea"),J=u("a-form"),W=u("a-modal");return l(),d("div",null,[m("div",jt,[t[14]||(t[14]=m("div",null,[m("h2",{class:"page-title"},"社区"),m("p",{class:"page-sub"},"联系人 · 好友 · 帖子(去中心化社交平台)")],-1)),e(x,null,{default:a(()=>[e(s,{loading:z.value,onClick:w},{icon:a(()=>[e(f(It))]),default:a(()=>[t[11]||(t[11]=p(" 刷新 ",-1))]),_:1},8,["loading"]),e(s,{type:"primary",onClick:t[0]||(t[0]=n=>R.value=!0)},{icon:a(()=>[e(f(At))]),default:a(()=>[t[12]||(t[12]=p(" 发布帖子 ",-1))]),_:1}),e(s,{onClick:t[1]||(t[1]=n=>T.value=!0)},{icon:a(()=>[e(f(Ft))]),default:a(()=>[t[13]||(t[13]=p(" 添加联系人 ",-1))]),_:1})]),_:1})]),e(_t,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"联系人",value:C.value.contacts,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[e(f(X))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"好友",value:C.value.friends,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[e(f(Y))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"帖子",value:C.value.posts,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[e(f(Z))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:12,sm:8,lg:5},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"消息",value:C.value.messages,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[e(f(Rt))]),_:1},8,["value"])]),_:1})]),_:1}),e($,{xs:24,sm:8,lg:4},{default:a(()=>[e(h,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e(y,{title:"待处理请求",value:C.value.pendingRequests,"value-style":{color:C.value.pendingRequests>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:a(()=>[e(f(Tt))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),e(kt,{activeKey:B.value,"onUpdate:activeKey":t[2]||(t[2]=n=>B.value=n),class:"community-tabs"},{default:a(()=>[e(L,{key:"posts",tab:"帖子"},{default:a(()=>[z.value&&!F.value.length?(l(),d("div",qt,[e(gt,{size:"large"})])):F.value.length?(l(),d("div",Lt,[(l(!0),d(I,null,Ot(F.value,n=>(l(),A(h,{key:n.key,class:"post-card","body-style":{padding:"16px"}},{default:a(()=>[m("div",Pt,[e(xt,{style:Dt({backgroundColor:it(n.author)})},{default:a(()=>[p(v(n.author.slice(0,1).toUpperCase()),1)]),_:2},1032,["style"]),m("div",Mt,[m("div",Et,v(n.author),1),m("div",Vt,v(P(n.createdAt)),1)]),e(s,{size:"small",type:"text",onClick:r=>yt(n)},{icon:a(()=>[e(f(Ut))]),default:a(()=>[p(" "+v(n.likes),1)]),_:2},1032,["onClick"])]),m("div",Kt,v(n.content),1)]),_:2},1024))),128))])):(l(),d("div",Bt,[e(f(Z),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),t[15]||(t[15]=p(' 暂无帖子,点击"发布帖子"创建第一条 ',-1))]))]),_:1}),e(L,{key:"friends",tab:"好友"},{default:a(()=>[e(H,{columns:ot,"data-source":nt.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:z.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:r})=>[n.key==="contact"?(l(),d(I,{key:0},[m("span",Ht,v(r.contactName||r.contactId),1),r.contactName?(l(),d("div",Gt,v(r.contactId),1)):k("",!0)],64)):k("",!0),n.key==="status"?(l(),A(V,{key:1,color:ct(r.status)},{default:a(()=>[p(v(ut(r.status)),1)]),_:2},1032,["color"])):k("",!0),n.key==="action"?(l(),A(K,{key:2,title:"移除该好友?","ok-text":"移除","cancel-text":"取消",onConfirm:Q=>vt(r)},{default:a(()=>[e(s,{size:"small",type:"link",danger:""},{default:a(()=>[...t[16]||(t[16]=[p("移除",-1)])]),_:1})]),_:1},8,["onConfirm"])):k("",!0)]),emptyText:a(()=>[m("div",Jt,[e(f(Y),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),t[17]||(t[17]=p(' 暂无好友。在"联系人"标签页给联系人发送好友请求。 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),e(L,{key:"contacts",tab:"联系人"},{default:a(()=>[e(H,{columns:at,"data-source":j.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:z.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:r})=>[n.key==="name"?(l(),d("span",Wt,v(r.name),1)):k("",!0),n.key==="did"?(l(),d(I,{key:1},[r.did?(l(),d("span",Qt,v(rt(r.did)),1)):(l(),d("span",Xt,"—"))],64)):k("",!0),n.key==="email"?(l(),d(I,{key:2},[r.email?(l(),d("span",Yt,v(r.email),1)):(l(),d("span",Zt,"—"))],64)):k("",!0),n.key==="createdAt"?(l(),d("span",te,v(P(r.createdAt)),1)):k("",!0),n.key==="action"?(l(),d(I,{key:4},[lt(r.id)?(l(),A(V,{key:1,color:"green",style:{"font-size":"11px"}},{default:a(()=>[...t[19]||(t[19]=[p("已是好友",-1)])]),_:1})):(l(),A(s,{key:0,size:"small",type:"link",loading:D.value===r.id,onClick:Q=>ft(r)},{default:a(()=>[...t[18]||(t[18]=[p(" 添加好友 ",-1)])]),_:1},8,["loading","onClick"])),e(K,{title:"删除该联系人?","ok-text":"删除","cancel-text":"取消",onConfirm:Q=>mt(r)},{default:a(()=>[e(s,{size:"small",type:"link",danger:"",style:{"margin-left":"4px"}},{default:a(()=>[...t[20]||(t[20]=[p("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])],64)):k("",!0)]),emptyText:a(()=>[m("div",ee,[e(f(X),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),t[21]||(t[21]=p(' 暂无联系人,点击"添加联系人"创建 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),e(W,{open:R.value,"onUpdate:open":t[5]||(t[5]=n=>R.value=n),title:"发布帖子","confirm-loading":N.value,"ok-text":"发布","cancel-text":"取消",onOk:dt,onCancel:M},{default:a(()=>[e(J,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[e(S,{label:"作者"},{default:a(()=>[e(U,{value:b.author,"onUpdate:value":t[3]||(t[3]=n=>b.author=n),placeholder:"可选,留空则使用 cli-user"},null,8,["value"])]),_:1}),e(S,{label:"内容",required:""},{default:a(()=>[e(G,{value:b.content,"onUpdate:value":t[4]||(t[4]=n=>b.content=n),placeholder:"说点什么...","auto-size":{minRows:4,maxRows:10},maxlength:2e3,"show-count":""},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),e(W,{open:T.value,"onUpdate:open":t[10]||(t[10]=n=>T.value=n),title:"添加联系人","confirm-loading":O.value,"ok-text":"添加","cancel-text":"取消",onOk:pt,onCancel:E},{default:a(()=>[e(J,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[e(S,{label:"姓名",required:""},{default:a(()=>[e(U,{value:i.name,"onUpdate:value":t[6]||(t[6]=n=>i.name=n),placeholder:"联系人显示名称"},null,8,["value"])]),_:1}),e(S,{label:"DID"},{default:a(()=>[e(U,{value:i.did,"onUpdate:value":t[7]||(t[7]=n=>i.did=n),placeholder:"did:key:... (可选)"},null,8,["value"])]),_:1}),e(S,{label:"邮箱"},{default:a(()=>[e(U,{value:i.email,"onUpdate:value":t[8]||(t[8]=n=>i.email=n),placeholder:"可选"},null,8,["value"])]),_:1}),e(S,{label:"备注"},{default:a(()=>[e(G,{value:i.notes,"onUpdate:value":t[9]||(t[9]=n=>i.notes=n),"auto-size":{minRows:2,maxRows:4}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},ye=$t(ae,[["__scopeId","data-v-b46c1c9f"]]);export{ye as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-b46c1c9f]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-b46c1c9f]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.community-tabs[data-v-b46c1c9f] .ant-tabs-nav{margin-bottom:16px}.post-feed[data-v-b46c1c9f]{display:grid;gap:12px}.post-card[data-v-b46c1c9f]{background:var(--bg-card);border-color:var(--border-color)}.post-head[data-v-b46c1c9f]{display:flex;align-items:center;gap:12px;margin-bottom:10px}.post-meta[data-v-b46c1c9f]{flex:1;min-width:0}.post-author[data-v-b46c1c9f]{color:var(--text-primary);font-weight:600;font-size:13px}.post-time[data-v-b46c1c9f]{color:var(--text-secondary);font-size:11px;margin-top:1px}.post-body[data-v-b46c1c9f]{color:var(--text-primary);font-size:13px;line-height:1.6;white-space:pre-wrap;word-break:break-word}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{g as j,c as x,d as k,t as D,_ as I}from"./useConfigInject-DIkkDpt1.js";import{c as _}from"./createContext-Blw2vgkG.js";import{n as S,t as v}from"./index-Vit9TJBu.js";import{P as y}from"./index-U4Zd5IK6.js";import{i as A,a as N,b as O,c as T,d as L,g as w,e as F,f as B}from"./_getTag-CWA3v-Ds.js";import{j as i,d as g,c as b}from"./vendor-D0Qjn73K.js";const E=t=>{const{componentCls:o}=t;return{[o]:{display:"inline-flex","&-block":{display:"flex",width:"100%"},"&-vertical":{flexDirection:"column"}}}},H=t=>{const{componentCls:o}=t;return{[o]:{display:"inline-flex","&-rtl":{direction:"rtl"},"&-vertical":{flexDirection:"column"},"&-align":{flexDirection:"column","&-center":{alignItems:"center"},"&-start":{alignItems:"flex-start"},"&-end":{alignItems:"flex-end"},"&-baseline":{alignItems:"baseline"}},[`${o}-item`]:{"&:empty":{display:"none"}}}}},K=j("Space",t=>[H(t),E(t)]);var M="[object Map]",R="[object Set]",V=Object.prototype,q=V.hasOwnProperty;function h(t){if(t==null)return!0;if(A(t)&&(N(t)||typeof t=="string"||typeof t.splice=="function"||O(t)||T(t)||L(t)))return!t.length;var o=w(t);if(o==M||o==R)return!t.size;if(F(t))return!B(t).length;for(var e in t)if(q.call(t,e))return!1;return!0}const G=()=>({compactSize:String,compactDirection:y.oneOf(v("horizontal","vertical")).def("horizontal"),isFirstItem:S(),isLastItem:S()}),s=_(null),et=(t,o)=>{const e=s.useInject(),a=i(()=>{if(!e||h(e))return"";const{compactDirection:r,isFirstItem:l,isLastItem:n}=e,c=r==="vertical"?"-vertical-":"-";return x({[`${t.value}-compact${c}item`]:!0,[`${t.value}-compact${c}first-item`]:l,[`${t.value}-compact${c}last-item`]:n,[`${t.value}-compact${c}item-rtl`]:o.value==="rtl"})});return{compactSize:i(()=>e?.compactSize),compactDirection:i(()=>e?.compactDirection),compactItemClassnames:a}},ot=g({name:"NoCompactStyle",setup(t,o){let{slots:e}=o;return s.useProvide(null),()=>{var a;return(a=e.default)===null||a===void 0?void 0:a.call(e)}}}),J=()=>({prefixCls:String,size:{type:String},direction:y.oneOf(v("horizontal","vertical")).def("horizontal"),align:y.oneOf(v("start","end","center","baseline")),block:{type:Boolean,default:void 0}}),Q=g({name:"CompactItem",props:G(),setup(t,o){let{slots:e}=o;return s.useProvide(t),()=>{var a;return(a=e.default)===null||a===void 0?void 0:a.call(e)}}}),at=g({name:"ASpaceCompact",inheritAttrs:!1,props:J(),setup(t,o){let{attrs:e,slots:a}=o;const{prefixCls:r,direction:l}=k("space-compact",t),n=s.useInject(),[c,$]=K(r),z=i(()=>x(r.value,$.value,{[`${r.value}-rtl`]:l.value==="rtl",[`${r.value}-block`]:t.block,[`${r.value}-vertical`]:t.direction==="vertical"}));return()=>{var m;const p=D(((m=a.default)===null||m===void 0?void 0:m.call(a))||[]);return p.length===0?null:c(b("div",I(I({},e),{},{class:[z.value,e.class]}),[p.map((u,d)=>{var f;const P=u&&u.key||`${r.value}-item-${d}`,C=!n||h(n);return b(Q,{key:P,compactSize:(f=t.size)!==null&&f!==void 0?f:"middle",compactDirection:t.direction,isFirstItem:d===0&&(C||n?.isFirstItem),isLastItem:d===p.length-1&&(C||n?.isLastItem)},{default:()=>[u]})})]))}}});export{at as C,ot as N,K as a,et as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as we}from"./ws-4ur1fGsk.js";import{s as $e}from"./community-parser-CO25nZFt.js";import{_ as qe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as v}from"./index-BB5y5Y0z.js";import{_ as Ee,ah as Me,aR as Pe,at as De,aQ as Je,r as Ve,o as de,H as Ke,aG as pe,aa as We,A as Ge}from"./icons-CJACPYXu.js";import{l as He,F as c,D as _,c as o,x as a,m as x,G as y,q as d,r as b,v as s,J as m,u as g,H as O,L as E,I as p,N as ye,j as V,a as oe}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";function M(t){const r=$e(t);if(!r)return null;try{return JSON.parse(r)}catch{}const i=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const Xe=Object.freeze(["file-md5","file-sha1","file-sha256","file-sha512","ipv4","ipv6","domain","url","email"]);function A(t,r=0){return typeof t=="number"&&Number.isFinite(t)?t:r}function fe(t,r=0){if(!t||typeof t!="object")return null;const i=t.id||"";if(!i)return null;const U=Array.isArray(t.labels)?t.labels:[];return{key:i,id:i,type:String(t.type||""),value:String(t.value||""),labels:U,confidence:t.confidence!=null?A(t.confidence,null):null,sourceId:t.sourceId??t.source_id??null,sourceName:t.sourceName??t.source_name??null,validFrom:t.validFrom??t.valid_from??null,validUntil:t.validUntil??t.valid_until??null,firstSeenAt:t.firstSeenAt??t.first_seen_at??null,lastSeenAt:t.lastSeenAt??t.last_seen_at??null,_idx:r}}function Ye(t){const r=M(t);return Array.isArray(r)?r.map(fe).filter(Boolean):[]}function Qe(t){const r=M(t);return!r||typeof r!="object"||Array.isArray(r)?null:{matched:!!r.matched,type:String(r.type||"unknown"),indicator:r.indicator?fe(r.indicator):null}}function Ze(t){const r={total:0,byType:{}},i=M(t);if(!i||typeof i!="object"||Array.isArray(i))return r;if(r.total=A(i.total,0),i.byType&&typeof i.byType=="object")for(const[U,j]of Object.entries(i.byType))typeof j=="number"&&Number.isFinite(j)&&(r.byType[U]=j);return r}function et(t,r=0){if(!t||typeof t!="object")return null;const i=t.entity||"";return i?{key:i,entity:i,eventCount:A(t.eventCount??t.event_count,0),failureRate:A(t.failureRate??t.failure_rate,0),uniqueResources:A(t.uniqueResources??t.unique_resources,0),uniqueActions:A(t.uniqueActions??t.unique_actions,0),burstiness:A(t.burstiness,0),riskScore:A(t.riskScore??t.risk_score,0),_idx:r}:null}function tt(t){const r=M(t);return Array.isArray(r)?r.map(et).filter(Boolean):[]}function ot(t,r=0){return!t||typeof t!="object"?null:{key:r,score:A(t.score,0),reasons:Array.isArray(t.reasons)?t.reasons:[],event:t.event&&typeof t.event=="object"?t.event:null,_idx:r}}function at(t){const r=M(t);return Array.isArray(r)?r.map(ot).filter(Boolean):[]}function ae(t){if(!t)return{noAuditLog:!1,error:""};const r=/no such table:\s*audit_log/i.test(t),i=t.match(/Failed:\s*(.+?)(?:\r?\n|$)/i);return{noAuditLog:r,error:i?i[1].trim():""}}function nt(t){if(t==null||t==="")return"—";const r=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(r.getTime())?String(t):r.toLocaleString("zh-CN",{hour12:!1})}const lt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},rt={class:"filter-bar"},st={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px","word-break":"break-all"}},it={key:0,style:{color:"var(--text-muted)"}},ut={key:1,style:{color:"var(--text-muted)"}},ct={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},dt={key:1,style:{color:"var(--text-muted)"}},pt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},yt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={style:{color:"var(--text-primary)",margin:"16px 0 8px","font-size":"14px"}},mt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},vt={key:2,style:{color:"var(--text-secondary)"}},_t={key:5,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},bt={style:{padding:"30px",color:"var(--text-muted)","text-align":"center"}},gt={key:2,style:{color:"var(--text-primary)",margin:"24px 0 8px","font-size":"14px"}},xt={style:{flex:"1"}},kt={style:{display:"flex",gap:"8px","align-items":"center"}},ht={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},zt={key:1,style:{color:"var(--text-secondary)","font-size":"11px"}},At={key:0,style:{"margin-top":"4px"}},St={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-secondary)"}},Ct={key:0,style:{"margin-top":"12px","font-size":"12px"}},Tt={style:{color:"var(--text-secondary)"}},Ot={style:{color:"var(--text-secondary)"}},Ut={key:0,style:{"margin-top":"4px"}},jt={__name:"Compliance",setup(t){const r=we(),i=b(!1),U=b(!1),j=b(!1),K=b(!1),W=b([]),B=b({total:0,byType:{}}),L=b([]),I=b([]),S=b({noAuditLog:!1,error:""}),P=b("threat"),D=b(""),G=b(!1),w=b(!1),$=b(!1),H=oe({observable:""}),k=b(null),C=oe({entity:"",days:30}),h=oe({entity:"",threshold:.7,days:1}),me=[{title:"类型",key:"type",width:"120px"},{title:"值",key:"value"},{title:"标签",key:"labels",width:"160px"},{title:"置信度",key:"confidence",width:"90px"},{title:"来源",key:"source",width:"160px"},{title:"最近见到",key:"lastSeen",width:"160px"},{title:"操作",key:"action",width:"90px"}],ve=[{title:"实体",key:"entity",width:"180px"},{title:"风险分",key:"riskScore"},{title:"事件数",key:"eventCount",width:"90px"},{title:"失败率",key:"failureRate",width:"90px"},{title:"资源数",key:"uniqueResources",width:"90px"},{title:"突发度",key:"burstiness",width:"90px"}],_e=V(()=>D.value?W.value.filter(l=>l.type===D.value):W.value),be=V(()=>Object.keys(B.value.byType).length),ge=V(()=>Object.entries(B.value.byType).sort((l,e)=>e[1]-l[1])),ne=V(()=>L.value.filter(l=>l.riskScore>=70).length),xe={ipv4:"blue",ipv6:"cyan",domain:"purple",url:"magenta",email:"gold","file-md5":"orange","file-sha1":"orange","file-sha256":"red","file-sha512":"red",unknown:"default"};function X(l){return xe[l]||"default"}function ke(l){return l>=80?"#ff4d4f":l>=50?"#faad14":"#52c41a"}function le(l){return l>=70?"#ff4d4f":l>=40?"#faad14":"#52c41a"}function he(l,e){return l?l.length>e?l.slice(0,e)+"...":l:""}function ze({key:l}){l==="match"?(k.value=null,G.value=!0):l==="ueba-build"?w.value=!0:l==="ueba-analyze"&&($.value=!0)}async function J(){i.value=!0;try{const[l,e,f]=await Promise.all([r.execute("compliance threat-intel list --limit 200 --json",1e4).catch(()=>({output:""})),r.execute("compliance threat-intel stats --json",8e3).catch(()=>({output:""})),r.execute("compliance ueba top --top-k 20 --json",1e4).catch(()=>({output:""}))]);W.value=Ye(l.output),B.value=Ze(e.output),S.value=ae(f.output),L.value=S.value.noAuditLog?[]:tt(f.output)}catch(l){v.error("加载合规数据失败: "+(l?.message||l))}finally{i.value=!1}}async function Ae(){const l=H.observable.trim();if(!l){v.warning("请输入要匹配的可观测值");return}U.value=!0,k.value=null;try{const e=`compliance threat-intel match "${l.replace(/"/g,'\\"')}" --json`,{output:f}=await r.execute(e,8e3),z=Qe(f);if(!z){v.error("匹配失败: "+f.slice(0,120));return}k.value=z,z.matched?v.warning(`命中威胁指标 (${z.type})`):z.type==="unknown"?v.info("无法识别该可观测值类型"):v.success(`未命中(已识别为 ${z.type})`)}catch(e){v.error("匹配失败: "+(e?.message||e))}finally{U.value=!1}}async function Se(l){try{const e=`compliance threat-intel remove ${l.type} "${l.value.replace(/"/g,'\\"')}" --json`,{output:f}=await r.execute(e,8e3);if(/error|失败/i.test(f)&&!/"removed"/.test(f)){v.error("删除失败: "+f.slice(0,120));return}v.success("指标已删除"),await J()}catch(e){v.error("删除失败: "+(e?.message||e))}}async function Ce(){j.value=!0;try{const l=["compliance ueba baseline"];C.entity.trim()&&l.push(`--entity "${C.entity.trim().replace(/"/g,'\\"')}"`),C.days!=null&&l.push(`--days ${C.days}`),l.push("--json");const{output:e}=await r.execute(l.join(" "),3e4),f=ae(e);if(f.noAuditLog){S.value=f,v.warning("audit_log 表为空,无法构建基线"),w.value=!1;return}if(f.error){v.error("构建失败: "+f.error);return}v.success("基线已构建"),w.value=!1,P.value="ueba",await J()}catch(l){v.error("构建失败: "+(l?.message||l))}finally{j.value=!1}}async function Te(){K.value=!0;try{const l=["compliance ueba analyze"];h.entity.trim()&&l.push(`--entity "${h.entity.trim().replace(/"/g,'\\"')}"`),h.threshold!=null&&l.push(`--threshold ${h.threshold}`),h.days!=null&&l.push(`--days ${h.days}`),l.push("--json");const{output:e}=await r.execute(l.join(" "),3e4),f=ae(e);if(f.noAuditLog){S.value=f,v.warning("audit_log 表为空,无可分析事件"),$.value=!1;return}if(f.error&&!e.includes("[")){v.error("分析失败: "+f.error);return}I.value=at(e),v.success(`分析完成,发现 ${I.value.length} 个异常`),$.value=!1,P.value="ueba"}catch(l){v.error("分析失败: "+(l?.message||l))}finally{K.value=!1}}return He(J),(l,e)=>{const f=d("a-button"),z=d("a-menu-item"),Oe=d("a-menu"),Ue=d("a-dropdown"),re=d("a-space"),R=d("a-statistic"),N=d("a-card"),q=d("a-col"),je=d("a-row"),T=d("a-tag"),se=d("a-radio-button"),Ie=d("a-radio-group"),Ne=d("a-popconfirm"),ie=d("a-table"),ue=d("a-tab-pane"),ce=d("a-alert"),Re=d("a-progress"),Fe=d("a-list-item"),Be=d("a-list"),Le=d("a-tabs"),Y=d("a-input"),F=d("a-form-item"),Q=d("a-form"),Z=d("a-modal"),ee=d("a-input-number");return s(),c("div",null,[_("div",lt,[e[18]||(e[18]=_("div",null,[_("h2",{class:"page-title"},"合规与威胁情报"),_("p",{class:"page-sub"},"威胁指标 (IoC) · 用户行为分析 (UEBA)")],-1)),o(re,null,{default:a(()=>[o(f,{loading:i.value,onClick:J},{icon:a(()=>[o(g(Ee))]),default:a(()=>[e[11]||(e[11]=m(" 刷新 ",-1))]),_:1},8,["loading"]),o(Ue,{trigger:["click"]},{overlay:a(()=>[o(Oe,{onClick:ze},{default:a(()=>[o(z,{key:"match"},{default:a(()=>[o(g(Pe)),e[13]||(e[13]=m(" 匹配指标",-1))]),_:1}),o(z,{key:"ueba-build"},{default:a(()=>[o(g(De)),e[14]||(e[14]=m(" 构建基线",-1))]),_:1}),o(z,{key:"ueba-analyze"},{default:a(()=>[o(g(Je)),e[15]||(e[15]=m(" 行为分析",-1))]),_:1}),o(z,{key:"import",disabled:""},{default:a(()=>[o(g(Ve)),e[16]||(e[16]=m(" 导入 STIX bundle ",-1)),e[17]||(e[17]=_("span",{style:{color:"var(--text-muted)","font-size":"11px","margin-left":"6px"}},"(CLI 端)",-1))]),_:1})]),_:1})]),default:a(()=>[o(f,{type:"primary"},{icon:a(()=>[o(g(Me))]),default:a(()=>[e[12]||(e[12]=m(" 操作 ▼ ",-1))]),_:1})]),_:1})]),_:1})]),o(je,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"IoC 总数",value:B.value.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[o(g(de))]),_:1},8,["value"])]),_:1})]),_:1}),o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"IoC 类型",value:be.value,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[o(g(Ke))]),_:1},8,["value"])]),_:1})]),_:1}),o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"风险实体",value:L.value.length,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[o(g(pe))]),_:1},8,["value"])]),_:1})]),_:1}),o(q,{xs:12,sm:8,lg:5},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"高风险 (≥70)",value:ne.value,"value-style":{color:ne.value>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:a(()=>[o(g(We))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),o(q,{xs:24,sm:8,lg:4},{default:a(()=>[o(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(R,{title:"近期异常",value:I.value.length,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[o(g(Ge))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),B.value.total>0?(s(),x(N,{key:0,title:"IoC 类型分布",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[o(re,{size:[12,8],wrap:""},{default:a(()=>[(s(!0),c(O,null,E(ge.value,([n,u])=>(s(),x(T,{key:n,color:X(n)},{default:a(()=>[m(p(n)+": "+p(u),1)]),_:2},1032,["color"]))),128))]),_:1})]),_:1})):y("",!0),o(Le,{activeKey:P.value,"onUpdate:activeKey":e[1]||(e[1]=n=>P.value=n),class:"compliance-tabs"},{default:a(()=>[o(ue,{key:"threat",tab:"威胁情报"},{default:a(()=>[_("div",rt,[o(Ie,{value:D.value,"onUpdate:value":e[0]||(e[0]=n=>D.value=n),size:"small"},{default:a(()=>[o(se,{value:""},{default:a(()=>[...e[19]||(e[19]=[m("全部",-1)])]),_:1}),(s(!0),c(O,null,E(g(Xe),n=>(s(),x(se,{key:n,value:n},{default:a(()=>[m(p(n),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(ie,{columns:me,"data-source":_e.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",loading:i.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="type"?(s(),x(T,{key:0,color:X(u.type),style:{"font-family":"monospace"}},{default:a(()=>[m(p(u.type),1)]),_:2},1032,["color"])):y("",!0),n.key==="value"?(s(),c("span",st,p(he(u.value,64)),1)):y("",!0),n.key==="labels"?(s(),c(O,{key:2},[(s(!0),c(O,null,E(u.labels,te=>(s(),x(T,{key:te,color:"orange",style:{"font-size":"10px",margin:"1px"}},{default:a(()=>[m(p(te),1)]),_:2},1024))),128)),u.labels.length?y("",!0):(s(),c("span",it,"—"))],64)):y("",!0),n.key==="confidence"?(s(),c(O,{key:3},[u.confidence!=null?(s(),c("span",{key:0,style:ye({color:ke(u.confidence),fontWeight:500})},p(u.confidence),5)):(s(),c("span",ut,"—"))],64)):y("",!0),n.key==="source"?(s(),c(O,{key:4},[u.sourceName?(s(),c("span",ct,p(u.sourceName),1)):(s(),c("span",dt,"—"))],64)):y("",!0),n.key==="lastSeen"?(s(),c("span",pt,p(g(nt)(u.lastSeenAt)),1)):y("",!0),n.key==="action"?(s(),x(Ne,{key:6,title:"删除该指标?","ok-text":"删除","cancel-text":"取消",onConfirm:te=>Se(u)},{default:a(()=>[o(f,{size:"small",type:"link",danger:""},{default:a(()=>[...e[20]||(e[20]=[m("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])):y("",!0)]),emptyText:a(()=>[_("div",yt,[o(g(de),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),e[21]||(e[21]=m(" 暂无威胁指标。需通过 CLI 导入 STIX bundle: ",-1)),e[22]||(e[22]=_("code",{style:{"font-size":"11px"}},"cc compliance threat-intel import <file.json>",-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ue,{key:"ueba",tab:"行为分析 (UEBA)"},{default:a(()=>[S.value.noAuditLog?(s(),x(ce,{key:0,type:"info","show-icon":"",message:"尚无审计日志",description:"UEBA 基于 audit_log 表的审计事件。先在桌面端或 CLI 触发一些受审计的操作(如 cc auth login / cc note add),再回来运行「构建基线」。",style:{"margin-bottom":"16px"}})):S.value.error?(s(),x(ce,{key:1,type:"error","show-icon":"",message:`UEBA 错误:${S.value.error}`,style:{"margin-bottom":"16px"}},null,8,["message"])):y("",!0),_("h3",ft,"高风险实体 (Top "+p(L.value.length)+")",1),o(ie,{columns:ve,"data-source":L.value,pagination:!1,size:"small",loading:i.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:n,record:u})=>[n.key==="entity"?(s(),c("span",mt,p(u.entity),1)):y("",!0),n.key==="riskScore"?(s(),x(Re,{key:1,percent:Math.min(u.riskScore,100),"stroke-color":le(u.riskScore),size:"small",format:()=>u.riskScore.toFixed(1)},null,8,["percent","stroke-color","format"])):y("",!0),n.key==="eventCount"?(s(),c("span",vt,p(u.eventCount),1)):y("",!0),n.key==="failureRate"?(s(),c("span",{key:3,style:ye({color:u.failureRate>.3?"#ff4d4f":"var(--text-secondary)",fontFamily:"monospace"})},p((u.failureRate*100).toFixed(1))+"% ",5)):y("",!0),n.key==="uniqueResources"?(s(),x(T,{key:4,color:"cyan",style:{"font-size":"11px"}},{default:a(()=>[m(p(u.uniqueResources),1)]),_:2},1024)):y("",!0),n.key==="burstiness"?(s(),c("span",_t,p((u.burstiness*100).toFixed(0))+"% ",1)):y("",!0)]),emptyText:a(()=>[_("div",bt,[o(g(pe),{style:{"font-size":"32px","margin-bottom":"8px",display:"block"}}),m(" "+p(S.value.noAuditLog?"审计日志为空,无可分析实体":"暂无风险实体"),1)])]),_:1},8,["data-source","loading"]),I.value.length?(s(),c("h3",gt," 近期异常 ("+p(I.value.length)+") ",1)):y("",!0),I.value.length?(s(),x(Be,{key:3,size:"small","data-source":I.value,locale:{emptyText:"无异常"}},{renderItem:a(({item:n})=>[o(Fe,{style:{background:"var(--bg-card)",padding:"10px 16px"}},{default:a(()=>[_("div",xt,[_("div",kt,[o(T,{color:le(n.score*100)},{default:a(()=>[m("score "+p(n.score.toFixed(2)),1)]),_:2},1032,["color"]),n.event?.entity?(s(),c("span",ht,p(n.event.entity),1)):y("",!0),n.event?.action?(s(),c("span",zt," → "+p(n.event.action),1)):y("",!0)]),n.reasons.length?(s(),c("div",At,[(s(!0),c(O,null,E(n.reasons,u=>(s(),x(T,{key:u,color:"volcano",style:{"font-size":"10px",margin:"1px"}},{default:a(()=>[m(p(u),1)]),_:2},1024))),128))])):y("",!0)])]),_:2},1024)]),_:1},8,["data-source"])):y("",!0)]),_:1})]),_:1},8,["activeKey"]),o(Z,{open:G.value,"onUpdate:open":e[3]||(e[3]=n=>G.value=n),title:"匹配威胁指标","confirm-loading":U.value,width:500,"ok-text":"匹配","cancel-text":"关闭",onOk:Ae},{default:a(()=>[o(Q,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(F,{label:"可观测值",required:""},{default:a(()=>[o(Y,{value:H.observable,"onUpdate:value":e[2]||(e[2]=n=>H.observable=n),placeholder:"IP / 域名 / URL / 邮箱 / 文件哈希","allow-clear":""},null,8,["value"])]),_:1})]),_:1}),k.value?(s(),x(N,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:a(()=>[o(R,{title:"匹配结果",value:k.value.matched?"命中":"未命中","value-style":{color:k.value.matched?"#ff4d4f":"#52c41a"}},null,8,["value","value-style"]),_("div",St,[e[23]||(e[23]=m(" 检测类型: ",-1)),o(T,{color:X(k.value.type)},{default:a(()=>[m(p(k.value.type),1)]),_:1},8,["color"])]),k.value.indicator?(s(),c("div",Ct,[_("div",Tt,"来源: "+p(k.value.indicator.sourceName||"—"),1),_("div",Ot,"置信度: "+p(k.value.indicator.confidence??"—"),1),k.value.indicator.labels.length?(s(),c("div",Ut,[(s(!0),c(O,null,E(k.value.indicator.labels,n=>(s(),x(T,{key:n,color:"orange",style:{"font-size":"10px"}},{default:a(()=>[m(p(n),1)]),_:2},1024))),128))])):y("",!0)])):y("",!0)]),_:1})):y("",!0)]),_:1},8,["open","confirm-loading"]),o(Z,{open:w.value,"onUpdate:open":e[6]||(e[6]=n=>w.value=n),title:"构建 UEBA 基线","confirm-loading":j.value,width:480,"ok-text":"构建","cancel-text":"取消",onOk:Ce},{default:a(()=>[o(Q,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:a(()=>[o(F,{label:"实体(可选)"},{default:a(()=>[o(Y,{value:C.entity,"onUpdate:value":e[4]||(e[4]=n=>C.entity=n),placeholder:"留空则全量"},null,8,["value"])]),_:1}),o(F,{label:"天数"},{default:a(()=>[o(ee,{value:C.days,"onUpdate:value":e[5]||(e[5]=n=>C.days=n),min:1,max:365,placeholder:"例如 30",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),e[24]||(e[24]=_("p",{style:{color:"var(--text-secondary)","font-size":"12px",margin:"0"}}," 从 audit_log 读取最近 N 天的事件,按实体计算事件计数 / 失败率 / 资源覆盖等基线指标。 ",-1))]),_:1},8,["open","confirm-loading"]),o(Z,{open:$.value,"onUpdate:open":e[10]||(e[10]=n=>$.value=n),title:"运行行为分析","confirm-loading":K.value,width:480,"ok-text":"分析","cancel-text":"取消",onOk:Te},{default:a(()=>[o(Q,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:a(()=>[o(F,{label:"实体(可选)"},{default:a(()=>[o(Y,{value:h.entity,"onUpdate:value":e[7]||(e[7]=n=>h.entity=n),placeholder:"留空则全量"},null,8,["value"])]),_:1}),o(F,{label:"阈值"},{default:a(()=>[o(ee,{value:h.threshold,"onUpdate:value":e[8]||(e[8]=n=>h.threshold=n),min:0,max:1,step:.05,style:{width:"100%"}},null,8,["value"])]),_:1}),o(F,{label:"天数"},{default:a(()=>[o(ee,{value:h.days,"onUpdate:value":e[9]||(e[9]=n=>h.days=n),min:1,max:30,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),e[25]||(e[25]=_("p",{style:{color:"var(--text-secondary)","font-size":"12px",margin:"0"}}," 将最近 N 天事件与已存基线对比;分数 ≥ 阈值的事件作为异常输出。 ",-1))]),_:1},8,["open","confirm-loading"])])}}},Dt=qe(jt,[["__scopeId","data-v-379a0162"]]);export{Dt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-379a0162]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-379a0162]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.compliance-tabs[data-v-379a0162] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-379a0162]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as Z}from"./ws-4ur1fGsk.js";import{ah as ee,_ as ae,m as te}from"./icons-CJACPYXu.js";import{a as d}from"./index-BB5y5Y0z.js";import{l as le,F as b,D as v,c as a,x as t,q as s,r as x,v as p,J as f,u as L,H as O,L as ne,I as w,m as q,G as z,j as V}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 oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},se={key:0,style:{"text-align":"center",padding:"40px"}},re={style:{color:"#e0e0e0","font-weight":"500"}},ue={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ie={key:1,style:{background:"var(--bg-card-hover)",padding:"2px 6px","border-radius":"3px",color:"#91caff","font-size":"11px"}},ce={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},we={__name:"Cron",setup(de){const y=Z(),C=x(!1),$=x(!1),_=x(!1),m=x([]),S=V(()=>m.value.filter(l=>l.enabled).length),W=V(()=>m.value.filter(l=>!l.enabled).length),B=[{label:"每5分钟",cron:"*/5 * * * *"},{label:"每15分钟",cron:"*/15 * * * *"},{label:"每小时",cron:"0 * * * *"},{label:"每天9点",cron:"0 9 * * *"},{label:"每天18点",cron:"0 18 * * *"},{label:"每周一9点",cron:"0 9 * * 1"},{label:"每月1号",cron:"0 9 1 * *"}],o=x({name:"",cron:"",payload:"",description:"",enabled:!0}),j=[{title:"任务名称",key:"name",width:"25%"},{title:"Cron",key:"cron",width:"20%"},{title:"状态",key:"status",width:"15%"},{title:"操作",key:"actions",width:"20%"}];async function T(){C.value=!0;try{const{output:l}=await y.execute('skill run cron-scheduler "list all scheduled tasks"',2e4);m.value=A(l)}catch{m.value=[]}finally{C.value=!1}}function A(l){const e=[],c=l.split(`
|
|
2
|
-
`);for(const k of c){const u=k.trim();if(!u||u.startsWith("─"))continue;const i=u.match(/^([^\t|]+?)[\t|]+([*\d/,\-?LW#\s]+)[\t|]+/);i&&e.push({key:e.length,name:i[1].trim(),cron:i[2].trim(),enabled:!u.toLowerCase().includes("pause")&&!u.toLowerCase().includes("disabled"),description:"",running:!1})}return e}function D(l){o.value.cron=l.cron,_.value=!0}async function F(){if(!o.value.name||!o.value.cron){d.warning("请填写任务名称和 Cron 表达式");return}$.value=!0;try{const l=`skill run cron-scheduler "add task: ${o.value.name}, schedule: ${o.value.cron}, payload: ${o.value.payload||"ping"}"`,{output:e}=await y.execute(l,2e4);d.success("任务已创建"),_.value=!1,o.value={name:"",cron:"",payload:"",description:"",enabled:!0},await T()}catch(l){d.error("创建失败: "+l.message)}finally{$.value=!1}}async function I(l){l.running=!0;try{const{output:e}=await y.execute(`skill run cron-scheduler "run task: ${l.name}"`,3e4);d.success(`任务 ${l.name} 已触发`)}catch(e){d.error("触发失败: "+e.message)}finally{l.running=!1}}async function P(l){const e=l.enabled?"pause":"enable";try{await y.execute(`skill run cron-scheduler "${e} task: ${l.name}"`,1e4),l.enabled=!l.enabled,d.success(`任务已${l.enabled?"启用":"暂停"}`)}catch{d.error("操作失败")}}async function E(l){try{await y.execute(`skill run cron-scheduler "delete task: ${l.name}"`,1e4),m.value=m.value.filter(e=>e.key!==l.key),d.success("任务已删除")}catch{d.error("删除失败")}}return le(T),(l,e)=>{const c=s("a-button"),k=s("a-space"),u=s("a-statistic"),i=s("a-card"),h=s("a-col"),G=s("a-row"),H=s("a-spin"),J=s("a-badge"),M=s("a-popconfirm"),R=s("a-table"),U=s("a-input"),g=s("a-form-item"),K=s("a-textarea"),Q=s("a-switch"),X=s("a-form"),Y=s("a-modal");return p(),b("div",null,[v("div",oe,[e[9]||(e[9]=v("div",null,[v("h2",{class:"page-title"},"定时任务"),v("p",{class:"page-sub"},"定时任务调度管理")],-1)),a(k,null,{default:t(()=>[a(c,{onClick:e[0]||(e[0]=n=>_.value=!0),type:"primary"},{icon:t(()=>[a(L(ee))]),default:t(()=>[e[7]||(e[7]=f(" 新建任务 ",-1))]),_:1}),a(c,{ghost:"",loading:C.value,onClick:T},{icon:t(()=>[a(L(ae))]),default:t(()=>[e[8]||(e[8]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),a(G,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"全部任务",value:m.value.length,"value-style":"color: #ccc; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"启用中",value:S.value,"value-style":"color: #52c41a; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"已暂停",value:W.value,"value-style":"color: #faad14; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"预设方案",value:B.length,"value-style":"color: #1677ff; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1})]),_:1}),a(i,{title:"快速添加预设",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},size:"small"},{default:t(()=>[a(k,{wrap:""},{default:t(()=>[(p(),b(O,null,ne(B,n=>a(c,{key:n.label,size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)","font-size":"12px"},onClick:r=>D(n)},{default:t(()=>[f(w(n.label),1)]),_:2},1032,["onClick"])),64))]),_:1})]),_:1}),a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[C.value?(p(),b("div",se,[a(H,{size:"large"})])):(p(),q(R,{key:1,columns:j,"data-source":m.value,pagination:{pageSize:15},size:"small"},{bodyCell:t(({column:n,record:r})=>[n.key==="name"?(p(),b(O,{key:0},[v("div",re,w(r.name),1),r.description?(p(),b("div",ue,w(r.description),1)):z("",!0)],64)):z("",!0),n.key==="cron"?(p(),b("code",ie,w(r.cron),1)):z("",!0),n.key==="status"?(p(),q(J,{key:2,status:r.enabled?"success":"warning",text:r.enabled?"运行中":"已暂停"},null,8,["status","text"])):z("",!0),n.key==="actions"?(p(),q(k,{key:3,size:"small"},{default:t(()=>[a(c,{size:"small",type:"link",loading:r.running,onClick:N=>I(r)},{default:t(()=>[...e[10]||(e[10]=[f("运行",-1)])]),_:1},8,["loading","onClick"]),a(c,{size:"small",type:"link",onClick:N=>P(r)},{default:t(()=>[f(w(r.enabled?"暂停":"启用"),1)]),_:2},1032,["onClick"]),a(M,{title:"确认删除此任务?",onConfirm:N=>E(r)},{default:t(()=>[a(c,{size:"small",type:"link",danger:""},{default:t(()=>[...e[11]||(e[11]=[f("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):z("",!0)]),emptyText:t(()=>[v("div",ce,[a(L(te),{style:{"font-size":"36px","margin-bottom":"12px",display:"block"}}),e[12]||(e[12]=f(" 暂无定时任务 ",-1))])]),_:1},8,["data-source"]))]),_:1}),a(Y,{open:_.value,"onUpdate:open":e[6]||(e[6]=n=>_.value=n),title:"新建定时任务","confirm-loading":$.value,onOk:F,width:"520px"},{default:t(()=>[a(X,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:t(()=>[a(g,{label:"任务名称",required:""},{default:t(()=>[a(U,{value:o.value.name,"onUpdate:value":e[1]||(e[1]=n=>o.value.name=n),placeholder:"任务名称"},null,8,["value"])]),_:1}),a(g,{label:"Cron 表达式",required:""},{default:t(()=>[a(U,{value:o.value.cron,"onUpdate:value":e[2]||(e[2]=n=>o.value.cron=n),placeholder:"如: 0 9 * * * (每天9点)"},null,8,["value"]),e[13]||(e[13]=v("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"4px"}},"格式: 分 时 日 月 周",-1))]),_:1}),a(g,{label:"任务内容",required:""},{default:t(()=>[a(K,{value:o.value.payload,"onUpdate:value":e[3]||(e[3]=n=>o.value.payload=n),rows:3,placeholder:"要执行的 AI 任务描述..."},null,8,["value"])]),_:1}),a(g,{label:"描述"},{default:t(()=>[a(U,{value:o.value.description,"onUpdate:value":e[4]||(e[4]=n=>o.value.description=n),placeholder:"可选描述"},null,8,["value"])]),_:1}),a(g,{label:"立即启用"},{default:t(()=>[a(Q,{checked:o.value.enabled,"onUpdate:checked":e[5]||(e[5]=n=>o.value.enabled=n)},null,8,["checked"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}};export{we as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as Ne}from"./ws-4ur1fGsk.js";import{s as Be}from"./community-parser-CO25nZFt.js";import{_ as qe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-BB5y5Y0z.js";import{_ as Ie,ah as Re,t as re,aN as ie,aO as ue,aP as Ve,al as De,as as Je,aF as de}from"./icons-CJACPYXu.js";import{l as Pe,F as f,D as m,c as a,x as s,m as C,G as h,q as v,r as k,v as i,J as y,u as b,H as A,L as w,I as u,a as Q}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";function N(t){const l=Be(t);if(!l)return null;try{return JSON.parse(l)}catch{}const r=l.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!r)return null;try{return JSON.parse(r[0])}catch{return null}}function S(t,l=0){return typeof t=="number"&&Number.isFinite(t)?t:l}function Ee(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,name:String(t.name||r),symbol:String(t.symbol||""),chainId:S(t.chainId??t.chain_id,0),_idx:l}:null}function Ke(t){const l=N(t);return Array.isArray(l)?l.map(Ee).filter(Boolean):[]}function Ge(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",asset:String(t.asset||"native"),amount:S(t.amount,0),senderAddress:t.senderAddress??t.sender_address??"",recipientAddress:t.recipientAddress??t.recipient_address??"",lockTxHash:t.lockTxHash??t.lock_tx_hash??"",mintTxHash:t.mintTxHash??t.mint_tx_hash??"",status:String(t.status||"pending").toLowerCase(),feeAmount:S(t.feeAmount??t.fee_amount,0),feeChain:t.feeChain??t.fee_chain??"",errorMessage:t.errorMessage??t.error_message??"",createdAt:t.createdAt??t.created_at??null,completedAt:t.completedAt??t.completed_at??null,_idx:l}:null}function We(t){const l=N(t);return Array.isArray(l)?l.map(Ge).filter(Boolean):[]}function Xe(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",fromAsset:t.fromAsset??t.from_asset??"native",toAsset:t.toAsset??t.to_asset??"native",amount:S(t.amount,0),counterpartyAddress:t.counterpartyAddress??t.counterparty_address??"",hashLock:t.hashLock??t.hash_lock??"",expiresAt:t.expiresAt??t.expires_at??null,status:String(t.status||"initiated").toLowerCase(),claimTxHash:t.claimTxHash??t.claim_tx_hash??"",refundTxHash:t.refundTxHash??t.refund_tx_hash??"",createdAt:t.createdAt??t.created_at??null,_idx:l}:null}function Qe(t){const l=N(t);return Array.isArray(l)?l.map(Xe).filter(Boolean):[]}function Ye(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",payload:String(t.payload||""),targetContract:t.targetContract??t.target_contract??"",sourceTxHash:t.sourceTxHash??t.source_tx_hash??"",destinationTxHash:t.destinationTxHash??t.destination_tx_hash??"",status:String(t.status||"pending").toLowerCase(),retries:S(t.retries,0),createdAt:t.createdAt??t.created_at??null,deliveredAt:t.deliveredAt??t.delivered_at??null,_idx:l}:null}function Ze(t){const l=N(t);return Array.isArray(l)?l.map(Ye).filter(Boolean):[]}const et={bridges:{total:0,byStatus:{},totalVolume:0,totalFees:0},swaps:{total:0,byStatus:{}},messages:{total:0,byStatus:{}}};function tt(t){const l=JSON.parse(JSON.stringify(et)),r=N(t);return!r||typeof r!="object"||Array.isArray(r)||(r.bridges&&typeof r.bridges=="object"&&(l.bridges.total=S(r.bridges.total,0),l.bridges.totalVolume=S(r.bridges.totalVolume??r.bridges.total_volume,0),l.bridges.totalFees=S(r.bridges.totalFees??r.bridges.total_fees,0),r.bridges.byStatus&&typeof r.bridges.byStatus=="object"&&(l.bridges.byStatus={...r.bridges.byStatus})),r.swaps&&typeof r.swaps=="object"&&(l.swaps.total=S(r.swaps.total,0),r.swaps.byStatus&&typeof r.swaps.byStatus=="object"&&(l.swaps.byStatus={...r.swaps.byStatus})),r.messages&&typeof r.messages=="object"&&(l.messages.total=S(r.messages.total,0),r.messages.byStatus&&typeof r.messages.byStatus=="object"&&(l.messages.byStatus={...r.messages.byStatus}))),l}function at(t){const l=N(t);return!l||typeof l!="object"||Array.isArray(l)?null:{fee:S(l.fee,0),breakdown:{sourceFee:S(l?.breakdown?.sourceFee??l?.breakdown?.source_fee,0),destFee:S(l?.breakdown?.destFee??l?.breakdown?.dest_fee,0),bridgeFee:S(l?.breakdown?.bridgeFee??l?.breakdown?.bridge_fee,0)},currency:String(l.currency||"USD")}}function pe(t){if(t==null||t==="")return"—";const l=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(l.getTime())?String(t):l.toLocaleString("zh-CN",{hour12:!1})}const ot={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},st={style:{opacity:"0.7"}},nt={key:0,style:{opacity:"0.55","font-size":"10px","margin-left":"4px"}},lt={style:{color:"var(--text-primary)"}},rt={style:{color:"var(--text-primary)"}},it={style:{color:"#722ed1","font-weight":"500"}},ut={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},dt={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},pt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ct={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={style:{color:"var(--text-primary)"}},mt={style:{color:"var(--text-secondary)","font-size":"11px",margin:"0 4px"}},yt={style:{color:"var(--text-primary)"}},vt={style:{color:"var(--text-secondary)","font-size":"11px","margin-left":"4px"}},gt={key:1,style:{color:"#722ed1","font-weight":"500"}},_t={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},bt={key:1,style:{color:"var(--text-muted)"}},ht={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},xt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},kt={style:{color:"var(--text-primary)"}},Ct={style:{color:"var(--text-primary)"}},At={key:1,style:{color:"var(--text-secondary)","font-size":"12px"}},St={key:1,style:{color:"var(--text-muted)"}},zt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Tt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ft={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Ut={__name:"Crosschain",setup(t){const l=Ne(),r=k(!1),Y=k(!1),Z=k(!1),ee=k(!1),te=k(!1),z=k([]),ce=k([]),fe=k([]),me=k([]),B=k({bridges:{total:0,byStatus:{},totalVolume:0,totalFees:0},swaps:{total:0,byStatus:{}},messages:{total:0,byStatus:{}}}),q=k("bridges"),J=k(!1),P=k(!1),E=k(!1),ae=k(!1),p=Q({fromChain:"",toChain:"",amount:null,asset:"",sender:"",recipient:""}),d=Q({fromChain:"",toChain:"",amount:null,fromAsset:"",toAsset:"",counterparty:"",timeoutMs:null}),g=Q({fromChain:"",toChain:"",payload:"",contract:""}),T=Q({fromChain:"",toChain:"",amount:null}),F=k(null),be=[{title:"路径",key:"route"},{title:"金额",key:"amount",width:"160px"},{title:"费用",key:"fee",width:"100px"},{title:"状态",key:"status",width:"110px"},{title:"创建时间",key:"createdAt",width:"160px"}],he=[{title:"路径",key:"route"},{title:"金额",key:"amount",width:"110px"},{title:"哈希锁",key:"hashLock",width:"160px"},{title:"状态",key:"status",width:"120px"},{title:"过期时间",key:"expiresAt",width:"160px"}],xe=[{title:"路径",key:"route",width:"220px"},{title:"消息",key:"payload"},{title:"重试",key:"retries",width:"80px"},{title:"状态",key:"status",width:"110px"},{title:"创建时间",key:"createdAt",width:"160px"}],ke={ethereum:"blue",polygon:"purple",bsc:"gold",arbitrum:"cyan",solana:"magenta"};function Ce(n){return ke[n]||"default"}function M(n){const o=z.value.find(U=>U.id===n);return o?o.name:n||"—"}function oe(n){return{pending:"待处理",locked:"已锁定",minted:"已铸造",completed:"已完成",refunded:"已退款",failed:"失败",initiated:"已发起",hash_locked:"哈希锁定",claimed:"已领取",expired:"已过期",sent:"已发送",delivered:"已送达"}[n]||n}function Ae(n){return{pending:"default",locked:"processing",minted:"cyan",completed:"green",refunded:"orange",failed:"red"}[n]||"default"}function Se(n){return{initiated:"default",hash_locked:"processing",claimed:"green",refunded:"orange",expired:"red"}[n]||"default"}function ze(n){return{pending:"default",sent:"processing",delivered:"green",failed:"red"}[n]||"default"}function Te(n,o){return n?n.length>o?n.slice(0,o)+"...":n:""}function Fe({key:n}){n==="bridge"?J.value=!0:n==="swap"?P.value=!0:n==="message"&&(E.value=!0)}async function I(){r.value=!0;try{const[n,o,U,R,se]=await Promise.all([l.execute("crosschain chains --json",8e3).catch(()=>({output:""})),l.execute("crosschain bridges --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain swaps --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain messages --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain stats --json",8e3).catch(()=>({output:""}))]);z.value=Ke(n.output),ce.value=We(o.output),fe.value=Qe(U.output),me.value=Ze(R.output),B.value=tt(se.output)}catch(n){x.error("加载跨链数据失败: "+(n?.message||n))}finally{r.value=!1}}function K(n){return!n.fromChain||!n.toChain?(x.warning("请选择源链和目标链"),!1):n.fromChain===n.toChain?(x.warning("源链和目标链必须不同"),!1):!0}async function Ue(){if(K(p)){if(!p.amount||p.amount<=0){x.warning("请输入正数金额");return}Y.value=!0;try{const n=[`crosschain bridge ${p.fromChain} ${p.toChain} ${p.amount}`];p.asset.trim()&&n.push(`--asset "${p.asset.trim().replace(/"/g,'\\"')}"`),p.sender.trim()&&n.push(`--sender "${p.sender.trim().replace(/"/g,'\\"')}"`),p.recipient.trim()&&n.push(`--recipient "${p.recipient.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:o}=await l.execute(n.join(" "),15e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"bridgeId"/.test(o)){x.error("桥接发起失败: "+o.slice(0,120));return}x.success("桥接已发起"),J.value=!1,ye(),q.value="bridges",await I()}catch(n){x.error("桥接失败: "+(n?.message||n))}finally{Y.value=!1}}}async function we(){if(K(d)){if(!d.amount||d.amount<=0){x.warning("请输入正数金额");return}Z.value=!0;try{const n=[`crosschain swap ${d.fromChain} ${d.toChain} ${d.amount}`];d.fromAsset.trim()&&n.push(`--from-asset "${d.fromAsset.trim().replace(/"/g,'\\"')}"`),d.toAsset.trim()&&n.push(`--to-asset "${d.toAsset.trim().replace(/"/g,'\\"')}"`),d.counterparty.trim()&&n.push(`--counterparty "${d.counterparty.trim().replace(/"/g,'\\"')}"`),d.timeoutMs!=null&&n.push(`--timeout ${d.timeoutMs}`),n.push("--json");const{output:o}=await l.execute(n.join(" "),15e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"swapId"/.test(o)){x.error("原子交换发起失败: "+o.slice(0,120));return}x.success("原子交换已发起"),P.value=!1,ve(),q.value="swaps",await I()}catch(n){x.error("原子交换失败: "+(n?.message||n))}finally{Z.value=!1}}}async function je(){if(K(g)){ee.value=!0;try{const n=[`crosschain send ${g.fromChain} ${g.toChain}`];g.payload.trim()&&n.push(`--payload "${g.payload.trim().replace(/"/g,'\\"')}"`),g.contract.trim()&&n.push(`--contract "${g.contract.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:o}=await l.execute(n.join(" "),12e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"messageId"/.test(o)){x.error("消息发送失败: "+o.slice(0,120));return}x.success("消息已发送"),E.value=!1,ge(),q.value="messages",await I()}catch(n){x.error("发送失败: "+(n?.message||n))}finally{ee.value=!1}}}async function $e(){if(K(T)){if(!T.amount||T.amount<=0){x.warning("请输入正数金额");return}te.value=!0,F.value=null;try{const n=`crosschain estimate-fee ${T.fromChain} ${T.toChain} ${T.amount} --json`,{output:o}=await l.execute(n,8e3),U=at(o);if(!U){x.error("费用估算失败: "+o.slice(0,120));return}F.value=U}catch(n){x.error("估算失败: "+(n?.message||n))}finally{te.value=!1}}}function ye(){p.fromChain="",p.toChain="",p.amount=null,p.asset="",p.sender="",p.recipient=""}function ve(){d.fromChain="",d.toChain="",d.amount=null,d.fromAsset="",d.toAsset="",d.counterparty="",d.timeoutMs=null}function ge(){g.fromChain="",g.toChain="",g.payload="",g.contract=""}return Pe(I),(n,o)=>{const U=v("a-button"),R=v("a-menu-item"),se=v("a-menu"),Le=v("a-dropdown"),_e=v("a-space"),H=v("a-statistic"),L=v("a-card"),V=v("a-col"),Oe=v("a-row"),D=v("a-tag"),ne=v("a-table"),le=v("a-tab-pane"),Me=v("a-tabs"),j=v("a-select-option"),$=v("a-select"),_=v("a-form-item"),G=v("a-input-number"),O=v("a-input"),W=v("a-form"),X=v("a-modal"),He=v("a-textarea");return i(),f("div",null,[m("div",ot,[o[32]||(o[32]=m("div",null,[m("h2",{class:"page-title"},"跨链桥"),m("p",{class:"page-sub"},"链间资产桥接 · HTLC 原子交换 · 跨链消息")],-1)),a(_e,null,{default:s(()=>[a(U,{loading:r.value,onClick:I},{icon:s(()=>[a(b(Ie))]),default:s(()=>[o[26]||(o[26]=y(" 刷新 ",-1))]),_:1},8,["loading"]),a(Le,{trigger:["click"]},{overlay:s(()=>[a(se,{onClick:Fe},{default:s(()=>[a(R,{key:"bridge"},{default:s(()=>[a(b(re)),o[28]||(o[28]=y(" 桥接资产",-1))]),_:1}),a(R,{key:"swap"},{default:s(()=>[a(b(ie)),o[29]||(o[29]=y(" HTLC 原子交换",-1))]),_:1}),a(R,{key:"message"},{default:s(()=>[a(b(ue)),o[30]||(o[30]=y(" 跨链消息",-1))]),_:1})]),_:1})]),default:s(()=>[a(U,{type:"primary"},{icon:s(()=>[a(b(Re))]),default:s(()=>[o[27]||(o[27]=y(" 新建 ▼ ",-1))]),_:1})]),_:1}),a(U,{onClick:o[0]||(o[0]=e=>ae.value=!0)},{icon:s(()=>[a(b(Ve))]),default:s(()=>[o[31]||(o[31]=y(" 费用估算 ",-1))]),_:1})]),_:1})]),a(Oe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[a(V,{xs:12,sm:8,lg:5},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"支持链",value:z.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:s(()=>[a(b(De))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"桥接交易",value:B.value.bridges.total,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:s(()=>[a(b(re))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"原子交换",value:B.value.swaps.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:s(()=>[a(b(ie))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"跨链消息",value:B.value.messages.total,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:s(()=>[a(b(ue))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:24,sm:8,lg:4},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"总交易额",value:B.value.bridges.totalVolume,precision:2,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:s(()=>[a(b(Je))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),z.value.length?(i(),C(L,{key:0,title:"支持的区块链",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:s(()=>[a(_e,{size:[12,8],wrap:""},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(D,{key:e.id,color:Ce(e.id)},{default:s(()=>[y(u(e.name)+" ",1),m("span",st,"("+u(e.symbol)+")",1),e.chainId>0?(i(),f("span",nt,"#"+u(e.chainId),1)):h("",!0)]),_:2},1032,["color"]))),128))]),_:1})]),_:1})):h("",!0),a(Me,{activeKey:q.value,"onUpdate:activeKey":o[1]||(o[1]=e=>q.value=e),class:"xchain-tabs"},{default:s(()=>[a(le,{key:"bridges",tab:"桥接交易"},{default:s(()=>[a(ne,{columns:be,"data-source":ce.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:s(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",lt,u(M(c.fromChain)),1),a(b(de),{style:{margin:"0 6px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",rt,u(M(c.toChain)),1)],64)):h("",!0),e.key==="amount"?(i(),f(A,{key:1},[m("span",it,u(c.amount),1),m("span",ut,u(c.asset),1)],64)):h("",!0),e.key==="fee"?(i(),f("span",dt,u(c.feeAmount),1)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:Ae(c.status)},{default:s(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="createdAt"?(i(),f("span",pt,u(b(pe)(c.createdAt)),1)):h("",!0)]),emptyText:s(()=>[m("div",ct,[a(b(re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[33]||(o[33]=y(' 暂无桥接交易,点"新建 → 桥接资产"发起 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),a(le,{key:"swaps",tab:"原子交换"},{default:s(()=>[a(ne,{columns:he,"data-source":fe.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:s(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",ft,u(M(c.fromChain)),1),m("span",mt,"("+u(c.fromAsset)+")",1),a(b(de),{style:{margin:"0 4px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",yt,u(M(c.toChain)),1),m("span",vt,"("+u(c.toAsset)+")",1)],64)):h("",!0),e.key==="amount"?(i(),f("span",gt,u(c.amount),1)):h("",!0),e.key==="hashLock"?(i(),f(A,{key:2},[c.hashLock?(i(),f("span",_t,u(c.hashLock.slice(0,14))+"... ",1)):(i(),f("span",bt,"—"))],64)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:Se(c.status)},{default:s(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="expiresAt"?(i(),f("span",ht,u(b(pe)(c.expiresAt)),1)):h("",!0)]),emptyText:s(()=>[m("div",xt,[a(b(ie),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[34]||(o[34]=y(' 暂无原子交换,点"新建 → HTLC 原子交换"发起 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),a(le,{key:"messages",tab:"跨链消息"},{default:s(()=>[a(ne,{columns:xe,"data-source":me.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:s(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",kt,u(M(c.fromChain)),1),a(b(de),{style:{margin:"0 6px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",Ct,u(M(c.toChain)),1)],64)):h("",!0),e.key==="payload"?(i(),f("span",At,u(Te(c.payload,60)||"—"),1)):h("",!0),e.key==="retries"?(i(),f(A,{key:2},[c.retries>0?(i(),C(D,{key:0,color:"orange",style:{"font-size":"11px"}},{default:s(()=>[y(u(c.retries)+" 次",1)]),_:2},1024)):(i(),f("span",St,"—"))],64)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:ze(c.status)},{default:s(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="createdAt"?(i(),f("span",zt,u(b(pe)(c.createdAt)),1)):h("",!0)]),emptyText:s(()=>[m("div",Tt,[a(b(ue),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[35]||(o[35]=y(' 暂无跨链消息,点"新建 → 跨链消息"发送 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),a(X,{open:J.value,"onUpdate:open":o[8]||(o[8]=e=>J.value=e),title:"桥接资产","confirm-loading":Y.value,width:540,"ok-text":"发起桥接","cancel-text":"取消",onOk:Ue,onCancel:ye},{default:s(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:s(()=>[a(_,{label:"源链",required:""},{default:s(()=>[a($,{value:p.fromChain,"onUpdate:value":o[2]||(o[2]=e=>p.fromChain=e),placeholder:"选择源链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:s(()=>[a($,{value:p.toChain,"onUpdate:value":o[3]||(o[3]=e=>p.toChain=e),placeholder:"选择目标链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===p.fromChain},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:s(()=>[a(G,{value:p.amount,"onUpdate:value":o[4]||(o[4]=e=>p.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1}),a(_,{label:"资产"},{default:s(()=>[a(O,{value:p.asset,"onUpdate:value":o[5]||(o[5]=e=>p.asset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"发送方"},{default:s(()=>[a(O,{value:p.sender,"onUpdate:value":o[6]||(o[6]=e=>p.sender=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1}),a(_,{label:"接收方"},{default:s(()=>[a(O,{value:p.recipient,"onUpdate:value":o[7]||(o[7]=e=>p.recipient=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:P.value,"onUpdate:open":o[16]||(o[16]=e=>P.value=e),title:"HTLC 原子交换","confirm-loading":Z.value,width:540,"ok-text":"发起交换","cancel-text":"取消",onOk:we,onCancel:ve},{default:s(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:s(()=>[a(_,{label:"源链",required:""},{default:s(()=>[a($,{value:d.fromChain,"onUpdate:value":o[9]||(o[9]=e=>d.fromChain=e),placeholder:"选择源链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:s(()=>[a($,{value:d.toChain,"onUpdate:value":o[10]||(o[10]=e=>d.toChain=e),placeholder:"选择目标链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===d.fromChain},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:s(()=>[a(G,{value:d.amount,"onUpdate:value":o[11]||(o[11]=e=>d.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1}),a(_,{label:"源资产"},{default:s(()=>[a(O,{value:d.fromAsset,"onUpdate:value":o[12]||(o[12]=e=>d.fromAsset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"目标资产"},{default:s(()=>[a(O,{value:d.toAsset,"onUpdate:value":o[13]||(o[13]=e=>d.toAsset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"对手方"},{default:s(()=>[a(O,{value:d.counterparty,"onUpdate:value":o[14]||(o[14]=e=>d.counterparty=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1}),a(_,{label:"超时 (ms)"},{default:s(()=>[a(G,{value:d.timeoutMs,"onUpdate:value":o[15]||(o[15]=e=>d.timeoutMs=e),min:0,placeholder:"默认 24h",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:E.value,"onUpdate:open":o[21]||(o[21]=e=>E.value=e),title:"发送跨链消息","confirm-loading":ee.value,width:520,"ok-text":"发送","cancel-text":"取消",onOk:je,onCancel:ge},{default:s(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:s(()=>[a(_,{label:"源链",required:""},{default:s(()=>[a($,{value:g.fromChain,"onUpdate:value":o[17]||(o[17]=e=>g.fromChain=e),placeholder:"选择源链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:s(()=>[a($,{value:g.toChain,"onUpdate:value":o[18]||(o[18]=e=>g.toChain=e),placeholder:"选择目标链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===g.fromChain},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"消息"},{default:s(()=>[a(He,{value:g.payload,"onUpdate:value":o[19]||(o[19]=e=>g.payload=e),"auto-size":{minRows:3,maxRows:8}},null,8,["value"])]),_:1}),a(_,{label:"目标合约"},{default:s(()=>[a(O,{value:g.contract,"onUpdate:value":o[20]||(o[20]=e=>g.contract=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:ae.value,"onUpdate:open":o[25]||(o[25]=e=>ae.value=e),title:"费用估算","confirm-loading":te.value,width:480,"ok-text":"估算","cancel-text":"关闭",onOk:$e},{default:s(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:s(()=>[a(_,{label:"源链",required:""},{default:s(()=>[a($,{value:T.fromChain,"onUpdate:value":o[22]||(o[22]=e=>T.fromChain=e)},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:s(()=>[a($,{value:T.toChain,"onUpdate:value":o[23]||(o[23]=e=>T.toChain=e)},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===T.fromChain},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:s(()=>[a(G,{value:T.amount,"onUpdate:value":o[24]||(o[24]=e=>T.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),F.value?(i(),C(L,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:s(()=>[a(H,{title:"预估费用",value:F.value.fee,precision:4,suffix:F.value.currency,"value-style":{color:"#1677ff"}},null,8,["value","suffix"]),m("div",Ft,[m("div",null,"源链费: "+u(F.value.breakdown.sourceFee)+" "+u(F.value.currency),1),m("div",null,"目标链费: "+u(F.value.breakdown.destFee)+" "+u(F.value.currency),1),m("div",null,"桥接费: "+u(F.value.breakdown.bridgeFee)+" "+u(F.value.currency),1)])]),_:1})):h("",!0)]),_:1},8,["open","confirm-loading"])])}}},Vt=qe(Ut,[["__scopeId","data-v-04225cba"]]);export{Vt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-04225cba]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-04225cba]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.xchain-tabs[data-v-04225cba] .ant-tabs-nav{margin-bottom:16px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[data-v-f2137559] .did-row:hover td{background:var(--bg-card-hover)!important}[data-v-f2137559] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}
|