zen-gitsync 2.8.8 → 2.8.9
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.
|
@@ -48,7 +48,7 @@ ${e("@13D1C:新文件: ")}${O}
|
|
|
48
48
|
`).map(ge=>`+${ge}`).join(`
|
|
49
49
|
`):g.value=`这是一个新文件,尚未被Git跟踪。
|
|
50
50
|
添加到暂存区后可以提交该文件。`}catch(se){console.error("获取未跟踪文件内容失败:",se),g.value=`这是一个新文件,尚未被Git跟踪。
|
|
51
|
-
添加到暂存区后可以提交该文件。`}else if(N&&N.type==="added"){const oe=await(await fetch(`/api/diff-cached?file=${encodeURIComponent(O)}`)).json();g.value=oe.diff||e("@13D1C:没有变更"),C.value=oe.stats||null}else{const oe=await(await fetch(`/api/diff?file=${encodeURIComponent(O)}`)).json();g.value=oe.diff||e("@13D1C:没有变更"),C.value=oe.stats||null}}catch(N){r({message:"获取文件差异失败: "+N.message,type:"error"}),g.value="获取差异失败: "+N.message}finally{B.value=!1}}function he(O){if(S.value=!0,u.fileList.length>0){const N=u.fileList.find(se=>se.path===O.path)||u.fileList[0];fe(N.path)}}async function we(O){await u.addFileToStage(O)}async function $e(O){await u.unstageFile(O)}async function Ne(){try{if(!u.isGitRepo)return;await u.fetchStatus(),await u.getBranchStatus(!0),r.success(e("@13D1C:Git 状态已刷新"))}catch(O){r.error("刷新失败: "+O.message)}}async function Le(){try{await u.gitPull(),await W()}catch(O){console.error("拉取操作发生错误:",O)}}const xe=h(!1);async function ue(){if(!u.currentBranch){r.warning(e("@13D1C:未知当前分支"));return}try{xe.value=!0;const O=`git push -u origin ${u.currentBranch}`,se=await(await fetch("/api/exec",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:O})})).json();se.success?(r.success(e("@13D1C:已推送并设置上游分支")),await u.getAllBranches(),await u.getCurrentBranch(!0),await u.getBranchStatus(!0)):r.error(se.error||e("@13D1C:设置上游失败"))}catch(O){r.error(`${e("@13D1C:设置上游失败: ")}${O.message}`)}finally{xe.value=!1}}async function $(O){try{await Ie.confirm(`${e('@13D1C:确定要撤回文件 "')}${O}${e('@13D1C:" 的所有修改吗?此操作无法撤销。')}`,e("@13D1C:撤回修改"),{confirmButtonText:e("@13D1C:确定"),cancelButtonText:e("@13D1C:取消"),type:"warning"});const se=await(await fetch("/api/revert_file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:O})})).json();se.success?(r.success(e("@13D1C:已撤回文件修改")),await W()):r.error(se.error?`${e("@13D1C:撤回失败: ")}${se.error}`:e("@13D1C:撤回文件修改失败,请重试"))}catch(N){if(N==="cancel"||N.message==="cancel")return;const se=N.message||e("@13D1C:未知错误");se!=="undefined"?r.error(`${e("@13D1C:撤回文件修改失败: ")}${se}`):r.error(e("@13D1C:撤回文件修改失败,请重试"))}}function U(O){const N=O.split("/");return N[N.length-1]}function ne(O){const N=O.split("/");return N.length<=1?"":N.slice(0,-1).join("/")}function ce(O){const N=O.replace(/\\/g,"/");return p.lockedFiles.some(oe=>{const ge=oe.replace(/\\/g,"/");return N===ge})}async function M(O){if(!w.value[O]){w.value[O]=!0;try{ce(O)?await p.unlockFile(O):await p.lockFile(O)}finally{delete w.value[O]}}}function A(O){ie.value[O]=!ie.value[O]}const Q=h([]),le=h([]),me=h([]),de=h([]);function J(){const O=u.fileList.filter(I=>I.type==="conflicted").map(I=>({path:I.path,type:I.type,locked:ce(I.path)})),N=xt(O);Q.value.length>0&&zt(N,Q.value),Q.value=N;const se=u.fileList.filter(I=>I.type==="added").map(I=>({path:I.path,type:I.type,locked:ce(I.path)})),oe=xt(se);le.value.length>0&&zt(oe,le.value),le.value=oe;const ge=u.fileList.filter(I=>I.type==="modified"||I.type==="deleted").map(I=>({path:I.path,type:I.type,locked:ce(I.path)})),Oe=xt(ge);me.value.length>0&&zt(Oe,me.value),me.value=Oe;const P=u.fileList.filter(I=>I.type==="untracked").map(I=>({path:I.path,type:I.type,locked:ce(I.path)})),f=xt(P);de.value.length>0&&zt(f,de.value),de.value=f}return Ge(()=>u.fileList,()=>{Ce.value==="tree"&&J()},{deep:!0}),Ge(Ce,O=>{O==="tree"&&J(),localStorage.setItem(Hs,O),window.dispatchEvent(new CustomEvent("file-list-view-mode-change",{detail:{mode:O}}))}),pt(()=>{W(),p.loadConfig(),p.loadLockedFiles(),Ce.value==="tree"&&J();const O=ge=>{const P=ge.detail.mode;Ce.value!==P&&(Ce.value=P)},N=()=>{W(),d.value&&fe(d.value)};window.addEventListener("file-list-view-mode-change",O),window.addEventListener("git-status-refresh",N);const se=()=>{document.visibilityState==="visible"&&u.isGitRepo&&(console.log("[页面可见性] 标签页已激活,刷新Git状态和分支信息"),Promise.all([u.fetchStatus(),u.getBranchStatus()]).catch(ge=>console.error("刷新失败:",ge)))},oe=()=>{u.isGitRepo&&(console.log("[窗口焦点] 浏览器窗口已激活,刷新Git状态和分支信息"),Promise.all([u.fetchStatus(),u.getBranchStatus()]).catch(ge=>console.error("刷新失败:",ge)))};return document.addEventListener("visibilitychange",se),window.addEventListener("focus",oe),()=>{window.removeEventListener("file-list-view-mode-change",O),window.removeEventListener("git-status-refresh",N),document.removeEventListener("visibilitychange",se),window.removeEventListener("focus",oe)}}),T({refreshStatus:Ne}),(O,N)=>{const se=Pe,oe=Ee,ge=Ct,Oe=Re,P=Vt;return n(),v(be,null,[s("div",pp,[s("div",fp,[o(ui,{onToggleNpmPanel:V}),s("div",mp,[s("div",vp,[o(Fe,{tooltip:t(e)("@13D1C:Git Pull (拉取远程更新)"),size:"large","hover-color":"var(--color-primary)",disabled:!t(u).hasUpstream||t(u).isGitPulling,onClick:Le},{default:a(()=>[t(u).isGitPulling?(n(),H(se,{key:0,class:"is-loading"},{default:a(()=>[o(t(et))]),_:1})):(n(),H(We,{key:1,"icon-class":"git-pull-request"}))]),_:1},8,["tooltip","disabled"]),o(fo),o(mo,{from:"status"}),t(u).fileList.length>0?(n(),H(Fe,{key:0,tooltip:L.value?t(e)("@13D1C:退出选择模式"):t(e)("@13D1C:选择文件进行储藏"),size:"large",active:L.value,"hover-color":"var(--color-primary)",onClick:F},{default:a(()=>[o(We,{"icon-class":"muti-choose"})]),_:1},8,["tooltip","active"])):z("",!0),L.value&&E.value.size>0?(n(),H(Fc,{key:1,"selected-files":Z.value,onSuccess:F},null,8,["selected-files"])):z("",!0),L.value?z("",!0):(n(),H(co,{key:2})),o(uo)]),s("div",hp,[o(Vd,{variant:"icon"}),o(dp),o(Fe,{tooltip:t(e)("@13D1C:刷新状态"),size:"large",disabled:c.value,onClick:Ne},{default:a(()=>[c.value?(n(),H(se,{key:0,class:"is-loading"},{default:a(()=>[o(t(et))]),_:1})):(n(),H(se,{key:1},{default:a(()=>[o(t(Ps))]),_:1}))]),_:1},8,["tooltip","disabled"])])])]),at((n(),v("div",{class:"card-content","element-loading-text":t(u).isGitPulling?t(e)("@13D1C:正在拉取代码..."):t(e)("@13D1C:正在获取远程分支信息...")},[t(u).isGitRepo?(n(),v("div",_p,[t(u).hasUpstream?z("",!0):(n(),v("div",bp,[s("div",wp,[o(se,{class:"tip-icon"},{default:a(()=>[o(t(dt))]),_:1}),s("span",$p,i(t(e)("@13D1C:当前分支未设置上游分支")),1)]),s("div",kp,[s("div",Sp,i(t(e)("@13D1C:首次推送后即可建立与远程的跟踪关系,后续可直接 pull/push。")),1),s("div",Bp,[o(oe,{size:"small",type:"primary",plain:"",loading:xe.value,disabled:xe.value,onClick:ue},{default:a(()=>[R(i(t(e)("@13D1C:设置上游并推送")),1)]),_:1},8,["loading","disabled"])])])])),t(u).hasUpstream&&(t(u).branchAhead>0||t(u).branchBehind>0)?(n(),v("div",Fp,[s("div",Ap,[s("div",Tp,[o(Oe,{content:t(e)("@13D1C:本地分支与远程分支的状态对比"),placement:"top","show-after":200},{default:a(()=>[s("div",Dp,[t(u).branchAhead>0?(n(),H(ge,{key:0,size:"small",type:"warning",class:"status-badge"},{default:a(()=>[s("span",Mp,[o(se,null,{default:a(()=>[o(t(Zs))]),_:1}),R(" 你的分支领先 'origin/"+i(t(u).currentBranch)+"' "+i(t(u).branchAhead)+" "+i(t(e)("@13D1C:个提交")),1)])]),_:1})):z("",!0),t(u).branchBehind>0?(n(),H(ge,{key:1,size:"small",type:"info",class:"status-badge"},{default:a(()=>[s("span",Pp,[o(se,null,{default:a(()=>[o(t(vt))]),_:1}),R(" 你的分支落后 'origin/"+i(t(u).currentBranch)+"' "+i(t(u).branchBehind)+" "+i(t(e)("@13D1C:个提交")),1)])]),_:1})):z("",!0)])]),_:1},8,["content"])])])])):z("",!0),t(u).fileList.length?(n(),v("div",Vp,[s("div",Ep,[s("div",Op,[s("h4",null,i(t(e)("@13D1C:文件列表")),1),t(u).fileList.length>0?(n(),v("span",Np,"("+i(t(u).fileList.length)+")",1)):z("",!0)]),s("div",Gp,[o(Fe,{tooltip:t(e)("@E80AC:列表视图"),size:"small",active:Ce.value==="list",onClick:N[0]||(N[0]=f=>Ce.value="list")},{default:a(()=>[o(ro,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"]),o(Fe,{tooltip:t(e)("@E80AC:树状视图"),size:"small",active:Ce.value==="tree",onClick:N[1]||(N[1]=f=>Ce.value="tree")},{default:a(()=>[o(io,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"])])]),L.value?(n(),v("div",Lp,[s("div",Rp,[s("span",xp,[R(i(t(e)("@13D1C:已选中"))+" ",1),s("strong",null,i(E.value.size),1),R(" "+i(t(e)("@13D1C:个文件")),1)])]),s("div",zp,[o(oe,{size:"small",type:"primary",plain:"",onClick:G},{default:a(()=>[R(i(E.value.size===t(u).fileList.length?t(e)("@13D1C:取消全选"):t(e)("@13D1C:全选")),1)]),_:1})])])):z("",!0),s("div",Hp,[Ce.value==="list"?(n(),v(be,{key:0},[o(ts,{files:t(u).fileList.filter(f=>f.type==="conflicted"),title:t(e)("@13D1C:冲突文件"),"group-key":"conflicted","collapsed-groups":ie.value,"is-file-locked":ce,"is-locking":y,"get-file-name":U,"get-file-directory":ne,"is-selection-mode":L.value,"is-file-selected":q,onToggleCollapse:A,onFileClick:he,onToggleFileLock:M,onToggleFileSelection:m,onStageFile:we,onRevertFileChanges:$},null,8,["files","title","collapsed-groups","is-selection-mode"]),o(ts,{files:t(u).fileList.filter(f=>f.type==="added"),title:t(e)("@13D1C:已暂存的更改"),"group-key":"staged","collapsed-groups":ie.value,"is-file-locked":ce,"is-locking":y,"get-file-name":U,"get-file-directory":ne,"is-selection-mode":L.value,"is-file-selected":q,onToggleCollapse:A,onFileClick:he,onToggleFileLock:M,onToggleFileSelection:m,onUnstageFile:$e},null,8,["files","title","collapsed-groups","is-selection-mode"]),o(ts,{files:t(u).fileList.filter(f=>f.type==="modified"||f.type==="deleted"),title:t(e)("@13D1C:未暂存的更改"),"group-key":"unstaged","collapsed-groups":ie.value,"is-file-locked":ce,"is-locking":y,"get-file-name":U,"get-file-directory":ne,"is-selection-mode":L.value,"is-file-selected":q,onToggleCollapse:A,onFileClick:he,onToggleFileLock:M,onToggleFileSelection:m,onStageFile:we,onRevertFileChanges:$,onManageLockedFiles:N[2]||(N[2]=f=>j.value=!0)},null,8,["files","title","collapsed-groups","is-selection-mode"]),o(ts,{files:t(u).fileList.filter(f=>f.type==="untracked"),title:t(e)("@13D1C:未跟踪的文件"),"group-key":"untracked","collapsed-groups":ie.value,"is-file-locked":ce,"is-locking":y,"get-file-name":U,"get-file-directory":ne,"is-selection-mode":L.value,"is-file-selected":q,onToggleCollapse:A,onFileClick:he,onToggleFileLock:M,onToggleFileSelection:m,onStageFile:we,onRevertFileChanges:$,onManageLockedFiles:N[3]||(N[3]=f=>j.value=!0)},null,8,["files","title","collapsed-groups","is-selection-mode"])],64)):(n(),v(be,{key:1},[t(u).fileList.filter(f=>f.type==="conflicted").length?(n(),v("div",Ip,[s("div",{class:"tree-group-header",onClick:N[4]||(N[4]=f=>A("conflicted"))},[o(se,{class:ke(["collapse-icon",{collapsed:ie.value.conflicted}])},{default:a(()=>[o(t(vt))]),_:1},8,["class"]),s("h5",null,i(t(e)("@13D1C:冲突文件")),1),s("span",jp,i(t(u).fileList.filter(f=>f.type==="conflicted").length),1)]),ie.value.conflicted?z("",!0):(n(),H(Ht,{key:0,"tree-data":Q.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":ce,"is-locking":y,onFileSelect:N[5]||(N[5]=f=>he({path:f})),onToggleLock:M,onStage:we,onRevert:$},null,8,["tree-data"]))])):z("",!0),t(u).fileList.filter(f=>f.type==="added").length?(n(),v("div",Up,[s("div",{class:"tree-group-header",onClick:N[6]||(N[6]=f=>A("staged"))},[o(se,{class:ke(["collapse-icon",{collapsed:ie.value.staged}])},{default:a(()=>[o(t(vt))]),_:1},8,["class"]),s("h5",null,i(t(e)("@13D1C:已暂存的更改")),1),s("span",Wp,i(t(u).fileList.filter(f=>f.type==="added").length),1)]),ie.value.staged?z("",!0):(n(),H(Ht,{key:0,"tree-data":le.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":ce,"is-locking":y,onFileSelect:N[7]||(N[7]=f=>he({path:f})),onToggleLock:M,onUnstage:$e},null,8,["tree-data"]))])):z("",!0),t(u).fileList.filter(f=>f.type==="modified"||f.type==="deleted").length?(n(),v("div",Jp,[s("div",{class:"tree-group-header",onClick:N[8]||(N[8]=f=>A("unstaged"))},[o(se,{class:ke(["collapse-icon",{collapsed:ie.value.unstaged}])},{default:a(()=>[o(t(vt))]),_:1},8,["class"]),s("h5",null,i(t(e)("@13D1C:未暂存的更改")),1),s("span",qp,i(t(u).fileList.filter(f=>f.type==="modified"||f.type==="deleted").length),1)]),ie.value.unstaged?z("",!0):(n(),H(Ht,{key:0,"tree-data":me.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":ce,"is-locking":y,onFileSelect:N[9]||(N[9]=f=>he({path:f})),onToggleLock:M,onStage:we,onRevert:$},null,8,["tree-data"]))])):z("",!0),t(u).fileList.filter(f=>f.type==="untracked").length?(n(),v("div",Kp,[s("div",{class:"tree-group-header",onClick:N[10]||(N[10]=f=>A("untracked"))},[o(se,{class:ke(["collapse-icon",{collapsed:ie.value.untracked}])},{default:a(()=>[o(t(vt))]),_:1},8,["class"]),s("h5",null,i(t(e)("@13D1C:未跟踪的文件")),1),s("span",Yp,i(t(u).fileList.filter(f=>f.type==="untracked").length),1)]),ie.value.untracked?z("",!0):(n(),H(Ht,{key:0,"tree-data":de.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":ce,"is-locking":y,onFileSelect:N[11]||(N[11]=f=>he({path:f})),onToggleLock:M,onStage:we,onRevert:$},null,8,["tree-data"]))])):z("",!0)],64))])])):t(u).isGitRepo?(n(),v("div",Qp,[s("div",Zp,[o(se,null,{default:a(()=>[o(t(Ts))]),_:1})]),s("div",Xp,i(t(e)("@13D1C:没有检测到任何更改")),1),s("div",e1,i(t(e)("@13D1C:工作区是干净的")),1)])):z("",!0)])):(n(),v("div",Cp,[s("div",yp,[s("p",null,i(t(e)("@13D1C:当前目录不是Git仓库")),1)])]))],8,gp)),[[P,t(u).isGitPulling||t(u).isGitFetching]]),o(mr,{visible:k.value,onClose:N[12]||(N[12]=f=>k.value=!1)},null,8,["visible"])]),o(Ue,{modelValue:S.value,"onUpdate:modelValue":N[13]||(N[13]=f=>S.value=f),title:t(e)("@13D1C:文件差异"),"custom-class":"file-diff-dialog",size:"extra-large",type:"flex","destroy-on-close":"",heightMode:"fixed"},{default:a(()=>[o(Ns,{files:X.value,diffContent:g.value,diffStats:C.value,selectedFile:d.value,isLoading:B.value,showActionButtons:!0,isFileLocked:ce,isLocking:y,context:"git-status",emptyText:t(e)("@13D1C:选择文件查看差异"),onFileSelect:x,onOpenFile:b,onOpenWithVscode:D,onToggleLock:M,onStage:we,onUnstage:$e,onRevert:$},null,8,["files","diffContent","diffStats","selectedFile","isLoading","emptyText"])]),_:1},8,["modelValue","title"]),o(Ue,{modelValue:j.value,"onUpdate:modelValue":N[14]||(N[14]=f=>j.value=f),title:t(e)("@13D1C:锁定文件管理"),size:"large","destroy-on-close":""},{default:a(()=>[s("div",t1,[s("div",s1,[o(se,{class:"description-icon"},{default:a(()=>[o(t(dt))]),_:1}),s("span",o1,i(t(e)("@13D1C:文件锁定功能说明")),1)]),s("div",a1,[s("ul",null,[s("li",null,i(t(e)("@13D1C:锁定的文件在执行 Git 提交时会被自动跳过,不会被添加到暂存区")),1)])])]),t(p).lockedFiles.length===0?(n(),v("div",n1,[s("div",l1,[o(se,null,{default:a(()=>[o(t(is))]),_:1})]),s("p",null,i(t(e)("@13D1C:当前没有锁定的文件")),1),s("p",i1,i(t(e)("@13D1C:您可以在文件列表中点击锁定按钮来锁定文件")),1)])):(n(),v("div",r1,[s("div",c1,[s("span",null,"🔒 已锁定 "+i(t(p).lockedFiles.length)+" "+i(t(e)("@13D1C:个文件")),1),o(Oe,{content:t(e)("@13D1C:这些文件在提交时会被自动跳过"),placement:"top"},{default:a(()=>[o(se,{class:"info-icon"},{default:a(()=>[o(t(dt))]),_:1})]),_:1},8,["content"]),N[15]||(N[15]=s("div",{style:{flex:"1"}},null,-1)),o(oe,{type:"danger",size:"small",plain:"",disabled:!t(p).lockedFiles.length,onClick:ae},{default:a(()=>[R(i(t(e)("@13D1C:清空全部锁定")),1)]),_:1},8,["disabled"])]),s("div",u1,[(n(!0),v(be,null,Me(t(p).lockedFiles,f=>(n(),v("div",{key:f,class:"locked-file-item"},[s("div",d1,[N[16]||(N[16]=s("div",{class:"file-status-indicator locked"},null,-1)),s("div",p1,[s("span",f1,i(U(f)),1),s("span",m1,i(ne(f)),1)])]),s("div",v1,[o(Fe,{tooltip:t(e)("@13D1C:解锁文件"),size:"small","hover-color":"var(--color-danger)","custom-class":"file-action-btn",onClick:I=>Y(f)},{default:a(()=>[o(se,null,{default:a(()=>[o(t(Us))]),_:1})]),_:2},1032,["tooltip","onClick"])])]))),128))])]))]),_:1},8,["modelValue","title"])],64)}}}),g1=De(h1,[["__scopeId","data-v-d638d681"]]),C1={class:"loading-container"},y1={class:"loading-text"},_1={key:0,class:"loading-progress"},b1=Se({__name:"GlobalLoading",props:{visible:{type:Boolean,default:!1},text:{default:e("@2AEBA:加载中...")},showProgress:{type:Boolean,default:!1},progress:{default:0},mock:{type:Boolean,default:!1}},setup(K){return(T,l)=>(n(),H(Xs,{to:"body"},[o(jt,{name:"loading-fade"},{default:a(()=>[T.visible||T.mock?(n(),v("div",{key:0,class:"global-loading-overlay",onClick:l[0]||(l[0]=Ze(()=>{},["stop"]))},[s("div",C1,[l[1]||(l[1]=s("div",{class:"loading-spinner"},[s("div",{class:"spinner-ring"}),s("div",{class:"spinner-ring"}),s("div",{class:"spinner-ring"})],-1)),s("div",y1,i(T.text),1),T.showProgress||T.mock?(n(),v("div",_1,[s("div",{class:ke(["progress-bar",{"is-mock":T.mock&&!T.showProgress}]),style:_t(T.showProgress?{width:T.progress+"%"}:void 0)},null,6)])):z("",!0)])])):z("",!0)]),_:1})]))}}),w1=De(b1,[["__scopeId","data-v-8b7cb8f0"]]),$1={class:"success-container"},k1={class:"success-text"},S1={key:0,class:"success-description"},B1=Se({__name:"SuccessModal",props:{visible:{type:Boolean,default:!1},text:{default:e("@71545:操作成功!")},description:{default:""}},setup(K){return(T,l)=>(n(),H(Xs,{to:"body"},[o(jt,{name:"success-fade"},{default:a(()=>[T.visible?(n(),v("div",{key:0,class:"success-overlay",onClick:l[0]||(l[0]=Ze(()=>{},["stop"]))},[s("div",$1,[l[1]||(l[1]=s("div",{class:"success-icon"},[s("svg",{viewBox:"0 0 52 52",class:"success-svg"},[s("circle",{class:"success-circle",cx:"26",cy:"26",r:"25",fill:"none"}),s("path",{class:"success-check",fill:"none",d:"m14.1 27.2l7.1 7.2 16.7-16.8"})])],-1)),s("div",k1,i(T.text),1),T.description?(n(),v("div",S1,i(T.description),1)):z("",!0)])])):z("",!0)]),_:1})]))}}),F1=De(B1,[["__scopeId","data-v-b10e1ad6"]]),mt=Ms({visible:!1,text:e("@F2A3A:加载中..."),showProgress:!1,progress:0});function A1(){return{loadingState:mt,show:c=>{mt.visible=!0,mt.text=(c==null?void 0:c.text)||e("@F2A3A:加载中..."),mt.showProgress=(c==null?void 0:c.showProgress)||!1,mt.progress=(c==null?void 0:c.progress)||0},hide:()=>{mt.visible=!1},updateProgress:c=>{mt.progress=Math.max(0,Math.min(100,c))},updateText:c=>{mt.text=c},setText:c=>{mt.visible&&(mt.text=c)}}}const Gt=Ms({visible:!1,text:e("@B8591:操作成功!"),description:""});function T1(){const K=l=>{Gt.visible=!0,Gt.text=(l==null?void 0:l.text)||e("@B8591:操作成功!"),Gt.description=(l==null?void 0:l.description)||"";const u=(l==null?void 0:l.duration)||2e3;setTimeout(()=>{T()},u)},T=()=>{Gt.visible=!1};return{successState:Gt,show:K,hide:T}}const D1={class:"template-form"},M1={class:"template-form-buttons"},P1={key:0,class:"template-list"},V1={key:1,class:"template-list-scroll"},E1={class:"template-content"},O1={class:"template-actions"},N1={key:1,class:"templates-container"},G1={class:"message-templates-list"},L1={class:"templates-scroll-area"},R1={class:"template-content"},x1={class:"template-actions"},z1={key:0,class:"current-default-message"},H1={class:"default-message-content"},I1={key:2,class:"message-help-text"},j1=Se({__name:"TemplateManager",props:{visible:{type:Boolean},type:{},title:{},placeholder:{default:e("@60CAC:输入新模板内容")},editPlaceholder:{default:e("@60CAC:编辑模板内容")},emptyDescription:{default:e("@60CAC:暂无保存的模板")},showDefaultSection:{type:Boolean,default:!1},showHelpText:{type:Boolean,default:!1}},emits:["update:visible","use-template","set-default"],setup(K,{expose:T,emit:l}){const u=K,p=l,c=Qe(),d=h(""),g=h(!1),C=h(""),S=h(-1),B=h(!1),_=h(!1),w=h(!1),y=pe(()=>{switch(u.type){case"description":return c.descriptionTemplates||[];case"scope":return c.scopeTemplates||[];case"message":return c.messageTemplates||[];default:return[]}}),k=pe(()=>u.type==="message"?c.defaultCommitMessage:""),V=pe(()=>g.value?u.editPlaceholder:u.placeholder),E=pe(()=>g.value?e("@60CAC:更新模板"):e("@60CAC:添加模板")),L=pe({get:()=>u.visible,set:D=>p("update:visible",D)});Ge(L,D=>{D||F()});function F(){d.value="",g.value=!1,C.value="",S.value=-1}async function m(){if(!d.value.trim()){r.warning(e("@60CAC:模板内容不能为空"));return}try{B.value=!0,g.value?await c.updateTemplate(C.value,d.value,u.type)&&F():await c.saveTemplate(d.value,u.type)&&(d.value="")}catch(D){r.error(`${e("@60CAC:模板保存失败: ")}${D.message}`)}finally{B.value=!1}}function G(D){p("use-template",D),u.type!=="message"&&(L.value=!1)}function q(D,j){g.value=!0,C.value=D,d.value=D,S.value=j}function Z(){F()}async function X(D){try{w.value=!0;const j=await c.pinTemplate(D,u.type)}catch(j){r.error(`${e("@60CAC:置顶模板失败: ")}${j.message}`)}finally{w.value=!1}}async function x(D){try{const j=await c.deleteTemplate(D,u.type)}catch(j){r.error(`${e("@60CAC:模板删除失败: ")}${j.message}`)}}async function b(){if(!(u.type!=="message"||!d.value.trim()))try{_.value=!0,await c.saveDefaultMessage(d.value)&&p("set-default",d.value)}catch(D){r.error(`${e("@60CAC:设置默认提交信息失败: ")}${D.message}`)}finally{_.value=!1}}return T({resetForm:F}),(D,j)=>{const ie=Ye,ve=Ee,Ce=ot,re=We,W=Go,Y=eo,ae=Ct;return n(),H(Ue,{modelValue:L.value,"onUpdate:modelValue":j[1]||(j[1]=fe=>L.value=fe),title:D.title,"close-on-click-modal":!1,"custom-class":D.type==="message"?"message-template-dialog":"template-dialog"},{default:a(()=>[s("div",{class:ke(["template-container",{"message-template-container":D.type==="message"}])},[s("div",D1,[o(ie,{modelValue:d.value,"onUpdate:modelValue":j[0]||(j[0]=fe=>d.value=fe),placeholder:V.value,class:"template-input",clearable:"",onKeyup:Ut(m,["enter"])},null,8,["modelValue","placeholder"]),s("div",M1,[g.value?(n(),H(ve,{key:0,onClick:Z},{default:a(()=>[R(i(t(e)("@60CAC:取消")),1)]),_:1})):z("",!0),o(ve,{type:"primary",onClick:m,disabled:!d.value.trim()||B.value,loading:B.value},{default:a(()=>[R(i(E.value),1)]),_:1},8,["disabled","loading"]),D.type==="message"?(n(),H(ve,{key:1,type:"success",onClick:b,disabled:!d.value.trim()||_.value,loading:_.value,plain:""},{default:a(()=>[R(i(t(e)("@60CAC:设为默认提交信息")),1)]),_:1},8,["disabled","loading"])):z("",!0)])]),D.type!=="message"?(n(),v("div",P1,[s("h3",null,i(t(e)("@60CAC:已保存"))+i(D.type==="description"?t(e)("@60CAC:模板"):t(e)("@60CAC:作用域")),1),y.value.length===0?(n(),H(Ce,{key:0,description:D.emptyDescription},null,8,["description"])):(n(),v("div",V1,[(n(!0),v(be,null,Me(y.value,(fe,he)=>(n(),H(Y,{key:he,class:"template-item"},{default:a(()=>[o(W,{justify:"space-between",align:"middle",style:{width:"100%"}},{default:a(()=>[s("div",E1,i(fe),1),s("div",O1,[o(ve,{size:"small",class:"pin-button",onClick:we=>X(fe),loading:w.value,disabled:he===0,title:"置顶"},{default:a(()=>[o(re,{"icon-class":"pin","class-name":"pin-icon"})]),_:2},1032,["onClick","loading","disabled"]),o(ve,{type:"primary",size:"small",onClick:we=>G(fe)},{default:a(()=>[R(i(t(e)("@60CAC:使用")),1)]),_:2},1032,["onClick"]),o(ve,{type:"warning",size:"small",icon:t(wt),onClick:we=>q(fe,he)},{default:a(()=>[R(i(t(e)("@60CAC:编辑")),1)]),_:2},1032,["icon","onClick"]),o(ve,{type:"danger",size:"small",onClick:we=>x(fe)},{default:a(()=>[R(i(t(e)("@60CAC:删除")),1)]),_:2},1032,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]))])):(n(),v("div",N1,[s("div",G1,[s("h3",null,i(t(e)("@60CAC:已保存模板")),1),s("div",L1,[y.value.length===0?(n(),H(Ce,{key:0,description:D.emptyDescription},null,8,["description"])):z("",!0),(n(!0),v(be,null,Me(y.value,(fe,he)=>(n(),H(Y,{key:he,class:"template-item"},{default:a(()=>[o(W,{justify:"space-between",align:"middle",style:{width:"100%"}},{default:a(()=>[s("div",R1,i(fe),1),s("div",x1,[o(ve,{size:"small",class:"pin-button",onClick:we=>X(fe),loading:w.value,disabled:he===0,title:"置顶"},{default:a(()=>[o(re,{"icon-class":"pin","class-name":"pin-icon"})]),_:2},1032,["onClick","loading","disabled"]),o(ve,{type:"primary",size:"small",onClick:we=>G(fe)},{default:a(()=>[R(i(t(e)("@60CAC:使用")),1)]),_:2},1032,["onClick"]),o(ve,{type:"warning",size:"small",icon:t(wt),onClick:we=>q(fe,he)},{default:a(()=>[R(i(t(e)("@60CAC:编辑")),1)]),_:2},1032,["icon","onClick"]),o(ve,{type:"danger",size:"small",onClick:we=>x(fe)},{default:a(()=>[R(i(t(e)("@60CAC:删除")),1)]),_:2},1032,["onClick"])])]),_:2},1024)]),_:2},1024))),128))])]),D.showDefaultSection?(n(),v("div",z1,[s("h3",null,i(t(e)("@60CAC:当前默认提交信息")),1),k.value?(n(),H(Y,{key:0,class:"default-message-card"},{default:a(()=>[s("div",H1,i(k.value),1)]),_:1})):(n(),H(Ce,{key:1,description:t(e)("@60CAC:尚未设置默认提交信息"),"image-size":100},null,8,["description"])),D.showHelpText?(n(),v("div",I1,[s("h4",null,i(t(e)("@60CAC:关于默认提交信息")),1),s("p",null,i(t(e)("@60CAC:默认提交信息将在未输入提交信息时自动使用。")),1),s("p",null,[R(i(t(e)("@60CAC:你可以通过点击左侧模板的")),1),o(ae,{size:"small",type:"primary"},{default:a(()=>[R(i(t(e)("@60CAC:使用")),1)]),_:1}),R(i(t(e)("@60CAC:按钮先选择喜欢的模板,然后点击上方")),1),o(ae,{size:"small",type:"success"},{default:a(()=>[R(i(t(e)("@60CAC:设为默认提交信息")),1)]),_:1}),R(i(t(e)("@60CAC:按钮保存。")),1)])])):z("",!0)])):z("",!0)]))],2)]),_:1},8,["modelValue","title","custom-class"])}}}),_s=De(j1,[["__scopeId","data-v-7b44f967"]]),U1={class:"form-bottom-actions"},W1={class:"actions-flex-container"},J1={class:"left-actions"},q1={class:"button-grid"},K1={class:"right-actions"},Y1=Se({__name:"GitActionButtons",props:{hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:""},skipHooks:{type:Boolean,default:!1},from:{default:"form"}},emits:["afterCommit","afterPush","beforePush","clearFields"],setup(K,{expose:T,emit:l}){const u=l,p=h(null);function c(B){u("afterCommit",B)}function d(B){u("afterPush",B)}function g(){u("beforePush")}function C(){u("clearFields")}async function S(){var B;return(B=p.value)==null?void 0:B.triggerQuickPush()}return T({triggerQuickPush:S}),(B,_)=>(n(),v("div",U1,[s("div",W1,[s("div",J1,[s("div",q1,[o(vo,{onClick:()=>{},from:B.from},null,8,["from"]),o(ho,{"has-user-commit-message":B.hasUserCommitMessage,"final-commit-message":B.finalCommitMessage,"skip-hooks":B.skipHooks,onBeforeCommit:()=>{},onAfterCommit:c,onClick:()=>{},from:B.from},null,8,["has-user-commit-message","final-commit-message","skip-hooks","from"]),o(Co,{onBeforePush:()=>{},onAfterPush:d,onClick:()=>{},from:B.from},null,8,["from"])])]),s("div",K1,[o(yo,{ref_key:"quickPushRef",ref:p,from:B.from,"has-user-commit-message":B.hasUserCommitMessage,"final-commit-message":B.finalCommitMessage,"skip-hooks":B.skipHooks,onBeforePush:g,onAfterPush:d,onClearFields:C},null,8,["from","has-user-commit-message","final-commit-message","skip-hooks"])])])]))}}),Q1=De(Y1,[["__scopeId","data-v-495f5dbc"]]),Z1={class:"option-header"},X1={class:"option-info"},ef={class:"option-title"},tf=Se({__name:"OptionSwitchCard",props:{modelValue:{type:Boolean},title:{},tooltip:{},activeText:{},inactiveText:{},activeColor:{},iconClass:{},compact:{type:Boolean}},emits:["update:modelValue"],setup(K,{emit:T}){const l=K,u=T;function p(c){u("update:modelValue",c)}return(c,d)=>{const g=us,C=Re;return n(),v("div",{class:ke(["option-card",{compact:l.compact}])},[o(C,{content:c.tooltip,placement:"top","show-after":200},{default:a(()=>[s("div",Z1,[s("div",{class:ke(["option-icon",c.iconClass])},[bt(c.$slots,"icon",{},void 0,!0)],2),s("div",X1,[s("h4",ef,i(c.title),1)]),o(g,{class:"option-switch","model-value":c.modelValue,"onUpdate:modelValue":p,"active-text":c.activeText,"inactive-text":c.inactiveText,"active-color":c.activeColor,size:"small"},null,8,["model-value","active-text","inactive-text","active-color"])])]),_:3},8,["content"])],2)}}}),Lt=De(tf,[["__scopeId","data-v-7af4d883"]]),sf={class:"command-container"},of={class:"command-form"},af={class:"form-row form-row-compact"},nf={class:"form-field form-field-half"},lf={class:"required"},rf={class:"form-field form-field-half"},cf={class:"form-row"},uf={class:"form-field"},df={class:"directory-input-group"},pf={class:"form-row"},ff={class:"form-field"},mf={class:"required"},vf={class:"form-buttons"},hf={class:"command-list"},gf={key:1,class:"command-list-scroll"},Cf={class:"name-cell"},yf={class:"name-text"},_f={key:0,class:"description-text"},bf={class:"command-text"},wf={class:"directory-text"},$f={class:"action-buttons"},kf=Se({__name:"CustomCommandManager",props:{visible:{type:Boolean}},emits:["update:visible","execute-command"],setup(K,{expose:T,emit:l}){const u=K,p=l,c=Qe(),d=h({name:"",description:"",directory:"",command:""}),g=h(!1),C=h(""),S=h(!1),B=h([]),_=pe(()=>c.customCommands||[]),w=pe({get:()=>u.visible,set:X=>p("update:visible",X)});Ge(w,X=>{X||y()});function y(){d.value={name:"",description:"",directory:"",command:""},g.value=!1,C.value=""}async function k(){if(!d.value.name.trim()){r.warning(e("@CMD01:命令名称不能为空"));return}if(!d.value.command.trim()){r.warning(e("@CMD01:命令内容不能为空"));return}try{S.value=!0,g.value?await c.updateCustomCommand(C.value,d.value)&&y():((!d.value.directory||!d.value.directory.trim())&&(d.value.directory=c.currentDirectory||""),await c.saveCustomCommand(d.value)&&y())}catch(X){r.error(`${e("@CMD01:命令保存失败: ")}${X.message}`)}finally{S.value=!1}}function V(X){g.value=!0,C.value=X.id||"",d.value={name:X.name,description:X.description||"",directory:X.directory,command:X.command}}function E(){y()}async function L(X){try{await Ie.confirm(e("@CMD01:确定要删除这个自定义命令吗?"),e("@CMD01:删除确认"),{confirmButtonText:e("@CMD01:确定"),cancelButtonText:e("@CMD01:取消"),type:"warning"}),await c.deleteCustomCommand(X)}catch{}}function F(X){p("execute-command",X)}function m(){d.value.directory=c.currentDirectory||""}async function G(){try{const x=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:d.value.directory||c.currentDirectory})})).json();x.success?q(x):x.error&&r.error(x.error)}catch(X){r.error(`${e("@CMD01:浏览目录失败: ")}${X.message}`)}}function q(X){!X||!X.items||Ie.alert(Ve("div",{class:"directory-browser"},[Ve("div",{class:"current-path"},[Ve("span",{class:"path-label"},e("@CMD01:当前路径: ")),Ve("span",{class:"path-value"},X.path)]),Ve("div",{class:"directory-list"},[X.parentPath?Ve("div",{class:"directory-item parent-dir",onClick:()=>Z(X.parentPath)},[Ve("span",{class:"dir-icon"},Ve("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-warning)"}},[Ve("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ve("span",{class:"dir-name"},e("@CMD01:返回上级目录"))]):null,...X.items.map(x=>Ve("div",{class:"directory-item",onClick:()=>Z(x.path)},[Ve("span",{class:"dir-icon"},Ve("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-primary)"}},[Ve("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ve("span",{class:"dir-name"},x.name)]))])]),e("@CMD01:浏览并选择目录"),{confirmButtonText:e("@CMD01:确定"),customClass:"directory-browser-dialog",callback:x=>{x==="confirm"&&(d.value.directory=X.path)}})}async function Z(X){try{Ie.close(),setTimeout(async()=>{try{const b=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:X})})).json();b.success?q(b):b.error&&r.error(b.error)}catch(x){r.error(`${e("@CMD01:浏览目录失败: ")}${x.message}`)}},100)}catch(x){r.error(`${e("@CMD01:处理目录选择时出错: ")}${x.message}`)}}return T({resetForm:y}),(X,x)=>{const b=Ye,D=Ee,j=Pe,ie=Ro,ve=Lo,Ce=ot,re=ss,W=to;return n(),H(Ue,{modelValue:w.value,"onUpdate:modelValue":x[5]||(x[5]=Y=>w.value=Y),title:t(e)("@CMD01:自定义命令管理"),"close-on-click-modal":!1,"append-to-body":!0,"custom-class":"custom-command-dialog",size:"extra-large"},{default:a(()=>[s("div",sf,[o(ve,{modelValue:B.value,"onUpdate:modelValue":x[4]||(x[4]=Y=>B.value=Y),class:"command-form-collapse"},{default:a(()=>[o(ie,{title:g.value?t(e)("@CMD01:编辑命令"):t(e)("@CMD01:添加命令"),name:"addCommand"},{default:a(()=>[s("div",of,[s("div",af,[s("div",nf,[s("label",lf,i(t(e)("@CMD01:命令名称")),1),o(b,{modelValue:d.value.name,"onUpdate:modelValue":x[0]||(x[0]=Y=>d.value.name=Y),placeholder:t(e)("@CMD01:输入命令名称,例如: 拉取代码"),clearable:"",size:"default"},null,8,["modelValue","placeholder"])]),s("div",rf,[s("label",null,i(t(e)("@CMD01:描述")),1),o(b,{modelValue:d.value.description,"onUpdate:modelValue":x[1]||(x[1]=Y=>d.value.description=Y),placeholder:t(e)("@CMD01:可选,简要描述命令用途"),clearable:"",size:"default"},null,8,["modelValue","placeholder"])])]),s("div",cf,[s("div",uf,[s("label",null,i(t(e)("@CMD01:执行目录")),1),s("div",df,[o(b,{modelValue:d.value.directory,"onUpdate:modelValue":x[2]||(x[2]=Y=>d.value.directory=Y),placeholder:t(e)("@CMD01:留空使用当前目录"),clearable:"",size:"default"},null,8,["modelValue","placeholder"]),o(D,{onClick:m,type:"primary",plain:"",size:"small"},{default:a(()=>[R(i(t(e)("@CMD01:使用当前目录")),1)]),_:1}),o(D,{onClick:G,type:"info",plain:"",size:"small"},{default:a(()=>[o(j,null,{default:a(()=>[o(t(ut))]),_:1}),R(" "+i(t(e)("@CMD01:选择目录")),1)]),_:1})])])]),s("div",pf,[s("div",ff,[s("label",mf,i(t(e)("@CMD01:命令")),1),o(b,{modelValue:d.value.command,"onUpdate:modelValue":x[3]||(x[3]=Y=>d.value.command=Y),placeholder:t(e)("@CMD01:输入要执行的命令,例如: npm run build"),clearable:"",size:"default",onKeyup:Ut(k,["enter"])},null,8,["modelValue","placeholder"])])]),s("div",vf,[g.value?(n(),H(D,{key:0,onClick:E,size:"default"},{default:a(()=>[R(i(t(e)("@CMD01:取消")),1)]),_:1})):z("",!0),o(D,{type:"primary",onClick:k,disabled:!d.value.name.trim()||!d.value.command.trim()||S.value,loading:S.value,size:"default"},{default:a(()=>[R(i(g.value?t(e)("@CMD01:更新命令"):t(e)("@CMD01:添加命令")),1)]),_:1},8,["disabled","loading"])])])]),_:1},8,["title"])]),_:1},8,["modelValue"]),s("div",hf,[s("h3",null,i(t(e)("@CMD01:已保存的命令")),1),_.value.length===0?(n(),H(Ce,{key:0,description:t(e)("@CMD01:暂无保存的命令")},null,8,["description"])):(n(),v("div",gf,[o(W,{data:_.value,style:{width:"100%"},stripe:""},{default:a(()=>[o(re,{prop:"name",label:t(e)("@CMD01:命令名称"),"min-width":"80"},{default:a(Y=>[s("div",Cf,[s("span",yf,i(Y.row.name),1),Y.row.description?(n(),v("span",_f,i(Y.row.description),1)):z("",!0)])]),_:1},8,["label"]),o(re,{prop:"command",label:t(e)("@CMD01:命令"),"min-width":"200"},{default:a(Y=>[s("code",bf,i(Y.row.command),1)]),_:1},8,["label"]),o(re,{prop:"directory",label:t(e)("@CMD01:执行目录"),"min-width":"200"},{default:a(Y=>[s("span",wf,i(Y.row.directory||t(e)("@CMD01:当前目录")),1)]),_:1},8,["label"]),o(re,{label:t(e)("@CMD01:操作"),width:"100",fixed:"right"},{default:a(Y=>[s("div",$f,[o(Fe,{tooltip:t(e)("@CMD01:执行命令"),size:"small","hover-color":"var(--color-success)",onClick:ae=>F(Y.row)},{default:a(()=>[o(j,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:2},1032,["tooltip","onClick"]),o(Fe,{tooltip:t(e)("@CMD01:编辑"),size:"small","hover-color":"var(--color-primary)",onClick:ae=>V(Y.row)},{default:a(()=>[o(j,null,{default:a(()=>[o(t(wt))]),_:1})]),_:2},1032,["tooltip","onClick"]),o(Fe,{tooltip:t(e)("@CMD01:删除"),size:"small","hover-color":"var(--color-danger)",onClick:ae=>L(Y.row.id)},{default:a(()=>[o(j,null,{default:a(()=>[o(t(it))]),_:1})]),_:2},1032,["tooltip","onClick"])])]),_:1},8,["label"])]),_:1},8,["data"])]))])])]),_:1},8,["modelValue","title"])}}}),Sf=De(kf,[["__scopeId","data-v-a133cd19"]]),Bf={class:"package-json-selector"},Ff={class:"selector-container"},Af={class:"option-content"},Tf={class:"option-main"},Df={class:"package-name"},Mf={class:"option-path"},Pf={key:0,class:"empty-hint"},Vf=Se({__name:"PackageJsonSelector",props:{modelValue:{},placeholder:{},clearable:{type:Boolean},disabled:{type:Boolean}},emits:["update:modelValue","change"],setup(K,{emit:T}){const l=K,u=T,p=h(!1),c=h([]),d=h(""),g=pe({get:()=>l.modelValue,set:y=>{d.value=y,u("update:modelValue",y);const k=c.value.find(V=>V.fullPath===y);u("change",k||null)}}),C=pe(()=>c.value.map(y=>({label:y.displayName,value:y.fullPath,relativePath:y.relativePath,version:y.version})));async function S(y){p.value=!0;try{const k=y?`/api/scan-package-files?directory=${encodeURIComponent(y)}`:"/api/scan-package-files",V=await fetch(k);if(!V.ok)throw new Error(`HTTP ${V.status}: ${V.statusText}`);const E=await V.json();if(E.success){c.value=E.packages||[],g.value&&!c.value.some(F=>F.fullPath===g.value)&&(g.value="");const L=y?`目录 ${y}`:"当前项目";r.success(`扫描 ${L} 完成,找到 ${c.value.length} 个 package.json 文件`)}else throw new Error(E.error||"扫描失败")}catch(k){console.error("扫描package.json文件失败:",k),r.error(`扫描失败: ${k.message}`),c.value=[]}finally{p.value=!1}}async function B(){try{const k=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:""})})).json();k.success?_(k):k.error&&r.error(k.error)}catch(y){r.error(`浏览目录失败: ${y.message}`)}}function _(y){!y||!y.items||Ie.alert(Ve("div",{class:"directory-browser"},[Ve("div",{class:"current-path"},[Ve("span",{class:"path-label"},"当前路径:"),Ve("span",{class:"path-value"},y.path)]),Ve("div",{class:"directory-list"},[y.parentPath?Ve("div",{class:"directory-item parent-dir",onClick:()=>w(y.parentPath)},[Ve("span",{class:"dir-icon"},Ve("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-warning)"}},[Ve("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ve("span",{class:"dir-name"},"返回上级目录")]):null,...y.items.map(k=>Ve("div",{class:"directory-item",onClick:()=>w(k.path)},[Ve("span",{class:"dir-icon"},Ve("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-primary)"}},[Ve("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ve("span",{class:"dir-name"},k.name)]))])]),"浏览并选择目录",{confirmButtonText:"确定",cancelButtonText:"取消",showCancelButton:!0,customClass:"directory-browser-dialog",callback:k=>{k==="confirm"&&S(y.path)}})}async function w(y){try{Ie.close(),setTimeout(async()=>{try{const V=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:y})})).json();V.success?_(V):V.error&&r.error(V.error)}catch(k){r.error(`浏览目录失败: ${k.message}`)}},100)}catch(k){r.error(`处理目录选择时出错: ${k.message}`)}}return S(),Ge(()=>l.modelValue,y=>{d.value=y},{immediate:!0}),(y,k)=>{const V=Pe,E=gt,L=ht,F=Ee,m=zo;return n(),v("div",Bf,[s("div",Ff,[o(L,{modelValue:g.value,"onUpdate:modelValue":k[0]||(k[0]=G=>g.value=G),placeholder:y.placeholder||"选择 package.json 文件",clearable:y.clearable,disabled:y.disabled||p.value,filterable:"",class:"package-select"},{default:a(()=>[(n(!0),v(be,null,Me(C.value,G=>(n(),H(E,{key:G.value,label:G.label,value:G.value},{default:a(()=>[s("div",Af,[s("div",Tf,[o(V,{class:"folder-icon"},{default:a(()=>[o(t(ut))]),_:1}),s("span",Df,i(G.label),1)]),s("div",Mf,i(G.relativePath),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","clearable","disabled"]),o(F,{icon:p.value?t(et):t(Ps),loading:p.value,disabled:y.disabled,size:"default",onClick:k[1]||(k[1]=G=>S()),class:"refresh-btn",title:"刷新当前项目"},{default:a(()=>[R(i(p.value?"扫描中...":"刷新"),1)]),_:1},8,["icon","loading","disabled"]),o(F,{icon:t(xo),disabled:y.disabled||p.value,size:"default",onClick:B,class:"custom-dir-btn",title:"浏览并选择其他目录"},{default:a(()=>k[2]||(k[2]=[R(" 其他目录 ")])),_:1},8,["icon","disabled"])]),c.value.length===0&&!p.value?(n(),v("div",Pf,[o(m,{type:"info",size:"small"},{default:a(()=>k[3]||(k[3]=[R(" 未找到 package.json 文件,请确保项目包含有效的 package.json ")])),_:1})])):z("",!0)])}}}),_o=De(Vf,[["__scopeId","data-v-f7df52f9"]]),Ef={class:"workspace-container"},Of={class:"left-panel"},Nf={class:"panel-header"},Gf={class:"orchestration-list"},Lf=["onClick"],Rf={class:"item-content"},xf={class:"item-header"},zf={class:"item-actions"},Hf={class:"step-preview"},If={class:"right-panel"},jf={class:"panel-header"},Uf={class:"header-actions"},Wf={class:"orchestration-info"},Jf={class:"steps-section"},qf={class:"steps-header"},Kf={class:"step-count"},Yf={class:"header-actions"},Qf={class:"steps-scroll"},Zf={key:1,class:"step-list"},Xf=["onDragstart","onDrop"],em={class:"step-item-content"},tm={class:"step-header-row"},sm={class:"step-options"},om={class:"option-item"},am={class:"action-buttons"},nm={class:"step-content-row"},lm={class:"step-icon"},im={class:"step-info"},rm={class:"step-name"},cm={class:"step-paths"},um={class:"step-detail"},dm={key:0,class:"step-dir"},pm={key:1,class:"add-step-list"},fm=["onClick"],mm={class:"step-info"},vm={class:"step-name"},hm={key:0,class:"step-desc"},gm={class:"step-code"},Cm={key:1,class:"step-directory"},ym={class:"wait-step-form"},_m={class:"version-step-form"},bm={class:"form-item"},wm={class:"form-item"},$m={key:0,class:"form-item"},km={class:"form-item"},Sm={class:"form-item"},Bm={class:"form-item"},Fm={key:0,class:"form-item"},Am={key:1,class:"form-item"},Tm=Se({__name:"OrchestrationWorkspace",props:{visible:{type:Boolean}},emits:["update:visible","execute-orchestration"],setup(K,{emit:T}){const l=K,u=T,{t:p}=Ho(),c=Qe(),d=pe({get:()=>l.visible,set:P=>u("update:visible",P)}),g=pe(()=>c.orchestrations||[]),C=h(null),S=h([]),B=h(null),_=h(""),w=h(""),y=h(null),k=h(!1),V=h(5),E=h("version"),L=h("patch"),F=h(""),m=h(null),G=h(""),q=h(""),Z=h("dependencies"),X=h("bump"),x=h("patch"),b=h([]),D=h(null),j=pe(()=>c.customCommands||[]);function ie(P,f){return`${P}-${f}`}function ve(P,f){return D.value===ie(P,f)}function Ce(P,f){D.value=ie(P,f)}function re(P,f){const I=ie(P,f);D.value===I&&(D.value=null)}function W(P){const f=P.enabled===!1?"[已禁用] ":"",I=P.useTerminal?"[终端] ":"";if(P.type==="command")return f+I+(P.commandName||"未知命令");if(P.type==="wait")return f+`等待 ${P.waitSeconds} 秒`;if(P.type==="version")if(P.versionTarget==="dependency"){const Ae=P.dependencyType==="devDependencies"?"devDep":"dep";if(P.dependencyVersionBump){const qe=P.dependencyVersionBump==="major"?"主版本":P.dependencyVersionBump==="minor"?"次版本":"补丁版本";return f+`修改依赖 [${Ae}] ${P.dependencyName} 版本+1 (${qe})`}else return f+`修改依赖 [${Ae}] ${P.dependencyName} → ${P.dependencyVersion}`}else{const Ae=P.versionBump==="major"?"主版本":P.versionBump==="minor"?"次版本":"补丁版本";return f+`版本号+1 (${Ae})`}return"未知步骤"}function Y(P){if(P.type==="command"){const f=c.customCommands.find(I=>I.id===P.commandId);return(f==null?void 0:f.command)||"命令已删除"}else{if(P.type==="wait")return`暂停执行 ${P.waitSeconds} 秒`;if(P.type==="version")return P.packageJsonPath?P.packageJsonPath.replace(/\\/g,"/"):"当前目录的 package.json"}return""}function ae(P){if(P.type==="command"){const f=c.customCommands.find(I=>I.id===P.commandId);return(f==null?void 0:f.directory)||""}return""}function fe(){return`step-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function he(){C.value=null,y.value=null,_.value="",w.value="",S.value=[]}function we(P){C.value=P.id,y.value=P.id,_.value=P.name,w.value=P.description||"";const f=JSON.parse(JSON.stringify(P.steps));f.forEach(I=>{(I.enabled===void 0||I.enabled===null)&&(I.enabled=!0),I.useTerminal===void 0&&(I.useTerminal=!1)}),S.value=f}function $e(P,f=0){u("execute-orchestration",P.steps,f)}function Ne(P,f){$e(P,f)}async function Le(P){try{await Ie.confirm(`确定要删除编排 "${P.name}" 吗?`,"确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}),await c.deleteOrchestration(P.id),r.success("编排已删除"),y.value===P.id&&he()}catch(f){f!=="cancel"&&r.error(`删除编排失败: ${f.message||f}`)}}function xe(P){const f={id:fe(),type:"command",commandId:P.id,commandName:P.name,enabled:!0};S.value.push(f),r.success(`已添加命令: ${P.name}`),k.value=!1}function ue(){if(V.value<=0){r.warning("等待时间必须大于0秒");return}const P={id:fe(),type:"wait",waitSeconds:V.value,enabled:!0};S.value.push(P),r.success(`已添加等待步骤: ${V.value}秒`),k.value=!1}function $(P){m.value=P,P?(F.value=P.fullPath,U(P.fullPath)):b.value=[]}async function U(P){try{const f=await fetch("/api/read-package-json",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageJsonPath:P})});if(!f.ok)throw new Error(`HTTP ${f.status}`);const I=await f.json();if(I.success){const Ae=[];Z.value==="dependencies"&&I.dependencies?Ae.push(...Object.keys(I.dependencies)):Z.value==="devDependencies"&&I.devDependencies&&Ae.push(...Object.keys(I.devDependencies)),b.value=Ae.sort()}}catch(f){console.error("读取依赖列表失败:",f),b.value=[]}}Ge(Z,()=>{F.value&&U(F.value)});function ne(){if(E.value==="dependency"){if(!G.value.trim()){r.warning("请选择依赖包名称");return}if(X.value==="manual"&&!q.value.trim()){r.warning("请输入依赖包版本号");return}}const P={id:fe(),type:"version",versionTarget:E.value,versionBump:L.value,packageJsonPath:F.value.trim()||void 0,dependencyName:E.value==="dependency"?G.value.trim():void 0,dependencyVersion:E.value==="dependency"&&X.value==="manual"?q.value.trim():void 0,dependencyVersionBump:E.value==="dependency"&&X.value==="bump"?x.value:void 0,dependencyType:E.value==="dependency"?Z.value:void 0,enabled:!0};S.value.push(P),r.success("已添加版本管理步骤"),k.value=!1,E.value="version",L.value="patch",F.value="",m.value=null,G.value="",q.value="",Z.value="dependencies",X.value="bump",x.value="patch",b.value=[]}function ce(P){S.value.splice(P,1)}function M(){S.value=[]}async function A(){if(!_.value.trim()){r.warning("请输入编排名称");return}if(S.value.length===0){r.warning("请至少添加一个步骤");return}const P={name:_.value.trim(),description:w.value.trim(),steps:S.value};if(y.value)await c.updateOrchestration(y.value,P);else{const f=await c.saveOrchestration(P);r.success("编排已保存"),f&&typeof f=="object"&&"id"in f&&(C.value=f.id,y.value=f.id)}}function Q(){if(S.value.length===0){r.warning("请至少添加一个步骤");return}u("execute-orchestration",[...S.value])}function le(P){B.value=P}function me(){B.value=null}function de(P){P.preventDefault()}function J(P){if(B.value===null||B.value===P)return;const f=S.value[B.value];S.value.splice(B.value,1);const I=B.value<P?P-1:P;S.value.splice(I,0,f),B.value=null}function O(P){if(P===0)return;const f=S.value[P];S.value[P]=S.value[P-1],S.value[P-1]=f}function N(P){if(P===S.value.length-1)return;const f=S.value[P];S.value[P]=S.value[P+1],S.value[P+1]=f}function se(P){if(P===0)return;const f=S.value.splice(P,1)[0];S.value.unshift(f)}function oe(P){if(P===S.value.length-1)return;const f=S.value.splice(P,1)[0];S.value.push(f)}function ge(P){u("execute-orchestration",[P],0,!0)}function Oe(P,f){P.enabled=f}return(P,f)=>{const I=Pe,Ae=ot,qe=Ct,ze=Qt,Te=Yt,nt=Kt,ft=Ye,St=us,tt=Ee,Ot=qs,fs=so,st=As,rt=Jt,ms=gt,vs=ht,Zt=Vs,hs=Js;return n(),v(be,null,[o(Ue,{modelValue:d.value,"onUpdate:modelValue":f[3]||(f[3]=ye=>d.value=ye),title:t(p)("@ORCHWS:编排工作台"),"close-on-click-modal":!1,"append-to-body":!0,"custom-class":"orchestration-workspace-dialog",width:"1400px"},{default:a(()=>[s("div",Ef,[s("div",Of,[s("div",Nf,[s("h3",null,i(t(p)("@ORCHWS:已保存的编排")),1),o(Fe,{tooltip:t(p)("@ORCHWS:新建编排"),size:"small","hover-color":"var(--color-primary)",onClick:he},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Wt))]),_:1})]),_:1},8,["tooltip"])]),s("div",Gf,[g.value.length===0?(n(),H(Ae,{key:0,description:t(p)("@ORCHWS:暂无编排"),"image-size":100},null,8,["description"])):z("",!0),(n(!0),v(be,null,Me(g.value,ye=>(n(),v("div",{key:ye.id,class:ke(["orchestration-item",{active:C.value===ye.id}]),onClick:He=>we(ye)},[s("div",Rf,[s("div",xf,[s("h4",null,i(ye.name),1),s("div",zf,[o(Fe,{tooltip:t(p)("@ORCHWS:执行"),size:"small","hover-color":"var(--color-primary)",onClick:Ze(He=>$e(ye),["stop"])},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:2},1032,["tooltip","onClick"]),o(Fe,{tooltip:t(p)("@ORCHWS:删除"),size:"small","hover-color":"var(--color-danger)",onClick:Ze(He=>Le(ye),["stop"])},{default:a(()=>[o(I,null,{default:a(()=>[o(t(it))]),_:1})]),_:2},1032,["tooltip","onClick"])])]),s("div",Hf,[(n(!0),v(be,null,Me(ye.steps,(He,te)=>(n(),H(nt,{key:He.id,trigger:"contextmenu","hide-on-click":!0,onCommand:()=>{Ne(ye,te),re(ye.id,te)},onVisibleChange:ee=>ee?Ce(ye.id,te):re(ye.id,te)},{dropdown:a(()=>[ve(ye.id,te)?(n(),H(Te,{key:0},{default:a(()=>[o(ze,{command:"execute"},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Xe))]),_:1}),f[14]||(f[14]=R(" 从此处开始执行 "))]),_:1})]),_:1})):z("",!0)]),default:a(()=>[o(qe,{type:He.type==="command"?"primary":He.type==="wait"?"warning":"success",size:"small",class:"step-tag"},{default:a(()=>[He.type==="command"?(n(),H(I,{key:0},{default:a(()=>[o(We,{"icon-class":"custom-cmd"})]),_:1})):He.type==="wait"?(n(),H(I,{key:1},{default:a(()=>[o(t(Pt))]),_:1})):He.type==="version"?(n(),H(I,{key:2},{default:a(()=>[o(t(Rt))]),_:1})):z("",!0),s("span",null,i(te+1)+". "+i(W(He)),1)]),_:2},1032,["type"])]),_:2},1032,["onCommand","onVisibleChange"]))),128))])])],10,Lf))),128))])]),s("div",If,[s("div",jf,[s("h3",null,i(y.value?t(p)("@ORCHWS:编辑编排"):t(p)("@ORCHWS:新建编排")),1),s("div",Uf,[o(Fe,{tooltip:t(p)("@ORCHWS:保存编排"),size:"small",disabled:S.value.length===0,"hover-color":"var(--color-success)",onClick:A},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Rt))]),_:1})]),_:1},8,["tooltip","disabled"]),o(Fe,{tooltip:t(p)("@ORCHWS:执行编排"),size:"small",disabled:S.value.length===0,"hover-color":"var(--color-primary)",onClick:Q},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:1},8,["tooltip","disabled"])])]),s("div",Wf,[o(ft,{modelValue:_.value,"onUpdate:modelValue":f[0]||(f[0]=ye=>_.value=ye),placeholder:t(p)("@ORCHWS:编排名称(必填)"),size:"default",clearable:""},null,8,["modelValue","placeholder"]),o(ft,{modelValue:w.value,"onUpdate:modelValue":f[1]||(f[1]=ye=>w.value=ye),placeholder:t(p)("@ORCHWS:编排描述(选填)"),type:"textarea",rows:2,clearable:""},null,8,["modelValue","placeholder"])]),s("div",Jf,[s("div",qf,[s("h4",null,[o(I,null,{default:a(()=>[o(t(Xe))]),_:1}),R(" "+i(t(p)("@ORCHWS:执行步骤"))+" ",1),s("span",Kf,"("+i(S.value.length)+")",1)]),s("div",Yf,[o(Fe,{tooltip:t(p)("@ORCHWS:添加步骤"),size:"small","hover-color":"var(--color-primary)",onClick:f[2]||(f[2]=ye=>k.value=!0)},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Wt))]),_:1})]),_:1},8,["tooltip"]),S.value.length>0?(n(),H(Fe,{key:0,tooltip:t(p)("@ORCHWS:清空所有步骤"),size:"small","hover-color":"var(--color-danger)",onClick:M},{default:a(()=>[o(I,null,{default:a(()=>[o(t(it))]),_:1})]),_:1},8,["tooltip"])):z("",!0)])]),s("div",Qf,[S.value.length===0?(n(),H(Ae,{key:0,description:t(p)("@ORCHWS:请添加执行步骤"),"image-size":80},null,8,["description"])):(n(),v("div",Zf,[(n(!0),v(be,null,Me(S.value,(ye,He)=>(n(),v("div",{key:ye.id,class:ke(["step-item",`step-type-${ye.type}`]),draggable:"true",onDragstart:te=>le(He),onDragend:me,onDragover:de,onDrop:te=>J(He)},[s("div",em,[s("div",tm,[s("div",sm,[s("div",om,[f[15]||(f[15]=s("span",{class:"option-label"},"启用",-1)),o(St,{"model-value":ye.enabled??!0,"onUpdate:modelValue":te=>Oe(ye,te),size:"small"},null,8,["model-value","onUpdate:modelValue"])]),ye.type==="command"?(n(),H(tt,{key:0,class:ke(["terminal-toggle-btn",{"is-active":ye.useTerminal}]),text:"",onClick:te=>ye.useTerminal=!ye.useTerminal,title:ye.useTerminal?t(p)("@ORCHWS:终端执行"):t(p)("@ORCHWS:普通执行")},{default:a(()=>[o(I,{size:18},{default:a(()=>[o(t(It))]),_:1})]),_:2},1032,["class","onClick","title"])):z("",!0)]),s("div",am,[o(Fe,{tooltip:t(p)("@ORCHWS:执行"),size:"small","hover-color":"var(--color-success)",onClick:te=>ge(ye)},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:2},1032,["tooltip","onClick"]),f[20]||(f[20]=s("div",{class:"button-divider"},null,-1)),o(tt,{type:"info",size:"small",text:"",disabled:He===0,onClick:te=>se(He),title:t(p)("@ORCHWS:置顶")},{default:a(()=>f[16]||(f[16]=[R(" ⇈ ")])),_:2},1032,["disabled","onClick","title"]),o(tt,{type:"info",size:"small",text:"",disabled:He===0,onClick:te=>O(He),title:t(p)("@ORCHWS:上移")},{default:a(()=>f[17]||(f[17]=[R(" ↑ ")])),_:2},1032,["disabled","onClick","title"]),o(tt,{type:"info",size:"small",text:"",disabled:He===S.value.length-1,onClick:te=>N(He),title:t(p)("@ORCHWS:下移")},{default:a(()=>f[18]||(f[18]=[R(" ↓ ")])),_:2},1032,["disabled","onClick","title"]),o(tt,{type:"info",size:"small",text:"",disabled:He===S.value.length-1,onClick:te=>oe(He),title:t(p)("@ORCHWS:置底")},{default:a(()=>f[19]||(f[19]=[R(" ⇊ ")])),_:2},1032,["disabled","onClick","title"]),f[21]||(f[21]=s("div",{class:"button-divider"},null,-1)),o(tt,{type:"danger",size:"small",icon:t(it),text:"",onClick:te=>ce(He),title:t(p)("@ORCHWS:删除")},null,8,["icon","onClick","title"])])]),s("div",nm,[s("div",lm,[ye.type==="command"?(n(),H(I,{key:0},{default:a(()=>[o(We,{"icon-class":"custom-cmd"})]),_:1})):ye.type==="wait"?(n(),H(I,{key:1},{default:a(()=>[o(t(Pt))]),_:1})):ye.type==="version"?(n(),H(I,{key:2},{default:a(()=>[o(t(Rt))]),_:1})):z("",!0)]),s("div",im,[s("div",rm,i(W(ye)),1)]),s("div",cm,[s("div",um,i(Y(ye)),1),ae(ye)?(n(),v("div",dm,[o(I,null,{default:a(()=>[o(t(ut))]),_:1}),s("span",null,i(ae(ye)),1)])):z("",!0)])])])],42,Xf))),128))]))])])])])]),_:1},8,["modelValue","title"]),o(Ue,{modelValue:k.value,"onUpdate:modelValue":f[13]||(f[13]=ye=>k.value=ye),title:t(p)("@ORCHWS:添加步骤"),width:"600px","append-to-body":!0,"custom-class":"add-step-dialog"},{default:a(()=>[o(hs,{class:"fixed-tab-dialog"},{default:a(()=>[o(Ot,{label:"自定义命令"},{label:a(()=>[s("span",null,[o(I,null,{default:a(()=>[o(We,{"icon-class":"custom-cmd"})]),_:1}),f[22]||(f[22]=R(" 自定义命令"))])]),default:a(()=>[j.value.length===0?(n(),H(Ae,{key:0,description:"暂无可用命令,请先创建命令","image-size":80})):(n(),v("div",pm,[(n(!0),v(be,null,Me(j.value,ye=>(n(),v("div",{key:ye.id,class:"add-step-item",onClick:He=>xe(ye)},[s("div",mm,[s("div",vm,i(ye.name),1),ye.description?(n(),v("div",hm,i(ye.description),1)):z("",!0),s("code",gm,i(ye.command),1),ye.directory?(n(),v("div",Cm,[o(I,null,{default:a(()=>[o(t(ut))]),_:1}),s("span",null,i(ye.directory),1)])):z("",!0)]),o(tt,{type:"primary",size:"small",text:""},{default:a(()=>f[23]||(f[23]=[R("添加")])),_:1})],8,fm))),128))]))]),_:1}),o(Ot,{label:"等待"},{label:a(()=>[s("span",null,[o(I,null,{default:a(()=>[o(t(Pt))]),_:1}),f[24]||(f[24]=R(" 等待"))])]),default:a(()=>[s("div",ym,[o(fs,{modelValue:V.value,"onUpdate:modelValue":f[4]||(f[4]=ye=>V.value=ye),min:1,max:3600,step:1},null,8,["modelValue"]),f[26]||(f[26]=s("span",null,"秒",-1)),o(tt,{type:"primary",onClick:ue},{default:a(()=>f[25]||(f[25]=[R("添加等待步骤")])),_:1})])]),_:1}),o(Ot,{label:"版本管理"},{label:a(()=>[s("span",null,[o(I,null,{default:a(()=>[o(t(Rt))]),_:1}),f[27]||(f[27]=R(" 版本管理"))])]),default:a(()=>[s("div",_m,[s("div",bm,[f[28]||(f[28]=s("label",null,"package.json 文件(选填):",-1)),o(_o,{modelValue:F.value,"onUpdate:modelValue":f[5]||(f[5]=ye=>F.value=ye),placeholder:"留空则使用当前目录的 package.json",clearable:"",onChange:$},null,8,["modelValue"])]),s("div",wm,[f[31]||(f[31]=s("label",null,"修改目标:",-1)),o(rt,{modelValue:E.value,"onUpdate:modelValue":f[6]||(f[6]=ye=>E.value=ye)},{default:a(()=>[o(st,{value:"version"},{default:a(()=>f[29]||(f[29]=[R("version 字段")])),_:1}),o(st,{value:"dependency"},{default:a(()=>f[30]||(f[30]=[R("dependencies 中的依赖")])),_:1})]),_:1},8,["modelValue"])]),E.value==="version"?(n(),v("div",$m,[f[35]||(f[35]=s("label",null,"版本增量类型:",-1)),o(rt,{modelValue:L.value,"onUpdate:modelValue":f[7]||(f[7]=ye=>L.value=ye)},{default:a(()=>[o(st,{value:"patch"},{default:a(()=>f[32]||(f[32]=[R("补丁版本 (x.x.+1)")])),_:1}),o(st,{value:"minor"},{default:a(()=>f[33]||(f[33]=[R("次版本 (x.+1.0)")])),_:1}),o(st,{value:"major"},{default:a(()=>f[34]||(f[34]=[R("主版本 (+1.0.0)")])),_:1})]),_:1},8,["modelValue"])])):E.value==="dependency"?(n(),v(be,{key:1},[s("div",km,[f[38]||(f[38]=s("label",null,"依赖类型:",-1)),o(rt,{modelValue:Z.value,"onUpdate:modelValue":f[8]||(f[8]=ye=>Z.value=ye)},{default:a(()=>[o(st,{value:"dependencies"},{default:a(()=>f[36]||(f[36]=[R("dependencies")])),_:1}),o(st,{value:"devDependencies"},{default:a(()=>f[37]||(f[37]=[R("devDependencies")])),_:1})]),_:1},8,["modelValue"])]),s("div",Sm,[f[39]||(f[39]=s("label",null,"依赖包名称:",-1)),o(vs,{modelValue:G.value,"onUpdate:modelValue":f[9]||(f[9]=ye=>G.value=ye),placeholder:"请先选择 package.json,然后选择依赖包",clearable:"",filterable:"","allow-create":"",style:{width:"100%"}},{default:a(()=>[(n(!0),v(be,null,Me(b.value,ye=>(n(),H(ms,{key:ye,label:ye,value:ye},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),s("div",Bm,[f[42]||(f[42]=s("label",null,"版本号模式:",-1)),o(rt,{modelValue:X.value,"onUpdate:modelValue":f[10]||(f[10]=ye=>X.value=ye)},{default:a(()=>[o(st,{value:"bump"},{default:a(()=>f[40]||(f[40]=[R("自动递增 +1")])),_:1}),o(st,{value:"manual"},{default:a(()=>f[41]||(f[41]=[R("手动输入")])),_:1})]),_:1},8,["modelValue"])]),X.value==="bump"?(n(),v("div",Fm,[f[46]||(f[46]=s("label",null,"版本增量类型:",-1)),o(rt,{modelValue:x.value,"onUpdate:modelValue":f[11]||(f[11]=ye=>x.value=ye)},{default:a(()=>[o(st,{value:"patch"},{default:a(()=>f[43]||(f[43]=[R("补丁版本 (x.x.+1)")])),_:1}),o(st,{value:"minor"},{default:a(()=>f[44]||(f[44]=[R("次版本 (x.+1.0)")])),_:1}),o(st,{value:"major"},{default:a(()=>f[45]||(f[45]=[R("主版本 (+1.0.0)")])),_:1})]),_:1},8,["modelValue"])])):X.value==="manual"?(n(),v("div",Am,[f[47]||(f[47]=s("label",null,"新版本号:",-1)),o(ft,{modelValue:q.value,"onUpdate:modelValue":f[12]||(f[12]=ye=>q.value=ye),placeholder:"例如:^3.5.0、~2.8.0、latest",clearable:""},null,8,["modelValue"])])):z("",!0)],64)):z("",!0),o(tt,{type:"primary",onClick:ne},{default:a(()=>f[48]||(f[48]=[R("添加版本管理步骤")])),_:1}),E.value==="version"?(n(),H(Zt,{key:2,title:"将会修改 package.json 中的 version 字段,并自动递增版本号",type:"info",closable:!1,style:{"margin-top":"16px"}})):E.value==="dependency"?(n(),H(Zt,{key:3,title:"将会修改 package.json 中指定依赖的版本号",type:"info",closable:!1,style:{"margin-top":"16px"}})):z("",!0)])]),_:1})]),_:1})]),_:1},8,["modelValue","title"])],64)}}}),Dm=De(Tm,[["__scopeId","data-v-f5ea719a"]]),Mm={class:"node-content"},Pm={class:"node-label"},Vm={class:"node-badges"},Em={key:0,class:"node-badge terminal"},Om={key:0,class:"node-warning"},Nm={key:1,class:"command-details"},Gm={class:"command-code"},Lm={key:0,class:"command-dir"},Rm={key:0,class:"disabled-overlay"},xm=Se({__name:"CommandNode",props:{data:{},id:{}},emits:["delete","execute-from-node","execute-single-node"],setup(K,{emit:T}){const l=K,u=T,p=Qe(),c=h(!1),d=pe(()=>!l.data.config||!l.data.config.commandId?null:p.customCommands.find(B=>B.id===l.data.config.commandId)||null),g=pe(()=>{var S,B;return l.data.config?{name:l.data.config.commandName||"未配置",terminal:l.data.config.useTerminal||!1,command:((S=d.value)==null?void 0:S.command)||"",directory:((B=d.value)==null?void 0:B.directory)||""}:null});function C(S){S==="executeFrom"?u("execute-from-node",l.id):S==="executeSingle"&&u("execute-single-node",l.id)}return(S,B)=>{const _=Pe,w=Qt,y=Yt,k=Kt;return n(),H(k,{trigger:"contextmenu",onCommand:C,onVisibleChange:B[1]||(B[1]=V=>c.value=V),"popper-class":"flow-node-dropdown"},{dropdown:a(()=>[o(y,null,{default:a(()=>[o(w,{command:"executeFrom"},{default:a(()=>[o(_,null,{default:a(()=>[o(t(Xe))]),_:1}),B[4]||(B[4]=R(" 从此处开始执行 "))]),_:1}),o(w,{command:"executeSingle"},{default:a(()=>[o(_,null,{default:a(()=>[o(t(Xe))]),_:1}),B[5]||(B[5]=R(" 只执行此节点 "))]),_:1})]),_:1})]),default:a(()=>{var V,E;return[s("div",{class:ke(["command-node",{disabled:!S.data.enabled,selected:S.data.selected}])},[s("button",{class:"delete-btn",onClick:B[0]||(B[0]=Ze(L=>u("delete",S.id),["stop"])),title:"删除节点"},[o(_,null,{default:a(()=>[o(t(yt))]),_:1})]),o(t(At),{type:"target",position:t(Tt).Left,class:"flow-node-handle handle-left"},null,8,["position"]),B[3]||(B[3]=s("div",{class:"node-header"},[s("div",{class:"flow-node-icon"},"📋"),s("div",{class:"node-type"},"命令节点")],-1)),s("div",Mm,[s("div",Pm,i(S.data.label),1),s("div",Vm,[(V=g.value)!=null&&V.terminal?(n(),v("div",Em,[o(_,null,{default:a(()=>[o(t(It))]),_:1}),B[2]||(B[2]=s("span",null,"终端",-1))])):z("",!0)]),S.data.config?z("",!0):(n(),v("div",Om,"未配置")),(E=g.value)!=null&&E.command?(n(),v("div",Nm,[s("div",Gm,[s("code",null,i(g.value.command),1)]),g.value.directory?(n(),v("div",Lm,[o(_,null,{default:a(()=>[o(t(ut))]),_:1}),s("span",null,i(g.value.directory),1)])):z("",!0)])):z("",!0)]),S.data.enabled?z("",!0):(n(),v("div",Rm,"已禁用")),o(t(At),{type:"source",position:t(Tt).Right,class:"flow-node-handle handle-right"},null,8,["position"])],2)]}),_:1})}}}),zm=De(xm,[["__scopeId","data-v-1cd8b1d8"]]),Hm={class:"node-content"},Im={class:"node-label"},jm={key:0,class:"node-warning"},Um={key:0,class:"disabled-overlay"},Wm=Se({__name:"WaitNode",props:{data:{},id:{}},emits:["delete","execute-from-node","execute-single-node"],setup(K,{emit:T}){const l=K,u=T,p=h(!1);function c(d){d==="executeFrom"?u("execute-from-node",l.id):d==="executeSingle"&&u("execute-single-node",l.id)}return(d,g)=>{const C=Pe,S=Qt,B=Yt,_=Kt;return n(),H(_,{trigger:"contextmenu",onCommand:c,onVisibleChange:g[1]||(g[1]=w=>p.value=w),"popper-class":"flow-node-dropdown"},{dropdown:a(()=>[o(B,null,{default:a(()=>[o(S,{command:"executeFrom"},{default:a(()=>[o(C,null,{default:a(()=>[o(t(Xe))]),_:1}),g[3]||(g[3]=R(" 从此处开始执行 "))]),_:1}),o(S,{command:"executeSingle"},{default:a(()=>[o(C,null,{default:a(()=>[o(t(Xe))]),_:1}),g[4]||(g[4]=R(" 只执行此节点 "))]),_:1})]),_:1})]),default:a(()=>[s("div",{class:ke(["wait-node",{disabled:!d.data.enabled,selected:d.data.selected}])},[s("button",{class:"delete-btn",onClick:g[0]||(g[0]=Ze(w=>u("delete",d.id),["stop"])),title:"删除节点"},[o(C,null,{default:a(()=>[o(t(yt))]),_:1})]),o(t(At),{type:"target",position:t(Tt).Left,class:"flow-node-handle handle-left"},null,8,["position"]),g[2]||(g[2]=s("div",{class:"node-header"},[s("div",{class:"flow-node-icon"},"⏰"),s("div",{class:"node-type"},"等待节点")],-1)),s("div",Hm,[s("div",Im,i(d.data.label),1),d.data.config?z("",!0):(n(),v("div",jm,"未配置"))]),d.data.enabled?z("",!0):(n(),v("div",Um,"已禁用")),o(t(At),{type:"source",position:t(Tt).Right,class:"flow-node-handle handle-right"},null,8,["position"])],2)]),_:1})}}}),Jm=De(Wm,[["__scopeId","data-v-b3e6d8e6"]]),qm={class:"node-content"},Km={class:"node-label"},Ym={key:0,class:"node-badge"},Qm={key:1,class:"node-warning"},Zm={key:0,class:"disabled-overlay"},Xm=Se({__name:"VersionNode",props:{data:{},id:{}},emits:["delete","execute-from-node","execute-single-node"],setup(K,{emit:T}){const l=K,u=T,p=h(!1),c=pe(()=>l.data.config?{target:l.data.config.versionTarget,dependency:l.data.config.dependencyName}:null);function d(g){g==="executeFrom"?u("execute-from-node",l.id):g==="executeSingle"&&u("execute-single-node",l.id)}return(g,C)=>{const S=Pe,B=Qt,_=Yt,w=Kt;return n(),H(w,{trigger:"contextmenu",onCommand:d,onVisibleChange:C[1]||(C[1]=y=>p.value=y),"popper-class":"flow-node-dropdown"},{dropdown:a(()=>[o(_,null,{default:a(()=>[o(B,{command:"executeFrom"},{default:a(()=>[o(S,null,{default:a(()=>[o(t(Xe))]),_:1}),C[3]||(C[3]=R(" 从此处开始执行 "))]),_:1}),o(B,{command:"executeSingle"},{default:a(()=>[o(S,null,{default:a(()=>[o(t(Xe))]),_:1}),C[4]||(C[4]=R(" 只执行此节点 "))]),_:1})]),_:1})]),default:a(()=>{var y;return[s("div",{class:ke(["version-node",{disabled:!g.data.enabled,selected:g.data.selected}])},[s("button",{class:"delete-btn",onClick:C[0]||(C[0]=Ze(k=>u("delete",g.id),["stop"])),title:"删除节点"},[o(S,null,{default:a(()=>[o(t(yt))]),_:1})]),o(t(At),{type:"target",position:t(Tt).Left,class:"flow-node-handle handle-left"},null,8,["position"]),C[2]||(C[2]=s("div",{class:"node-header"},[s("div",{class:"flow-node-icon"},"📦"),s("div",{class:"node-type"},"版本管理")],-1)),s("div",qm,[s("div",Km,i(g.data.label),1),((y=c.value)==null?void 0:y.target)==="dependency"?(n(),v("div",Ym," 依赖: "+i(c.value.dependency),1)):z("",!0),g.data.config?z("",!0):(n(),v("div",Qm,"未配置"))]),g.data.enabled?z("",!0):(n(),v("div",Zm,"已禁用")),o(t(At),{type:"source",position:t(Tt).Right,class:"flow-node-handle handle-right"},null,8,["position"])],2)]}),_:1})}}}),e2=De(Xm,[["__scopeId","data-v-594673e9"]]),t2=Se({__name:"StartNode",props:{data:{}},setup(K){return(T,l)=>(n(),v("div",{class:ke(["start-node",{selected:T.data.selected}])},[l[0]||(l[0]=s("div",{class:"flow-node-icon"},"🚀",-1)),l[1]||(l[1]=s("div",{class:"node-label"},"开始",-1)),o(t(At),{type:"source",position:t(Tt).Right,class:"flow-node-handle handle-right"},null,8,["position"])],2))}}),s2=De(t2,[["__scopeId","data-v-67b85fa8"]]),o2={class:"node-input-config"},a2={key:0,class:"empty-tip"},n2={key:1,class:"input-list"},l2={class:"input-row"},i2={class:"input-field param-name-field"},r2={class:"input-field type-field"},c2={class:"input-field value-field"},u2={class:"tree-node-label"},d2=Se({__name:"NodeInputConfig",props:{modelValue:{},paramNames:{},disableParamNameEdit:{type:Boolean},predecessorNodes:{}},emits:["update:modelValue"],setup(K,{emit:T}){const l=K,u=T,p=h([]);Ge(()=>l.modelValue,_=>{p.value=_?[..._]:[]},{immediate:!0,deep:!0}),Ge(()=>l.paramNames,_=>{if(!_||_.length===0){p.value=[],u("update:modelValue",[]);return}const w=new Map(p.value.map(k=>[k.paramName,k])),y=[];for(const k of _)w.has(k)?y.push(w.get(k)):y.push({paramName:k,inputType:"manual",manualValue:""});p.value=y,u("update:modelValue",y)},{immediate:!0});function c(_,w,y){if(!p.value[_])return;const k=[...p.value];k[_]={...k[_],[w]:y},w==="inputType"&&(y==="manual"?(k[_].referenceNodeId=void 0,k[_].referenceOutputKey=void 0):k[_].manualValue=void 0),p.value=k,u("update:modelValue",k)}function d(_){var w;return _.type==="command"?((w=_.data.config)==null?void 0:w.commandName)||_.data.label||"命令节点":_.data.label||_.id}function g(_){return _.type==="command"?[{key:"stdout",label:"标准输出 (stdout)"},{key:"stderr",label:"标准错误 (stderr)"}]:[]}const C=pe(()=>!l.predecessorNodes||l.predecessorNodes.length===0?[]:l.predecessorNodes.map(_=>({value:_.id,label:d(_),children:g(_).map(w=>({value:`${_.id}::${w.key}`,label:w.label}))})));function S(_,w){if(!w)return;const[y,k]=w.split("::"),V=[...p.value];V[_]={...V[_],referenceNodeId:y,referenceOutputKey:k},p.value=V,u("update:modelValue",V)}function B(_){return _.referenceNodeId&&_.referenceOutputKey?`${_.referenceNodeId}::${_.referenceOutputKey}`:""}return(_,w)=>{const y=Ye,k=gt,V=ht,E=Pe,L=Io;return n(),v("div",o2,[p.value.length===0?(n(),v("div",a2," 命令中未检测到变量参数 ")):(n(),v("div",n2,[(n(!0),v(be,null,Me(p.value,(F,m)=>(n(),v("div",{key:F.paramName,class:"input-item"},[s("div",l2,[s("div",i2,[w[0]||(w[0]=s("label",{class:"field-label"},"参数名",-1)),o(y,{"model-value":F.paramName,disabled:_.disableParamNameEdit,placeholder:"参数名",size:"default","onUpdate:modelValue":G=>c(m,"paramName",G)},null,8,["model-value","disabled","onUpdate:modelValue"])]),s("div",r2,[w[1]||(w[1]=s("label",{class:"field-label"},"类型",-1)),o(V,{"model-value":F.inputType,placeholder:"选择类型",size:"default","onUpdate:modelValue":G=>c(m,"inputType",G)},{default:a(()=>[o(k,{value:"manual",label:"手动输入"}),o(k,{value:"reference",label:"引用节点",disabled:!_.predecessorNodes||_.predecessorNodes.length===0},null,8,["disabled"])]),_:2},1032,["model-value","onUpdate:modelValue"])]),s("div",c2,[w[2]||(w[2]=s("label",{class:"field-label"},"值",-1)),F.inputType==="manual"?(n(),H(y,{key:0,"model-value":F.manualValue,placeholder:"输入参数值",size:"default",clearable:"","onUpdate:modelValue":G=>c(m,"manualValue",G)},null,8,["model-value","onUpdate:modelValue"])):(n(),H(L,{key:1,"model-value":B(F),data:C.value,placeholder:"选择节点输出",size:"default",clearable:"",filterable:"","check-strictly":"","render-after-expand":!1,"onUpdate:modelValue":G=>S(m,G)},{default:a(({data:G})=>[s("span",u2,[G.children?z("",!0):(n(),H(E,{key:0},{default:a(()=>[o(t(os))]),_:1})),R(" "+i(G.label),1)])]),_:2},1032,["model-value","data","onUpdate:modelValue"]))])])]))),128))]))])}}}),p2=De(d2,[["__scopeId","data-v-9f9d5ab2"]]);function f2(K){if(!K)return[];const T=/\{\{(\w+)\}\}/g,l=[];let u;for(;(u=T.exec(K))!==null;){const p=u[1];l.includes(p)||l.push(p)}return l}function m2(K,T){if(!K)return"";let l=K;for(const[u,p]of Object.entries(T)){const c=new RegExp(`\\{\\{${u}\\}\\}`,"g");l=l.replace(c,p||"")}return l}const v2={key:0,class:"config-content"},h2={class:"config-section"},g2={key:0,class:"config-section"},C2={class:"section-title"},y2={key:1,class:"config-section"},_2={class:"section-title"},b2={key:0,class:"empty-tip"},w2={key:1,class:"command-list"},$2=["onClick"],k2={class:"command-info"},S2={class:"command-header"},B2={class:"command-name"},F2={key:0,class:"command-desc"},A2={class:"command-code"},T2={class:"command-dir"},D2={key:2,class:"config-section"},M2={class:"section-title"},P2={key:3,class:"config-section"},V2={class:"section-title"},E2={class:"node-option"},O2={class:"node-name"},N2={class:"node-id"},G2={class:"reference-tip"},L2={class:"dialog-footer"},R2={class:"footer-actions"},x2=Se({__name:"NodeConfigPanel",props:{modelValue:{type:Boolean},node:{},allNodes:{},edges:{}},emits:["update:modelValue","update-config"],setup(K,{emit:T}){const l=K,u=T,p=Qe(),c=pe({get:()=>l.modelValue,set:F=>u("update:modelValue",F)}),d=h({}),g=h([]),C=pe(()=>p.customCommands||[]),S=pe(()=>{if(!d.value.commandId)return[];const F=C.value.find(m=>m.id===d.value.commandId);return F?f2(F.command):[]}),B=pe(()=>{if(!l.node||!l.allNodes||!l.edges)return[];const F=l.node.id,m=l.edges,G=l.allNodes,q=[],Z=new Set,X=[F];function x(b){return m.filter(D=>D.target===b).map(D=>D.source)}for(;X.length>0;){const b=X.shift(),D=x(b);for(const j of D)if(!Z.has(j)){Z.add(j),X.push(j);const ie=G.find(ve=>ve.id===j);ie&&ie.type==="command"&&ie.data.config&&q.push(ie)}}return q});function _(F){return F.type==="command"?[{key:"stdout",label:"标准输出 (stdout)"},{key:"version",label:"提取的版本号"}]:[]}function w(F){var m;return F.type==="command"?((m=F.data.config)==null?void 0:m.commandName)||F.data.label||"命令节点":F.data.label||F.id}Ge(()=>l.node,F=>{if(!F)return;const m=F.data.config;if(F.type==="command")d.value={commandId:m==null?void 0:m.commandId,commandName:m==null?void 0:m.commandName,useTerminal:(m==null?void 0:m.useTerminal)||!1,inputs:Array.isArray(m==null?void 0:m.inputs)?m.inputs:[],enabled:F.data.enabled??!0};else if(F.type==="wait")d.value={waitSeconds:(m==null?void 0:m.waitSeconds)||5,enabled:F.data.enabled??!0};else if(F.type==="version"){let G="bump";m!=null&&m.inputRef?G="reference":m!=null&&m.dependencyVersion||(m==null?void 0:m.versionTarget)!=="dependency"&&!(m!=null&&m.versionBump)?G="manual":(m!=null&&m.dependencyVersionBump||m!=null&&m.versionBump)&&(G="bump"),d.value={versionTarget:(m==null?void 0:m.versionTarget)||"version",versionBump:(m==null?void 0:m.versionBump)||"patch",packageJsonPath:(m==null?void 0:m.packageJsonPath)||"",dependencyName:(m==null?void 0:m.dependencyName)||"",dependencyVersion:(m==null?void 0:m.dependencyVersion)||"",dependencyType:(m==null?void 0:m.dependencyType)||"dependencies",dependencyVersionMode:m!=null&&m.dependencyVersionBump?"bump":"manual",dependencyVersionBump:(m==null?void 0:m.dependencyVersionBump)||"patch",versionSource:G,inputRef:m==null?void 0:m.inputRef,enabled:F.data.enabled??!0},m!=null&&m.packageJsonPath&&y(m.packageJsonPath)}},{immediate:!0});async function y(F){try{const m=await fetch("/api/read-package-json",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageJsonPath:F})});if(!m.ok)throw new Error(`HTTP ${m.status}`);const G=await m.json();if(G.success){const q=[],Z=d.value.dependencyType||"dependencies";Z==="dependencies"&&G.dependencies?q.push(...Object.keys(G.dependencies)):Z==="devDependencies"&&G.devDependencies&&q.push(...Object.keys(G.devDependencies)),g.value=q.sort()}}catch(m){console.error("读取依赖列表失败:",m),g.value=[]}}Ge(()=>d.value.dependencyType,()=>{d.value.packageJsonPath&&y(d.value.packageJsonPath)});function k(F){d.value.selectedPackageFile=F,F?(d.value.packageJsonPath=F.fullPath,y(F.fullPath)):g.value=[]}function V(F){d.value.commandId=F.id,d.value.commandName=F.name}function E(){return`step-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function L(){var m,G,q,Z,X,x,b,D;if(!l.node)return;let F=null;if(l.node.type==="command"){if(!d.value.commandId){r.warning("请选择要执行的命令");return}F={id:((m=l.node.data.config)==null?void 0:m.id)||E(),nodeId:l.node.id,type:"command",commandId:d.value.commandId,commandName:d.value.commandName||"",useTerminal:d.value.useTerminal||!1,inputs:d.value.inputs||[],enabled:d.value.enabled??!0}}else if(l.node.type==="wait"){if(!d.value.waitSeconds||d.value.waitSeconds<=0){r.warning("等待时间必须大于0秒");return}F={id:((G=l.node.data.config)==null?void 0:G.id)||E(),nodeId:l.node.id,type:"wait",waitSeconds:d.value.waitSeconds,enabled:d.value.enabled??!0}}else if(l.node.type==="version"){if(d.value.versionTarget==="dependency"){if(!((q=d.value.dependencyName)!=null&&q.trim())){r.warning("请选择依赖包名称");return}if(d.value.versionSource==="manual"&&!((Z=d.value.dependencyVersion)!=null&&Z.trim())){r.warning("请输入依赖包版本号");return}if(d.value.versionSource==="reference"&&!d.value.inputRef){r.warning("请选择要引用的节点输出");return}}F={id:((X=l.node.data.config)==null?void 0:X.id)||E(),nodeId:l.node.id,type:"version",versionTarget:d.value.versionTarget||"version",versionBump:d.value.versionSource==="bump"?d.value.versionBump||"patch":void 0,packageJsonPath:((x=d.value.packageJsonPath)==null?void 0:x.trim())||void 0,dependencyName:d.value.versionTarget==="dependency"?(b=d.value.dependencyName)==null?void 0:b.trim():void 0,dependencyVersion:d.value.versionTarget==="dependency"&&d.value.versionSource==="manual"?(D=d.value.dependencyVersion)==null?void 0:D.trim():void 0,dependencyVersionBump:d.value.versionTarget==="dependency"&&d.value.versionSource==="bump"?d.value.dependencyVersionBump:void 0,dependencyType:d.value.versionTarget==="dependency"?d.value.dependencyType:void 0,versionSource:d.value.versionSource,inputRef:d.value.versionSource==="reference"?d.value.inputRef:void 0,enabled:d.value.enabled??!0}}F&&(u("update-config",l.node.id,F),r.success("节点配置已保存"),c.value=!1)}return(F,m)=>{const G=us,q=kt,Z=As,X=Jt,x=$t,b=Pe,D=so,j=gt,ie=ht,ve=Re,Ce=Ye;return n(),H(Ue,{modelValue:c.value,"onUpdate:modelValue":m[15]||(m[15]=re=>c.value=re),title:"节点配置",size:"extra-large","append-to-body":!0,"custom-class":"node-config-dialog"},{footer:a(()=>[s("div",L2,[s("div",R2,[s("button",{type:"button",class:"dialog-cancel-btn",onClick:m[14]||(m[14]=re=>c.value=!1)}," 取消 "),s("button",{type:"button",class:"dialog-confirm-btn",onClick:L},[o(b,null,{default:a(()=>[o(t(ks))]),_:1}),m[38]||(m[38]=s("span",null,"保存配置",-1))])])])]),default:a(()=>[F.node?(n(),v("div",v2,[s("div",h2,[m[18]||(m[18]=s("div",{class:"section-title"},"通用设置",-1)),o(x,{"label-width":"100px"},{default:a(()=>[o(q,{label:"启用节点"},{default:a(()=>[o(G,{modelValue:d.value.enabled,"onUpdate:modelValue":m[0]||(m[0]=re=>d.value.enabled=re)},null,8,["modelValue"])]),_:1}),F.node.type==="command"?(n(),H(q,{key:0,label:"执行方式"},{default:a(()=>[o(X,{modelValue:d.value.useTerminal,"onUpdate:modelValue":m[1]||(m[1]=re=>d.value.useTerminal=re)},{default:a(()=>[o(Z,{value:!1},{default:a(()=>m[16]||(m[16]=[R("普通执行")])),_:1}),o(Z,{value:!0},{default:a(()=>m[17]||(m[17]=[R("终端执行")])),_:1})]),_:1},8,["modelValue"])]),_:1})):z("",!0)]),_:1})]),F.node.type==="command"&&d.value.commandId&&d.value.inputs?(n(),v("div",g2,[s("div",C2,[o(b,null,{default:a(()=>[o(t(os))]),_:1}),m[19]||(m[19]=R(" 输入配置 "))]),o(p2,{modelValue:d.value.inputs,"onUpdate:modelValue":m[2]||(m[2]=re=>d.value.inputs=re),"param-names":S.value,"disable-param-name-edit":!0,"predecessor-nodes":B.value},null,8,["modelValue","param-names","predecessor-nodes"])])):z("",!0),F.node.type==="command"?(n(),v("div",y2,[s("div",_2,[o(b,null,{default:a(()=>[o(We,{"icon-class":"custom-cmd"})]),_:1}),m[20]||(m[20]=R(" 命令配置 "))]),o(x,{"label-width":"100px"},{default:a(()=>[o(q,{label:"选择命令",required:""},{default:a(()=>[C.value.length===0?(n(),v("div",b2," 暂无可用命令,请先创建命令 ")):(n(),v("div",w2,[(n(!0),v(be,null,Me(C.value,re=>(n(),v("div",{key:re.id,class:ke(["command-item",{selected:d.value.commandId===re.id}]),onClick:W=>V(re)},[s("div",k2,[s("div",S2,[s("span",B2,i(re.name),1),re.description?(n(),v("span",F2,i(re.description),1)):z("",!0)]),s("code",A2,i(re.command),1),s("div",T2,[o(b,null,{default:a(()=>[o(t(ut))]),_:1}),s("span",null,i(re.directory?re.directory.replace(/\\/g,"/"):"当前目录"),1)])]),d.value.commandId===re.id?(n(),H(b,{key:0,class:"check-icon"},{default:a(()=>[o(t(ks))]),_:1})):z("",!0)],10,$2))),128))]))]),_:1})]),_:1})])):z("",!0),F.node.type==="wait"?(n(),v("div",D2,[s("div",M2,[o(b,null,{default:a(()=>[o(t(Pt))]),_:1}),m[21]||(m[21]=R(" 等待配置 "))]),o(x,{"label-width":"100px"},{default:a(()=>[o(q,{label:"等待时间",required:""},{default:a(()=>[o(D,{modelValue:d.value.waitSeconds,"onUpdate:modelValue":m[3]||(m[3]=re=>d.value.waitSeconds=re),min:1,max:3600,step:1},null,8,["modelValue"]),m[22]||(m[22]=s("span",{style:{"margin-left":"var(--spacing-md)"}},"秒",-1))]),_:1})]),_:1})])):z("",!0),F.node.type==="version"?(n(),v("div",P2,[s("div",V2,[o(b,null,{default:a(()=>[o(t(Rt))]),_:1}),m[23]||(m[23]=R(" 版本配置 "))]),o(x,{"label-width":"120px"},{default:a(()=>[o(q,{label:"package.json"},{default:a(()=>[o(_o,{modelValue:d.value.packageJsonPath,"onUpdate:modelValue":m[4]||(m[4]=re=>d.value.packageJsonPath=re),placeholder:"留空则使用当前目录的 package.json",clearable:"",onChange:k},null,8,["modelValue"])]),_:1}),o(q,{label:"修改目标",required:""},{default:a(()=>[o(X,{modelValue:d.value.versionTarget,"onUpdate:modelValue":m[5]||(m[5]=re=>d.value.versionTarget=re)},{default:a(()=>[o(Z,{value:"version"},{default:a(()=>m[24]||(m[24]=[R("version 字段")])),_:1}),o(Z,{value:"dependency"},{default:a(()=>m[25]||(m[25]=[R("dependencies 中的依赖")])),_:1})]),_:1},8,["modelValue"])]),_:1}),d.value.versionTarget==="version"?(n(),H(q,{key:0,label:"版本增量类型",required:""},{default:a(()=>[o(X,{modelValue:d.value.versionBump,"onUpdate:modelValue":m[6]||(m[6]=re=>d.value.versionBump=re)},{default:a(()=>[o(Z,{value:"patch"},{default:a(()=>m[26]||(m[26]=[R("补丁版本 (x.x.+1)")])),_:1}),o(Z,{value:"minor"},{default:a(()=>m[27]||(m[27]=[R("次版本 (x.+1.0)")])),_:1}),o(Z,{value:"major"},{default:a(()=>m[28]||(m[28]=[R("主版本 (+1.0.0)")])),_:1})]),_:1},8,["modelValue"])]),_:1})):z("",!0),d.value.versionTarget==="dependency"?(n(),v(be,{key:1},[o(q,{label:"依赖类型",required:""},{default:a(()=>[o(X,{modelValue:d.value.dependencyType,"onUpdate:modelValue":m[7]||(m[7]=re=>d.value.dependencyType=re)},{default:a(()=>[o(Z,{value:"dependencies"},{default:a(()=>m[29]||(m[29]=[R("dependencies")])),_:1}),o(Z,{value:"devDependencies"},{default:a(()=>m[30]||(m[30]=[R("devDependencies")])),_:1})]),_:1},8,["modelValue"])]),_:1}),o(q,{label:"依赖包名称",required:""},{default:a(()=>[o(ie,{modelValue:d.value.dependencyName,"onUpdate:modelValue":m[8]||(m[8]=re=>d.value.dependencyName=re),placeholder:"请先选择 package.json",clearable:"",filterable:"","allow-create":"",style:{width:"100%"}},{default:a(()=>[(n(!0),v(be,null,Me(g.value,re=>(n(),H(j,{key:re,label:re,value:re},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),o(q,{label:"版本号来源",required:""},{default:a(()=>[o(X,{modelValue:d.value.versionSource,"onUpdate:modelValue":m[9]||(m[9]=re=>d.value.versionSource=re)},{default:a(()=>[o(Z,{value:"bump"},{default:a(()=>m[31]||(m[31]=[R("自动递增")])),_:1}),o(Z,{value:"manual"},{default:a(()=>m[32]||(m[32]=[R("手动输入")])),_:1}),o(Z,{value:"reference",disabled:B.value.length===0},{default:a(()=>[m[33]||(m[33]=R(" 引用输出 ")),B.value.length===0?(n(),H(ve,{key:0,content:"无可用的前置命令节点",placement:"top"},{default:a(()=>[o(b,{style:{"margin-left":"4px"}},{default:a(()=>[o(t(os))]),_:1})]),_:1})):z("",!0)]),_:1},8,["disabled"])]),_:1},8,["modelValue"])]),_:1}),d.value.versionSource==="bump"?(n(),H(q,{key:0,label:"递增类型",required:""},{default:a(()=>[o(X,{modelValue:d.value.dependencyVersionBump,"onUpdate:modelValue":m[10]||(m[10]=re=>d.value.dependencyVersionBump=re)},{default:a(()=>[o(Z,{value:"patch"},{default:a(()=>m[34]||(m[34]=[R("补丁版本")])),_:1}),o(Z,{value:"minor"},{default:a(()=>m[35]||(m[35]=[R("次版本")])),_:1}),o(Z,{value:"major"},{default:a(()=>m[36]||(m[36]=[R("主版本")])),_:1})]),_:1},8,["modelValue"])]),_:1})):z("",!0),d.value.versionSource==="manual"?(n(),H(q,{key:1,label:"版本号",required:""},{default:a(()=>[o(Ce,{modelValue:d.value.dependencyVersion,"onUpdate:modelValue":m[11]||(m[11]=re=>d.value.dependencyVersion=re),placeholder:"例如: 1.2.3"},null,8,["modelValue"])]),_:1})):z("",!0),d.value.versionSource==="reference"?(n(),v(be,{key:2},[o(q,{label:"引用节点",required:""},{default:a(()=>[o(ie,{modelValue:d.value.inputRef,"onUpdate:modelValue":m[12]||(m[12]=re=>d.value.inputRef=re),"value-key":"nodeId",placeholder:"选择要引用的前置节点",style:{width:"100%"}},{default:a(()=>[(n(!0),v(be,null,Me(B.value,re=>(n(),H(j,{key:re.id,label:w(re),value:{nodeId:re.id,outputKey:"stdout"}},{default:a(()=>[s("div",E2,[s("span",O2,i(w(re)),1),s("span",N2,"ID: "+i(re.id.substring(0,15))+"...",1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),d.value.inputRef?(n(),H(q,{key:0,label:"输出字段",required:""},{default:a(()=>[o(ie,{modelValue:d.value.inputRef.outputKey,"onUpdate:modelValue":m[13]||(m[13]=re=>d.value.inputRef.outputKey=re),placeholder:"选择要引用的输出字段",style:{width:"100%"}},{default:a(()=>[(n(!0),v(be,null,Me(_(B.value.find(re=>{var W;return re.id===((W=d.value.inputRef)==null?void 0:W.nodeId)})),re=>(n(),H(j,{key:re.key,label:re.label,value:re.key},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})):z("",!0),s("div",G2,[o(b,null,{default:a(()=>[o(t(os))]),_:1}),m[37]||(m[37]=s("span",null,"版本号将使用所选节点的输出结果",-1))])],64)):z("",!0)],64)):z("",!0)]),_:1})])):z("",!0)])):z("",!0)]),_:1},8,["modelValue"])}}}),z2=De(x2,[["__scopeId","data-v-142fa535"]]),H2={class:"flow-workspace-container"},I2={class:"left-sidebar"},j2={class:"sidebar-header"},U2={class:"orchestration-list"},W2=["onClick"],J2={class:"item-content"},q2={key:0,class:"description"},K2={class:"item-actions"},Y2={class:"flow-canvas"},Q2={class:"canvas-header"},Z2={class:"header-info"},X2={class:"header-actions"},ev={class:"right-sidebar"},tv={class:"node-toolbox"},sv=Se({__name:"FlowOrchestrationWorkspace",props:{visible:{type:Boolean}},emits:["update:visible","execute-orchestration"],setup(K,{emit:T}){const l=K,u=T,p=Qe(),c=pe({get:()=>l.visible,set:M=>u("update:visible",M)}),{onConnect:d,addEdges:g,getViewport:C,setViewport:S,onNodeDragStart:B,onNodeDragStop:_,getSelectedEdges:w}=jo(),y=h([]),k=h([]),V=h(""),E=h(""),L=h(null),F=h(!1),m=h(null);let G=null;const q=pe(()=>p.orchestrations||[]),Z=h(null);let X=1;function x(M){return`${M}-${Date.now()}-${X++}`}function b(){L.value&&V.value.trim()&&(G&&clearTimeout(G),G=window.setTimeout(()=>{we()},1e3))}function D(){y.value=[{id:"start-node",type:"start",position:{x:50,y:200},data:{id:"start-node",type:"start",label:"开始",enabled:!0}}],k.value=[],X=1}function j(M){const A=x(M),Q={id:A,type:M,position:{x:Math.random()*600+250,y:Math.random()*200+100},data:{id:A,type:M,label:M==="command"?"命令节点":M==="wait"?"等待节点":"版本管理",enabled:!0,config:void 0}};y.value.push(Q),m.value=Q,F.value=!0,r.success(`已添加${Q.data.label}`),b()}d(M=>{g([M]),b()}),B(M=>{y.value.forEach(Q=>{Q.data&&(Q.data.selected=!1)});const A=y.value.find(Q=>Q.id===M.node.id);A&&A.data&&(A.data.selected=!0)}),_(()=>{b()});function ie(M){y.value.forEach(Q=>{Q.data&&(Q.data.selected=!1)});const A=y.value.find(Q=>Q.id===M.node.id);A&&(A.data.selected=!0,A.type!=="start"&&(m.value=A,F.value=!0))}function ve(){y.value.forEach(M=>{M.data&&(M.data.selected=!1)})}function Ce(M,A){const Q=y.value.find(le=>le.id===M);Q&&(Q.data.config=A,Q.data.label=re(A),b())}function re(M){return M.type==="command"?M.commandName||"未知命令":M.type==="wait"?`等待 ${M.waitSeconds} 秒`:M.type==="version"?M.versionTarget==="dependency"?`修改依赖: ${M.dependencyName}`:`版本号 +1 (${M.versionBump})`:"未配置"}function W(M){var A;if(M==="start-node"){r.warning("不能删除起始节点");return}y.value=y.value.filter(Q=>Q.id!==M),k.value=k.value.filter(Q=>Q.source!==M&&Q.target!==M),((A=m.value)==null?void 0:A.id)===M&&(m.value=null,F.value=!1),r.success("节点已删除"),b()}function Y(M){for(const A of M)A.type==="remove"&&(k.value=k.value.filter(Q=>Q.id!==A.id));b()}function ae(M){if(M.key==="Delete"||M.key==="Backspace"){const A=w.value;if(A&&A.length>0){const Q=A.map(le=>le.id);k.value=k.value.filter(le=>!Q.includes(le.id)),b(),M.preventDefault()}}}function fe(){Ie.confirm("确定要清空整个流程吗?","确认清空",{confirmButtonText:"清空",cancelButtonText:"取消",type:"warning"}).then(()=>{D(),r.success("流程已清空"),b()}).catch(()=>{})}function he(){if(y.value.length<=1){r.info("节点太少,无需优化布局");return}const M=new Map,A=new Map;y.value.forEach(oe=>{M.set(oe.id,[]),A.set(oe.id,0)}),k.value.forEach(oe=>{var ge;(ge=M.get(oe.source))==null||ge.push(oe.target),A.set(oe.target,(A.get(oe.target)||0)+1)});const Q=[],le=new Set;let me=y.value.filter(oe=>A.get(oe.id)===0).map(oe=>oe.id);for(;me.length>0;){Q.push([...me]),me.forEach(ge=>le.add(ge));const oe=new Set;me.forEach(ge=>{var Oe;(Oe=M.get(ge))==null||Oe.forEach(P=>{k.value.filter(I=>I.target===P).every(I=>le.has(I.source))&&!le.has(P)&&oe.add(P)})}),me=Array.from(oe)}const de=y.value.filter(oe=>!le.has(oe.id)).map(oe=>oe.id);de.length>0&&Q.push(de);const J=220,O=120,N=50,se=150;Q.forEach((oe,ge)=>{const Oe=N+ge*J,P=(oe.length-1)*O,f=se+(400-P)/2;oe.forEach((I,Ae)=>{const qe=y.value.find(ze=>ze.id===I);qe&&(qe.position={x:Oe,y:Math.max(se,f+Ae*O)})})}),r.success("布局优化完成"),b()}async function we(){if(!V.value.trim()){r.warning("请输入编排名称");return}const M=y.value.filter(me=>me.type!=="start"&&!me.data.config);if(M.length>0){const me=M.map(de=>de.data.label).join("、");r.warning(`以下节点还未配置:${me}。未配置的节点不会被保存。`)}const A=$e();if(A.length===0){r.warning("请至少添加一个执行步骤");return}const Q=C(),le={name:V.value.trim(),description:E.value.trim(),steps:A,flowData:{nodes:y.value,edges:k.value,viewport:{x:Q.x,y:Q.y,zoom:Q.zoom}}};if(L.value)await p.updateOrchestration(L.value,le);else{const me=await p.saveOrchestration(le);r.success("编排已保存"),me&&typeof me=="object"&&"id"in me&&(Z.value=me.id,L.value=me.id)}}function $e(){const M=[],A=new Set,Q=new Set;function le(de){if(A.has(de))return;if(Q.has(de)){r.warning("检测到循环依赖,请检查流程图");return}Q.add(de);const J=y.value.find(N=>N.id===de);if(!J){Q.delete(de);return}J.type!=="start"&&J.data.config&&M.push({...J.data.config,nodeId:J.id,enabled:J.data.enabled??!0}),Q.delete(de),A.add(de);const O=k.value.filter(N=>N.source===de);for(const N of O)le(N.target)}const me=y.value.find(de=>de.type==="start");if(me){const de=k.value.filter(J=>J.source===me.id);for(const J of de)le(J.target)}return M}function Ne(){const M=$e();if(M.length===0){r.warning("请至少添加一个执行步骤");return}c.value=!1,u("execute-orchestration",M)}function Le(M){const A=$e();if(A.length===0){r.warning("请至少添加一个执行步骤");return}const Q=A.findIndex(le=>le.nodeId===M);if(Q===-1){r.warning("未找到该节点对应的步骤");return}c.value=!1,u("execute-orchestration",A,Q)}function xe(M){const A=y.value.find(le=>le.id===M);if(!A||A.type==="start"||!A.data.config){r.warning("该节点无法执行");return}const Q={...A.data.config,nodeId:A.id,enabled:A.data.enabled??!0};c.value=!1,u("execute-orchestration",[Q],0,!0)}function ue(M){Z.value=M.id,L.value=M.id,V.value=M.name,E.value=M.description||"",M.flowData?(y.value=JSON.parse(JSON.stringify(M.flowData.nodes)),k.value=JSON.parse(JSON.stringify(M.flowData.edges)),M.flowData.viewport&&setTimeout(()=>{S(M.flowData.viewport)},100)):$(M.steps)}function $(M){D();let A=150,Q="start-node";M.forEach(le=>{const me=x(le.type),de={id:me,type:le.type,position:{x:250,y:A},data:{id:me,type:le.type,label:re(le),config:le,enabled:le.enabled??!0}};y.value.push(de),k.value.push({id:`edge-${Q}-${me}`,source:Q,target:me}),Q=me,A+=120})}function U(){Z.value=null,L.value=null,V.value="",E.value="",D()}async function ne(M){try{await Ie.confirm(`确定要删除编排 "${M.name}" 吗?`,"确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}),await p.deleteOrchestration(M.id),r.success("编排已删除"),L.value===M.id&&U()}catch(A){A!=="cancel"&&r.error(`删除编排失败: ${A.message||A}`)}}function ce(M){c.value=!1,u("execute-orchestration",M.steps,0)}return pt(()=>{D(),window.addEventListener("keydown",ae)}),ls(()=>{window.removeEventListener("keydown",ae)}),(M,A)=>{const Q=Pe,le=ot,me=Ye;return n(),H(Ue,{modelValue:c.value,"onUpdate:modelValue":A[8]||(A[8]=de=>c.value=de),title:"可视化编排工作台","close-on-click-modal":!1,"append-to-body":!0,"custom-class":"flow-orchestration-dialog",width:"95vw"},{default:a(()=>[s("div",H2,[s("div",I2,[s("div",j2,[A[9]||(A[9]=s("h3",null,"已保存的编排",-1)),o(Fe,{tooltip:"新建编排",size:"small","hover-color":"var(--color-primary)",onClick:U},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(Wt))]),_:1})]),_:1})]),s("div",U2,[q.value.length===0?(n(),H(le,{key:0,description:"暂无编排","image-size":80})):z("",!0),(n(!0),v(be,null,Me(q.value,de=>(n(),v("div",{key:de.id,class:ke(["orchestration-item",{active:Z.value===de.id}]),onClick:J=>ue(de)},[s("div",J2,[s("h4",null,i(de.name),1),de.description?(n(),v("p",q2,i(de.description),1)):z("",!0),s("div",K2,[o(Fe,{tooltip:"执行",size:"small","hover-color":"var(--color-primary)",onClick:Ze(J=>ce(de),["stop"])},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:2},1032,["onClick"]),o(Fe,{tooltip:"删除",size:"small","hover-color":"var(--color-danger)",onClick:Ze(J=>ne(de),["stop"])},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(it))]),_:1})]),_:2},1032,["onClick"])])])],10,W2))),128))])]),s("div",Y2,[s("div",Q2,[s("div",Z2,[o(me,{modelValue:V.value,"onUpdate:modelValue":A[0]||(A[0]=de=>V.value=de),placeholder:"编排名称(必填)",size:"large",style:{width:"300px","margin-right":"10px"}},null,8,["modelValue"]),o(me,{modelValue:E.value,"onUpdate:modelValue":A[1]||(A[1]=de=>E.value=de),placeholder:"编排描述(选填)",size:"large",style:{width:"400px"}},null,8,["modelValue"])]),s("div",X2,[o(Fe,{tooltip:"保存编排",size:"large","hover-color":"var(--color-success)",onClick:we},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(ks))]),_:1})]),_:1}),o(Fe,{tooltip:"执行流程",size:"large","hover-color":"var(--color-primary)",onClick:Ne},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:1}),o(Fe,{tooltip:"清空流程",size:"large","hover-color":"var(--color-danger)",onClick:fe},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(it))]),_:1})]),_:1})])]),o(t(Uo),{nodes:y.value,"onUpdate:nodes":A[2]||(A[2]=de=>y.value=de),edges:k.value,"onUpdate:edges":A[3]||(A[3]=de=>k.value=de),class:"vue-flow-container","default-zoom":1,"min-zoom":.2,"max-zoom":4,onNodeClick:ie,onPaneClick:ve,onEdgesChange:Y},{"node-start":a(({data:de})=>[o(s2,{data:de},null,8,["data"])]),"node-command":a(({data:de,id:J})=>[o(zm,{data:de,id:J,onDelete:W,onExecuteFromNode:Le,onExecuteSingleNode:xe},null,8,["data","id"])]),"node-wait":a(({data:de,id:J})=>[o(Jm,{data:de,id:J,onDelete:W,onExecuteFromNode:Le,onExecuteSingleNode:xe},null,8,["data","id"])]),"node-version":a(({data:de,id:J})=>[o(e2,{data:de,id:J,onDelete:W,onExecuteFromNode:Le,onExecuteSingleNode:xe},null,8,["data","id"])]),default:a(()=>[o(t(Wo),{"pattern-color":"#aaa",gap:16}),o(t(Jo),null,{default:a(()=>[s("button",{class:"vue-flow__controls-button",onClick:he,title:"优化布局"},[o(Q,null,{default:a(()=>[o(t(qo))]),_:1})])]),_:1})]),_:1},8,["nodes","edges"])]),s("div",ev,[A[13]||(A[13]=s("div",{class:"sidebar-header"},[s("h3",null,"节点工具箱")],-1)),s("div",tv,[s("div",{class:"tool-item",onClick:A[4]||(A[4]=de=>j("command"))},A[10]||(A[10]=[s("div",{class:"tool-icon command"},"📋",-1),s("div",{class:"tool-label"},"命令节点",-1),s("div",{class:"tool-desc"},"执行自定义命令",-1)])),s("div",{class:"tool-item",onClick:A[5]||(A[5]=de=>j("wait"))},A[11]||(A[11]=[s("div",{class:"tool-icon wait"},"⏰",-1),s("div",{class:"tool-label"},"等待节点",-1),s("div",{class:"tool-desc"},"暂停指定时间",-1)])),s("div",{class:"tool-item",onClick:A[6]||(A[6]=de=>j("version"))},A[12]||(A[12]=[s("div",{class:"tool-icon version"},"📦",-1),s("div",{class:"tool-label"},"版本管理",-1),s("div",{class:"tool-desc"},"修改版本号或依赖",-1)]))])])]),o(z2,{modelValue:F.value,"onUpdate:modelValue":A[7]||(A[7]=de=>F.value=de),node:m.value,"all-nodes":y.value,edges:k.value,onUpdateConfig:Ce},null,8,["modelValue","node","all-nodes","edges"])]),_:1},8,["modelValue"])}}}),ov=De(sv,[["__scopeId","data-v-986bd0a1"]]),av={class:"console-header"},nv={class:"header-left"},lv={class:"console-title"},iv={class:"header-actions"},rv={key:0,class:"execution-controls"},cv={class:"console-content"},uv={key:0,class:"orchestration-steps-panel"},dv={class:"steps-header"},pv={class:"steps-title"},fv={class:"steps-list"},mv={class:"step-indicator"},vv={key:4,class:"step-number"},hv={class:"step-content"},gv={class:"step-header"},Cv={key:0,class:"step-disabled-tag"},yv={class:"step-name"},_v={key:0,class:"terminal-waiting-panel"},bv={class:"waiting-content"},wv={class:"waiting-text"},$v={class:"waiting-desc"},kv={class:"waiting-actions"},Sv={class:"console-input-row"},Bv=["title"],Fv={key:1,class:"console-output"},Av=["onClick"],Tv={class:"cmd-line"},Dv={class:"cmd-text"},Mv={class:"ts"},Pv={class:"cmd-actions"},Vv={key:0,class:"output-content"},Ev=["innerHTML"],Ov=["innerHTML"],Nv={key:0,class:"stdin-input-row"},Gv=Se({__name:"CommandConsole",setup(K){const T=Qe(),l=je();function u(){const ue=window.location.port||"80";return parseInt(ue==="5173"||ue==="4173"||ue==="5544"?"3000":ue,10)}const p=u(),c=h(null),d=h(""),g=h(""),C=h(!1),S=h(!1),B=h([]);let _=0;function w(){Ie.confirm("确定要清空所有执行历史吗?此操作不可撤销。","清空历史",{confirmButtonText:"清空",cancelButtonText:"取消",type:"warning"}).then(()=>{B.value=[],r.success("执行历史已清空")}).catch(()=>{})}function y(){m&&m(!0)}function k(){m&&m(!1)}const V=h([]),E=h(-1),L=h(!1),F=h("");let m=null;const G=h(localStorage.getItem("isConsoleExpanded")!=="false"),q=new Ko({fg:"#e5e5e5",bg:"transparent",newline:!1,escapeXML:!1,stream:!1,colors:{0:"var(--color-black)",1:"#cd3131",2:"#0dbc79",3:"#e5e510",4:"#2472c8",5:"#bc3fbc",6:"#11a8cd",7:"#e5e5e5",8:"#666666",9:"#f14c4c",10:"#23d18b",11:"#f5f543",12:"#3b8eea",13:"#d670d6",14:"#29b8db",15:"var(--color-white)"}});function Z(ue){return q.toHtml(ue)}const X=h(!1),x=h(localStorage.getItem("useTerminal")==="true"),b=h(!1),D=h(!1),j=h(!1);async function ie(){var U,ne;const ue=g.value.trim();if(!ue||C.value)return;if(C.value=!0,x.value){try{const M=await(await fetch("/api/exec-in-terminal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:ue})})).json();M!=null&&M.success?r.success("已在新终端中执行命令"):r.error((M==null?void 0:M.error)||"执行失败")}catch(ce){r.error((ce==null?void 0:ce.message)||"执行失败")}finally{C.value=!1,g.value=""}return}const $={id:++_,command:ue,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:"",stderr:"",running:!0};B.value.unshift($),g.value="";try{console.log("[前端-控制台] 开始发送流式请求:",ue);const ce=await fetch("/api/exec-stream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:ue})});if(console.log("[前端-控制台] 收到响应,状态:",ce.status,ce.statusText),!ce.ok)throw new Error(`HTTP ${ce.status}: ${ce.statusText}`);const M=(U=ce.body)==null?void 0:U.getReader(),A=new TextDecoder;if(!M)throw new Error("无法读取响应流");console.log("[前端-控制台] 开始读取流数据");let Q="",le=0;for(;;){const{done:me,value:de}=await M.read();if(le++,console.log(`[前端-控制台] 读取数据块 #${le}, done:`,me,"size:",(de==null?void 0:de.length)||0),me)break;const J=A.decode(de,{stream:!0});console.log("[前端-控制台] 解码数据块:",J.substring(0,200)),Q+=J;const O=Q.split(`
|
|
51
|
+
添加到暂存区后可以提交该文件。`}else if(N&&N.type==="added"){const oe=await(await fetch(`/api/diff-cached?file=${encodeURIComponent(O)}`)).json();g.value=oe.diff||e("@13D1C:没有变更"),C.value=oe.stats||null}else{const oe=await(await fetch(`/api/diff?file=${encodeURIComponent(O)}`)).json();g.value=oe.diff||e("@13D1C:没有变更"),C.value=oe.stats||null}}catch(N){r({message:"获取文件差异失败: "+N.message,type:"error"}),g.value="获取差异失败: "+N.message}finally{B.value=!1}}function he(O){if(S.value=!0,u.fileList.length>0){const N=u.fileList.find(se=>se.path===O.path)||u.fileList[0];fe(N.path)}}async function we(O){await u.addFileToStage(O)}async function $e(O){await u.unstageFile(O)}async function Ne(){try{if(!u.isGitRepo)return;await u.fetchStatus(),await u.getBranchStatus(!0),r.success(e("@13D1C:Git 状态已刷新"))}catch(O){r.error("刷新失败: "+O.message)}}async function Le(){try{await u.gitPull(),await W()}catch(O){console.error("拉取操作发生错误:",O)}}const xe=h(!1);async function ue(){if(!u.currentBranch){r.warning(e("@13D1C:未知当前分支"));return}try{xe.value=!0;const O=`git push -u origin ${u.currentBranch}`,se=await(await fetch("/api/exec",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:O})})).json();se.success?(r.success(e("@13D1C:已推送并设置上游分支")),await u.getAllBranches(),await u.getCurrentBranch(!0),await u.getBranchStatus(!0)):r.error(se.error||e("@13D1C:设置上游失败"))}catch(O){r.error(`${e("@13D1C:设置上游失败: ")}${O.message}`)}finally{xe.value=!1}}async function $(O){try{await Ie.confirm(`${e('@13D1C:确定要撤回文件 "')}${O}${e('@13D1C:" 的所有修改吗?此操作无法撤销。')}`,e("@13D1C:撤回修改"),{confirmButtonText:e("@13D1C:确定"),cancelButtonText:e("@13D1C:取消"),type:"warning"});const se=await(await fetch("/api/revert_file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:O})})).json();se.success?(r.success(e("@13D1C:已撤回文件修改")),await W()):r.error(se.error?`${e("@13D1C:撤回失败: ")}${se.error}`:e("@13D1C:撤回文件修改失败,请重试"))}catch(N){if(N==="cancel"||N.message==="cancel")return;const se=N.message||e("@13D1C:未知错误");se!=="undefined"?r.error(`${e("@13D1C:撤回文件修改失败: ")}${se}`):r.error(e("@13D1C:撤回文件修改失败,请重试"))}}function U(O){const N=O.split("/");return N[N.length-1]}function ne(O){const N=O.split("/");return N.length<=1?"":N.slice(0,-1).join("/")}function ce(O){const N=O.replace(/\\/g,"/");return p.lockedFiles.some(oe=>{const ge=oe.replace(/\\/g,"/");return N===ge})}async function M(O){if(!w.value[O]){w.value[O]=!0;try{ce(O)?await p.unlockFile(O):await p.lockFile(O)}finally{delete w.value[O]}}}function A(O){ie.value[O]=!ie.value[O]}const Q=h([]),le=h([]),me=h([]),de=h([]);function J(){const O=u.fileList.filter(I=>I.type==="conflicted").map(I=>({path:I.path,type:I.type,locked:ce(I.path)})),N=xt(O);Q.value.length>0&&zt(N,Q.value),Q.value=N;const se=u.fileList.filter(I=>I.type==="added").map(I=>({path:I.path,type:I.type,locked:ce(I.path)})),oe=xt(se);le.value.length>0&&zt(oe,le.value),le.value=oe;const ge=u.fileList.filter(I=>I.type==="modified"||I.type==="deleted").map(I=>({path:I.path,type:I.type,locked:ce(I.path)})),Oe=xt(ge);me.value.length>0&&zt(Oe,me.value),me.value=Oe;const P=u.fileList.filter(I=>I.type==="untracked").map(I=>({path:I.path,type:I.type,locked:ce(I.path)})),f=xt(P);de.value.length>0&&zt(f,de.value),de.value=f}return Ge(()=>u.fileList,()=>{Ce.value==="tree"&&J()},{deep:!0}),Ge(Ce,O=>{O==="tree"&&J(),localStorage.setItem(Hs,O),window.dispatchEvent(new CustomEvent("file-list-view-mode-change",{detail:{mode:O}}))}),pt(()=>{W(),p.loadConfig(),p.loadLockedFiles(),Ce.value==="tree"&&J();const O=ge=>{const P=ge.detail.mode;Ce.value!==P&&(Ce.value=P)},N=()=>{W(),d.value&&fe(d.value)};window.addEventListener("file-list-view-mode-change",O),window.addEventListener("git-status-refresh",N);const se=()=>{document.visibilityState==="visible"&&u.isGitRepo&&(console.log("[页面可见性] 标签页已激活,刷新Git状态和分支信息"),Promise.all([u.fetchStatus(),u.getBranchStatus()]).catch(ge=>console.error("刷新失败:",ge)))},oe=()=>{u.isGitRepo&&(console.log("[窗口焦点] 浏览器窗口已激活,刷新Git状态和分支信息"),Promise.all([u.fetchStatus(),u.getBranchStatus()]).catch(ge=>console.error("刷新失败:",ge)))};return document.addEventListener("visibilitychange",se),window.addEventListener("focus",oe),()=>{window.removeEventListener("file-list-view-mode-change",O),window.removeEventListener("git-status-refresh",N),document.removeEventListener("visibilitychange",se),window.removeEventListener("focus",oe)}}),T({refreshStatus:Ne}),(O,N)=>{const se=Pe,oe=Ee,ge=Ct,Oe=Re,P=Vt;return n(),v(be,null,[s("div",pp,[s("div",fp,[o(ui,{onToggleNpmPanel:V}),s("div",mp,[s("div",vp,[o(Fe,{tooltip:t(e)("@13D1C:Git Pull (拉取远程更新)"),size:"large","hover-color":"var(--color-primary)",disabled:!t(u).hasUpstream||t(u).isGitPulling,onClick:Le},{default:a(()=>[t(u).isGitPulling?(n(),H(se,{key:0,class:"is-loading"},{default:a(()=>[o(t(et))]),_:1})):(n(),H(We,{key:1,"icon-class":"git-pull-request"}))]),_:1},8,["tooltip","disabled"]),o(fo),o(mo,{from:"status"}),t(u).fileList.length>0?(n(),H(Fe,{key:0,tooltip:L.value?t(e)("@13D1C:退出选择模式"):t(e)("@13D1C:选择文件进行储藏"),size:"large",active:L.value,"hover-color":"var(--color-primary)",onClick:F},{default:a(()=>[o(We,{"icon-class":"muti-choose"})]),_:1},8,["tooltip","active"])):z("",!0),L.value&&E.value.size>0?(n(),H(Fc,{key:1,"selected-files":Z.value,onSuccess:F},null,8,["selected-files"])):z("",!0),L.value?z("",!0):(n(),H(co,{key:2})),o(uo)]),s("div",hp,[o(Vd,{variant:"icon"}),o(dp),o(Fe,{tooltip:t(e)("@13D1C:刷新状态"),size:"large",disabled:c.value,onClick:Ne},{default:a(()=>[c.value?(n(),H(se,{key:0,class:"is-loading"},{default:a(()=>[o(t(et))]),_:1})):(n(),H(se,{key:1},{default:a(()=>[o(t(Ps))]),_:1}))]),_:1},8,["tooltip","disabled"])])])]),at((n(),v("div",{class:"card-content","element-loading-text":t(u).isGitPulling?t(e)("@13D1C:正在拉取代码..."):t(e)("@13D1C:正在获取远程分支信息...")},[t(u).isGitRepo?(n(),v("div",_p,[t(u).hasUpstream?z("",!0):(n(),v("div",bp,[s("div",wp,[o(se,{class:"tip-icon"},{default:a(()=>[o(t(dt))]),_:1}),s("span",$p,i(t(e)("@13D1C:当前分支未设置上游分支")),1)]),s("div",kp,[s("div",Sp,i(t(e)("@13D1C:首次推送后即可建立与远程的跟踪关系,后续可直接 pull/push。")),1),s("div",Bp,[o(oe,{size:"small",type:"primary",plain:"",loading:xe.value,disabled:xe.value,onClick:ue},{default:a(()=>[R(i(t(e)("@13D1C:设置上游并推送")),1)]),_:1},8,["loading","disabled"])])])])),t(u).hasUpstream&&(t(u).branchAhead>0||t(u).branchBehind>0)?(n(),v("div",Fp,[s("div",Ap,[s("div",Tp,[o(Oe,{content:t(e)("@13D1C:本地分支与远程分支的状态对比"),placement:"top","show-after":200},{default:a(()=>[s("div",Dp,[t(u).branchAhead>0?(n(),H(ge,{key:0,size:"small",type:"warning",class:"status-badge"},{default:a(()=>[s("span",Mp,[o(se,null,{default:a(()=>[o(t(Zs))]),_:1}),R(" 你的分支领先 'origin/"+i(t(u).currentBranch)+"' "+i(t(u).branchAhead)+" "+i(t(e)("@13D1C:个提交")),1)])]),_:1})):z("",!0),t(u).branchBehind>0?(n(),H(ge,{key:1,size:"small",type:"info",class:"status-badge"},{default:a(()=>[s("span",Pp,[o(se,null,{default:a(()=>[o(t(vt))]),_:1}),R(" 你的分支落后 'origin/"+i(t(u).currentBranch)+"' "+i(t(u).branchBehind)+" "+i(t(e)("@13D1C:个提交")),1)])]),_:1})):z("",!0)])]),_:1},8,["content"])])])])):z("",!0),t(u).fileList.length?(n(),v("div",Vp,[s("div",Ep,[s("div",Op,[s("h4",null,i(t(e)("@13D1C:文件列表")),1),t(u).fileList.length>0?(n(),v("span",Np,"("+i(t(u).fileList.length)+")",1)):z("",!0)]),s("div",Gp,[o(Fe,{tooltip:t(e)("@E80AC:列表视图"),size:"small",active:Ce.value==="list",onClick:N[0]||(N[0]=f=>Ce.value="list")},{default:a(()=>[o(ro,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"]),o(Fe,{tooltip:t(e)("@E80AC:树状视图"),size:"small",active:Ce.value==="tree",onClick:N[1]||(N[1]=f=>Ce.value="tree")},{default:a(()=>[o(io,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"])])]),L.value?(n(),v("div",Lp,[s("div",Rp,[s("span",xp,[R(i(t(e)("@13D1C:已选中"))+" ",1),s("strong",null,i(E.value.size),1),R(" "+i(t(e)("@13D1C:个文件")),1)])]),s("div",zp,[o(oe,{size:"small",type:"primary",plain:"",onClick:G},{default:a(()=>[R(i(E.value.size===t(u).fileList.length?t(e)("@13D1C:取消全选"):t(e)("@13D1C:全选")),1)]),_:1})])])):z("",!0),s("div",Hp,[Ce.value==="list"?(n(),v(be,{key:0},[o(ts,{files:t(u).fileList.filter(f=>f.type==="conflicted"),title:t(e)("@13D1C:冲突文件"),"group-key":"conflicted","collapsed-groups":ie.value,"is-file-locked":ce,"is-locking":y,"get-file-name":U,"get-file-directory":ne,"is-selection-mode":L.value,"is-file-selected":q,onToggleCollapse:A,onFileClick:he,onToggleFileLock:M,onToggleFileSelection:m,onStageFile:we,onRevertFileChanges:$},null,8,["files","title","collapsed-groups","is-selection-mode"]),o(ts,{files:t(u).fileList.filter(f=>f.type==="added"),title:t(e)("@13D1C:已暂存的更改"),"group-key":"staged","collapsed-groups":ie.value,"is-file-locked":ce,"is-locking":y,"get-file-name":U,"get-file-directory":ne,"is-selection-mode":L.value,"is-file-selected":q,onToggleCollapse:A,onFileClick:he,onToggleFileLock:M,onToggleFileSelection:m,onUnstageFile:$e},null,8,["files","title","collapsed-groups","is-selection-mode"]),o(ts,{files:t(u).fileList.filter(f=>f.type==="modified"||f.type==="deleted"),title:t(e)("@13D1C:未暂存的更改"),"group-key":"unstaged","collapsed-groups":ie.value,"is-file-locked":ce,"is-locking":y,"get-file-name":U,"get-file-directory":ne,"is-selection-mode":L.value,"is-file-selected":q,onToggleCollapse:A,onFileClick:he,onToggleFileLock:M,onToggleFileSelection:m,onStageFile:we,onRevertFileChanges:$,onManageLockedFiles:N[2]||(N[2]=f=>j.value=!0)},null,8,["files","title","collapsed-groups","is-selection-mode"]),o(ts,{files:t(u).fileList.filter(f=>f.type==="untracked"),title:t(e)("@13D1C:未跟踪的文件"),"group-key":"untracked","collapsed-groups":ie.value,"is-file-locked":ce,"is-locking":y,"get-file-name":U,"get-file-directory":ne,"is-selection-mode":L.value,"is-file-selected":q,onToggleCollapse:A,onFileClick:he,onToggleFileLock:M,onToggleFileSelection:m,onStageFile:we,onRevertFileChanges:$,onManageLockedFiles:N[3]||(N[3]=f=>j.value=!0)},null,8,["files","title","collapsed-groups","is-selection-mode"])],64)):(n(),v(be,{key:1},[t(u).fileList.filter(f=>f.type==="conflicted").length?(n(),v("div",Ip,[s("div",{class:"tree-group-header",onClick:N[4]||(N[4]=f=>A("conflicted"))},[o(se,{class:ke(["collapse-icon",{collapsed:ie.value.conflicted}])},{default:a(()=>[o(t(vt))]),_:1},8,["class"]),s("h5",null,i(t(e)("@13D1C:冲突文件")),1),s("span",jp,i(t(u).fileList.filter(f=>f.type==="conflicted").length),1)]),ie.value.conflicted?z("",!0):(n(),H(Ht,{key:0,"tree-data":Q.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":ce,"is-locking":y,onFileSelect:N[5]||(N[5]=f=>he({path:f})),onToggleLock:M,onStage:we,onRevert:$},null,8,["tree-data"]))])):z("",!0),t(u).fileList.filter(f=>f.type==="added").length?(n(),v("div",Up,[s("div",{class:"tree-group-header",onClick:N[6]||(N[6]=f=>A("staged"))},[o(se,{class:ke(["collapse-icon",{collapsed:ie.value.staged}])},{default:a(()=>[o(t(vt))]),_:1},8,["class"]),s("h5",null,i(t(e)("@13D1C:已暂存的更改")),1),s("span",Wp,i(t(u).fileList.filter(f=>f.type==="added").length),1)]),ie.value.staged?z("",!0):(n(),H(Ht,{key:0,"tree-data":le.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":ce,"is-locking":y,onFileSelect:N[7]||(N[7]=f=>he({path:f})),onToggleLock:M,onUnstage:$e},null,8,["tree-data"]))])):z("",!0),t(u).fileList.filter(f=>f.type==="modified"||f.type==="deleted").length?(n(),v("div",Jp,[s("div",{class:"tree-group-header",onClick:N[8]||(N[8]=f=>A("unstaged"))},[o(se,{class:ke(["collapse-icon",{collapsed:ie.value.unstaged}])},{default:a(()=>[o(t(vt))]),_:1},8,["class"]),s("h5",null,i(t(e)("@13D1C:未暂存的更改")),1),s("span",qp,i(t(u).fileList.filter(f=>f.type==="modified"||f.type==="deleted").length),1)]),ie.value.unstaged?z("",!0):(n(),H(Ht,{key:0,"tree-data":me.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":ce,"is-locking":y,onFileSelect:N[9]||(N[9]=f=>he({path:f})),onToggleLock:M,onStage:we,onRevert:$},null,8,["tree-data"]))])):z("",!0),t(u).fileList.filter(f=>f.type==="untracked").length?(n(),v("div",Kp,[s("div",{class:"tree-group-header",onClick:N[10]||(N[10]=f=>A("untracked"))},[o(se,{class:ke(["collapse-icon",{collapsed:ie.value.untracked}])},{default:a(()=>[o(t(vt))]),_:1},8,["class"]),s("h5",null,i(t(e)("@13D1C:未跟踪的文件")),1),s("span",Yp,i(t(u).fileList.filter(f=>f.type==="untracked").length),1)]),ie.value.untracked?z("",!0):(n(),H(Ht,{key:0,"tree-data":de.value,"selected-file":"","show-action-buttons":!0,"is-file-locked":ce,"is-locking":y,onFileSelect:N[11]||(N[11]=f=>he({path:f})),onToggleLock:M,onStage:we,onRevert:$},null,8,["tree-data"]))])):z("",!0)],64))])])):t(u).isGitRepo?(n(),v("div",Qp,[s("div",Zp,[o(se,null,{default:a(()=>[o(t(Ts))]),_:1})]),s("div",Xp,i(t(e)("@13D1C:没有检测到任何更改")),1),s("div",e1,i(t(e)("@13D1C:工作区是干净的")),1)])):z("",!0)])):(n(),v("div",Cp,[s("div",yp,[s("p",null,i(t(e)("@13D1C:当前目录不是Git仓库")),1)])]))],8,gp)),[[P,t(u).isGitPulling||t(u).isGitFetching]]),o(mr,{visible:k.value,onClose:N[12]||(N[12]=f=>k.value=!1)},null,8,["visible"])]),o(Ue,{modelValue:S.value,"onUpdate:modelValue":N[13]||(N[13]=f=>S.value=f),title:t(e)("@13D1C:文件差异"),"custom-class":"file-diff-dialog",size:"extra-large",type:"flex","destroy-on-close":"",heightMode:"fixed"},{default:a(()=>[o(Ns,{files:X.value,diffContent:g.value,diffStats:C.value,selectedFile:d.value,isLoading:B.value,showActionButtons:!0,isFileLocked:ce,isLocking:y,context:"git-status",emptyText:t(e)("@13D1C:选择文件查看差异"),onFileSelect:x,onOpenFile:b,onOpenWithVscode:D,onToggleLock:M,onStage:we,onUnstage:$e,onRevert:$},null,8,["files","diffContent","diffStats","selectedFile","isLoading","emptyText"])]),_:1},8,["modelValue","title"]),o(Ue,{modelValue:j.value,"onUpdate:modelValue":N[14]||(N[14]=f=>j.value=f),title:t(e)("@13D1C:锁定文件管理"),size:"large","destroy-on-close":""},{default:a(()=>[s("div",t1,[s("div",s1,[o(se,{class:"description-icon"},{default:a(()=>[o(t(dt))]),_:1}),s("span",o1,i(t(e)("@13D1C:文件锁定功能说明")),1)]),s("div",a1,[s("ul",null,[s("li",null,i(t(e)("@13D1C:锁定的文件在执行 Git 提交时会被自动跳过,不会被添加到暂存区")),1)])])]),t(p).lockedFiles.length===0?(n(),v("div",n1,[s("div",l1,[o(se,null,{default:a(()=>[o(t(is))]),_:1})]),s("p",null,i(t(e)("@13D1C:当前没有锁定的文件")),1),s("p",i1,i(t(e)("@13D1C:您可以在文件列表中点击锁定按钮来锁定文件")),1)])):(n(),v("div",r1,[s("div",c1,[s("span",null,"🔒 已锁定 "+i(t(p).lockedFiles.length)+" "+i(t(e)("@13D1C:个文件")),1),o(Oe,{content:t(e)("@13D1C:这些文件在提交时会被自动跳过"),placement:"top"},{default:a(()=>[o(se,{class:"info-icon"},{default:a(()=>[o(t(dt))]),_:1})]),_:1},8,["content"]),N[15]||(N[15]=s("div",{style:{flex:"1"}},null,-1)),o(oe,{type:"danger",size:"small",plain:"",disabled:!t(p).lockedFiles.length,onClick:ae},{default:a(()=>[R(i(t(e)("@13D1C:清空全部锁定")),1)]),_:1},8,["disabled"])]),s("div",u1,[(n(!0),v(be,null,Me(t(p).lockedFiles,f=>(n(),v("div",{key:f,class:"locked-file-item"},[s("div",d1,[N[16]||(N[16]=s("div",{class:"file-status-indicator locked"},null,-1)),s("div",p1,[s("span",f1,i(U(f)),1),s("span",m1,i(ne(f)),1)])]),s("div",v1,[o(Fe,{tooltip:t(e)("@13D1C:解锁文件"),size:"small","hover-color":"var(--color-danger)","custom-class":"file-action-btn",onClick:I=>Y(f)},{default:a(()=>[o(se,null,{default:a(()=>[o(t(Us))]),_:1})]),_:2},1032,["tooltip","onClick"])])]))),128))])]))]),_:1},8,["modelValue","title"])],64)}}}),g1=De(h1,[["__scopeId","data-v-d638d681"]]),C1={class:"loading-container"},y1={class:"loading-text"},_1={key:0,class:"loading-progress"},b1=Se({__name:"GlobalLoading",props:{visible:{type:Boolean,default:!1},text:{default:e("@2AEBA:加载中...")},showProgress:{type:Boolean,default:!1},progress:{default:0},mock:{type:Boolean,default:!1}},setup(K){return(T,l)=>(n(),H(Xs,{to:"body"},[o(jt,{name:"loading-fade"},{default:a(()=>[T.visible||T.mock?(n(),v("div",{key:0,class:"global-loading-overlay",onClick:l[0]||(l[0]=Ze(()=>{},["stop"]))},[s("div",C1,[l[1]||(l[1]=s("div",{class:"loading-spinner"},[s("div",{class:"spinner-ring"}),s("div",{class:"spinner-ring"}),s("div",{class:"spinner-ring"})],-1)),s("div",y1,i(T.text),1),T.showProgress||T.mock?(n(),v("div",_1,[s("div",{class:ke(["progress-bar",{"is-mock":T.mock&&!T.showProgress}]),style:_t(T.showProgress?{width:T.progress+"%"}:void 0)},null,6)])):z("",!0)])])):z("",!0)]),_:1})]))}}),w1=De(b1,[["__scopeId","data-v-8b7cb8f0"]]),$1={class:"success-container"},k1={class:"success-text"},S1={key:0,class:"success-description"},B1=Se({__name:"SuccessModal",props:{visible:{type:Boolean,default:!1},text:{default:e("@71545:操作成功!")},description:{default:""}},setup(K){return(T,l)=>(n(),H(Xs,{to:"body"},[o(jt,{name:"success-fade"},{default:a(()=>[T.visible?(n(),v("div",{key:0,class:"success-overlay",onClick:l[0]||(l[0]=Ze(()=>{},["stop"]))},[s("div",$1,[l[1]||(l[1]=s("div",{class:"success-icon"},[s("svg",{viewBox:"0 0 52 52",class:"success-svg"},[s("circle",{class:"success-circle",cx:"26",cy:"26",r:"25",fill:"none"}),s("path",{class:"success-check",fill:"none",d:"m14.1 27.2l7.1 7.2 16.7-16.8"})])],-1)),s("div",k1,i(T.text),1),T.description?(n(),v("div",S1,i(T.description),1)):z("",!0)])])):z("",!0)]),_:1})]))}}),F1=De(B1,[["__scopeId","data-v-b10e1ad6"]]),mt=Ms({visible:!1,text:e("@F2A3A:加载中..."),showProgress:!1,progress:0});function A1(){return{loadingState:mt,show:c=>{mt.visible=!0,mt.text=(c==null?void 0:c.text)||e("@F2A3A:加载中..."),mt.showProgress=(c==null?void 0:c.showProgress)||!1,mt.progress=(c==null?void 0:c.progress)||0},hide:()=>{mt.visible=!1},updateProgress:c=>{mt.progress=Math.max(0,Math.min(100,c))},updateText:c=>{mt.text=c},setText:c=>{mt.visible&&(mt.text=c)}}}const Gt=Ms({visible:!1,text:e("@B8591:操作成功!"),description:""});function T1(){const K=l=>{Gt.visible=!0,Gt.text=(l==null?void 0:l.text)||e("@B8591:操作成功!"),Gt.description=(l==null?void 0:l.description)||"";const u=(l==null?void 0:l.duration)||2e3;setTimeout(()=>{T()},u)},T=()=>{Gt.visible=!1};return{successState:Gt,show:K,hide:T}}const D1={class:"template-form"},M1={class:"template-form-buttons"},P1={key:0,class:"template-list"},V1={key:1,class:"template-list-scroll"},E1={class:"template-content"},O1={class:"template-actions"},N1={key:1,class:"templates-container"},G1={class:"message-templates-list"},L1={class:"templates-scroll-area"},R1={class:"template-content"},x1={class:"template-actions"},z1={key:0,class:"current-default-message"},H1={class:"default-message-content"},I1={key:2,class:"message-help-text"},j1=Se({__name:"TemplateManager",props:{visible:{type:Boolean},type:{},title:{},placeholder:{default:e("@60CAC:输入新模板内容")},editPlaceholder:{default:e("@60CAC:编辑模板内容")},emptyDescription:{default:e("@60CAC:暂无保存的模板")},showDefaultSection:{type:Boolean,default:!1},showHelpText:{type:Boolean,default:!1}},emits:["update:visible","use-template","set-default"],setup(K,{expose:T,emit:l}){const u=K,p=l,c=Qe(),d=h(""),g=h(!1),C=h(""),S=h(-1),B=h(!1),_=h(!1),w=h(!1),y=pe(()=>{switch(u.type){case"description":return c.descriptionTemplates||[];case"scope":return c.scopeTemplates||[];case"message":return c.messageTemplates||[];default:return[]}}),k=pe(()=>u.type==="message"?c.defaultCommitMessage:""),V=pe(()=>g.value?u.editPlaceholder:u.placeholder),E=pe(()=>g.value?e("@60CAC:更新模板"):e("@60CAC:添加模板")),L=pe({get:()=>u.visible,set:D=>p("update:visible",D)});Ge(L,D=>{D||F()});function F(){d.value="",g.value=!1,C.value="",S.value=-1}async function m(){if(!d.value.trim()){r.warning(e("@60CAC:模板内容不能为空"));return}try{B.value=!0,g.value?await c.updateTemplate(C.value,d.value,u.type)&&F():await c.saveTemplate(d.value,u.type)&&(d.value="")}catch(D){r.error(`${e("@60CAC:模板保存失败: ")}${D.message}`)}finally{B.value=!1}}function G(D){p("use-template",D),u.type!=="message"&&(L.value=!1)}function q(D,j){g.value=!0,C.value=D,d.value=D,S.value=j}function Z(){F()}async function X(D){try{w.value=!0;const j=await c.pinTemplate(D,u.type)}catch(j){r.error(`${e("@60CAC:置顶模板失败: ")}${j.message}`)}finally{w.value=!1}}async function x(D){try{const j=await c.deleteTemplate(D,u.type)}catch(j){r.error(`${e("@60CAC:模板删除失败: ")}${j.message}`)}}async function b(){if(!(u.type!=="message"||!d.value.trim()))try{_.value=!0,await c.saveDefaultMessage(d.value)&&p("set-default",d.value)}catch(D){r.error(`${e("@60CAC:设置默认提交信息失败: ")}${D.message}`)}finally{_.value=!1}}return T({resetForm:F}),(D,j)=>{const ie=Ye,ve=Ee,Ce=ot,re=We,W=Go,Y=eo,ae=Ct;return n(),H(Ue,{modelValue:L.value,"onUpdate:modelValue":j[1]||(j[1]=fe=>L.value=fe),title:D.title,"close-on-click-modal":!1,"custom-class":D.type==="message"?"message-template-dialog":"template-dialog"},{default:a(()=>[s("div",{class:ke(["template-container",{"message-template-container":D.type==="message"}])},[s("div",D1,[o(ie,{modelValue:d.value,"onUpdate:modelValue":j[0]||(j[0]=fe=>d.value=fe),placeholder:V.value,class:"template-input",clearable:"",onKeyup:Ut(m,["enter"])},null,8,["modelValue","placeholder"]),s("div",M1,[g.value?(n(),H(ve,{key:0,onClick:Z},{default:a(()=>[R(i(t(e)("@60CAC:取消")),1)]),_:1})):z("",!0),o(ve,{type:"primary",onClick:m,disabled:!d.value.trim()||B.value,loading:B.value},{default:a(()=>[R(i(E.value),1)]),_:1},8,["disabled","loading"]),D.type==="message"?(n(),H(ve,{key:1,type:"success",onClick:b,disabled:!d.value.trim()||_.value,loading:_.value,plain:""},{default:a(()=>[R(i(t(e)("@60CAC:设为默认提交信息")),1)]),_:1},8,["disabled","loading"])):z("",!0)])]),D.type!=="message"?(n(),v("div",P1,[s("h3",null,i(t(e)("@60CAC:已保存"))+i(D.type==="description"?t(e)("@60CAC:模板"):t(e)("@60CAC:作用域")),1),y.value.length===0?(n(),H(Ce,{key:0,description:D.emptyDescription},null,8,["description"])):(n(),v("div",V1,[(n(!0),v(be,null,Me(y.value,(fe,he)=>(n(),H(Y,{key:he,class:"template-item"},{default:a(()=>[o(W,{justify:"space-between",align:"middle",style:{width:"100%"}},{default:a(()=>[s("div",E1,i(fe),1),s("div",O1,[o(ve,{size:"small",class:"pin-button",onClick:we=>X(fe),loading:w.value,disabled:he===0,title:"置顶"},{default:a(()=>[o(re,{"icon-class":"pin","class-name":"pin-icon"})]),_:2},1032,["onClick","loading","disabled"]),o(ve,{type:"primary",size:"small",onClick:we=>G(fe)},{default:a(()=>[R(i(t(e)("@60CAC:使用")),1)]),_:2},1032,["onClick"]),o(ve,{type:"warning",size:"small",icon:t(wt),onClick:we=>q(fe,he)},{default:a(()=>[R(i(t(e)("@60CAC:编辑")),1)]),_:2},1032,["icon","onClick"]),o(ve,{type:"danger",size:"small",onClick:we=>x(fe)},{default:a(()=>[R(i(t(e)("@60CAC:删除")),1)]),_:2},1032,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]))])):(n(),v("div",N1,[s("div",G1,[s("h3",null,i(t(e)("@60CAC:已保存模板")),1),s("div",L1,[y.value.length===0?(n(),H(Ce,{key:0,description:D.emptyDescription},null,8,["description"])):z("",!0),(n(!0),v(be,null,Me(y.value,(fe,he)=>(n(),H(Y,{key:he,class:"template-item"},{default:a(()=>[o(W,{justify:"space-between",align:"middle",style:{width:"100%"}},{default:a(()=>[s("div",R1,i(fe),1),s("div",x1,[o(ve,{size:"small",class:"pin-button",onClick:we=>X(fe),loading:w.value,disabled:he===0,title:"置顶"},{default:a(()=>[o(re,{"icon-class":"pin","class-name":"pin-icon"})]),_:2},1032,["onClick","loading","disabled"]),o(ve,{type:"primary",size:"small",onClick:we=>G(fe)},{default:a(()=>[R(i(t(e)("@60CAC:使用")),1)]),_:2},1032,["onClick"]),o(ve,{type:"warning",size:"small",icon:t(wt),onClick:we=>q(fe,he)},{default:a(()=>[R(i(t(e)("@60CAC:编辑")),1)]),_:2},1032,["icon","onClick"]),o(ve,{type:"danger",size:"small",onClick:we=>x(fe)},{default:a(()=>[R(i(t(e)("@60CAC:删除")),1)]),_:2},1032,["onClick"])])]),_:2},1024)]),_:2},1024))),128))])]),D.showDefaultSection?(n(),v("div",z1,[s("h3",null,i(t(e)("@60CAC:当前默认提交信息")),1),k.value?(n(),H(Y,{key:0,class:"default-message-card"},{default:a(()=>[s("div",H1,i(k.value),1)]),_:1})):(n(),H(Ce,{key:1,description:t(e)("@60CAC:尚未设置默认提交信息"),"image-size":100},null,8,["description"])),D.showHelpText?(n(),v("div",I1,[s("h4",null,i(t(e)("@60CAC:关于默认提交信息")),1),s("p",null,i(t(e)("@60CAC:默认提交信息将在未输入提交信息时自动使用。")),1),s("p",null,[R(i(t(e)("@60CAC:你可以通过点击左侧模板的")),1),o(ae,{size:"small",type:"primary"},{default:a(()=>[R(i(t(e)("@60CAC:使用")),1)]),_:1}),R(i(t(e)("@60CAC:按钮先选择喜欢的模板,然后点击上方")),1),o(ae,{size:"small",type:"success"},{default:a(()=>[R(i(t(e)("@60CAC:设为默认提交信息")),1)]),_:1}),R(i(t(e)("@60CAC:按钮保存。")),1)])])):z("",!0)])):z("",!0)]))],2)]),_:1},8,["modelValue","title","custom-class"])}}}),_s=De(j1,[["__scopeId","data-v-7b44f967"]]),U1={class:"form-bottom-actions"},W1={class:"actions-flex-container"},J1={class:"left-actions"},q1={class:"button-grid"},K1={class:"right-actions"},Y1=Se({__name:"GitActionButtons",props:{hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:""},skipHooks:{type:Boolean,default:!1},from:{default:"form"}},emits:["afterCommit","afterPush","beforePush","clearFields"],setup(K,{expose:T,emit:l}){const u=l,p=h(null);function c(B){u("afterCommit",B)}function d(B){u("afterPush",B)}function g(){u("beforePush")}function C(){u("clearFields")}async function S(){var B;return(B=p.value)==null?void 0:B.triggerQuickPush()}return T({triggerQuickPush:S}),(B,_)=>(n(),v("div",U1,[s("div",W1,[s("div",J1,[s("div",q1,[o(vo,{onClick:()=>{},from:B.from},null,8,["from"]),o(ho,{"has-user-commit-message":B.hasUserCommitMessage,"final-commit-message":B.finalCommitMessage,"skip-hooks":B.skipHooks,onBeforeCommit:()=>{},onAfterCommit:c,onClick:()=>{},from:B.from},null,8,["has-user-commit-message","final-commit-message","skip-hooks","from"]),o(Co,{onBeforePush:()=>{},onAfterPush:d,onClick:()=>{},from:B.from},null,8,["from"])])]),s("div",K1,[o(yo,{ref_key:"quickPushRef",ref:p,from:B.from,"has-user-commit-message":B.hasUserCommitMessage,"final-commit-message":B.finalCommitMessage,"skip-hooks":B.skipHooks,onBeforePush:g,onAfterPush:d,onClearFields:C},null,8,["from","has-user-commit-message","final-commit-message","skip-hooks"])])])]))}}),Q1=De(Y1,[["__scopeId","data-v-495f5dbc"]]),Z1={class:"option-header"},X1={class:"option-info"},ef={class:"option-title"},tf=Se({__name:"OptionSwitchCard",props:{modelValue:{type:Boolean},title:{},tooltip:{},activeText:{},inactiveText:{},activeColor:{},iconClass:{},compact:{type:Boolean}},emits:["update:modelValue"],setup(K,{emit:T}){const l=K,u=T;function p(c){u("update:modelValue",c)}return(c,d)=>{const g=us,C=Re;return n(),v("div",{class:ke(["option-card",{compact:l.compact}])},[o(C,{content:c.tooltip,placement:"top","show-after":200},{default:a(()=>[s("div",Z1,[s("div",{class:ke(["option-icon",c.iconClass])},[bt(c.$slots,"icon",{},void 0,!0)],2),s("div",X1,[s("h4",ef,i(c.title),1)]),o(g,{class:"option-switch","model-value":c.modelValue,"onUpdate:modelValue":p,"active-text":c.activeText,"inactive-text":c.inactiveText,"active-color":c.activeColor,size:"small"},null,8,["model-value","active-text","inactive-text","active-color"])])]),_:3},8,["content"])],2)}}}),Lt=De(tf,[["__scopeId","data-v-7af4d883"]]),sf={class:"command-container"},of={class:"command-form"},af={class:"form-row form-row-compact"},nf={class:"form-field form-field-half"},lf={class:"required"},rf={class:"form-field form-field-half"},cf={class:"form-row"},uf={class:"form-field"},df={class:"directory-input-group"},pf={class:"form-row"},ff={class:"form-field"},mf={class:"required"},vf={class:"form-buttons"},hf={class:"command-list"},gf={key:1,class:"command-list-scroll"},Cf={class:"name-cell"},yf={class:"name-text"},_f={key:0,class:"description-text"},bf={class:"command-text"},wf={class:"directory-text"},$f={class:"action-buttons"},kf=Se({__name:"CustomCommandManager",props:{visible:{type:Boolean}},emits:["update:visible","execute-command"],setup(K,{expose:T,emit:l}){const u=K,p=l,c=Qe(),d=h({name:"",description:"",directory:"",command:""}),g=h(!1),C=h(""),S=h(!1),B=h([]),_=pe(()=>c.customCommands||[]),w=pe({get:()=>u.visible,set:X=>p("update:visible",X)});Ge(w,X=>{X||y()});function y(){d.value={name:"",description:"",directory:"",command:""},g.value=!1,C.value=""}async function k(){if(!d.value.name.trim()){r.warning(e("@CMD01:命令名称不能为空"));return}if(!d.value.command.trim()){r.warning(e("@CMD01:命令内容不能为空"));return}try{S.value=!0,g.value?await c.updateCustomCommand(C.value,d.value)&&y():((!d.value.directory||!d.value.directory.trim())&&(d.value.directory=c.currentDirectory||""),await c.saveCustomCommand(d.value)&&y())}catch(X){r.error(`${e("@CMD01:命令保存失败: ")}${X.message}`)}finally{S.value=!1}}function V(X){g.value=!0,C.value=X.id||"",d.value={name:X.name,description:X.description||"",directory:X.directory,command:X.command}}function E(){y()}async function L(X){try{await Ie.confirm(e("@CMD01:确定要删除这个自定义命令吗?"),e("@CMD01:删除确认"),{confirmButtonText:e("@CMD01:确定"),cancelButtonText:e("@CMD01:取消"),type:"warning"}),await c.deleteCustomCommand(X)}catch{}}function F(X){p("execute-command",X)}function m(){d.value.directory=c.currentDirectory||""}async function G(){try{const x=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:d.value.directory||c.currentDirectory})})).json();x.success?q(x):x.error&&r.error(x.error)}catch(X){r.error(`${e("@CMD01:浏览目录失败: ")}${X.message}`)}}function q(X){!X||!X.items||Ie.alert(Ve("div",{class:"directory-browser"},[Ve("div",{class:"current-path"},[Ve("span",{class:"path-label"},e("@CMD01:当前路径: ")),Ve("span",{class:"path-value"},X.path)]),Ve("div",{class:"directory-list"},[X.parentPath?Ve("div",{class:"directory-item parent-dir",onClick:()=>Z(X.parentPath)},[Ve("span",{class:"dir-icon"},Ve("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-warning)"}},[Ve("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ve("span",{class:"dir-name"},e("@CMD01:返回上级目录"))]):null,...X.items.map(x=>Ve("div",{class:"directory-item",onClick:()=>Z(x.path)},[Ve("span",{class:"dir-icon"},Ve("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-primary)"}},[Ve("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ve("span",{class:"dir-name"},x.name)]))])]),e("@CMD01:浏览并选择目录"),{confirmButtonText:e("@CMD01:确定"),customClass:"directory-browser-dialog",callback:x=>{x==="confirm"&&(d.value.directory=X.path)}})}async function Z(X){try{Ie.close(),setTimeout(async()=>{try{const b=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:X})})).json();b.success?q(b):b.error&&r.error(b.error)}catch(x){r.error(`${e("@CMD01:浏览目录失败: ")}${x.message}`)}},100)}catch(x){r.error(`${e("@CMD01:处理目录选择时出错: ")}${x.message}`)}}return T({resetForm:y}),(X,x)=>{const b=Ye,D=Ee,j=Pe,ie=Ro,ve=Lo,Ce=ot,re=ss,W=to;return n(),H(Ue,{modelValue:w.value,"onUpdate:modelValue":x[5]||(x[5]=Y=>w.value=Y),title:t(e)("@CMD01:自定义命令管理"),"close-on-click-modal":!1,"append-to-body":!0,"custom-class":"custom-command-dialog",size:"extra-large"},{default:a(()=>[s("div",sf,[o(ve,{modelValue:B.value,"onUpdate:modelValue":x[4]||(x[4]=Y=>B.value=Y),class:"command-form-collapse"},{default:a(()=>[o(ie,{title:g.value?t(e)("@CMD01:编辑命令"):t(e)("@CMD01:添加命令"),name:"addCommand"},{default:a(()=>[s("div",of,[s("div",af,[s("div",nf,[s("label",lf,i(t(e)("@CMD01:命令名称")),1),o(b,{modelValue:d.value.name,"onUpdate:modelValue":x[0]||(x[0]=Y=>d.value.name=Y),placeholder:t(e)("@CMD01:输入命令名称,例如: 拉取代码"),clearable:"",size:"default"},null,8,["modelValue","placeholder"])]),s("div",rf,[s("label",null,i(t(e)("@CMD01:描述")),1),o(b,{modelValue:d.value.description,"onUpdate:modelValue":x[1]||(x[1]=Y=>d.value.description=Y),placeholder:t(e)("@CMD01:可选,简要描述命令用途"),clearable:"",size:"default"},null,8,["modelValue","placeholder"])])]),s("div",cf,[s("div",uf,[s("label",null,i(t(e)("@CMD01:执行目录")),1),s("div",df,[o(b,{modelValue:d.value.directory,"onUpdate:modelValue":x[2]||(x[2]=Y=>d.value.directory=Y),placeholder:t(e)("@CMD01:留空使用当前目录"),clearable:"",size:"default"},null,8,["modelValue","placeholder"]),o(D,{onClick:m,type:"primary",plain:"",size:"small"},{default:a(()=>[R(i(t(e)("@CMD01:使用当前目录")),1)]),_:1}),o(D,{onClick:G,type:"info",plain:"",size:"small"},{default:a(()=>[o(j,null,{default:a(()=>[o(t(ut))]),_:1}),R(" "+i(t(e)("@CMD01:选择目录")),1)]),_:1})])])]),s("div",pf,[s("div",ff,[s("label",mf,i(t(e)("@CMD01:命令")),1),o(b,{modelValue:d.value.command,"onUpdate:modelValue":x[3]||(x[3]=Y=>d.value.command=Y),placeholder:t(e)("@CMD01:输入要执行的命令,例如: npm run build"),clearable:"",size:"default",onKeyup:Ut(k,["enter"])},null,8,["modelValue","placeholder"])])]),s("div",vf,[g.value?(n(),H(D,{key:0,onClick:E,size:"default"},{default:a(()=>[R(i(t(e)("@CMD01:取消")),1)]),_:1})):z("",!0),o(D,{type:"primary",onClick:k,disabled:!d.value.name.trim()||!d.value.command.trim()||S.value,loading:S.value,size:"default"},{default:a(()=>[R(i(g.value?t(e)("@CMD01:更新命令"):t(e)("@CMD01:添加命令")),1)]),_:1},8,["disabled","loading"])])])]),_:1},8,["title"])]),_:1},8,["modelValue"]),s("div",hf,[s("h3",null,i(t(e)("@CMD01:已保存的命令")),1),_.value.length===0?(n(),H(Ce,{key:0,description:t(e)("@CMD01:暂无保存的命令")},null,8,["description"])):(n(),v("div",gf,[o(W,{data:_.value,style:{width:"100%"},stripe:""},{default:a(()=>[o(re,{prop:"name",label:t(e)("@CMD01:命令名称"),"min-width":"80"},{default:a(Y=>[s("div",Cf,[s("span",yf,i(Y.row.name),1),Y.row.description?(n(),v("span",_f,i(Y.row.description),1)):z("",!0)])]),_:1},8,["label"]),o(re,{prop:"command",label:t(e)("@CMD01:命令"),"min-width":"200"},{default:a(Y=>[s("code",bf,i(Y.row.command),1)]),_:1},8,["label"]),o(re,{prop:"directory",label:t(e)("@CMD01:执行目录"),"min-width":"200"},{default:a(Y=>[s("span",wf,i(Y.row.directory||t(e)("@CMD01:当前目录")),1)]),_:1},8,["label"]),o(re,{label:t(e)("@CMD01:操作"),width:"100",fixed:"right"},{default:a(Y=>[s("div",$f,[o(Fe,{tooltip:t(e)("@CMD01:执行命令"),size:"small","hover-color":"var(--color-success)",onClick:ae=>F(Y.row)},{default:a(()=>[o(j,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:2},1032,["tooltip","onClick"]),o(Fe,{tooltip:t(e)("@CMD01:编辑"),size:"small","hover-color":"var(--color-primary)",onClick:ae=>V(Y.row)},{default:a(()=>[o(j,null,{default:a(()=>[o(t(wt))]),_:1})]),_:2},1032,["tooltip","onClick"]),o(Fe,{tooltip:t(e)("@CMD01:删除"),size:"small","hover-color":"var(--color-danger)",onClick:ae=>L(Y.row.id)},{default:a(()=>[o(j,null,{default:a(()=>[o(t(it))]),_:1})]),_:2},1032,["tooltip","onClick"])])]),_:1},8,["label"])]),_:1},8,["data"])]))])])]),_:1},8,["modelValue","title"])}}}),Sf=De(kf,[["__scopeId","data-v-a133cd19"]]),Bf={class:"package-json-selector"},Ff={class:"selector-container"},Af={class:"option-content"},Tf={class:"option-main"},Df={class:"package-name"},Mf={class:"option-path"},Pf={key:0,class:"empty-hint"},Vf=Se({__name:"PackageJsonSelector",props:{modelValue:{},placeholder:{},clearable:{type:Boolean},disabled:{type:Boolean}},emits:["update:modelValue","change"],setup(K,{emit:T}){const l=K,u=T,p=h(!1),c=h([]),d=h(""),g=pe({get:()=>l.modelValue,set:y=>{d.value=y,u("update:modelValue",y);const k=c.value.find(V=>V.fullPath===y);u("change",k||null)}}),C=pe(()=>c.value.map(y=>({label:y.displayName,value:y.fullPath,relativePath:y.relativePath,version:y.version})));async function S(y){p.value=!0;try{const k=y?`/api/scan-package-files?directory=${encodeURIComponent(y)}`:"/api/scan-package-files",V=await fetch(k);if(!V.ok)throw new Error(`HTTP ${V.status}: ${V.statusText}`);const E=await V.json();if(E.success){c.value=E.packages||[],g.value&&!c.value.some(F=>F.fullPath===g.value)&&(g.value="");const L=y?`目录 ${y}`:"当前项目";r.success(`扫描 ${L} 完成,找到 ${c.value.length} 个 package.json 文件`)}else throw new Error(E.error||"扫描失败")}catch(k){console.error("扫描package.json文件失败:",k),r.error(`扫描失败: ${k.message}`),c.value=[]}finally{p.value=!1}}async function B(){try{const k=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:""})})).json();k.success?_(k):k.error&&r.error(k.error)}catch(y){r.error(`浏览目录失败: ${y.message}`)}}function _(y){!y||!y.items||Ie.alert(Ve("div",{class:"directory-browser"},[Ve("div",{class:"current-path"},[Ve("span",{class:"path-label"},"当前路径:"),Ve("span",{class:"path-value"},y.path)]),Ve("div",{class:"directory-list"},[y.parentPath?Ve("div",{class:"directory-item parent-dir",onClick:()=>w(y.parentPath)},[Ve("span",{class:"dir-icon"},Ve("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-warning)"}},[Ve("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ve("span",{class:"dir-name"},"返回上级目录")]):null,...y.items.map(k=>Ve("div",{class:"directory-item",onClick:()=>w(k.path)},[Ve("span",{class:"dir-icon"},Ve("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-primary)"}},[Ve("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),Ve("span",{class:"dir-name"},k.name)]))])]),"浏览并选择目录",{confirmButtonText:"确定",cancelButtonText:"取消",showCancelButton:!0,customClass:"directory-browser-dialog",callback:k=>{k==="confirm"&&S(y.path)}})}async function w(y){try{Ie.close(),setTimeout(async()=>{try{const V=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:y})})).json();V.success?_(V):V.error&&r.error(V.error)}catch(k){r.error(`浏览目录失败: ${k.message}`)}},100)}catch(k){r.error(`处理目录选择时出错: ${k.message}`)}}return S(),Ge(()=>l.modelValue,y=>{d.value=y},{immediate:!0}),(y,k)=>{const V=Pe,E=gt,L=ht,F=Ee,m=zo;return n(),v("div",Bf,[s("div",Ff,[o(L,{modelValue:g.value,"onUpdate:modelValue":k[0]||(k[0]=G=>g.value=G),placeholder:y.placeholder||"选择 package.json 文件",clearable:y.clearable,disabled:y.disabled||p.value,filterable:"",class:"package-select"},{default:a(()=>[(n(!0),v(be,null,Me(C.value,G=>(n(),H(E,{key:G.value,label:G.label,value:G.value},{default:a(()=>[s("div",Af,[s("div",Tf,[o(V,{class:"folder-icon"},{default:a(()=>[o(t(ut))]),_:1}),s("span",Df,i(G.label),1)]),s("div",Mf,i(G.relativePath),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","clearable","disabled"]),o(F,{icon:p.value?t(et):t(Ps),loading:p.value,disabled:y.disabled,size:"default",onClick:k[1]||(k[1]=G=>S()),class:"refresh-btn",title:"刷新当前项目"},{default:a(()=>[R(i(p.value?"扫描中...":"刷新"),1)]),_:1},8,["icon","loading","disabled"]),o(F,{icon:t(xo),disabled:y.disabled||p.value,size:"default",onClick:B,class:"custom-dir-btn",title:"浏览并选择其他目录"},{default:a(()=>k[2]||(k[2]=[R(" 其他目录 ")])),_:1},8,["icon","disabled"])]),c.value.length===0&&!p.value?(n(),v("div",Pf,[o(m,{type:"info",size:"small"},{default:a(()=>k[3]||(k[3]=[R(" 未找到 package.json 文件,请确保项目包含有效的 package.json ")])),_:1})])):z("",!0)])}}}),_o=De(Vf,[["__scopeId","data-v-f7df52f9"]]),Ef={class:"workspace-container"},Of={class:"left-panel"},Nf={class:"panel-header"},Gf={class:"orchestration-list"},Lf=["onClick"],Rf={class:"item-content"},xf={class:"item-header"},zf={class:"item-actions"},Hf={class:"step-preview"},If={class:"right-panel"},jf={class:"panel-header"},Uf={class:"header-actions"},Wf={class:"orchestration-info"},Jf={class:"steps-section"},qf={class:"steps-header"},Kf={class:"step-count"},Yf={class:"header-actions"},Qf={class:"steps-scroll"},Zf={key:1,class:"step-list"},Xf=["onDragstart","onDrop"],em={class:"step-item-content"},tm={class:"step-header-row"},sm={class:"step-options"},om={class:"option-item"},am={class:"action-buttons"},nm={class:"step-content-row"},lm={class:"step-icon"},im={class:"step-info"},rm={class:"step-name"},cm={class:"step-paths"},um={class:"step-detail"},dm={key:0,class:"step-dir"},pm={key:1,class:"add-step-list"},fm=["onClick"],mm={class:"step-info"},vm={class:"step-name"},hm={key:0,class:"step-desc"},gm={class:"step-code"},Cm={key:1,class:"step-directory"},ym={class:"wait-step-form"},_m={class:"version-step-form"},bm={class:"form-item"},wm={class:"form-item"},$m={key:0,class:"form-item"},km={class:"form-item"},Sm={class:"form-item"},Bm={class:"form-item"},Fm={key:0,class:"form-item"},Am={key:1,class:"form-item"},Tm=Se({__name:"OrchestrationWorkspace",props:{visible:{type:Boolean}},emits:["update:visible","execute-orchestration"],setup(K,{emit:T}){const l=K,u=T,{t:p}=Ho(),c=Qe(),d=pe({get:()=>l.visible,set:P=>u("update:visible",P)}),g=pe(()=>c.orchestrations||[]),C=h(null),S=h([]),B=h(null),_=h(""),w=h(""),y=h(null),k=h(!1),V=h(5),E=h("version"),L=h("patch"),F=h(""),m=h(null),G=h(""),q=h(""),Z=h("dependencies"),X=h("bump"),x=h("patch"),b=h([]),D=h(null),j=pe(()=>c.customCommands||[]);function ie(P,f){return`${P}-${f}`}function ve(P,f){return D.value===ie(P,f)}function Ce(P,f){D.value=ie(P,f)}function re(P,f){const I=ie(P,f);D.value===I&&(D.value=null)}function W(P){const f=P.enabled===!1?"[已禁用] ":"",I=P.useTerminal?"[终端] ":"";if(P.type==="command")return f+I+(P.commandName||"未知命令");if(P.type==="wait")return f+`等待 ${P.waitSeconds} 秒`;if(P.type==="version")if(P.versionTarget==="dependency"){const Ae=P.dependencyType==="devDependencies"?"devDep":"dep";if(P.dependencyVersionBump){const qe=P.dependencyVersionBump==="major"?"主版本":P.dependencyVersionBump==="minor"?"次版本":"补丁版本";return f+`修改依赖 [${Ae}] ${P.dependencyName} 版本+1 (${qe})`}else return f+`修改依赖 [${Ae}] ${P.dependencyName} → ${P.dependencyVersion}`}else{const Ae=P.versionBump==="major"?"主版本":P.versionBump==="minor"?"次版本":"补丁版本";return f+`版本号+1 (${Ae})`}return"未知步骤"}function Y(P){if(P.type==="command"){const f=c.customCommands.find(I=>I.id===P.commandId);return(f==null?void 0:f.command)||"命令已删除"}else{if(P.type==="wait")return`暂停执行 ${P.waitSeconds} 秒`;if(P.type==="version")return P.packageJsonPath?P.packageJsonPath.replace(/\\/g,"/"):"当前目录的 package.json"}return""}function ae(P){if(P.type==="command"){const f=c.customCommands.find(I=>I.id===P.commandId);return(f==null?void 0:f.directory)||""}return""}function fe(){return`step-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function he(){C.value=null,y.value=null,_.value="",w.value="",S.value=[]}function we(P){C.value=P.id,y.value=P.id,_.value=P.name,w.value=P.description||"";const f=JSON.parse(JSON.stringify(P.steps));f.forEach(I=>{(I.enabled===void 0||I.enabled===null)&&(I.enabled=!0),I.useTerminal===void 0&&(I.useTerminal=!1)}),S.value=f}function $e(P,f=0){u("execute-orchestration",P.steps,f)}function Ne(P,f){$e(P,f)}async function Le(P){try{await Ie.confirm(`确定要删除编排 "${P.name}" 吗?`,"确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}),await c.deleteOrchestration(P.id),r.success("编排已删除"),y.value===P.id&&he()}catch(f){f!=="cancel"&&r.error(`删除编排失败: ${f.message||f}`)}}function xe(P){const f={id:fe(),type:"command",commandId:P.id,commandName:P.name,enabled:!0};S.value.push(f),r.success(`已添加命令: ${P.name}`),k.value=!1}function ue(){if(V.value<=0){r.warning("等待时间必须大于0秒");return}const P={id:fe(),type:"wait",waitSeconds:V.value,enabled:!0};S.value.push(P),r.success(`已添加等待步骤: ${V.value}秒`),k.value=!1}function $(P){m.value=P,P?(F.value=P.fullPath,U(P.fullPath)):b.value=[]}async function U(P){try{const f=await fetch("/api/read-package-json",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageJsonPath:P})});if(!f.ok)throw new Error(`HTTP ${f.status}`);const I=await f.json();if(I.success){const Ae=[];Z.value==="dependencies"&&I.dependencies?Ae.push(...Object.keys(I.dependencies)):Z.value==="devDependencies"&&I.devDependencies&&Ae.push(...Object.keys(I.devDependencies)),b.value=Ae.sort()}}catch(f){console.error("读取依赖列表失败:",f),b.value=[]}}Ge(Z,()=>{F.value&&U(F.value)});function ne(){if(E.value==="dependency"){if(!G.value.trim()){r.warning("请选择依赖包名称");return}if(X.value==="manual"&&!q.value.trim()){r.warning("请输入依赖包版本号");return}}const P={id:fe(),type:"version",versionTarget:E.value,versionBump:L.value,packageJsonPath:F.value.trim()||void 0,dependencyName:E.value==="dependency"?G.value.trim():void 0,dependencyVersion:E.value==="dependency"&&X.value==="manual"?q.value.trim():void 0,dependencyVersionBump:E.value==="dependency"&&X.value==="bump"?x.value:void 0,dependencyType:E.value==="dependency"?Z.value:void 0,enabled:!0};S.value.push(P),r.success("已添加版本管理步骤"),k.value=!1,E.value="version",L.value="patch",F.value="",m.value=null,G.value="",q.value="",Z.value="dependencies",X.value="bump",x.value="patch",b.value=[]}function ce(P){S.value.splice(P,1)}function M(){S.value=[]}async function A(){if(!_.value.trim()){r.warning("请输入编排名称");return}if(S.value.length===0){r.warning("请至少添加一个步骤");return}const P={name:_.value.trim(),description:w.value.trim(),steps:S.value};if(y.value)await c.updateOrchestration(y.value,P);else{const f=await c.saveOrchestration(P);r.success("编排已保存"),f&&typeof f=="object"&&"id"in f&&(C.value=f.id,y.value=f.id)}}function Q(){if(S.value.length===0){r.warning("请至少添加一个步骤");return}u("execute-orchestration",[...S.value])}function le(P){B.value=P}function me(){B.value=null}function de(P){P.preventDefault()}function J(P){if(B.value===null||B.value===P)return;const f=S.value[B.value];S.value.splice(B.value,1);const I=B.value<P?P-1:P;S.value.splice(I,0,f),B.value=null}function O(P){if(P===0)return;const f=S.value[P];S.value[P]=S.value[P-1],S.value[P-1]=f}function N(P){if(P===S.value.length-1)return;const f=S.value[P];S.value[P]=S.value[P+1],S.value[P+1]=f}function se(P){if(P===0)return;const f=S.value.splice(P,1)[0];S.value.unshift(f)}function oe(P){if(P===S.value.length-1)return;const f=S.value.splice(P,1)[0];S.value.push(f)}function ge(P){u("execute-orchestration",[P],0,!0)}function Oe(P,f){P.enabled=f}return(P,f)=>{const I=Pe,Ae=ot,qe=Ct,ze=Qt,Te=Yt,nt=Kt,ft=Ye,St=us,tt=Ee,Ot=qs,fs=so,st=As,rt=Jt,ms=gt,vs=ht,Zt=Vs,hs=Js;return n(),v(be,null,[o(Ue,{modelValue:d.value,"onUpdate:modelValue":f[3]||(f[3]=ye=>d.value=ye),title:t(p)("@ORCHWS:编排工作台"),"close-on-click-modal":!1,"append-to-body":!0,"custom-class":"orchestration-workspace-dialog",width:"1400px"},{default:a(()=>[s("div",Ef,[s("div",Of,[s("div",Nf,[s("h3",null,i(t(p)("@ORCHWS:已保存的编排")),1),o(Fe,{tooltip:t(p)("@ORCHWS:新建编排"),size:"small","hover-color":"var(--color-primary)",onClick:he},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Wt))]),_:1})]),_:1},8,["tooltip"])]),s("div",Gf,[g.value.length===0?(n(),H(Ae,{key:0,description:t(p)("@ORCHWS:暂无编排"),"image-size":100},null,8,["description"])):z("",!0),(n(!0),v(be,null,Me(g.value,ye=>(n(),v("div",{key:ye.id,class:ke(["orchestration-item",{active:C.value===ye.id}]),onClick:He=>we(ye)},[s("div",Rf,[s("div",xf,[s("h4",null,i(ye.name),1),s("div",zf,[o(Fe,{tooltip:t(p)("@ORCHWS:执行"),size:"small","hover-color":"var(--color-primary)",onClick:Ze(He=>$e(ye),["stop"])},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:2},1032,["tooltip","onClick"]),o(Fe,{tooltip:t(p)("@ORCHWS:删除"),size:"small","hover-color":"var(--color-danger)",onClick:Ze(He=>Le(ye),["stop"])},{default:a(()=>[o(I,null,{default:a(()=>[o(t(it))]),_:1})]),_:2},1032,["tooltip","onClick"])])]),s("div",Hf,[(n(!0),v(be,null,Me(ye.steps,(He,te)=>(n(),H(nt,{key:He.id,trigger:"contextmenu","hide-on-click":!0,onCommand:()=>{Ne(ye,te),re(ye.id,te)},onVisibleChange:ee=>ee?Ce(ye.id,te):re(ye.id,te)},{dropdown:a(()=>[ve(ye.id,te)?(n(),H(Te,{key:0},{default:a(()=>[o(ze,{command:"execute"},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Xe))]),_:1}),f[14]||(f[14]=R(" 从此处开始执行 "))]),_:1})]),_:1})):z("",!0)]),default:a(()=>[o(qe,{type:He.type==="command"?"primary":He.type==="wait"?"warning":"success",size:"small",class:"step-tag"},{default:a(()=>[He.type==="command"?(n(),H(I,{key:0},{default:a(()=>[o(We,{"icon-class":"custom-cmd"})]),_:1})):He.type==="wait"?(n(),H(I,{key:1},{default:a(()=>[o(t(Pt))]),_:1})):He.type==="version"?(n(),H(I,{key:2},{default:a(()=>[o(t(Rt))]),_:1})):z("",!0),s("span",null,i(te+1)+". "+i(W(He)),1)]),_:2},1032,["type"])]),_:2},1032,["onCommand","onVisibleChange"]))),128))])])],10,Lf))),128))])]),s("div",If,[s("div",jf,[s("h3",null,i(y.value?t(p)("@ORCHWS:编辑编排"):t(p)("@ORCHWS:新建编排")),1),s("div",Uf,[o(Fe,{tooltip:t(p)("@ORCHWS:保存编排"),size:"small",disabled:S.value.length===0,"hover-color":"var(--color-success)",onClick:A},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Rt))]),_:1})]),_:1},8,["tooltip","disabled"]),o(Fe,{tooltip:t(p)("@ORCHWS:执行编排"),size:"small",disabled:S.value.length===0,"hover-color":"var(--color-primary)",onClick:Q},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:1},8,["tooltip","disabled"])])]),s("div",Wf,[o(ft,{modelValue:_.value,"onUpdate:modelValue":f[0]||(f[0]=ye=>_.value=ye),placeholder:t(p)("@ORCHWS:编排名称(必填)"),size:"default",clearable:""},null,8,["modelValue","placeholder"]),o(ft,{modelValue:w.value,"onUpdate:modelValue":f[1]||(f[1]=ye=>w.value=ye),placeholder:t(p)("@ORCHWS:编排描述(选填)"),type:"textarea",rows:2,clearable:""},null,8,["modelValue","placeholder"])]),s("div",Jf,[s("div",qf,[s("h4",null,[o(I,null,{default:a(()=>[o(t(Xe))]),_:1}),R(" "+i(t(p)("@ORCHWS:执行步骤"))+" ",1),s("span",Kf,"("+i(S.value.length)+")",1)]),s("div",Yf,[o(Fe,{tooltip:t(p)("@ORCHWS:添加步骤"),size:"small","hover-color":"var(--color-primary)",onClick:f[2]||(f[2]=ye=>k.value=!0)},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Wt))]),_:1})]),_:1},8,["tooltip"]),S.value.length>0?(n(),H(Fe,{key:0,tooltip:t(p)("@ORCHWS:清空所有步骤"),size:"small","hover-color":"var(--color-danger)",onClick:M},{default:a(()=>[o(I,null,{default:a(()=>[o(t(it))]),_:1})]),_:1},8,["tooltip"])):z("",!0)])]),s("div",Qf,[S.value.length===0?(n(),H(Ae,{key:0,description:t(p)("@ORCHWS:请添加执行步骤"),"image-size":80},null,8,["description"])):(n(),v("div",Zf,[(n(!0),v(be,null,Me(S.value,(ye,He)=>(n(),v("div",{key:ye.id,class:ke(["step-item",`step-type-${ye.type}`]),draggable:"true",onDragstart:te=>le(He),onDragend:me,onDragover:de,onDrop:te=>J(He)},[s("div",em,[s("div",tm,[s("div",sm,[s("div",om,[f[15]||(f[15]=s("span",{class:"option-label"},"启用",-1)),o(St,{"model-value":ye.enabled??!0,"onUpdate:modelValue":te=>Oe(ye,te),size:"small"},null,8,["model-value","onUpdate:modelValue"])]),ye.type==="command"?(n(),H(tt,{key:0,class:ke(["terminal-toggle-btn",{"is-active":ye.useTerminal}]),text:"",onClick:te=>ye.useTerminal=!ye.useTerminal,title:ye.useTerminal?t(p)("@ORCHWS:终端执行"):t(p)("@ORCHWS:普通执行")},{default:a(()=>[o(I,{size:18},{default:a(()=>[o(t(It))]),_:1})]),_:2},1032,["class","onClick","title"])):z("",!0)]),s("div",am,[o(Fe,{tooltip:t(p)("@ORCHWS:执行"),size:"small","hover-color":"var(--color-success)",onClick:te=>ge(ye)},{default:a(()=>[o(I,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:2},1032,["tooltip","onClick"]),f[20]||(f[20]=s("div",{class:"button-divider"},null,-1)),o(tt,{type:"info",size:"small",text:"",disabled:He===0,onClick:te=>se(He),title:t(p)("@ORCHWS:置顶")},{default:a(()=>f[16]||(f[16]=[R(" ⇈ ")])),_:2},1032,["disabled","onClick","title"]),o(tt,{type:"info",size:"small",text:"",disabled:He===0,onClick:te=>O(He),title:t(p)("@ORCHWS:上移")},{default:a(()=>f[17]||(f[17]=[R(" ↑ ")])),_:2},1032,["disabled","onClick","title"]),o(tt,{type:"info",size:"small",text:"",disabled:He===S.value.length-1,onClick:te=>N(He),title:t(p)("@ORCHWS:下移")},{default:a(()=>f[18]||(f[18]=[R(" ↓ ")])),_:2},1032,["disabled","onClick","title"]),o(tt,{type:"info",size:"small",text:"",disabled:He===S.value.length-1,onClick:te=>oe(He),title:t(p)("@ORCHWS:置底")},{default:a(()=>f[19]||(f[19]=[R(" ⇊ ")])),_:2},1032,["disabled","onClick","title"]),f[21]||(f[21]=s("div",{class:"button-divider"},null,-1)),o(tt,{type:"danger",size:"small",icon:t(it),text:"",onClick:te=>ce(He),title:t(p)("@ORCHWS:删除")},null,8,["icon","onClick","title"])])]),s("div",nm,[s("div",lm,[ye.type==="command"?(n(),H(I,{key:0},{default:a(()=>[o(We,{"icon-class":"custom-cmd"})]),_:1})):ye.type==="wait"?(n(),H(I,{key:1},{default:a(()=>[o(t(Pt))]),_:1})):ye.type==="version"?(n(),H(I,{key:2},{default:a(()=>[o(t(Rt))]),_:1})):z("",!0)]),s("div",im,[s("div",rm,i(W(ye)),1)]),s("div",cm,[s("div",um,i(Y(ye)),1),ae(ye)?(n(),v("div",dm,[o(I,null,{default:a(()=>[o(t(ut))]),_:1}),s("span",null,i(ae(ye)),1)])):z("",!0)])])])],42,Xf))),128))]))])])])])]),_:1},8,["modelValue","title"]),o(Ue,{modelValue:k.value,"onUpdate:modelValue":f[13]||(f[13]=ye=>k.value=ye),title:t(p)("@ORCHWS:添加步骤"),width:"600px","append-to-body":!0,"custom-class":"add-step-dialog"},{default:a(()=>[o(hs,{class:"fixed-tab-dialog"},{default:a(()=>[o(Ot,{label:"自定义命令"},{label:a(()=>[s("span",null,[o(I,null,{default:a(()=>[o(We,{"icon-class":"custom-cmd"})]),_:1}),f[22]||(f[22]=R(" 自定义命令"))])]),default:a(()=>[j.value.length===0?(n(),H(Ae,{key:0,description:"暂无可用命令,请先创建命令","image-size":80})):(n(),v("div",pm,[(n(!0),v(be,null,Me(j.value,ye=>(n(),v("div",{key:ye.id,class:"add-step-item",onClick:He=>xe(ye)},[s("div",mm,[s("div",vm,i(ye.name),1),ye.description?(n(),v("div",hm,i(ye.description),1)):z("",!0),s("code",gm,i(ye.command),1),ye.directory?(n(),v("div",Cm,[o(I,null,{default:a(()=>[o(t(ut))]),_:1}),s("span",null,i(ye.directory),1)])):z("",!0)]),o(tt,{type:"primary",size:"small",text:""},{default:a(()=>f[23]||(f[23]=[R("添加")])),_:1})],8,fm))),128))]))]),_:1}),o(Ot,{label:"等待"},{label:a(()=>[s("span",null,[o(I,null,{default:a(()=>[o(t(Pt))]),_:1}),f[24]||(f[24]=R(" 等待"))])]),default:a(()=>[s("div",ym,[o(fs,{modelValue:V.value,"onUpdate:modelValue":f[4]||(f[4]=ye=>V.value=ye),min:1,max:3600,step:1},null,8,["modelValue"]),f[26]||(f[26]=s("span",null,"秒",-1)),o(tt,{type:"primary",onClick:ue},{default:a(()=>f[25]||(f[25]=[R("添加等待步骤")])),_:1})])]),_:1}),o(Ot,{label:"版本管理"},{label:a(()=>[s("span",null,[o(I,null,{default:a(()=>[o(t(Rt))]),_:1}),f[27]||(f[27]=R(" 版本管理"))])]),default:a(()=>[s("div",_m,[s("div",bm,[f[28]||(f[28]=s("label",null,"package.json 文件(选填):",-1)),o(_o,{modelValue:F.value,"onUpdate:modelValue":f[5]||(f[5]=ye=>F.value=ye),placeholder:"留空则使用当前目录的 package.json",clearable:"",onChange:$},null,8,["modelValue"])]),s("div",wm,[f[31]||(f[31]=s("label",null,"修改目标:",-1)),o(rt,{modelValue:E.value,"onUpdate:modelValue":f[6]||(f[6]=ye=>E.value=ye)},{default:a(()=>[o(st,{value:"version"},{default:a(()=>f[29]||(f[29]=[R("version 字段")])),_:1}),o(st,{value:"dependency"},{default:a(()=>f[30]||(f[30]=[R("dependencies 中的依赖")])),_:1})]),_:1},8,["modelValue"])]),E.value==="version"?(n(),v("div",$m,[f[35]||(f[35]=s("label",null,"版本增量类型:",-1)),o(rt,{modelValue:L.value,"onUpdate:modelValue":f[7]||(f[7]=ye=>L.value=ye)},{default:a(()=>[o(st,{value:"patch"},{default:a(()=>f[32]||(f[32]=[R("补丁版本 (x.x.+1)")])),_:1}),o(st,{value:"minor"},{default:a(()=>f[33]||(f[33]=[R("次版本 (x.+1.0)")])),_:1}),o(st,{value:"major"},{default:a(()=>f[34]||(f[34]=[R("主版本 (+1.0.0)")])),_:1})]),_:1},8,["modelValue"])])):E.value==="dependency"?(n(),v(be,{key:1},[s("div",km,[f[38]||(f[38]=s("label",null,"依赖类型:",-1)),o(rt,{modelValue:Z.value,"onUpdate:modelValue":f[8]||(f[8]=ye=>Z.value=ye)},{default:a(()=>[o(st,{value:"dependencies"},{default:a(()=>f[36]||(f[36]=[R("dependencies")])),_:1}),o(st,{value:"devDependencies"},{default:a(()=>f[37]||(f[37]=[R("devDependencies")])),_:1})]),_:1},8,["modelValue"])]),s("div",Sm,[f[39]||(f[39]=s("label",null,"依赖包名称:",-1)),o(vs,{modelValue:G.value,"onUpdate:modelValue":f[9]||(f[9]=ye=>G.value=ye),placeholder:"请先选择 package.json,然后选择依赖包",clearable:"",filterable:"","allow-create":"",style:{width:"100%"}},{default:a(()=>[(n(!0),v(be,null,Me(b.value,ye=>(n(),H(ms,{key:ye,label:ye,value:ye},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),s("div",Bm,[f[42]||(f[42]=s("label",null,"版本号模式:",-1)),o(rt,{modelValue:X.value,"onUpdate:modelValue":f[10]||(f[10]=ye=>X.value=ye)},{default:a(()=>[o(st,{value:"bump"},{default:a(()=>f[40]||(f[40]=[R("自动递增 +1")])),_:1}),o(st,{value:"manual"},{default:a(()=>f[41]||(f[41]=[R("手动输入")])),_:1})]),_:1},8,["modelValue"])]),X.value==="bump"?(n(),v("div",Fm,[f[46]||(f[46]=s("label",null,"版本增量类型:",-1)),o(rt,{modelValue:x.value,"onUpdate:modelValue":f[11]||(f[11]=ye=>x.value=ye)},{default:a(()=>[o(st,{value:"patch"},{default:a(()=>f[43]||(f[43]=[R("补丁版本 (x.x.+1)")])),_:1}),o(st,{value:"minor"},{default:a(()=>f[44]||(f[44]=[R("次版本 (x.+1.0)")])),_:1}),o(st,{value:"major"},{default:a(()=>f[45]||(f[45]=[R("主版本 (+1.0.0)")])),_:1})]),_:1},8,["modelValue"])])):X.value==="manual"?(n(),v("div",Am,[f[47]||(f[47]=s("label",null,"新版本号:",-1)),o(ft,{modelValue:q.value,"onUpdate:modelValue":f[12]||(f[12]=ye=>q.value=ye),placeholder:"例如:^3.5.0、~2.8.0、latest",clearable:""},null,8,["modelValue"])])):z("",!0)],64)):z("",!0),o(tt,{type:"primary",onClick:ne},{default:a(()=>f[48]||(f[48]=[R("添加版本管理步骤")])),_:1}),E.value==="version"?(n(),H(Zt,{key:2,title:"将会修改 package.json 中的 version 字段,并自动递增版本号",type:"info",closable:!1,style:{"margin-top":"16px"}})):E.value==="dependency"?(n(),H(Zt,{key:3,title:"将会修改 package.json 中指定依赖的版本号",type:"info",closable:!1,style:{"margin-top":"16px"}})):z("",!0)])]),_:1})]),_:1})]),_:1},8,["modelValue","title"])],64)}}}),Dm=De(Tm,[["__scopeId","data-v-f5ea719a"]]),Mm={class:"node-content"},Pm={class:"node-label"},Vm={class:"node-badges"},Em={key:0,class:"node-badge terminal"},Om={key:0,class:"node-warning"},Nm={key:1,class:"command-details"},Gm={class:"command-code"},Lm={key:0,class:"command-dir"},Rm={key:0,class:"disabled-overlay"},xm=Se({__name:"CommandNode",props:{data:{},id:{}},emits:["delete","execute-from-node","execute-single-node"],setup(K,{emit:T}){const l=K,u=T,p=Qe(),c=h(!1),d=pe(()=>!l.data.config||!l.data.config.commandId?null:p.customCommands.find(B=>B.id===l.data.config.commandId)||null),g=pe(()=>{var S,B;return l.data.config?{name:l.data.config.commandName||"未配置",terminal:l.data.config.useTerminal||!1,command:((S=d.value)==null?void 0:S.command)||"",directory:((B=d.value)==null?void 0:B.directory)||""}:null});function C(S){S==="executeFrom"?u("execute-from-node",l.id):S==="executeSingle"&&u("execute-single-node",l.id)}return(S,B)=>{const _=Pe,w=Qt,y=Yt,k=Kt;return n(),H(k,{trigger:"contextmenu",onCommand:C,onVisibleChange:B[1]||(B[1]=V=>c.value=V),"popper-class":"flow-node-dropdown"},{dropdown:a(()=>[o(y,null,{default:a(()=>[o(w,{command:"executeFrom"},{default:a(()=>[o(_,null,{default:a(()=>[o(t(Xe))]),_:1}),B[4]||(B[4]=R(" 从此处开始执行 "))]),_:1}),o(w,{command:"executeSingle"},{default:a(()=>[o(_,null,{default:a(()=>[o(t(Xe))]),_:1}),B[5]||(B[5]=R(" 只执行此节点 "))]),_:1})]),_:1})]),default:a(()=>{var V,E;return[s("div",{class:ke(["command-node",{disabled:!S.data.enabled,selected:S.data.selected}])},[s("button",{class:"delete-btn",onClick:B[0]||(B[0]=Ze(L=>u("delete",S.id),["stop"])),title:"删除节点"},[o(_,null,{default:a(()=>[o(t(yt))]),_:1})]),o(t(At),{id:"target",type:"target",position:t(Tt).Left,class:"flow-node-handle handle-left"},null,8,["position"]),B[3]||(B[3]=s("div",{class:"node-header"},[s("div",{class:"flow-node-icon"},"📋"),s("div",{class:"node-type"},"命令节点")],-1)),s("div",Mm,[s("div",Pm,i(S.data.label),1),s("div",Vm,[(V=g.value)!=null&&V.terminal?(n(),v("div",Em,[o(_,null,{default:a(()=>[o(t(It))]),_:1}),B[2]||(B[2]=s("span",null,"终端",-1))])):z("",!0)]),S.data.config?z("",!0):(n(),v("div",Om,"未配置")),(E=g.value)!=null&&E.command?(n(),v("div",Nm,[s("div",Gm,[s("code",null,i(g.value.command),1)]),g.value.directory?(n(),v("div",Lm,[o(_,null,{default:a(()=>[o(t(ut))]),_:1}),s("span",null,i(g.value.directory),1)])):z("",!0)])):z("",!0)]),S.data.enabled?z("",!0):(n(),v("div",Rm,"已禁用")),o(t(At),{id:"source",type:"source",position:t(Tt).Right,class:"flow-node-handle handle-right"},null,8,["position"])],2)]}),_:1})}}}),zm=De(xm,[["__scopeId","data-v-e81037dc"]]),Hm={class:"node-content"},Im={class:"node-label"},jm={key:0,class:"node-warning"},Um={key:0,class:"disabled-overlay"},Wm=Se({__name:"WaitNode",props:{data:{},id:{}},emits:["delete","execute-from-node","execute-single-node"],setup(K,{emit:T}){const l=K,u=T,p=h(!1);function c(d){d==="executeFrom"?u("execute-from-node",l.id):d==="executeSingle"&&u("execute-single-node",l.id)}return(d,g)=>{const C=Pe,S=Qt,B=Yt,_=Kt;return n(),H(_,{trigger:"contextmenu",onCommand:c,onVisibleChange:g[1]||(g[1]=w=>p.value=w),"popper-class":"flow-node-dropdown"},{dropdown:a(()=>[o(B,null,{default:a(()=>[o(S,{command:"executeFrom"},{default:a(()=>[o(C,null,{default:a(()=>[o(t(Xe))]),_:1}),g[3]||(g[3]=R(" 从此处开始执行 "))]),_:1}),o(S,{command:"executeSingle"},{default:a(()=>[o(C,null,{default:a(()=>[o(t(Xe))]),_:1}),g[4]||(g[4]=R(" 只执行此节点 "))]),_:1})]),_:1})]),default:a(()=>[s("div",{class:ke(["wait-node",{disabled:!d.data.enabled,selected:d.data.selected}])},[s("button",{class:"delete-btn",onClick:g[0]||(g[0]=Ze(w=>u("delete",d.id),["stop"])),title:"删除节点"},[o(C,null,{default:a(()=>[o(t(yt))]),_:1})]),o(t(At),{id:"target",type:"target",position:t(Tt).Left,class:"flow-node-handle handle-left"},null,8,["position"]),g[2]||(g[2]=s("div",{class:"node-header"},[s("div",{class:"flow-node-icon"},"⏰"),s("div",{class:"node-type"},"等待节点")],-1)),s("div",Hm,[s("div",Im,i(d.data.label),1),d.data.config?z("",!0):(n(),v("div",jm,"未配置"))]),d.data.enabled?z("",!0):(n(),v("div",Um,"已禁用")),o(t(At),{id:"source",type:"source",position:t(Tt).Right,class:"flow-node-handle handle-right"},null,8,["position"])],2)]),_:1})}}}),Jm=De(Wm,[["__scopeId","data-v-e0f81dc4"]]),qm={class:"node-content"},Km={class:"node-label"},Ym={key:0,class:"node-badge"},Qm={key:1,class:"node-warning"},Zm={key:0,class:"disabled-overlay"},Xm=Se({__name:"VersionNode",props:{data:{},id:{}},emits:["delete","execute-from-node","execute-single-node"],setup(K,{emit:T}){const l=K,u=T,p=h(!1),c=pe(()=>l.data.config?{target:l.data.config.versionTarget,dependency:l.data.config.dependencyName}:null);function d(g){g==="executeFrom"?u("execute-from-node",l.id):g==="executeSingle"&&u("execute-single-node",l.id)}return(g,C)=>{const S=Pe,B=Qt,_=Yt,w=Kt;return n(),H(w,{trigger:"contextmenu",onCommand:d,onVisibleChange:C[1]||(C[1]=y=>p.value=y),"popper-class":"flow-node-dropdown"},{dropdown:a(()=>[o(_,null,{default:a(()=>[o(B,{command:"executeFrom"},{default:a(()=>[o(S,null,{default:a(()=>[o(t(Xe))]),_:1}),C[3]||(C[3]=R(" 从此处开始执行 "))]),_:1}),o(B,{command:"executeSingle"},{default:a(()=>[o(S,null,{default:a(()=>[o(t(Xe))]),_:1}),C[4]||(C[4]=R(" 只执行此节点 "))]),_:1})]),_:1})]),default:a(()=>{var y;return[s("div",{class:ke(["version-node",{disabled:!g.data.enabled,selected:g.data.selected}])},[s("button",{class:"delete-btn",onClick:C[0]||(C[0]=Ze(k=>u("delete",g.id),["stop"])),title:"删除节点"},[o(S,null,{default:a(()=>[o(t(yt))]),_:1})]),o(t(At),{id:"target",type:"target",position:t(Tt).Left,class:"flow-node-handle handle-left"},null,8,["position"]),C[2]||(C[2]=s("div",{class:"node-header"},[s("div",{class:"flow-node-icon"},"📦"),s("div",{class:"node-type"},"版本管理")],-1)),s("div",qm,[s("div",Km,i(g.data.label),1),((y=c.value)==null?void 0:y.target)==="dependency"?(n(),v("div",Ym," 依赖: "+i(c.value.dependency),1)):z("",!0),g.data.config?z("",!0):(n(),v("div",Qm,"未配置"))]),g.data.enabled?z("",!0):(n(),v("div",Zm,"已禁用")),o(t(At),{id:"source",type:"source",position:t(Tt).Right,class:"flow-node-handle handle-right"},null,8,["position"])],2)]}),_:1})}}}),e2=De(Xm,[["__scopeId","data-v-ddcf5d43"]]),t2=Se({__name:"StartNode",props:{data:{}},setup(K){return(T,l)=>(n(),v("div",{class:ke(["start-node",{selected:T.data.selected}])},[l[0]||(l[0]=s("div",{class:"flow-node-icon"},"🚀",-1)),l[1]||(l[1]=s("div",{class:"node-label"},"开始",-1)),o(t(At),{id:"source",type:"source",position:t(Tt).Right,class:"flow-node-handle handle-right"},null,8,["position"])],2))}}),s2=De(t2,[["__scopeId","data-v-6c5fb72c"]]),o2={class:"node-input-config"},a2={key:0,class:"empty-tip"},n2={key:1,class:"input-list"},l2={class:"input-row"},i2={class:"input-field param-name-field"},r2={class:"input-field type-field"},c2={class:"input-field value-field"},u2={class:"tree-node-label"},d2=Se({__name:"NodeInputConfig",props:{modelValue:{},paramNames:{},disableParamNameEdit:{type:Boolean},predecessorNodes:{}},emits:["update:modelValue"],setup(K,{emit:T}){const l=K,u=T,p=h([]);Ge(()=>l.modelValue,_=>{p.value=_?[..._]:[]},{immediate:!0,deep:!0}),Ge(()=>l.paramNames,_=>{if(!_||_.length===0){p.value=[],u("update:modelValue",[]);return}const w=new Map(p.value.map(k=>[k.paramName,k])),y=[];for(const k of _)w.has(k)?y.push(w.get(k)):y.push({paramName:k,inputType:"manual",manualValue:""});p.value=y,u("update:modelValue",y)},{immediate:!0});function c(_,w,y){if(!p.value[_])return;const k=[...p.value];k[_]={...k[_],[w]:y},w==="inputType"&&(y==="manual"?(k[_].referenceNodeId=void 0,k[_].referenceOutputKey=void 0):k[_].manualValue=void 0),p.value=k,u("update:modelValue",k)}function d(_){var w;return _.type==="command"?((w=_.data.config)==null?void 0:w.commandName)||_.data.label||"命令节点":_.data.label||_.id}function g(_){return _.type==="command"?[{key:"stdout",label:"标准输出 (stdout)"},{key:"stderr",label:"标准错误 (stderr)"}]:[]}const C=pe(()=>!l.predecessorNodes||l.predecessorNodes.length===0?[]:l.predecessorNodes.map(_=>({value:_.id,label:d(_),children:g(_).map(w=>({value:`${_.id}::${w.key}`,label:w.label}))})));function S(_,w){if(!w)return;const[y,k]=w.split("::"),V=[...p.value];V[_]={...V[_],referenceNodeId:y,referenceOutputKey:k},p.value=V,u("update:modelValue",V)}function B(_){return _.referenceNodeId&&_.referenceOutputKey?`${_.referenceNodeId}::${_.referenceOutputKey}`:""}return(_,w)=>{const y=Ye,k=gt,V=ht,E=Pe,L=Io;return n(),v("div",o2,[p.value.length===0?(n(),v("div",a2," 命令中未检测到变量参数 ")):(n(),v("div",n2,[(n(!0),v(be,null,Me(p.value,(F,m)=>(n(),v("div",{key:F.paramName,class:"input-item"},[s("div",l2,[s("div",i2,[w[0]||(w[0]=s("label",{class:"field-label"},"参数名",-1)),o(y,{"model-value":F.paramName,disabled:_.disableParamNameEdit,placeholder:"参数名",size:"default","onUpdate:modelValue":G=>c(m,"paramName",G)},null,8,["model-value","disabled","onUpdate:modelValue"])]),s("div",r2,[w[1]||(w[1]=s("label",{class:"field-label"},"类型",-1)),o(V,{"model-value":F.inputType,placeholder:"选择类型",size:"default","onUpdate:modelValue":G=>c(m,"inputType",G)},{default:a(()=>[o(k,{value:"manual",label:"手动输入"}),o(k,{value:"reference",label:"引用节点",disabled:!_.predecessorNodes||_.predecessorNodes.length===0},null,8,["disabled"])]),_:2},1032,["model-value","onUpdate:modelValue"])]),s("div",c2,[w[2]||(w[2]=s("label",{class:"field-label"},"值",-1)),F.inputType==="manual"?(n(),H(y,{key:0,"model-value":F.manualValue,placeholder:"输入参数值",size:"default",clearable:"","onUpdate:modelValue":G=>c(m,"manualValue",G)},null,8,["model-value","onUpdate:modelValue"])):(n(),H(L,{key:1,"model-value":B(F),data:C.value,placeholder:"选择节点输出",size:"default",clearable:"",filterable:"","check-strictly":"","render-after-expand":!1,"onUpdate:modelValue":G=>S(m,G)},{default:a(({data:G})=>[s("span",u2,[G.children?z("",!0):(n(),H(E,{key:0},{default:a(()=>[o(t(os))]),_:1})),R(" "+i(G.label),1)])]),_:2},1032,["model-value","data","onUpdate:modelValue"]))])])]))),128))]))])}}}),p2=De(d2,[["__scopeId","data-v-9f9d5ab2"]]);function f2(K){if(!K)return[];const T=/\{\{(\w+)\}\}/g,l=[];let u;for(;(u=T.exec(K))!==null;){const p=u[1];l.includes(p)||l.push(p)}return l}function m2(K,T){if(!K)return"";let l=K;for(const[u,p]of Object.entries(T)){const c=new RegExp(`\\{\\{${u}\\}\\}`,"g");l=l.replace(c,p||"")}return l}const v2={key:0,class:"config-content"},h2={class:"config-section"},g2={key:0,class:"config-section"},C2={class:"section-title"},y2={key:1,class:"config-section"},_2={class:"section-title"},b2={key:0,class:"empty-tip"},w2={key:1,class:"command-list"},$2=["onClick"],k2={class:"command-info"},S2={class:"command-header"},B2={class:"command-name"},F2={key:0,class:"command-desc"},A2={class:"command-code"},T2={class:"command-dir"},D2={key:2,class:"config-section"},M2={class:"section-title"},P2={key:3,class:"config-section"},V2={class:"section-title"},E2={class:"node-option"},O2={class:"node-name"},N2={class:"node-id"},G2={class:"reference-tip"},L2={class:"dialog-footer"},R2={class:"footer-actions"},x2=Se({__name:"NodeConfigPanel",props:{modelValue:{type:Boolean},node:{},allNodes:{},edges:{}},emits:["update:modelValue","update-config"],setup(K,{emit:T}){const l=K,u=T,p=Qe(),c=pe({get:()=>l.modelValue,set:F=>u("update:modelValue",F)}),d=h({}),g=h([]),C=pe(()=>p.customCommands||[]),S=pe(()=>{if(!d.value.commandId)return[];const F=C.value.find(m=>m.id===d.value.commandId);return F?f2(F.command):[]}),B=pe(()=>{if(!l.node||!l.allNodes||!l.edges)return[];const F=l.node.id,m=l.edges,G=l.allNodes,q=[],Z=new Set,X=[F];function x(b){return m.filter(D=>D.target===b).map(D=>D.source)}for(;X.length>0;){const b=X.shift(),D=x(b);for(const j of D)if(!Z.has(j)){Z.add(j),X.push(j);const ie=G.find(ve=>ve.id===j);ie&&ie.type==="command"&&ie.data.config&&q.push(ie)}}return q});function _(F){return F.type==="command"?[{key:"stdout",label:"标准输出 (stdout)"},{key:"version",label:"提取的版本号"}]:[]}function w(F){var m;return F.type==="command"?((m=F.data.config)==null?void 0:m.commandName)||F.data.label||"命令节点":F.data.label||F.id}Ge(()=>l.node,F=>{if(!F)return;const m=F.data.config;if(F.type==="command")d.value={commandId:m==null?void 0:m.commandId,commandName:m==null?void 0:m.commandName,useTerminal:(m==null?void 0:m.useTerminal)||!1,inputs:Array.isArray(m==null?void 0:m.inputs)?m.inputs:[],enabled:F.data.enabled??!0};else if(F.type==="wait")d.value={waitSeconds:(m==null?void 0:m.waitSeconds)||5,enabled:F.data.enabled??!0};else if(F.type==="version"){let G="bump";m!=null&&m.inputRef?G="reference":m!=null&&m.dependencyVersion||(m==null?void 0:m.versionTarget)!=="dependency"&&!(m!=null&&m.versionBump)?G="manual":(m!=null&&m.dependencyVersionBump||m!=null&&m.versionBump)&&(G="bump"),d.value={versionTarget:(m==null?void 0:m.versionTarget)||"version",versionBump:(m==null?void 0:m.versionBump)||"patch",packageJsonPath:(m==null?void 0:m.packageJsonPath)||"",dependencyName:(m==null?void 0:m.dependencyName)||"",dependencyVersion:(m==null?void 0:m.dependencyVersion)||"",dependencyType:(m==null?void 0:m.dependencyType)||"dependencies",dependencyVersionMode:m!=null&&m.dependencyVersionBump?"bump":"manual",dependencyVersionBump:(m==null?void 0:m.dependencyVersionBump)||"patch",versionSource:G,inputRef:m==null?void 0:m.inputRef,enabled:F.data.enabled??!0},m!=null&&m.packageJsonPath&&y(m.packageJsonPath)}},{immediate:!0});async function y(F){try{const m=await fetch("/api/read-package-json",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packageJsonPath:F})});if(!m.ok)throw new Error(`HTTP ${m.status}`);const G=await m.json();if(G.success){const q=[],Z=d.value.dependencyType||"dependencies";Z==="dependencies"&&G.dependencies?q.push(...Object.keys(G.dependencies)):Z==="devDependencies"&&G.devDependencies&&q.push(...Object.keys(G.devDependencies)),g.value=q.sort()}}catch(m){console.error("读取依赖列表失败:",m),g.value=[]}}Ge(()=>d.value.dependencyType,()=>{d.value.packageJsonPath&&y(d.value.packageJsonPath)});function k(F){d.value.selectedPackageFile=F,F?(d.value.packageJsonPath=F.fullPath,y(F.fullPath)):g.value=[]}function V(F){d.value.commandId=F.id,d.value.commandName=F.name}function E(){return`step-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function L(){var m,G,q,Z,X,x,b,D;if(!l.node)return;let F=null;if(l.node.type==="command"){if(!d.value.commandId){r.warning("请选择要执行的命令");return}F={id:((m=l.node.data.config)==null?void 0:m.id)||E(),nodeId:l.node.id,type:"command",commandId:d.value.commandId,commandName:d.value.commandName||"",useTerminal:d.value.useTerminal||!1,inputs:d.value.inputs||[],enabled:d.value.enabled??!0}}else if(l.node.type==="wait"){if(!d.value.waitSeconds||d.value.waitSeconds<=0){r.warning("等待时间必须大于0秒");return}F={id:((G=l.node.data.config)==null?void 0:G.id)||E(),nodeId:l.node.id,type:"wait",waitSeconds:d.value.waitSeconds,enabled:d.value.enabled??!0}}else if(l.node.type==="version"){if(d.value.versionTarget==="dependency"){if(!((q=d.value.dependencyName)!=null&&q.trim())){r.warning("请选择依赖包名称");return}if(d.value.versionSource==="manual"&&!((Z=d.value.dependencyVersion)!=null&&Z.trim())){r.warning("请输入依赖包版本号");return}if(d.value.versionSource==="reference"&&!d.value.inputRef){r.warning("请选择要引用的节点输出");return}}F={id:((X=l.node.data.config)==null?void 0:X.id)||E(),nodeId:l.node.id,type:"version",versionTarget:d.value.versionTarget||"version",versionBump:d.value.versionSource==="bump"?d.value.versionBump||"patch":void 0,packageJsonPath:((x=d.value.packageJsonPath)==null?void 0:x.trim())||void 0,dependencyName:d.value.versionTarget==="dependency"?(b=d.value.dependencyName)==null?void 0:b.trim():void 0,dependencyVersion:d.value.versionTarget==="dependency"&&d.value.versionSource==="manual"?(D=d.value.dependencyVersion)==null?void 0:D.trim():void 0,dependencyVersionBump:d.value.versionTarget==="dependency"&&d.value.versionSource==="bump"?d.value.dependencyVersionBump:void 0,dependencyType:d.value.versionTarget==="dependency"?d.value.dependencyType:void 0,versionSource:d.value.versionSource,inputRef:d.value.versionSource==="reference"?d.value.inputRef:void 0,enabled:d.value.enabled??!0}}F&&(u("update-config",l.node.id,F),r.success("节点配置已保存"),c.value=!1)}return(F,m)=>{const G=us,q=kt,Z=As,X=Jt,x=$t,b=Pe,D=so,j=gt,ie=ht,ve=Re,Ce=Ye;return n(),H(Ue,{modelValue:c.value,"onUpdate:modelValue":m[15]||(m[15]=re=>c.value=re),title:"节点配置",size:"extra-large","append-to-body":!0,"custom-class":"node-config-dialog"},{footer:a(()=>[s("div",L2,[s("div",R2,[s("button",{type:"button",class:"dialog-cancel-btn",onClick:m[14]||(m[14]=re=>c.value=!1)}," 取消 "),s("button",{type:"button",class:"dialog-confirm-btn",onClick:L},[o(b,null,{default:a(()=>[o(t(ks))]),_:1}),m[38]||(m[38]=s("span",null,"保存配置",-1))])])])]),default:a(()=>[F.node?(n(),v("div",v2,[s("div",h2,[m[18]||(m[18]=s("div",{class:"section-title"},"通用设置",-1)),o(x,{"label-width":"100px"},{default:a(()=>[o(q,{label:"启用节点"},{default:a(()=>[o(G,{modelValue:d.value.enabled,"onUpdate:modelValue":m[0]||(m[0]=re=>d.value.enabled=re)},null,8,["modelValue"])]),_:1}),F.node.type==="command"?(n(),H(q,{key:0,label:"执行方式"},{default:a(()=>[o(X,{modelValue:d.value.useTerminal,"onUpdate:modelValue":m[1]||(m[1]=re=>d.value.useTerminal=re)},{default:a(()=>[o(Z,{value:!1},{default:a(()=>m[16]||(m[16]=[R("普通执行")])),_:1}),o(Z,{value:!0},{default:a(()=>m[17]||(m[17]=[R("终端执行")])),_:1})]),_:1},8,["modelValue"])]),_:1})):z("",!0)]),_:1})]),F.node.type==="command"&&d.value.commandId&&d.value.inputs?(n(),v("div",g2,[s("div",C2,[o(b,null,{default:a(()=>[o(t(os))]),_:1}),m[19]||(m[19]=R(" 输入配置 "))]),o(p2,{modelValue:d.value.inputs,"onUpdate:modelValue":m[2]||(m[2]=re=>d.value.inputs=re),"param-names":S.value,"disable-param-name-edit":!0,"predecessor-nodes":B.value},null,8,["modelValue","param-names","predecessor-nodes"])])):z("",!0),F.node.type==="command"?(n(),v("div",y2,[s("div",_2,[o(b,null,{default:a(()=>[o(We,{"icon-class":"custom-cmd"})]),_:1}),m[20]||(m[20]=R(" 命令配置 "))]),o(x,{"label-width":"100px"},{default:a(()=>[o(q,{label:"选择命令",required:""},{default:a(()=>[C.value.length===0?(n(),v("div",b2," 暂无可用命令,请先创建命令 ")):(n(),v("div",w2,[(n(!0),v(be,null,Me(C.value,re=>(n(),v("div",{key:re.id,class:ke(["command-item",{selected:d.value.commandId===re.id}]),onClick:W=>V(re)},[s("div",k2,[s("div",S2,[s("span",B2,i(re.name),1),re.description?(n(),v("span",F2,i(re.description),1)):z("",!0)]),s("code",A2,i(re.command),1),s("div",T2,[o(b,null,{default:a(()=>[o(t(ut))]),_:1}),s("span",null,i(re.directory?re.directory.replace(/\\/g,"/"):"当前目录"),1)])]),d.value.commandId===re.id?(n(),H(b,{key:0,class:"check-icon"},{default:a(()=>[o(t(ks))]),_:1})):z("",!0)],10,$2))),128))]))]),_:1})]),_:1})])):z("",!0),F.node.type==="wait"?(n(),v("div",D2,[s("div",M2,[o(b,null,{default:a(()=>[o(t(Pt))]),_:1}),m[21]||(m[21]=R(" 等待配置 "))]),o(x,{"label-width":"100px"},{default:a(()=>[o(q,{label:"等待时间",required:""},{default:a(()=>[o(D,{modelValue:d.value.waitSeconds,"onUpdate:modelValue":m[3]||(m[3]=re=>d.value.waitSeconds=re),min:1,max:3600,step:1},null,8,["modelValue"]),m[22]||(m[22]=s("span",{style:{"margin-left":"var(--spacing-md)"}},"秒",-1))]),_:1})]),_:1})])):z("",!0),F.node.type==="version"?(n(),v("div",P2,[s("div",V2,[o(b,null,{default:a(()=>[o(t(Rt))]),_:1}),m[23]||(m[23]=R(" 版本配置 "))]),o(x,{"label-width":"120px"},{default:a(()=>[o(q,{label:"package.json"},{default:a(()=>[o(_o,{modelValue:d.value.packageJsonPath,"onUpdate:modelValue":m[4]||(m[4]=re=>d.value.packageJsonPath=re),placeholder:"留空则使用当前目录的 package.json",clearable:"",onChange:k},null,8,["modelValue"])]),_:1}),o(q,{label:"修改目标",required:""},{default:a(()=>[o(X,{modelValue:d.value.versionTarget,"onUpdate:modelValue":m[5]||(m[5]=re=>d.value.versionTarget=re)},{default:a(()=>[o(Z,{value:"version"},{default:a(()=>m[24]||(m[24]=[R("version 字段")])),_:1}),o(Z,{value:"dependency"},{default:a(()=>m[25]||(m[25]=[R("dependencies 中的依赖")])),_:1})]),_:1},8,["modelValue"])]),_:1}),d.value.versionTarget==="version"?(n(),H(q,{key:0,label:"版本增量类型",required:""},{default:a(()=>[o(X,{modelValue:d.value.versionBump,"onUpdate:modelValue":m[6]||(m[6]=re=>d.value.versionBump=re)},{default:a(()=>[o(Z,{value:"patch"},{default:a(()=>m[26]||(m[26]=[R("补丁版本 (x.x.+1)")])),_:1}),o(Z,{value:"minor"},{default:a(()=>m[27]||(m[27]=[R("次版本 (x.+1.0)")])),_:1}),o(Z,{value:"major"},{default:a(()=>m[28]||(m[28]=[R("主版本 (+1.0.0)")])),_:1})]),_:1},8,["modelValue"])]),_:1})):z("",!0),d.value.versionTarget==="dependency"?(n(),v(be,{key:1},[o(q,{label:"依赖类型",required:""},{default:a(()=>[o(X,{modelValue:d.value.dependencyType,"onUpdate:modelValue":m[7]||(m[7]=re=>d.value.dependencyType=re)},{default:a(()=>[o(Z,{value:"dependencies"},{default:a(()=>m[29]||(m[29]=[R("dependencies")])),_:1}),o(Z,{value:"devDependencies"},{default:a(()=>m[30]||(m[30]=[R("devDependencies")])),_:1})]),_:1},8,["modelValue"])]),_:1}),o(q,{label:"依赖包名称",required:""},{default:a(()=>[o(ie,{modelValue:d.value.dependencyName,"onUpdate:modelValue":m[8]||(m[8]=re=>d.value.dependencyName=re),placeholder:"请先选择 package.json",clearable:"",filterable:"","allow-create":"",style:{width:"100%"}},{default:a(()=>[(n(!0),v(be,null,Me(g.value,re=>(n(),H(j,{key:re,label:re,value:re},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),o(q,{label:"版本号来源",required:""},{default:a(()=>[o(X,{modelValue:d.value.versionSource,"onUpdate:modelValue":m[9]||(m[9]=re=>d.value.versionSource=re)},{default:a(()=>[o(Z,{value:"bump"},{default:a(()=>m[31]||(m[31]=[R("自动递增")])),_:1}),o(Z,{value:"manual"},{default:a(()=>m[32]||(m[32]=[R("手动输入")])),_:1}),o(Z,{value:"reference",disabled:B.value.length===0},{default:a(()=>[m[33]||(m[33]=R(" 引用输出 ")),B.value.length===0?(n(),H(ve,{key:0,content:"无可用的前置命令节点",placement:"top"},{default:a(()=>[o(b,{style:{"margin-left":"4px"}},{default:a(()=>[o(t(os))]),_:1})]),_:1})):z("",!0)]),_:1},8,["disabled"])]),_:1},8,["modelValue"])]),_:1}),d.value.versionSource==="bump"?(n(),H(q,{key:0,label:"递增类型",required:""},{default:a(()=>[o(X,{modelValue:d.value.dependencyVersionBump,"onUpdate:modelValue":m[10]||(m[10]=re=>d.value.dependencyVersionBump=re)},{default:a(()=>[o(Z,{value:"patch"},{default:a(()=>m[34]||(m[34]=[R("补丁版本")])),_:1}),o(Z,{value:"minor"},{default:a(()=>m[35]||(m[35]=[R("次版本")])),_:1}),o(Z,{value:"major"},{default:a(()=>m[36]||(m[36]=[R("主版本")])),_:1})]),_:1},8,["modelValue"])]),_:1})):z("",!0),d.value.versionSource==="manual"?(n(),H(q,{key:1,label:"版本号",required:""},{default:a(()=>[o(Ce,{modelValue:d.value.dependencyVersion,"onUpdate:modelValue":m[11]||(m[11]=re=>d.value.dependencyVersion=re),placeholder:"例如: 1.2.3"},null,8,["modelValue"])]),_:1})):z("",!0),d.value.versionSource==="reference"?(n(),v(be,{key:2},[o(q,{label:"引用节点",required:""},{default:a(()=>[o(ie,{modelValue:d.value.inputRef,"onUpdate:modelValue":m[12]||(m[12]=re=>d.value.inputRef=re),"value-key":"nodeId",placeholder:"选择要引用的前置节点",style:{width:"100%"}},{default:a(()=>[(n(!0),v(be,null,Me(B.value,re=>(n(),H(j,{key:re.id,label:w(re),value:{nodeId:re.id,outputKey:"stdout"}},{default:a(()=>[s("div",E2,[s("span",O2,i(w(re)),1),s("span",N2,"ID: "+i(re.id.substring(0,15))+"...",1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),d.value.inputRef?(n(),H(q,{key:0,label:"输出字段",required:""},{default:a(()=>[o(ie,{modelValue:d.value.inputRef.outputKey,"onUpdate:modelValue":m[13]||(m[13]=re=>d.value.inputRef.outputKey=re),placeholder:"选择要引用的输出字段",style:{width:"100%"}},{default:a(()=>[(n(!0),v(be,null,Me(_(B.value.find(re=>{var W;return re.id===((W=d.value.inputRef)==null?void 0:W.nodeId)})),re=>(n(),H(j,{key:re.key,label:re.label,value:re.key},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})):z("",!0),s("div",G2,[o(b,null,{default:a(()=>[o(t(os))]),_:1}),m[37]||(m[37]=s("span",null,"版本号将使用所选节点的输出结果",-1))])],64)):z("",!0)],64)):z("",!0)]),_:1})])):z("",!0)])):z("",!0)]),_:1},8,["modelValue"])}}}),z2=De(x2,[["__scopeId","data-v-142fa535"]]),H2={class:"flow-workspace-container"},I2={class:"left-sidebar"},j2={class:"sidebar-header"},U2={class:"orchestration-list"},W2=["onClick"],J2={class:"item-content"},q2={key:0,class:"description"},K2={class:"item-actions"},Y2={class:"flow-canvas"},Q2={class:"canvas-header"},Z2={class:"header-info"},X2={class:"header-actions"},ev={class:"right-sidebar"},tv={class:"node-toolbox"},sv=Se({__name:"FlowOrchestrationWorkspace",props:{visible:{type:Boolean}},emits:["update:visible","execute-orchestration"],setup(K,{emit:T}){const l=K,u=T,p=Qe(),c=pe({get:()=>l.visible,set:M=>u("update:visible",M)}),{onConnect:d,addEdges:g,getViewport:C,setViewport:S,onNodeDragStart:B,onNodeDragStop:_,getSelectedEdges:w}=jo(),y=h([]),k=h([]),V=h(""),E=h(""),L=h(null),F=h(!1),m=h(null);let G=null;const q=pe(()=>p.orchestrations||[]),Z=h(null);let X=1;function x(M){return`${M}-${Date.now()}-${X++}`}function b(){L.value&&V.value.trim()&&(G&&clearTimeout(G),G=window.setTimeout(()=>{we()},1e3))}function D(){y.value=[{id:"start-node",type:"start",position:{x:50,y:200},data:{id:"start-node",type:"start",label:"开始",enabled:!0}}],k.value=[],X=1}function j(M){const A=x(M),Q={id:A,type:M,position:{x:Math.random()*600+250,y:Math.random()*200+100},data:{id:A,type:M,label:M==="command"?"命令节点":M==="wait"?"等待节点":"版本管理",enabled:!0,config:void 0}};y.value.push(Q),m.value=Q,F.value=!0,r.success(`已添加${Q.data.label}`),b()}d(M=>{g([M]),b()}),B(M=>{y.value.forEach(Q=>{Q.data&&(Q.data.selected=!1)});const A=y.value.find(Q=>Q.id===M.node.id);A&&A.data&&(A.data.selected=!0)}),_(()=>{b()});function ie(M){y.value.forEach(Q=>{Q.data&&(Q.data.selected=!1)});const A=y.value.find(Q=>Q.id===M.node.id);A&&(A.data.selected=!0,A.type!=="start"&&(m.value=A,F.value=!0))}function ve(){y.value.forEach(M=>{M.data&&(M.data.selected=!1)})}function Ce(M,A){const Q=y.value.find(le=>le.id===M);Q&&(Q.data.config=A,Q.data.label=re(A),b())}function re(M){return M.type==="command"?M.commandName||"未知命令":M.type==="wait"?`等待 ${M.waitSeconds} 秒`:M.type==="version"?M.versionTarget==="dependency"?`修改依赖: ${M.dependencyName}`:`版本号 +1 (${M.versionBump})`:"未配置"}function W(M){var A;if(M==="start-node"){r.warning("不能删除起始节点");return}y.value=y.value.filter(Q=>Q.id!==M),k.value=k.value.filter(Q=>Q.source!==M&&Q.target!==M),((A=m.value)==null?void 0:A.id)===M&&(m.value=null,F.value=!1),r.success("节点已删除"),b()}function Y(M){for(const A of M)A.type==="remove"&&(k.value=k.value.filter(Q=>Q.id!==A.id));b()}function ae(M){if(M.key==="Delete"||M.key==="Backspace"){const A=w.value;if(A&&A.length>0){const Q=A.map(le=>le.id);k.value=k.value.filter(le=>!Q.includes(le.id)),b(),M.preventDefault()}}}function fe(){Ie.confirm("确定要清空整个流程吗?","确认清空",{confirmButtonText:"清空",cancelButtonText:"取消",type:"warning"}).then(()=>{D(),r.success("流程已清空"),b()}).catch(()=>{})}function he(){if(y.value.length<=1){r.info("节点太少,无需优化布局");return}const M=new Map,A=new Map;y.value.forEach(oe=>{M.set(oe.id,[]),A.set(oe.id,0)}),k.value.forEach(oe=>{var ge;(ge=M.get(oe.source))==null||ge.push(oe.target),A.set(oe.target,(A.get(oe.target)||0)+1)});const Q=[],le=new Set;let me=y.value.filter(oe=>A.get(oe.id)===0).map(oe=>oe.id);for(;me.length>0;){Q.push([...me]),me.forEach(ge=>le.add(ge));const oe=new Set;me.forEach(ge=>{var Oe;(Oe=M.get(ge))==null||Oe.forEach(P=>{k.value.filter(I=>I.target===P).every(I=>le.has(I.source))&&!le.has(P)&&oe.add(P)})}),me=Array.from(oe)}const de=y.value.filter(oe=>!le.has(oe.id)).map(oe=>oe.id);de.length>0&&Q.push(de);const J=220,O=120,N=50,se=150;Q.forEach((oe,ge)=>{const Oe=N+ge*J,P=(oe.length-1)*O,f=se+(400-P)/2;oe.forEach((I,Ae)=>{const qe=y.value.find(ze=>ze.id===I);qe&&(qe.position={x:Oe,y:Math.max(se,f+Ae*O)})})}),r.success("布局优化完成"),b()}async function we(){if(!V.value.trim()){r.warning("请输入编排名称");return}const M=y.value.filter(me=>me.type!=="start"&&!me.data.config);if(M.length>0){const me=M.map(de=>de.data.label).join("、");r.warning(`以下节点还未配置:${me}。未配置的节点不会被保存。`)}const A=$e();if(A.length===0){r.warning("请至少添加一个执行步骤");return}const Q=C(),le={name:V.value.trim(),description:E.value.trim(),steps:A,flowData:{nodes:y.value,edges:k.value,viewport:{x:Q.x,y:Q.y,zoom:Q.zoom}}};if(L.value)await p.updateOrchestration(L.value,le);else{const me=await p.saveOrchestration(le);r.success("编排已保存"),me&&typeof me=="object"&&"id"in me&&(Z.value=me.id,L.value=me.id)}}function $e(){const M=[],A=new Set,Q=new Set;function le(de){if(A.has(de))return;if(Q.has(de)){r.warning("检测到循环依赖,请检查流程图");return}Q.add(de);const J=y.value.find(N=>N.id===de);if(!J){Q.delete(de);return}J.type!=="start"&&J.data.config&&M.push({...J.data.config,nodeId:J.id,enabled:J.data.enabled??!0}),Q.delete(de),A.add(de);const O=k.value.filter(N=>N.source===de);for(const N of O)le(N.target)}const me=y.value.find(de=>de.type==="start");if(me){const de=k.value.filter(J=>J.source===me.id);for(const J of de)le(J.target)}return M}function Ne(){const M=$e();if(M.length===0){r.warning("请至少添加一个执行步骤");return}c.value=!1,u("execute-orchestration",M)}function Le(M){const A=$e();if(A.length===0){r.warning("请至少添加一个执行步骤");return}const Q=A.findIndex(le=>le.nodeId===M);if(Q===-1){r.warning("未找到该节点对应的步骤");return}c.value=!1,u("execute-orchestration",A,Q)}function xe(M){const A=y.value.find(le=>le.id===M);if(!A||A.type==="start"||!A.data.config){r.warning("该节点无法执行");return}const Q={...A.data.config,nodeId:A.id,enabled:A.data.enabled??!0};c.value=!1,u("execute-orchestration",[Q],0,!0)}function ue(M){Z.value=M.id,L.value=M.id,V.value=M.name,E.value=M.description||"",M.flowData?(y.value=JSON.parse(JSON.stringify(M.flowData.nodes)),k.value=JSON.parse(JSON.stringify(M.flowData.edges)),M.flowData.viewport&&setTimeout(()=>{S(M.flowData.viewport)},100)):$(M.steps)}function $(M){D();let A=150,Q="start-node";M.forEach(le=>{const me=x(le.type),de={id:me,type:le.type,position:{x:250,y:A},data:{id:me,type:le.type,label:re(le),config:le,enabled:le.enabled??!0}};y.value.push(de),k.value.push({id:`edge-${Q}-${me}`,source:Q,target:me}),Q=me,A+=120})}function U(){Z.value=null,L.value=null,V.value="",E.value="",D()}async function ne(M){try{await Ie.confirm(`确定要删除编排 "${M.name}" 吗?`,"确认删除",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"}),await p.deleteOrchestration(M.id),r.success("编排已删除"),L.value===M.id&&U()}catch(A){A!=="cancel"&&r.error(`删除编排失败: ${A.message||A}`)}}function ce(M){c.value=!1,u("execute-orchestration",M.steps,0)}return pt(()=>{D(),window.addEventListener("keydown",ae)}),ls(()=>{window.removeEventListener("keydown",ae)}),(M,A)=>{const Q=Pe,le=ot,me=Ye;return n(),H(Ue,{modelValue:c.value,"onUpdate:modelValue":A[8]||(A[8]=de=>c.value=de),title:"可视化编排工作台","close-on-click-modal":!1,"append-to-body":!0,"custom-class":"flow-orchestration-dialog",width:"95vw"},{default:a(()=>[s("div",H2,[s("div",I2,[s("div",j2,[A[9]||(A[9]=s("h3",null,"已保存的编排",-1)),o(Fe,{tooltip:"新建编排",size:"small","hover-color":"var(--color-primary)",onClick:U},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(Wt))]),_:1})]),_:1})]),s("div",U2,[q.value.length===0?(n(),H(le,{key:0,description:"暂无编排","image-size":80})):z("",!0),(n(!0),v(be,null,Me(q.value,de=>(n(),v("div",{key:de.id,class:ke(["orchestration-item",{active:Z.value===de.id}]),onClick:J=>ue(de)},[s("div",J2,[s("h4",null,i(de.name),1),de.description?(n(),v("p",q2,i(de.description),1)):z("",!0),s("div",K2,[o(Fe,{tooltip:"执行",size:"small","hover-color":"var(--color-primary)",onClick:Ze(J=>ce(de),["stop"])},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:2},1032,["onClick"]),o(Fe,{tooltip:"删除",size:"small","hover-color":"var(--color-danger)",onClick:Ze(J=>ne(de),["stop"])},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(it))]),_:1})]),_:2},1032,["onClick"])])])],10,W2))),128))])]),s("div",Y2,[s("div",Q2,[s("div",Z2,[o(me,{modelValue:V.value,"onUpdate:modelValue":A[0]||(A[0]=de=>V.value=de),placeholder:"编排名称(必填)",size:"large",style:{width:"300px","margin-right":"10px"}},null,8,["modelValue"]),o(me,{modelValue:E.value,"onUpdate:modelValue":A[1]||(A[1]=de=>E.value=de),placeholder:"编排描述(选填)",size:"large",style:{width:"400px"}},null,8,["modelValue"])]),s("div",X2,[o(Fe,{tooltip:"保存编排",size:"large","hover-color":"var(--color-success)",onClick:we},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(ks))]),_:1})]),_:1}),o(Fe,{tooltip:"执行流程",size:"large","hover-color":"var(--color-primary)",onClick:Ne},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(Xe))]),_:1})]),_:1}),o(Fe,{tooltip:"清空流程",size:"large","hover-color":"var(--color-danger)",onClick:fe},{default:a(()=>[o(Q,null,{default:a(()=>[o(t(it))]),_:1})]),_:1})])]),o(t(Uo),{nodes:y.value,"onUpdate:nodes":A[2]||(A[2]=de=>y.value=de),edges:k.value,"onUpdate:edges":A[3]||(A[3]=de=>k.value=de),class:"vue-flow-container","default-zoom":1,"min-zoom":.2,"max-zoom":4,onNodeClick:ie,onPaneClick:ve,onEdgesChange:Y},{"node-start":a(({data:de})=>[o(s2,{data:de},null,8,["data"])]),"node-command":a(({data:de,id:J})=>[o(zm,{data:de,id:J,onDelete:W,onExecuteFromNode:Le,onExecuteSingleNode:xe},null,8,["data","id"])]),"node-wait":a(({data:de,id:J})=>[o(Jm,{data:de,id:J,onDelete:W,onExecuteFromNode:Le,onExecuteSingleNode:xe},null,8,["data","id"])]),"node-version":a(({data:de,id:J})=>[o(e2,{data:de,id:J,onDelete:W,onExecuteFromNode:Le,onExecuteSingleNode:xe},null,8,["data","id"])]),default:a(()=>[o(t(Wo),{"pattern-color":"#aaa",gap:16}),o(t(Jo),null,{default:a(()=>[s("button",{class:"vue-flow__controls-button",onClick:he,title:"优化布局"},[o(Q,null,{default:a(()=>[o(t(qo))]),_:1})])]),_:1})]),_:1},8,["nodes","edges"])]),s("div",ev,[A[13]||(A[13]=s("div",{class:"sidebar-header"},[s("h3",null,"节点工具箱")],-1)),s("div",tv,[s("div",{class:"tool-item",onClick:A[4]||(A[4]=de=>j("command"))},A[10]||(A[10]=[s("div",{class:"tool-icon command"},"📋",-1),s("div",{class:"tool-label"},"命令节点",-1),s("div",{class:"tool-desc"},"执行自定义命令",-1)])),s("div",{class:"tool-item",onClick:A[5]||(A[5]=de=>j("wait"))},A[11]||(A[11]=[s("div",{class:"tool-icon wait"},"⏰",-1),s("div",{class:"tool-label"},"等待节点",-1),s("div",{class:"tool-desc"},"暂停指定时间",-1)])),s("div",{class:"tool-item",onClick:A[6]||(A[6]=de=>j("version"))},A[12]||(A[12]=[s("div",{class:"tool-icon version"},"📦",-1),s("div",{class:"tool-label"},"版本管理",-1),s("div",{class:"tool-desc"},"修改版本号或依赖",-1)]))])])]),o(z2,{modelValue:F.value,"onUpdate:modelValue":A[7]||(A[7]=de=>F.value=de),node:m.value,"all-nodes":y.value,edges:k.value,onUpdateConfig:Ce},null,8,["modelValue","node","all-nodes","edges"])]),_:1},8,["modelValue"])}}}),ov=De(sv,[["__scopeId","data-v-82b03a31"]]),av={class:"console-header"},nv={class:"header-left"},lv={class:"console-title"},iv={class:"header-actions"},rv={key:0,class:"execution-controls"},cv={class:"console-content"},uv={key:0,class:"orchestration-steps-panel"},dv={class:"steps-header"},pv={class:"steps-title"},fv={class:"steps-list"},mv={class:"step-indicator"},vv={key:4,class:"step-number"},hv={class:"step-content"},gv={class:"step-header"},Cv={key:0,class:"step-disabled-tag"},yv={class:"step-name"},_v={key:0,class:"terminal-waiting-panel"},bv={class:"waiting-content"},wv={class:"waiting-text"},$v={class:"waiting-desc"},kv={class:"waiting-actions"},Sv={class:"console-input-row"},Bv=["title"],Fv={key:1,class:"console-output"},Av=["onClick"],Tv={class:"cmd-line"},Dv={class:"cmd-text"},Mv={class:"ts"},Pv={class:"cmd-actions"},Vv={key:0,class:"output-content"},Ev=["innerHTML"],Ov=["innerHTML"],Nv={key:0,class:"stdin-input-row"},Gv=Se({__name:"CommandConsole",setup(K){const T=Qe(),l=je();function u(){const ue=window.location.port||"80";return parseInt(ue==="5173"||ue==="4173"||ue==="5544"?"3000":ue,10)}const p=u(),c=h(null),d=h(""),g=h(""),C=h(!1),S=h(!1),B=h([]);let _=0;function w(){Ie.confirm("确定要清空所有执行历史吗?此操作不可撤销。","清空历史",{confirmButtonText:"清空",cancelButtonText:"取消",type:"warning"}).then(()=>{B.value=[],r.success("执行历史已清空")}).catch(()=>{})}function y(){m&&m(!0)}function k(){m&&m(!1)}const V=h([]),E=h(-1),L=h(!1),F=h("");let m=null;const G=h(localStorage.getItem("isConsoleExpanded")!=="false"),q=new Ko({fg:"#e5e5e5",bg:"transparent",newline:!1,escapeXML:!1,stream:!1,colors:{0:"var(--color-black)",1:"#cd3131",2:"#0dbc79",3:"#e5e510",4:"#2472c8",5:"#bc3fbc",6:"#11a8cd",7:"#e5e5e5",8:"#666666",9:"#f14c4c",10:"#23d18b",11:"#f5f543",12:"#3b8eea",13:"#d670d6",14:"#29b8db",15:"var(--color-white)"}});function Z(ue){return q.toHtml(ue)}const X=h(!1),x=h(localStorage.getItem("useTerminal")==="true"),b=h(!1),D=h(!1),j=h(!1);async function ie(){var U,ne;const ue=g.value.trim();if(!ue||C.value)return;if(C.value=!0,x.value){try{const M=await(await fetch("/api/exec-in-terminal",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:ue})})).json();M!=null&&M.success?r.success("已在新终端中执行命令"):r.error((M==null?void 0:M.error)||"执行失败")}catch(ce){r.error((ce==null?void 0:ce.message)||"执行失败")}finally{C.value=!1,g.value=""}return}const $={id:++_,command:ue,success:!1,ts:new Date().toLocaleString(),expanded:!0,stdout:"",stderr:"",running:!0};B.value.unshift($),g.value="";try{console.log("[前端-控制台] 开始发送流式请求:",ue);const ce=await fetch("/api/exec-stream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({command:ue})});if(console.log("[前端-控制台] 收到响应,状态:",ce.status,ce.statusText),!ce.ok)throw new Error(`HTTP ${ce.status}: ${ce.statusText}`);const M=(U=ce.body)==null?void 0:U.getReader(),A=new TextDecoder;if(!M)throw new Error("无法读取响应流");console.log("[前端-控制台] 开始读取流数据");let Q="",le=0;for(;;){const{done:me,value:de}=await M.read();if(le++,console.log(`[前端-控制台] 读取数据块 #${le}, done:`,me,"size:",(de==null?void 0:de.length)||0),me)break;const J=A.decode(de,{stream:!0});console.log("[前端-控制台] 解码数据块:",J.substring(0,200)),Q+=J;const O=Q.split(`
|
|
52
52
|
|
|
53
53
|
`);Q=O.pop()||"",console.log(`[前端-控制台] 分割出 ${O.length} 条消息`);for(const N of O){const se=N.split(`
|
|
54
54
|
`);for(const oe of se)if(oe.startsWith("data: "))try{const ge=JSON.parse(oe.substring(6));console.log("[前端-控制台] 解析到数据:",ge.type,"长度:",((ne=ge.data)==null?void 0:ne.length)||0),ge.type==="process_id"?($.processId=ge.data,console.log("[前端-控制台] 收到进程ID:",$.processId),B.value=[...B.value]):ge.type==="stdout"?($.stdout=($.stdout||"")+Z(ge.data),console.log("[前端-控制台] 当前stdout总长度:",$.stdout.length),C.value&&$.stdout.length<200&&(C.value=!1),B.value=[...B.value]):ge.type==="stderr"?($.stderr=($.stderr||"")+Z(ge.data),console.log("[前端-控制台] 当前stderr总长度:",$.stderr.length),C.value&&$.stderr.length<200&&(C.value=!1),B.value=[...B.value]):ge.type==="exit"?($.success=ge.data.success,$.running=!1,console.log("[前端-控制台] 进程退出,成功:",$.success),B.value=[...B.value]):ge.type==="error"&&($.stderr=($.stderr||"")+`错误: ${ge.data}
|