chainlesschain 0.162.74 → 0.162.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/assets/web-panel/assets/{AIOps-C-0Db2rX.js → AIOps-DtoQc98o.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CMzrHsYE.js → ActionButton-CGWpZPFu.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-7De_11Y4.js → Analytics-CC7XzLk4.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BbTNvwDg.js → AppLayout-CGKmgdbs.js} +4 -4
- package/src/assets/web-panel/assets/{Audit-NgkyFEr9.js → Audit-oLflS_MU.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CZydm333.js → Backup-T_wI6uZE.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BJwgC2UN.js → BaseInput-BPdSptnN.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DAR90oE4.js → Chat-BQJThjZV.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DIgOoly0.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-CJxO-pD5.js → Checkbox-DINID8Xe.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-ClsSgl-P.js → Codegen-BFRqiKXM.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DfffBuFa.js → Col-Cz1LHthL.js} +1 -1
- package/src/assets/web-panel/assets/{Community-fPnkVJpl.js → Community-DM2JdVks.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CP9f3DZt.js → Compact-DDkmTD1-.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-fCITFB2R.js → Compliance-DZ42Jq-9.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-GyZhY5mY.js → Cowork-DLt4MK_F.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-toRv3QGW.js → Cron-CDDGkmF4.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-C0ShIRvX.js → Crosschain-DtKTUDfw.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CB-4ILVF.js → DID-B9IBFVtN.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DsbaECcP.js → Dashboard-DZWx6KvZ.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-klGzPkCq.js → Dropdown-CxlclJ4x.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DF7bHNgQ.js → EmailListRenderer-CPQkv5Rq.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CoXn37ZA.js → FamilyGuardDashboard-DYaSHW7O.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CGjH3107.js → Federation-DcANvE_W.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BbW5tEzw.js → FormItemContext-CnzzQaBo.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-Ed6pit6I.js → GenericCardRenderer-CgfKJg4t.js} +1 -1
- package/src/assets/web-panel/assets/{Git-wSniJ4nQ.js → Git-Djh6eGK0.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BEXL8yvz.js → Governance-B_qc24Q5.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-RQRU05O3.js → Inference-DWVRUSsO.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DcB0jIhB.js → KnowledgeGraph-16EMZ1Gg.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Dq3ULqtY.js → Logs-ymceok_p.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-CMM0PWC-.js → Marketplace-DXExrznt.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DHtW5q72.js → McpTools-B9Bnym3Q.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-BPNffBX4.js → Memory-V8Ck9ZnV.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DBduGG-4.js → MobileBridge-B9AE87pq.js} +2 -2
- package/src/assets/web-panel/assets/{MobileProjects-C7WN944V.js → MobileProjects-Dh7WHpD7.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BgNC4GSE.js → Mtc-B1EIx3cJ.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-BH8w3RJG.js → MtcAudit-BVwqfXEq.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-rqVGkM71.js → Multisig-nymTttRr.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BsQUtVNj.js → NLProgramming-BHYA-EKK.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-C8kfVgBk.js → Notes-D75HMT2_.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CnkwLmEc.js → NotificationSettings-BCkM1qCh.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-Bd2_WoCO.js +1 -0
- package/src/assets/web-panel/assets/{Organization-Cwo4kTgX.js → Organization-BHJXmWpQ.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-B45Usajd.js → Overflow-Ce6NuRg4.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-C3jEcPvs.js → P2P-ZWkd8aDF.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CGDVPsiI.js → PdhVaultBrowser-m-R5EU0S.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-B08m9YV_.js → Permissions-tiqBu416.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-C921TFhZ.js → PersonalDataHub-Cp6QTgYQ.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-AvBEIM1o.js → Pipeline-KkrWj7O7.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-g6QVOyQC.js → Privacy-Dxi4H49p.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-C1L7umfx.js → ProjectInit-D687zx7-.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-1NsCP5Rt.js → ProjectSettings-rMyJinon.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BDxJtwFv.js → Projects-DTnO0tyd.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DltXHH7X.js → Providers-CA3qBOIm.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-1Pw54Hz2.js → QuickAsk-cPYwl4UE.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-hB-Jmtl7.js → Recommend-AesrOSgW.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-DkWxzI44.js → Reputation-nmrzajqY.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CZhFZDZ6.js → Row-CSM-D2YK.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BK-SqcmK.js → RssFeed-Dg-6lotq.js} +2 -2
- package/src/assets/web-panel/assets/{Search-Bf_2YuHL.js → Search-_3uDkwSU.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CkirTQxl.js → Security-DpqxaMpH.js} +3 -3
- package/src/assets/web-panel/assets/{Services-B9q0W9nR.js → Services-ygE3fUQq.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BPDuoXu5.js → Skeleton-BJ8X1lgD.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-B-LPU5PB.js → Skills-DL4ggdgL.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Clv-rKdc.js → Sla-4QfKVw0v.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-0IZfUTng.js → SpeechSettings-k815pH2S.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-nEJzARVZ.js → SyncSettings-4gpgAxhL.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-CwXHXIkl.js → Tasks-BiIwG2Ag.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DqjCbx0G.js → Templates-BqG2I16l.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-D9gOurTB.js → Tenant--a1-0GZY.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-B4MCGz06.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-Di3hxrOR.js → TimelineRenderer-BKAOZMPL.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-V_QvhzEW.js → Tokens-C5pMEI9-.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CzBN5yUT.js → Trigger-BJ5etoUd.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-C_NrVDAW.js → Trust-CAAdDctr.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-leU9ylJd.js → UkeySign-BzKU8nII.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DwzlNpBk.js → VideoEditing-DmWnsgyf.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-dSIjpeqj.js → Wallet-Dg9UzBAC.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DAKdy3CS.js → WebAuthn-DaXZGzkp.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-DOif-wp_.js → WorkflowEditor-DmJCC6AW.js} +1 -1
- package/src/assets/web-panel/assets/{chat-B9CiS_S6.js → chat-CAjZEmlu.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BlIfHTi3.js → colors-DMWwvv7V.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BhlUVQn4.js → compact-item-ByqZtPIJ.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BAKscpCQ.js → createContext-jIGFVHeW.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DdhKA672.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Da29JBzS.js → hasIn-DsRtjfTk.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_uUznWT.js → index-9J6DqTyW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCMOBmSn.js → index-B-Qnul4F.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUjl0ati.js → index-B1270EwF.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGRftOr1.js → index-B8V34BaZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cgp_jQ8s.js → index-BBtZVmOQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcZ_Fb-p.js → index-BMxij0bf.js} +1 -1
- package/src/assets/web-panel/assets/{index-VcI9Ml8H.js → index-B_wj_sYT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BI-BXKcX.js → index-BbGL4FLO.js} +1 -1
- package/src/assets/web-panel/assets/{index-DJybkYpX.js → index-BnJVeoaZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CM1idCUO.js → index-BwGnc020.js} +3 -3
- package/src/assets/web-panel/assets/{index-CJobtOqU.js → index-C6T-Xf0U.js} +1 -1
- package/src/assets/web-panel/assets/{index-DK3w8-wH.js → index-C8BwUNiL.js} +1 -1
- package/src/assets/web-panel/assets/{index-Boucptjt.js → index-CAKaeMfc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJVCQ4u4.js → index-CCnzbOKO.js} +1 -1
- package/src/assets/web-panel/assets/{index-FLBlK1Zl.js → index-CGq4pe0E.js} +1 -1
- package/src/assets/web-panel/assets/{index-TAakqe_Q.js → index-CKKHpsMs.js} +1 -1
- package/src/assets/web-panel/assets/{index-dmxCnT7f.js → index-CScTtcVy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BhX9Ferp.js → index-CoJswPoV.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6-66JOV.js → index-Cs2OGp6G.js} +1 -1
- package/src/assets/web-panel/assets/{index-Btl77NCX.js → index-CyKWJT7j.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFwvL9Lx.js → index-D84XwMd3.js} +1 -1
- package/src/assets/web-panel/assets/index-D9VvPg88.js +1 -0
- package/src/assets/web-panel/assets/{index-BRC7HesQ.js → index-DC3_IuqF.js} +1 -1
- package/src/assets/web-panel/assets/{index-BwrQlS19.js → index-DLG_xLHk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcVXBouF.js → index-DMXm2ylP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DuiRwSJ_.js → index-DPm-L_xW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUiZfnAi.js → index-D_4cOrLy.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKggkQGO.js → index-DaP_p8P6.js} +1 -1
- package/src/assets/web-panel/assets/{index-z3klVdjk.js → index-DbV45YpH.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKlBeA-P.js → index-DdYKZY8M.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5b8LYJi.js → index-DtDCwXJx.js} +1 -1
- package/src/assets/web-panel/assets/index-NbQuQzJJ.js +1 -0
- package/src/assets/web-panel/assets/{index-B8Jktv0L.js → index-YK9Xug8T.js} +1 -1
- package/src/assets/web-panel/assets/{index-D8H2a4NL.js → index-_AG9IXm-.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcLdhhVn.js → index-_orsz7Rw.js} +1 -1
- package/src/assets/web-panel/assets/{index-CxMk5saD.js → index-bqwPPH9S.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBq6xzDm.js → index-i-EzGrX5.js} +1 -1
- package/src/assets/web-panel/assets/{index-Brth8YUr.js → index-i2aDnOiW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BV5N_JGL.js → index-t1-_hEH4.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DozNsdEE.js → initDefaultProps-DdyD9KAT.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DHBmFfzK.js → motion-DRrx4PK9.js} +1 -1
- package/src/assets/web-panel/assets/{move-BBloskCm.js → move-CHINGURR.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BMB6RBkL.js → omit-DZflFtLX.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-9cBYsZy-.js → pickAttrs-DPQ6eHEY.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DphoF2as.js → placementArrow-BJYz53Bf.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-7eccwdTq.js → responsiveObserve-DhzLakk2.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BAF1i2qq.js → slide-DOvTqAuD.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Bw7QssM3.js → statusUtils-B92BF_uu.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-C9oBEpYS.js → styleChecker-HRKjxQJT.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-iiGRCohz.js → useFlexGapSupport-D8ZqGK2s.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-1aj0rWmC.js → useFs-ClAmmKr2.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-nF5DnTyb.js → usePersonalDataHub-4G0-eIH3.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DFx6RVaA.js → vnode-Bj-uyzeX.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DwIxKwes.js → zoom-DrMI4KzQ.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/hub.js +65 -1
- package/src/commands/init.js +4 -6
- package/src/lib/downloader.js +10 -12
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DfqwfACj.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-DX7--1Qh.js +0 -1
- package/src/assets/web-panel/assets/Terminal-CnsQIiHq.js +0 -3
- package/src/assets/web-panel/assets/devWarning-DwewKXVi.js +0 -1
- package/src/assets/web-panel/assets/index-B9-zs80P.js +0 -1
- package/src/assets/web-panel/assets/index-CU0CJgzs.js +0 -1
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import{I as u,P as p,J as E,V as y,c as o,K as t,F as Y,Q as r,R as s,U as f,Z as ne,S as k,w as ae,b as F,r as S,o as le,$ as re,a2 as G}from"./vendor-BvqAck49.js";import{_ as ie,u as $,d as g}from"./index-
|
|
1
|
+
import{I as u,P as p,J as E,V as y,c as o,K as t,F as Y,Q as r,R as s,U as f,Z as ne,S as k,w as ae,b as F,r as S,o as le,$ as re,a2 as G}from"./vendor-BvqAck49.js";import{_ as ie,u as $,d as g}from"./index-BwGnc020.js";import{u as ee}from"./useShellMode-CgR0wCYM.js";import oe from"./index-BbGL4FLO.js";import{a4 as se,c as de,d as ue,aO as ce,f as pe,a0 as me,R as fe}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-DZflFtLX.js";import"./pickAttrs-DPQ6eHEY.js";import"./initDefaultProps-DdyD9KAT.js";import"./motion-DRrx4PK9.js";import"./raf-Deuc0E8-.js";import"./index-DPm-L_xW.js";import"./index-t1-_hEH4.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-DdhKA672.js";import"./compact-item-ByqZtPIJ.js";import"./createContext-jIGFVHeW.js";import"./Compact-DDkmTD1-.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-HRKjxQJT.js";import"./zoom-DrMI4KzQ.js";import"./ActionButton-CGWpZPFu.js";import"./vnode-Bj-uyzeX.js";const ge={__name:"SignProposalModal",props:{open:{type:Boolean,default:!1},proposal:{type:Object,default:null}},emits:["update:open","signed"],setup(Z,{expose:a,emit:B}){a();const e=Z,h=B,U=$(),{isEmbedded:_}=ee(),b=S(!1),x=S(null),v=S("ukey"),C=S(""),D=S(!1);async function z(d,K,n,c=15e3){if(_){const P=await U.sendRaw({type:d,...K},c);if(!P?.ok){const V=P?.error;throw new Error(typeof V=="string"?V:V?.message||`${d} failed`)}return P.result}return U.executeJson(n,c)}const w=F(()=>e.proposal?.proposal??{}),L=F(()=>new Set((e.proposal?.signatures??[]).map(d=>d.signerDid))),I=F(()=>L.value.size),j=F(()=>(w.value?.memberSet??[]).filter(d=>!L.value.has(d.did))),T=F(()=>{const d=w.value?.payloadHash;return!d||typeof d!="string"?"(unavailable)":d.length<=12?d:`${d.slice(0,8)}…${d.slice(-4)}`}),J=F(()=>{const d=w.value?.payload;try{return d?JSON.stringify(d,null,2):w.value?.payloadJcs||"(empty)"}catch{return String(d)}}),R=F(()=>b.value||!x.value?!1:v.value==="hex"?/^[0-9a-fA-F]{2,}$/.test(C.value.trim()):v.value==="ukey"),m=F(()=>v.value==="ukey"?"签名将通过主进程调用 U-Key 硬件 (Windows) / simulation 驱动 (macOS/Linux)。 请确认 payload hash 与发起方提供的一致。私钥不出硬件边界。":"调试模式:私钥 hex 仅供 CLI / dev 测试。生产环境请使用 U-Key 硬件源。");function O(d){return d?d.length<=28?d:`${d.slice(0,20)}…${d.slice(-8)}`:""}function N(){x.value=null,v.value="ukey",C.value="",D.value=!1,b.value=!1}ae(()=>e.open,d=>{d&&N()}),ae(j,d=>{d.length>0&&!x.value&&(x.value=d[0].did)});function H(d){b.value||h("update:open",d)}function X(){b.value||h("update:open",!1)}async function Q(){if(!R.value)return;const d=v.value==="hex"?{secretKeyHex:C.value.trim()}:{},K=w.value.memberSet.find(n=>n.did===x.value);b.value=!0;try{const n=await z("multisig.sign",{proposalId:w.value.id,signerDid:x.value,alg:K?.alg??"Ed25519",source:v.value,params:d},v.value==="hex"?`multisig sign ${w.value.id} --signer ${x.value} --key ${d.secretKeyHex} --json`:`multisig sign ${w.value.id} --signer ${x.value} --json`,2e4);if(n.accepted)g.success(n.reachedThreshold?"✓ 签名已接受 — 达到阈值":"✓ 签名已接受"),h("signed",n),h("update:open",!1);else{const c=n.reason||"unknown",P=n.detail?` (${n.detail})`:"";g.error(`签名失败: ${c}${P}`)}}catch(n){g.error(n.message||String(n))}finally{b.value=!1}}const q={props:e,emit:h,ws:U,isEmbedded:_,signing:b,signerDid:x,keySource:v,hexInput:C,hashExpanded:D,callMultisigTopic:z,detail:w,signedSet:L,signedCount:I,pendingMembers:j,shortHash:T,payloadJson:J,canSign:R,riskDescription:m,shortDid:O,reset:N,onUpdateOpen:H,onCancel:X,onConfirmSign:Q,ref:S,computed:F,watch:ae,get message(){return g},get useWsStore(){return $},get useShellMode(){return ee}};return Object.defineProperty(q,"__isScriptSetup",{enumerable:!1,value:!0}),q}},ye={style:{"font-size":"12px"}},_e={style:{margin:"8px 0 0","max-height":"200px",overflow:"auto","font-size":"11px"}},ve={style:{"margin-bottom":"16px"}},be={style:{"font-size":"12px"}},ke={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},xe={style:{"margin-bottom":"16px"}};function he(Z,a,B,e,h,U){const _=u("a-tag"),b=u("a-descriptions-item"),x=u("a-descriptions"),v=u("a-divider"),C=u("a-select-option"),D=u("a-select"),z=u("a-typography-text"),w=u("a-radio"),L=u("a-radio-group"),I=u("a-input-password"),j=u("a-alert"),T=u("a-button"),J=u("a-space"),R=u("a-modal");return p(),E(Y,null,[y(`
|
|
2
2
|
#21 B.1 PR2b — multisig 提案签名 Modal。
|
|
3
3
|
设计:A.2 §2.4 高风险二次确认;§2.4.c payload hash 短码 (head 8 + tail 4)
|
|
4
4
|
§2.1.a 高风险红 (danger 主按钮)
|
|
5
5
|
架构:renderer 永远不持私钥。source='ukey' 走主进程 ukeyManager (默认推荐);
|
|
6
6
|
source='hex' 仅调试用 hidden by default。
|
|
7
|
-
`),o(R,{open:B.open,title:"签名提案",width:600,"mask-closable":!1,keyboard:!1,"destroy-on-close":"","onUpdate:open":e.onUpdateOpen},{footer:t(()=>[o(J,null,{default:t(()=>[o(T,{disabled:e.signing,onClick:e.onCancel},{default:t(()=>[...a[12]||(a[12]=[r("取消",-1)])]),_:1},8,["disabled"]),o(T,{type:"primary",danger:"",loading:e.signing,disabled:!e.canSign,onClick:e.onConfirmSign},{default:t(()=>[...a[13]||(a[13]=[r("立即签名",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[B.proposal?(p(),E(Y,{key:0},[o(x,{column:1,bordered:"",size:"small"},{default:t(()=>[o(b,{label:"Domain"},{default:t(()=>[o(_,{color:"purple"},{default:t(()=>[r(s(e.detail.domain),1)]),_:1})]),_:1}),o(b,{label:"Proposal ID"},{default:t(()=>[f("code",ye,s(e.detail.id),1)]),_:1}),o(b,{label:"阈值"},{default:t(()=>[r(s(e.detail.thresholdM)+"-of-"+s(e.detail.memberSet.length),1)]),_:1}),o(b,{label:"已签 / 需签"},{default:t(()=>[r(s(e.signedCount)+" / "+s(e.detail.thresholdM),1)]),_:1}),o(b,{label:"Payload hash"},{default:t(()=>[e.hashExpanded?(p(),E("code",{key:1,class:"hash-full",style:{cursor:"pointer","font-size":"11px","word-break":"break-all"},onClick:a[1]||(a[1]=m=>e.hashExpanded=!1)},s(e.detail.payloadHash||"(unavailable)"),1)):(p(),E("code",{key:0,class:"hash-short",style:{cursor:"pointer","font-size":"12px"},onClick:a[0]||(a[0]=m=>e.hashExpanded=!0),title:"点击展开完整 hash"},s(e.shortHash),1))]),_:1}),o(b,{label:"Payload"},{default:t(()=>[f("details",null,[a[5]||(a[5]=f("summary",{style:{cursor:"pointer",color:"var(--text-secondary)"}}," 展开 (JCS) ",-1)),f("pre",_e,s(e.payloadJson),1)])]),_:1})]),_:1}),o(v),y(" Signer DID 选择 "),f("div",ve,[a[7]||(a[7]=f("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"签名身份 (DID)",-1)),o(D,{value:e.signerDid,"onUpdate:value":a[2]||(a[2]=m=>e.signerDid=m),style:{width:"100%"},placeholder:"选择签名成员",disabled:e.signing},{default:t(()=>[(p(!0),E(Y,null,ne(e.pendingMembers,m=>(p(),k(C,{key:m.did,value:m.did},{default:t(()=>[f("code",be,s(e.shortDid(m.did)),1),f("span",ke," ("+s(m.alg)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","disabled"]),e.pendingMembers.length===0?(p(),k(z,{key:0,type:"warning",style:{"font-size":"12px"}},{default:t(()=>[...a[6]||(a[6]=[r(" 所有成员均已签名 (达阈值) ",-1)])]),_:1})):y("v-if",!0)]),y(" 密钥来源 "),f("div",xe,[a[11]||(a[11]=f("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"密钥来源",-1)),o(L,{value:e.keySource,"onUpdate:value":a[3]||(a[3]=m=>e.keySource=m),disabled:e.signing},{default:t(()=>[o(w,{value:"ukey"},{default:t(()=>[...a[8]||(a[8]=[f("strong",null,"U-Key 硬件",-1),f("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 推荐 (PIN 确认 via 主进程) ",-1)])]),_:1}),a[10]||(a[10]=f("br",null,null,-1)),o(w,{value:"hex",style:{"margin-top":"6px"}},{default:t(()=>[...a[9]||(a[9]=[f("strong",null,"软件 hex",-1),f("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 调试用 — 私钥不应在 UI 输入 ",-1)])]),_:1})]),_:1},8,["value","disabled"]),e.keySource==="hex"?(p(),k(I,{key:0,value:e.hexInput,"onUpdate:value":a[4]||(a[4]=m=>e.hexInput=m),placeholder:"hex (32 bytes = 64 chars Ed25519)",style:{"margin-top":"8px"},disabled:e.signing},null,8,["value","disabled"])):y("v-if",!0)]),y(" 警示 "),o(j,{message:"高风险操作",description:e.riskDescription,type:"warning","show-icon":"",style:{"margin-bottom":"8px"}},null,8,["description"])],64)):y("v-if",!0)]),_:1},8,["open"])],2112)}const we=ie(ge,[["render",he],["__scopeId","data-v-060feb8a"],["__file","/tmp/cc-web-panel-
|
|
7
|
+
`),o(R,{open:B.open,title:"签名提案",width:600,"mask-closable":!1,keyboard:!1,"destroy-on-close":"","onUpdate:open":e.onUpdateOpen},{footer:t(()=>[o(J,null,{default:t(()=>[o(T,{disabled:e.signing,onClick:e.onCancel},{default:t(()=>[...a[12]||(a[12]=[r("取消",-1)])]),_:1},8,["disabled"]),o(T,{type:"primary",danger:"",loading:e.signing,disabled:!e.canSign,onClick:e.onConfirmSign},{default:t(()=>[...a[13]||(a[13]=[r("立即签名",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[B.proposal?(p(),E(Y,{key:0},[o(x,{column:1,bordered:"",size:"small"},{default:t(()=>[o(b,{label:"Domain"},{default:t(()=>[o(_,{color:"purple"},{default:t(()=>[r(s(e.detail.domain),1)]),_:1})]),_:1}),o(b,{label:"Proposal ID"},{default:t(()=>[f("code",ye,s(e.detail.id),1)]),_:1}),o(b,{label:"阈值"},{default:t(()=>[r(s(e.detail.thresholdM)+"-of-"+s(e.detail.memberSet.length),1)]),_:1}),o(b,{label:"已签 / 需签"},{default:t(()=>[r(s(e.signedCount)+" / "+s(e.detail.thresholdM),1)]),_:1}),o(b,{label:"Payload hash"},{default:t(()=>[e.hashExpanded?(p(),E("code",{key:1,class:"hash-full",style:{cursor:"pointer","font-size":"11px","word-break":"break-all"},onClick:a[1]||(a[1]=m=>e.hashExpanded=!1)},s(e.detail.payloadHash||"(unavailable)"),1)):(p(),E("code",{key:0,class:"hash-short",style:{cursor:"pointer","font-size":"12px"},onClick:a[0]||(a[0]=m=>e.hashExpanded=!0),title:"点击展开完整 hash"},s(e.shortHash),1))]),_:1}),o(b,{label:"Payload"},{default:t(()=>[f("details",null,[a[5]||(a[5]=f("summary",{style:{cursor:"pointer",color:"var(--text-secondary)"}}," 展开 (JCS) ",-1)),f("pre",_e,s(e.payloadJson),1)])]),_:1})]),_:1}),o(v),y(" Signer DID 选择 "),f("div",ve,[a[7]||(a[7]=f("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"签名身份 (DID)",-1)),o(D,{value:e.signerDid,"onUpdate:value":a[2]||(a[2]=m=>e.signerDid=m),style:{width:"100%"},placeholder:"选择签名成员",disabled:e.signing},{default:t(()=>[(p(!0),E(Y,null,ne(e.pendingMembers,m=>(p(),k(C,{key:m.did,value:m.did},{default:t(()=>[f("code",be,s(e.shortDid(m.did)),1),f("span",ke," ("+s(m.alg)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","disabled"]),e.pendingMembers.length===0?(p(),k(z,{key:0,type:"warning",style:{"font-size":"12px"}},{default:t(()=>[...a[6]||(a[6]=[r(" 所有成员均已签名 (达阈值) ",-1)])]),_:1})):y("v-if",!0)]),y(" 密钥来源 "),f("div",xe,[a[11]||(a[11]=f("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"密钥来源",-1)),o(L,{value:e.keySource,"onUpdate:value":a[3]||(a[3]=m=>e.keySource=m),disabled:e.signing},{default:t(()=>[o(w,{value:"ukey"},{default:t(()=>[...a[8]||(a[8]=[f("strong",null,"U-Key 硬件",-1),f("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 推荐 (PIN 确认 via 主进程) ",-1)])]),_:1}),a[10]||(a[10]=f("br",null,null,-1)),o(w,{value:"hex",style:{"margin-top":"6px"}},{default:t(()=>[...a[9]||(a[9]=[f("strong",null,"软件 hex",-1),f("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 调试用 — 私钥不应在 UI 输入 ",-1)])]),_:1})]),_:1},8,["value","disabled"]),e.keySource==="hex"?(p(),k(I,{key:0,value:e.hexInput,"onUpdate:value":a[4]||(a[4]=m=>e.hexInput=m),placeholder:"hex (32 bytes = 64 chars Ed25519)",style:{"margin-top":"8px"},disabled:e.signing},null,8,["value","disabled"])):y("v-if",!0)]),y(" 警示 "),o(j,{message:"高风险操作",description:e.riskDescription,type:"warning","show-icon":"",style:{"margin-bottom":"8px"}},null,8,["description"])],64)):y("v-if",!0)]),_:1},8,["open"])],2112)}const we=ie(ge,[["render",he],["__scopeId","data-v-060feb8a"],["__file","/tmp/cc-web-panel-XbotGX/repo/packages/web-panel/src/views/SignProposalModal.vue"]]),Ce={__name:"Multisig",setup(Z,{expose:a}){a();const B=$(),{isEmbedded:e}=ee();async function h(i,l,M,A=8e3){if(e){const W=await B.sendRaw({type:i,...l},A);if(!W?.ok){const te=W?.error;throw new Error(typeof te=="string"?te:te?.message||`${i} failed`)}return W.result}return B.executeJson(M,A)}const U=S(!1),_=S([]),b=S([]),x=S("proposals"),v=S(""),C=S(""),D=S(!1),z=S(null),w=S(!1),L=S(null),I=[{title:"ID",key:"id",width:200},{title:"Domain",dataIndex:"domain",width:220},{title:"状态",key:"state",width:110},{title:"阈值",key:"sigs",width:80},{title:"创建",key:"createdAt",width:140},{title:"过期",key:"expiresAt",width:140},{title:"操作",key:"actions",width:240,fixed:"right"}],j=[{title:"DID",dataIndex:"did"},{title:"Alg",dataIndex:"alg",width:200}],T=F(()=>{const i={pending:0,reached:0,consumed:0,cancelled:0,expired:0};for(const l of _.value)i[l.state]!==void 0&&(i[l.state]+=1);return i}),J=F(()=>_.value.filter(i=>!(v.value&&i.state!==v.value||C.value&&!i.domain.toLowerCase().includes(C.value.toLowerCase()))));function R(i){switch(i){case"pending":return"gold";case"reached":return"cyan";case"consumed":return"green";case"cancelled":return"default";case"expired":return"red";default:return"default"}}function m(i){const l=i-Date.now(),M=Math.abs(l)/6e4;if(M<60)return l>0?`${Math.round(M)} 分钟后`:`${Math.round(M)} 分钟前`;const A=M/60;if(A<24)return l>0?`${Math.round(A)} 小时后`:`${Math.round(A)} 小时前`;const W=A/24;return l>0?`${Math.round(W)} 天后`:`${Math.round(W)} 天前`}async function O(){U.value=!0;try{const[i,l]=await Promise.all([h("multisig.list",{limit:500},"multisig list --limit 500 --json",1e4).catch(()=>[]),Promise.all(["marketplace.purchase","crosschain.bridge.outbound","did.rotate"].map(async M=>{try{const A=await h("multisig.policy.show",{domain:M},`multisig policy show ${M} --json`,8e3);return{domain:M,policy:A,updatedAtMs:Date.now()}}catch{return null}})).then(M=>M.filter(Boolean))]);_.value=Array.isArray(i)?i:[],b.value=Array.isArray(l)?l:[]}catch(i){g.error("加载失败: "+(i.message||i))}finally{U.value=!1}}async function N(i){try{const l=await h("multisig.show",{proposalId:i.id},`multisig show ${i.id} --json`,8e3);z.value=l,D.value=!0}catch(l){g.error("加载详情失败: "+(l.message||l))}}function H(i){return{onClick:()=>N(i)}}async function X(i){oe.confirm({title:`取消提案 ${i.id.slice(0,12)}…?`,content:"已签名的成员需要重新发起新提案。此操作不可撤销。",okText:"取消提案",okType:"danger",cancelText:"保持",onOk:async()=>{try{const l=await h("multisig.cancel",{proposalId:i.id,reason:"web-shell"},`multisig cancel ${i.id} --reason web-shell --json`,8e3);l.ok?(g.success("提案已取消"),D.value=!1,await O()):g.error("取消失败: "+l.reason)}catch(l){g.error(l.message||String(l))}}})}async function Q(i){try{const l=await h("multisig.show",{proposalId:i.id},`multisig show ${i.id} --json`,8e3);L.value=l,w.value=!0}catch(l){g.error("加载提案详情失败: "+(l.message||l))}}function q(){z.value&&(L.value=z.value,w.value=!0)}async function d(){D.value=!1,await O()}async function K(i){try{const l=await h("marketplace.consume",{proposalId:i.id},`marketplace consume ${i.id} --json`,1e4);l.status==="consumed"?(g.success(`订单 ${l.order.itemId} 已执行 (¥${(l.order.amountFen/100).toFixed(2)})`),D.value=!1,await O()):g.error("执行失败: "+(l.reason||JSON.stringify(l)))}catch(l){g.error(l.message||String(l))}}async function n(i){try{const l=await h("crosschain.bridge.consume",{proposalId:i.id},`crosschain bridge-consume ${i.id} --json`,1e4);if(l.status==="consumed"){const M=l.payload||{},A=`${M.fromChain||"?"} → ${M.toChain||"?"} (amount ${M.amount??"?"})`;l.bridgeId?g.success(`跨链桥已执行: ${A} · bridgeId ${l.bridgeId}`):(g.success(`跨链桥提案已 finalize: ${A}`),oe.info({title:"跨链桥提案 finalize 完成",content:`Proposal 已标记 consumed。
|
|
8
8
|
|
|
9
9
|
在 CLI 侧运行以下命令完成 cc_bridges 行插入:
|
|
10
10
|
|
|
11
11
|
cc crosschain bridge-consume ${i.id}
|
|
12
12
|
|
|
13
|
-
web-shell 不持有 crosschain DB 句柄,实际 SQLite 插入仍由 CLI 端执行。`})),D.value=!1,await O()}else g.error("执行失败: "+(l.reason||JSON.stringify(l)))}catch(l){g.error(l.message||String(l))}}async function c(i){try{const l=await h("multisig.finalize",{proposalId:i.id},`multisig finalize ${i.id} --json`,8e3);l.ok?(g.success("提案已 finalize"),D.value=!1,await O()):g.error("Finalize 失败: "+l.reason)}catch(l){g.error(l.message||String(l))}}async function P(){try{const i=await h("multisig.sweep",{},"multisig sweep --json",8e3);i.expired===0?g.info("无过期提案"):(g.success(`已标记 ${i.expired} 条提案为过期`),await O())}catch(i){g.error(i.message||String(i))}}le(O);const W={ws:B,isEmbedded:e,callMultisigTopic:h,loading:U,proposals:_,policies:b,activeTab:x,stateFilter:v,domainFilter:C,detailOpen:D,detail:z,signOpen:w,signProposalDetail:L,columns:I,memberColumns:j,countByState:T,filteredProposals:J,stateColor:R,relTime:m,loadAll:O,openDetail:N,onRowClick:q,onCancel:Q,onSignFromList:Z,onSignFromDetail:H,onSigned:d,onConsume:K,onBridgeConsume:n,onFinalize:c,onSweep:P,ref:S,computed:F,onMounted:le,get ReloadOutlined(){return fe},get ClockCircleOutlined(){return me},get CheckCircleOutlined(){return pe},get CheckSquareOutlined(){return ce},get CloseCircleOutlined(){return ue},get ExclamationCircleOutlined(){return de},get FileTextOutlined(){return se},get message(){return g},get Modal(){return oe},get useWsStore(){return $},get useShellMode(){return ee},SignProposalModal:we};return Object.defineProperty(W,"__isScriptSetup",{enumerable:!1,value:!0}),W}},Se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ze={class:"filter-bar"},Me={key:0,style:{"font-size":"12px"}},De={style:{margin:"0 0 8px 0"}},Oe={style:{"margin-left":"8px",color:"var(--text-secondary)"}},Ie={style:{"margin-top":"8px"}},Pe={style:{cursor:"pointer",color:"var(--text-secondary)"}},Ae={key:0},Fe={style:{margin:"0","max-height":"240px",overflow:"auto","font-size":"12px"}},Le={style:{margin:"16px 0 8px 0"}},Be={style:{"font-size":"12px"}};function Ue(X,a,B,e,h,U){const _=u("a-button"),b=u("a-space"),x=u("a-statistic"),v=u("a-card"),C=u("a-col"),D=u("a-row"),z=u("a-radio-button"),w=u("a-radio-group"),L=u("a-input-search"),I=u("a-tag"),j=u("a-tooltip"),T=u("a-table"),J=u("a-tab-pane"),R=u("a-empty"),m=u("a-descriptions-item"),O=u("a-descriptions"),N=u("a-list-item"),q=u("a-list"),Q=u("a-tabs"),Z=u("a-list-item-meta"),H=u("a-divider"),d=u("a-alert"),K=u("a-drawer");return p(),E("div",null,[f("div",Se,[a[12]||(a[12]=f("div",null,[f("h2",{class:"page-title"},"M-of-N 多签"),f("p",{class:"page-sub"},"marketplace.purchase 大额、DID 关键操作、跨链桥 outbound 的联合签名审批")],-1)),o(b,null,{default:t(()=>[o(_,{loading:e.loading,onClick:e.loadAll},{icon:t(()=>[o(e.ReloadOutlined)]),default:t(()=>[a[10]||(a[10]=r(" 刷新 ",-1))]),_:1},8,["loading"]),o(_,{onClick:e.onSweep},{icon:t(()=>[o(e.ClockCircleOutlined)]),default:t(()=>[a[11]||(a[11]=r(" 扫过期 ",-1))]),_:1})]),_:1})]),y(" Stats "),o(D,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"总提案",value:e.proposals.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[o(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"待签",value:e.countByState.pending,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:t(()=>[o(e.ClockCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已达阈值",value:e.countByState.reached,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[o(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已执行",value:e.countByState.consumed,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:t(()=>[o(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已取消",value:e.countByState.cancelled,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:t(()=>[o(e.CloseCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已过期",value:e.countByState.expired,"value-style":{color:"#ff4d4f",fontSize:"20px"}},{prefix:t(()=>[o(e.ExclamationCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(Q,{activeKey:e.activeTab,"onUpdate:activeKey":a[2]||(a[2]=n=>e.activeTab=n)},{default:t(()=>[y(" Proposals tab "),o(J,{key:"proposals",tab:"提案列表"},{default:t(()=>[f("div",ze,[o(w,{value:e.stateFilter,"onUpdate:value":a[0]||(a[0]=n=>e.stateFilter=n),size:"small","button-style":"solid"},{default:t(()=>[o(z,{value:""},{default:t(()=>[...a[13]||(a[13]=[r("全部",-1)])]),_:1}),o(z,{value:"pending"},{default:t(()=>[...a[14]||(a[14]=[r("待签",-1)])]),_:1}),o(z,{value:"reached"},{default:t(()=>[...a[15]||(a[15]=[r("已达阈值",-1)])]),_:1}),o(z,{value:"consumed"},{default:t(()=>[...a[16]||(a[16]=[r("已执行",-1)])]),_:1}),o(z,{value:"cancelled"},{default:t(()=>[...a[17]||(a[17]=[r("已取消",-1)])]),_:1}),o(z,{value:"expired"},{default:t(()=>[...a[18]||(a[18]=[r("已过期",-1)])]),_:1})]),_:1},8,["value"]),o(L,{value:e.domainFilter,"onUpdate:value":a[1]||(a[1]=n=>e.domainFilter=n),placeholder:"按 domain 过滤 (marketplace.purchase 等)","allow-clear":"",style:{"max-width":"360px","margin-left":"12px"}},null,8,["value"])]),o(T,{columns:e.columns,"data-source":e.filteredProposals,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0,pageSizeOptions:["10","20","50","100"]},"row-key":"id",size:"middle",onRowClick:e.onRowClick,"row-class-name":()=>"multisig-row"},{bodyCell:t(({column:n,record:c})=>[n.key==="id"?(p(),E("code",Me,s(c.id.slice(0,16))+"…",1)):n.key==="state"?(p(),k(I,{key:1,color:e.stateColor(c.state)},{default:t(()=>[r(s(c.state),1)]),_:2},1032,["color"])):n.key==="sigs"?(p(),k(I,{key:2,color:c.n===c.m?"cyan":"default"},{default:t(()=>[r(s(c.m)+"/"+s(c.n),1)]),_:2},1032,["color"])):n.key==="createdAt"?(p(),k(j,{key:3,title:new Date(c.createdAtMs).toLocaleString()},{default:t(()=>[r(s(e.relTime(c.createdAtMs)),1)]),_:2},1032,["title"])):n.key==="expiresAt"?(p(),k(j,{key:4,title:new Date(c.expiresAtMs).toLocaleString()},{default:t(()=>[f("span",{style:re({color:c.expiresAtMs<Date.now()?"#ff4d4f":"inherit"})},s(e.relTime(c.expiresAtMs)),5)]),_:2},1032,["title"])):n.key==="actions"?(p(),k(b,{key:5,size:"small"},{default:t(()=>[o(_,{size:"small",onClick:G(P=>e.openDetail(c),["stop"])},{default:t(()=>[...a[19]||(a[19]=[r("详情",-1)])]),_:1},8,["onClick"]),c.state==="pending"||c.state==="reached"?(p(),k(_,{key:0,size:"small",danger:"",onClick:G(P=>e.onCancel(c),["stop"])},{default:t(()=>[...a[20]||(a[20]=[r("取消",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="pending"?(p(),k(_,{key:1,size:"small",type:"primary",onClick:G(P=>e.onSignFromList(c),["stop"])},{default:t(()=>[...a[21]||(a[21]=[r("签名",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="reached"&&c.domain==="marketplace.purchase"?(p(),k(_,{key:2,size:"small",type:"primary",onClick:G(P=>e.onConsume(c),["stop"])},{default:t(()=>[...a[22]||(a[22]=[r("执行购买",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="reached"&&c.domain==="crosschain.bridge.outbound"?(p(),k(_,{key:3,size:"small",type:"primary",onClick:G(P=>e.onBridgeConsume(c),["stop"])},{default:t(()=>[...a[23]||(a[23]=[r("执行跨链桥",-1)])]),_:1},8,["onClick"])):y("v-if",!0)]),_:2},1024)):y("v-if",!0)]),_:1},8,["data-source","loading"])]),_:1}),y(" Policies tab "),o(J,{key:"policies",tab:"域策略"},{default:t(()=>[e.policies.length===0?(p(),k(R,{key:0,description:"暂无域策略 — 用 CLI 配置: cc multisig policy set <domain> --m <M> --members <json>"})):(p(),k(q,{key:1,"data-source":e.policies,"item-layout":"vertical"},{renderItem:t(({item:n})=>[o(N,null,{default:t(()=>[o(v,null,{default:t(()=>[f("h4",De,[o(I,{color:"purple"},{default:t(()=>[r(s(n.domain),1)]),_:2},1024),f("span",Oe,[r(s(n.policy.m)+"-of-"+s(n.policy.members.length)+" ",1),n.policy.requirePqc?(p(),k(I,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:t(()=>[...a[24]||(a[24]=[r("requirePQC",-1)])]),_:1})):y("v-if",!0)])]),o(O,{size:"small",column:2},{default:t(()=>[o(m,{label:"阈值 M"},{default:t(()=>[r(s(n.policy.m),1)]),_:2},1024),o(m,{label:"成员数 N"},{default:t(()=>[r(s(n.policy.members.length),1)]),_:2},1024),o(m,{label:"算法"},{default:t(()=>[(p(!0),E(Y,null,ne(n.policy.algorithms||[],c=>(p(),k(I,{key:c,size:"small"},{default:t(()=>[r(s(c),1)]),_:2},1024))),128))]),_:2},1024),o(m,{label:"默认有效期"},{default:t(()=>[r(s(Math.round((n.policy.defaultExpiryMs||864e5)/1e3/60/60))+"h ",1)]),_:2},1024)]),_:2},1024),f("details",Ie,[f("summary",Pe,"展开成员列表 ("+s(n.policy.members.length)+")",1),o(T,{columns:e.memberColumns,"data-source":n.policy.members,pagination:!1,size:"small","row-key":"did",style:{"margin-top":"8px"}},null,8,["data-source"])])]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1})]),_:1},8,["activeKey"]),y(" Detail drawer "),o(K,{open:e.detailOpen,"onUpdate:open":a[8]||(a[8]=n=>e.detailOpen=n),title:e.detail?`提案 ${e.detail.proposal.id}`:"提案详情",width:"640","destroy-on-close":""},{default:t(()=>[e.detail?(p(),E("div",Ae,[o(O,{column:1,bordered:"",size:"small"},{default:t(()=>[o(m,{label:"Domain"},{default:t(()=>[r(s(e.detail.proposal.domain),1)]),_:1}),o(m,{label:"状态"},{default:t(()=>[o(I,{color:e.stateColor(e.detail.proposal.state)},{default:t(()=>[r(s(e.detail.proposal.state),1)]),_:1},8,["color"])]),_:1}),o(m,{label:"阈值"},{default:t(()=>[r(s(e.detail.proposal.thresholdM)+"-of-"+s(e.detail.proposal.memberSet.length),1)]),_:1}),o(m,{label:"已签 / 需签"},{default:t(()=>[r(s(e.detail.signatures.length)+" / "+s(e.detail.proposal.thresholdM),1)]),_:1}),o(m,{label:"发起方"},{default:t(()=>[r(s(e.detail.proposal.initiatorDid),1)]),_:1}),o(m,{label:"创建时间"},{default:t(()=>[r(s(new Date(e.detail.proposal.createdAtMs).toLocaleString()),1)]),_:1}),o(m,{label:"过期时间"},{default:t(()=>[r(s(new Date(e.detail.proposal.expiresAtMs).toLocaleString()),1)]),_:1}),o(m,{label:"Payload"},{default:t(()=>[f("pre",Fe,s(e.detail.proposal.payload?JSON.stringify(e.detail.proposal.payload,null,2):e.detail.proposal.payloadJcs),1)]),_:1})]),_:1}),f("h4",Le,"签名列表 ("+s(e.detail.signatures.length)+")",1),o(q,{"data-source":e.detail.signatures,size:"small"},{renderItem:t(({item:n})=>[o(N,null,{default:t(()=>[o(Z,null,{title:t(()=>[o(e.CheckCircleOutlined,{style:{color:"#52c41a","margin-right":"6px"}}),f("code",Be,s(n.signerDid),1)]),description:t(()=>[r(s(n.alg)+" — "+s(new Date(n.signedAtMs).toLocaleString()),1)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]),o(H),o(d,{message:"签名 / 执行操作需通过 CLI 提供私钥",description:"Web shell 不直接持有私钥(接 Unified KeyStore 仍未收口)。本面板用于查看提案状态,签名请用 cc multisig sign;执行已 reached 的提案可在此面板按 domain 直达(marketplace.purchase / crosschain.bridge.outbound),其它 domain 走 cc multisig finalize。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}}),o(b,null,{default:t(()=>[e.detail.proposal.state==="pending"||e.detail.proposal.state==="reached"?(p(),k(_,{key:0,danger:"",onClick:a[3]||(a[3]=n=>e.onCancel(e.detail.proposal))},{default:t(()=>[...a[25]||(a[25]=[r("取消提案",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="pending"?(p(),k(_,{key:1,type:"primary",onClick:a[4]||(a[4]=n=>e.onSignFromDetail())},{default:t(()=>[...a[26]||(a[26]=[r("签名 (multisig.sign)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain==="marketplace.purchase"?(p(),k(_,{key:2,type:"primary",onClick:a[5]||(a[5]=n=>e.onConsume(e.detail.proposal))},{default:t(()=>[...a[27]||(a[27]=[r("执行购买 (cc marketplace consume)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain==="crosschain.bridge.outbound"?(p(),k(_,{key:3,type:"primary",onClick:a[6]||(a[6]=n=>e.onBridgeConsume(e.detail.proposal))},{default:t(()=>[...a[28]||(a[28]=[r("执行跨链桥 (cc crosschain bridge-consume)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain!=="marketplace.purchase"&&e.detail.proposal.domain!=="crosschain.bridge.outbound"?(p(),k(_,{key:4,type:"primary",onClick:a[7]||(a[7]=n=>e.onFinalize(e.detail.proposal))},{default:t(()=>[...a[29]||(a[29]=[r("finalize (cc multisig finalize)",-1)])]),_:1})):y("v-if",!0)]),_:1})])):y("v-if",!0)]),_:1},8,["open","title"]),y(" #21 B.1 PR2b — Sign Proposal Modal "),o(e.SignProposalModal,{open:e.signOpen,"onUpdate:open":a[9]||(a[9]=n=>e.signOpen=n),proposal:e.signProposalDetail,onSigned:e.onSigned},null,8,["open","proposal"])])}const rt=ie(Ce,[["render",Ue],["__scopeId","data-v-429bfa1a"],["__file","/tmp/cc-web-panel-88syqW/repo/packages/web-panel/src/views/Multisig.vue"]]);export{rt as default};
|
|
13
|
+
web-shell 不持有 crosschain DB 句柄,实际 SQLite 插入仍由 CLI 端执行。`})),D.value=!1,await O()}else g.error("执行失败: "+(l.reason||JSON.stringify(l)))}catch(l){g.error(l.message||String(l))}}async function c(i){try{const l=await h("multisig.finalize",{proposalId:i.id},`multisig finalize ${i.id} --json`,8e3);l.ok?(g.success("提案已 finalize"),D.value=!1,await O()):g.error("Finalize 失败: "+l.reason)}catch(l){g.error(l.message||String(l))}}async function P(){try{const i=await h("multisig.sweep",{},"multisig sweep --json",8e3);i.expired===0?g.info("无过期提案"):(g.success(`已标记 ${i.expired} 条提案为过期`),await O())}catch(i){g.error(i.message||String(i))}}le(O);const V={ws:B,isEmbedded:e,callMultisigTopic:h,loading:U,proposals:_,policies:b,activeTab:x,stateFilter:v,domainFilter:C,detailOpen:D,detail:z,signOpen:w,signProposalDetail:L,columns:I,memberColumns:j,countByState:T,filteredProposals:J,stateColor:R,relTime:m,loadAll:O,openDetail:N,onRowClick:H,onCancel:X,onSignFromList:Q,onSignFromDetail:q,onSigned:d,onConsume:K,onBridgeConsume:n,onFinalize:c,onSweep:P,ref:S,computed:F,onMounted:le,get ReloadOutlined(){return fe},get ClockCircleOutlined(){return me},get CheckCircleOutlined(){return pe},get CheckSquareOutlined(){return ce},get CloseCircleOutlined(){return ue},get ExclamationCircleOutlined(){return de},get FileTextOutlined(){return se},get message(){return g},get Modal(){return oe},get useWsStore(){return $},get useShellMode(){return ee},SignProposalModal:we};return Object.defineProperty(V,"__isScriptSetup",{enumerable:!1,value:!0}),V}},Se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ze={class:"filter-bar"},Me={key:0,style:{"font-size":"12px"}},De={style:{margin:"0 0 8px 0"}},Oe={style:{"margin-left":"8px",color:"var(--text-secondary)"}},Ie={style:{"margin-top":"8px"}},Pe={style:{cursor:"pointer",color:"var(--text-secondary)"}},Ae={key:0},Fe={style:{margin:"0","max-height":"240px",overflow:"auto","font-size":"12px"}},Le={style:{margin:"16px 0 8px 0"}},Be={style:{"font-size":"12px"}};function Ue(Z,a,B,e,h,U){const _=u("a-button"),b=u("a-space"),x=u("a-statistic"),v=u("a-card"),C=u("a-col"),D=u("a-row"),z=u("a-radio-button"),w=u("a-radio-group"),L=u("a-input-search"),I=u("a-tag"),j=u("a-tooltip"),T=u("a-table"),J=u("a-tab-pane"),R=u("a-empty"),m=u("a-descriptions-item"),O=u("a-descriptions"),N=u("a-list-item"),H=u("a-list"),X=u("a-tabs"),Q=u("a-list-item-meta"),q=u("a-divider"),d=u("a-alert"),K=u("a-drawer");return p(),E("div",null,[f("div",Se,[a[12]||(a[12]=f("div",null,[f("h2",{class:"page-title"},"M-of-N 多签"),f("p",{class:"page-sub"},"marketplace.purchase 大额、DID 关键操作、跨链桥 outbound 的联合签名审批")],-1)),o(b,null,{default:t(()=>[o(_,{loading:e.loading,onClick:e.loadAll},{icon:t(()=>[o(e.ReloadOutlined)]),default:t(()=>[a[10]||(a[10]=r(" 刷新 ",-1))]),_:1},8,["loading"]),o(_,{onClick:e.onSweep},{icon:t(()=>[o(e.ClockCircleOutlined)]),default:t(()=>[a[11]||(a[11]=r(" 扫过期 ",-1))]),_:1})]),_:1})]),y(" Stats "),o(D,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"总提案",value:e.proposals.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[o(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"待签",value:e.countByState.pending,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:t(()=>[o(e.ClockCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已达阈值",value:e.countByState.reached,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[o(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已执行",value:e.countByState.consumed,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:t(()=>[o(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已取消",value:e.countByState.cancelled,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:t(()=>[o(e.CloseCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已过期",value:e.countByState.expired,"value-style":{color:"#ff4d4f",fontSize:"20px"}},{prefix:t(()=>[o(e.ExclamationCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(X,{activeKey:e.activeTab,"onUpdate:activeKey":a[2]||(a[2]=n=>e.activeTab=n)},{default:t(()=>[y(" Proposals tab "),o(J,{key:"proposals",tab:"提案列表"},{default:t(()=>[f("div",ze,[o(w,{value:e.stateFilter,"onUpdate:value":a[0]||(a[0]=n=>e.stateFilter=n),size:"small","button-style":"solid"},{default:t(()=>[o(z,{value:""},{default:t(()=>[...a[13]||(a[13]=[r("全部",-1)])]),_:1}),o(z,{value:"pending"},{default:t(()=>[...a[14]||(a[14]=[r("待签",-1)])]),_:1}),o(z,{value:"reached"},{default:t(()=>[...a[15]||(a[15]=[r("已达阈值",-1)])]),_:1}),o(z,{value:"consumed"},{default:t(()=>[...a[16]||(a[16]=[r("已执行",-1)])]),_:1}),o(z,{value:"cancelled"},{default:t(()=>[...a[17]||(a[17]=[r("已取消",-1)])]),_:1}),o(z,{value:"expired"},{default:t(()=>[...a[18]||(a[18]=[r("已过期",-1)])]),_:1})]),_:1},8,["value"]),o(L,{value:e.domainFilter,"onUpdate:value":a[1]||(a[1]=n=>e.domainFilter=n),placeholder:"按 domain 过滤 (marketplace.purchase 等)","allow-clear":"",style:{"max-width":"360px","margin-left":"12px"}},null,8,["value"])]),o(T,{columns:e.columns,"data-source":e.filteredProposals,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0,pageSizeOptions:["10","20","50","100"]},"row-key":"id",size:"middle",onRowClick:e.onRowClick,"row-class-name":()=>"multisig-row"},{bodyCell:t(({column:n,record:c})=>[n.key==="id"?(p(),E("code",Me,s(c.id.slice(0,16))+"…",1)):n.key==="state"?(p(),k(I,{key:1,color:e.stateColor(c.state)},{default:t(()=>[r(s(c.state),1)]),_:2},1032,["color"])):n.key==="sigs"?(p(),k(I,{key:2,color:c.n===c.m?"cyan":"default"},{default:t(()=>[r(s(c.m)+"/"+s(c.n),1)]),_:2},1032,["color"])):n.key==="createdAt"?(p(),k(j,{key:3,title:new Date(c.createdAtMs).toLocaleString()},{default:t(()=>[r(s(e.relTime(c.createdAtMs)),1)]),_:2},1032,["title"])):n.key==="expiresAt"?(p(),k(j,{key:4,title:new Date(c.expiresAtMs).toLocaleString()},{default:t(()=>[f("span",{style:re({color:c.expiresAtMs<Date.now()?"#ff4d4f":"inherit"})},s(e.relTime(c.expiresAtMs)),5)]),_:2},1032,["title"])):n.key==="actions"?(p(),k(b,{key:5,size:"small"},{default:t(()=>[o(_,{size:"small",onClick:G(P=>e.openDetail(c),["stop"])},{default:t(()=>[...a[19]||(a[19]=[r("详情",-1)])]),_:1},8,["onClick"]),c.state==="pending"||c.state==="reached"?(p(),k(_,{key:0,size:"small",danger:"",onClick:G(P=>e.onCancel(c),["stop"])},{default:t(()=>[...a[20]||(a[20]=[r("取消",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="pending"?(p(),k(_,{key:1,size:"small",type:"primary",onClick:G(P=>e.onSignFromList(c),["stop"])},{default:t(()=>[...a[21]||(a[21]=[r("签名",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="reached"&&c.domain==="marketplace.purchase"?(p(),k(_,{key:2,size:"small",type:"primary",onClick:G(P=>e.onConsume(c),["stop"])},{default:t(()=>[...a[22]||(a[22]=[r("执行购买",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="reached"&&c.domain==="crosschain.bridge.outbound"?(p(),k(_,{key:3,size:"small",type:"primary",onClick:G(P=>e.onBridgeConsume(c),["stop"])},{default:t(()=>[...a[23]||(a[23]=[r("执行跨链桥",-1)])]),_:1},8,["onClick"])):y("v-if",!0)]),_:2},1024)):y("v-if",!0)]),_:1},8,["data-source","loading"])]),_:1}),y(" Policies tab "),o(J,{key:"policies",tab:"域策略"},{default:t(()=>[e.policies.length===0?(p(),k(R,{key:0,description:"暂无域策略 — 用 CLI 配置: cc multisig policy set <domain> --m <M> --members <json>"})):(p(),k(H,{key:1,"data-source":e.policies,"item-layout":"vertical"},{renderItem:t(({item:n})=>[o(N,null,{default:t(()=>[o(v,null,{default:t(()=>[f("h4",De,[o(I,{color:"purple"},{default:t(()=>[r(s(n.domain),1)]),_:2},1024),f("span",Oe,[r(s(n.policy.m)+"-of-"+s(n.policy.members.length)+" ",1),n.policy.requirePqc?(p(),k(I,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:t(()=>[...a[24]||(a[24]=[r("requirePQC",-1)])]),_:1})):y("v-if",!0)])]),o(O,{size:"small",column:2},{default:t(()=>[o(m,{label:"阈值 M"},{default:t(()=>[r(s(n.policy.m),1)]),_:2},1024),o(m,{label:"成员数 N"},{default:t(()=>[r(s(n.policy.members.length),1)]),_:2},1024),o(m,{label:"算法"},{default:t(()=>[(p(!0),E(Y,null,ne(n.policy.algorithms||[],c=>(p(),k(I,{key:c,size:"small"},{default:t(()=>[r(s(c),1)]),_:2},1024))),128))]),_:2},1024),o(m,{label:"默认有效期"},{default:t(()=>[r(s(Math.round((n.policy.defaultExpiryMs||864e5)/1e3/60/60))+"h ",1)]),_:2},1024)]),_:2},1024),f("details",Ie,[f("summary",Pe,"展开成员列表 ("+s(n.policy.members.length)+")",1),o(T,{columns:e.memberColumns,"data-source":n.policy.members,pagination:!1,size:"small","row-key":"did",style:{"margin-top":"8px"}},null,8,["data-source"])])]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1})]),_:1},8,["activeKey"]),y(" Detail drawer "),o(K,{open:e.detailOpen,"onUpdate:open":a[8]||(a[8]=n=>e.detailOpen=n),title:e.detail?`提案 ${e.detail.proposal.id}`:"提案详情",width:"640","destroy-on-close":""},{default:t(()=>[e.detail?(p(),E("div",Ae,[o(O,{column:1,bordered:"",size:"small"},{default:t(()=>[o(m,{label:"Domain"},{default:t(()=>[r(s(e.detail.proposal.domain),1)]),_:1}),o(m,{label:"状态"},{default:t(()=>[o(I,{color:e.stateColor(e.detail.proposal.state)},{default:t(()=>[r(s(e.detail.proposal.state),1)]),_:1},8,["color"])]),_:1}),o(m,{label:"阈值"},{default:t(()=>[r(s(e.detail.proposal.thresholdM)+"-of-"+s(e.detail.proposal.memberSet.length),1)]),_:1}),o(m,{label:"已签 / 需签"},{default:t(()=>[r(s(e.detail.signatures.length)+" / "+s(e.detail.proposal.thresholdM),1)]),_:1}),o(m,{label:"发起方"},{default:t(()=>[r(s(e.detail.proposal.initiatorDid),1)]),_:1}),o(m,{label:"创建时间"},{default:t(()=>[r(s(new Date(e.detail.proposal.createdAtMs).toLocaleString()),1)]),_:1}),o(m,{label:"过期时间"},{default:t(()=>[r(s(new Date(e.detail.proposal.expiresAtMs).toLocaleString()),1)]),_:1}),o(m,{label:"Payload"},{default:t(()=>[f("pre",Fe,s(e.detail.proposal.payload?JSON.stringify(e.detail.proposal.payload,null,2):e.detail.proposal.payloadJcs),1)]),_:1})]),_:1}),f("h4",Le,"签名列表 ("+s(e.detail.signatures.length)+")",1),o(H,{"data-source":e.detail.signatures,size:"small"},{renderItem:t(({item:n})=>[o(N,null,{default:t(()=>[o(Q,null,{title:t(()=>[o(e.CheckCircleOutlined,{style:{color:"#52c41a","margin-right":"6px"}}),f("code",Be,s(n.signerDid),1)]),description:t(()=>[r(s(n.alg)+" — "+s(new Date(n.signedAtMs).toLocaleString()),1)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]),o(q),o(d,{message:"签名 / 执行操作需通过 CLI 提供私钥",description:"Web shell 不直接持有私钥(接 Unified KeyStore 仍未收口)。本面板用于查看提案状态,签名请用 cc multisig sign;执行已 reached 的提案可在此面板按 domain 直达(marketplace.purchase / crosschain.bridge.outbound),其它 domain 走 cc multisig finalize。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}}),o(b,null,{default:t(()=>[e.detail.proposal.state==="pending"||e.detail.proposal.state==="reached"?(p(),k(_,{key:0,danger:"",onClick:a[3]||(a[3]=n=>e.onCancel(e.detail.proposal))},{default:t(()=>[...a[25]||(a[25]=[r("取消提案",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="pending"?(p(),k(_,{key:1,type:"primary",onClick:a[4]||(a[4]=n=>e.onSignFromDetail())},{default:t(()=>[...a[26]||(a[26]=[r("签名 (multisig.sign)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain==="marketplace.purchase"?(p(),k(_,{key:2,type:"primary",onClick:a[5]||(a[5]=n=>e.onConsume(e.detail.proposal))},{default:t(()=>[...a[27]||(a[27]=[r("执行购买 (cc marketplace consume)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain==="crosschain.bridge.outbound"?(p(),k(_,{key:3,type:"primary",onClick:a[6]||(a[6]=n=>e.onBridgeConsume(e.detail.proposal))},{default:t(()=>[...a[28]||(a[28]=[r("执行跨链桥 (cc crosschain bridge-consume)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain!=="marketplace.purchase"&&e.detail.proposal.domain!=="crosschain.bridge.outbound"?(p(),k(_,{key:4,type:"primary",onClick:a[7]||(a[7]=n=>e.onFinalize(e.detail.proposal))},{default:t(()=>[...a[29]||(a[29]=[r("finalize (cc multisig finalize)",-1)])]),_:1})):y("v-if",!0)]),_:1})])):y("v-if",!0)]),_:1},8,["open","title"]),y(" #21 B.1 PR2b — Sign Proposal Modal "),o(e.SignProposalModal,{open:e.signOpen,"onUpdate:open":a[9]||(a[9]=n=>e.signOpen=n),proposal:e.signProposalDetail,onSigned:e.onSigned},null,8,["open","proposal"])])}const rt=ie(Ce,[["render",Ue],["__scopeId","data-v-429bfa1a"],["__file","/tmp/cc-web-panel-XbotGX/repo/packages/web-panel/src/views/Multisig.vue"]]);export{rt as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{I as m,J as y,U as b,R as i,c as a,K as o,V as p,S as k,o as ut,a as ot,b as W,r as _,P as d,Q as u,F as S,Z as R,$ as It}from"./vendor-BvqAck49.js";import{_ as Dt,u as pt,b as ft,d as v}from"./index-CM1idCUO.js";import{s as Ut}from"./community-parser-CO25nZFt.js";import{a$ as Pt,f as Mt,ai as Jt,a4 as Bt,o as qt,Q as Vt,as as Gt,R as Kt}from"./icons-DP3uiYxy.js";function V(e){const n=Ut(e);if(!n)return null;try{return JSON.parse(n)}catch{}const c=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!c)return null;try{return JSON.parse(c[0])}catch{return null}}const Ct=Object.freeze(["create_component","add_feature","fix_bug","refactor","add_api","add_test","update_style","configure","general"]),Wt=Object.freeze(["draft","complete","refined"]),Tt=Object.freeze(["naming","architecture","testing","style","imports","components"]);function j(e,n=0){return typeof e=="number"&&Number.isFinite(e)?e:n}function Y(e,n){if(e==null)return n;if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}function mt(e){const n=V(e);return!n||typeof n!="object"||Array.isArray(n)?null:{intent:String(n.intent||"general"),confidence:j(n.confidence,0)}}function gt(e){const n=V(e);if(!n||typeof n!="object"||Array.isArray(n))return null;const c=Array.isArray(n.entities)?n.entities.map(t=>t&&typeof t=="object"?{type:String(t.type||""),value:String(t.value||"")}:null).filter(Boolean):[];return{entities:c,count:j(n.count,c.length)}}function yt(e){const n=V(e);if(!n||typeof n!="object"||Array.isArray(n))return null;const c=Array.isArray(n.detected)?n.detected.filter(t=>typeof t=="string"):[];return{detected:c,primary:n.primary?String(n.primary):c[0]||null}}function Yt(e,n=0){if(!e||typeof e!="object")return null;const c=e.id||"";return c?{key:c,id:c,inputText:e.inputText??e.input_text??"",intent:String(e.intent||"general"),entities:Y(e.entities,[]),techStack:Y(e.techStack??e.tech_stack,[]),spec:Y(e.spec,null),completenessScore:j(e.completenessScore??e.completeness_score,0),ambiguities:Y(e.ambiguities,[]),status:String(e.status||"draft").toLowerCase(),createdAt:e.createdAt??e.created_at??null,updatedAt:e.updatedAt??e.updated_at??null,_idx:n}:null}function vt(e){const n=V(e);return Array.isArray(n)?n.map(Yt).filter(Boolean):[]}function bt(e){const n=V(e);return!n||typeof n!="object"||Array.isArray(n)||n.translationId===void 0?null:{translated:!!n.translated,translationId:n.translationId,intent:String(n.intent||""),completeness:j(n.completeness,0)}}function _t(e){if(!e)return{noDb:!1,error:""};const n=/No ChainlessChain project database/i.test(e)||/Cannot read properties of undefined \(reading ['"]prepare['"]\)/i.test(e)||/TypeError.*prepare/i.test(e),c=e.match(/Error:\s*(No ChainlessChain project database[^\r\n]*)/i);if(c)return{noDb:!0,error:c[1].trim()};const t=e.match(/TypeError:\s*(.+?)(?:\r?\n|$)/i);return{noDb:n,error:t?t[1].trim():""}}function Qt(e,n=0){if(!e||typeof e!="object")return null;const c=e.id||"";return c?{key:c,id:c,category:String(e.category||""),pattern:String(e.pattern||""),examples:Y(e.examples,[]),confidence:j(e.confidence,0),sourceFiles:Y(e.sourceFiles??e.source_files,[]),createdAt:e.createdAt??e.created_at??null,_idx:n}:null}function kt(e){const n=V(e);return Array.isArray(n)?n.map(Qt).filter(Boolean):[]}const Zt={translations:{total:0,byIntent:{},byStatus:{draft:0,complete:0,refined:0},avgCompleteness:0},conventions:{total:0,byCategory:{}}};function xt(e){const n=JSON.parse(JSON.stringify(Zt));for(const t of Ct)n.translations.byIntent[t]=0;for(const t of Tt)n.conventions.byCategory[t]=0;const c=V(e);if(!c||typeof c!="object"||Array.isArray(c))return n;if(c.translations&&typeof c.translations=="object"){if(n.translations.total=j(c.translations.total,0),n.translations.avgCompleteness=j(c.translations.avgCompleteness??c.translations.avg_completeness,0),c.translations.byIntent&&typeof c.translations.byIntent=="object")for(const[t,z]of Object.entries(c.translations.byIntent))typeof z=="number"&&Number.isFinite(z)&&(n.translations.byIntent[t]=z);if(c.translations.byStatus&&typeof c.translations.byStatus=="object")for(const t of Object.keys(n.translations.byStatus))n.translations.byStatus[t]=j(c.translations.byStatus[t],0)}if(c.conventions&&typeof c.conventions=="object"&&(n.conventions.total=j(c.conventions.total,0),c.conventions.byCategory&&typeof c.conventions.byCategory=="object"))for(const[t,z]of Object.entries(c.conventions.byCategory))typeof z=="number"&&Number.isFinite(z)&&(n.conventions.byCategory[t]=z);return n}function Ht(e){if(e==null||e==="")return"—";const n=typeof e=="number"?new Date(e):new Date(String(e));return isNaN(n.getTime())?String(e):n.toLocaleString("zh-CN",{hour12:!1})}const Xt={__name:"NLProgramming",setup(e,{expose:n}){n();const c=pt(),{t}=ft(),z=_(!1),X=_(!1),F=_(!1),E=_(!1),G=_([]),P=_([]),K=_({translations:{total:0,byIntent:{},byStatus:{draft:0,complete:0,refined:0},avgCompleteness:0},conventions:{total:0,byCategory:{}}}),I=_("translations"),A=_(""),N=_(""),Q=_(""),C=_(!1),O=_(!1),M=_(!1),Z=_(!1),H=ot({text:""}),w=ot({text:"",intent:null}),x=ot({category:"naming",pattern:"",examples:"",confidence:.8}),J=_(null),L=_(null),T=_(null),D=_({noDb:!1,error:""}),B=_(null),$=W(()=>[{title:t("nlprog.translationCols.inputText"),key:"inputText"},{title:t("nlprog.translationCols.intent"),key:"intent",width:"140px"},{title:t("nlprog.translationCols.completeness"),key:"completeness",width:"160px"},{title:t("nlprog.translationCols.status"),key:"status",width:"100px"},{title:t("nlprog.translationCols.updatedAt"),key:"updatedAt",width:"160px"},{title:t("nlprog.translationCols.action"),key:"action",width:"210px"}]),tt=W(()=>[{title:t("nlprog.conventionCols.category"),key:"category",width:"120px"},{title:t("nlprog.conventionCols.pattern"),key:"pattern"},{title:t("nlprog.conventionCols.examples"),key:"examples",width:"220px"},{title:t("nlprog.conventionCols.confidence"),key:"confidence",width:"90px"},{title:t("nlprog.conventionCols.createdAt"),key:"createdAt",width:"160px"},{title:t("nlprog.conventionCols.action"),key:"action",width:"90px"}]),at=W(()=>K.value.translations.avgCompleteness*100),lt=W(()=>{let r=G.value;return A.value&&(r=r.filter(s=>s.intent===A.value)),N.value&&(r=r.filter(s=>s.status===N.value)),r}),rt=W(()=>Q.value?P.value.filter(r=>r.category===Q.value):P.value);function U(r){const s=`nlprog.intentLabels.${r}`,g=t(s);return g===s?r:g}function st(r){return{create_component:"blue",add_feature:"green",fix_bug:"red",refactor:"purple",add_api:"cyan",add_test:"orange",update_style:"magenta",configure:"gold",general:"default"}[r]||"default"}function l(r){const s=`nlprog.statusLabels.${r}`,g=t(s);return g===s?r:g}function f(r){return{draft:"default",complete:"green",refined:"cyan"}[r]||"default"}function h(r){const s=`nlprog.categoryLabels.${r}`,g=t(s);return g===s?r:g}function ht(r){return{naming:"blue",architecture:"purple",testing:"cyan",style:"magenta",imports:"orange",components:"green"}[r]||"default"}function St(r){return r>=.7?"#52c41a":r>=.4?"#faad14":"#ff4d4f"}function zt(r,s){return r?r.length>s?r.slice(0,s)+"...":r:""}function At(r){if(r==null)return"—";if(typeof r=="string")return r;try{return JSON.stringify(r,null,2)}catch{return String(r)}}function Ft({key:r}){r==="analyze"?(J.value=null,L.value=null,T.value=null,C.value=!0):r==="translate"?(D.value={noDb:!1,error:""},O.value=!0):r==="convention"&&(M.value=!0)}async function q(){z.value=!0;try{const[r,s,g]=await Promise.all([c.execute("nlprog list --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("nlprog conventions --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("nlprog stats --json",8e3).catch(()=>({output:""}))]);G.value=vt(r.output),P.value=kt(s.output),K.value=xt(g.output)}catch(r){v.error(t("nlprog.msg.loadFailed")+": "+(r?.message||r))}finally{z.value=!1}}async function Ot(){const r=H.text.trim();if(!r){v.warning(t("nlprog.msg.textEmpty"));return}X.value=!0,J.value=null,L.value=null,T.value=null;try{const s=r.replace(/"/g,'\\"'),[g,et,nt]=await Promise.all([c.execute(`nlprog classify "${s}" --json`,8e3).catch(()=>({output:""})),c.execute(`nlprog extract "${s}" --json`,8e3).catch(()=>({output:""})),c.execute(`nlprog detect-stack "${s}" --json`,8e3).catch(()=>({output:""}))]);J.value=mt(g.output),L.value=gt(et.output),T.value=yt(nt.output),!J.value&&!L.value&&!T.value&&v.error(t("nlprog.msg.analyzeFailed"))}catch(s){v.error(t("nlprog.msg.analyzeFailed")+": "+(s?.message||s))}finally{X.value=!1}}async function Rt(){const r=w.text.trim();if(!r){v.warning(t("nlprog.msg.translateTextEmpty"));return}F.value=!0,D.value={noDb:!1,error:""};try{const s=[`nlprog translate "${r.replace(/"/g,'\\"')}"`];w.intent&&s.push(`--intent ${w.intent}`),s.push("--json");const{output:g}=await c.execute(s.join(" "),12e3),et=_t(g);if(et.noDb){D.value=et;return}const nt=bt(g);if(!nt){v.error(t("nlprog.msg.translateFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.translateSuccess",{pct:(nt.completeness*100).toFixed(0)})),O.value=!1,it(),await q()}catch(s){v.error(t("nlprog.msg.translateFailed")+": "+(s?.message||s))}finally{F.value=!1}}async function Nt(r,s){if(s!==r.status)try{const{output:g}=await c.execute(`nlprog status ${r.id} ${s} --json`,8e3);if(/error|invalid/i.test(g)&&!/"updated"/.test(g)){v.error(t("nlprog.msg.transitionFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.transitionSuccess",{label:l(s)})),await q()}catch(g){v.error(t("nlprog.msg.transitionFailed")+": "+(g?.message||g))}}async function wt(r){try{const{output:s}=await c.execute(`nlprog remove ${r.id} --json`,8e3);if(/error/i.test(s)&&!/"removed"/.test(s)){v.error(t("nlprog.msg.deleteFailed")+": "+s.slice(0,120));return}v.success(t("nlprog.msg.deleteSuccess")),await q()}catch(s){v.error(t("nlprog.msg.deleteFailed")+": "+(s?.message||s))}}function Lt(r){B.value=r,Z.value=!0}async function jt(){const r=x.pattern.trim();if(!r){v.warning(t("nlprog.msg.patternEmpty"));return}if(x.examples.trim())try{JSON.parse(x.examples)}catch{v.warning(t("nlprog.msg.examplesBadJson"));return}E.value=!0;try{const s=[`nlprog convention-add --category ${x.category}`];s.push(`--pattern "${r.replace(/"/g,'\\"')}"`),x.examples.trim()&&s.push(`--examples '${x.examples.trim().replace(/'/g,"'\\''")}'`),x.confidence!=null&&s.push(`--confidence ${x.confidence}`),s.push("--json");const{output:g}=await c.execute(s.join(" "),1e4);if(/error|invalid|失败/i.test(g)&&!/"added"/.test(g)){v.error(t("nlprog.msg.addFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.addSuccess")),M.value=!1,ct(),I.value="conventions",await q()}catch(s){v.error(t("nlprog.msg.addFailed")+": "+(s?.message||s))}finally{E.value=!1}}async function Et(r){try{const{output:s}=await c.execute(`nlprog convention-remove ${r.id} --json`,8e3);if(/error/i.test(s)&&!/"removed"/.test(s)){v.error(t("nlprog.msg.deleteFailed")+": "+s.slice(0,120));return}v.success(t("nlprog.msg.deleteSuccess")),await q()}catch(s){v.error(t("nlprog.msg.deleteFailed")+": "+(s?.message||s))}}function it(){w.text="",w.intent=null}function ct(){x.category="naming",x.pattern="",x.examples="",x.confidence=.8}ut(q);const dt={ws:c,t,loading:z,analyzing:X,translating:F,adding:E,translations:G,conventions:P,stats:K,activeTab:I,intentFilter:A,statusFilter:N,categoryFilter:Q,showAnalyzeModal:C,showTranslateModal:O,showConventionModal:M,showDetailsModal:Z,analyzeForm:H,translateForm:w,conventionForm:x,classifyResult:J,extractResult:L,stackResult:T,translateError:D,currentTranslation:B,translationColumns:$,conventionColumns:tt,avgCompletenessPct:at,filteredTranslations:lt,filteredConventions:rt,intentLabel:U,intentColor:st,statusLabel:l,statusColor:f,categoryLabel:h,categoryColor:ht,completenessColor:St,truncate:zt,formatJson:At,handleNewClick:Ft,loadAll:q,runAnalyze:Ot,runTranslate:Rt,transitionStatus:Nt,removeTranslation:wt,showTranslationDetails:Lt,addConvention:jt,removeConvention:Et,resetTranslateForm:it,resetConventionForm:ct,ref:_,computed:W,onMounted:ut,reactive:ot,get ReloadOutlined(){return Kt},get PlusOutlined(){return Gt},get CodeOutlined(){return Vt},get BulbOutlined(){return qt},get FileTextOutlined(){return Bt},get EditOutlined(){return Jt},get CheckCircleOutlined(){return Mt},get RiseOutlined(){return Pt},get message(){return v},get useI18n(){return ft},get useWsStore(){return pt},get parseClassifyResult(){return mt},get parseExtractResult(){return gt},get parseStackResult(){return yt},get parseTranslations(){return vt},get parseTranslateResult(){return bt},get detectTranslateError(){return _t},get parseConventions(){return kt},get parseStats(){return xt},get formatNlprogTime(){return Ht},get INTENTS(){return Ct},get TRANSLATION_STATUSES(){return Wt},get STYLE_CATEGORIES(){return Tt}};return Object.defineProperty(dt,"__isScriptSetup",{enumerable:!1,value:!0}),dt}},$t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},te={class:"page-title"},ee={class:"page-sub"},ne={class:"filter-bar"},oe={key:0,style:{color:"var(--text-primary)"}},ae={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},le={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},re={class:"filter-bar"},se={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},ie={key:0,style:{color:"var(--text-muted)"}},ce={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},de={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ue={key:0,style:{"margin-bottom":"12px"}},pe={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},fe={style:{color:"var(--text-secondary)","font-size":"12px"}},me={key:1,style:{"margin-bottom":"12px"}},ge={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},ye={key:0,style:{color:"var(--text-muted)"}},ve={key:2},be={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},_e={key:0,style:{color:"var(--text-muted)"}},ke={key:0,style:{"padding-top":"8px"}},xe={style:{"white-space":"pre-wrap",color:"var(--text-primary)"}},Ce={style:{"margin-top":"16px"}},Te={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},he={class:"json-block"},Se={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},ze={class:"json-block"},Ae={key:0},Fe={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},Oe={class:"json-block"};function Re(e,n,c,t,z,X){const F=m("a-button"),E=m("a-menu-item"),G=m("a-menu"),P=m("a-dropdown"),K=m("a-space"),I=m("a-statistic"),A=m("a-card"),N=m("a-col"),Q=m("a-row"),C=m("a-tag"),O=m("a-radio-button"),M=m("a-radio-group"),Z=m("a-progress"),H=m("a-popconfirm"),w=m("a-table"),x=m("a-tab-pane"),J=m("a-tabs"),L=m("a-textarea"),T=m("a-form-item"),D=m("a-form"),B=m("a-modal"),$=m("a-select-option"),tt=m("a-select"),at=m("a-alert"),lt=m("a-input"),rt=m("a-input-number"),U=m("a-descriptions-item"),st=m("a-descriptions");return d(),y("div",null,[b("div",$t,[b("div",null,[b("h2",te,i(e.$t("nlprog.title")),1),b("p",ee,i(e.$t("nlprog.subtitle")),1)]),a(K,null,{default:o(()=>[a(F,{loading:t.loading,onClick:t.loadAll},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[u(" "+i(e.$t("nlprog.refresh")),1)]),_:1},8,["loading"]),a(P,{trigger:["click"]},{overlay:o(()=>[a(G,{onClick:t.handleNewClick},{default:o(()=>[a(E,{key:"analyze"},{default:o(()=>[a(t.BulbOutlined),u(" "+i(e.$t("nlprog.actions.analyze")),1)]),_:1}),a(E,{key:"translate"},{default:o(()=>[a(t.CodeOutlined),u(" "+i(e.$t("nlprog.actions.translate")),1)]),_:1}),a(E,{key:"convention"},{default:o(()=>[a(t.FileTextOutlined),u(" "+i(e.$t("nlprog.actions.convention")),1)]),_:1})]),_:1})]),default:o(()=>[a(F,{type:"primary"},{icon:o(()=>[a(t.PlusOutlined)]),default:o(()=>[u(" "+i(e.$t("nlprog.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),p(" Stat cards "),a(Q,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.translations"),value:t.stats.translations.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(t.CodeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.avgCompleteness"),value:t.avgCompletenessPct,precision:1,suffix:"%","value-style":{color:t.stats.translations.avgCompleteness>=.7?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.RiseOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.drafts"),value:t.stats.translations.byStatus.draft,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.EditOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.completed"),value:t.stats.translations.byStatus.complete,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(t.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:24,sm:8,lg:4},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.conventions"),value:t.stats.conventions.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(t.FileTextOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),p(" Intent breakdown "),t.stats.translations.total>0?(d(),k(A,{key:0,title:e.$t("nlprog.intentCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:o(()=>[a(K,{size:[12,8],wrap:""},{default:o(()=>[(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k(C,{key:l,color:t.intentColor(l)},{default:o(()=>[u(i(t.intentLabel(l))+": "+i(t.stats.translations.byIntent[l]||0),1)]),_:2},1032,["color"]))),128))]),_:1})]),_:1},8,["title"])):p("v-if",!0),p(" Tabs "),a(J,{activeKey:t.activeTab,"onUpdate:activeKey":n[3]||(n[3]=l=>t.activeTab=l),class:"nlprog-tabs"},{default:o(()=>[p(" ── Translations tab ──────────────────────────────────────── "),a(x,{key:"translations",tab:e.$t("nlprog.tabs.translations")},{default:o(()=>[b("div",ne,[a(M,{value:t.intentFilter,"onUpdate:value":n[0]||(n[0]=l=>t.intentFilter=l),size:"small"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allIntents")),1)]),_:1}),(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.intentLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(M,{value:t.statusFilter,"onUpdate:value":n[1]||(n[1]=l=>t.statusFilter=l),size:"small","button-style":"solid"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allStatuses")),1)]),_:1}),(d(!0),y(S,null,R(t.TRANSLATION_STATUSES,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.statusLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(w,{columns:t.translationColumns,"data-source":t.filteredTranslations,pagination:{pageSize:20,showTotal:l=>e.$t("nlprog.table.totalSuffix",{n:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:l,record:f})=>[l.key==="inputText"?(d(),y("span",oe,i(t.truncate(f.inputText,80)),1)):p("v-if",!0),l.key==="intent"?(d(),k(C,{key:1,color:t.intentColor(f.intent),style:{"font-size":"11px"}},{default:o(()=>[u(i(t.intentLabel(f.intent)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="completeness"?(d(),k(Z,{key:2,percent:Math.round(f.completenessScore*100),size:"small","stroke-color":t.completenessColor(f.completenessScore),format:()=>(f.completenessScore*100).toFixed(0)+"%"},null,8,["percent","stroke-color","format"])):p("v-if",!0),l.key==="status"?(d(),k(C,{key:3,color:t.statusColor(f.status)},{default:o(()=>[u(i(t.statusLabel(f.status)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="updatedAt"?(d(),y("span",ae,i(t.formatNlprogTime(f.updatedAt)),1)):p("v-if",!0),l.key==="action"?(d(),y(S,{key:5},[a(F,{size:"small",type:"link",onClick:h=>t.showTranslationDetails(f)},{default:o(()=>[u(i(e.$t("nlprog.table.actionDetails")),1)]),_:1},8,["onClick"]),a(P,{trigger:["click"]},{overlay:o(()=>[a(G,{onClick:h=>t.transitionStatus(f,h.key)},{default:o(()=>[(d(!0),y(S,null,R(t.TRANSLATION_STATUSES,h=>(d(),k(E,{key:h,disabled:h===f.status},{default:o(()=>[u(i(t.statusLabel(h)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:o(()=>[a(F,{size:"small",type:"link"},{default:o(()=>[u(i(e.$t("nlprog.table.actionStatusDropdown")),1)]),_:1})]),_:2},1024),a(H,{title:e.$t("nlprog.deleteTranslationConfirm.title"),"ok-text":e.$t("nlprog.deleteTranslationConfirm.ok"),"cancel-text":e.$t("nlprog.deleteTranslationConfirm.cancel"),onConfirm:h=>t.removeTranslation(f)},{default:o(()=>[a(F,{size:"small",type:"link",danger:""},{default:o(()=>[u(i(e.$t("nlprog.deleteTranslationConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):p("v-if",!0)]),emptyText:o(()=>[b("div",le,[a(t.CodeOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),u(" "+i(t.intentFilter||t.statusFilter?e.$t("nlprog.table.emptyTranslationsFiltered"):e.$t("nlprog.table.emptyTranslations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Conventions tab ──────────────────────────────────────── "),a(x,{key:"conventions",tab:e.$t("nlprog.tabs.conventions")},{default:o(()=>[b("div",re,[a(M,{value:t.categoryFilter,"onUpdate:value":n[2]||(n[2]=l=>t.categoryFilter=l),size:"small","button-style":"solid"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allCategories")),1)]),_:1}),(d(!0),y(S,null,R(t.STYLE_CATEGORIES,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.categoryLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(w,{columns:t.conventionColumns,"data-source":t.filteredConventions,pagination:{pageSize:20,showTotal:l=>e.$t("nlprog.table.totalSuffix",{n:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:l,record:f})=>[l.key==="category"?(d(),k(C,{key:0,color:t.categoryColor(f.category)},{default:o(()=>[u(i(t.categoryLabel(f.category)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="pattern"?(d(),y("span",se,i(f.pattern),1)):p("v-if",!0),l.key==="examples"?(d(),y(S,{key:2},[(d(!0),y(S,null,R(Array.isArray(f.examples)?f.examples.slice(0,3):[],h=>(d(),k(C,{key:h,color:"default",style:{"font-size":"10px","font-family":"monospace",margin:"1px"}},{default:o(()=>[u(i(h),1)]),_:2},1024))),128)),!Array.isArray(f.examples)||f.examples.length===0?(d(),y("span",ie,"—")):p("v-if",!0)],64)):p("v-if",!0),l.key==="confidence"?(d(),y("span",{key:3,style:It({color:t.completenessColor(f.confidence),fontWeight:500})},i((f.confidence*100).toFixed(0))+"% ",5)):p("v-if",!0),l.key==="createdAt"?(d(),y("span",ce,i(t.formatNlprogTime(f.createdAt)),1)):p("v-if",!0),l.key==="action"?(d(),k(H,{key:5,title:e.$t("nlprog.deleteConventionConfirm.title"),"ok-text":e.$t("nlprog.deleteConventionConfirm.ok"),"cancel-text":e.$t("nlprog.deleteConventionConfirm.cancel"),onConfirm:h=>t.removeConvention(f)},{default:o(()=>[a(F,{size:"small",type:"link",danger:""},{default:o(()=>[u(i(e.$t("nlprog.deleteConventionConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):p("v-if",!0)]),emptyText:o(()=>[b("div",de,[a(t.FileTextOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),u(" "+i(e.$t("nlprog.table.emptyConventions")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),p(" ── Analyze modal ────────────────────────────────────────── "),a(B,{open:t.showAnalyzeModal,"onUpdate:open":n[5]||(n[5]=l=>t.showAnalyzeModal=l),title:e.$t("nlprog.analyze_modal.title"),"confirm-loading":t.analyzing,width:600,"ok-text":e.$t("nlprog.analyze_modal.ok"),"cancel-text":e.$t("nlprog.analyze_modal.cancel"),onOk:t.runAnalyze},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.analyze_modal.textLabel"),required:""},{default:o(()=>[a(L,{value:t.analyzeForm.text,"onUpdate:value":n[4]||(n[4]=l=>t.analyzeForm.text=l),placeholder:e.$t("nlprog.analyze_modal.textPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.classifyResult||t.extractResult||t.stackResult?(d(),k(A,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[t.classifyResult?(d(),y("div",ue,[b("div",pe,i(e.$t("nlprog.analyze_modal.intent")),1),a(C,{color:t.intentColor(t.classifyResult.intent),style:{"margin-right":"6px"}},{default:o(()=>[u(i(t.intentLabel(t.classifyResult.intent)),1)]),_:1},8,["color"]),b("span",fe,i(e.$t("nlprog.analyze_modal.confidenceLine",{pct:(t.classifyResult.confidence*100).toFixed(0)})),1)])):p("v-if",!0),t.extractResult?(d(),y("div",me,[b("div",ge,i(e.$t("nlprog.analyze_modal.entities",{n:t.extractResult.count})),1),t.extractResult.entities.length?p("v-if",!0):(d(),y("span",ye,i(e.$t("nlprog.analyze_modal.notDetected")),1)),(d(!0),y(S,null,R(t.extractResult.entities,(l,f)=>(d(),k(C,{key:f,color:"purple",style:{"font-family":"monospace","font-size":"11px",margin:"1px"}},{default:o(()=>[u(" ["+i(l.type)+"] "+i(l.value),1)]),_:2},1024))),128))])):p("v-if",!0),t.stackResult?(d(),y("div",ve,[b("div",be,i(e.$t("nlprog.analyze_modal.stack")),1),t.stackResult.detected.length?(d(),y(S,{key:1},[a(C,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[u(i(e.$t("nlprog.analyze_modal.stackPrimary",{name:t.stackResult.primary})),1)]),_:1}),(d(!0),y(S,null,R(t.stackResult.detected.filter(l=>l!==t.stackResult.primary),l=>(d(),k(C,{key:l,color:"default",style:{"font-family":"monospace","font-size":"11px"}},{default:o(()=>[u(i(l),1)]),_:2},1024))),128))],64)):(d(),y("span",_e,i(e.$t("nlprog.analyze_modal.notDetected")),1))])):p("v-if",!0)]),_:1})):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Translate modal ──────────────────────────────────────── "),a(B,{open:t.showTranslateModal,"onUpdate:open":n[8]||(n[8]=l=>t.showTranslateModal=l),title:e.$t("nlprog.translate_modal.title"),"confirm-loading":t.translating,width:540,"ok-text":e.$t("nlprog.translate_modal.ok"),"cancel-text":e.$t("nlprog.translate_modal.cancel"),onOk:t.runTranslate,onCancel:t.resetTranslateForm},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.translate_modal.textLabel"),required:""},{default:o(()=>[a(L,{value:t.translateForm.text,"onUpdate:value":n[6]||(n[6]=l=>t.translateForm.text=l),placeholder:e.$t("nlprog.translate_modal.textPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.translate_modal.intentLabel")},{default:o(()=>[a(tt,{value:t.translateForm.intent,"onUpdate:value":n[7]||(n[7]=l=>t.translateForm.intent=l),"allow-clear":"",placeholder:e.$t("nlprog.translate_modal.intentPlaceholder")},{default:o(()=>[(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k($,{key:l,value:l},{default:o(()=>[u(i(t.intentLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.translateError.noDb?(d(),k(at,{key:0,type:"warning","show-icon":"",message:e.$t("nlprog.translate_modal.noDbMessage"),description:e.$t("nlprog.translate_modal.noDbDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Add convention modal ─────────────────────────────────── "),a(B,{open:t.showConventionModal,"onUpdate:open":n[13]||(n[13]=l=>t.showConventionModal=l),title:e.$t("nlprog.convention_modal.title"),"confirm-loading":t.adding,width:540,"ok-text":e.$t("nlprog.convention_modal.ok"),"cancel-text":e.$t("nlprog.convention_modal.cancel"),onOk:t.addConvention,onCancel:t.resetConventionForm},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.convention_modal.categoryLabel"),required:""},{default:o(()=>[a(tt,{value:t.conventionForm.category,"onUpdate:value":n[9]||(n[9]=l=>t.conventionForm.category=l)},{default:o(()=>[(d(!0),y(S,null,R(t.STYLE_CATEGORIES,l=>(d(),k($,{key:l,value:l},{default:o(()=>[u(i(t.categoryLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.patternLabel"),required:""},{default:o(()=>[a(lt,{value:t.conventionForm.pattern,"onUpdate:value":n[10]||(n[10]=l=>t.conventionForm.pattern=l),placeholder:e.$t("nlprog.convention_modal.patternPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.examplesLabel")},{default:o(()=>[a(L,{value:t.conventionForm.examples,"onUpdate:value":n[11]||(n[11]=l=>t.conventionForm.examples=l),placeholder:e.$t("nlprog.convention_modal.examplesPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.confidenceLabel")},{default:o(()=>[a(rt,{value:t.conventionForm.confidence,"onUpdate:value":n[12]||(n[12]=l=>t.conventionForm.confidence=l),min:0,max:1,step:.05,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Translation details modal ────────────────────────────── "),a(B,{open:t.showDetailsModal,"onUpdate:open":n[14]||(n[14]=l=>t.showDetailsModal=l),title:e.$t("nlprog.details.title",{id:t.currentTranslation?.id?.slice(0,8)||""}),width:720,footer:null},{default:o(()=>[t.currentTranslation?(d(),y("div",ke,[a(st,{column:2,size:"small",bordered:""},{default:o(()=>[a(U,{label:e.$t("nlprog.details.intent")},{default:o(()=>[a(C,{color:t.intentColor(t.currentTranslation.intent)},{default:o(()=>[u(i(t.intentLabel(t.currentTranslation.intent)),1)]),_:1},8,["color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.status")},{default:o(()=>[a(C,{color:t.statusColor(t.currentTranslation.status)},{default:o(()=>[u(i(t.statusLabel(t.currentTranslation.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.completeness"),span:2},{default:o(()=>[a(Z,{percent:Math.round(t.currentTranslation.completenessScore*100),"stroke-color":t.completenessColor(t.currentTranslation.completenessScore),size:"small"},null,8,["percent","stroke-color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.createdAt")},{default:o(()=>[u(i(t.formatNlprogTime(t.currentTranslation.createdAt)),1)]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.updatedAt")},{default:o(()=>[u(i(t.formatNlprogTime(t.currentTranslation.updatedAt)),1)]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.inputText"),span:2},{default:o(()=>[b("span",xe,i(t.currentTranslation.inputText),1)]),_:1},8,["label"])]),_:1}),b("div",Ce,[b("h4",Te,i(e.$t("nlprog.details.entities")),1),b("pre",he,i(t.formatJson(t.currentTranslation.entities)),1)]),b("div",null,[b("h4",Se,i(e.$t("nlprog.details.techStack")),1),b("pre",ze,i(t.formatJson(t.currentTranslation.techStack)),1)]),t.currentTranslation.spec?(d(),y("div",Ae,[b("h4",Fe,i(e.$t("nlprog.details.spec")),1),b("pre",Oe,i(t.formatJson(t.currentTranslation.spec)),1)])):p("v-if",!0)])):p("v-if",!0)]),_:1},8,["open","title"])])}const Ee=Dt(Xt,[["render",Re],["__scopeId","data-v-4c4216b9"],["__file","/tmp/cc-web-panel-88syqW/repo/packages/web-panel/src/views/NLProgramming.vue"]]);export{Ee as default};
|
|
1
|
+
import{I as m,J as y,U as b,R as i,c as a,K as o,V as p,S as k,o as ut,a as ot,b as Y,r as _,P as d,Q as u,F as S,Z as R,$ as It}from"./vendor-BvqAck49.js";import{_ as Dt,u as pt,b as ft,d as v}from"./index-BwGnc020.js";import{s as Ut}from"./community-parser-CO25nZFt.js";import{a$ as Pt,f as Mt,ai as Jt,a4 as Bt,o as Gt,Q as Vt,as as qt,R as Kt}from"./icons-DP3uiYxy.js";function V(e){const n=Ut(e);if(!n)return null;try{return JSON.parse(n)}catch{}const c=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!c)return null;try{return JSON.parse(c[0])}catch{return null}}const Ct=Object.freeze(["create_component","add_feature","fix_bug","refactor","add_api","add_test","update_style","configure","general"]),Yt=Object.freeze(["draft","complete","refined"]),Tt=Object.freeze(["naming","architecture","testing","style","imports","components"]);function j(e,n=0){return typeof e=="number"&&Number.isFinite(e)?e:n}function W(e,n){if(e==null)return n;if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}function mt(e){const n=V(e);return!n||typeof n!="object"||Array.isArray(n)?null:{intent:String(n.intent||"general"),confidence:j(n.confidence,0)}}function gt(e){const n=V(e);if(!n||typeof n!="object"||Array.isArray(n))return null;const c=Array.isArray(n.entities)?n.entities.map(t=>t&&typeof t=="object"?{type:String(t.type||""),value:String(t.value||"")}:null).filter(Boolean):[];return{entities:c,count:j(n.count,c.length)}}function yt(e){const n=V(e);if(!n||typeof n!="object"||Array.isArray(n))return null;const c=Array.isArray(n.detected)?n.detected.filter(t=>typeof t=="string"):[];return{detected:c,primary:n.primary?String(n.primary):c[0]||null}}function Wt(e,n=0){if(!e||typeof e!="object")return null;const c=e.id||"";return c?{key:c,id:c,inputText:e.inputText??e.input_text??"",intent:String(e.intent||"general"),entities:W(e.entities,[]),techStack:W(e.techStack??e.tech_stack,[]),spec:W(e.spec,null),completenessScore:j(e.completenessScore??e.completeness_score,0),ambiguities:W(e.ambiguities,[]),status:String(e.status||"draft").toLowerCase(),createdAt:e.createdAt??e.created_at??null,updatedAt:e.updatedAt??e.updated_at??null,_idx:n}:null}function vt(e){const n=V(e);return Array.isArray(n)?n.map(Wt).filter(Boolean):[]}function bt(e){const n=V(e);return!n||typeof n!="object"||Array.isArray(n)||n.translationId===void 0?null:{translated:!!n.translated,translationId:n.translationId,intent:String(n.intent||""),completeness:j(n.completeness,0)}}function _t(e){if(!e)return{noDb:!1,error:""};const n=/No ChainlessChain project database/i.test(e)||/Cannot read properties of undefined \(reading ['"]prepare['"]\)/i.test(e)||/TypeError.*prepare/i.test(e),c=e.match(/Error:\s*(No ChainlessChain project database[^\r\n]*)/i);if(c)return{noDb:!0,error:c[1].trim()};const t=e.match(/TypeError:\s*(.+?)(?:\r?\n|$)/i);return{noDb:n,error:t?t[1].trim():""}}function Qt(e,n=0){if(!e||typeof e!="object")return null;const c=e.id||"";return c?{key:c,id:c,category:String(e.category||""),pattern:String(e.pattern||""),examples:W(e.examples,[]),confidence:j(e.confidence,0),sourceFiles:W(e.sourceFiles??e.source_files,[]),createdAt:e.createdAt??e.created_at??null,_idx:n}:null}function kt(e){const n=V(e);return Array.isArray(n)?n.map(Qt).filter(Boolean):[]}const Xt={translations:{total:0,byIntent:{},byStatus:{draft:0,complete:0,refined:0},avgCompleteness:0},conventions:{total:0,byCategory:{}}};function xt(e){const n=JSON.parse(JSON.stringify(Xt));for(const t of Ct)n.translations.byIntent[t]=0;for(const t of Tt)n.conventions.byCategory[t]=0;const c=V(e);if(!c||typeof c!="object"||Array.isArray(c))return n;if(c.translations&&typeof c.translations=="object"){if(n.translations.total=j(c.translations.total,0),n.translations.avgCompleteness=j(c.translations.avgCompleteness??c.translations.avg_completeness,0),c.translations.byIntent&&typeof c.translations.byIntent=="object")for(const[t,z]of Object.entries(c.translations.byIntent))typeof z=="number"&&Number.isFinite(z)&&(n.translations.byIntent[t]=z);if(c.translations.byStatus&&typeof c.translations.byStatus=="object")for(const t of Object.keys(n.translations.byStatus))n.translations.byStatus[t]=j(c.translations.byStatus[t],0)}if(c.conventions&&typeof c.conventions=="object"&&(n.conventions.total=j(c.conventions.total,0),c.conventions.byCategory&&typeof c.conventions.byCategory=="object"))for(const[t,z]of Object.entries(c.conventions.byCategory))typeof z=="number"&&Number.isFinite(z)&&(n.conventions.byCategory[t]=z);return n}function Zt(e){if(e==null||e==="")return"—";const n=typeof e=="number"?new Date(e):new Date(String(e));return isNaN(n.getTime())?String(e):n.toLocaleString("zh-CN",{hour12:!1})}const Ht={__name:"NLProgramming",setup(e,{expose:n}){n();const c=pt(),{t}=ft(),z=_(!1),H=_(!1),F=_(!1),E=_(!1),q=_([]),P=_([]),K=_({translations:{total:0,byIntent:{},byStatus:{draft:0,complete:0,refined:0},avgCompleteness:0},conventions:{total:0,byCategory:{}}}),I=_("translations"),A=_(""),N=_(""),Q=_(""),C=_(!1),O=_(!1),M=_(!1),X=_(!1),Z=ot({text:""}),w=ot({text:"",intent:null}),x=ot({category:"naming",pattern:"",examples:"",confidence:.8}),J=_(null),L=_(null),T=_(null),D=_({noDb:!1,error:""}),B=_(null),$=Y(()=>[{title:t("nlprog.translationCols.inputText"),key:"inputText"},{title:t("nlprog.translationCols.intent"),key:"intent",width:"140px"},{title:t("nlprog.translationCols.completeness"),key:"completeness",width:"160px"},{title:t("nlprog.translationCols.status"),key:"status",width:"100px"},{title:t("nlprog.translationCols.updatedAt"),key:"updatedAt",width:"160px"},{title:t("nlprog.translationCols.action"),key:"action",width:"210px"}]),tt=Y(()=>[{title:t("nlprog.conventionCols.category"),key:"category",width:"120px"},{title:t("nlprog.conventionCols.pattern"),key:"pattern"},{title:t("nlprog.conventionCols.examples"),key:"examples",width:"220px"},{title:t("nlprog.conventionCols.confidence"),key:"confidence",width:"90px"},{title:t("nlprog.conventionCols.createdAt"),key:"createdAt",width:"160px"},{title:t("nlprog.conventionCols.action"),key:"action",width:"90px"}]),at=Y(()=>K.value.translations.avgCompleteness*100),lt=Y(()=>{let r=q.value;return A.value&&(r=r.filter(s=>s.intent===A.value)),N.value&&(r=r.filter(s=>s.status===N.value)),r}),rt=Y(()=>Q.value?P.value.filter(r=>r.category===Q.value):P.value);function U(r){const s=`nlprog.intentLabels.${r}`,g=t(s);return g===s?r:g}function st(r){return{create_component:"blue",add_feature:"green",fix_bug:"red",refactor:"purple",add_api:"cyan",add_test:"orange",update_style:"magenta",configure:"gold",general:"default"}[r]||"default"}function l(r){const s=`nlprog.statusLabels.${r}`,g=t(s);return g===s?r:g}function f(r){return{draft:"default",complete:"green",refined:"cyan"}[r]||"default"}function h(r){const s=`nlprog.categoryLabels.${r}`,g=t(s);return g===s?r:g}function ht(r){return{naming:"blue",architecture:"purple",testing:"cyan",style:"magenta",imports:"orange",components:"green"}[r]||"default"}function St(r){return r>=.7?"#52c41a":r>=.4?"#faad14":"#ff4d4f"}function zt(r,s){return r?r.length>s?r.slice(0,s)+"...":r:""}function At(r){if(r==null)return"—";if(typeof r=="string")return r;try{return JSON.stringify(r,null,2)}catch{return String(r)}}function Ft({key:r}){r==="analyze"?(J.value=null,L.value=null,T.value=null,C.value=!0):r==="translate"?(D.value={noDb:!1,error:""},O.value=!0):r==="convention"&&(M.value=!0)}async function G(){z.value=!0;try{const[r,s,g]=await Promise.all([c.execute("nlprog list --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("nlprog conventions --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("nlprog stats --json",8e3).catch(()=>({output:""}))]);q.value=vt(r.output),P.value=kt(s.output),K.value=xt(g.output)}catch(r){v.error(t("nlprog.msg.loadFailed")+": "+(r?.message||r))}finally{z.value=!1}}async function Ot(){const r=Z.text.trim();if(!r){v.warning(t("nlprog.msg.textEmpty"));return}H.value=!0,J.value=null,L.value=null,T.value=null;try{const s=r.replace(/"/g,'\\"'),[g,et,nt]=await Promise.all([c.execute(`nlprog classify "${s}" --json`,8e3).catch(()=>({output:""})),c.execute(`nlprog extract "${s}" --json`,8e3).catch(()=>({output:""})),c.execute(`nlprog detect-stack "${s}" --json`,8e3).catch(()=>({output:""}))]);J.value=mt(g.output),L.value=gt(et.output),T.value=yt(nt.output),!J.value&&!L.value&&!T.value&&v.error(t("nlprog.msg.analyzeFailed"))}catch(s){v.error(t("nlprog.msg.analyzeFailed")+": "+(s?.message||s))}finally{H.value=!1}}async function Rt(){const r=w.text.trim();if(!r){v.warning(t("nlprog.msg.translateTextEmpty"));return}F.value=!0,D.value={noDb:!1,error:""};try{const s=[`nlprog translate "${r.replace(/"/g,'\\"')}"`];w.intent&&s.push(`--intent ${w.intent}`),s.push("--json");const{output:g}=await c.execute(s.join(" "),12e3),et=_t(g);if(et.noDb){D.value=et;return}const nt=bt(g);if(!nt){v.error(t("nlprog.msg.translateFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.translateSuccess",{pct:(nt.completeness*100).toFixed(0)})),O.value=!1,it(),await G()}catch(s){v.error(t("nlprog.msg.translateFailed")+": "+(s?.message||s))}finally{F.value=!1}}async function Nt(r,s){if(s!==r.status)try{const{output:g}=await c.execute(`nlprog status ${r.id} ${s} --json`,8e3);if(/error|invalid/i.test(g)&&!/"updated"/.test(g)){v.error(t("nlprog.msg.transitionFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.transitionSuccess",{label:l(s)})),await G()}catch(g){v.error(t("nlprog.msg.transitionFailed")+": "+(g?.message||g))}}async function wt(r){try{const{output:s}=await c.execute(`nlprog remove ${r.id} --json`,8e3);if(/error/i.test(s)&&!/"removed"/.test(s)){v.error(t("nlprog.msg.deleteFailed")+": "+s.slice(0,120));return}v.success(t("nlprog.msg.deleteSuccess")),await G()}catch(s){v.error(t("nlprog.msg.deleteFailed")+": "+(s?.message||s))}}function Lt(r){B.value=r,X.value=!0}async function jt(){const r=x.pattern.trim();if(!r){v.warning(t("nlprog.msg.patternEmpty"));return}if(x.examples.trim())try{JSON.parse(x.examples)}catch{v.warning(t("nlprog.msg.examplesBadJson"));return}E.value=!0;try{const s=[`nlprog convention-add --category ${x.category}`];s.push(`--pattern "${r.replace(/"/g,'\\"')}"`),x.examples.trim()&&s.push(`--examples '${x.examples.trim().replace(/'/g,"'\\''")}'`),x.confidence!=null&&s.push(`--confidence ${x.confidence}`),s.push("--json");const{output:g}=await c.execute(s.join(" "),1e4);if(/error|invalid|失败/i.test(g)&&!/"added"/.test(g)){v.error(t("nlprog.msg.addFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.addSuccess")),M.value=!1,ct(),I.value="conventions",await G()}catch(s){v.error(t("nlprog.msg.addFailed")+": "+(s?.message||s))}finally{E.value=!1}}async function Et(r){try{const{output:s}=await c.execute(`nlprog convention-remove ${r.id} --json`,8e3);if(/error/i.test(s)&&!/"removed"/.test(s)){v.error(t("nlprog.msg.deleteFailed")+": "+s.slice(0,120));return}v.success(t("nlprog.msg.deleteSuccess")),await G()}catch(s){v.error(t("nlprog.msg.deleteFailed")+": "+(s?.message||s))}}function it(){w.text="",w.intent=null}function ct(){x.category="naming",x.pattern="",x.examples="",x.confidence=.8}ut(G);const dt={ws:c,t,loading:z,analyzing:H,translating:F,adding:E,translations:q,conventions:P,stats:K,activeTab:I,intentFilter:A,statusFilter:N,categoryFilter:Q,showAnalyzeModal:C,showTranslateModal:O,showConventionModal:M,showDetailsModal:X,analyzeForm:Z,translateForm:w,conventionForm:x,classifyResult:J,extractResult:L,stackResult:T,translateError:D,currentTranslation:B,translationColumns:$,conventionColumns:tt,avgCompletenessPct:at,filteredTranslations:lt,filteredConventions:rt,intentLabel:U,intentColor:st,statusLabel:l,statusColor:f,categoryLabel:h,categoryColor:ht,completenessColor:St,truncate:zt,formatJson:At,handleNewClick:Ft,loadAll:G,runAnalyze:Ot,runTranslate:Rt,transitionStatus:Nt,removeTranslation:wt,showTranslationDetails:Lt,addConvention:jt,removeConvention:Et,resetTranslateForm:it,resetConventionForm:ct,ref:_,computed:Y,onMounted:ut,reactive:ot,get ReloadOutlined(){return Kt},get PlusOutlined(){return qt},get CodeOutlined(){return Vt},get BulbOutlined(){return Gt},get FileTextOutlined(){return Bt},get EditOutlined(){return Jt},get CheckCircleOutlined(){return Mt},get RiseOutlined(){return Pt},get message(){return v},get useI18n(){return ft},get useWsStore(){return pt},get parseClassifyResult(){return mt},get parseExtractResult(){return gt},get parseStackResult(){return yt},get parseTranslations(){return vt},get parseTranslateResult(){return bt},get detectTranslateError(){return _t},get parseConventions(){return kt},get parseStats(){return xt},get formatNlprogTime(){return Zt},get INTENTS(){return Ct},get TRANSLATION_STATUSES(){return Yt},get STYLE_CATEGORIES(){return Tt}};return Object.defineProperty(dt,"__isScriptSetup",{enumerable:!1,value:!0}),dt}},$t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},te={class:"page-title"},ee={class:"page-sub"},ne={class:"filter-bar"},oe={key:0,style:{color:"var(--text-primary)"}},ae={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},le={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},re={class:"filter-bar"},se={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},ie={key:0,style:{color:"var(--text-muted)"}},ce={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},de={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ue={key:0,style:{"margin-bottom":"12px"}},pe={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},fe={style:{color:"var(--text-secondary)","font-size":"12px"}},me={key:1,style:{"margin-bottom":"12px"}},ge={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},ye={key:0,style:{color:"var(--text-muted)"}},ve={key:2},be={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},_e={key:0,style:{color:"var(--text-muted)"}},ke={key:0,style:{"padding-top":"8px"}},xe={style:{"white-space":"pre-wrap",color:"var(--text-primary)"}},Ce={style:{"margin-top":"16px"}},Te={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},he={class:"json-block"},Se={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},ze={class:"json-block"},Ae={key:0},Fe={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},Oe={class:"json-block"};function Re(e,n,c,t,z,H){const F=m("a-button"),E=m("a-menu-item"),q=m("a-menu"),P=m("a-dropdown"),K=m("a-space"),I=m("a-statistic"),A=m("a-card"),N=m("a-col"),Q=m("a-row"),C=m("a-tag"),O=m("a-radio-button"),M=m("a-radio-group"),X=m("a-progress"),Z=m("a-popconfirm"),w=m("a-table"),x=m("a-tab-pane"),J=m("a-tabs"),L=m("a-textarea"),T=m("a-form-item"),D=m("a-form"),B=m("a-modal"),$=m("a-select-option"),tt=m("a-select"),at=m("a-alert"),lt=m("a-input"),rt=m("a-input-number"),U=m("a-descriptions-item"),st=m("a-descriptions");return d(),y("div",null,[b("div",$t,[b("div",null,[b("h2",te,i(e.$t("nlprog.title")),1),b("p",ee,i(e.$t("nlprog.subtitle")),1)]),a(K,null,{default:o(()=>[a(F,{loading:t.loading,onClick:t.loadAll},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[u(" "+i(e.$t("nlprog.refresh")),1)]),_:1},8,["loading"]),a(P,{trigger:["click"]},{overlay:o(()=>[a(q,{onClick:t.handleNewClick},{default:o(()=>[a(E,{key:"analyze"},{default:o(()=>[a(t.BulbOutlined),u(" "+i(e.$t("nlprog.actions.analyze")),1)]),_:1}),a(E,{key:"translate"},{default:o(()=>[a(t.CodeOutlined),u(" "+i(e.$t("nlprog.actions.translate")),1)]),_:1}),a(E,{key:"convention"},{default:o(()=>[a(t.FileTextOutlined),u(" "+i(e.$t("nlprog.actions.convention")),1)]),_:1})]),_:1})]),default:o(()=>[a(F,{type:"primary"},{icon:o(()=>[a(t.PlusOutlined)]),default:o(()=>[u(" "+i(e.$t("nlprog.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),p(" Stat cards "),a(Q,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.translations"),value:t.stats.translations.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(t.CodeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.avgCompleteness"),value:t.avgCompletenessPct,precision:1,suffix:"%","value-style":{color:t.stats.translations.avgCompleteness>=.7?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.RiseOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.drafts"),value:t.stats.translations.byStatus.draft,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.EditOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.completed"),value:t.stats.translations.byStatus.complete,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(t.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:24,sm:8,lg:4},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.conventions"),value:t.stats.conventions.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(t.FileTextOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),p(" Intent breakdown "),t.stats.translations.total>0?(d(),k(A,{key:0,title:e.$t("nlprog.intentCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:o(()=>[a(K,{size:[12,8],wrap:""},{default:o(()=>[(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k(C,{key:l,color:t.intentColor(l)},{default:o(()=>[u(i(t.intentLabel(l))+": "+i(t.stats.translations.byIntent[l]||0),1)]),_:2},1032,["color"]))),128))]),_:1})]),_:1},8,["title"])):p("v-if",!0),p(" Tabs "),a(J,{activeKey:t.activeTab,"onUpdate:activeKey":n[3]||(n[3]=l=>t.activeTab=l),class:"nlprog-tabs"},{default:o(()=>[p(" ── Translations tab ──────────────────────────────────────── "),a(x,{key:"translations",tab:e.$t("nlprog.tabs.translations")},{default:o(()=>[b("div",ne,[a(M,{value:t.intentFilter,"onUpdate:value":n[0]||(n[0]=l=>t.intentFilter=l),size:"small"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allIntents")),1)]),_:1}),(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.intentLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(M,{value:t.statusFilter,"onUpdate:value":n[1]||(n[1]=l=>t.statusFilter=l),size:"small","button-style":"solid"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allStatuses")),1)]),_:1}),(d(!0),y(S,null,R(t.TRANSLATION_STATUSES,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.statusLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(w,{columns:t.translationColumns,"data-source":t.filteredTranslations,pagination:{pageSize:20,showTotal:l=>e.$t("nlprog.table.totalSuffix",{n:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:l,record:f})=>[l.key==="inputText"?(d(),y("span",oe,i(t.truncate(f.inputText,80)),1)):p("v-if",!0),l.key==="intent"?(d(),k(C,{key:1,color:t.intentColor(f.intent),style:{"font-size":"11px"}},{default:o(()=>[u(i(t.intentLabel(f.intent)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="completeness"?(d(),k(X,{key:2,percent:Math.round(f.completenessScore*100),size:"small","stroke-color":t.completenessColor(f.completenessScore),format:()=>(f.completenessScore*100).toFixed(0)+"%"},null,8,["percent","stroke-color","format"])):p("v-if",!0),l.key==="status"?(d(),k(C,{key:3,color:t.statusColor(f.status)},{default:o(()=>[u(i(t.statusLabel(f.status)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="updatedAt"?(d(),y("span",ae,i(t.formatNlprogTime(f.updatedAt)),1)):p("v-if",!0),l.key==="action"?(d(),y(S,{key:5},[a(F,{size:"small",type:"link",onClick:h=>t.showTranslationDetails(f)},{default:o(()=>[u(i(e.$t("nlprog.table.actionDetails")),1)]),_:1},8,["onClick"]),a(P,{trigger:["click"]},{overlay:o(()=>[a(q,{onClick:h=>t.transitionStatus(f,h.key)},{default:o(()=>[(d(!0),y(S,null,R(t.TRANSLATION_STATUSES,h=>(d(),k(E,{key:h,disabled:h===f.status},{default:o(()=>[u(i(t.statusLabel(h)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:o(()=>[a(F,{size:"small",type:"link"},{default:o(()=>[u(i(e.$t("nlprog.table.actionStatusDropdown")),1)]),_:1})]),_:2},1024),a(Z,{title:e.$t("nlprog.deleteTranslationConfirm.title"),"ok-text":e.$t("nlprog.deleteTranslationConfirm.ok"),"cancel-text":e.$t("nlprog.deleteTranslationConfirm.cancel"),onConfirm:h=>t.removeTranslation(f)},{default:o(()=>[a(F,{size:"small",type:"link",danger:""},{default:o(()=>[u(i(e.$t("nlprog.deleteTranslationConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):p("v-if",!0)]),emptyText:o(()=>[b("div",le,[a(t.CodeOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),u(" "+i(t.intentFilter||t.statusFilter?e.$t("nlprog.table.emptyTranslationsFiltered"):e.$t("nlprog.table.emptyTranslations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Conventions tab ──────────────────────────────────────── "),a(x,{key:"conventions",tab:e.$t("nlprog.tabs.conventions")},{default:o(()=>[b("div",re,[a(M,{value:t.categoryFilter,"onUpdate:value":n[2]||(n[2]=l=>t.categoryFilter=l),size:"small","button-style":"solid"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allCategories")),1)]),_:1}),(d(!0),y(S,null,R(t.STYLE_CATEGORIES,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.categoryLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(w,{columns:t.conventionColumns,"data-source":t.filteredConventions,pagination:{pageSize:20,showTotal:l=>e.$t("nlprog.table.totalSuffix",{n:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:l,record:f})=>[l.key==="category"?(d(),k(C,{key:0,color:t.categoryColor(f.category)},{default:o(()=>[u(i(t.categoryLabel(f.category)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="pattern"?(d(),y("span",se,i(f.pattern),1)):p("v-if",!0),l.key==="examples"?(d(),y(S,{key:2},[(d(!0),y(S,null,R(Array.isArray(f.examples)?f.examples.slice(0,3):[],h=>(d(),k(C,{key:h,color:"default",style:{"font-size":"10px","font-family":"monospace",margin:"1px"}},{default:o(()=>[u(i(h),1)]),_:2},1024))),128)),!Array.isArray(f.examples)||f.examples.length===0?(d(),y("span",ie,"—")):p("v-if",!0)],64)):p("v-if",!0),l.key==="confidence"?(d(),y("span",{key:3,style:It({color:t.completenessColor(f.confidence),fontWeight:500})},i((f.confidence*100).toFixed(0))+"% ",5)):p("v-if",!0),l.key==="createdAt"?(d(),y("span",ce,i(t.formatNlprogTime(f.createdAt)),1)):p("v-if",!0),l.key==="action"?(d(),k(Z,{key:5,title:e.$t("nlprog.deleteConventionConfirm.title"),"ok-text":e.$t("nlprog.deleteConventionConfirm.ok"),"cancel-text":e.$t("nlprog.deleteConventionConfirm.cancel"),onConfirm:h=>t.removeConvention(f)},{default:o(()=>[a(F,{size:"small",type:"link",danger:""},{default:o(()=>[u(i(e.$t("nlprog.deleteConventionConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):p("v-if",!0)]),emptyText:o(()=>[b("div",de,[a(t.FileTextOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),u(" "+i(e.$t("nlprog.table.emptyConventions")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),p(" ── Analyze modal ────────────────────────────────────────── "),a(B,{open:t.showAnalyzeModal,"onUpdate:open":n[5]||(n[5]=l=>t.showAnalyzeModal=l),title:e.$t("nlprog.analyze_modal.title"),"confirm-loading":t.analyzing,width:600,"ok-text":e.$t("nlprog.analyze_modal.ok"),"cancel-text":e.$t("nlprog.analyze_modal.cancel"),onOk:t.runAnalyze},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.analyze_modal.textLabel"),required:""},{default:o(()=>[a(L,{value:t.analyzeForm.text,"onUpdate:value":n[4]||(n[4]=l=>t.analyzeForm.text=l),placeholder:e.$t("nlprog.analyze_modal.textPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.classifyResult||t.extractResult||t.stackResult?(d(),k(A,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[t.classifyResult?(d(),y("div",ue,[b("div",pe,i(e.$t("nlprog.analyze_modal.intent")),1),a(C,{color:t.intentColor(t.classifyResult.intent),style:{"margin-right":"6px"}},{default:o(()=>[u(i(t.intentLabel(t.classifyResult.intent)),1)]),_:1},8,["color"]),b("span",fe,i(e.$t("nlprog.analyze_modal.confidenceLine",{pct:(t.classifyResult.confidence*100).toFixed(0)})),1)])):p("v-if",!0),t.extractResult?(d(),y("div",me,[b("div",ge,i(e.$t("nlprog.analyze_modal.entities",{n:t.extractResult.count})),1),t.extractResult.entities.length?p("v-if",!0):(d(),y("span",ye,i(e.$t("nlprog.analyze_modal.notDetected")),1)),(d(!0),y(S,null,R(t.extractResult.entities,(l,f)=>(d(),k(C,{key:f,color:"purple",style:{"font-family":"monospace","font-size":"11px",margin:"1px"}},{default:o(()=>[u(" ["+i(l.type)+"] "+i(l.value),1)]),_:2},1024))),128))])):p("v-if",!0),t.stackResult?(d(),y("div",ve,[b("div",be,i(e.$t("nlprog.analyze_modal.stack")),1),t.stackResult.detected.length?(d(),y(S,{key:1},[a(C,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[u(i(e.$t("nlprog.analyze_modal.stackPrimary",{name:t.stackResult.primary})),1)]),_:1}),(d(!0),y(S,null,R(t.stackResult.detected.filter(l=>l!==t.stackResult.primary),l=>(d(),k(C,{key:l,color:"default",style:{"font-family":"monospace","font-size":"11px"}},{default:o(()=>[u(i(l),1)]),_:2},1024))),128))],64)):(d(),y("span",_e,i(e.$t("nlprog.analyze_modal.notDetected")),1))])):p("v-if",!0)]),_:1})):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Translate modal ──────────────────────────────────────── "),a(B,{open:t.showTranslateModal,"onUpdate:open":n[8]||(n[8]=l=>t.showTranslateModal=l),title:e.$t("nlprog.translate_modal.title"),"confirm-loading":t.translating,width:540,"ok-text":e.$t("nlprog.translate_modal.ok"),"cancel-text":e.$t("nlprog.translate_modal.cancel"),onOk:t.runTranslate,onCancel:t.resetTranslateForm},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.translate_modal.textLabel"),required:""},{default:o(()=>[a(L,{value:t.translateForm.text,"onUpdate:value":n[6]||(n[6]=l=>t.translateForm.text=l),placeholder:e.$t("nlprog.translate_modal.textPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.translate_modal.intentLabel")},{default:o(()=>[a(tt,{value:t.translateForm.intent,"onUpdate:value":n[7]||(n[7]=l=>t.translateForm.intent=l),"allow-clear":"",placeholder:e.$t("nlprog.translate_modal.intentPlaceholder")},{default:o(()=>[(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k($,{key:l,value:l},{default:o(()=>[u(i(t.intentLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.translateError.noDb?(d(),k(at,{key:0,type:"warning","show-icon":"",message:e.$t("nlprog.translate_modal.noDbMessage"),description:e.$t("nlprog.translate_modal.noDbDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Add convention modal ─────────────────────────────────── "),a(B,{open:t.showConventionModal,"onUpdate:open":n[13]||(n[13]=l=>t.showConventionModal=l),title:e.$t("nlprog.convention_modal.title"),"confirm-loading":t.adding,width:540,"ok-text":e.$t("nlprog.convention_modal.ok"),"cancel-text":e.$t("nlprog.convention_modal.cancel"),onOk:t.addConvention,onCancel:t.resetConventionForm},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.convention_modal.categoryLabel"),required:""},{default:o(()=>[a(tt,{value:t.conventionForm.category,"onUpdate:value":n[9]||(n[9]=l=>t.conventionForm.category=l)},{default:o(()=>[(d(!0),y(S,null,R(t.STYLE_CATEGORIES,l=>(d(),k($,{key:l,value:l},{default:o(()=>[u(i(t.categoryLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.patternLabel"),required:""},{default:o(()=>[a(lt,{value:t.conventionForm.pattern,"onUpdate:value":n[10]||(n[10]=l=>t.conventionForm.pattern=l),placeholder:e.$t("nlprog.convention_modal.patternPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.examplesLabel")},{default:o(()=>[a(L,{value:t.conventionForm.examples,"onUpdate:value":n[11]||(n[11]=l=>t.conventionForm.examples=l),placeholder:e.$t("nlprog.convention_modal.examplesPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.confidenceLabel")},{default:o(()=>[a(rt,{value:t.conventionForm.confidence,"onUpdate:value":n[12]||(n[12]=l=>t.conventionForm.confidence=l),min:0,max:1,step:.05,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Translation details modal ────────────────────────────── "),a(B,{open:t.showDetailsModal,"onUpdate:open":n[14]||(n[14]=l=>t.showDetailsModal=l),title:e.$t("nlprog.details.title",{id:t.currentTranslation?.id?.slice(0,8)||""}),width:720,footer:null},{default:o(()=>[t.currentTranslation?(d(),y("div",ke,[a(st,{column:2,size:"small",bordered:""},{default:o(()=>[a(U,{label:e.$t("nlprog.details.intent")},{default:o(()=>[a(C,{color:t.intentColor(t.currentTranslation.intent)},{default:o(()=>[u(i(t.intentLabel(t.currentTranslation.intent)),1)]),_:1},8,["color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.status")},{default:o(()=>[a(C,{color:t.statusColor(t.currentTranslation.status)},{default:o(()=>[u(i(t.statusLabel(t.currentTranslation.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.completeness"),span:2},{default:o(()=>[a(X,{percent:Math.round(t.currentTranslation.completenessScore*100),"stroke-color":t.completenessColor(t.currentTranslation.completenessScore),size:"small"},null,8,["percent","stroke-color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.createdAt")},{default:o(()=>[u(i(t.formatNlprogTime(t.currentTranslation.createdAt)),1)]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.updatedAt")},{default:o(()=>[u(i(t.formatNlprogTime(t.currentTranslation.updatedAt)),1)]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.inputText"),span:2},{default:o(()=>[b("span",xe,i(t.currentTranslation.inputText),1)]),_:1},8,["label"])]),_:1}),b("div",Ce,[b("h4",Te,i(e.$t("nlprog.details.entities")),1),b("pre",he,i(t.formatJson(t.currentTranslation.entities)),1)]),b("div",null,[b("h4",Se,i(e.$t("nlprog.details.techStack")),1),b("pre",ze,i(t.formatJson(t.currentTranslation.techStack)),1)]),t.currentTranslation.spec?(d(),y("div",Ae,[b("h4",Fe,i(e.$t("nlprog.details.spec")),1),b("pre",Oe,i(t.formatJson(t.currentTranslation.spec)),1)])):p("v-if",!0)])):p("v-if",!0)]),_:1},8,["open","title"])])}const Ee=Dt(Ht,[["render",Re],["__scopeId","data-v-4c4216b9"],["__file","/tmp/cc-web-panel-XbotGX/repo/packages/web-panel/src/views/NLProgramming.vue"]]);export{Ee as default};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{I as f,P as w,S as T,K as a,J as V,c as n,V as x,w as F,b as A,a as J,r as u,U as L,Q as k,R as D,F as te,M as le,o as re,Z as se}from"./vendor-BvqAck49.js";import{u as Z,_ as ae,d as C}from"./index-CM1idCUO.js";import{u as ie}from"./useFs-1aj0rWmC.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aw as me,ax as ue,ay as pe,az as ge,a4 as ve,R as we,as as _e}from"./icons-DP3uiYxy.js";function ye(m){if(m&&m.ok===!1)throw new Error(m.error||"knowledge handler failed");return m?.result??m}function ne(m){return String(m).replace(/(["\\])/g,"\\$1")}function G(){const m=Z();async function t({title:b,content:e,tags:h=[],type:g="note"}={}){if(typeof b!="string"||!b.trim())throw new Error("title is required");if(typeof e!="string")throw new Error("content is required");const r=Array.isArray(h)?h.filter(Boolean):[];if(de().isEmbedded){const i=await m.sendRaw({type:"knowledge.add-item",item:{title:b.trim(),content:e,tags:r,type:g}},2e4),_=ye(i);if(_?.success===!1)throw new Error(_.error||"knowledge.add-item failed");return _?.item??null}let s=`note add "${ne(b.trim())}" -c "${ne(e)}"`;r.length&&(s+=` -t "${ne(r.join(","))}"`);const{output:d}=await m.execute(s,15e3);if(d&&/^[\s\S]*✖|error/i.test(d))throw new Error(d.slice(0,200));return{title:b.trim(),content:e,tags:r,type:g}}return{addItem:t}}const he={__name:"ClipboardImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=G(),r=A({get:()=>e.modelValue,set:p=>h("update:modelValue",p)}),s=u(!1),d=u(""),i=J({title:"",content:"",tagsRaw:""}),_=()=>`剪贴板导入 - ${new Date().toLocaleString()}`;function S(){i.title=_(),i.content="",i.tagsRaw="",d.value=""}async function v(){if(d.value="",!navigator.clipboard?.readText){d.value="当前环境不支持剪贴板读取 API";return}try{const p=await navigator.clipboard.readText();i.content=p||"",p||(d.value="剪贴板为空")}catch(p){d.value="读取剪贴板失败:"+(p?.message||String(p))}}F(()=>e.modelValue,async p=>{p&&(S(),await v())},{immediate:!0});async function O(){if(!i.content.trim()){C.warning("内容为空,无法保存");return}s.value=!0;try{const p=i.tagsRaw.split(/[,,]/).map(c=>c.trim()).filter(Boolean),o=await g.addItem({title:i.title.trim()||_(),content:i.content,tags:p,type:"note"});C.success("已保存到知识库"),h("saved",o),r.value=!1}catch(p){C.error("保存失败:"+(p?.message||String(p)))}finally{s.value=!1}}function U(){r.value=!1}const E={props:e,emit:h,knowledge:g,open:r,loading:s,readError:d,formState:i,defaultTitle:_,resetForm:S,readClipboard:v,handleSave:O,handleCancel:U,ref:u,reactive:J,computed:A,watch:F,get message(){return C},get useKnowledge(){return G}};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}},be={key:0,style:{"margin-bottom":"16px"}};function Se(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-input"),d=f("a-form-item"),i=f("a-textarea"),_=f("a-form"),S=f("a-modal");return w(),T(S,{open:e.open,"onUpdate:open":t[3]||(t[3]=v=>e.open=v),title:"剪贴板导入",width:640,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.formState.content.trim()},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.readError?(w(),V("div",be,[n(r,{type:"warning","show-icon":"",message:e.readError,description:"请确认浏览器/系统已授予剪贴板读取权限,或手动粘贴到下方输入框。"},null,8,["message"])])):x("v-if",!0),n(_,{layout:"vertical",model:e.formState},{default:a(()=>[n(d,{label:"标题"},{default:a(()=>[n(s,{value:e.formState.title,"onUpdate:value":t[0]||(t[0]=v=>e.formState.title=v),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),n(d,{label:"内容"},{default:a(()=>[n(i,{value:e.formState.content,"onUpdate:value":t[1]||(t[1]=v=>e.formState.content=v),placeholder:"粘贴或编辑要保存的内容…","auto-size":{minRows:10,maxRows:20},"show-count":""},null,8,["value"])]),_:1}),n(d,{label:"标签(逗号分隔,可选)"},{default:a(()=>[n(s,{value:e.formState.tagsRaw,"onUpdate:value":t[2]||(t[2]=v=>e.formState.tagsRaw=v),placeholder:"例如:素材, 链接","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["open","ok-text","ok-button-props"])}const xe=ae(he,[["render",Se],["__file","/tmp/cc-web-panel-88syqW/repo/packages/web-panel/src/components/ClipboardImportDialog.vue"]]);function oe(m){if(m&&m.ok===!1)throw new Error(m.error||"screenshot handler failed");return m?.result??m}function ce(){const m=Z();if(!de().isEmbedded)return{unsupported:!0,capture:async()=>{throw new Error("截图需要桌面壳;浏览器模式不支持")},ocr:async()=>{throw new Error("OCR 仅在桌面壳可用")},cleanup:async()=>{}};async function b({screenIndex:g}={}){const r=await m.sendRaw({type:"screenshot.capture",screenIndex:g},3e4),s=oe(r);if(s?.success===!1)throw new Error(s.error||"screenshot.capture failed");return s}async function e(g,r,s){if(!g)throw new Error("path is required");const d=await m.sendRaw({type:"screenshot.ocr",path:g,lang:r,engine:s},9e4),i=oe(d);if(i?.success===!1)throw new Error(i.error||"screenshot.ocr failed");return i}async function h(g){if(g)try{const r=await m.sendRaw({type:"screenshot.cleanup",path:g},1e4),s=oe(r);s?.success===!1&&console.warn("[useScreenshot] cleanup failed:",s.error)}catch(r){console.warn("[useScreenshot] cleanup error:",r?.message||r)}}return{unsupported:!1,capture:b,ocr:e,cleanup:h}}const ke={__name:"ScreenshotImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=ce(),r=G(),s=A({get:()=>e.modelValue,set:y=>h("update:modelValue",y)}),d=u(!1),i=u(!1),_=u(!1),S=u(""),v=u(null),O=u("auto"),U=u(null),E=u(""),p=u(""),o=u(null),c=J({title:"",content:"",tagsRaw:""}),N=A(()=>!!o.value&&(c.content.trim()||"").length>0),P=()=>`截图识别 - ${new Date().toLocaleString()}`;function B(){c.title=P(),c.content="",c.tagsRaw="",S.value="",v.value=null,U.value=null,E.value="",p.value="",o.value=null}async function M(){o.value?.path&&await g.cleanup(o.value.path)}async function W(){if(g.unsupported)return S.value="浏览器模式不支持截图,请用桌面壳",null;i.value=!0;try{return await g.capture({})}catch(y){return S.value=y?.message||String(y),null}finally{i.value=!1}}async function z(y){if(y){_.value=!0;try{const l=await g.ocr(y,void 0,O.value);c.content=l.text||"",v.value=typeof l.confidence=="number"?l.confidence:null,U.value=l.engine||null,E.value=l.model||"",p.value=l.fallbackReason||"",l.text||C.info("OCR 未识别到文本,可手动输入")}catch(l){C.warning("OCR 失败: "+(l?.message||String(l)))}finally{_.value=!1}}}async function j(){p.value=""}async function H(){await M(),B();const y=await W();y&&(o.value=y,await z(y.path))}async function Q(){o.value?.path&&await z(o.value.path)}F(()=>e.modelValue,async y=>{if(y){B();const l=await W();l&&(o.value=l,await z(l.path))}else await M(),o.value=null},{immediate:!0});async function X(){if(!N.value){C.warning("识别文本为空,无法保存");return}d.value=!0;try{const y=c.tagsRaw.split(/[,,]/).map(I=>I.trim()).filter(Boolean),l=await r.addItem({title:c.title.trim()||P(),content:c.content,tags:y,type:"note"});C.success("已保存到知识库"),h("saved",l),await M(),s.value=!1}catch(y){C.error("保存失败: "+(y?.message||String(y)))}finally{d.value=!1}}async function Y(){await M(),s.value=!1}const K={props:e,emit:h,screenshot:g,knowledge:r,open:s,loading:d,capturing:i,ocrLoading:_,captureError:S,ocrConfidence:v,ocrEngine:O,engineUsed:U,ocrModel:E,ocrFallbackReason:p,shot:o,formState:c,canSave:N,defaultTitle:P,resetState:B,cleanupShot:M,runCapture:W,runOcr:z,handleEngineChange:j,handleRecapture:H,handleRerunOcr:Q,handleSave:X,handleCancel:Y,ref:u,reactive:J,computed:A,watch:F,get message(){return C},get CameraOutlined(){return ue},get ScanOutlined(){return me},get useScreenshot(){return ce},get useKnowledge(){return G}};return Object.defineProperty(K,"__isScriptSetup",{enumerable:!1,value:!0}),K}},Ce={key:0,style:{"margin-bottom":"16px"}},Oe={key:1,class:"ss-error"},Re={key:2},Ne={class:"ss-actions"},Ee={key:0,class:"ss-preview"},Ie=["src"];function Ve(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-button"),d=f("a-select-option"),i=f("a-select"),_=f("a-tag"),S=f("a-tooltip"),v=f("a-input"),O=f("a-form-item"),U=f("a-spin"),E=f("a-textarea"),p=f("a-form"),o=f("a-modal");return w(),T(o,{open:e.open,"onUpdate:open":t[4]||(t[4]=c=>e.open=c),title:"截图识别",width:780,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.canSave},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.screenshot.unsupported?(w(),V("div",Ce,[n(r,{type:"warning","show-icon":"",message:"浏览器模式不支持截图",description:"screenshot-desktop 需要 OS 原生 API,请用桌面壳 (cc desktop) 打开本面板。"})])):e.captureError?(w(),V("div",Oe,[n(r,{type:"error","show-icon":"",message:e.captureError},null,8,["message"])])):(w(),V("div",Re,[L("div",Ne,[n(s,{size:"small",loading:e.capturing,onClick:e.handleRecapture},{icon:a(()=>[n(e.CameraOutlined)]),default:a(()=>[t[5]||(t[5]=k(" 重新截图 ",-1))]),_:1},8,["loading"]),n(s,{size:"small",loading:e.ocrLoading,disabled:!e.shot||e.ocrLoading,onClick:e.handleRerunOcr},{icon:a(()=>[n(e.ScanOutlined)]),default:a(()=>[t[6]||(t[6]=k(" 重跑 OCR ",-1))]),_:1},8,["loading","disabled"]),n(i,{value:e.ocrEngine,"onUpdate:value":t[0]||(t[0]=c=>e.ocrEngine=c),size:"small",style:{width:"140px"},disabled:e.ocrLoading,onChange:e.handleEngineChange},{default:a(()=>[n(d,{value:"auto"},{default:a(()=>[...t[7]||(t[7]=[k("自动 (推荐)",-1)])]),_:1}),n(d,{value:"llm"},{default:a(()=>[...t[8]||(t[8]=[k("视觉 LLM",-1)])]),_:1}),n(d,{value:"tesseract"},{default:a(()=>[...t[9]||(t[9]=[k("本地 Tesseract",-1)])]),_:1})]),_:1},8,["value","disabled"]),e.engineUsed==="llm"?(w(),T(_,{key:0,color:"blue"},{default:a(()=>[k(D(e.ocrModel||"豆包视觉"),1)]),_:1})):e.engineUsed==="tesseract"&&e.ocrConfidence!==null?(w(),T(_,{key:1},{default:a(()=>[k(" Tesseract · "+D(e.ocrConfidence)+"% ",1)]),_:1})):x("v-if",!0),e.ocrFallbackReason?(w(),T(S,{key:2,title:`LLM 识别失败已回落 Tesseract: ${e.ocrFallbackReason}`},{default:a(()=>[n(_,{color:"orange"},{default:a(()=>[...t[10]||(t[10]=[k("回落 Tesseract",-1)])]),_:1})]),_:1},8,["title"])):x("v-if",!0)]),e.shot?.dataUrl?(w(),V("div",Ee,[L("img",{src:e.shot.dataUrl,alt:"screenshot"},null,8,Ie)])):x("v-if",!0),n(p,{layout:"vertical",model:e.formState},{default:a(()=>[n(O,{label:"标题"},{default:a(()=>[n(v,{value:e.formState.title,"onUpdate:value":t[1]||(t[1]=c=>e.formState.title=c),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),n(O,null,{label:a(()=>[t[11]||(t[11]=L("span",null,"识别文本",-1)),e.ocrLoading?(w(),T(U,{key:0,size:"small",style:{"margin-left":"8px"}})):x("v-if",!0)]),default:a(()=>[n(E,{value:e.formState.content,"onUpdate:value":t[2]||(t[2]=c=>e.formState.content=c),placeholder:e.ocrLoading?"正在识别…":"识别结果,可手动编辑","auto-size":{minRows:8,maxRows:16},"show-count":""},null,8,["value","placeholder"])]),_:1}),n(O,{label:"标签 (逗号分隔, 可选)"},{default:a(()=>[n(v,{value:e.formState.tagsRaw,"onUpdate:value":t[3]||(t[3]=c=>e.formState.tagsRaw=c),placeholder:"例如: 截图, 参考","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]))]),_:1},8,["open","ok-text","ok-button-props"])}const Ue=ae(ke,[["render",Ve],["__scopeId","data-v-1d6234fd"],["__file","/tmp/cc-web-panel-88syqW/repo/packages/web-panel/src/components/ScreenshotImportDialog.vue"]]),Le={__name:"Notes",setup(m,{expose:t}){t();const b=Z(),e=ie(),h=le(),g=u(!1),r=u(!1),s=u(!1),d=u(!1),i=u(""),_=u([]),S=u([]),v=u(!1),O=u(""),U=u(!1),E=u(!1),p=u(!1),o=u(!1),c=u(null),N=u({title:"",content:"",tags:""});async function P(){C.success("剪贴板内容已保存到知识库"),await z()}async function B(){C.success("截图内容已保存到知识库"),await z()}const M=A(()=>v.value?S.value:_.value),W=[{title:"标题",dataIndex:"title",key:"title",width:"30%"},{title:"预览",key:"content",ellipsis:!0},{title:"标签",key:"tags",width:"20%"},{title:"操作",key:"actions",width:"80px"}];async function z(){r.value=!0,i.value="";try{const{output:l}=await b.execute("note list",2e4);_.value=j(l)}catch(l){i.value=`加载失败: ${l.message}`}finally{r.value=!1}}function j(l){const I=[],$=l.split(`
|
|
2
|
-
`);for(const ee of $){const R=ee.trim();if(!R||R.startsWith("─")||R.startsWith("Note")||R.match(/^\d+ note/i))continue;const
|
|
1
|
+
import{I as f,P as w,S as T,K as a,J as V,c as o,V as x,w as A,b as P,a as K,r as u,U as L,Q as k,R as D,F as te,M as le,o as re,Z as se}from"./vendor-BvqAck49.js";import{u as G,_ as ae,d as C}from"./index-BwGnc020.js";import{u as ie}from"./useFs-ClAmmKr2.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aw as me,ax as ue,ay as pe,az as ge,a4 as ve,R as we,as as _e}from"./icons-DP3uiYxy.js";function ye(m){if(m&&m.ok===!1)throw new Error(m.error||"knowledge handler failed");return m?.result??m}function oe(m){return String(m).replace(/(["\\])/g,"\\$1")}function J(){const m=G();async function t({title:b,content:e,tags:h=[],type:g="note"}={}){if(typeof b!="string"||!b.trim())throw new Error("title is required");if(typeof e!="string")throw new Error("content is required");const r=Array.isArray(h)?h.filter(Boolean):[];if(de().isEmbedded){const i=await m.sendRaw({type:"knowledge.add-item",item:{title:b.trim(),content:e,tags:r,type:g}},2e4),_=ye(i);if(_?.success===!1)throw new Error(_.error||"knowledge.add-item failed");return _?.item??null}let s=`note add "${oe(b.trim())}" -c "${oe(e)}"`;r.length&&(s+=` -t "${oe(r.join(","))}"`);const{output:d}=await m.execute(s,15e3);if(d&&/^[\s\S]*✖|error/i.test(d))throw new Error(d.slice(0,200));return{title:b.trim(),content:e,tags:r,type:g}}return{addItem:t}}const he={__name:"ClipboardImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=J(),r=P({get:()=>e.modelValue,set:p=>h("update:modelValue",p)}),s=u(!1),d=u(""),i=K({title:"",content:"",tagsRaw:""}),_=()=>`剪贴板导入 - ${new Date().toLocaleString()}`;function S(){i.title=_(),i.content="",i.tagsRaw="",d.value=""}async function v(){if(d.value="",!navigator.clipboard?.readText){d.value="当前环境不支持剪贴板读取 API";return}try{const p=await navigator.clipboard.readText();i.content=p||"",p||(d.value="剪贴板为空")}catch(p){d.value="读取剪贴板失败:"+(p?.message||String(p))}}A(()=>e.modelValue,async p=>{p&&(S(),await v())},{immediate:!0});async function O(){if(!i.content.trim()){C.warning("内容为空,无法保存");return}s.value=!0;try{const p=i.tagsRaw.split(/[,,]/).map(c=>c.trim()).filter(Boolean),n=await g.addItem({title:i.title.trim()||_(),content:i.content,tags:p,type:"note"});C.success("已保存到知识库"),h("saved",n),r.value=!1}catch(p){C.error("保存失败:"+(p?.message||String(p)))}finally{s.value=!1}}function U(){r.value=!1}const E={props:e,emit:h,knowledge:g,open:r,loading:s,readError:d,formState:i,defaultTitle:_,resetForm:S,readClipboard:v,handleSave:O,handleCancel:U,ref:u,reactive:K,computed:P,watch:A,get message(){return C},get useKnowledge(){return J}};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}},be={key:0,style:{"margin-bottom":"16px"}};function Se(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-input"),d=f("a-form-item"),i=f("a-textarea"),_=f("a-form"),S=f("a-modal");return w(),T(S,{open:e.open,"onUpdate:open":t[3]||(t[3]=v=>e.open=v),title:"剪贴板导入",width:640,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.formState.content.trim()},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.readError?(w(),V("div",be,[o(r,{type:"warning","show-icon":"",message:e.readError,description:"请确认浏览器/系统已授予剪贴板读取权限,或手动粘贴到下方输入框。"},null,8,["message"])])):x("v-if",!0),o(_,{layout:"vertical",model:e.formState},{default:a(()=>[o(d,{label:"标题"},{default:a(()=>[o(s,{value:e.formState.title,"onUpdate:value":t[0]||(t[0]=v=>e.formState.title=v),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),o(d,{label:"内容"},{default:a(()=>[o(i,{value:e.formState.content,"onUpdate:value":t[1]||(t[1]=v=>e.formState.content=v),placeholder:"粘贴或编辑要保存的内容…","auto-size":{minRows:10,maxRows:20},"show-count":""},null,8,["value"])]),_:1}),o(d,{label:"标签(逗号分隔,可选)"},{default:a(()=>[o(s,{value:e.formState.tagsRaw,"onUpdate:value":t[2]||(t[2]=v=>e.formState.tagsRaw=v),placeholder:"例如:素材, 链接","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["open","ok-text","ok-button-props"])}const xe=ae(he,[["render",Se],["__file","/tmp/cc-web-panel-XbotGX/repo/packages/web-panel/src/components/ClipboardImportDialog.vue"]]);function ne(m){if(m&&m.ok===!1)throw new Error(m.error||"screenshot handler failed");return m?.result??m}function ce(){const m=G();if(!de().isEmbedded)return{unsupported:!0,capture:async()=>{throw new Error("截图需要桌面壳;浏览器模式不支持")},ocr:async()=>{throw new Error("OCR 仅在桌面壳可用")},cleanup:async()=>{}};async function b({screenIndex:g}={}){const r=await m.sendRaw({type:"screenshot.capture",screenIndex:g},3e4),s=ne(r);if(s?.success===!1)throw new Error(s.error||"screenshot.capture failed");return s}async function e(g,r,s){if(!g)throw new Error("path is required");const d=await m.sendRaw({type:"screenshot.ocr",path:g,lang:r,engine:s},9e4),i=ne(d);if(i?.success===!1)throw new Error(i.error||"screenshot.ocr failed");return i}async function h(g){if(g)try{const r=await m.sendRaw({type:"screenshot.cleanup",path:g},1e4),s=ne(r);s?.success===!1&&console.warn("[useScreenshot] cleanup failed:",s.error)}catch(r){console.warn("[useScreenshot] cleanup error:",r?.message||r)}}return{unsupported:!1,capture:b,ocr:e,cleanup:h}}const ke={__name:"ScreenshotImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=ce(),r=J(),s=P({get:()=>e.modelValue,set:y=>h("update:modelValue",y)}),d=u(!1),i=u(!1),_=u(!1),S=u(""),v=u(null),O=u("auto"),U=u(null),E=u(""),p=u(""),n=u(null),c=K({title:"",content:"",tagsRaw:""}),N=P(()=>!!n.value&&(c.content.trim()||"").length>0),B=()=>`截图识别 - ${new Date().toLocaleString()}`;function q(){c.title=B(),c.content="",c.tagsRaw="",S.value="",v.value=null,U.value=null,E.value="",p.value="",n.value=null}async function M(){n.value?.path&&await g.cleanup(n.value.path)}async function j(){if(g.unsupported)return S.value="浏览器模式不支持截图,请用桌面壳",null;i.value=!0;try{return await g.capture({})}catch(y){return S.value=y?.message||String(y),null}finally{i.value=!1}}async function z(y){if(y){_.value=!0;try{const l=await g.ocr(y,void 0,O.value);c.content=l.text||"",v.value=typeof l.confidence=="number"?l.confidence:null,U.value=l.engine||null,E.value=l.model||"",p.value=l.fallbackReason||"",l.text||C.info("OCR 未识别到文本,可手动输入")}catch(l){C.warning("OCR 失败: "+(l?.message||String(l)))}finally{_.value=!1}}}async function Q(){p.value=""}async function Z(){await M(),q();const y=await j();y&&(n.value=y,await z(y.path))}async function W(){n.value?.path&&await z(n.value.path)}A(()=>e.modelValue,async y=>{if(y){q();const l=await j();l&&(n.value=l,await z(l.path))}else await M(),n.value=null},{immediate:!0});async function H(){if(!N.value){C.warning("识别文本为空,无法保存");return}d.value=!0;try{const y=c.tagsRaw.split(/[,,]/).map(I=>I.trim()).filter(Boolean),l=await r.addItem({title:c.title.trim()||B(),content:c.content,tags:y,type:"note"});C.success("已保存到知识库"),h("saved",l),await M(),s.value=!1}catch(y){C.error("保存失败: "+(y?.message||String(y)))}finally{d.value=!1}}async function Y(){await M(),s.value=!1}const X={props:e,emit:h,screenshot:g,knowledge:r,open:s,loading:d,capturing:i,ocrLoading:_,captureError:S,ocrConfidence:v,ocrEngine:O,engineUsed:U,ocrModel:E,ocrFallbackReason:p,shot:n,formState:c,canSave:N,defaultTitle:B,resetState:q,cleanupShot:M,runCapture:j,runOcr:z,handleEngineChange:Q,handleRecapture:Z,handleRerunOcr:W,handleSave:H,handleCancel:Y,ref:u,reactive:K,computed:P,watch:A,get message(){return C},get CameraOutlined(){return ue},get ScanOutlined(){return me},get useScreenshot(){return ce},get useKnowledge(){return J}};return Object.defineProperty(X,"__isScriptSetup",{enumerable:!1,value:!0}),X}},Ce={key:0,style:{"margin-bottom":"16px"}},Oe={key:1,class:"ss-error"},Re={key:2},Ne={class:"ss-actions"},Ee={key:0,class:"ss-preview"},Ie=["src"];function Ve(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-button"),d=f("a-select-option"),i=f("a-select"),_=f("a-tag"),S=f("a-tooltip"),v=f("a-input"),O=f("a-form-item"),U=f("a-spin"),E=f("a-textarea"),p=f("a-form"),n=f("a-modal");return w(),T(n,{open:e.open,"onUpdate:open":t[4]||(t[4]=c=>e.open=c),title:"截图识别",width:780,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.canSave},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.screenshot.unsupported?(w(),V("div",Ce,[o(r,{type:"warning","show-icon":"",message:"浏览器模式不支持截图",description:"screenshot-desktop 需要 OS 原生 API,请用桌面壳 (cc desktop) 打开本面板。"})])):e.captureError?(w(),V("div",Oe,[o(r,{type:"error","show-icon":"",message:e.captureError},null,8,["message"])])):(w(),V("div",Re,[L("div",Ne,[o(s,{size:"small",loading:e.capturing,onClick:e.handleRecapture},{icon:a(()=>[o(e.CameraOutlined)]),default:a(()=>[t[5]||(t[5]=k(" 重新截图 ",-1))]),_:1},8,["loading"]),o(s,{size:"small",loading:e.ocrLoading,disabled:!e.shot||e.ocrLoading,onClick:e.handleRerunOcr},{icon:a(()=>[o(e.ScanOutlined)]),default:a(()=>[t[6]||(t[6]=k(" 重跑 OCR ",-1))]),_:1},8,["loading","disabled"]),o(i,{value:e.ocrEngine,"onUpdate:value":t[0]||(t[0]=c=>e.ocrEngine=c),size:"small",style:{width:"140px"},disabled:e.ocrLoading,onChange:e.handleEngineChange},{default:a(()=>[o(d,{value:"auto"},{default:a(()=>[...t[7]||(t[7]=[k("自动 (推荐)",-1)])]),_:1}),o(d,{value:"llm"},{default:a(()=>[...t[8]||(t[8]=[k("视觉 LLM",-1)])]),_:1}),o(d,{value:"tesseract"},{default:a(()=>[...t[9]||(t[9]=[k("本地 Tesseract",-1)])]),_:1})]),_:1},8,["value","disabled"]),e.engineUsed==="llm"?(w(),T(_,{key:0,color:"blue"},{default:a(()=>[k(D(e.ocrModel||"豆包视觉"),1)]),_:1})):e.engineUsed==="tesseract"&&e.ocrConfidence!==null?(w(),T(_,{key:1},{default:a(()=>[k(" Tesseract · "+D(e.ocrConfidence)+"% ",1)]),_:1})):x("v-if",!0),e.ocrFallbackReason?(w(),T(S,{key:2,title:`LLM 识别失败已回落 Tesseract: ${e.ocrFallbackReason}`},{default:a(()=>[o(_,{color:"orange"},{default:a(()=>[...t[10]||(t[10]=[k("回落 Tesseract",-1)])]),_:1})]),_:1},8,["title"])):x("v-if",!0)]),e.shot?.dataUrl?(w(),V("div",Ee,[L("img",{src:e.shot.dataUrl,alt:"screenshot"},null,8,Ie)])):x("v-if",!0),o(p,{layout:"vertical",model:e.formState},{default:a(()=>[o(O,{label:"标题"},{default:a(()=>[o(v,{value:e.formState.title,"onUpdate:value":t[1]||(t[1]=c=>e.formState.title=c),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),o(O,null,{label:a(()=>[t[11]||(t[11]=L("span",null,"识别文本",-1)),e.ocrLoading?(w(),T(U,{key:0,size:"small",style:{"margin-left":"8px"}})):x("v-if",!0)]),default:a(()=>[o(E,{value:e.formState.content,"onUpdate:value":t[2]||(t[2]=c=>e.formState.content=c),placeholder:e.ocrLoading?"正在识别…":"识别结果,可手动编辑","auto-size":{minRows:8,maxRows:16},"show-count":""},null,8,["value","placeholder"])]),_:1}),o(O,{label:"标签 (逗号分隔, 可选)"},{default:a(()=>[o(v,{value:e.formState.tagsRaw,"onUpdate:value":t[3]||(t[3]=c=>e.formState.tagsRaw=c),placeholder:"例如: 截图, 参考","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]))]),_:1},8,["open","ok-text","ok-button-props"])}const Ue=ae(ke,[["render",Ve],["__scopeId","data-v-1d6234fd"],["__file","/tmp/cc-web-panel-XbotGX/repo/packages/web-panel/src/components/ScreenshotImportDialog.vue"]]),Le={__name:"Notes",setup(m,{expose:t}){t();const b=G(),e=ie(),h=le(),g=u(!1),r=u(!1),s=u(!1),d=u(!1),i=u(""),_=u([]),S=u([]),v=u(!1),O=u(""),U=u(!1),E=u(!1),p=u(!1),n=u(!1),c=u(null),N=u({title:"",content:"",tags:""});async function B(){C.success("剪贴板内容已保存到知识库"),await z()}async function q(){C.success("截图内容已保存到知识库"),await z()}const M=P(()=>v.value?S.value:_.value),j=[{title:"标题",dataIndex:"title",key:"title",width:"30%"},{title:"预览",key:"content",ellipsis:!0},{title:"标签",key:"tags",width:"20%"},{title:"操作",key:"actions",width:"80px"}];async function z(){r.value=!0,i.value="";try{const{output:l}=await b.execute("note list",2e4);_.value=Q(l)}catch(l){i.value=`加载失败: ${l.message}`}finally{r.value=!1}}function Q(l){const I=[],$=l.split(`
|
|
2
|
+
`);for(const ee of $){const R=ee.trim();if(!R||R.startsWith("─")||R.startsWith("Note")||R.match(/^\d+ note/i))continue;const F=R.match(/^(\d+)\.\s+(.+?)(?:\s+\[([^\]]+)\])?\s*(?:-\s*(.*))?$/);F?I.push({key:F[1],id:F[1],title:F[2].trim(),tags:F[3]?F[3].split(",").map(fe=>fe.trim()):[],preview:(F[4]||"").trim().slice(0,100),content:""}):R.length>2&&!R.startsWith("✖")&&!R.startsWith("[")&&I.push({key:I.length,id:String(I.length),title:R,tags:[],preview:"",content:""})}return I}async function Z(){if(!O.value.trim()){W();return}s.value=!0,v.value=!0;try{const{output:l}=await b.execute(`note search "${O.value}"`,15e3);S.value=Q(l)}catch{S.value=[]}finally{s.value=!1}}function W(){O.value="",v.value=!1,S.value=[]}async function H(){if(!N.value.title.trim()){C.warning("请输入标题");return}d.value=!0;try{let l=`note add "${N.value.title}"`;N.value.content&&(l+=` -c "${N.value.content.replace(/"/g,'\\"')}"`),N.value.tags&&(l+=` -t "${N.value.tags}"`);const{output:I}=await b.execute(l,15e3);I.includes("✖")||I.toLowerCase().includes("error")?C.error("添加失败: "+I.slice(0,100)):(C.success("笔记已添加"),U.value=!1,N.value={title:"",content:"",tags:""},await z())}catch(l){C.error("添加失败: "+l.message)}finally{d.value=!1}}function Y(l){c.value=l,E.value=!0}async function X(){if(!c.value)return;const l=c.value,I=l.tags?.length?`tags: [${l.tags.join(", ")}]
|
|
3
3
|
|
|
4
4
|
`:"",$=`# ${l.title}
|
|
5
5
|
|
|
6
6
|
${I}${l.content||l.preview||""}
|
|
7
|
-
`,ee=(l.title||"note").replace(/[\\/:*?"<>|\x00-\x1f]+/g,"_").slice(0,80)||"note";g.value=!0;try{const R=await e.saveText($,{defaultPath:`${ee}.md`,filters:[{name:"Markdown",extensions:["md"]}]});if(R.canceled)return;C.success(R.path?`已导出到 ${R.path}`:"已导出")}catch(R){C.error(`导出失败: ${R.message||R}`)}finally{g.value=!1}}re(()=>{z(),h.query.clipboardImport&&(p.value=!0),h.query.screenshotOcr&&(
|
|
7
|
+
`,ee=(l.title||"note").replace(/[\\/:*?"<>|\x00-\x1f]+/g,"_").slice(0,80)||"note";g.value=!0;try{const R=await e.saveText($,{defaultPath:`${ee}.md`,filters:[{name:"Markdown",extensions:["md"]}]});if(R.canceled)return;C.success(R.path?`已导出到 ${R.path}`:"已导出")}catch(R){C.error(`导出失败: ${R.message||R}`)}finally{g.value=!1}}re(()=>{z(),h.query.clipboardImport&&(p.value=!0),h.query.screenshotOcr&&(n.value=!0)}),A(()=>h.query.clipboardImport,l=>{l&&(p.value=!0)}),A(()=>h.query.screenshotOcr,l=>{l&&(n.value=!0)});const y={ws:b,fs:e,route:h,exporting:g,loading:r,searching:s,adding:d,error:i,notes:_,searchResults:S,isSearchMode:v,searchQuery:O,showAdd:U,showView:E,showClipboardImport:p,showScreenshotImport:n,viewingNote:c,newNote:N,onClipboardSaved:B,onScreenshotSaved:q,displayNotes:M,columns:j,loadNotes:z,parseNoteList:Q,doSearch:Z,clearSearch:W,addNote:H,viewNote:Y,exportNote:X,ref:u,computed:P,onMounted:re,watch:A,get useRoute(){return le},get PlusOutlined(){return _e},get ReloadOutlined(){return we},get FileTextOutlined(){return ve},get DownloadOutlined(){return ge},get SnippetsOutlined(){return pe},get CameraOutlined(){return ue},get message(){return C},get useWsStore(){return G},get useFs(){return ie},ClipboardImportDialog:xe,ScreenshotImportDialog:Ue};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}},Te={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ze={class:"page-sub"},De={style:{"margin-bottom":"16px",display:"flex",gap:"10px"}},Me={key:0,style:{"text-align":"center",padding:"60px"}},Fe={key:0,style:{color:"#e0e0e0","font-weight":"500"}},Ae={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Pe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Be={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},qe={style:{"margin-bottom":"10px"}},je={style:{"white-space":"pre-wrap",color:"#ccc","font-family":"inherit","line-height":"1.7",background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}};function Qe(m,t,b,e,h,g){const r=f("a-button"),s=f("a-space"),d=f("a-input-search"),i=f("a-tag"),_=f("a-spin"),S=f("a-table"),v=f("a-input"),O=f("a-form-item"),U=f("a-textarea"),E=f("a-form"),p=f("a-modal");return w(),V("div",null,[L("div",Te,[L("div",null,[t[12]||(t[12]=L("h2",{class:"page-title"},"笔记管理",-1)),L("p",ze,"个人知识库 · "+D(e.notes.length)+" 条笔记",1)]),o(s,null,{default:a(()=>[o(r,{onClick:t[0]||(t[0]=n=>e.showAdd=!0),type:"primary"},{icon:a(()=>[o(e.PlusOutlined)]),default:a(()=>[t[13]||(t[13]=k(" 新建笔记 ",-1))]),_:1}),o(r,{onClick:t[1]||(t[1]=n=>e.showClipboardImport=!0)},{icon:a(()=>[o(e.SnippetsOutlined)]),default:a(()=>[t[14]||(t[14]=k(" 剪贴板导入 ",-1))]),_:1}),o(r,{onClick:t[2]||(t[2]=n=>e.showScreenshotImport=!0)},{icon:a(()=>[o(e.CameraOutlined)]),default:a(()=>[t[15]||(t[15]=k(" 截图识别 ",-1))]),_:1}),o(r,{ghost:"",loading:e.loading,onClick:e.loadNotes},{icon:a(()=>[o(e.ReloadOutlined)]),default:a(()=>[t[16]||(t[16]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),x(" Search "),L("div",De,[o(d,{value:e.searchQuery,"onUpdate:value":t[3]||(t[3]=n=>e.searchQuery=n),placeholder:"搜索笔记...","allow-clear":"",style:{"max-width":"400px"},loading:e.searching,onSearch:e.doSearch,onClear:e.clearSearch},null,8,["value","loading"]),e.isSearchMode?(w(),T(i,{key:0,color:"blue",closable:"",onClose:e.clearSearch},{default:a(()=>[k(" 搜索: "+D(e.searchQuery),1)]),_:1})):x("v-if",!0)]),x(" Loading "),e.loading?(w(),V("div",Me,[o(_,{size:"large"})])):(w(),V(te,{key:1},[x(" Notes Table "),o(S,{columns:e.columns,"data-source":e.displayNotes,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"note-row"},{bodyCell:a(({column:n,record:c})=>[n.key==="title"?(w(),V("span",Fe,D(c.title),1)):x("v-if",!0),n.key==="tags"?(w(!0),V(te,{key:1},se(c.tags,N=>(w(),T(i,{key:N,color:"blue",style:{"font-size":"10px",margin:"1px"}},{default:a(()=>[k(D(N),1)]),_:2},1024))),128)):x("v-if",!0),n.key==="content"?(w(),V("span",Ae,D(c.preview),1)):x("v-if",!0),n.key==="actions"?(w(),T(r,{key:3,size:"small",type:"link",onClick:N=>e.viewNote(c)},{default:a(()=>[...t[17]||(t[17]=[k("查看",-1)])]),_:1},8,["onClick"])):x("v-if",!0)]),emptyText:a(()=>[L("div",Pe,[o(e.FileTextOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),k(" "+D(e.error||'暂无笔记,点击"新建笔记"添加'),1)])]),_:1},8,["data-source","pagination"])],2112)),x(" Add Note Modal "),o(p,{open:e.showAdd,"onUpdate:open":t[7]||(t[7]=n=>e.showAdd=n),title:"新建笔记","confirm-loading":e.adding,onOk:e.addNote},{default:a(()=>[o(E,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[o(O,{label:"标题",required:""},{default:a(()=>[o(v,{value:e.newNote.title,"onUpdate:value":t[4]||(t[4]=n=>e.newNote.title=n),placeholder:"笔记标题"},null,8,["value"])]),_:1}),o(O,{label:"内容"},{default:a(()=>[o(U,{value:e.newNote.content,"onUpdate:value":t[5]||(t[5]=n=>e.newNote.content=n),rows:5,placeholder:"笔记内容..."},null,8,["value"])]),_:1}),o(O,{label:"标签"},{default:a(()=>[o(v,{value:e.newNote.tags,"onUpdate:value":t[6]||(t[6]=n=>e.newNote.tags=n),placeholder:"用逗号分隔,如: work,ideas"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),x(" Clipboard import modal "),o(e.ClipboardImportDialog,{modelValue:e.showClipboardImport,"onUpdate:modelValue":t[8]||(t[8]=n=>e.showClipboardImport=n),onSaved:e.onClipboardSaved},null,8,["modelValue"]),x(" Screenshot OCR modal "),o(e.ScreenshotImportDialog,{modelValue:e.showScreenshotImport,"onUpdate:modelValue":t[9]||(t[9]=n=>e.showScreenshotImport=n),onSaved:e.onScreenshotSaved},null,8,["modelValue"]),x(" View Note Modal "),o(p,{open:e.showView,"onUpdate:open":t[11]||(t[11]=n=>e.showView=n),title:e.viewingNote?.title,width:"700px"},{footer:a(()=>[o(r,{onClick:t[10]||(t[10]=n=>e.showView=!1)},{default:a(()=>[...t[18]||(t[18]=[k("关闭",-1)])]),_:1}),e.viewingNote?(w(),T(r,{key:0,type:"primary",loading:e.exporting,onClick:e.exportNote},{icon:a(()=>[o(e.DownloadOutlined)]),default:a(()=>[t[19]||(t[19]=k(" 导出 .md ",-1))]),_:1},8,["loading"])):x("v-if",!0)]),default:a(()=>[e.viewingNote?(w(),V("div",Be,[L("div",qe,[(w(!0),V(te,null,se(e.viewingNote.tags,n=>(w(),T(i,{key:n,color:"blue"},{default:a(()=>[k(D(n),1)]),_:2},1024))),128))]),L("pre",je,D(e.viewingNote.content||e.viewingNote.preview),1)])):x("v-if",!0)]),_:1},8,["open","title"])])}const Ze=ae(Le,[["render",Qe],["__scopeId","data-v-7992c921"],["__file","/tmp/cc-web-panel-XbotGX/repo/packages/web-panel/src/views/Notes.vue"]]);export{Ze as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as b,I as f,J as h,U as d,S as R,V as E,c as n,K as c,o as N,P as k,F as V,Q as O,R as B}from"./vendor-BvqAck49.js";import{u as D,_ as F,d as
|
|
1
|
+
import{r as b,I as f,J as h,U as d,S as R,V as E,c as n,K as c,o as N,P as k,F as V,Q as O,R as B}from"./vendor-BvqAck49.js";import{u as D,_ as F,d as S}from"./index-BwGnc020.js";import{u as L}from"./useShellMode-CgR0wCYM.js";import{R as j}from"./icons-DP3uiYxy.js";const p={enabled:!0,sound:!0,badge:!0,desktop:!0};function x(s){if(s&&s.ok===!1)throw new Error(s.error||"notification-settings handler failed");return s?.result??s}const u={settings:b({...p})};function T(){const s=D(),t=L().isEmbedded;async function _(){if(!t)return u.settings.value={...p},u.settings.value;const a=await s.sendRaw({type:"notification-settings.get"},1e4),o=x(a);if(o?.success===!1)throw new Error(o.error||"notification-settings.get failed");return u.settings.value={...p,...o?.settings||{}},u.settings.value}async function e(a){if(!a||typeof a!="object")throw new Error("patch is required");if(!t)throw new Error("通知设置仅在嵌入式 web-shell 中可写");const o=await s.sendRaw({type:"notification-settings.update",settings:a},1e4),i=x(o);if(i?.success===!1)throw new Error(i.error||"notification-settings.update failed");return u.settings.value={...p,...i?.settings||{}},u.settings.value}return{settings:u.settings,isEmbedded:t,load:_,update:e,DEFAULTS:p}}const A={__name:"NotificationSettings",setup(s,{expose:t}){t();const{settings:_,isEmbedded:e,load:a,update:o}=T(),i=b(!1),l=b(!1),g=b("");async function v(){i.value=!0;try{await a()}catch(m){S.error("加载失败: "+(m?.message||String(m)))}finally{i.value=!1}}async function y(m,r){if(e){l.value=!0;try{await o({[m]:r}),g.value=new Date().toLocaleTimeString(),S.success("已保存")}catch(C){S.error("保存失败: "+(C?.message||String(C))),await a().catch(()=>{})}finally{l.value=!1}}}N(v);const w={settings:_,isEmbedded:e,load:a,update:o,loading:i,saving:l,lastSaved:g,reload:v,onToggle:y,ref:b,onMounted:N,get message(){return S},get ReloadOutlined(){return j},get useNotificationSettings(){return T}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},I={class:"footer-row"},M={key:0,class:"last-saved"};function P(s,t,_,e,a,o){const i=f("a-alert"),l=f("a-switch"),g=f("a-form-item"),v=f("a-form"),y=f("a-divider"),w=f("a-button"),m=f("a-card");return k(),h("div",null,[t[9]||(t[9]=d("div",{class:"page-head"},[d("div",null,[d("h2",{class:"page-title"},"通知设置"),d("p",{class:"page-sub"},"控制应用通知行为 · 与桌面 V5/V6 设置同源")])],-1)),e.isEmbedded?E("v-if",!0):(k(),R(i,{key:0,type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"浏览器模式只读",description:"纯浏览器没有 Electron AppConfig 后端,本页只能展示默认值。请使用桌面壳 (cc desktop) 写入。"})),n(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:c(()=>[n(v,{layout:"horizontal","label-col":{span:6},"wrapper-col":{span:18}},{default:c(()=>[n(g,{label:"启用通知"},{default:c(()=>[n(l,{checked:e.settings.enabled,disabled:!e.isEmbedded||e.saving,onChange:t[0]||(t[0]=r=>e.onToggle("enabled",r))},null,8,["checked","disabled"]),t[4]||(t[4]=d("span",{class:"hint"},"关闭后所有通知静默",-1))]),_:1}),e.settings.enabled?(k(),h(V,{key:0},[n(g,{label:"通知声音"},{default:c(()=>[n(l,{checked:e.settings.sound,disabled:!e.isEmbedded||e.saving,onChange:t[1]||(t[1]=r=>e.onToggle("sound",r))},null,8,["checked","disabled"]),t[5]||(t[5]=d("span",{class:"hint"},"桌面通知伴随系统提示音",-1))]),_:1}),n(g,{label:"角标提示"},{default:c(()=>[n(l,{checked:e.settings.badge,disabled:!e.isEmbedded||e.saving,onChange:t[2]||(t[2]=r=>e.onToggle("badge",r))},null,8,["checked","disabled"]),t[6]||(t[6]=d("span",{class:"hint"},"在应用图标 / 任务栏角标显示未读数",-1))]),_:1}),n(g,{label:"桌面通知"},{default:c(()=>[n(l,{checked:e.settings.desktop,disabled:!e.isEmbedded||e.saving,onChange:t[3]||(t[3]=r=>e.onToggle("desktop",r))},null,8,["checked","disabled"]),t[7]||(t[7]=d("span",{class:"hint"},"系统级 toast (Windows / macOS / Linux 原生通知)",-1))]),_:1})],64)):E("v-if",!0)]),_:1}),n(y),d("div",I,[n(w,{loading:e.loading,onClick:e.reload},{icon:c(()=>[n(e.ReloadOutlined)]),default:c(()=>[t[8]||(t[8]=O(" 重新加载 ",-1))]),_:1},8,["loading"]),e.lastSaved?(k(),h("span",M,"最近保存: "+B(e.lastSaved),1)):E("v-if",!0)])]),_:1})])}const z=F(A,[["render",P],["__scopeId","data-v-ae0392e9"],["__file","/tmp/cc-web-panel-XbotGX/repo/packages/web-panel/src/views/NotificationSettings.vue"]]);export{z as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as o}from"./vendor-BvqAck49.js";import{_ as S}from"./index-BwGnc020.js";import"./icons-DP3uiYxy.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const a=p,e=o(()=>a.event.content||{}),d=o(()=>a.event.extra||{}),m=o(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=o(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),y=o(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=o(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=o(()=>e.value.status||e.value.state),b=o(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),h=o(()=>{if(!a.event.occurredAt)return"";const t=new Date(a.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:a,c:e,e:d,merchantText:m,itemText:c,amountText:y,orderNo:T,statusText:f,statusColor:b,formattedTime:h,computed:o};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},R={class:"val"},B={class:"row"},D={class:"val"},I={class:"row amount-row"},j={class:"val amount"},A={key:0,class:"row"},F={class:"val mono"},M={key:1,class:"row"};function P(p,r,a,e,d,m){const c=w("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(a.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(a.event.subtype),1)]),_:1})]),s("div",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",R,n(e.merchantText),1)]),s("div",B,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",D,n(e.itemText),1)]),s("div",I,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",j,n(e.amountText),1)]),e.orderNo?(l(),u("div",A,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",F,n(e.orderNo),1)])):g("v-if",!0),e.statusText?(l(),u("div",M,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):g("v-if",!0)])}const H=S(k,[["render",P],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-XbotGX/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{H as default};
|