chainlesschain 0.157.0 → 0.157.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.
Files changed (114) hide show
  1. package/bin/chainlesschain.js +0 -0
  2. package/package.json +2 -2
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-CCj9oE5_.js → ActionButton-Dp5EHuSs.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-RMqXlyHE.js → Analytics-Dt69R7IX.js} +2 -2
  6. package/src/assets/web-panel/assets/AppLayout-BiOlkA-r.js +1 -0
  7. package/src/assets/web-panel/assets/AppLayout-Wr63FaJ2.css +1 -0
  8. package/src/assets/web-panel/assets/{Backup-bes7wE_k.js → Backup-sEweroFg.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-BKgAovqI.js → BaseInput-CMHSpW6z.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-Duckao6i.js → Chat-DQusK0UJ.js} +2 -2
  11. package/src/assets/web-panel/assets/{Checkbox-BaBBUZnH.js → Checkbox-DXQE64jQ.js} +1 -1
  12. package/src/assets/web-panel/assets/{Col-B6iQKzFs.js → Col-GesfSTFv.js} +1 -1
  13. package/src/assets/web-panel/assets/{Compact-Fwt0CbI5.js → Compact-DOVOXT5H.js} +1 -1
  14. package/src/assets/web-panel/assets/{Cowork-DNy50_Cp.js → Cowork-BaJ4irYi.js} +3 -3
  15. package/src/assets/web-panel/assets/{Cron-CBREJypB.js → Cron-DLx6zElQ.js} +2 -2
  16. package/src/assets/web-panel/assets/DID-BDvsVa08.css +1 -0
  17. package/src/assets/web-panel/assets/DID-O2dY9RPB.js +2 -0
  18. package/src/assets/web-panel/assets/Dashboard-BReDcgB_.js +3 -0
  19. package/src/assets/web-panel/assets/{Dropdown-B3vdFzOi.js → Dropdown-O-lFvQpB.js} +1 -1
  20. package/src/assets/web-panel/assets/{FormItemContext-RYn2zMn5.js → FormItemContext-Dld2C8JQ.js} +1 -1
  21. package/src/assets/web-panel/assets/{Git-7TolKe3c.js → Git-hvFWgySH.js} +2 -2
  22. package/src/assets/web-panel/assets/{KnowledgeGraph-4b9v3wYV.js → KnowledgeGraph-B_y3Ap4i.js} +1 -1
  23. package/src/assets/web-panel/assets/{Logs-BZgM3Q4b.js → Logs-DhFPaoDT.js} +2 -2
  24. package/src/assets/web-panel/assets/{McpTools-5Wrif1R_.js → McpTools-D0XTOWu9.js} +2 -2
  25. package/src/assets/web-panel/assets/{Memory-D8YRnt51.js → Memory-DW_B6rnE.js} +2 -2
  26. package/src/assets/web-panel/assets/{Notes-CWTUG8hk.js → Notes-BbyhsweS.js} +2 -2
  27. package/src/assets/web-panel/assets/{Organization-DvJzrIES.js → Organization-CChT-ntv.js} +4 -4
  28. package/src/assets/web-panel/assets/{Overflow-tpvXbZkh.js → Overflow-CZx2xJzC.js} +1 -1
  29. package/src/assets/web-panel/assets/{P2P-C-AoKbTs.js → P2P-CwaXSJZR.js} +2 -2
  30. package/src/assets/web-panel/assets/{Permissions-cIclKlQB.js → Permissions-D5U7ha3z.js} +4 -4
  31. package/src/assets/web-panel/assets/ProjectSettings-BQX5tF8E.js +2 -0
  32. package/src/assets/web-panel/assets/ProjectSettings-pLSae-wy.css +1 -0
  33. package/src/assets/web-panel/assets/{Projects-CDKdsdit.js → Projects-CLL9WS2z.js} +2 -2
  34. package/src/assets/web-panel/assets/{Providers-C33u4Mka.js → Providers-fjohdAMK.js} +2 -2
  35. package/src/assets/web-panel/assets/{Row-DVscVTtp.js → Row-C-bX9EFG.js} +1 -1
  36. package/src/assets/web-panel/assets/{RssFeed-CGC4w7VD.js → RssFeed-BsKQE8pe.js} +3 -3
  37. package/src/assets/web-panel/assets/{Security-ymR0We-P.js → Security-DXW6YBaw.js} +3 -3
  38. package/src/assets/web-panel/assets/{Services-Gydt4uVC.js → Services-BnNYoCwx.js} +2 -2
  39. package/src/assets/web-panel/assets/{Skeleton-CfLdvEpu.js → Skeleton-B-K9_08N.js} +1 -1
  40. package/src/assets/web-panel/assets/{Skills-C_SrPIFZ.js → Skills-DB8Qba_i.js} +1 -1
  41. package/src/assets/web-panel/assets/Tasks-0fHss8Sn.js +1 -0
  42. package/src/assets/web-panel/assets/{Templates-Bj1wDexb.js → Templates-Cfch0kkR.js} +1 -1
  43. package/src/assets/web-panel/assets/{Trigger-CIW_GVYA.js → Trigger-CAZQ8LeJ.js} +1 -1
  44. package/src/assets/web-panel/assets/{VideoEditing-CQOwjQFu.js → VideoEditing-CiTgOTo4.js} +1 -1
  45. package/src/assets/web-panel/assets/{Wallet-0kSZ-ENs.js → Wallet-BQiQ4WyF.js} +4 -4
  46. package/src/assets/web-panel/assets/{WebAuthn-CrZlAr6l.js → WebAuthn-Dq27qj5Y.js} +5 -5
  47. package/src/assets/web-panel/assets/{WorkflowEditor-DbdF8700.js → WorkflowEditor-BSXLy_fi.js} +1 -1
  48. package/src/assets/web-panel/assets/{colors-BgoKrIXh.js → colors-CHcJ8oqQ.js} +1 -1
  49. package/src/assets/web-panel/assets/{compact-item-COAuztwB.js → compact-item-BIM24cFh.js} +1 -1
  50. package/src/assets/web-panel/assets/{createContext-BTceykzK.js → createContext-yGfIqyCQ.js} +1 -1
  51. package/src/assets/web-panel/assets/{hasIn-BNooGgXx.js → hasIn-BXMsXiz7.js} +1 -1
  52. package/src/assets/web-panel/assets/{icons-DzieZiVh.js → icons-DEoqYzGZ.js} +4 -4
  53. package/src/assets/web-panel/assets/{index-CjOtB4wg.js → index-36fB-tdr.js} +3 -3
  54. package/src/assets/web-panel/assets/{index-BqJS8Rje.js → index-B-tWHvIW.js} +1 -1
  55. package/src/assets/web-panel/assets/{index-D1SCFE25.js → index-B50P9i-m.js} +1 -1
  56. package/src/assets/web-panel/assets/{index-Cf1n_3VC.js → index-BDzwtAvJ.js} +1 -1
  57. package/src/assets/web-panel/assets/{index-D6w1kIHg.js → index-BEPQ53hT.js} +1 -1
  58. package/src/assets/web-panel/assets/{index-vHj3UTBK.js → index-BPRyVdxV.js} +1 -1
  59. package/src/assets/web-panel/assets/{index-DbxkO9Uy.js → index-BPln_4T8.js} +1 -1
  60. package/src/assets/web-panel/assets/index-BPzN5a2A.js +36 -0
  61. package/src/assets/web-panel/assets/{index-Z9wFemG0.js → index-BaV1qPw2.js} +1 -1
  62. package/src/assets/web-panel/assets/{index-BbBjevdP.js → index-Bm7xqsYQ.js} +1 -1
  63. package/src/assets/web-panel/assets/{index-BMU9I-F6.js → index-BsSnr41N.js} +1 -1
  64. package/src/assets/web-panel/assets/{index-BRBeeCRz.js → index-BtfOEVOq.js} +2 -2
  65. package/src/assets/web-panel/assets/{index-Z5CuKqcS.js → index-C6RUQfzA.js} +1 -1
  66. package/src/assets/web-panel/assets/{index-Bn7dXbEh.js → index-CEBBaWRc.js} +1 -1
  67. package/src/assets/web-panel/assets/{index-DC-nDpH_.js → index-CELIaC07.js} +2 -2
  68. package/src/assets/web-panel/assets/{index-CZ3YetO8.js → index-CN1O5Ka0.js} +1 -1
  69. package/src/assets/web-panel/assets/{index-DDgwb3KP.js → index-CPzBvwi4.js} +1 -1
  70. package/src/assets/web-panel/assets/{index-g7FAcG7B.js → index-CSzJBDW_.js} +1 -1
  71. package/src/assets/web-panel/assets/{index-BEbmwv5T.js → index-CWRVLGUY.js} +3 -3
  72. package/src/assets/web-panel/assets/{index-KEQgDCwj.js → index-CWhMnsWX.js} +1 -1
  73. package/src/assets/web-panel/assets/{index-DnoNK5Gb.js → index-C_VBCJdj.js} +1 -1
  74. package/src/assets/web-panel/assets/{index-81NIDNcI.js → index-CfXwGGJa.js} +1 -1
  75. package/src/assets/web-panel/assets/{index-CpFrvhnj.js → index-Csq1ymAd.js} +1 -1
  76. package/src/assets/web-panel/assets/{index-Bjf02LQY.js → index-CvI-6roc.js} +1 -1
  77. package/src/assets/web-panel/assets/{index-eVLTVVvL.js → index-D2aA1Eww.js} +1 -1
  78. package/src/assets/web-panel/assets/{index-BLzkplpf.js → index-DNwo9Dzx.js} +1 -1
  79. package/src/assets/web-panel/assets/{index-nw5SqpgZ.js → index-DViNLv05.js} +2 -2
  80. package/src/assets/web-panel/assets/index-DX3NKnlx.js +1 -0
  81. package/src/assets/web-panel/assets/{index-C7uW3zj4.js → index-DYbkrS1k.js} +1 -1
  82. package/src/assets/web-panel/assets/index-D_E9PBtZ.js +1 -0
  83. package/src/assets/web-panel/assets/{index-B7gZm05C.js → index-DlqQ3NPc.js} +1 -1
  84. package/src/assets/web-panel/assets/{index-BAPulPv1.js → index-DrBsteza.js} +1 -1
  85. package/src/assets/web-panel/assets/{index-O-dqdn3q.js → index-Mc421_zZ.js} +1 -1
  86. package/src/assets/web-panel/assets/{index-D5wFryiJ.js → index-OcnmMROX.js} +2 -2
  87. package/src/assets/web-panel/assets/{index-cF6gfPY3.js → index-PbAFYgta.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-lrfnKtkl.js → index-T5htsJq3.js} +1 -1
  89. package/src/assets/web-panel/assets/index-lx2gVL_l.js +1 -0
  90. package/src/assets/web-panel/assets/{index-C1BBkQIj.js → index-pj_DB3gf.js} +1 -1
  91. package/src/assets/web-panel/assets/{initDefaultProps-_t-PG0bz.js → initDefaultProps-DR3dFRrN.js} +1 -1
  92. package/src/assets/web-panel/assets/{motion-DPnqtODq.js → motion-Dab0Jzue.js} +1 -1
  93. package/src/assets/web-panel/assets/{move-kO9NQRyb.js → move-CbXivKK7.js} +1 -1
  94. package/src/assets/web-panel/assets/{omit-DD9MqVt0.js → omit-CyPQ4Rvu.js} +1 -1
  95. package/src/assets/web-panel/assets/{pickAttrs-D4u5AYq1.js → pickAttrs-DLkAq0jb.js} +1 -1
  96. package/src/assets/web-panel/assets/{placementArrow-BUkUxlJc.js → placementArrow-OJpzGLKb.js} +1 -1
  97. package/src/assets/web-panel/assets/{responsiveObserve-DA_o8FHw.js → responsiveObserve-BSL-2rcG.js} +1 -1
  98. package/src/assets/web-panel/assets/{slide-DSmAtCrK.js → slide-CSTFi1jq.js} +1 -1
  99. package/src/assets/web-panel/assets/{statusUtils-Bn00xQ4D.js → statusUtils-DYDvuHx4.js} +1 -1
  100. package/src/assets/web-panel/assets/{styleChecker-phGTLjuN.js → styleChecker-BMkbm-8r.js} +1 -1
  101. package/src/assets/web-panel/assets/{transition-exl3w1iN.js → transition-B3-w1SVL.js} +1 -1
  102. package/src/assets/web-panel/assets/{useConfigInject-C2E3Qsop.js → useConfigInject-DIr4olCu.js} +2 -2
  103. package/src/assets/web-panel/assets/{useFlexGapSupport-tlovsMBV.js → useFlexGapSupport-d0_YPT4c.js} +1 -1
  104. package/src/assets/web-panel/assets/{vnode-CIbqhcnZ.js → vnode-Df_mZ5AJ.js} +1 -1
  105. package/src/assets/web-panel/assets/{zoom-Ck9WbYsZ.js → zoom-CY5xo2Ia.js} +1 -1
  106. package/src/assets/web-panel/index.html +2 -2
  107. package/src/assets/web-panel/assets/AppLayout-CSmBboZB.css +0 -1
  108. package/src/assets/web-panel/assets/AppLayout-CV6gWn1r.js +0 -1
  109. package/src/assets/web-panel/assets/Dashboard-DnJ1aZvj.js +0 -3
  110. package/src/assets/web-panel/assets/Tasks-BchvT4YD.js +0 -1
  111. package/src/assets/web-panel/assets/index-4C1c4hkZ.js +0 -36
  112. package/src/assets/web-panel/assets/index-C4YPr8e8.js +0 -1
  113. package/src/assets/web-panel/assets/index-DYDvGZbQ.js +0 -1
  114. package/src/assets/web-panel/assets/index-DeN7D3FZ.js +0 -1
@@ -1,3 +1,3 @@
1
- import{l as ce,F as p,D as m,c as s,x as l,m as x,u as _,J as y,q as d,r as g,v as r,H as F,L as O,I as v,G as k,P as pe,j as me}from"./vendor-aH7YaPZi.js";import{u as ye}from"./ws-BTS8ehTm.js";import{_ as fe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as I,X as ve,q as M,_ as J,aa as _e}from"./icons-DzieZiVh.js";import{a as c}from"./index-CjOtB4wg.js";import"./index-4C1c4hkZ.js";import"./useConfigInject-C2E3Qsop.js";import"./transition-exl3w1iN.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-DXIqogG2.js";import"./index-U4Zd5IK6.js";const ge={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xe={key:0,style:{"text-align":"center",padding:"60px"}},ke={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},he={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},we={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},be={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},Ce={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},Ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},Fe={key:3,style:{"text-align":"center",padding:"60px"}},ze=["href"],Se={key:1,style:{color:"#e0e0e0","font-weight":"500"}},Re={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ue={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},$e={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},Ne={key:0,style:{"margin-bottom":"8px"}},Le=["innerHTML"],Te={key:2,style:{color:"var(--text-muted)"}},je={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},De={__name:"RssFeed",setup(Oe){const h=ye(),N=g(!1),z=g(!1),L=g(!1),T=g(!1),w=g([]),C=g([]),S=g(""),R=g(!1),U=g(""),j=g([]),P=me(()=>{const t=w.value.length,e=C.value.length,o=C.value.filter(u=>!u.read).length,n=w.value.filter(u=>u.lastUpdated).sort((u,$)=>new Date($.lastUpdated)-new Date(u.lastUpdated))[0],i=n?D(n.lastUpdated):"-";return[{label:"订阅源数",value:t,color:"#1677ff"},{label:"文章总数",value:e,color:"#52c41a"},{label:"未读文章",value:o,color:"#faad14"},{label:"最近刷新",value:i,color:"#13c2c2"}]}),K=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"来源",key:"source",dataIndex:"source",width:"140px"},{title:"发布时间",key:"publishedAt",dataIndex:"publishedAt",width:"160px"},{title:"状态",key:"status",width:"80px"},{title:"操作",key:"actions",width:"100px"}];function D(t){if(!t)return"-";try{const e=new Date(t);return isNaN(e.getTime())?t:e.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return t}}function W(t){try{const e=t.match(/(\[[\s\S]*\]|\{[\s\S]*\})/);if(e)return JSON.parse(e[1])}catch{}return null}async function A(){N.value=!0;try{const{output:t}=await h.execute("rss list --json",2e4),e=W(t);Array.isArray(e)?w.value=e.map((o,n)=>({key:o.id||o.url||n,id:o.id||String(n),title:o.title||o.name||"",url:o.url||o.feedUrl||"",itemCount:o.itemCount??o.articleCount??o.count??0,lastUpdated:o.lastUpdated||o.updatedAt||o.lastRefresh||""})):w.value=G(t)}catch(t){c.error("加载订阅源失败: "+t.message)}finally{N.value=!1}}function G(t){const e=[],o=t.split(`
2
- `);for(const n of o){const i=n.trim();if(!i||i.startsWith("─")||i.match(/^\d+ feed/i)||i.startsWith("RSS")||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u?e.push({key:u[1],id:u[1],title:u[2].trim(),url:(u[3]||"").trim(),itemCount:0,lastUpdated:""}):i.length>5&&e.push({key:String(e.length),id:String(e.length),title:i.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return e}async function b(){z.value=!0,j.value=[];try{let t="rss articles --limit 30 --json";S.value&&(t=`rss articles --feed ${S.value} --limit 30 --json`);const{output:e}=await h.execute(t,2e4),o=W(e);Array.isArray(o)?C.value=o.map((n,i)=>({key:n.id||String(i),id:n.id||String(i),title:n.title||"无标题",link:n.link||n.url||"",source:n.source||n.feedTitle||n.feedName||"",publishedAt:n.publishedAt||n.pubDate||n.date||"",read:!!n.read,summary:n.summary||n.description||"",content:n.content||""})):C.value=X(e)}catch(t){c.error("加载文章失败: "+t.message)}finally{z.value=!1}}function X(t){const e=[],o=t.split(`
3
- `);for(const n of o){const i=n.trim();if(!i||i.startsWith("─")||i.match(/^\d+ article/i)||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u&&e.push({key:u[1],id:u[1],title:u[2].trim(),link:"",source:(u[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return e}async function Q(){const t=U.value.trim();if(!t){c.warning("请输入订阅源地址");return}T.value=!0;try{const{output:e}=await h.execute(`rss add "${t}"`,3e4);e.includes("error")||e.includes("失败")||e.includes("Error")?c.error("添加失败: "+e.slice(0,120)):(c.success("订阅源已添加"),R.value=!1,U.value="",await A(),await b())}catch(e){c.error("添加失败: "+e.message)}finally{T.value=!1}}async function Y(t){try{c.loading({content:`正在刷新 ${t.title||t.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${t.id}`,3e4),c.success({content:"刷新完成",key:"refreshFeed"}),await A(),await b()}catch(e){c.error({content:"刷新失败: "+e.message,key:"refreshFeed"})}}async function Z(t){try{c.loading({content:`正在删除 ${t.title||t.id}...`,key:"removeFeed"});const{output:e}=await h.execute(`rss remove ${t.id}`,2e4);e.includes("error")||e.includes("失败")?c.error({content:"删除失败: "+e.slice(0,120),key:"removeFeed"}):(c.success({content:"已删除订阅源",key:"removeFeed"}),await A(),await b())}catch(e){c.error({content:"删除失败: "+e.message,key:"removeFeed"})}}async function ee(){L.value=!0;try{c.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),c.success({content:"全部刷新完成",key:"refreshAll"}),await A(),await b()}catch(t){c.error({content:"刷新失败: "+t.message,key:"refreshAll"})}finally{L.value=!1}}async function te(t){try{await h.execute(`rss mark-read ${t.id}`,1e4),t.read=!0,c.success("已标记已读")}catch(e){c.error("操作失败: "+e.message)}}function ae(t,e){j.value=t?[e.key]:[]}return ce(async()=>{await A(),await b()}),(t,e)=>{const o=d("a-button"),n=d("a-space"),i=d("a-statistic"),u=d("a-card"),$=d("a-col"),B=d("a-row"),E=d("a-spin"),V=d("a-menu-item"),le=d("a-menu"),se=d("a-dropdown"),q=d("a-select-option"),oe=d("a-select"),H=d("a-tag"),ne=d("a-table"),re=d("a-input"),ie=d("a-form-item"),ue=d("a-form"),de=d("a-modal");return r(),p("div",null,[m("div",ge,[e[6]||(e[6]=m("div",null,[m("h2",{class:"page-title"},"RSS 订阅"),m("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),s(n,null,{default:l(()=>[s(o,{type:"primary",onClick:e[0]||(e[0]=a=>R.value=!0)},{icon:l(()=>[s(_(ve))]),default:l(()=>[e[4]||(e[4]=y(" 添加订阅 ",-1))]),_:1}),s(o,{ghost:"",loading:L.value,onClick:ee},{icon:l(()=>[s(_(M))]),default:l(()=>[e[5]||(e[5]=y(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(B,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[(r(!0),p(F,null,O(P.value,a=>(r(),x($,{xs:12,sm:6,key:a.label},{default:l(()=>[s(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:l(()=>[s(i,{title:a.label,value:a.value,"value-style":{color:a.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),e[16]||(e[16]=m("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),N.value?(r(),p("div",xe,[s(E,{size:"large"})])):w.value.length>0?(r(),x(B,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:l(()=>[(r(!0),p(F,null,O(w.value,a=>(r(),x($,{xs:24,sm:12,md:8,lg:6,key:a.id||a.url},{default:l(()=>[s(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:l(()=>[m("div",ke,[s(_(I),{style:{color:"#1677ff","flex-shrink":"0"}}),m("span",he,v(a.title||"未命名订阅"),1)])]),extra:l(()=>[s(se,null,{overlay:l(()=>[s(le,null,{default:l(()=>[s(V,{onClick:f=>Y(a)},{default:l(()=>[s(_(M)),e[8]||(e[8]=y(" 刷新 ",-1))]),_:1},8,["onClick"]),s(V,{onClick:f=>Z(a),danger:""},{default:l(()=>[s(_(_e)),e[9]||(e[9]=y(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:l(()=>[s(o,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:l(()=>[...e[7]||(e[7]=[y("...",-1)])]),_:1})]),_:2},1024)]),default:l(()=>[m("p",we,[s(_(J)),y(" "+v(a.url||"-"),1)]),m("div",be,[m("span",null,v(a.itemCount??"-")+" 篇文章",1),m("span",null,v(D(a.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(r(),p("div",Ce,[s(_(I),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[10]||(e[10]=y(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),m("div",Ae,[e[12]||(e[12]=m("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),s(n,null,{default:l(()=>[s(oe,{value:S.value,"onUpdate:value":e[1]||(e[1]=a=>S.value=a),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:b},{default:l(()=>[s(q,{value:""},{default:l(()=>[...e[11]||(e[11]=[y("全部订阅",-1)])]),_:1}),(r(!0),p(F,null,O(w.value,a=>(r(),x(q,{key:a.id,value:a.id},{default:l(()=>[y(v(a.title||a.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),s(o,{loading:z.value,onClick:b},{icon:l(()=>[s(_(M))]),_:1},8,["loading"])]),_:1})]),z.value?(r(),p("div",Fe,[s(E,{size:"large"})])):(r(),x(ne,{key:4,columns:K,"data-source":C.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:j.value,onExpand:ae}},{bodyCell:l(({column:a,record:f})=>[a.key==="title"?(r(),p(F,{key:0},[f.link?(r(),p("a",{key:0,href:f.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[s(_(J),{style:{"margin-right":"4px"}}),y(v(f.title),1)],8,ze)):(r(),p("span",Se,v(f.title),1))],64)):k("",!0),a.key==="source"?(r(),x(H,{key:1,color:"blue",style:{"font-size":"10px"}},{default:l(()=>[y(v(f.source||"-"),1)]),_:2},1024)):k("",!0),a.key==="publishedAt"?(r(),p("span",Re,v(D(f.publishedAt)),1)):k("",!0),a.key==="status"?(r(),x(H,{key:3,color:f.read?"default":"green"},{default:l(()=>[y(v(f.read?"已读":"未读"),1)]),_:2},1032,["color"])):k("",!0),a.key==="actions"?(r(),p(F,{key:4},[f.read?(r(),p("span",Ue,"--")):(r(),x(o,{key:0,size:"small",type:"link",onClick:pe(Ie=>te(f),["stop"])},{default:l(()=>[...e[13]||(e[13]=[y(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):k("",!0)]),expandedRowRender:l(({record:a})=>[m("div",$e,[a.summary?(r(),p("div",Ne,[e[14]||(e[14]=m("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),y(v(a.summary),1)])):k("",!0),a.content?(r(),p("div",{key:1,innerHTML:a.content,style:{color:"var(--text-secondary)"}},null,8,Le)):k("",!0),!a.summary&&!a.content?(r(),p("div",Te,"暂无内容预览")):k("",!0)])]),emptyText:l(()=>[m("div",je,[s(_(I),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[15]||(e[15]=y(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),s(de,{open:R.value,"onUpdate:open":e[3]||(e[3]=a=>R.value=a),title:"添加订阅源","confirm-loading":T.value,onOk:Q,"ok-text":"添加","cancel-text":"取消"},{default:l(()=>[s(ue,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:l(()=>[s(ie,{label:"URL",required:""},{default:l(()=>[s(re,{value:U.value,"onUpdate:value":e[2]||(e[2]=a=>U.value=a),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},Xe=fe(De,[["__scopeId","data-v-66093b20"]]);export{Xe as default};
1
+ import{l as ce,F as p,D as m,c as s,x as l,m as x,u as _,J as y,q as d,r as g,v as r,H as F,L as O,I as v,G as k,P as pe,j as me}from"./vendor-aH7YaPZi.js";import{u as ye}from"./ws-BTS8ehTm.js";import{_ as fe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as I,Y as ve,r as M,$ as P,ac as _e}from"./icons-DEoqYzGZ.js";import{a as c}from"./index-36fB-tdr.js";import"./index-BPzN5a2A.js";import"./useConfigInject-DIr4olCu.js";import"./transition-B3-w1SVL.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-DXIqogG2.js";import"./index-U4Zd5IK6.js";const ge={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xe={key:0,style:{"text-align":"center",padding:"60px"}},ke={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},he={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},we={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},be={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},Ce={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},Ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},Fe={key:3,style:{"text-align":"center",padding:"60px"}},ze=["href"],Se={key:1,style:{color:"#e0e0e0","font-weight":"500"}},Re={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ue={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},$e={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},Ne={key:0,style:{"margin-bottom":"8px"}},Le=["innerHTML"],Te={key:2,style:{color:"var(--text-muted)"}},je={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},De={__name:"RssFeed",setup(Oe){const h=ye(),N=g(!1),z=g(!1),L=g(!1),T=g(!1),w=g([]),C=g([]),S=g(""),R=g(!1),U=g(""),j=g([]),q=me(()=>{const t=w.value.length,e=C.value.length,o=C.value.filter(u=>!u.read).length,n=w.value.filter(u=>u.lastUpdated).sort((u,$)=>new Date($.lastUpdated)-new Date(u.lastUpdated))[0],i=n?D(n.lastUpdated):"-";return[{label:"订阅源数",value:t,color:"#1677ff"},{label:"文章总数",value:e,color:"#52c41a"},{label:"未读文章",value:o,color:"#faad14"},{label:"最近刷新",value:i,color:"#13c2c2"}]}),K=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"来源",key:"source",dataIndex:"source",width:"140px"},{title:"发布时间",key:"publishedAt",dataIndex:"publishedAt",width:"160px"},{title:"状态",key:"status",width:"80px"},{title:"操作",key:"actions",width:"100px"}];function D(t){if(!t)return"-";try{const e=new Date(t);return isNaN(e.getTime())?t:e.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return t}}function W(t){try{const e=t.match(/(\[[\s\S]*\]|\{[\s\S]*\})/);if(e)return JSON.parse(e[1])}catch{}return null}async function A(){N.value=!0;try{const{output:t}=await h.execute("rss list --json",2e4),e=W(t);Array.isArray(e)?w.value=e.map((o,n)=>({key:o.id||o.url||n,id:o.id||String(n),title:o.title||o.name||"",url:o.url||o.feedUrl||"",itemCount:o.itemCount??o.articleCount??o.count??0,lastUpdated:o.lastUpdated||o.updatedAt||o.lastRefresh||""})):w.value=G(t)}catch(t){c.error("加载订阅源失败: "+t.message)}finally{N.value=!1}}function G(t){const e=[],o=t.split(`
2
+ `);for(const n of o){const i=n.trim();if(!i||i.startsWith("─")||i.match(/^\d+ feed/i)||i.startsWith("RSS")||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u?e.push({key:u[1],id:u[1],title:u[2].trim(),url:(u[3]||"").trim(),itemCount:0,lastUpdated:""}):i.length>5&&e.push({key:String(e.length),id:String(e.length),title:i.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return e}async function b(){z.value=!0,j.value=[];try{let t="rss articles --limit 30 --json";S.value&&(t=`rss articles --feed ${S.value} --limit 30 --json`);const{output:e}=await h.execute(t,2e4),o=W(e);Array.isArray(o)?C.value=o.map((n,i)=>({key:n.id||String(i),id:n.id||String(i),title:n.title||"无标题",link:n.link||n.url||"",source:n.source||n.feedTitle||n.feedName||"",publishedAt:n.publishedAt||n.pubDate||n.date||"",read:!!n.read,summary:n.summary||n.description||"",content:n.content||""})):C.value=Y(e)}catch(t){c.error("加载文章失败: "+t.message)}finally{z.value=!1}}function Y(t){const e=[],o=t.split(`
3
+ `);for(const n of o){const i=n.trim();if(!i||i.startsWith("─")||i.match(/^\d+ article/i)||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u&&e.push({key:u[1],id:u[1],title:u[2].trim(),link:"",source:(u[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return e}async function Q(){const t=U.value.trim();if(!t){c.warning("请输入订阅源地址");return}T.value=!0;try{const{output:e}=await h.execute(`rss add "${t}"`,3e4);e.includes("error")||e.includes("失败")||e.includes("Error")?c.error("添加失败: "+e.slice(0,120)):(c.success("订阅源已添加"),R.value=!1,U.value="",await A(),await b())}catch(e){c.error("添加失败: "+e.message)}finally{T.value=!1}}async function X(t){try{c.loading({content:`正在刷新 ${t.title||t.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${t.id}`,3e4),c.success({content:"刷新完成",key:"refreshFeed"}),await A(),await b()}catch(e){c.error({content:"刷新失败: "+e.message,key:"refreshFeed"})}}async function Z(t){try{c.loading({content:`正在删除 ${t.title||t.id}...`,key:"removeFeed"});const{output:e}=await h.execute(`rss remove ${t.id}`,2e4);e.includes("error")||e.includes("失败")?c.error({content:"删除失败: "+e.slice(0,120),key:"removeFeed"}):(c.success({content:"已删除订阅源",key:"removeFeed"}),await A(),await b())}catch(e){c.error({content:"删除失败: "+e.message,key:"removeFeed"})}}async function ee(){L.value=!0;try{c.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),c.success({content:"全部刷新完成",key:"refreshAll"}),await A(),await b()}catch(t){c.error({content:"刷新失败: "+t.message,key:"refreshAll"})}finally{L.value=!1}}async function te(t){try{await h.execute(`rss mark-read ${t.id}`,1e4),t.read=!0,c.success("已标记已读")}catch(e){c.error("操作失败: "+e.message)}}function ae(t,e){j.value=t?[e.key]:[]}return ce(async()=>{await A(),await b()}),(t,e)=>{const o=d("a-button"),n=d("a-space"),i=d("a-statistic"),u=d("a-card"),$=d("a-col"),B=d("a-row"),E=d("a-spin"),V=d("a-menu-item"),le=d("a-menu"),se=d("a-dropdown"),H=d("a-select-option"),oe=d("a-select"),J=d("a-tag"),ne=d("a-table"),re=d("a-input"),ie=d("a-form-item"),ue=d("a-form"),de=d("a-modal");return r(),p("div",null,[m("div",ge,[e[6]||(e[6]=m("div",null,[m("h2",{class:"page-title"},"RSS 订阅"),m("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),s(n,null,{default:l(()=>[s(o,{type:"primary",onClick:e[0]||(e[0]=a=>R.value=!0)},{icon:l(()=>[s(_(ve))]),default:l(()=>[e[4]||(e[4]=y(" 添加订阅 ",-1))]),_:1}),s(o,{ghost:"",loading:L.value,onClick:ee},{icon:l(()=>[s(_(M))]),default:l(()=>[e[5]||(e[5]=y(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(B,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[(r(!0),p(F,null,O(q.value,a=>(r(),x($,{xs:12,sm:6,key:a.label},{default:l(()=>[s(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:l(()=>[s(i,{title:a.label,value:a.value,"value-style":{color:a.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),e[16]||(e[16]=m("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),N.value?(r(),p("div",xe,[s(E,{size:"large"})])):w.value.length>0?(r(),x(B,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:l(()=>[(r(!0),p(F,null,O(w.value,a=>(r(),x($,{xs:24,sm:12,md:8,lg:6,key:a.id||a.url},{default:l(()=>[s(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:l(()=>[m("div",ke,[s(_(I),{style:{color:"#1677ff","flex-shrink":"0"}}),m("span",he,v(a.title||"未命名订阅"),1)])]),extra:l(()=>[s(se,null,{overlay:l(()=>[s(le,null,{default:l(()=>[s(V,{onClick:f=>X(a)},{default:l(()=>[s(_(M)),e[8]||(e[8]=y(" 刷新 ",-1))]),_:1},8,["onClick"]),s(V,{onClick:f=>Z(a),danger:""},{default:l(()=>[s(_(_e)),e[9]||(e[9]=y(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:l(()=>[s(o,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:l(()=>[...e[7]||(e[7]=[y("...",-1)])]),_:1})]),_:2},1024)]),default:l(()=>[m("p",we,[s(_(P)),y(" "+v(a.url||"-"),1)]),m("div",be,[m("span",null,v(a.itemCount??"-")+" 篇文章",1),m("span",null,v(D(a.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(r(),p("div",Ce,[s(_(I),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[10]||(e[10]=y(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),m("div",Ae,[e[12]||(e[12]=m("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),s(n,null,{default:l(()=>[s(oe,{value:S.value,"onUpdate:value":e[1]||(e[1]=a=>S.value=a),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:b},{default:l(()=>[s(H,{value:""},{default:l(()=>[...e[11]||(e[11]=[y("全部订阅",-1)])]),_:1}),(r(!0),p(F,null,O(w.value,a=>(r(),x(H,{key:a.id,value:a.id},{default:l(()=>[y(v(a.title||a.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),s(o,{loading:z.value,onClick:b},{icon:l(()=>[s(_(M))]),_:1},8,["loading"])]),_:1})]),z.value?(r(),p("div",Fe,[s(E,{size:"large"})])):(r(),x(ne,{key:4,columns:K,"data-source":C.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:j.value,onExpand:ae}},{bodyCell:l(({column:a,record:f})=>[a.key==="title"?(r(),p(F,{key:0},[f.link?(r(),p("a",{key:0,href:f.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[s(_(P),{style:{"margin-right":"4px"}}),y(v(f.title),1)],8,ze)):(r(),p("span",Se,v(f.title),1))],64)):k("",!0),a.key==="source"?(r(),x(J,{key:1,color:"blue",style:{"font-size":"10px"}},{default:l(()=>[y(v(f.source||"-"),1)]),_:2},1024)):k("",!0),a.key==="publishedAt"?(r(),p("span",Re,v(D(f.publishedAt)),1)):k("",!0),a.key==="status"?(r(),x(J,{key:3,color:f.read?"default":"green"},{default:l(()=>[y(v(f.read?"已读":"未读"),1)]),_:2},1032,["color"])):k("",!0),a.key==="actions"?(r(),p(F,{key:4},[f.read?(r(),p("span",Ue,"--")):(r(),x(o,{key:0,size:"small",type:"link",onClick:pe(Ie=>te(f),["stop"])},{default:l(()=>[...e[13]||(e[13]=[y(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):k("",!0)]),expandedRowRender:l(({record:a})=>[m("div",$e,[a.summary?(r(),p("div",Ne,[e[14]||(e[14]=m("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),y(v(a.summary),1)])):k("",!0),a.content?(r(),p("div",{key:1,innerHTML:a.content,style:{color:"var(--text-secondary)"}},null,8,Le)):k("",!0),!a.summary&&!a.content?(r(),p("div",Te,"暂无内容预览")):k("",!0)])]),emptyText:l(()=>[m("div",je,[s(_(I),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[15]||(e[15]=y(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),s(de,{open:R.value,"onUpdate:open":e[3]||(e[3]=a=>R.value=a),title:"添加订阅源","confirm-loading":T.value,onOk:Q,"ok-text":"添加","cancel-text":"取消"},{default:l(()=>[s(ue,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:l(()=>[s(ie,{label:"URL",required:""},{default:l(()=>[s(re,{value:U.value,"onUpdate:value":e[2]||(e[2]=a=>U.value=a),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},Ye=fe(De,[["__scopeId","data-v-66093b20"]]);export{Ye as default};
@@ -1,4 +1,4 @@
1
- import{u as fe}from"./ws-BTS8ehTm.js";import{_ as ve}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-CjOtB4wg.js";import{q as me,X as ye,K as ge,i as _e,L as H,a0 as be}from"./icons-DzieZiVh.js";import{l as xe,F as p,D as I,c as t,x as a,r,q as u,v as n,J as f,u as D,m as z,I as c,G as m,H as ke,L as he}from"./vendor-aH7YaPZi.js";import"./index-4C1c4hkZ.js";import"./useConfigInject-C2E3Qsop.js";import"./transition-exl3w1iN.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-DXIqogG2.js";import"./index-U4Zd5IK6.js";const we={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={key:0,style:{"text-align":"center",padding:"60px"}},De={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Re={key:0,style:{"margin-top":"12px"}},ze={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Le={key:0,style:{"margin-top":"8px"}},Te={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ae={key:0,style:{"margin-top":"8px"}},Ne={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},We={key:0,style:{"text-align":"center",padding:"60px"}},Oe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Se={key:1,style:{color:"#e0e0e0"}},Me={key:2,style:{color:"var(--text-secondary)"}},$e={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ee={__name:"Security",setup(Ke){const C=fe(),N=r("did"),M=r(!1);async function Y(){M.value=!0;try{N.value==="did"?await O():N.value==="audit"&&await X()}finally{M.value=!1}}function Z(l){l==="did"&&U.value.length===0&&O(),l==="audit"&&S.value.length===0&&X()}const $=r(!1),E=r(!1),K=r(!1),U=r([]),V=r(!1),W=r(""),L=r(""),ee=[{title:"DID",key:"did",dataIndex:"did",ellipsis:!0},{title:"方法",key:"method",dataIndex:"method",width:"100px"},{title:"创建时间",key:"created",dataIndex:"created",width:"180px"},{title:"状态",key:"status",width:"80px"}];async function O(){$.value=!0;try{const{output:l}=await C.execute("did list",15e3);U.value=te(l)}catch(l){x.error("加载 DID 列表失败: "+l.message)}finally{$.value=!1}}function te(l){const e=[],y=l.split(`
2
- `);for(const w of y){const s=w.trim();if(!s||s.startsWith("─")||s.startsWith("DID")||s.match(/^\d+ identit/i))continue;const i=s.match(/(did:\w+:\w+)/);if(i){const d=i[1],g=d.split(":")[1]||"key",b=/default|默认|\*/.test(s),_=s.match(/(\d{4}-\d{2}-\d{2}[\sT]?\d{2}:\d{2}(?::\d{2})?)/);e.push({key:d,did:d,method:g,created:_?_[1]:"-",isDefault:b})}}return e}async function ae(){E.value=!0;try{const{output:l}=await C.execute("did create",2e4);l.includes("error")||l.includes("失败")?x.error("创建失败: "+l.slice(0,120)):(x.success("DID 身份已创建"),await O())}catch(l){x.error("创建失败: "+l.message)}finally{E.value=!1}}async function le(){if(!W.value.trim()){x.warning("请输入消息");return}K.value=!0,L.value="";try{const{output:l}=await C.execute(`did sign "${W.value.replace(/"/g,'\\"')}"`,15e3);L.value=l,!l.includes("error")&&!l.includes("失败")&&x.success("签名成功")}catch(l){L.value="签名失败: "+l.message}finally{K.value=!1}}const T=r(""),A=r(""),B=r(!1),F=r(!1),k=r(null),h=r(null);async function oe(){if(T.value.trim()){B.value=!0,k.value=null;try{const{output:l,exitCode:e}=await C.execute(`encrypt file "${T.value.trim()}"`,3e4);k.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"加密完成"},k.value.success&&x.success("文件加密成功")}catch(l){k.value={success:!1,output:"加密失败: "+l.message}}finally{B.value=!1}}}async function se(){if(A.value.trim()){F.value=!0,h.value=null;try{const{output:l,exitCode:e}=await C.execute(`decrypt file "${A.value.trim()}"`,3e4);h.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"解密完成"},h.value.success&&x.success("文件解密成功")}catch(l){h.value={success:!1,output:"解密失败: "+l.message}}finally{F.value=!1}}}const P=r(!1),S=r([]),J=r([]),ne=[{title:"时间",key:"time",dataIndex:"time",width:"180px"},{title:"事件",key:"event",dataIndex:"event",width:"200px"},{title:"用户",key:"user",dataIndex:"user",width:"120px"},{title:"级别",key:"level",dataIndex:"level",width:"80px"},{title:"详情",key:"detail",dataIndex:"detail",ellipsis:!0}];function re(l){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(l||"").toLowerCase()]||"default"}async function X(){P.value=!0;try{const[l,e]=await Promise.all([C.execute("audit log",15e3),C.execute("audit stats",15e3)]);S.value=ie(l.output),J.value=ue(e.output)}catch(l){x.error("加载审计日志失败: "+l.message)}finally{P.value=!1}}function ie(l){const e=[],y=l.split(`
1
+ import{u as fe}from"./ws-BTS8ehTm.js";import{_ as ve}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-36fB-tdr.js";import{r as me,Y as ye,K as ge,i as _e,L as H,a1 as be}from"./icons-DEoqYzGZ.js";import{l as xe,F as p,D as I,c as t,x as a,r,q as u,v as n,J as f,u as D,m as z,I as c,G as m,H as ke,L as he}from"./vendor-aH7YaPZi.js";import"./index-BPzN5a2A.js";import"./useConfigInject-DIr4olCu.js";import"./transition-B3-w1SVL.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-DXIqogG2.js";import"./index-U4Zd5IK6.js";const we={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={key:0,style:{"text-align":"center",padding:"60px"}},De={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Re={key:0,style:{"margin-top":"12px"}},ze={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Le={key:0,style:{"margin-top":"8px"}},Te={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ae={key:0,style:{"margin-top":"8px"}},Ne={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},We={key:0,style:{"text-align":"center",padding:"60px"}},Oe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Se={key:1,style:{color:"#e0e0e0"}},Me={key:2,style:{color:"var(--text-secondary)"}},$e={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ee={__name:"Security",setup(Ke){const C=fe(),N=r("did"),M=r(!1);async function X(){M.value=!0;try{N.value==="did"?await O():N.value==="audit"&&await Y()}finally{M.value=!1}}function Z(l){l==="did"&&U.value.length===0&&O(),l==="audit"&&S.value.length===0&&Y()}const $=r(!1),E=r(!1),K=r(!1),U=r([]),V=r(!1),W=r(""),L=r(""),ee=[{title:"DID",key:"did",dataIndex:"did",ellipsis:!0},{title:"方法",key:"method",dataIndex:"method",width:"100px"},{title:"创建时间",key:"created",dataIndex:"created",width:"180px"},{title:"状态",key:"status",width:"80px"}];async function O(){$.value=!0;try{const{output:l}=await C.execute("did list",15e3);U.value=te(l)}catch(l){x.error("加载 DID 列表失败: "+l.message)}finally{$.value=!1}}function te(l){const e=[],y=l.split(`
2
+ `);for(const w of y){const s=w.trim();if(!s||s.startsWith("─")||s.startsWith("DID")||s.match(/^\d+ identit/i))continue;const i=s.match(/(did:\w+:\w+)/);if(i){const d=i[1],g=d.split(":")[1]||"key",b=/default|默认|\*/.test(s),_=s.match(/(\d{4}-\d{2}-\d{2}[\sT]?\d{2}:\d{2}(?::\d{2})?)/);e.push({key:d,did:d,method:g,created:_?_[1]:"-",isDefault:b})}}return e}async function ae(){E.value=!0;try{const{output:l}=await C.execute("did create",2e4);l.includes("error")||l.includes("失败")?x.error("创建失败: "+l.slice(0,120)):(x.success("DID 身份已创建"),await O())}catch(l){x.error("创建失败: "+l.message)}finally{E.value=!1}}async function le(){if(!W.value.trim()){x.warning("请输入消息");return}K.value=!0,L.value="";try{const{output:l}=await C.execute(`did sign "${W.value.replace(/"/g,'\\"')}"`,15e3);L.value=l,!l.includes("error")&&!l.includes("失败")&&x.success("签名成功")}catch(l){L.value="签名失败: "+l.message}finally{K.value=!1}}const T=r(""),A=r(""),B=r(!1),F=r(!1),k=r(null),h=r(null);async function oe(){if(T.value.trim()){B.value=!0,k.value=null;try{const{output:l,exitCode:e}=await C.execute(`encrypt file "${T.value.trim()}"`,3e4);k.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"加密完成"},k.value.success&&x.success("文件加密成功")}catch(l){k.value={success:!1,output:"加密失败: "+l.message}}finally{B.value=!1}}}async function se(){if(A.value.trim()){F.value=!0,h.value=null;try{const{output:l,exitCode:e}=await C.execute(`decrypt file "${A.value.trim()}"`,3e4);h.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"解密完成"},h.value.success&&x.success("文件解密成功")}catch(l){h.value={success:!1,output:"解密失败: "+l.message}}finally{F.value=!1}}}const P=r(!1),S=r([]),J=r([]),ne=[{title:"时间",key:"time",dataIndex:"time",width:"180px"},{title:"事件",key:"event",dataIndex:"event",width:"200px"},{title:"用户",key:"user",dataIndex:"user",width:"120px"},{title:"级别",key:"level",dataIndex:"level",width:"80px"},{title:"详情",key:"detail",dataIndex:"detail",ellipsis:!0}];function re(l){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(l||"").toLowerCase()]||"default"}async function Y(){P.value=!0;try{const[l,e]=await Promise.all([C.execute("audit log",15e3),C.execute("audit stats",15e3)]);S.value=ie(l.output),J.value=ue(e.output)}catch(l){x.error("加载审计日志失败: "+l.message)}finally{P.value=!1}}function ie(l){const e=[],y=l.split(`
3
3
  `);for(const w of y){const s=w.trim();if(!s||s.startsWith("─")||s.startsWith("Audit")||s.startsWith("Recent"))continue;const i=s.split(/\s*[|│]\s*/);if(i.length>=3){e.push({key:e.length,time:i[0]||"-",event:i[1]||"-",user:i[2]||"-",level:i[3]||"info",detail:i.slice(4).join(" ")||""});continue}const d=s.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(d){const g=d[2],b=g.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);e.push({key:e.length,time:d[1],event:g.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:b?b[1].toLowerCase():"info",detail:""})}else s.length>3&&!s.match(/^\d+ event/i)&&e.push({key:e.length,time:"-",event:s.slice(0,80),user:"-",level:"info",detail:""})}return e}function ue(l){const e=[],y=l.split(`
4
- `),w=["#1677ff","#52c41a","#faad14","#ff4d4f"];let s=0;for(const i of y){const d=i.trim();if(!d||d.startsWith("─")||d.startsWith("Audit"))continue;const g=d.match(/^(.+?)\s*[:=:]\s*(.+)$/);if(g){const b=g[1].trim(),_=g[2].trim(),R=_.match(/^(\d+)/);e.push({label:b,value:R?parseInt(R[1],10):_,color:w[s%w.length]}),s++}}return e.length===0&&e.push({label:"总事件数",value:S.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),e}return xe(()=>{O()}),(l,e)=>{const y=u("a-button"),w=u("a-space"),s=u("a-spin"),i=u("a-tag"),d=u("a-empty"),g=u("a-table"),b=u("a-input"),_=u("a-form-item"),R=u("a-form"),de=u("a-modal"),q=u("a-tab-pane"),G=u("a-card"),j=u("a-col"),Q=u("a-row"),ce=u("a-statistic"),pe=u("a-tabs");return n(),p("div",null,[I("div",we,[e[7]||(e[7]=I("div",null,[I("h2",{class:"page-title"},"安全中心"),I("p",{class:"page-sub"},"DID 身份 / 加密 / 审计")],-1)),t(y,{type:"primary",ghost:"",loading:M.value,onClick:Y},{icon:a(()=>[t(D(me))]),default:a(()=>[e[6]||(e[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),t(pe,{activeKey:N.value,"onUpdate:activeKey":e[5]||(e[5]=o=>N.value=o),onChange:Z},{default:a(()=>[t(q,{key:"did"},{tab:a(()=>[t(D(_e)),e[8]||(e[8]=f(" DID 身份 ",-1))]),default:a(()=>[t(w,{style:{"margin-bottom":"16px"}},{default:a(()=>[t(y,{type:"primary",loading:E.value,onClick:ae},{icon:a(()=>[t(D(ye))]),default:a(()=>[e[9]||(e[9]=f(" 创建身份 ",-1))]),_:1},8,["loading"]),t(y,{onClick:e[0]||(e[0]=o=>V.value=!0)},{icon:a(()=>[t(D(ge))]),default:a(()=>[e[10]||(e[10]=f(" 签名消息 ",-1))]),_:1})]),_:1}),$.value?(n(),p("div",Ie,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ee,"data-source":U.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="did"?(n(),p("span",De,c(v.did),1)):m("",!0),o.key==="method"?(n(),z(i,{key:1,color:"blue"},{default:a(()=>[f(c(v.method),1)]),_:2},1024)):m("",!0),o.key==="created"?(n(),p("span",Ce,c(v.created),1)):m("",!0),o.key==="status"?(n(),z(i,{key:3,color:v.isDefault?"green":"default"},{default:a(()=>[f(c(v.isDefault?"默认":"可用"),1)]),_:2},1032,["color"])):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无 DID 身份,点击「创建身份」添加"})]),_:1},8,["data-source","pagination"])),t(de,{open:V.value,"onUpdate:open":e[2]||(e[2]=o=>V.value=o),title:"DID 签名","confirm-loading":K.value,onOk:le,"ok-text":"签名","cancel-text":"取消"},{default:a(()=>[t(R,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[t(_,{label:"消息",required:""},{default:a(()=>[t(b,{value:W.value,"onUpdate:value":e[1]||(e[1]=o=>W.value=o),placeholder:"请输入要签名的消息"},null,8,["value"])]),_:1})]),_:1}),L.value?(n(),p("div",Re,[e[11]||(e[11]=I("p",{style:{color:"var(--text-secondary)","margin-bottom":"6px"}},"签名结果:",-1)),I("pre",ze,c(L.value),1)])):m("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),t(q,{key:"encrypt"},{tab:a(()=>[t(D(H)),e[12]||(e[12]=f(" 文件加密 ",-1))]),default:a(()=>[t(Q,{gutter:[24,24]},{default:a(()=>[t(j,{xs:24,md:12},{default:a(()=>[t(G,{title:"加密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:T.value,"onUpdate:value":e[3]||(e[3]=o=>T.value=o),placeholder:"输入文件路径,如 /path/to/file.txt"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:B.value,disabled:!T.value.trim(),onClick:oe},{icon:a(()=>[t(D(H))]),default:a(()=>[e[13]||(e[13]=f(" 加密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),k.value?(n(),p("div",Le,[t(i,{color:k.value.success?"green":"red"},{default:a(()=>[f(c(k.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Te,c(k.value.output),1)])):m("",!0)]),_:1})]),_:1}),t(j,{xs:24,md:12},{default:a(()=>[t(G,{title:"解密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:A.value,"onUpdate:value":e[4]||(e[4]=o=>A.value=o),placeholder:"输入加密文件路径,如 /path/to/file.txt.enc"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:F.value,disabled:!A.value.trim(),onClick:se},{icon:a(()=>[t(D(H))]),default:a(()=>[e[14]||(e[14]=f(" 解密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),h.value?(n(),p("div",Ae,[t(i,{color:h.value.success?"green":"red"},{default:a(()=>[f(c(h.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Ne,c(h.value.output),1)])):m("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),t(q,{key:"audit"},{tab:a(()=>[t(D(be)),e[15]||(e[15]=f(" 审计日志 ",-1))]),default:a(()=>[t(Q,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(n(!0),p(ke,null,he(J.value,o=>(n(),z(j,{xs:12,sm:6,key:o.label},{default:a(()=>[t(G,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[t(ce,{title:o.label,value:o.value,"value-style":{color:o.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),P.value?(n(),p("div",We,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ne,"data-source":S.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="time"?(n(),p("span",Oe,c(v.time),1)):m("",!0),o.key==="event"?(n(),p("span",Se,c(v.event),1)):m("",!0),o.key==="user"?(n(),p("span",Me,c(v.user),1)):m("",!0),o.key==="level"?(n(),z(i,{key:3,color:re(v.level)},{default:a(()=>[f(c(v.level),1)]),_:2},1032,["color"])):m("",!0),o.key==="detail"?(n(),p("span",$e,c(v.detail),1)):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Qe=ve(Ee,[["__scopeId","data-v-d730836a"]]);export{Qe as default};
4
+ `),w=["#1677ff","#52c41a","#faad14","#ff4d4f"];let s=0;for(const i of y){const d=i.trim();if(!d||d.startsWith("─")||d.startsWith("Audit"))continue;const g=d.match(/^(.+?)\s*[:=:]\s*(.+)$/);if(g){const b=g[1].trim(),_=g[2].trim(),R=_.match(/^(\d+)/);e.push({label:b,value:R?parseInt(R[1],10):_,color:w[s%w.length]}),s++}}return e.length===0&&e.push({label:"总事件数",value:S.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),e}return xe(()=>{O()}),(l,e)=>{const y=u("a-button"),w=u("a-space"),s=u("a-spin"),i=u("a-tag"),d=u("a-empty"),g=u("a-table"),b=u("a-input"),_=u("a-form-item"),R=u("a-form"),de=u("a-modal"),G=u("a-tab-pane"),j=u("a-card"),q=u("a-col"),Q=u("a-row"),ce=u("a-statistic"),pe=u("a-tabs");return n(),p("div",null,[I("div",we,[e[7]||(e[7]=I("div",null,[I("h2",{class:"page-title"},"安全中心"),I("p",{class:"page-sub"},"DID 身份 / 加密 / 审计")],-1)),t(y,{type:"primary",ghost:"",loading:M.value,onClick:X},{icon:a(()=>[t(D(me))]),default:a(()=>[e[6]||(e[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),t(pe,{activeKey:N.value,"onUpdate:activeKey":e[5]||(e[5]=o=>N.value=o),onChange:Z},{default:a(()=>[t(G,{key:"did"},{tab:a(()=>[t(D(_e)),e[8]||(e[8]=f(" DID 身份 ",-1))]),default:a(()=>[t(w,{style:{"margin-bottom":"16px"}},{default:a(()=>[t(y,{type:"primary",loading:E.value,onClick:ae},{icon:a(()=>[t(D(ye))]),default:a(()=>[e[9]||(e[9]=f(" 创建身份 ",-1))]),_:1},8,["loading"]),t(y,{onClick:e[0]||(e[0]=o=>V.value=!0)},{icon:a(()=>[t(D(ge))]),default:a(()=>[e[10]||(e[10]=f(" 签名消息 ",-1))]),_:1})]),_:1}),$.value?(n(),p("div",Ie,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ee,"data-source":U.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="did"?(n(),p("span",De,c(v.did),1)):m("",!0),o.key==="method"?(n(),z(i,{key:1,color:"blue"},{default:a(()=>[f(c(v.method),1)]),_:2},1024)):m("",!0),o.key==="created"?(n(),p("span",Ce,c(v.created),1)):m("",!0),o.key==="status"?(n(),z(i,{key:3,color:v.isDefault?"green":"default"},{default:a(()=>[f(c(v.isDefault?"默认":"可用"),1)]),_:2},1032,["color"])):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无 DID 身份,点击「创建身份」添加"})]),_:1},8,["data-source","pagination"])),t(de,{open:V.value,"onUpdate:open":e[2]||(e[2]=o=>V.value=o),title:"DID 签名","confirm-loading":K.value,onOk:le,"ok-text":"签名","cancel-text":"取消"},{default:a(()=>[t(R,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[t(_,{label:"消息",required:""},{default:a(()=>[t(b,{value:W.value,"onUpdate:value":e[1]||(e[1]=o=>W.value=o),placeholder:"请输入要签名的消息"},null,8,["value"])]),_:1})]),_:1}),L.value?(n(),p("div",Re,[e[11]||(e[11]=I("p",{style:{color:"var(--text-secondary)","margin-bottom":"6px"}},"签名结果:",-1)),I("pre",ze,c(L.value),1)])):m("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),t(G,{key:"encrypt"},{tab:a(()=>[t(D(H)),e[12]||(e[12]=f(" 文件加密 ",-1))]),default:a(()=>[t(Q,{gutter:[24,24]},{default:a(()=>[t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"加密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:T.value,"onUpdate:value":e[3]||(e[3]=o=>T.value=o),placeholder:"输入文件路径,如 /path/to/file.txt"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:B.value,disabled:!T.value.trim(),onClick:oe},{icon:a(()=>[t(D(H))]),default:a(()=>[e[13]||(e[13]=f(" 加密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),k.value?(n(),p("div",Le,[t(i,{color:k.value.success?"green":"red"},{default:a(()=>[f(c(k.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Te,c(k.value.output),1)])):m("",!0)]),_:1})]),_:1}),t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"解密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:A.value,"onUpdate:value":e[4]||(e[4]=o=>A.value=o),placeholder:"输入加密文件路径,如 /path/to/file.txt.enc"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:F.value,disabled:!A.value.trim(),onClick:se},{icon:a(()=>[t(D(H))]),default:a(()=>[e[14]||(e[14]=f(" 解密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),h.value?(n(),p("div",Ae,[t(i,{color:h.value.success?"green":"red"},{default:a(()=>[f(c(h.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Ne,c(h.value.output),1)])):m("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),t(G,{key:"audit"},{tab:a(()=>[t(D(be)),e[15]||(e[15]=f(" 审计日志 ",-1))]),default:a(()=>[t(Q,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(n(!0),p(ke,null,he(J.value,o=>(n(),z(q,{xs:12,sm:6,key:o.label},{default:a(()=>[t(j,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[t(ce,{title:o.label,value:o.value,"value-style":{color:o.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),P.value?(n(),p("div",We,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ne,"data-source":S.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="time"?(n(),p("span",Oe,c(v.time),1)):m("",!0),o.key==="event"?(n(),p("span",Se,c(v.event),1)):m("",!0),o.key==="user"?(n(),p("span",Me,c(v.user),1)):m("",!0),o.key==="level"?(n(),z(i,{key:3,color:re(v.level)},{default:a(()=>[f(c(v.level),1)]),_:2},1032,["color"])):m("",!0),o.key==="detail"?(n(),p("span",$e,c(v.detail),1)):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Qe=ve(Ee,[["__scopeId","data-v-d730836a"]]);export{Qe as default};
@@ -1,2 +1,2 @@
1
- import{u as J}from"./ws-BTS8ehTm.js";import{_ as P}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{q as Q,s as U,b as R,r as K,Q as X,U as Y,a as Z}from"./icons-DzieZiVh.js";import{l as ee,F as d,D as m,c as e,x as t,r,q as n,v as s,J as y,u as c,I as u,G as g,m as V,j as te}from"./vendor-aH7YaPZi.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=J(),B=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),F=r(""),z=r(!1),D=r(""),k=r(""),L=r(""),M=r(!1),h=r(""),w=r(""),I=r([]),N=te(()=>S.status==="connected"),W=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function $(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);F.value=o,j(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function j(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(D.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],L.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
2
- `).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));I.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function q(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee($),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),E=n("a-tag"),G=n("a-spin"),T=n("a-badge"),A=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:$},{icon:t(()=>[e(c(Q))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(U))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",ae,"版本: "+u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c(R))]),_:1}),m("div",re," 端口: "+u(c(B).wsPort||18800)+" · "+u(c(B).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(K))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",le,u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(X))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(E,{color:N.value?"green":"red"},{default:t(()=>[y(" WS "+u(N.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(G)])):(s(),V(A,{key:1,columns:W,"data-source":I.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),V(T,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:q,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Y))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Z))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(R))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},ye=P(pe,[["__scopeId","data-v-13be6bfe"]]);export{ye as default};
1
+ import{u as J}from"./ws-BTS8ehTm.js";import{_ as P}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as U,t as X,b as R,s as K,U as Q,X as Y,a as Z}from"./icons-DEoqYzGZ.js";import{l as ee,F as d,D as m,c as e,x as t,r,q as n,v as s,J as y,u as c,I as u,G as g,m as V,j as te}from"./vendor-aH7YaPZi.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=J(),B=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),F=r(""),z=r(!1),D=r(""),k=r(""),L=r(""),M=r(!1),h=r(""),w=r(""),I=r([]),N=te(()=>S.status==="connected"),W=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function $(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);F.value=o,j(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function j(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(D.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],L.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
2
+ `).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));I.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function E(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee($),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),G=n("a-tag"),T=n("a-spin"),q=n("a-badge"),A=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:$},{icon:t(()=>[e(c(U))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(X))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",ae,"版本: "+u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c(R))]),_:1}),m("div",re," 端口: "+u(c(B).wsPort||18800)+" · "+u(c(B).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(K))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",le,u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(Q))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(G,{color:N.value?"green":"red"},{default:t(()=>[y(" WS "+u(N.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(T)])):(s(),V(A,{key:1,columns:W,"data-source":I.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),V(q,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:E,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Y))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Z))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(R))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},ye=P(pe,[["__scopeId","data-v-13be6bfe"]]);export{ye as default};
@@ -1,4 +1,4 @@
1
- import{_ as o}from"./index-4C1c4hkZ.js";import{c as C,g as N,m as D,u as G}from"./useConfigInject-C2E3Qsop.js";import{i as W}from"./initDefaultProps-_t-PG0bz.js";import{d as I,c}from"./vendor-aH7YaPZi.js";import{K as j}from"./Keyframes-C7fCrnlS.js";const z=()=>({prefixCls:String,width:{type:[Number,String]}}),O=I({compatConfig:{MODE:3},name:"SkeletonTitle",props:z(),setup(e){return()=>{const{prefixCls:t,width:n}=e,r=typeof n=="number"?`${n}px`:n;return c("h3",{class:t,style:{width:r}},null)}}}),X=()=>({prefixCls:String,width:{type:[Number,String,Array]},rows:Number}),_=I({compatConfig:{MODE:3},name:"SkeletonParagraph",props:X(),setup(e){const t=n=>{const{width:r,rows:l=2}=e;if(Array.isArray(r))return r[n];if(l-1===n)return r};return()=>{const{prefixCls:n,rows:r}=e,l=[...Array(r)].map((i,a)=>{const d=t(a);return c("li",{key:a,style:{width:typeof d=="number"?`${d}px`:d}},null)});return c("ul",{class:n},[l])}}}),se=()=>({prefixCls:String,size:[String,Number],shape:String,active:{type:Boolean,default:void 0}}),L=e=>{const{prefixCls:t,size:n,shape:r}=e,l=C({[`${t}-lg`]:n==="large",[`${t}-sm`]:n==="small"}),i=C({[`${t}-circle`]:r==="circle",[`${t}-square`]:r==="square",[`${t}-round`]:r==="round"}),a=typeof n=="number"?{width:`${n}px`,height:`${n}px`,lineHeight:`${n}px`}:{};return c("span",{class:C(t,l,i),style:a},null)};L.displayName="SkeletonElement";const q=new j("ant-skeleton-loading",{"0%":{transform:"translateX(-37.5%)"},"100%":{transform:"translateX(37.5%)"}}),v=e=>({height:e,lineHeight:`${e}px`}),$=e=>o({width:e},v(e)),F=e=>({position:"relative",zIndex:0,overflow:"hidden",background:"transparent","&::after":{position:"absolute",top:0,insetInlineEnd:"-150%",bottom:0,insetInlineStart:"-150%",background:e.skeletonLoadingBackground,animationName:q,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite",content:'""'}}),P=e=>o({width:e*5,minWidth:e*5},v(e)),K=e=>{const{skeletonAvatarCls:t,color:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i}=e;return{[`${t}`]:o({display:"inline-block",verticalAlign:"top",background:n},$(r)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:o({},$(l)),[`${t}${t}-sm`]:o({},$(i))}},V=e=>{const{controlHeight:t,borderRadiusSM:n,skeletonInputCls:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return{[`${r}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:n},P(t)),[`${r}-lg`]:o({},P(l)),[`${r}-sm`]:o({},P(i))}},M=e=>o({width:e},v(e)),J=e=>{const{skeletonImageCls:t,imageSizeBase:n,color:r,borderRadiusSM:l}=e;return{[`${t}`]:o(o({display:"flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",background:r,borderRadius:l},M(n*2)),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:o(o({},M(n)),{maxWidth:n*4,maxHeight:n*4}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}},x=(e,t,n)=>{const{skeletonButtonCls:r}=e;return{[`${n}${r}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${n}${r}-round`]:{borderRadius:t}}},E=e=>o({width:e*2,minWidth:e*2},v(e)),Q=e=>{const{borderRadiusSM:t,skeletonButtonCls:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return o(o(o(o(o({[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:t,width:r*2,minWidth:r*2},E(r))},x(e,r,n)),{[`${n}-lg`]:o({},E(l))}),x(e,l,`${n}-lg`)),{[`${n}-sm`]:o({},E(i))}),x(e,i,`${n}-sm`))},U=e=>{const{componentCls:t,skeletonAvatarCls:n,skeletonTitleCls:r,skeletonParagraphCls:l,skeletonButtonCls:i,skeletonInputCls:a,skeletonImageCls:d,controlHeight:y,controlHeightLG:f,controlHeightSM:p,color:g,padding:w,marginSM:B,borderRadius:s,skeletonTitleHeight:h,skeletonBlockRadius:u,skeletonParagraphLineHeight:m,controlHeightXS:k,skeletonParagraphMarginTop:S}=e;return{[`${t}`]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:w,verticalAlign:"top",[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:g},$(y)),[`${n}-circle`]:{borderRadius:"50%"},[`${n}-lg`]:o({},$(f)),[`${n}-sm`]:o({},$(p))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[`${r}`]:{width:"100%",height:h,background:g,borderRadius:u,[`+ ${l}`]:{marginBlockStart:p}},[`${l}`]:{padding:0,"> li":{width:"100%",height:m,listStyle:"none",background:g,borderRadius:u,"+ li":{marginBlockStart:k}}},[`${l}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${r}, ${l} > li`]:{borderRadius:s}}},[`${t}-with-avatar ${t}-content`]:{[`${r}`]:{marginBlockStart:B,[`+ ${l}`]:{marginBlockStart:S}}},[`${t}${t}-element`]:o(o(o(o({display:"inline-block",width:"auto"},Q(e)),K(e)),V(e)),J(e)),[`${t}${t}-block`]:{width:"100%",[`${i}`]:{width:"100%"},[`${a}`]:{width:"100%"}},[`${t}${t}-active`]:{[`
1
+ import{_ as o}from"./index-BPzN5a2A.js";import{c as C,g as N,m as D,u as G}from"./useConfigInject-DIr4olCu.js";import{i as W}from"./initDefaultProps-DR3dFRrN.js";import{d as I,c}from"./vendor-aH7YaPZi.js";import{K as j}from"./Keyframes-C7fCrnlS.js";const z=()=>({prefixCls:String,width:{type:[Number,String]}}),O=I({compatConfig:{MODE:3},name:"SkeletonTitle",props:z(),setup(e){return()=>{const{prefixCls:t,width:n}=e,r=typeof n=="number"?`${n}px`:n;return c("h3",{class:t,style:{width:r}},null)}}}),X=()=>({prefixCls:String,width:{type:[Number,String,Array]},rows:Number}),_=I({compatConfig:{MODE:3},name:"SkeletonParagraph",props:X(),setup(e){const t=n=>{const{width:r,rows:l=2}=e;if(Array.isArray(r))return r[n];if(l-1===n)return r};return()=>{const{prefixCls:n,rows:r}=e,l=[...Array(r)].map((i,a)=>{const d=t(a);return c("li",{key:a,style:{width:typeof d=="number"?`${d}px`:d}},null)});return c("ul",{class:n},[l])}}}),se=()=>({prefixCls:String,size:[String,Number],shape:String,active:{type:Boolean,default:void 0}}),L=e=>{const{prefixCls:t,size:n,shape:r}=e,l=C({[`${t}-lg`]:n==="large",[`${t}-sm`]:n==="small"}),i=C({[`${t}-circle`]:r==="circle",[`${t}-square`]:r==="square",[`${t}-round`]:r==="round"}),a=typeof n=="number"?{width:`${n}px`,height:`${n}px`,lineHeight:`${n}px`}:{};return c("span",{class:C(t,l,i),style:a},null)};L.displayName="SkeletonElement";const q=new j("ant-skeleton-loading",{"0%":{transform:"translateX(-37.5%)"},"100%":{transform:"translateX(37.5%)"}}),v=e=>({height:e,lineHeight:`${e}px`}),$=e=>o({width:e},v(e)),F=e=>({position:"relative",zIndex:0,overflow:"hidden",background:"transparent","&::after":{position:"absolute",top:0,insetInlineEnd:"-150%",bottom:0,insetInlineStart:"-150%",background:e.skeletonLoadingBackground,animationName:q,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite",content:'""'}}),P=e=>o({width:e*5,minWidth:e*5},v(e)),K=e=>{const{skeletonAvatarCls:t,color:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i}=e;return{[`${t}`]:o({display:"inline-block",verticalAlign:"top",background:n},$(r)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:o({},$(l)),[`${t}${t}-sm`]:o({},$(i))}},V=e=>{const{controlHeight:t,borderRadiusSM:n,skeletonInputCls:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return{[`${r}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:n},P(t)),[`${r}-lg`]:o({},P(l)),[`${r}-sm`]:o({},P(i))}},M=e=>o({width:e},v(e)),J=e=>{const{skeletonImageCls:t,imageSizeBase:n,color:r,borderRadiusSM:l}=e;return{[`${t}`]:o(o({display:"flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",background:r,borderRadius:l},M(n*2)),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:o(o({},M(n)),{maxWidth:n*4,maxHeight:n*4}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}},x=(e,t,n)=>{const{skeletonButtonCls:r}=e;return{[`${n}${r}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${n}${r}-round`]:{borderRadius:t}}},E=e=>o({width:e*2,minWidth:e*2},v(e)),Q=e=>{const{borderRadiusSM:t,skeletonButtonCls:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return o(o(o(o(o({[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:t,width:r*2,minWidth:r*2},E(r))},x(e,r,n)),{[`${n}-lg`]:o({},E(l))}),x(e,l,`${n}-lg`)),{[`${n}-sm`]:o({},E(i))}),x(e,i,`${n}-sm`))},U=e=>{const{componentCls:t,skeletonAvatarCls:n,skeletonTitleCls:r,skeletonParagraphCls:l,skeletonButtonCls:i,skeletonInputCls:a,skeletonImageCls:d,controlHeight:y,controlHeightLG:f,controlHeightSM:p,color:g,padding:w,marginSM:B,borderRadius:s,skeletonTitleHeight:h,skeletonBlockRadius:u,skeletonParagraphLineHeight:m,controlHeightXS:k,skeletonParagraphMarginTop:S}=e;return{[`${t}`]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:w,verticalAlign:"top",[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:g},$(y)),[`${n}-circle`]:{borderRadius:"50%"},[`${n}-lg`]:o({},$(f)),[`${n}-sm`]:o({},$(p))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[`${r}`]:{width:"100%",height:h,background:g,borderRadius:u,[`+ ${l}`]:{marginBlockStart:p}},[`${l}`]:{padding:0,"> li":{width:"100%",height:m,listStyle:"none",background:g,borderRadius:u,"+ li":{marginBlockStart:k}}},[`${l}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${r}, ${l} > li`]:{borderRadius:s}}},[`${t}-with-avatar ${t}-content`]:{[`${r}`]:{marginBlockStart:B,[`+ ${l}`]:{marginBlockStart:S}}},[`${t}${t}-element`]:o(o(o(o({display:"inline-block",width:"auto"},Q(e)),K(e)),V(e)),J(e)),[`${t}${t}-block`]:{width:"100%",[`${i}`]:{width:"100%"},[`${a}`]:{width:"100%"}},[`${t}${t}-active`]:{[`
2
2
  ${r},
3
3
  ${l} > li,
4
4
  ${n},
@@ -1 +1 @@
1
- import{k as j,r as v,j as h,l as A,F as f,D as i,I as y,u as a,c as r,x as d,H as C,L,q as p,B as F,v as u,J as g,m as M}from"./vendor-aH7YaPZi.js";import{u as N}from"./ws-BTS8ehTm.js";import{p as Q}from"./parsers-DftYMnlk.js";import{u as V}from"./chat-BNXQJRrX.js";import{_ as $}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{A as D,q as E,O as R}from"./icons-DzieZiVh.js";const T=j("skills",()=>{const _=v(!1),e=v([]),c=v(""),m=v("all"),x=h(()=>{const n=new Set(["all"]);return e.value.forEach(l=>{l.category&&n.add(l.category),l.executionMode&&n.add(l.executionMode)}),[...n]}),k=h(()=>{let n=e.value;if(m.value!=="all"&&(n=n.filter(l=>l.category===m.value||l.executionMode===m.value)),c.value){const l=c.value.toLowerCase();n=n.filter(o=>o.name?.toLowerCase().includes(l)||o.description?.toLowerCase().includes(l)||o.title?.toLowerCase().includes(l))}return n});async function b(){const n=N();_.value=!0;try{const{output:l}=await n.execute("skill list",2e4),o=Q(l);e.value=o}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:e,searchQuery:c,selectedCategory:m,categories:x,filteredSkills:k,loadSkills:b}}),U={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},H={class:"page-sub"},J={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},P={key:0,style:{"text-align":"center",padding:"60px"}},W={key:1,class:"skills-grid"},G={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},K={style:{flex:"1","min-width":"0"}},X={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Y={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Z={style:{"margin-left":"12px","flex-shrink":"0"}},ee={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},te={key:2,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},oe={__name:"Skills",setup(_){const e=T(),c=V(),m=F(),x=h(()=>e.categories.filter(o=>o!=="all").slice(0,6));function k(o){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[o]||o}function b(o){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[o]||o||"未知"}function n(o){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[o]||"default"}async function l(o){await c.createSession("agent"),m.push("/chat"),setTimeout(()=>{c.currentSessionId&&c.sendMessage(c.currentSessionId,`/skill run ${o}`)},300)}return A(()=>{e.allSkills.length||e.loadSkills()}),(o,t)=>{const S=p("a-button"),z=p("a-input-search"),w=p("a-radio-button"),q=p("a-radio-group"),I=p("a-spin"),B=p("a-tag"),O=p("a-card");return u(),f("div",null,[i("div",U,[i("div",null,[t[3]||(t[3]=i("h2",{class:"page-title"},"技能管理",-1)),i("p",H,y(a(e).allSkills.length)+" 个可用技能",1)]),r(S,{type:"primary",ghost:"",loading:a(e).loading,onClick:t[0]||(t[0]=s=>a(e).loadSkills())},{icon:d(()=>[r(a(E))]),default:d(()=>[t[4]||(t[4]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),i("div",J,[r(z,{value:a(e).searchQuery,"onUpdate:value":t[1]||(t[1]=s=>a(e).searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),r(q,{value:a(e).selectedCategory,"onUpdate:value":t[2]||(t[2]=s=>a(e).selectedCategory=s),"button-style":"solid"},{default:d(()=>[r(w,{value:"all"},{default:d(()=>[...t[5]||(t[5]=[g("全部",-1)])]),_:1}),(u(!0),f(C,null,L(x.value,s=>(u(),M(w,{key:s,value:s},{default:d(()=>[g(y(k(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(e).loading?(u(),f("div",P,[r(I,{size:"large"}),t[6]||(t[6]=i("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):a(e).filteredSkills.length?(u(),f("div",W,[(u(!0),f(C,null,L(a(e).filteredSkills,s=>(u(),M(O,{key:s.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:d(()=>[i("div",G,[i("div",K,[i("div",X,y(s.name),1),i("div",Y,y(s.description||"暂无描述"),1)]),i("div",Z,[r(B,{color:n(s.executionMode),style:{"font-size":"10px"}},{default:d(()=>[g(y(b(s.executionMode)),1)]),_:2},1032,["color"])])]),i("div",ee,[r(S,{size:"small",type:"primary",ghost:"",onClick:le=>l(s.name)},{icon:d(()=>[r(a(R))]),default:d(()=>[t[7]||(t[7]=g(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])):(u(),f("div",te,[r(a(D),{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),i("div",null,y(a(e).allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)]))])}}},ce=$(oe,[["__scopeId","data-v-a1cd8dd9"]]);export{ce as default};
1
+ import{k as A,r as v,j as h,l as O,F as f,D as i,I as y,u as a,c as r,x as d,H as C,L,q as p,B as Q,v as u,J as g,m as M}from"./vendor-aH7YaPZi.js";import{u as F}from"./ws-BTS8ehTm.js";import{p as N}from"./parsers-DftYMnlk.js";import{u as V}from"./chat-BNXQJRrX.js";import{_ as $}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{A as D,r as E,Q as R}from"./icons-DEoqYzGZ.js";const T=A("skills",()=>{const _=v(!1),e=v([]),c=v(""),m=v("all"),x=h(()=>{const n=new Set(["all"]);return e.value.forEach(l=>{l.category&&n.add(l.category),l.executionMode&&n.add(l.executionMode)}),[...n]}),k=h(()=>{let n=e.value;if(m.value!=="all"&&(n=n.filter(l=>l.category===m.value||l.executionMode===m.value)),c.value){const l=c.value.toLowerCase();n=n.filter(o=>o.name?.toLowerCase().includes(l)||o.description?.toLowerCase().includes(l)||o.title?.toLowerCase().includes(l))}return n});async function b(){const n=F();_.value=!0;try{const{output:l}=await n.execute("skill list",2e4),o=N(l);e.value=o}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:e,searchQuery:c,selectedCategory:m,categories:x,filteredSkills:k,loadSkills:b}}),U={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},H={class:"page-sub"},J={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},P={key:0,style:{"text-align":"center",padding:"60px"}},W={key:1,class:"skills-grid"},G={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},K={style:{flex:"1","min-width":"0"}},X={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Y={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Z={style:{"margin-left":"12px","flex-shrink":"0"}},ee={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},te={key:2,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},oe={__name:"Skills",setup(_){const e=T(),c=V(),m=Q(),x=h(()=>e.categories.filter(o=>o!=="all").slice(0,6));function k(o){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[o]||o}function b(o){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[o]||o||"未知"}function n(o){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[o]||"default"}async function l(o){await c.createSession("agent"),m.push("/chat"),setTimeout(()=>{c.currentSessionId&&c.sendMessage(c.currentSessionId,`/skill run ${o}`)},300)}return O(()=>{e.allSkills.length||e.loadSkills()}),(o,t)=>{const S=p("a-button"),z=p("a-input-search"),w=p("a-radio-button"),I=p("a-radio-group"),q=p("a-spin"),B=p("a-tag"),j=p("a-card");return u(),f("div",null,[i("div",U,[i("div",null,[t[3]||(t[3]=i("h2",{class:"page-title"},"技能管理",-1)),i("p",H,y(a(e).allSkills.length)+" 个可用技能",1)]),r(S,{type:"primary",ghost:"",loading:a(e).loading,onClick:t[0]||(t[0]=s=>a(e).loadSkills())},{icon:d(()=>[r(a(E))]),default:d(()=>[t[4]||(t[4]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),i("div",J,[r(z,{value:a(e).searchQuery,"onUpdate:value":t[1]||(t[1]=s=>a(e).searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),r(I,{value:a(e).selectedCategory,"onUpdate:value":t[2]||(t[2]=s=>a(e).selectedCategory=s),"button-style":"solid"},{default:d(()=>[r(w,{value:"all"},{default:d(()=>[...t[5]||(t[5]=[g("全部",-1)])]),_:1}),(u(!0),f(C,null,L(x.value,s=>(u(),M(w,{key:s,value:s},{default:d(()=>[g(y(k(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(e).loading?(u(),f("div",P,[r(q,{size:"large"}),t[6]||(t[6]=i("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):a(e).filteredSkills.length?(u(),f("div",W,[(u(!0),f(C,null,L(a(e).filteredSkills,s=>(u(),M(j,{key:s.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:d(()=>[i("div",G,[i("div",K,[i("div",X,y(s.name),1),i("div",Y,y(s.description||"暂无描述"),1)]),i("div",Z,[r(B,{color:n(s.executionMode),style:{"font-size":"10px"}},{default:d(()=>[g(y(b(s.executionMode)),1)]),_:2},1032,["color"])])]),i("div",ee,[r(S,{size:"small",type:"primary",ghost:"",onClick:le=>l(s.name)},{icon:d(()=>[r(a(R))]),default:d(()=>[t[7]||(t[7]=g(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])):(u(),f("div",te,[r(a(D),{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),i("div",null,y(a(e).allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)]))])}}},ce=$(oe,[["__scopeId","data-v-a1cd8dd9"]]);export{ce as default};
@@ -0,0 +1 @@
1
+ import{k as F,r as $,j as I,l as P,M as R,F as d,D as f,c as o,x as l,u as s,m as T,G as b,q as _,v as r,J as g,I as u,H as A,L as V}from"./vendor-aH7YaPZi.js";import{u as B}from"./ws-BTS8ehTm.js";import{_ as L}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{r as E}from"./icons-DEoqYzGZ.js";const M=F("tasks",()=>{const v=$([]),t=$(!1);let w=null,k=null;const S=I(()=>v.value.filter(e=>e.status==="running")),x=I(()=>v.value.filter(e=>e.status==="pending")),i=I(()=>v.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function a(){const e=B();t.value=!0;try{const p=await e.sendRaw({type:"tasks-list"});p&&Array.isArray(p.tasks)&&(v.value=p.tasks)}catch{}finally{t.value=!1}}async function N(e){const p=B();try{await p.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await a()}}const C=$(null);function z(e=5e3){y(),a(),w=setInterval(a,e),m()}function y(){w&&(clearInterval(w),w=null),k&&(k(),k=null)}function m(){const e=B();if(k)return;const p=n=>{n.type==="task:notification"&&n.payload?.task&&(C.value=n.payload.task,a(),setTimeout(()=>{C.value=null},8e3))};k=e.onRuntimeEvent(p)}function h(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function D(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:v,loading:t,running:S,pending:x,completed:i,lastNotification:C,fetchTasks:a,stopTask:N,startPolling:z,stopPolling:y,formatDuration:h,getStatusColor:D}}),U={class:"page-header"},j={key:0,class:"error-text"},q={key:1},G={class:"task-header"},H={class:"task-desc"},J={class:"task-id"},O={class:"task-meta"},W=["title"],K={key:0,class:"error-text"},Q={key:1,class:"success-text"},X={key:2,class:"muted-text"},Y={__name:"Tasks",setup(v){const t=M(),w=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function k(i){return i.status==="running"&&i.startedAt?t.formatDuration(Date.now()-i.startedAt):i.completedAt&&i.startedAt?t.formatDuration(i.completedAt-i.startedAt):"-"}function S(i){return i?new Date(i).toLocaleString():"-"}function x(i,a){return i?i.length>a?`${i.slice(0,a)}...`:i:""}return P(()=>t.startPolling(5e3)),R(()=>t.stopPolling()),(i,a)=>{const N=_("a-button"),C=_("a-space"),z=_("a-alert"),y=_("a-statistic"),m=_("a-card"),h=_("a-col"),D=_("a-row"),e=_("a-tag"),p=_("a-table");return r(),d("div",null,[f("div",U,[a[3]||(a[3]=f("div",null,[f("h2",{class:"page-title"},"后台任务"),f("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),o(C,null,{default:l(()=>[o(N,{ghost:"",loading:s(t).loading,onClick:a[0]||(a[0]=n=>s(t).fetchTasks())},{icon:l(()=>[o(s(E))]),default:l(()=>[a[2]||(a[2]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(t).lastNotification?(r(),T(z,{key:0,type:s(t).lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:a[1]||(a[1]=n=>s(t).lastNotification=null)},{message:l(()=>[g(" 任务"+u(s(t).lastNotification.status==="completed"?"完成":"结束")+": "+u(s(t).lastNotification.description||s(t).lastNotification.id.slice(0,16)),1)]),description:l(()=>[s(t).lastNotification.error?(r(),d("span",j,u(s(t).lastNotification.error),1)):s(t).lastNotification.result?(r(),d("span",q,u(x(String(s(t).lastNotification.result),120)),1)):b("",!0)]),_:1},8,["type"])):b("",!0),o(D,{gutter:[16,16],class:"stats-row"},{default:l(()=>[o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"全部任务",value:s(t).tasks.length},null,8,["value"])]),_:1})]),_:1}),o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"运行中",value:s(t).running.length},null,8,["value"])]),_:1})]),_:1}),o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"等待中",value:s(t).pending.length},null,8,["value"])]),_:1})]),_:1}),o(h,{xs:12,sm:6},{default:l(()=>[o(m,{class:"stat-card",size:"small"},{default:l(()=>[o(y,{title:"已完成",value:s(t).completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),s(t).running.length>0?(r(),T(m,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:l(()=>[(r(!0),d(A,null,V(s(t).running,n=>(r(),d("div",{key:n.id,class:"task-item running"},[f("div",G,[o(e,{color:s(t).getStatusColor(n.status)},{default:l(()=>[g(u(n.status.toUpperCase()),1)]),_:2},1032,["color"]),f("span",H,u(n.description),1),f("span",J,u(n.id.slice(0,16)),1)]),f("div",O,[f("span",null,"类型: "+u(n.type||"-"),1),f("span",null,"已运行: "+u(s(t).formatDuration(Date.now()-n.startedAt)),1),o(N,{size:"small",danger:"",onClick:c=>s(t).stopTask(n.id)},{default:l(()=>[...a[4]||(a[4]=[g("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):b("",!0),o(m,{class:"panel-card"},{default:l(()=>[o(p,{columns:w,"data-source":s(t).tasks,pagination:{pageSize:15,size:"small"},loading:s(t).loading,"row-key":"id",size:"small"},{bodyCell:l(({column:n,record:c})=>[n.key==="status"?(r(),T(e,{key:0,color:s(t).getStatusColor(c.status)},{default:l(()=>[g(u(c.status),1)]),_:2},1032,["color"])):n.key==="description"?(r(),d("span",{key:1,title:c.command},u(c.description),9,W)):n.key==="duration"?(r(),d(A,{key:2},[g(u(k(c)),1)],64)):n.key==="createdAt"?(r(),d(A,{key:3},[g(u(S(c.createdAt)),1)],64)):n.key==="result"?(r(),d(A,{key:4},[c.error?(r(),d("span",K,u(x(c.error,60)),1)):c.result?(r(),d("span",Q,u(x(String(c.result),60)),1)):(r(),d("span",X,"-"))],64)):n.key==="action"?(r(),d(A,{key:5},[c.status==="running"?(r(),T(N,{key:0,size:"small",danger:"",onClick:Z=>s(t).stopTask(c.id)},{default:l(()=>[...a[5]||(a[5]=[g(" 停止 ",-1)])]),_:1},8,["onClick"])):b("",!0)],64)):b("",!0)]),_:1},8,["data-source","loading"])]),_:1})])}}},nt=L(Y,[["__scopeId","data-v-c8e3e605"]]);export{nt as default};
@@ -1 +1 @@
1
- import{l as fe,F as x,D as n,c as t,x as o,r as c,q as l,a as ye,B as ge,v as p,H as N,L as R,u,I as d,J as i,m as y,G as U}from"./vendor-aH7YaPZi.js";import{u as _e}from"./ws-BTS8ehTm.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as M,O as G,A as be,n as H,X as ke,a as W,ab as we,aa as Ce}from"./icons-DzieZiVh.js";import{a as h}from"./index-CjOtB4wg.js";import"./index-4C1c4hkZ.js";import"./useConfigInject-C2E3Qsop.js";import"./transition-exl3w1iN.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-DXIqogG2.js";import"./index-U4Zd5IK6.js";const ze={style:{display:"flex","align-items":"flex-start",gap:"10px"}},he={style:{flex:"1","min-width":"0"}},Oe={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},Pe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ie={style:{"margin-top":"12px","text-align":"right"}},Te={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},$e={key:0,style:{"text-align":"center",padding:"40px"}},Be={style:{display:"flex","align-items":"flex-start",gap:"10px"}},je={style:{flex:"1","min-width":"0"}},Se={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px"}},Ae={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ne={key:0,style:{"margin-top":"4px"}},Re={style:{"margin-top":"12px","text-align":"right"}},Ue={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},De={style:{"margin-bottom":"16px"}},Le={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},qe={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Fe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5","max-height":"60px",overflow:"hidden","text-overflow":"ellipsis","white-space":"pre-wrap"}},Je={style:{"margin-top":"12px",display:"flex",gap:"8px","justify-content":"flex-end"}},X="cc_prompt_templates",Ke={__name:"Templates",setup(Ve){const O=_e(),Y=ge(),D=c("project"),P=c(""),v=c(null),b=c(!1),I=c(""),Q=[{name:"code-project",description:"代码项目 — 代码审查、重构、单元测试"},{name:"data-science",description:"数据科学 — ML/数据分析、可视化"},{name:"devops",description:"DevOps — 基础设施、部署、监控"},{name:"medical-triage",description:"医疗分诊 — 症状分析、分诊建议"},{name:"agriculture-expert",description:"农业专家 — 作物管理、病虫害"},{name:"general-assistant",description:"通用助手 — 日常问答、任务管理"},{name:"ai-media-creator",description:"AI 媒体创作 — 图文生成、视频脚本"},{name:"ai-doc-creator",description:"AI 文档创作 — 文档生成、格式转换"},{name:"empty",description:"空白模板 — 最小项目结构"}];function Z(s){I.value=s,b.value=!0}async function ee(){b.value=!1;const s=I.value;if(s){P.value=s,v.value=null;try{const e=`init --template ${s} --yes`,{output:m,exitCode:_}=await O.execute(e,3e4);v.value={success:_===0,output:m}}catch(e){v.value={success:!1,output:`初始化失败: ${e.message}`}}finally{P.value=""}}}const T=c(!1),k=c([]),$=c(""),f=c(null);async function te(){T.value=!0;try{const{output:s}=await O.execute("bi templates --json",15e3),e=JSON.parse(s);k.value=Array.isArray(e)?e:e.templates||[]}catch{k.value=[]}finally{T.value=!1}}async function oe(s){$.value=s,f.value=null;try{const e=`bi dashboard create --template ${s} --json`,{output:m,exitCode:_}=await O.execute(e,3e4);f.value={success:_===0,output:m}}catch(e){f.value={success:!1,output:`创建失败: ${e.message}`}}finally{$.value=""}}const g=c([]),w=c(!1),r=ye({name:"",category:"general",content:""});function ae(){try{const s=localStorage.getItem(X);g.value=s?JSON.parse(s):[]}catch{g.value=[]}}function L(){localStorage.setItem(X,JSON.stringify(g.value))}function ne(){!r.name||!r.content||(g.value.push({name:r.name,category:r.category,content:r.content}),L(),q(),h.success("模板已保存"))}function q(){w.value=!1,r.name="",r.category="general",r.content=""}function se(s){g.value.splice(s,1),L(),h.success("模板已删除")}function le(s){navigator.clipboard.writeText(s.content).then(()=>{h.success("已复制到剪贴板")}).catch(()=>{h.error("复制失败")})}function ie(s){Y.push({path:"/chat",query:{prompt:s.content}})}function re(s){return{general:"blue",code:"green",writing:"orange",analysis:"purple"}[s]||"default"}return fe(()=>{ae(),te()}),(s,e)=>{const m=l("a-button"),_=l("a-card"),B=l("a-col"),j=l("a-row"),F=l("a-alert"),S=l("a-tab-pane"),pe=l("a-spin"),J=l("a-empty"),K=l("a-tag"),ue=l("a-tabs"),V=l("a-modal"),ce=l("a-input"),A=l("a-form-item"),C=l("a-select-option"),de=l("a-select"),me=l("a-textarea"),ve=l("a-form");return p(),x("div",null,[e[27]||(e[27]=n("div",{style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},[n("div",null,[n("h2",{class:"page-title"},"模板中心"),n("p",{class:"page-sub"},"项目模板 / BI 模板 / Prompt 模板")])],-1)),t(ue,{activeKey:D.value,"onUpdate:activeKey":e[3]||(e[3]=a=>D.value=a),type:"card"},{default:o(()=>[t(S,{key:"project"},{tab:o(()=>[t(u(be)),e[10]||(e[10]=i(" 项目模板 ",-1))]),default:o(()=>[t(j,{gutter:[16,16]},{default:o(()=>[(p(),x(N,null,R(Q,a=>t(B,{key:a.name,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",ze,[t(u(M),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}}),n("div",he,[n("div",Oe,d(a.name),1),n("div",Pe,d(a.description),1)])]),n("div",Ie,[t(m,{type:"primary",size:"small",loading:P.value===a.name,onClick:z=>Z(a.name)},{icon:o(()=>[t(u(G))]),default:o(()=>[e[11]||(e[11]=i(" 初始化 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024)),64))]),_:1}),v.value?(p(),y(F,{key:0,message:v.value.success?"初始化成功":"初始化失败",type:v.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[0]||(e[0]=a=>v.value=null)},{description:o(()=>[n("pre",Te,d(v.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(S,{key:"bi"},{tab:o(()=>[t(u(H)),e[12]||(e[12]=i(" BI 模板 ",-1))]),default:o(()=>[T.value?(p(),x("div",$e,[t(pe),e[13]||(e[13]=n("div",{style:{color:"var(--text-muted)","margin-top":"8px"}},"加载 BI 模板...",-1))])):k.value.length?(p(),y(j,{key:2,gutter:[16,16]},{default:o(()=>[(p(!0),x(N,null,R(k.value,a=>(p(),y(B,{key:a.id,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Be,[t(u(H),{style:{"font-size":"24px",color:"#722ed1","flex-shrink":"0","margin-top":"2px"}}),n("div",je,[n("div",Se,d(a.name),1),n("div",Ae,d(a.description||"暂无描述"),1),a.id?(p(),x("div",Ne,[t(K,{size:"small",color:"purple"},{default:o(()=>[i(d(a.id),1)]),_:2},1024)])):U("",!0)])]),n("div",Re,[t(m,{type:"primary",size:"small",loading:$.value===a.id,onClick:z=>oe(a.id)},{icon:o(()=>[t(u(G))]),default:o(()=>[e[14]||(e[14]=i(" 创建仪表板 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(p(),y(J,{key:1,description:"暂无 BI 模板"})),f.value?(p(),y(F,{key:3,message:f.value.success?"仪表板创建成功":"创建失败",type:f.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[1]||(e[1]=a=>f.value=null)},{description:o(()=>[n("pre",Ue,d(f.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(S,{key:"prompts"},{tab:o(()=>[t(u(W)),e[15]||(e[15]=i(" Prompt 模板 ",-1))]),default:o(()=>[n("div",De,[t(m,{type:"primary",onClick:e[2]||(e[2]=a=>w.value=!0)},{icon:o(()=>[t(u(ke))]),default:o(()=>[e[16]||(e[16]=i(" 新建模板 ",-1))]),_:1})]),g.value.length?(p(),y(j,{key:1,gutter:[16,16]},{default:o(()=>[(p(!0),x(N,null,R(g.value,(a,z)=>(p(),y(B,{key:z,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Le,[t(u(W),{style:{"font-size":"18px",color:"#52c41a"}}),n("span",qe,d(a.name),1),t(K,{color:re(a.category),size:"small"},{default:o(()=>[i(d(a.category),1)]),_:2},1032,["color"])]),n("div",Fe,d(a.content.length>120?a.content.slice(0,120)+"...":a.content),1),n("div",Je,[t(m,{size:"small",onClick:E=>ie(a)},{icon:o(()=>[t(u(M))]),default:o(()=>[e[17]||(e[17]=i(" 使用 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",onClick:E=>le(a)},{icon:o(()=>[t(u(we))]),default:o(()=>[e[18]||(e[18]=i(" 复制 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",danger:"",onClick:E=>se(z)},{icon:o(()=>[t(u(Ce))]),default:o(()=>[e[19]||(e[19]=i(" 删除 ",-1))]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(p(),y(J,{key:0,description:"暂无 Prompt 模板,点击上方按钮创建"}))]),_:1})]),_:1},8,["activeKey"]),t(V,{open:b.value,"onUpdate:open":e[4]||(e[4]=a=>b.value=a),title:"确认初始化",onOk:ee,onCancel:e[5]||(e[5]=a=>b.value=!1),"ok-text":"确认","cancel-text":"取消"},{default:o(()=>[n("p",null,[e[20]||(e[20]=i("确定要使用模板 ",-1)),n("strong",null,d(I.value),1),e[21]||(e[21]=i(" 初始化项目吗?",-1))]),e[22]||(e[22]=n("p",{style:{color:"var(--text-muted)","font-size":"12px"}},"这将在当前工作目录创建项目结构。",-1))]),_:1},8,["open"]),t(V,{open:w.value,"onUpdate:open":e[9]||(e[9]=a=>w.value=a),title:"新建 Prompt 模板",onOk:ne,onCancel:q,"ok-text":"保存","cancel-text":"取消","ok-button-props":{disabled:!r.name||!r.content}},{default:o(()=>[t(ve,{layout:"vertical"},{default:o(()=>[t(A,{label:"模板名称",required:""},{default:o(()=>[t(ce,{value:r.name,"onUpdate:value":e[6]||(e[6]=a=>r.name=a),placeholder:"输入模板名称"},null,8,["value"])]),_:1}),t(A,{label:"分类"},{default:o(()=>[t(de,{value:r.category,"onUpdate:value":e[7]||(e[7]=a=>r.category=a),style:{width:"100%"}},{default:o(()=>[t(C,{value:"general"},{default:o(()=>[...e[23]||(e[23]=[i("general",-1)])]),_:1}),t(C,{value:"code"},{default:o(()=>[...e[24]||(e[24]=[i("code",-1)])]),_:1}),t(C,{value:"writing"},{default:o(()=>[...e[25]||(e[25]=[i("writing",-1)])]),_:1}),t(C,{value:"analysis"},{default:o(()=>[...e[26]||(e[26]=[i("analysis",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(A,{label:"模板内容",required:""},{default:o(()=>[t(me,{value:r.content,"onUpdate:value":e[8]||(e[8]=a=>r.content=a),rows:6,placeholder:"输入 Prompt 模板内容"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","ok-button-props"])])}}},ot=xe(Ke,[["__scopeId","data-v-22e50acf"]]);export{ot as default};
1
+ import{l as fe,F as x,D as n,c as t,x as o,r as c,q as l,a as ye,B as ge,v as p,H as N,L as R,u,I as d,J as i,m as y,G as U}from"./vendor-aH7YaPZi.js";import{u as _e}from"./ws-BTS8ehTm.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as M,Q as G,A as be,n as Y,Y as ke,a as H,ad as we,ac as Ce}from"./icons-DEoqYzGZ.js";import{a as h}from"./index-36fB-tdr.js";import"./index-BPzN5a2A.js";import"./useConfigInject-DIr4olCu.js";import"./transition-B3-w1SVL.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-DXIqogG2.js";import"./index-U4Zd5IK6.js";const ze={style:{display:"flex","align-items":"flex-start",gap:"10px"}},he={style:{flex:"1","min-width":"0"}},Pe={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},Oe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ie={style:{"margin-top":"12px","text-align":"right"}},Te={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},$e={key:0,style:{"text-align":"center",padding:"40px"}},Be={style:{display:"flex","align-items":"flex-start",gap:"10px"}},je={style:{flex:"1","min-width":"0"}},Se={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px"}},Ae={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ne={key:0,style:{"margin-top":"4px"}},Re={style:{"margin-top":"12px","text-align":"right"}},Ue={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},De={style:{"margin-bottom":"16px"}},Le={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},qe={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Fe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5","max-height":"60px",overflow:"hidden","text-overflow":"ellipsis","white-space":"pre-wrap"}},Je={style:{"margin-top":"12px",display:"flex",gap:"8px","justify-content":"flex-end"}},Q="cc_prompt_templates",Ke={__name:"Templates",setup(Ve){const P=_e(),W=ge(),D=c("project"),O=c(""),v=c(null),b=c(!1),I=c(""),X=[{name:"code-project",description:"代码项目 — 代码审查、重构、单元测试"},{name:"data-science",description:"数据科学 — ML/数据分析、可视化"},{name:"devops",description:"DevOps — 基础设施、部署、监控"},{name:"medical-triage",description:"医疗分诊 — 症状分析、分诊建议"},{name:"agriculture-expert",description:"农业专家 — 作物管理、病虫害"},{name:"general-assistant",description:"通用助手 — 日常问答、任务管理"},{name:"ai-media-creator",description:"AI 媒体创作 — 图文生成、视频脚本"},{name:"ai-doc-creator",description:"AI 文档创作 — 文档生成、格式转换"},{name:"empty",description:"空白模板 — 最小项目结构"}];function Z(s){I.value=s,b.value=!0}async function ee(){b.value=!1;const s=I.value;if(s){O.value=s,v.value=null;try{const e=`init --template ${s} --yes`,{output:m,exitCode:_}=await P.execute(e,3e4);v.value={success:_===0,output:m}}catch(e){v.value={success:!1,output:`初始化失败: ${e.message}`}}finally{O.value=""}}}const T=c(!1),k=c([]),$=c(""),f=c(null);async function te(){T.value=!0;try{const{output:s}=await P.execute("bi templates --json",15e3),e=JSON.parse(s);k.value=Array.isArray(e)?e:e.templates||[]}catch{k.value=[]}finally{T.value=!1}}async function oe(s){$.value=s,f.value=null;try{const e=`bi dashboard create --template ${s} --json`,{output:m,exitCode:_}=await P.execute(e,3e4);f.value={success:_===0,output:m}}catch(e){f.value={success:!1,output:`创建失败: ${e.message}`}}finally{$.value=""}}const g=c([]),w=c(!1),r=ye({name:"",category:"general",content:""});function ae(){try{const s=localStorage.getItem(Q);g.value=s?JSON.parse(s):[]}catch{g.value=[]}}function L(){localStorage.setItem(Q,JSON.stringify(g.value))}function ne(){!r.name||!r.content||(g.value.push({name:r.name,category:r.category,content:r.content}),L(),q(),h.success("模板已保存"))}function q(){w.value=!1,r.name="",r.category="general",r.content=""}function se(s){g.value.splice(s,1),L(),h.success("模板已删除")}function le(s){navigator.clipboard.writeText(s.content).then(()=>{h.success("已复制到剪贴板")}).catch(()=>{h.error("复制失败")})}function ie(s){W.push({path:"/chat",query:{prompt:s.content}})}function re(s){return{general:"blue",code:"green",writing:"orange",analysis:"purple"}[s]||"default"}return fe(()=>{ae(),te()}),(s,e)=>{const m=l("a-button"),_=l("a-card"),B=l("a-col"),j=l("a-row"),F=l("a-alert"),S=l("a-tab-pane"),pe=l("a-spin"),J=l("a-empty"),K=l("a-tag"),ue=l("a-tabs"),V=l("a-modal"),ce=l("a-input"),A=l("a-form-item"),C=l("a-select-option"),de=l("a-select"),me=l("a-textarea"),ve=l("a-form");return p(),x("div",null,[e[27]||(e[27]=n("div",{style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},[n("div",null,[n("h2",{class:"page-title"},"模板中心"),n("p",{class:"page-sub"},"项目模板 / BI 模板 / Prompt 模板")])],-1)),t(ue,{activeKey:D.value,"onUpdate:activeKey":e[3]||(e[3]=a=>D.value=a),type:"card"},{default:o(()=>[t(S,{key:"project"},{tab:o(()=>[t(u(be)),e[10]||(e[10]=i(" 项目模板 ",-1))]),default:o(()=>[t(j,{gutter:[16,16]},{default:o(()=>[(p(),x(N,null,R(X,a=>t(B,{key:a.name,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",ze,[t(u(M),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}}),n("div",he,[n("div",Pe,d(a.name),1),n("div",Oe,d(a.description),1)])]),n("div",Ie,[t(m,{type:"primary",size:"small",loading:O.value===a.name,onClick:z=>Z(a.name)},{icon:o(()=>[t(u(G))]),default:o(()=>[e[11]||(e[11]=i(" 初始化 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024)),64))]),_:1}),v.value?(p(),y(F,{key:0,message:v.value.success?"初始化成功":"初始化失败",type:v.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[0]||(e[0]=a=>v.value=null)},{description:o(()=>[n("pre",Te,d(v.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(S,{key:"bi"},{tab:o(()=>[t(u(Y)),e[12]||(e[12]=i(" BI 模板 ",-1))]),default:o(()=>[T.value?(p(),x("div",$e,[t(pe),e[13]||(e[13]=n("div",{style:{color:"var(--text-muted)","margin-top":"8px"}},"加载 BI 模板...",-1))])):k.value.length?(p(),y(j,{key:2,gutter:[16,16]},{default:o(()=>[(p(!0),x(N,null,R(k.value,a=>(p(),y(B,{key:a.id,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Be,[t(u(Y),{style:{"font-size":"24px",color:"#722ed1","flex-shrink":"0","margin-top":"2px"}}),n("div",je,[n("div",Se,d(a.name),1),n("div",Ae,d(a.description||"暂无描述"),1),a.id?(p(),x("div",Ne,[t(K,{size:"small",color:"purple"},{default:o(()=>[i(d(a.id),1)]),_:2},1024)])):U("",!0)])]),n("div",Re,[t(m,{type:"primary",size:"small",loading:$.value===a.id,onClick:z=>oe(a.id)},{icon:o(()=>[t(u(G))]),default:o(()=>[e[14]||(e[14]=i(" 创建仪表板 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(p(),y(J,{key:1,description:"暂无 BI 模板"})),f.value?(p(),y(F,{key:3,message:f.value.success?"仪表板创建成功":"创建失败",type:f.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[1]||(e[1]=a=>f.value=null)},{description:o(()=>[n("pre",Ue,d(f.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(S,{key:"prompts"},{tab:o(()=>[t(u(H)),e[15]||(e[15]=i(" Prompt 模板 ",-1))]),default:o(()=>[n("div",De,[t(m,{type:"primary",onClick:e[2]||(e[2]=a=>w.value=!0)},{icon:o(()=>[t(u(ke))]),default:o(()=>[e[16]||(e[16]=i(" 新建模板 ",-1))]),_:1})]),g.value.length?(p(),y(j,{key:1,gutter:[16,16]},{default:o(()=>[(p(!0),x(N,null,R(g.value,(a,z)=>(p(),y(B,{key:z,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Le,[t(u(H),{style:{"font-size":"18px",color:"#52c41a"}}),n("span",qe,d(a.name),1),t(K,{color:re(a.category),size:"small"},{default:o(()=>[i(d(a.category),1)]),_:2},1032,["color"])]),n("div",Fe,d(a.content.length>120?a.content.slice(0,120)+"...":a.content),1),n("div",Je,[t(m,{size:"small",onClick:E=>ie(a)},{icon:o(()=>[t(u(M))]),default:o(()=>[e[17]||(e[17]=i(" 使用 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",onClick:E=>le(a)},{icon:o(()=>[t(u(we))]),default:o(()=>[e[18]||(e[18]=i(" 复制 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",danger:"",onClick:E=>se(z)},{icon:o(()=>[t(u(Ce))]),default:o(()=>[e[19]||(e[19]=i(" 删除 ",-1))]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(p(),y(J,{key:0,description:"暂无 Prompt 模板,点击上方按钮创建"}))]),_:1})]),_:1},8,["activeKey"]),t(V,{open:b.value,"onUpdate:open":e[4]||(e[4]=a=>b.value=a),title:"确认初始化",onOk:ee,onCancel:e[5]||(e[5]=a=>b.value=!1),"ok-text":"确认","cancel-text":"取消"},{default:o(()=>[n("p",null,[e[20]||(e[20]=i("确定要使用模板 ",-1)),n("strong",null,d(I.value),1),e[21]||(e[21]=i(" 初始化项目吗?",-1))]),e[22]||(e[22]=n("p",{style:{color:"var(--text-muted)","font-size":"12px"}},"这将在当前工作目录创建项目结构。",-1))]),_:1},8,["open"]),t(V,{open:w.value,"onUpdate:open":e[9]||(e[9]=a=>w.value=a),title:"新建 Prompt 模板",onOk:ne,onCancel:q,"ok-text":"保存","cancel-text":"取消","ok-button-props":{disabled:!r.name||!r.content}},{default:o(()=>[t(ve,{layout:"vertical"},{default:o(()=>[t(A,{label:"模板名称",required:""},{default:o(()=>[t(ce,{value:r.name,"onUpdate:value":e[6]||(e[6]=a=>r.name=a),placeholder:"输入模板名称"},null,8,["value"])]),_:1}),t(A,{label:"分类"},{default:o(()=>[t(de,{value:r.category,"onUpdate:value":e[7]||(e[7]=a=>r.category=a),style:{width:"100%"}},{default:o(()=>[t(C,{value:"general"},{default:o(()=>[...e[23]||(e[23]=[i("general",-1)])]),_:1}),t(C,{value:"code"},{default:o(()=>[...e[24]||(e[24]=[i("code",-1)])]),_:1}),t(C,{value:"writing"},{default:o(()=>[...e[25]||(e[25]=[i("writing",-1)])]),_:1}),t(C,{value:"analysis"},{default:o(()=>[...e[26]||(e[26]=[i("analysis",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(A,{label:"模板内容",required:""},{default:o(()=>[t(me,{value:r.content,"onUpdate:value":e[8]||(e[8]=a=>r.content=a),rows:6,placeholder:"输入 Prompt 模板内容"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","ok-button-props"])])}}},ot=xe(Ke,[["__scopeId","data-v-22e50acf"]]);export{ot as default};