zen-gitsync 2.11.5 → 2.11.6
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.
|
@@ -22,7 +22,7 @@ ${e("@D50BB:配置文件")}: ${Ve}`:"";return u.error(`${e("@D50BB:加载配置
|
|
|
22
22
|
`)+`
|
|
23
23
|
`;else if(Ce.type==="separator"||Ce.type==="current")continue;await $t(W.trim())}catch(b){u.error(`${e("@E80AC:解决冲突失败: ")}${b.message}`)}}async function Et(){if(C.value)try{const F=await(await fetch(`/api/file-content?file=${encodeURIComponent(C.value)}`)).json();if(!F.success||!F.content){u.error(e("@E80AC:无法读取文件内容"));return}const P=F.content,ke=Pe(P);let W="";for(const Ce of ke)(Ce.type==="common"||Ce.type==="current"||Ce.type==="incoming")&&(W+=Ce.lines.join(`
|
|
24
24
|
`)+`
|
|
25
|
-
`);await $t(W.trim())}catch(b){u.error(`${e("@E80AC:解决冲突失败: ")}${b.message}`)}}async function $t(b){if(C.value)try{const P=await(await fetch("/api/resolve-conflict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:C.value,content:b})})).json();P.success?(u.success(e("@E80AC:冲突已解决,文件已更新")),window.dispatchEvent(new CustomEvent("git-status-refresh")),setTimeout(()=>{c("file-select",C.value)},500)):u.error(P.error||e("@E80AC:保存失败"))}catch(F){u.error(`${e("@E80AC:保存失败: ")}${F.message}`)}}const St=ie(()=>{switch(i.context){case"git-status":return e("@E80AC:在系统默认编辑器中打开文件");case"commit-detail":return e("@E80AC:打开该提交时的文件版本");case"stash-detail":return e("@E80AC:打开该stash中的文件版本");default:return e("@E80AC:打开文件")}});async function q(){if(C.value&&G.value){if(De.value.trim().length===0){u.warning(e("@E80AC:保存失败"));return}await $t(De.value),Ie.value=!1;return}}Ze(()=>i.selectedFile,b=>{b!==void 0&&(p.value=b)}),Ze([()=>i.diffContent,C,B],async([b,F,P])=>{if(ee.value=[],De.value="",Ie.value=!1,be.value="",Q.value="",ye.value="",ue.value="",T.value.clear(),j.value=null,ae.value=new Map,K.value=new Map,ve.value=new Map,P&&F)try{console.log("[ConflictParse] Fetching content for conflicted file:",F);const ke=await fe(F);if(ke){console.log("[ConflictParse] File content loaded, parsing blocks..."),ue.value=ke;const W=Be(ke);console.log("[ConflictParse] Parsed blocks:",W.length),ee.value=W,j.value=W.length>0?W[0].id:null;const Ce=H(ke,()=>"current"),L=H(ke,()=>"incoming"),Ge=H(ke,()=>"both"),bt=H(ke,Ct=>T.value.get(Ct)||"current");be.value=Ce.text,Q.value=L.text,ye.value=Ge.text,De.value=bt.text,ae.value=Ce.anchors,K.value=L.anchors,ve.value=bt.anchors}else console.error("[ConflictParse] Failed to load file content")}catch(ke){console.error("[ConflictParse] Error fetching file content:",ke)}else console.log("[ConflictParse] File is not conflicted or no file selected")},{immediate:!0}),Ze(()=>i.files,b=>{if(b.length>0&&!C.value){const F=b[0];S(F.path)}},{immediate:!0});const te=b=>Math.min(85,Math.max(15,b)),x=b=>{try{const F=String(te(b));localStorage.setItem(ha,F),localStorage.setItem(va,F)}catch{}};Ze(N,b=>{x(b)}),is(()=>{try{const F=localStorage.getItem(ha)??localStorage.getItem(va);if(F!=null){const P=parseFloat(F);isNaN(P)||(N.value=te(P))}}catch{}y.value==="tree"&&E();const b=F=>{const ke=F.detail.mode;y.value!==ke&&(y.value=ke)};return window.addEventListener("file-list-view-mode-change",b),()=>{window.removeEventListener("file-list-view-mode-change",b)}});const ce=g(null),we=()=>{var F,P;const b=((F=ce.value)==null?void 0:F.$el)??ce.value;if(b&&b.clientWidth)return b.clientWidth;try{return((P=b==null?void 0:b.getBoundingClientRect)==null?void 0:P.call(b).width)??0}catch{return 0}},Ne=()=>{var W,Ce,L,Ge;const b=((W=ce.value)==null?void 0:W.$el)??ce.value;if(!b)return;const F=(Ce=b.querySelectorAll)==null?void 0:Ce.call(b,".el-splitter__panel"),P=we();if(!F||F.length<1||P<=0)return;const ke=((Ge=(L=F[0])==null?void 0:L.getBoundingClientRect)==null?void 0:Ge.call(L).width)??0;if(ke>0){const bt=te(ke/P*100);bt!==N.value&&(N.value=bt,x(bt))}},pe=ie({get(){return`${te(N.value)}%`},set(b){let F=NaN;if(typeof b=="number"){const P=b,ke=we();ke>0&&!isNaN(P)&&(F=P/ke*100)}else if(typeof b=="string"){if(b.endsWith("%"))F=parseFloat(b);else if(b.endsWith("px")){const P=parseFloat(b),ke=we();ke>0&&!isNaN(P)&&(F=P/ke*100)}}isNaN(F)||(N.value=te(F),x(N.value))}});return(b,F)=>{const P=oo,ke=Cs;return r(),v("div",{class:"file-diff-viewer",style:ls({height:b.height})},[b.showFileList?(r(),Y(t(io),{key:0,ref_key:"splitterRef",ref:ce,layout:"horizontal",style:{height:"100%"},onResize:Ne,onResizeEnd:Ne},{default:o(()=>[a(P,{size:pe.value,"onUpdate:size":F[11]||(F[11]=W=>pe.value=W),min:"15%",max:"85%"},{default:o(()=>[s("div",cl,[s("div",ul,[s("div",dl,[s("h4",null,l(t(e)("@E80AC:变更文件")),1),b.files.length>0?(r(),v("span",pl,"("+l(b.files.length)+")",1)):I("",!0)]),s("div",fl,[a(lt,{tooltip:t(e)("@E80AC:列表视图"),size:"small",active:y.value==="list",onClick:F[0]||(F[0]=W=>y.value="list")},{default:o(()=>[a(Do,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"]),a(lt,{tooltip:t(e)("@E80AC:树状视图"),size:"small",active:y.value==="tree",onClick:F[1]||(F[1]=W=>y.value="tree")},{default:o(()=>[a(So,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"])])]),s("div",ml,[a(t(Tt),{modelValue:d.value,"onUpdate:modelValue":F[2]||(F[2]=W=>d.value=W),placeholder:t(e)("@E80AC:搜索文件名或路径..."),"prefix-icon":t(no),clearable:"",size:"small"},null,8,["modelValue","placeholder","prefix-icon"])]),s("div",vl,[a(t(en),{height:"100%"},{default:o(()=>[b.files.length===0?(r(),Y(t(Zt),{key:0,description:b.emptyText,"image-size":60},null,8,["description"])):D.value.length===0?(r(),Y(t(Zt),{key:1,description:t(e)("@E80AC:没有找到匹配的文件"),"image-size":60},null,8,["description"])):y.value==="list"?(r(!0),v(He,{key:2},st(D.value,W=>(r(),v("div",{key:W.path,class:Qe(["file-item",{active:W.path===C.value,[`file-type-${W.type}`]:W.type,"is-locked":W.locked}]),onClick:Ce=>S(W.path)},[s("span",{class:Qe(["file-icon",W.iconClass])},null,2),W.type==="conflicted"?(r(),v("span",gl,"⚠")):I("",!0),a(t(gt),{content:W.path,placement:"top",disabled:W.displayName.length<=35,"show-after":200},{default:o(()=>[s("span",yl,l(W.displayName),1)]),_:2},1032,["content","disabled"]),W.dirPath?(r(),v("div",{key:1,class:"file-path-section",title:W.dirPath},[a(t(gt),{content:W.dirPath,placement:"top",disabled:W.dirPath.length<=30,"show-after":200},{default:o(()=>[s("div",_l,l(W.dirPath),1)]),_:2},1032,["content","disabled"])],8,Cl)):I("",!0),b.showActionButtons?(r(),v("div",bl,[a(Ba,{"file-path":W.path,"file-type":W.type||"modified","is-locked":b.isFileLocked(W.path),"is-locking":b.isLocking(W.path),onToggleLock:F[3]||(F[3]=Ce=>c("toggle-lock",Ce)),onStage:F[4]||(F[4]=Ce=>c("stage",Ce)),onUnstage:F[5]||(F[5]=Ce=>c("unstage",Ce)),onRevert:F[6]||(F[6]=Ce=>c("revert",Ce))},null,8,["file-path","file-type","is-locked","is-locking"])])):I("",!0)],10,hl))),128)):(r(),Y(Ls,{key:3,"tree-data":w.value,"selected-file":C.value,"show-action-buttons":b.showActionButtons,"is-file-locked":b.isFileLocked,"is-locking":b.isLocking,onFileSelect:S,onToggleLock:F[7]||(F[7]=W=>c("toggle-lock",W)),onStage:F[8]||(F[8]=W=>c("stage",W)),onUnstage:F[9]||(F[9]=W=>c("unstage",W)),onRevert:F[10]||(F[10]=W=>c("revert",W))},null,8,["tree-data","selected-file","show-action-buttons","is-file-locked","is-locking"]))]),_:1})])])]),_:1},8,["size"]),a(P,{min:"15%",max:"85%"},{default:o(()=>[s("div",wl,[s("div",kl,[s("h4",null,l(t(e)("@E80AC:文件差异")),1),s("div",$l,[fs(b.$slots,"header-extra",{},void 0,!0),C.value?(r(),Y(t(gt),{key:0,content:C.value,placement:"top",effect:"light","show-after":200},{default:o(()=>[s("span",Sl,[s("span",Dl,l(V.value),1),s("span",Fl,l(O.value),1)])]),_:1},8,["content"])):I("",!0),b.diffStats?(r(),v("div",Bl,[s("span",Ol,"+"+l(b.diffStats.added),1),s("span",Nl,"-"+l(b.diffStats.deleted),1)])):I("",!0),b.showOpenButton&&C.value?(r(),v("div",Tl,[a(t(gt),{content:t(e)("@E80AC:复制文件路径"),placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24",onClick:ge},[a(t(at),{class:"btn-icon"},{default:o(()=>[a(t(ya))]),_:1})])]),_:1},8,["content"]),a(t(gt),{content:St.value,placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24",onClick:se},[a(t(at),{class:"btn-icon"},{default:o(()=>[a(t(ta))]),_:1})])]),_:1},8,["content"]),a(t(gt),{content:t(e)("@E80AC:用VSCode打开文件"),placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24",onClick:Se},[a(At,{"icon-class":"vscode",class:"btn-icon"})])]),_:1},8,["content"])])):I("",!0)])]),B.value&&n.value?(r(),v("div",Al,[ee.value.length>0?(r(),v("div",El,[a(t(rt),{type:G.value?"primary":"default",size:"small",onClick:F[12]||(F[12]=W=>G.value=!0)},{default:o(()=>[z(l(t(e)("@E80AC:逐块解决")),1)]),_:1},8,["type"]),a(t(rt),{type:G.value?"default":"primary",size:"small",onClick:F[13]||(F[13]=W=>G.value=!1)},{default:o(()=>[z(l(t(e)("@E80AC:全局解决")),1)]),_:1},8,["type"])])):I("",!0),ee.value.length>0&&G.value?(r(),v("div",Pl,[s("div",Vl,[s("div",Ml,[s("div",Gl,[s("div",Il,l(t(e)("@E80AC:当前更改")),1)]),F[30]||(F[30]=s("div",{class:"pane-subhint placeholder"},null,-1)),s("div",Rl,[a(Os,{"model-value":be.value,language:"auto","file-path":C.value,theme:"auto","read-only":!0,"min-height":"280px","reveal-line":_.value,"highlight-range":ne.value,"dim-highlight-ranges":Ke.value,"highlight-kind":"current",onGutterClick:F[14]||(F[14]=(W,Ce)=>Te(W,"current",Ce)),"right-actions":A.value,"applied-blocks":Ee.value,"sync-group":ga,"sync-scroll-top":oe.value,onScrollChange:F[15]||(F[15]=W=>oe.value=W),"onUpdate:modelValue":()=>{}},null,8,["model-value","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks","sync-scroll-top"])])]),s("div",Ll,[s("div",xl,[s("div",Ul,l(t(e)("@E80AC:合并结果")),1)]),s("div",zl,l(t(e)("@E80AC:可直接编辑合并结果(整文件)")),1),s("div",Hl,[a(Os,{modelValue:De.value,"onUpdate:modelValue":[F[16]||(F[16]=W=>De.value=W),F[18]||(F[18]=()=>Ie.value=!0)],language:"auto","file-path":C.value,theme:"auto","read-only":!1,"min-height":"280px","reveal-line":Ae.value,"highlight-range":Fe.value,"dim-highlight-ranges":R.value,"highlight-kind":"merged","sync-group":ga,"sync-scroll-top":oe.value,onScrollChange:F[17]||(F[17]=W=>oe.value=W)},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges","sync-scroll-top"])])]),s("div",Wl,[s("div",jl,[s("div",ql,l(t(e)("@E80AC:传入的更改")),1)]),F[31]||(F[31]=s("div",{class:"pane-subhint placeholder"},null,-1)),s("div",Jl,[a(Os,{"model-value":Q.value,language:"auto","file-path":C.value,theme:"auto","read-only":!0,"min-height":"280px","reveal-line":de.value,"highlight-range":me.value,"dim-highlight-ranges":Xe.value,"highlight-kind":"incoming","right-actions":M.value,"applied-blocks":Ee.value,"sync-group":ga,"sync-scroll-top":oe.value,onScrollChange:F[19]||(F[19]=W=>oe.value=W),onGutterClick:F[20]||(F[20]=(W,Ce)=>Te(W,"incoming",Ce)),"onUpdate:modelValue":()=>{}},null,8,["model-value","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks","sync-scroll-top"])])])]),s("div",Kl,[a(t(rt),{type:"primary",size:"large",onClick:q},{default:o(()=>[z(l(t(e)("@E80AC:保存所有解决方案")),1)]),_:1})])])):I("",!0),!G.value||ee.value.length===0?(r(),v("div",Yl,[s("div",Ql,[s("div",Zl,[a(t(at),{class:"warning-icon"},{default:o(()=>[a(t(La))]),_:1}),s("span",null,l(t(e)("@E80AC:检测到冲突,请选择解决方式")),1)]),s("div",Xl,[a(t(rt),{type:"primary",size:"small",onClick:Ve},{default:o(()=>[z(l(t(e)("@E80AC:接受当前版本")),1)]),_:1}),a(t(rt),{type:"success",size:"small",onClick:ut},{default:o(()=>[z(l(t(e)("@E80AC:接受传入版本")),1)]),_:1}),a(t(rt),{type:"warning",size:"small",onClick:Et},{default:o(()=>[z(l(t(e)("@E80AC:接受两者")),1)]),_:1})])]),zt((r(),v("div",ei,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:t(e)("@E80AC:该文件没有差异内容"),"image-size":80},null,8,["description"])):X.value&&b.plainText?(r(),v("pre",{key:1,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,ti)):X.value?(r(),v("div",{key:2,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,si)):I("",!0)])),[[ke,b.isLoading]])])):I("",!0)])):B.value&&!n.value?(r(),v("div",ai,[s("div",oi,[a(t(at),{class:"success-icon",style:{color:"var(--color-success)","font-size":"var(--font-size-xl)"}},{default:o(()=>[a(t(lo))]),_:1}),s("span",ni,l(t(e)("@E80AC:冲突已解决,可以添加到暂存区")),1),a(t(rt),{type:"success",size:"default",onClick:F[21]||(F[21]=W=>c("stage",C.value))},{default:o(()=>[z(l(t(e)("@E80AC:添加到暂存区")),1)]),_:1})]),zt((r(),v("div",li,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:t(e)("@E80AC:该文件没有差异内容"),"image-size":80},null,8,["description"])):X.value&&b.plainText?(r(),v("pre",{key:1,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,ii)):X.value?(r(),v("div",{key:2,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,ri)):I("",!0)])),[[ke,b.isLoading]])])):B.value?I("",!0):zt((r(),v("div",ci,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:C.value?t(e)("@E80AC:该文件没有差异内容"):t(e)("@E80AC:请选择文件查看差异"),"image-size":80},null,8,["description"])):b.compareMode?(r(),v("div",ui,[a(Ha,{original:b.compareOriginal,modified:b.compareModified,language:"auto","file-path":C.value,theme:"auto","read-only":!0},null,8,["original","modified","file-path"])])):X.value&&b.plainText?(r(),v("pre",{key:2,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,di)):X.value?(r(),v("div",{key:3,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,pi)):I("",!0)])),[[ke,b.isLoading]])])]),_:3})]),_:3},512)):(r(),v("div",fi,[s("div",mi,[s("h4",null,l(t(e)("@E80AC:文件差异")),1),s("div",vi,[fs(b.$slots,"header-extra",{},void 0,!0),C.value?(r(),Y(t(gt),{key:0,content:C.value,placement:"top",effect:"light","show-after":200},{default:o(()=>[s("span",hi,[s("span",gi,l(V.value),1),s("span",yi,l(O.value),1)])]),_:1},8,["content"])):I("",!0),b.showOpenButton&&C.value?(r(),v("div",Ci,[a(t(gt),{content:t(e)("@E80AC:复制文件路径"),placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24",onClick:ge},[a(t(at),{class:"btn-icon"},{default:o(()=>[a(t(ya))]),_:1})])]),_:1},8,["content"]),a(t(gt),{content:St.value,placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24 btn-primary",onClick:se},[a(t(at),{class:"btn-icon"},{default:o(()=>[a(t(ta))]),_:1})])]),_:1},8,["content"]),a(t(gt),{content:t(e)("@E80AC:用VSCode打开文件"),placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24 btn-success",onClick:Se},[a(At,{"icon-class":"vscode",class:"btn-icon"})])]),_:1},8,["content"])])):I("",!0)])]),B.value?(r(),v("div",_i,[ee.value.length>0?(r(),v("div",bi,[a(t(rt),{type:G.value?"primary":"default",size:"small",onClick:F[22]||(F[22]=W=>G.value=!0)},{default:o(()=>[z(l(t(e)("@E80AC:逐块解决")),1)]),_:1},8,["type"]),a(t(rt),{type:G.value?"default":"primary",size:"small",onClick:F[23]||(F[23]=W=>G.value=!1)},{default:o(()=>[z(l(t(e)("@E80AC:全局解决")),1)]),_:1},8,["type"])])):I("",!0),ee.value.length>0&&G.value?(r(),v("div",wi,[s("div",ki,[s("div",$i,[s("div",Si,[s("div",Di,l(t(e)("@E80AC:当前更改")),1)]),s("div",Fi,[a(Os,{modelValue:be.value,"onUpdate:modelValue":[F[24]||(F[24]=W=>be.value=W),()=>{}],language:"auto","file-path":C.value,theme:"auto","read-only":!0,"min-height":"360px","reveal-line":_.value,"highlight-range":ne.value,"dim-highlight-ranges":Ke.value,"highlight-kind":"current","right-actions":A.value,"applied-blocks":Ee.value,onGutterClick:F[25]||(F[25]=(W,Ce)=>Te(W,"current",Ce))},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks"])])]),s("div",Bi,[s("div",Oi,[s("div",Ni,l(t(e)("@E80AC:合并结果")),1)]),s("div",Ti,l(t(e)("@E80AC:可直接编辑合并结果(整文件)")),1),s("div",Ai,[a(Os,{modelValue:De.value,"onUpdate:modelValue":[F[26]||(F[26]=W=>De.value=W),F[27]||(F[27]=()=>Ie.value=!0)],language:"auto","file-path":C.value,theme:"auto","read-only":!1,"min-height":"360px","reveal-line":Ae.value,"highlight-range":Fe.value,"dim-highlight-ranges":R.value,"highlight-kind":"merged"},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges"])])]),s("div",Ei,[s("div",Pi,[s("div",Vi,l(t(e)("@E80AC:传入的更改")),1)]),s("div",Mi,[a(Os,{modelValue:Q.value,"onUpdate:modelValue":[F[28]||(F[28]=W=>Q.value=W),()=>{}],language:"auto","file-path":C.value,theme:"auto","read-only":!0,"min-height":"360px","reveal-line":de.value,"highlight-range":me.value,"dim-highlight-ranges":Xe.value,"highlight-kind":"incoming","right-actions":M.value,"applied-blocks":Ee.value,onGutterClick:F[29]||(F[29]=(W,Ce)=>Te(W,"incoming",Ce))},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks"])])])]),s("div",Gi,[a(t(rt),{type:"primary",size:"large",onClick:q},{default:o(()=>[z(l(t(e)("@E80AC:保存所有解决方案")),1)]),_:1})])])):I("",!0),!G.value||ee.value.length===0?(r(),v("div",Ii,[s("div",Ri,[s("div",Li,[a(t(at),{class:"warning-icon"},{default:o(()=>[a(t(La))]),_:1}),s("span",null,l(t(e)("@E80AC:检测到冲突,请选择解决方式")),1)]),s("div",xi,[a(t(rt),{type:"primary",size:"small",onClick:Ve},{default:o(()=>[z(l(t(e)("@E80AC:接受当前版本")),1)]),_:1}),a(t(rt),{type:"success",size:"small",onClick:ut},{default:o(()=>[z(l(t(e)("@E80AC:接受传入版本")),1)]),_:1}),a(t(rt),{type:"warning",size:"small",onClick:Et},{default:o(()=>[z(l(t(e)("@E80AC:接受两者")),1)]),_:1})])]),zt((r(),v("div",Ui,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:t(e)("@E80AC:该文件没有差异内容"),"image-size":80},null,8,["description"])):X.value&&b.plainText?(r(),v("pre",{key:1,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,zi)):X.value?(r(),v("div",{key:2,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,Hi)):I("",!0)])),[[ke,b.isLoading]])])):I("",!0)])):B.value?I("",!0):zt((r(),v("div",Wi,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:C.value?t(e)("@E80AC:该文件没有差异内容"):t(e)("@E80AC:请选择文件查看差异"),"image-size":80},null,8,["description"])):b.compareMode?(r(),v("div",ji,[a(Ha,{original:b.compareOriginal,modified:b.compareModified,language:"auto","file-path":C.value,theme:"auto","read-only":!0},null,8,["original","modified","file-path"])])):X.value&&b.plainText?(r(),v("pre",{key:2,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,qi)):X.value?(r(),v("div",{key:3,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,Ji)):I("",!0)])),[[ke,b.isLoading]])]))],4)}}}),Na=Je(Ki,[["__scopeId","data-v-d8ea0dd8"]]),Yi={class:"common-dialog__footer"},Qi=We({__name:"CommonDialog",props:{modelValue:{type:Boolean},title:{},size:{default:"medium"},type:{default:"default"},width:{},height:{},top:{default:"50px"},closeOnClickModal:{type:Boolean,default:!1},closeOnPressEscape:{type:Boolean,default:!0},destroyOnClose:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},customClass:{},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},zIndex:{},heightMode:{default:"max"},heightOffset:{default:"100px"},showFooter:{type:Boolean,default:!1},confirmText:{default:e("@803A9:确定")},cancelText:{default:e("@803A9:取消")},showCancel:{type:Boolean,default:!0},confirmLoading:{type:Boolean,default:!1}},emits:["update:modelValue","confirm","cancel","close","opened","closed"],setup(Z,{emit:k}){const i=Z,c=k,p=ie(()=>{if(i.width)return i.width;switch(i.size){case"small":return"30%";case"medium":return"50%";case"large":return"80%";case"extra-large":return"90%";case"fullscreen":return"100vw";default:return"50%"}}),d=ie(()=>i.size==="fullscreen"?"0":i.top),h=ie(()=>{const n=[];return i.customClass&&n.push(i.customClass),i.type==="flex"&&n.push("common-dialog--flex"),i.type==="full-height"&&n.push("common-dialog--full-height"),i.size==="fullscreen"&&n.push("common-dialog--fullscreen"),n.join(" ")}),y=ie(()=>{if(i.size==="fullscreen")return{height:"100vh",maxHeight:"100vh"};const n=`calc(100% - ${i.heightOffset})`;return i.heightMode==="fixed"?{height:n}:{maxHeight:n}});function m(){c("update:modelValue",!1),c("close")}function $(){c("confirm")}function N(){c("cancel"),m()}function C(){c("opened")}function B(){c("closed")}return(n,f)=>{const D=rt;return r(),Y(t(ka),{"model-value":n.modelValue,title:n.title,width:p.value,top:d.value,style:ls(y.value),"z-index":n.zIndex,fullscreen:n.size==="fullscreen","close-on-click-modal":n.closeOnClickModal,"close-on-press-escape":n.closeOnPressEscape,"destroy-on-close":n.destroyOnClose,draggable:n.draggable,class:Qe(h.value),"append-to-body":n.appendToBody,"lock-scroll":n.lockScroll,onClose:m,onOpened:C,onClosed:B},ro({default:o(()=>[fs(n.$slots,"default",{},void 0,!0)]),_:2},[n.showFooter||n.$slots.footer?{name:"footer",fn:o(()=>[fs(n.$slots,"footer",{},()=>[s("div",Yi,[n.showCancel?(r(),Y(D,{key:0,onClick:N},{default:o(()=>[z(l(n.cancelText),1)]),_:1})):I("",!0),a(D,{type:"primary",loading:n.confirmLoading,onClick:$},{default:o(()=>[z(l(n.confirmText),1)]),_:1},8,["loading"])])],!0)]),key:"0"}:void 0]),1032,["model-value","title","width","top","style","z-index","fullscreen","close-on-click-modal","close-on-press-escape","destroy-on-close","draggable","class","append-to-body","lock-scroll"])}}}),Mt=Je(Qi,[["__scopeId","data-v-938ceccc"]]),Zi={key:0,class:"file-group"},Xi={class:"file-count"},er={class:"file-list"},tr=["onClick"],sr={class:"file-info"},ar={class:"file-name-section"},or=["title"],nr={class:"file-directory"},lr={key:0,class:"file-actions"},ir=We({__name:"FileGroup",props:{files:{},title:{},groupKey:{},collapsedGroups:{},isFileLocked:{type:Function},isLocking:{type:Function},getFileName:{type:Function},getFileDirectory:{type:Function},isSelectionMode:{type:Boolean},isFileSelected:{type:Function}},emits:["toggleCollapse","fileClick","toggleFileLock","stageFile","unstageFile","revertFileChanges","manageLockedFiles","toggleFileSelection"],setup(Z,{emit:k}){const i=Z,c=k,p=ie(()=>i.files.length>0),d=ie(()=>i.collapsedGroups[i.groupKey]);function h(){c("toggleCollapse",i.groupKey)}function y(w,E){i.isSelectionMode?(E==null||E.stopPropagation(),c("toggleFileSelection",w.path)):c("fileClick",w)}function m(w){c("toggleFileSelection",w)}function $(w){c("toggleFileLock",w)}function N(){c("manageLockedFiles")}function C(w){c("stageFile",w)}function B(w){c("unstageFile",w)}function n(w){c("revertFileChanges",w)}function f(w){switch(w){case"added":return"A";case"modified":return"M";case"deleted":return"D";case"conflicted":return"!";case"untracked":return"U";default:return""}}const D=w=>{const E=i.getFileName(w);return Oa(E)};return(w,E)=>{const X=at,V=Hs,O=gt;return p.value?(r(),v("div",Zi,[s("div",{class:"file-group-header",onClick:h},[a(X,{class:Qe(["collapse-icon",{collapsed:d.value}])},{default:o(()=>[a(t(ds))]),_:1},8,["class"]),s("span",null,l(w.title),1),s("span",Xi,"("+l(w.files.length)+")",1)]),zt(s("div",er,[(r(!0),v(He,null,st(w.files,S=>{var se,ge;return r(),v("div",{key:S.path,class:Qe(["file-item file-group-item",{"is-loading":i.isLocking(S.path),locked:i.isFileLocked(S.path),selected:i.isSelectionMode&&((se=i.isFileSelected)==null?void 0:se.call(i,S.path)),[`file-type-${S.type}`]:S.type}]),onClick:Se=>y(S,Se)},[s("div",sr,[i.isSelectionMode?(r(),Y(V,{key:0,"model-value":(ge=i.isFileSelected)==null?void 0:ge.call(i,S.path),onChange:Se=>m(S.path),onClick:E[0]||(E[0]=Jt(()=>{},["stop"])),class:"file-checkbox"},null,8,["model-value","onChange"])):I("",!0),s("span",{class:Qe(["file-type-icon",D(S.path)])},null,2),s("div",ar,[a(O,{content:i.getFileName(S.path),placement:"top",disabled:i.getFileName(S.path).length<=25,"show-after":200},{default:o(()=>[s("div",{class:Qe(["file-name",{"locked-file-name":i.isFileLocked(S.path),"deleted-file-name":S.type==="deleted"}])},[z(l(i.getFileName(S.path))+" ",1),i.isFileLocked(S.path)?(r(),Y(X,{key:0,class:"lock-indicator"},{default:o(()=>[a(t(oa))]),_:1})):I("",!0)],2)]),_:2},1032,["content","disabled"])]),s("div",{class:"file-path-section",title:i.getFileDirectory(S.path)},[a(O,{content:i.getFileDirectory(S.path),placement:"top",disabled:i.getFileDirectory(S.path).length<=30,"show-after":200},{default:o(()=>[s("span",nr,l(i.getFileDirectory(S.path)),1)]),_:2},1032,["content","disabled"])],8,or),s("div",{class:Qe(["file-status-indicator",[S.type,{locked:i.isFileLocked(S.path)}]])},l(f(S.type)),3)]),i.isSelectionMode?I("",!0):(r(),v("div",lr,[a(Ba,{"file-path":S.path,"file-type":S.type,"is-locked":i.isFileLocked(S.path),"is-locking":i.isLocking(S.path),onToggleLock:$,onStage:C,onUnstage:B,onRevert:n,onManageLockedFiles:N},null,8,["file-path","file-type","is-locked","is-locking"])]))],10,tr)}),128))],512),[[Ss,!d.value]])])):I("",!0)}}}),Ys=Je(ir,[["__scopeId","data-v-55c32850"]]),rr={class:"settings-content"},cr={class:"package-info-bar"},ur={class:"info-label"},dr={class:"info-value"},pr={class:"info-path"},fr={class:"tab-content"},mr={class:"current-version"},vr={class:"version-label"},hr={class:"version-value"},gr={class:"version-options"},yr={class:"option-label"},Cr={class:"radio-content"},_r={class:"radio-label"},br={class:"radio-desc"},wr={class:"tab-content script-management"},kr={class:"scripts-list-section"},$r={class:"section-header"},Sr={class:"section-title"},Dr={class:"script-count"},Fr={key:0,class:"empty-scripts"},Br={key:1,class:"script-items"},Or={class:"script-item-content"},Nr={class:"script-name-tag"},Tr={class:"name-text"},Ar={class:"script-command"},Er={class:"script-item-actions"},Pr={class:"script-form-section"},Vr={class:"section-header"},Mr={class:"section-title"},Gr={class:"form-group"},Ir={class:"form-item"},Rr={class:"form-label"},Lr={key:0,class:"error-tip"},xr={key:1,class:"success-tip"},Ur={class:"form-item"},zr={class:"form-label"},Hr=We({__name:"NpmSettingsDialog",props:{visible:{type:Boolean},packageInfo:{}},emits:["close","complete"],setup(Z,{emit:k}){const i=Z,c=k,p=g("version"),d=g("patch"),h=g(!1),y=g(""),m=g(""),$=g(!1),N=g(""),C=g(!1),B=g(!1),n=g(!1),f=g("");function D(ee){if(!ee.trim())return f.value="",!1;const G=/^[a-zA-Z_:][a-zA-Z0-9_:.-]*$/;return ee.includes(" ")?(f.value=e("@NPM01:脚本名称不能包含空格"),!1):G.test(ee)?(f.value="",!0):(f.value=e("@NPM01:脚本名称只能包含字母、数字、连字符、冒号、下划线和点号,且不能以数字开头"),!1)}function w(){y.value.trim()?D(y.value):f.value=""}const E=[{label:e("@NPM01:主版本号 (major)"),value:"major",desc:"1.0.0 → 2.0.0"},{label:e("@NPM01:次版本号 (minor)"),value:"minor",desc:"1.0.0 → 1.1.0"},{label:e("@NPM01:修订号 (patch)"),value:"patch",desc:"1.0.0 → 1.0.1"}];async function X(){try{h.value=!0;const G=await(await fetch("/api/update-npm-version",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,versionType:d.value})})).json();G.success?(u.success(`${e("@NPM01:版本号已更新")}: ${G.oldVersion} → ${G.newVersion}`),c("complete")):u.error(G.error||e("@NPM01:更新版本号失败"))}catch(ee){console.error("更新版本号失败:",ee),u.error(e("@NPM01:更新版本号失败"))}finally{h.value=!1}}async function V(){if(!y.value.trim()){u.warning(e("@NPM01:请输入脚本名称"));return}if(!D(y.value)){u.warning(f.value||e("@NPM01:脚本名称格式不正确"));return}if(!m.value.trim()){u.warning(e("@NPM01:请输入脚本命令"));return}try{$.value=!0;const ee=n.value?"/api/update-npm-script":"/api/add-npm-script",De=await(await fetch(ee,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,scriptName:y.value.trim(),scriptCommand:m.value.trim(),oldScriptName:n.value?N.value:void 0})})).json();De.success?(u.success(n.value?e("@NPM01:脚本已更新"):e("@NPM01:脚本已添加")),S(),c("complete")):u.error(De.error||(n.value?e("@NPM01:更新脚本失败"):e("@NPM01:添加脚本失败")))}catch(ee){console.error("保存脚本失败:",ee),u.error(n.value?e("@NPM01:更新脚本失败"):e("@NPM01:添加脚本失败"))}finally{$.value=!1}}function O(ee,G){n.value=!0,N.value=ee,y.value=ee,m.value=G,f.value=""}function S(){n.value=!1,N.value="",y.value="",m.value="",f.value=""}async function se(ee){try{B.value=!0;const De=await(await fetch("/api/pin-npm-script",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,scriptName:ee})})).json();De.success?(u.success(e("@NPM01:脚本已置顶")),c("complete")):u.error(De.error||e("@NPM01:置顶脚本失败"))}catch(G){console.error("置顶脚本失败:",G),u.error(e("@NPM01:置顶脚本失败"))}finally{B.value=!1}}async function ge(ee){try{await Vt.confirm(e("@NPM01:确定要删除脚本")+` "${ee}" `+e("@NPM01:吗?"),e("@NPM01:删除脚本"),{confirmButtonText:e("@NPM01:确定"),cancelButtonText:e("@NPM01:取消"),type:"warning"}),C.value=!0;const De=await(await fetch("/api/delete-npm-script",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,scriptName:ee})})).json();De.success?(u.success(e("@NPM01:脚本已删除")),c("complete")):u.error(De.error||e("@NPM01:删除脚本失败"))}catch(G){G!=="cancel"&&(console.error("删除脚本失败:",G),u.error(e("@NPM01:删除脚本失败")))}finally{C.value=!1}}function Se(){p.value="version",d.value="patch",S(),c("close")}return(ee,G)=>{const De=co,Ie=Ws,be=rt,Q=sn,ye=Zt,ue=at,T=At,j=Tt,oe=tn;return r(),Y(Mt,{"model-value":ee.visible,title:ee.packageInfo.name+" - "+t(e)("@NPM01:NPM 设置"),size:"medium",onClose:Se},{default:o(()=>[s("div",rr,[s("div",cr,[s("span",ur,l(t(e)("@NPM01:包名称"))+":",1),s("span",dr,l(ee.packageInfo.name),1),s("span",pr,l(ee.packageInfo.relativePath),1)]),a(oe,{modelValue:p.value,"onUpdate:modelValue":G[3]||(G[3]=ae=>p.value=ae),class:"settings-tabs"},{default:o(()=>[a(Q,{label:t(e)("@NPM01:版本号管理"),name:"version"},{default:o(()=>[s("div",fr,[s("div",mr,[s("span",vr,l(t(e)("@NPM01:当前版本"))+":",1),s("span",hr,l(ee.packageInfo.version),1)]),s("div",gr,[s("label",yr,l(t(e)("@NPM01:选择要增加的版本号类型"))+":",1),a(Ie,{modelValue:d.value,"onUpdate:modelValue":G[0]||(G[0]=ae=>d.value=ae),class:"version-radio-group"},{default:o(()=>[(r(),v(He,null,st(E,ae=>a(De,{key:ae.value,value:ae.value,border:"",class:"version-radio"},{default:o(()=>[s("div",Cr,[s("span",_r,l(ae.label),1),s("span",br,l(ae.desc),1)])]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"])]),a(be,{type:"primary",loading:h.value,onClick:X,class:"action-button"},{default:o(()=>[z(l(t(e)("@NPM01:更新版本号")),1)]),_:1},8,["loading"])])]),_:1},8,["label"]),a(Q,{label:t(e)("@NPM01:脚本管理"),name:"script"},{default:o(()=>[s("div",wr,[s("div",kr,[s("div",$r,[s("span",Sr,l(t(e)("@NPM01:当前脚本列表")),1),s("span",Dr,l(Object.keys(ee.packageInfo.scripts||{}).length)+" "+l(t(e)("@NPM01:个脚本")),1)]),Object.keys(ee.packageInfo.scripts||{}).length===0?(r(),v("div",Fr,[a(ye,{description:t(e)("@NPM01:暂无脚本"),"image-size":80},null,8,["description"])])):(r(),v("div",Br,[(r(!0),v(He,null,st(ee.packageInfo.scripts,(ae,K)=>(r(),v("div",{key:K,class:"script-item-card"},[s("div",Or,[s("div",Nr,[a(ue,{class:"script-icon"},{default:o(()=>G[4]||(G[4]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M160 224a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64V288a64 64 0 0 0-64-64H160zm0-64h704a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H160A128 128 0 0 1 32 736V288a128 128 0 0 1 128-128z"}),s("path",{fill:"currentColor",d:"m448 327.872 163.2 160-163.2 160-45.248-46.08L502.4 487.872l-99.648-99.84L448 327.872z"})],-1)])),_:1}),s("span",Tr,l(K),1)]),s("div",Ar,[s("code",null,l(ae),1)])]),s("div",Er,[a(be,{size:"small",text:"",class:"pin-button",onClick:ve=>se(K),loading:B.value,title:"置顶"},{default:o(()=>[a(T,{"icon-class":"pin","class-name":"pin-icon"})]),_:2},1032,["onClick","loading"]),a(be,{size:"small",type:"primary",text:"",onClick:ve=>O(K,ae),disabled:n.value&&N.value===K,title:t(e)("@NPM01:编辑")},{default:o(()=>[a(ue,null,{default:o(()=>G[5]||(G[5]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640V512z"}),s("path",{fill:"currentColor",d:"m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088l-139.456 19.904a32 32 0 0 1-36.224-36.224l19.904-139.456a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.808 0z"})],-1)])),_:1})]),_:2},1032,["onClick","disabled","title"]),a(be,{size:"small",type:"danger",text:"",onClick:ve=>ge(K),loading:C.value,title:t(e)("@NPM01:删除")},{default:o(()=>[a(ue,null,{default:o(()=>G[6]||(G[6]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V256zm448-64v-64H416v64h192zM224 896h576V256H224v640zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32zm192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32z"})],-1)])),_:1})]),_:2},1032,["onClick","loading","title"])])]))),128))]))]),s("div",Pr,[s("div",Vr,[s("span",Mr,l(n.value?t(e)("@NPM01:编辑脚本"):t(e)("@NPM01:添加新脚本")),1),n.value?(r(),Y(be,{key:0,size:"small",text:"",onClick:S},{default:o(()=>[z(l(t(e)("@NPM01:取消编辑")),1)]),_:1})):I("",!0)]),s("div",Gr,[s("div",Ir,[s("label",Rr,l(t(e)("@NPM01:脚本名称"))+":",1),a(j,{modelValue:y.value,"onUpdate:modelValue":G[1]||(G[1]=ae=>y.value=ae),placeholder:t(e)("@NPM01:例如: build, dev, test"),disabled:n.value,clearable:"",onInput:w},null,8,["modelValue","placeholder","disabled"]),f.value?(r(),v("div",Lr,[a(ue,null,{default:o(()=>G[7]||(G[7]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm0 832a384 384 0 1 0 0-768 384 384 0 0 0 0 768zm48-176a48 48 0 1 1-96 0 48 48 0 0 1 96 0zm-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32z"})],-1)])),_:1}),s("span",null,l(f.value),1)])):y.value.trim()&&!n.value?(r(),v("div",xr,[a(ue,null,{default:o(()=>G[8]||(G[8]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336L456.192 600.384z"})],-1)])),_:1}),s("span",null,l(t(e)("@NPM01:脚本名称格式正确")),1)])):I("",!0)]),s("div",Ur,[s("label",zr,l(t(e)("@NPM01:脚本命令"))+":",1),a(j,{modelValue:m.value,"onUpdate:modelValue":G[2]||(G[2]=ae=>m.value=ae),placeholder:t(e)("@NPM01:例如: vite build, vite dev"),clearable:""},null,8,["modelValue","placeholder"])])]),a(be,{type:"primary",loading:$.value,disabled:!y.value.trim()||!m.value.trim(),onClick:V,class:"action-button"},{default:o(()=>[z(l(n.value?t(e)("@NPM01:更新脚本"):t(e)("@NPM01:添加脚本")),1)]),_:1},8,["loading","disabled"])])])]),_:1},8,["label"])]),_:1},8,["modelValue"])])]),_:1},8,["model-value","title"])}}}),Wr=Je(Hr,[["__scopeId","data-v-186db1ed"]]),jr={key:0,class:"npm-scripts-panel"},qr={class:"panel-header"},Jr={class:"header-left"},Kr={class:"panel-title"},Yr={class:"header-right"},Qr={key:0,class:"loading-container"},Zr={class:"loading-text"},Xr={key:1,class:"empty-container"},ec={class:"empty-text"},tc=["onClick"],sc={class:"package-info"},ac={class:"package-name"},oc={class:"package-path"},nc={key:0,class:"scripts-list"},lc=["onClick"],ic={class:"script-left"},rc={class:"script-name"},cc={class:"script-command"},uc=We({__name:"NpmScriptsPanel",props:{visible:{type:Boolean}},emits:["close"],setup(Z,{emit:k}){const i=Z,c=k,p=g([]),d=g(!1),h=g(new Set),y=g(!1),m=g(""),$=g(null);function N(ee){m.value=ee.path,$.value=ee,y.value=!0}function C(){y.value=!1,m.value="",$.value=null}function B(){C(),se()}function n(ee){if(!ee)return null;if(typeof ee=="string")return ee;if(typeof ee=="object"&&ee.url){let G=ee.url;return G=G.replace(/^git\+/,""),G=G.replace(/\.git$/,""),G}return null}function f(ee){const G=n(ee.repository);G&&window.open(G,"_blank")}const D=g(300),w=g(!1),E=g(0),X=g(0);function V(ee){w.value=!0,E.value=ee.clientY,X.value=D.value,document.addEventListener("mousemove",O),document.addEventListener("mouseup",S),ee.preventDefault()}function O(ee){if(!w.value)return;const G=E.value-ee.clientY,De=Math.max(200,Math.min(600,X.value+G));D.value=De}function S(){w.value=!1,document.removeEventListener("mousemove",O),document.removeEventListener("mouseup",S)}async function se(){const ee=Date.now();console.log("[NPM面板] 开始加载npm脚本...");try{d.value=!0;const G=new AbortController,De=3e4,Ie=setTimeout(()=>{G.abort(),console.warn(`[NPM面板] 超时${De}ms,中断请求`)},De);console.log(`[NPM面板] 发起请求到后端(超时${De}ms)...`);const be=Date.now(),Q=await fetch("/api/scan-npm-scripts",{signal:G.signal});clearTimeout(Ie);const ye=Date.now()-be;console.log(`[NPM面板] 后端响应完成,耗时${ye}ms`);const ue=Date.now(),T=await Q.json(),j=Date.now()-ue;if(console.log(`[NPM面板] JSON解析完成,耗时${j}ms`),T.success){if(T.cancelled){console.log(`[NPM面板] 扫描被取消,总耗时${Date.now()-ee}ms`);return}p.value=T.packages,console.log(`[NPM面板] 加载完成,找到${p.value.length}个package.json,共${T.totalScripts}个脚本,总耗时${Date.now()-ee}ms`),p.value.length===0&&console.log("[NPM面板] 未找到包含scripts的package.json")}else console.error(`[NPM面板] 加载失败,耗时${Date.now()-ee}ms`),u.error(e("@NPM01:加载npm脚本失败"))}catch(G){G.name==="AbortError"?(console.warn(`[NPM面板] 请求超时被中断,耗时${Date.now()-ee}ms`),u.warning("NPM脚本扫描超时,请稍后重试")):console.error(`[NPM面板] 加载失败,耗时${Date.now()-ee}ms,错误:`,G)}finally{d.value=!1}}function ge(ee){h.value.has(ee)?h.value.delete(ee):h.value.add(ee)}async function Se(ee,G){try{const Ie=await(await fetch("/api/run-npm-script",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:ee,scriptName:G})})).json();Ie.success?u.success(`${e("@NPM01:已在新终端中执行")}: ${G}`):u.error(Ie.error||e("@NPM01:执行脚本失败"))}catch(De){console.error("执行npm脚本失败:",De),u.error(`${e("@NPM01:执行脚本失败")}: ${De.message}`)}}return Ze(()=>i.visible,ee=>{ee&&se()},{immediate:!0}),(ee,G)=>{const De=at,Ie=gt;return ee.visible?(r(),v("div",jr,[s("div",{class:"resize-handle",onMousedown:V},null,32),s("div",qr,[s("div",Jr,[a(At,{"icon-class":"npm","class-name":"npm-icon"}),s("span",Kr,l(t(e)("@NPM01:NPM 脚本")),1)]),s("div",Yr,[a(lt,{size:"small",disabled:d.value,onClick:se},{default:o(()=>[a(De,{class:Qe({"is-rotating":d.value})},{default:o(()=>G[1]||(G[1]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})],-1)])),_:1},8,["class"])]),_:1},8,["disabled"]),a(lt,{size:"small",onClick:G[0]||(G[0]=be=>c("close"))},{default:o(()=>[a(De,null,{default:o(()=>G[2]||(G[2]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})],-1)])),_:1})]),_:1})])]),d.value?(r(),v("div",Qr,[a(De,{class:"is-loading loading-icon"},{default:o(()=>G[3]||(G[3]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z"})],-1)])),_:1}),s("p",Zr,l(t(e)("@NPM01:正在扫描项目中的 npm 脚本...")),1)])):p.value.length===0?(r(),v("div",Xr,[G[4]||(G[4]=s("svg",{class:"empty-icon",viewBox:"0 0 1024 1024",width:"64",height:"64"},[s("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32z"})],-1)),s("p",ec,l(t(e)("@NPM01:当前项目中未找到包含 scripts 的 package.json")),1)])):(r(),v("div",{key:2,class:"packages-container",style:ls({maxHeight:D.value+"px"})},[(r(!0),v(He,null,st(p.value,be=>(r(),v("div",{key:be.path,class:"package-item"},[s("div",{class:"package-header",onClick:Q=>ge(be.path)},[a(De,{class:Qe(["expand-icon",{expanded:h.value.has(be.path)}])},{default:o(()=>G[5]||(G[5]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})],-1)])),_:2},1032,["class"]),a(De,{class:"folder-icon"},{default:o(()=>[a(t(ta))]),_:1}),s("div",sc,[s("span",ac,l(be.name),1),s("span",oc,l(be.relativePath),1)]),n(be.repository)?(r(),Y(Ie,{key:0,content:n(be.repository),placement:"bottom","show-after":300},{default:o(()=>[a(De,{class:"repo-icon",onClick:Jt(Q=>f(be),["stop"])},{default:o(()=>G[6]||(G[6]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M458.64 119.072a84.176 84.176 0 0 1 106.72 0l366.912 300.4a32 32 0 0 1-40.544 49.52L524.816 168.592a20.176 20.176 0 0 0-25.632 0L132.272 468.992a32 32 0 1 1-40.544-49.52L458.64 119.072zM304.32 415.184c0-27.2 22-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552H353.76a49.504 49.504 0 0 1-49.472-49.552V415.2z m64 14.432v67.68h66.976v-67.68H368.32z m-162.976 36.96a32 32 0 0 1 32 32v307.2c0 21.28 17.12 38.224 37.856 38.224h471.52a38.032 38.032 0 0 0 37.84-38.224v-307.2a32 32 0 1 1 64 0v307.2c0 56.304-45.44 102.224-101.856 102.224H275.2c-56.4 0-101.856-45.92-101.856-102.224v-307.2a32 32 0 0 1 32-32z m98.976 168.048c0-27.216 22-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552H353.76a49.504 49.504 0 0 1-49.472-49.552v-96.544z m64 14.432v67.68h66.976v-67.68H368.32z m154.288-14.432c0-27.216 21.984-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552h-96.048a49.504 49.504 0 0 1-49.472-49.552v-96.544z m64 14.432v67.68h66.976v-67.68h-66.976z"})],-1)])),_:2},1032,["onClick"])]),_:2},1032,["content"])):I("",!0),a(De,{class:"settings-icon",onClick:Jt(Q=>N(be),["stop"])},{default:o(()=>G[7]||(G[7]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296L315.2 220.096c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384zm0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256z"})],-1)])),_:2},1032,["onClick"])],8,tc),h.value.has(be.path)?(r(),v("div",nc,[(r(!0),v(He,null,st(be.scripts,(Q,ye)=>(r(),v("div",{key:ye,class:"script-item",onClick:ue=>Se(be.path,ye)},[s("div",ic,[a(De,{class:"play-icon"},{default:o(()=>G[8]||(G[8]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}),s("path",{fill:"currentColor",d:"M719.4 499.1l-296.1-215A15.9 15.9 0 0 0 398 297v430c0 13.1 14.8 20.5 25.3 12.9l296.1-215a15.9 15.9 0 0 0 0-25.8zm-257.6 134V390.9L628.5 512 461.8 633.1z"})],-1)])),_:1}),s("span",rc,l(ye),1)]),s("span",cc,l(Q),1)],8,lc))),128))])):I("",!0)]))),128))],4)),$.value?(r(),Y(Wr,{key:3,visible:y.value,"package-info":$.value,onClose:C,onComplete:B},null,8,["visible","package-info"])):I("",!0)])):I("",!0)}}}),dc=Je(uc,[["__scopeId","data-v-3ce1fd0d"]]),pc={key:0,class:"stash-changes-button"},fc={class:"stash-dialog-content"},mc={class:"stash-info-card"},vc={class:"info-icon"},hc={class:"info-content"},gc={class:"stash-options"},yc={class:"options-title"},Cc={class:"option-item"},_c={class:"option-label"},bc={class:"option-desc"},wc={class:"option-item"},kc={class:"option-label"},$c={key:0,class:"stash-preview"},Sc={class:"preview-title"},Dc={class:"file-count-info"},Fc={class:"dialog-footer"},Bc={class:"footer-actions"},Oc=["disabled"],Nc=We({__name:"StashChangesButton",props:{variant:{default:"icon"}},setup(Z){const k=Z,i=Bt(),c=Ut(),p=g(!1),d=g(""),h=g(!0),y=g(!1),m=ie(()=>i.fileList.some(n=>n.type==="modified"||n.type==="added"||n.type==="deleted"||n.type==="untracked")),$=ie(()=>{if(!m.value)return!1;const n=i.fileList.filter(f=>f.type==="modified"||f.type==="added"||f.type==="deleted"||f.type==="untracked");return n.length===0?!1:n.every(f=>{const D=f.path.replace(/\\/g,"/");return c.lockedFiles.some(w=>{const E=w.replace(/\\/g,"/");return D===E})})});function N(){d.value="",$.value||(y.value=!1),p.value=!0}async function C(){try{await i.saveStash(d.value,h.value,y.value),p.value=!1}catch(n){console.error("储藏失败:",n)}}function B(n){if(!(n.isComposing||n.keyCode===229)&&n.key==="Enter"&&!n.shiftKey){if(n.preventDefault(),i.isSavingStash||i.hasConflictedFiles)return;C()}}return(n,f)=>{const D=at,w=rt,E=Tt,X=bs,V=Hs,O=ws,S=_s;return m.value?(r(),v("div",pc,[k.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):t(e)("@76872:将工作区更改储藏起来"),size:"large",disabled:t(i).hasConflictedFiles||t(i).isSavingStash,"hover-color":"var(--color-warning)",onClick:N},{default:o(()=>[t(i).isSavingStash?(r(),Y(D,{key:0,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(At,{key:1,"icon-class":"git-stash"}))]),_:1},8,["tooltip","disabled"])):(r(),Y(w,{key:1,type:"warning",class:"action-button",onClick:N,loading:t(i).isSavingStash,disabled:t(i).hasConflictedFiles},{default:o(()=>[z(l(t(e)("@76872:储藏更改")),1)]),_:1},8,["loading","disabled"])),a(Mt,{modelValue:p.value,"onUpdate:modelValue":f[4]||(f[4]=se=>p.value=se),title:t(e)("@76872:储藏更改 (Git Stash)"),size:"medium","close-on-click-modal":!1,"custom-class":"stash-dialog"},{footer:o(()=>[s("div",Fc,[s("div",Bc,[s("button",{type:"button",class:"dialog-cancel-btn",onClick:f[3]||(f[3]=se=>p.value=!1)},l(t(e)("@76872:取消")),1),s("button",{type:"button",class:"dialog-confirm-btn",onClick:C,disabled:t(i).isSavingStash||t(i).hasConflictedFiles},[t(i).isSavingStash?(r(),Y(D,{key:1,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(D,{key:0},{default:o(()=>[a(t(Es))]),_:1})),s("span",null,l(t(e)("@76872:储藏")),1)],8,Oc)])])]),default:o(()=>[s("div",fc,[s("div",mc,[s("div",vc,[a(At,{"icon-class":"git-stash"})]),s("div",hc,[s("h4",null,l(t(e)("@76872:储藏工作区更改")),1),s("p",null,l(t(e)("@76872:将当前工作区的更改临时保存,稍后可以重新应用到任何分支")),1)])]),a(S,{"label-position":"top",class:"stash-form"},{default:o(()=>[a(X,{label:t(e)("@76872:储藏说明")},{default:o(()=>[a(E,{modelValue:d.value,"onUpdate:modelValue":f[0]||(f[0]=se=>d.value=se),placeholder:t(e)("@76872:为这次储藏添加描述信息(可选)"),clearable:"",onKeydown:B,rows:2,type:"textarea",resize:"none",maxlength:"200","show-word-limit":""},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s("div",gc,[s("h5",yc,[a(D,null,{default:o(()=>[a(t(na))]),_:1}),z(" "+l(t(e)("@76872:储藏选项")),1)]),s("div",Cc,[a(V,{modelValue:h.value,"onUpdate:modelValue":f[1]||(f[1]=se=>h.value=se),size:"large"},{default:o(()=>[s("span",_c,l(t(e)("@76872:包含未跟踪文件")),1)]),_:1},8,["modelValue"]),s("p",bc,l(t(e)("@76872:同时储藏新建但未添加到Git的文件 (--include-untracked)")),1)]),s("div",wc,[a(V,{modelValue:y.value,"onUpdate:modelValue":f[2]||(f[2]=se=>y.value=se),disabled:$.value,size:"large"},{default:o(()=>[s("span",kc,l(t(e)("@76872:排除锁定文件")),1)]),_:1},8,["modelValue","disabled"]),s("p",{class:Qe(["option-desc",{disabled:$.value}])},l(t(e)("@76872:不储藏被锁定的文件,保持其当前状态")),3)])]),t(i).status.staged.length>0||t(i).status.unstaged.length>0?(r(),v("div",$c,[s("h5",Sc,[a(D,null,{default:o(()=>[a(t($a))]),_:1}),z(" "+l(t(e)("@76872:将要储藏的文件")),1)]),s("div",Dc,[t(i).status.staged.length>0?(r(),Y(O,{key:0,type:"success"},{default:o(()=>[z(l(t(e)("@76872:已暂存: "))+l(t(i).status.staged.length)+" "+l(t(e)("@76872:个文件")),1)]),_:1})):I("",!0),t(i).status.unstaged.length>0?(r(),Y(O,{key:1,type:"warning"},{default:o(()=>[z(l(t(e)("@76872:未暂存: "))+l(t(i).status.unstaged.length)+" "+l(t(e)("@76872:个文件")),1)]),_:1})):I("",!0)])])):I("",!0)]),_:1})])]),_:1},8,["modelValue","title"])])):I("",!0)}}}),Fo=Je(Nc,[["__scopeId","data-v-6e8b3c6e"]]),Tc={class:"stash-list-button"},Ac={class:"stash-list-content"},Ec={key:0,class:"stash-header"},Pc={class:"stash-stats"},Vc={class:"stat-item"},Mc={class:"stat-number"},Gc={class:"stat-label"},Ic={key:0,class:"stash-actions-header"},Rc={class:"stash-list-container"},Lc={key:0,class:"empty-state"},xc={class:"empty-text"},Uc={class:"empty-hint"},zc={key:1,class:"stash-cards"},Hc={class:"stash-card-content"},Wc={class:"stash-info"},jc={class:"stash-main-info"},qc={class:"stash-id-badge"},Jc={class:"stash-id-text"},Kc={class:"stash-description"},Yc={class:"description-text"},Qc={class:"stash-card-actions"},Zc={class:"stash-content"},Xc={key:0,class:"stash-info-row"},eu={class:"stash-id"},tu={class:"stash-id-value"},su={class:"stash-description"},au={class:"info-label"},ou={class:"stash-description-value"},nu={class:"stash-main-content"},lu=We({__name:"StashListButton",props:{variant:{default:"icon"}},setup(Z){const k=Z,i=Bt(),c=g(!1),p=g(!1),d=g(null),h=g([]),y=g(""),m=g(!1),$=g(""),N=ie(()=>h.value.map(O=>({path:O,name:O.split("/").pop()||O})));function C(){i.getStashList(),c.value=!0}async function B(O,S=!1){try{await i.applyStash(O,S),S&&await i.getStashList()}catch(se){console.error("应用储藏失败:",se)}}async function n(O){Vt.confirm(e("@76872:确定要删除此储藏吗?此操作不可恢复。"),e("@76872:删除储藏"),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),type:"warning"}).then(async()=>{await i.dropStash(O),await i.getStashList()}).catch(()=>{})}async function f(){Vt.confirm(e("@76872:确定要清空所有储藏吗?此操作不可恢复。"),e("@76872:清空所有储藏"),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),type:"warning"}).then(async()=>{await i.clearAllStashes(),await i.getStashList()}).catch(()=>{})}async function D(O){if(O){d.value=O,p.value=!0,m.value=!0,h.value=[],y.value="",$.value="";try{if(!O.id||O.id.length<7){y.value=e("@76872:无效的stash ID"),m.value=!1;return}const se=await(await fetch(`/api/stash-files?stashId=${encodeURIComponent(O.id)}`)).json();se.success&&Array.isArray(se.files)?(h.value=se.files,h.value.length>0?await w(O.id,h.value[0]):y.value=e("@76872:该stash没有变更文件")):y.value=`${e("@76872:获取文件列表失败: ")}${se.error||e("@76872:未知错误")}`}catch(S){y.value=`${e("@76872:获取stash详情失败: ")}${S.message}`}finally{m.value=!1}}}async function w(O,S){m.value=!0,$.value=S;try{const ge=await(await fetch(`/api/stash-file-diff?stashId=${encodeURIComponent(O)}&file=${encodeURIComponent(S)}`)).json();ge.success?y.value=ge.diff||e("@76872:没有变更内容"):y.value=`${e("@76872:获取差异失败: ")}${ge.error||e("@76872:未知错误")}`}catch(se){y.value=`${e("@76872:获取差异失败: ")}${se.message}`}finally{m.value=!1}}function E(O){d.value&&w(d.value.id,O)}async function X(O,S){try{const ge=await(await fetch("/api/open-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:O,context:S})})).json();ge.success?u.success(ge.message):u.error(ge.error||e("@76872:打开文件失败"))}catch(se){u.error(`${e("@76872:打开文件失败: ")}${se.message}`)}}async function V(O,S){try{const ge=await(await fetch("/api/open-with-vscode",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:O,context:S})})).json();ge.success?u.success(ge.message):u.error(ge.error||e("@76872:用VSCode打开文件失败"))}catch(se){u.error(`${e("@76872:用VSCode打开文件失败: ")}${se.message}`)}}return(O,S)=>{const se=at,ge=rt,Se=Zt,ee=ws,G=Cs;return r(),v("div",Tc,[k.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(e)("@76872:查看和管理所有储藏记录"),size:"large","hover-color":"var(--color-info)",onClick:C},{default:o(()=>[a(se,null,{default:o(()=>[a(t(Ks))]),_:1})]),_:1},8,["tooltip"])):(r(),Y(ge,{key:1,type:"info",class:"action-button",onClick:C},{default:o(()=>[z(l(t(e)("@76872:储藏列表")),1)]),_:1})),a(Mt,{modelValue:c.value,"onUpdate:modelValue":S[0]||(S[0]=De=>c.value=De),title:t(e)("@76872:储藏列表 (Git Stash)"),size:"large","show-footer":!1,"custom-class":"stash-list-dialog"},{default:o(()=>[s("div",Ac,[t(i).isLoadingStashes?I("",!0):(r(),v("div",Ec,[s("div",Pc,[s("div",Vc,[a(se,{class:"stat-icon"},{default:o(()=>[a(t(Ks))]),_:1}),s("span",Mc,l(t(i).stashes.length),1),s("span",Gc,l(t(e)("@76872:个储藏")),1)])]),t(i).stashes.length>0?(r(),v("div",Ic,[a(ge,{type:"danger",size:"small",icon:t(ns),onClick:f,loading:t(i).isDroppingStash,class:"clear-all-btn"},{default:o(()=>[z(l(t(e)("@76872:清空所有储藏")),1)]),_:1},8,["icon","loading"])])):I("",!0)])),zt((r(),v("div",Rc,[t(i).stashes.length===0&&!t(i).isLoadingStashes?(r(),v("div",Lc,[a(Se,{description:t(e)("@76872:暂无储藏记录"),"image-size":120},{image:o(()=>[a(se,{class:"empty-icon"},{default:o(()=>[a(t(Ks))]),_:1})]),description:o(()=>[s("p",xc,l(t(e)("@76872:还没有任何储藏记录")),1),s("p",Uc,l(t(e)("@76872:使用 git stash 可以临时保存工作进度")),1)]),_:1},8,["description"])])):(r(),v("div",zc,[(r(!0),v(He,null,st(t(i).stashes,(De,Ie)=>(r(),v("div",{key:De.id,class:Qe(["stash-card",{"stash-card-latest":Ie===0}])},[s("div",Hc,[s("div",Wc,[s("div",jc,[s("div",qc,[a(se,{class:"badge-icon"},{default:o(()=>[a(t(Ks))]),_:1}),s("span",Jc,l(De.id),1),Ie===0?(r(),Y(ee,{key:0,size:"small",type:"success",class:"latest-tag"},{default:o(()=>[z(l(t(e)("@76872:最新")),1)]),_:1})):I("",!0)]),s("div",Kc,[s("span",Yc,l(De.description),1)])])]),s("div",Qc,[a(ge,{size:"small",type:"info",icon:t(Ts),onClick:be=>D(De),loading:m.value,class:"action-btn view-btn"},{default:o(()=>[z(l(t(e)("@76872:查看")),1)]),_:2},1032,["icon","onClick","loading"]),a(ge,{size:"small",type:"success",icon:t(Sa),onClick:be=>B(De.id,!1),loading:t(i).isApplyingStash,class:"action-btn apply-btn"},{default:o(()=>[z(l(t(e)("@76872:应用")),1)]),_:2},1032,["icon","onClick","loading"]),a(ge,{size:"small",type:"primary",icon:t(Es),onClick:be=>B(De.id,!0),loading:t(i).isApplyingStash,class:"action-btn apply-pop-btn"},{default:o(()=>[z(l(t(e)("@76872:应用并删除")),1)]),_:2},1032,["icon","onClick","loading"]),a(ge,{size:"small",type:"danger",icon:t(ns),onClick:be=>n(De.id),loading:t(i).isDroppingStash,class:"action-btn delete-btn"},{default:o(()=>[z(l(t(e)("@76872:删除")),1)]),_:2},1032,["icon","onClick","loading"])])])],2))),128))]))])),[[G,t(i).isLoadingStashes]])])]),_:1},8,["modelValue","title"]),a(Mt,{modelValue:p.value,"onUpdate:modelValue":S[1]||(S[1]=De=>p.value=De),title:t(e)("@76872:储藏详情"),"custom-class":"stash-detail-dialog",size:"extra-large",type:"flex",heightMode:"fixed","close-on-click-modal":!1},{default:o(()=>[s("div",Zc,[d.value?(r(),v("div",Xc,[s("div",eu,[S[2]||(S[2]=s("span",{class:"info-label"},"Stash ID:",-1)),s("code",tu,l(d.value.id),1)]),s("div",su,[s("span",au,l(t(e)("@76872:描述:")),1),s("span",ou,l(d.value.description),1)])])):I("",!0),s("div",nu,[a(Na,{files:N.value,diffContent:y.value,selectedFile:$.value,context:"stash-detail",emptyText:t(e)("@76872:该stash没有变更文件"),onFileSelect:E,onOpenFile:X,onOpenWithVscode:V},null,8,["files","diffContent","selectedFile","emptyText"])])])]),_:1},8,["modelValue","title"])])}}}),Bo=Je(lu,[["__scopeId","data-v-1a804435"]]),iu={key:0,class:"stash-selected-files-button"},ru={class:"stash-dialog-content"},cu={class:"stash-info-card"},uu={class:"info-icon"},du={class:"info-content"},pu={class:"stash-options"},fu={class:"options-title"},mu={class:"option-item"},vu={class:"option-label"},hu={class:"option-desc"},gu={class:"option-item"},yu={class:"option-label"},Cu={class:"option-desc"},_u={key:0,class:"locked-count"},bu={class:"stash-preview"},wu={class:"preview-title"},ku={class:"file-count-info"},$u={class:"file-list-preview"},Su={key:0,class:"more-files"},Du={class:"dialog-footer"},Fu={class:"footer-actions"},Bu=["disabled"],Ou=We({__name:"StashSelectedFilesButton",props:{selectedFiles:{},variant:{default:"icon"}},emits:["success"],setup(Z,{emit:k}){const i=Z,c=k,p=Bt(),d=Ut(),h=g(!1),y=g(""),m=g(!0),$=g(!1),N=ie(()=>i.selectedFiles.length>0),C=ie(()=>i.selectedFiles.filter(D=>{const w=D.replace(/\\/g,"/");return d.lockedFiles.some(E=>{const X=E.replace(/\\/g,"/");return w===X})}));function B(){if(!N.value){u.warning(e("@76872:请先选择要储藏的文件"));return}y.value="",$.value=!1,h.value=!0}async function n(){try{let D=i.selectedFiles;if($.value&&C.value.length>0&&(D=i.selectedFiles.filter(w=>{const E=w.replace(/\\/g,"/");return!d.lockedFiles.some(X=>{const V=X.replace(/\\/g,"/");return E===V})}),D.length===0)){u.warning(e("@76872:所有选中的文件都是锁定文件,无法储藏"));return}await p.savePartialStash(D,y.value,m.value),h.value=!1,c("success")}catch(D){console.error("储藏选中文件失败:",D)}}function f(D){if(!(D.isComposing||D.keyCode===229)&&D.key==="Enter"&&!D.shiftKey){if(D.preventDefault(),p.isSavingStash)return;n()}}return(D,w)=>{const E=at,X=rt,V=Tt,O=bs,S=Hs,se=ws,ge=_s;return N.value?(r(),v("div",iu,[i.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(e)("@76872:储藏选中的文件"),size:"large",disabled:t(p).isSavingStash||!N.value,"hover-color":"var(--color-warning)",onClick:B},{default:o(()=>[t(p).isSavingStash?(r(),Y(E,{key:0,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(At,{key:1,"icon-class":"git-stash"}))]),_:1},8,["tooltip","disabled"])):(r(),Y(X,{key:1,type:"warning",class:"action-button",onClick:B,loading:t(p).isSavingStash,disabled:!N.value},{default:o(()=>[z(l(t(e)("@76872:储藏选中文件"))+" ("+l(i.selectedFiles.length)+") ",1)]),_:1},8,["loading","disabled"])),a(Mt,{modelValue:h.value,"onUpdate:modelValue":w[4]||(w[4]=Se=>h.value=Se),title:t(e)("@76872:储藏选中的文件"),size:"medium","close-on-click-modal":!1,"custom-class":"stash-dialog"},{footer:o(()=>[s("div",Du,[s("div",Fu,[s("button",{type:"button",class:"dialog-cancel-btn",onClick:w[3]||(w[3]=Se=>h.value=!1)},l(t(e)("@76872:取消")),1),s("button",{type:"button",class:"dialog-confirm-btn",onClick:n,disabled:t(p).isSavingStash},[t(p).isSavingStash?(r(),Y(E,{key:1,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(E,{key:0},{default:o(()=>[a(t(Es))]),_:1})),s("span",null,l(t(e)("@76872:储藏")),1)],8,Bu)])])]),default:o(()=>[s("div",ru,[s("div",cu,[s("div",uu,[a(At,{"icon-class":"git-stash"})]),s("div",du,[s("h4",null,l(t(e)("@76872:储藏选中的文件")),1),s("p",null,l(t(e)("@76872:将选中的文件更改临时保存,稍后可以重新应用")),1)])]),a(ge,{"label-position":"top",class:"stash-form"},{default:o(()=>[a(O,{label:t(e)("@76872:储藏说明")},{default:o(()=>[a(V,{modelValue:y.value,"onUpdate:modelValue":w[0]||(w[0]=Se=>y.value=Se),placeholder:t(e)("@76872:为这次储藏添加描述信息(可选)"),clearable:"",onKeydown:f,rows:2,type:"textarea",resize:"none",maxlength:"200","show-word-limit":""},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s("div",pu,[s("h5",fu,[a(E,null,{default:o(()=>[a(t(na))]),_:1}),z(" "+l(t(e)("@76872:储藏选项")),1)]),s("div",mu,[a(S,{modelValue:m.value,"onUpdate:modelValue":w[1]||(w[1]=Se=>m.value=Se),size:"large"},{default:o(()=>[s("span",vu,l(t(e)("@76872:包含未跟踪文件")),1)]),_:1},8,["modelValue"]),s("p",hu,l(t(e)("@76872:对于未跟踪的文件,同时储藏 (--include-untracked)")),1)]),s("div",gu,[a(S,{modelValue:$.value,"onUpdate:modelValue":w[2]||(w[2]=Se=>$.value=Se),size:"large"},{default:o(()=>[s("span",yu,l(t(e)("@76872:排除锁定文件")),1)]),_:1},8,["modelValue"]),s("p",Cu,[z(l(t(e)("@76872:不储藏被锁定的文件,保持其当前状态"))+" ",1),C.value.length>0?(r(),v("span",_u," ("+l(t(e)("@76872:选中"))+" "+l(C.value.length)+" "+l(t(e)("@76872:个锁定文件"))+") ",1)):I("",!0)])])]),s("div",bu,[s("h5",wu,[a(At,{"icon-class":"git-stash",style:{"font-size":"16px"}}),z(" "+l(t(e)("@76872:将要储藏的文件")),1)]),s("div",ku,[a(se,{type:"warning"},{default:o(()=>[z(l(t(e)("@76872:已选中: "))+l(i.selectedFiles.length)+" "+l(t(e)("@76872:个文件")),1)]),_:1})]),s("div",$u,[(r(!0),v(He,null,st(i.selectedFiles.slice(0,10),Se=>(r(),v("div",{key:Se,class:"file-preview-item"},l(Se),1))),128)),i.selectedFiles.length>10?(r(),v("div",Su,l(t(e)("@76872:...还有"))+" "+l(i.selectedFiles.length-10)+" "+l(t(e)("@76872:个文件")),1)):I("",!0)])])]),_:1})])]),_:1},8,["modelValue","title"])])):I("",!0)}}}),Nu=Je(Ou,[["__scopeId","data-v-c70847d2"]]),Tu={class:"git-command-preview"},Au={class:"preview-container"},Eu={class:"preview-title"},Pu={class:"preview-content code-command"},Vu=We({__name:"GitCommandPreview",props:{command:{},title:{default:e("@34292:Git命令预览:")},copyButtonText:{default:e("@34292:复制命令")},placeholder:{default:"<命令内容>"}},setup(Z){const k=Z,i=ie(()=>k.command||k.placeholder);async function c(){if(!k.command){u.warning(e("@34292:没有可复制的命令内容"));return}try{await navigator.clipboard.writeText(k.command),u.success(e("@34292:命令已复制到剪贴板"))}catch(p){u.error(`${e("@34292:复制失败: ")}${p.message}`)}}return(p,d)=>{const h=at;return r(),v("div",Tu,[s("div",Au,[s("div",Eu,l(p.title),1),s("div",Pu,l(i.value),1),a(lt,{tooltip:p.copyButtonText,size:"small","custom-class":"copy-command-btn",onClick:c},{default:o(()=>[a(h,null,{default:o(()=>[a(t(ys))]),_:1})]),_:1},8,["tooltip"])])])}}}),Oo=Je(Vu,[["__scopeId","data-v-d9d000e3"]]),Mu={class:"merge-branch-button"},Gu={class:"merge-dialog-content"},Iu={class:"merge-info-card"},Ru={class:"info-icon"},Lu={class:"info-content"},xu={class:"merge-options"},Uu={class:"options-title"},zu={class:"options-horizontal"},Hu={key:0,class:"default-message-hint"},Wu={class:"hint-content"},ju=We({__name:"MergeBranchButton",props:{variant:{default:"icon"}},setup(Z){const k=Z,i=Bt(),c=g(!1),p=g(""),d=g({noCommit:!1,noFf:!1,squash:!1,message:""}),h=g("all"),y=ie(()=>{const n=i.allBranches.filter(f=>f!==i.currentBranch);return h.value==="local"?n.filter(f=>!f.includes("origin/")):h.value==="remote"?n.filter(f=>f.includes("origin/")):n});function m(){p.value="",d.value={noFf:!1,squash:!1,noCommit:!1,message:""},h.value="all",c.value=!0,i.allBranches.length===0&&i.getAllBranches();const n=i.allBranches.filter(f=>f!==i.currentBranch);n.includes("origin/master")?p.value="origin/master":n.includes("origin/main")&&(p.value="origin/main")}async function $(){if(N.value)try{await navigator.clipboard.writeText(N.value),u.success(e("@76872:默认合并消息已复制"))}catch{u.error(e("@76872:复制失败"))}}Ze(h,()=>{p.value&&!y.value.includes(p.value)&&(p.value="")});const N=ie(()=>{if(!p.value)return"";const n=i.currentBranch||"current";return`Merge branch '${p.value}' into ${n}`}),C=ie(()=>{if(!p.value)return"";let n=`git merge ${p.value}`;if(d.value.noFf&&(n+=" --no-ff"),d.value.squash&&(n+=" --squash"),d.value.noCommit&&(n+=" --no-commit"),!d.value.noCommit){const f=d.value.message||N.value;f&&(n+=` -m "${f}"`)}return n});async function B(){if(!p.value){u({message:e("@76872:请选择要合并的分支"),type:"warning"});return}try{await i.mergeBranch(p.value,d.value)?(c.value=!1,await Promise.all([i.fetchStatus(),i.fetchLog(!1),i.getBranchStatus(!0)])):(i.pendingMergeMessage=d.value.message||N.value,c.value=!1,await Promise.all([i.fetchStatus(),i.fetchLog(!1),i.getBranchStatus(!0)]))}catch(n){console.error("合并分支操作发生错误:",n),i.pendingMergeMessage=d.value.message||N.value,c.value=!1,await Promise.all([i.fetchStatus(),i.fetchLog(!1),i.getBranchStatus(!0)])}}return(n,f)=>{const D=at,w=rt,E=Da,X=Ws,V=bs,O=ss,S=ts,se=Hs,ge=gt,Se=Tt,ee=ea("Info-Filled"),G=ea("Document-Copy"),De=_s;return r(),v("div",Mu,[k.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):t(e)("@76872:合并其他分支到当前分支"),size:"large",disabled:t(i).hasConflictedFiles||t(i).isGitMerging,"hover-color":"var(--color-primary)",onClick:m},{default:o(()=>[t(i).isGitMerging?(r(),Y(D,{key:0,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(At,{key:1,"icon-class":"git-merge"}))]),_:1},8,["tooltip","disabled"])):(r(),Y(w,{key:1,type:"primary",class:"action-button",onClick:m,loading:t(i).isGitMerging,disabled:t(i).hasConflictedFiles},{default:o(()=>[z(l(t(e)("@76872:合并分支")),1)]),_:1},8,["loading","disabled"])),a(Mt,{modelValue:c.value,"onUpdate:modelValue":f[6]||(f[6]=Ie=>c.value=Ie),title:t(e)("@76872:合并分支"),size:"medium","close-on-click-modal":!1,"show-footer":"","confirm-text":t(e)("@76872:合并"),"cancel-text":t(e)("@76872:取消"),"confirm-loading":t(i).isGitMerging,"custom-class":"merge-dialog",onConfirm:B},{default:o(()=>[s("div",Gu,[s("div",Iu,[s("div",Ru,[a(At,{"icon-class":"git-merge"})]),s("div",Lu,[s("h4",null,l(t(e)("@76872:合并分支到当前分支")),1),s("p",null,[z(l(t(e)("@76872:将选择的分支合并到"))+" ",1),s("code",null,l(t(i).currentBranch),1)])])]),a(De,{"label-position":"top",class:"merge-form"},{default:o(()=>[a(V,{label:t(e)("@76872:分支类型")},{default:o(()=>[a(X,{modelValue:h.value,"onUpdate:modelValue":f[0]||(f[0]=Ie=>h.value=Ie),size:"default"},{default:o(()=>[a(E,{value:"all"},{default:o(()=>[z(l(t(e)("@76872:所有分支")),1)]),_:1}),a(E,{value:"local"},{default:o(()=>[z(l(t(e)("@76872:本地分支")),1)]),_:1}),a(E,{value:"remote"},{default:o(()=>[z(l(t(e)("@76872:远程分支")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),a(V,{label:t(e)("@76872:选择分支")},{default:o(()=>[a(S,{modelValue:p.value,"onUpdate:modelValue":f[1]||(f[1]=Ie=>p.value=Ie),placeholder:t(e)("@76872:选择要合并的分支"),filterable:"",clearable:"",style:{width:"100%"}},{default:o(()=>[(r(!0),v(He,null,st(y.value,Ie=>(r(),Y(O,{key:Ie,label:Ie,value:Ie},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),a(Oo,{command:C.value,title:t(e)("@76872:合并命令预览:"),placeholder:t(e)("@76872:请先选择要合并的分支")},null,8,["command","title","placeholder"]),s("div",xu,[s("h5",Uu,[a(D,null,{default:o(()=>[a(t(na))]),_:1}),z(" "+l(t(e)("@76872:合并选项")),1)]),s("div",zu,[a(ge,{content:t(e)("@76872:始终创建合并提交,即使可以快进 (--no-ff)"),placement:"top","show-after":200},{default:o(()=>[a(se,{modelValue:d.value.noFf,"onUpdate:modelValue":f[2]||(f[2]=Ie=>d.value.noFf=Ie),size:"large"},{default:o(()=>[z(l(t(e)("@76872:禁用快进合并")),1)]),_:1},8,["modelValue"])]),_:1},8,["content"]),a(ge,{content:t(e)("@76872:将所有提交压缩成一个提交 (--squash)"),placement:"top","show-after":200},{default:o(()=>[a(se,{modelValue:d.value.squash,"onUpdate:modelValue":f[3]||(f[3]=Ie=>d.value.squash=Ie),size:"large"},{default:o(()=>[z(l(t(e)("@76872:压缩合并")),1)]),_:1},8,["modelValue"])]),_:1},8,["content"]),a(ge,{content:t(e)("@76872:执行合并但不自动提交,可以手动检查后提交 (--no-commit)"),placement:"top","show-after":200},{default:o(()=>[a(se,{modelValue:d.value.noCommit,"onUpdate:modelValue":f[4]||(f[4]=Ie=>d.value.noCommit=Ie),size:"large"},{default:o(()=>[z(l(t(e)("@76872:不自动提交")),1)]),_:1},8,["modelValue"])]),_:1},8,["content"])])]),d.value.noCommit?I("",!0):(r(),Y(V,{key:0,label:t(e)("@76872:合并消息(可选)")},{default:o(()=>[a(Se,{modelValue:d.value.message,"onUpdate:modelValue":f[5]||(f[5]=Ie=>d.value.message=Ie),type:"textarea",rows:2,placeholder:t(e)("@76872:自定义合并提交消息"),clearable:"",resize:"none",maxlength:"200","show-word-limit":""},null,8,["modelValue","placeholder"]),p.value&&!d.value.message?(r(),v("div",Hu,[s("div",Wu,[a(D,null,{default:o(()=>[a(ee)]),_:1}),s("span",null,l(t(e)("@76872:默认消息:"))+l(N.value),1)]),a(w,{type:"primary",link:"",size:"small",onClick:$,class:"copy-btn"},{default:o(()=>[a(D,null,{default:o(()=>[a(G)]),_:1})]),_:1})])):I("",!0)]),_:1},8,["label"]))]),_:1})])]),_:1},8,["modelValue","title","confirm-text","cancel-text","confirm-loading"])])}}}),No=Je(ju,[["__scopeId","data-v-dba5f7f1"]]),qu={key:0,class:"unstage-all-button"},Ju={key:0},Ku=We({__name:"UnstageAllButton",props:{from:{default:"form"}},emits:["click"],setup(Z,{emit:k}){const i=Z,c=k,p=Bt(),d=ie(()=>p.fileList.filter(N=>["staged","renamed","added"].includes(N.type)).length),h=ie(()=>d.value>0),y=ie(()=>!h.value),m=ie(()=>h.value?"取消暂存所有文件(git reset HEAD)":"没有已暂存的更改");async function $(){c("click");try{await p.resetHead()&&p.fetchStatus()}catch(N){console.error("取消暂存失败:",N)}}return(N,C)=>{const B=at,n=rt,f=gt;return h.value?(r(),v("div",qu,[i.from==="status"?(r(),Y(lt,{key:0,tooltip:m.value,size:"large",disabled:y.value,loading:t(p).isResetting,"hover-color":"var(--color-warning)",onClick:$},{default:o(()=>[a(B,null,{default:o(()=>[a(t(an))]),_:1})]),_:1},8,["tooltip","disabled","loading"])):(r(),Y(f,{key:1,content:m.value,placement:"top","show-after":200},{default:o(()=>[a(n,{type:"warning",onClick:$,loading:t(p).isResetting,disabled:y.value,class:Qe(`from-${i.from}`)},{default:o(()=>[C[0]||(C[0]=z(" 取消暂存所有 ")),d.value>0?(r(),v("span",Ju,"("+l(d.value)+")",1)):I("",!0)]),_:1},8,["loading","disabled","class"])]),_:1},8,["content"]))])):I("",!0)}}}),To=Je(Ku,[["__scopeId","data-v-4acda07f"]]),Yu=We({__name:"ResetToRemoteButton",props:{variant:{default:"icon"}},setup(Z){const k=Z,i=Bt(),c=ie(()=>i.fileList.length>0||i.branchAhead>0);async function p(){try{await Vt.confirm(e("@76872:确定要重置当前分支吗?",{branch:i.currentBranch||"unknown"}),e("@76872:重置到远程")+(i.currentBranch?` origin/${i.currentBranch}`:""),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),confirmButtonClass:"el-button--danger",dangerouslyUseHTMLString:!0,type:"warning"}),await i.resetToRemote(i.currentBranch)&&(i.fetchStatus(),i.fetchLog())}catch(d){d!=="cancel"&&console.error("重置到远程失败:",d)}}return(d,h)=>{const y=rt,m=gt;return c.value?(r(),v(He,{key:0},[k.variant==="icon"?(r(),Y(lt,{key:0,"icon-class":"git-reset",tooltip:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):t(e)("@76872:重置到远程"),size:"large","hover-color":"#f56c6c",disabled:!t(i).hasUpstream||t(i).hasConflictedFiles||t(i).isResetting,onClick:p},null,8,["tooltip","disabled"])):(r(),Y(m,{key:1,content:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):"git reset --hard origin/branch",placement:"top"},{default:o(()=>[a(y,{type:"danger",onClick:p,loading:t(i).isResetting,disabled:!t(i).hasUpstream||t(i).hasConflictedFiles,class:"action-button danger-button"},{default:o(()=>[a(At,{"icon-class":"git-reset","class-name":"git-reset-icon"}),z(" "+l(t(e)("@76872:重置到远程")),1)]),_:1},8,["loading","disabled"])]),_:1},8,["content"]))],64)):I("",!0)}}}),Ao=Je(Yu,[["__scopeId","data-v-11a0a53f"]]),Qu=We({__name:"DiscardAllChangesButton",props:{variant:{default:"icon"},size:{default:"large"}},setup(Z){const k=Z,i=Bt(),c=ie(()=>i.fileList.length>0);async function p(){try{await Vt.confirm(e("@76872:确定要清除本地所有更改吗?"),e("@76872:清除所有本地更改"),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),confirmButtonClass:"el-button--danger",dangerouslyUseHTMLString:!0,type:"warning"}),await i.discardAllChanges()&&(i.fetchStatus(),i.fetchLog())}catch(d){d!=="cancel"&&console.error("清除本地更改失败:",d)}}return(d,h)=>{const y=at,m=rt,$=gt;return c.value?(r(),v(He,{key:0},[k.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(e)("@76872:清除所有本地更改"),size:k.size,"hover-color":"#f56c6c",disabled:t(i).isResetting,onClick:p},{default:o(()=>[a(y,null,{default:o(()=>[a(t(xa))]),_:1})]),_:1},8,["tooltip","size","disabled"])):(r(),Y($,{key:1,content:"git reset --hard && git clean -fd",placement:"top"},{default:o(()=>[a(m,{type:"danger",icon:t(xa),onClick:p,loading:t(i).isResetting,class:"action-button danger-button"},{default:o(()=>[z(l(t(e)("@76872:清除所有本地更改")),1)]),_:1},8,["icon","loading"])]),_:1}))],64)):I("",!0)}}}),Zu=Je(Qu,[["__scopeId","data-v-fefb30e1"]]),Xu={class:"card git-status-card flex flex-col"},ed={class:"status-header"},td={class:"title-row"},sd={class:"header-actions"},ad={class:"flex items-center"},od=["element-loading-text"],nd={key:0,class:"status-box not-git-repo"},ld={class:"empty-status"},id={class:"empty-title"},rd={class:"empty-desc"},cd={key:1,class:"status-box-wrap"},ud={key:0,class:"upstream-tip"},dd={class:"tip-header"},pd={class:"tip-title"},fd={class:"tip-body"},md={class:"tip-text"},vd={class:"tip-actions"},hd={key:1,class:"branch-status-info"},gd={class:"branch-sync-status"},yd={class:"sync-status-content"},Cd={class:"status-badges"},_d={class:"badge-content"},bd={class:"badge-content"},wd={key:2,class:"file-list-wrapper"},kd={class:"file-list-header"},$d={class:"header-left"},Sd={key:2,class:"file-count"},Dd={class:"view-mode-toggle"},Fd={key:0,class:"selection-mode-banner"},Bd={class:"banner-content"},Od={class:"banner-text"},Nd={class:"banner-actions"},Td={class:"file-list-container"},Ad={key:0,class:"tree-group"},Ed={class:"file-count"},Pd={key:1,class:"tree-group"},Vd={class:"file-count"},Md={key:2,class:"tree-group"},Gd={class:"file-count"},Id={key:3,class:"tree-group"},Rd={class:"file-count"},Ld={key:3,class:"empty-status"},xd={class:"empty-icon"},Ud={class:"empty-text"},zd={class:"empty-subtext"},Hd={class:"lock-feature-description"},Wd={class:"description-header"},jd={class:"description-title"},qd={class:"description-content"},Jd={key:0,class:"empty-locked-files"},Kd={class:"empty-icon"},Yd={class:"empty-tip"},Qd={key:1,class:"locked-files-list"},Zd={class:"locked-files-header"},Xd={class:"locked-file-items"},ep={class:"file-info"},tp={class:"file-path-container"},sp={class:"file-name"},ap={class:"file-directory"},op={class:"file-actions"},np={class:"pull-error-content"},lp={key:0},ip={key:1},rp={class:"pull-error-detail"},cp={class:"pull-error-label"},up={class:"pull-error-pre"},dp={key:0,class:"pull-error-detail"},pp={class:"pull-error-label"},fp={class:"pull-error-pre"},ja="zen-gitsync-file-list-view-mode",mp=We({__name:"GitStatus",props:{initialDirectory:{type:String,default:""}},setup(Z,{expose:k}){const i=Z,c=Bt(),p=Ut(),d=ie(()=>c.isLoadingStatus),h=g(""),y=g(""),m=g(null),$=g(!1),N=g(!1),C=g(-1),B=g("compare"),n=g(""),f=g(""),D=g({});function w(x){return!!D.value[x]}const E=g(!0);function X(){E.value=!E.value}const V=g(new Set),O=g(!1);function S(){O.value=!O.value,O.value||V.value.clear()}function se(x){V.value.has(x)?V.value.delete(x):V.value.add(x)}function ge(){V.value.size===c.fileList.length?V.value.clear():V.value=new Set(c.fileList.map(x=>x.path))}function Se(x){return V.value.has(x)}const ee=ie(()=>Array.from(V.value)),G=ie(()=>c.fileList.map(x=>({path:x.path,name:x.path.split("/").pop()||x.path,type:x.type,locked:Pe(x.path)})));async function De(x){B.value==="compare"?await ne(x):await ve(x)}async function Ie(x,ce){try{const Ne=await(await fetch("/api/open-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:x,context:ce})})).json();Ne.success?u.success(Ne.message):u.error(Ne.error||e("@13D1C:打开文件失败"))}catch(we){u.error(`${e("@13D1C:打开文件失败: ")}${we.message}`)}}async function be(x,ce){try{const Ne=await(await fetch("/api/open-with-vscode",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:x,context:ce})})).json();Ne.success?u.success(Ne.message):u.error(Ne.error||e("@13D1C:用VSCode打开文件失败"))}catch(we){u.error(`${e("@13D1C:用VSCode打开文件失败: ")}${we.message}`)}}const Q=g(!1),ye=g({staged:!1,unstaged:!1,untracked:!1,conflicted:!1}),ue=localStorage.getItem(ja),T=g(ue||"list"),j=g(i.initialDirectory||"");async function oe(){try{if(!j.value){const ce=await(await fetch("/api/current_directory")).json();j.value=ce.directory||e("@13D1C:未知目录")}if(!c.isGitRepo)return;await c.fetchStatus(),await c.getBranchStatus(),u({message:e("@13D1C:Git 状态已刷新"),type:"success"})}catch(x){u({message:"刷新失败: "+x.message,type:"error"})}}async function ae(x){try{await Vt.confirm(`确认解锁该文件?
|
|
25
|
+
`);await $t(W.trim())}catch(b){u.error(`${e("@E80AC:解决冲突失败: ")}${b.message}`)}}async function $t(b){if(C.value)try{const P=await(await fetch("/api/resolve-conflict",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:C.value,content:b})})).json();P.success?(u.success(e("@E80AC:冲突已解决,文件已更新")),window.dispatchEvent(new CustomEvent("git-status-refresh")),setTimeout(()=>{c("file-select",C.value)},500)):u.error(P.error||e("@E80AC:保存失败"))}catch(F){u.error(`${e("@E80AC:保存失败: ")}${F.message}`)}}const St=ie(()=>{switch(i.context){case"git-status":return e("@E80AC:在系统默认编辑器中打开文件");case"commit-detail":return e("@E80AC:打开该提交时的文件版本");case"stash-detail":return e("@E80AC:打开该stash中的文件版本");default:return e("@E80AC:打开文件")}});async function q(){if(C.value&&G.value){if(De.value.trim().length===0){u.warning(e("@E80AC:保存失败"));return}await $t(De.value),Ie.value=!1;return}}Ze(()=>i.selectedFile,b=>{b!==void 0&&(p.value=b)}),Ze([()=>i.diffContent,C,B],async([b,F,P])=>{if(ee.value=[],De.value="",Ie.value=!1,be.value="",Q.value="",ye.value="",ue.value="",T.value.clear(),j.value=null,ae.value=new Map,K.value=new Map,ve.value=new Map,P&&F)try{console.log("[ConflictParse] Fetching content for conflicted file:",F);const ke=await fe(F);if(ke){console.log("[ConflictParse] File content loaded, parsing blocks..."),ue.value=ke;const W=Be(ke);console.log("[ConflictParse] Parsed blocks:",W.length),ee.value=W,j.value=W.length>0?W[0].id:null;const Ce=H(ke,()=>"current"),L=H(ke,()=>"incoming"),Ge=H(ke,()=>"both"),bt=H(ke,Ct=>T.value.get(Ct)||"current");be.value=Ce.text,Q.value=L.text,ye.value=Ge.text,De.value=bt.text,ae.value=Ce.anchors,K.value=L.anchors,ve.value=bt.anchors}else console.error("[ConflictParse] Failed to load file content")}catch(ke){console.error("[ConflictParse] Error fetching file content:",ke)}else console.log("[ConflictParse] File is not conflicted or no file selected")},{immediate:!0}),Ze(()=>i.files,b=>{if(b.length>0&&!C.value){const F=b[0];S(F.path)}},{immediate:!0});const te=b=>Math.min(85,Math.max(15,b)),x=b=>{try{const F=String(te(b));localStorage.setItem(ha,F),localStorage.setItem(va,F)}catch{}};Ze(N,b=>{x(b)}),is(()=>{try{const F=localStorage.getItem(ha)??localStorage.getItem(va);if(F!=null){const P=parseFloat(F);isNaN(P)||(N.value=te(P))}}catch{}y.value==="tree"&&E();const b=F=>{const ke=F.detail.mode;y.value!==ke&&(y.value=ke)};return window.addEventListener("file-list-view-mode-change",b),()=>{window.removeEventListener("file-list-view-mode-change",b)}});const ce=g(null),we=()=>{var F,P;const b=((F=ce.value)==null?void 0:F.$el)??ce.value;if(b&&b.clientWidth)return b.clientWidth;try{return((P=b==null?void 0:b.getBoundingClientRect)==null?void 0:P.call(b).width)??0}catch{return 0}},Ne=()=>{var W,Ce,L,Ge;const b=((W=ce.value)==null?void 0:W.$el)??ce.value;if(!b)return;const F=(Ce=b.querySelectorAll)==null?void 0:Ce.call(b,".el-splitter__panel"),P=we();if(!F||F.length<1||P<=0)return;const ke=((Ge=(L=F[0])==null?void 0:L.getBoundingClientRect)==null?void 0:Ge.call(L).width)??0;if(ke>0){const bt=te(ke/P*100);bt!==N.value&&(N.value=bt,x(bt))}},pe=ie({get(){return`${te(N.value)}%`},set(b){let F=NaN;if(typeof b=="number"){const P=b,ke=we();ke>0&&!isNaN(P)&&(F=P/ke*100)}else if(typeof b=="string"){if(b.endsWith("%"))F=parseFloat(b);else if(b.endsWith("px")){const P=parseFloat(b),ke=we();ke>0&&!isNaN(P)&&(F=P/ke*100)}}isNaN(F)||(N.value=te(F),x(N.value))}});return(b,F)=>{const P=oo,ke=Cs;return r(),v("div",{class:"file-diff-viewer",style:ls({height:b.height})},[b.showFileList?(r(),Y(t(io),{key:0,ref_key:"splitterRef",ref:ce,layout:"horizontal",style:{height:"100%"},onResize:Ne,onResizeEnd:Ne},{default:o(()=>[a(P,{size:pe.value,"onUpdate:size":F[11]||(F[11]=W=>pe.value=W),min:"15%",max:"85%"},{default:o(()=>[s("div",cl,[s("div",ul,[s("div",dl,[s("h4",null,l(t(e)("@E80AC:变更文件")),1),b.files.length>0?(r(),v("span",pl,"("+l(b.files.length)+")",1)):I("",!0)]),s("div",fl,[a(lt,{tooltip:t(e)("@E80AC:列表视图"),size:"small",active:y.value==="list",onClick:F[0]||(F[0]=W=>y.value="list")},{default:o(()=>[a(Do,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"]),a(lt,{tooltip:t(e)("@E80AC:树状视图"),size:"small",active:y.value==="tree",onClick:F[1]||(F[1]=W=>y.value="tree")},{default:o(()=>[a(So,{style:{width:"1em",height:"1em"}})]),_:1},8,["tooltip","active"])])]),s("div",ml,[a(t(Tt),{modelValue:d.value,"onUpdate:modelValue":F[2]||(F[2]=W=>d.value=W),placeholder:t(e)("@E80AC:搜索文件名或路径..."),"prefix-icon":t(no),clearable:"",size:"small"},null,8,["modelValue","placeholder","prefix-icon"])]),s("div",vl,[a(t(en),{height:"100%"},{default:o(()=>[b.files.length===0?(r(),Y(t(Zt),{key:0,description:b.emptyText,"image-size":60},null,8,["description"])):D.value.length===0?(r(),Y(t(Zt),{key:1,description:t(e)("@E80AC:没有找到匹配的文件"),"image-size":60},null,8,["description"])):y.value==="list"?(r(!0),v(He,{key:2},st(D.value,W=>(r(),v("div",{key:W.path,class:Qe(["file-item",{active:W.path===C.value,[`file-type-${W.type}`]:W.type,"is-locked":W.locked}]),onClick:Ce=>S(W.path)},[s("span",{class:Qe(["file-icon",W.iconClass])},null,2),W.type==="conflicted"?(r(),v("span",gl,"⚠")):I("",!0),a(t(gt),{content:W.path,placement:"top",disabled:W.displayName.length<=35,"show-after":200},{default:o(()=>[s("span",yl,l(W.displayName),1)]),_:2},1032,["content","disabled"]),W.dirPath?(r(),v("div",{key:1,class:"file-path-section",title:W.dirPath},[a(t(gt),{content:W.dirPath,placement:"top",disabled:W.dirPath.length<=30,"show-after":200},{default:o(()=>[s("div",_l,l(W.dirPath),1)]),_:2},1032,["content","disabled"])],8,Cl)):I("",!0),b.showActionButtons?(r(),v("div",bl,[a(Ba,{"file-path":W.path,"file-type":W.type||"modified","is-locked":b.isFileLocked(W.path),"is-locking":b.isLocking(W.path),onToggleLock:F[3]||(F[3]=Ce=>c("toggle-lock",Ce)),onStage:F[4]||(F[4]=Ce=>c("stage",Ce)),onUnstage:F[5]||(F[5]=Ce=>c("unstage",Ce)),onRevert:F[6]||(F[6]=Ce=>c("revert",Ce))},null,8,["file-path","file-type","is-locked","is-locking"])])):I("",!0)],10,hl))),128)):(r(),Y(Ls,{key:3,"tree-data":w.value,"selected-file":C.value,"show-action-buttons":b.showActionButtons,"is-file-locked":b.isFileLocked,"is-locking":b.isLocking,onFileSelect:S,onToggleLock:F[7]||(F[7]=W=>c("toggle-lock",W)),onStage:F[8]||(F[8]=W=>c("stage",W)),onUnstage:F[9]||(F[9]=W=>c("unstage",W)),onRevert:F[10]||(F[10]=W=>c("revert",W))},null,8,["tree-data","selected-file","show-action-buttons","is-file-locked","is-locking"]))]),_:1})])])]),_:1},8,["size"]),a(P,{min:"15%",max:"85%"},{default:o(()=>[s("div",wl,[s("div",kl,[s("h4",null,l(t(e)("@E80AC:文件差异")),1),s("div",$l,[fs(b.$slots,"header-extra",{},void 0,!0),C.value?(r(),Y(t(gt),{key:0,content:C.value,placement:"top",effect:"light","show-after":200},{default:o(()=>[s("span",Sl,[s("span",Dl,l(V.value),1),s("span",Fl,l(O.value),1)])]),_:1},8,["content"])):I("",!0),b.diffStats?(r(),v("div",Bl,[s("span",Ol,"+"+l(b.diffStats.added),1),s("span",Nl,"-"+l(b.diffStats.deleted),1)])):I("",!0),b.showOpenButton&&C.value?(r(),v("div",Tl,[a(t(gt),{content:t(e)("@E80AC:复制文件路径"),placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24",onClick:ge},[a(t(at),{class:"btn-icon"},{default:o(()=>[a(t(ya))]),_:1})])]),_:1},8,["content"]),a(t(gt),{content:St.value,placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24",onClick:se},[a(t(at),{class:"btn-icon"},{default:o(()=>[a(t(ta))]),_:1})])]),_:1},8,["content"]),a(t(gt),{content:t(e)("@E80AC:用VSCode打开文件"),placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24",onClick:Se},[a(At,{"icon-class":"vscode",class:"btn-icon"})])]),_:1},8,["content"])])):I("",!0)])]),B.value&&n.value?(r(),v("div",Al,[ee.value.length>0?(r(),v("div",El,[a(t(rt),{type:G.value?"primary":"default",size:"small",onClick:F[12]||(F[12]=W=>G.value=!0)},{default:o(()=>[z(l(t(e)("@E80AC:逐块解决")),1)]),_:1},8,["type"]),a(t(rt),{type:G.value?"default":"primary",size:"small",onClick:F[13]||(F[13]=W=>G.value=!1)},{default:o(()=>[z(l(t(e)("@E80AC:全局解决")),1)]),_:1},8,["type"])])):I("",!0),ee.value.length>0&&G.value?(r(),v("div",Pl,[s("div",Vl,[s("div",Ml,[s("div",Gl,[s("div",Il,l(t(e)("@E80AC:当前更改")),1)]),F[30]||(F[30]=s("div",{class:"pane-subhint placeholder"},null,-1)),s("div",Rl,[a(Os,{"model-value":be.value,language:"auto","file-path":C.value,theme:"auto","read-only":!0,"min-height":"280px","reveal-line":_.value,"highlight-range":ne.value,"dim-highlight-ranges":Ke.value,"highlight-kind":"current",onGutterClick:F[14]||(F[14]=(W,Ce)=>Te(W,"current",Ce)),"right-actions":A.value,"applied-blocks":Ee.value,"sync-group":ga,"sync-scroll-top":oe.value,onScrollChange:F[15]||(F[15]=W=>oe.value=W),"onUpdate:modelValue":()=>{}},null,8,["model-value","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks","sync-scroll-top"])])]),s("div",Ll,[s("div",xl,[s("div",Ul,l(t(e)("@E80AC:合并结果")),1)]),s("div",zl,l(t(e)("@E80AC:可直接编辑合并结果(整文件)")),1),s("div",Hl,[a(Os,{modelValue:De.value,"onUpdate:modelValue":[F[16]||(F[16]=W=>De.value=W),F[18]||(F[18]=()=>Ie.value=!0)],language:"auto","file-path":C.value,theme:"auto","read-only":!1,"min-height":"280px","reveal-line":Ae.value,"highlight-range":Fe.value,"dim-highlight-ranges":R.value,"highlight-kind":"merged","sync-group":ga,"sync-scroll-top":oe.value,onScrollChange:F[17]||(F[17]=W=>oe.value=W)},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges","sync-scroll-top"])])]),s("div",Wl,[s("div",jl,[s("div",ql,l(t(e)("@E80AC:传入的更改")),1)]),F[31]||(F[31]=s("div",{class:"pane-subhint placeholder"},null,-1)),s("div",Jl,[a(Os,{"model-value":Q.value,language:"auto","file-path":C.value,theme:"auto","read-only":!0,"min-height":"280px","reveal-line":de.value,"highlight-range":me.value,"dim-highlight-ranges":Xe.value,"highlight-kind":"incoming","right-actions":M.value,"applied-blocks":Ee.value,"sync-group":ga,"sync-scroll-top":oe.value,onScrollChange:F[19]||(F[19]=W=>oe.value=W),onGutterClick:F[20]||(F[20]=(W,Ce)=>Te(W,"incoming",Ce)),"onUpdate:modelValue":()=>{}},null,8,["model-value","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks","sync-scroll-top"])])])]),s("div",Kl,[a(t(rt),{type:"primary",size:"large",onClick:q},{default:o(()=>[z(l(t(e)("@E80AC:保存所有解决方案")),1)]),_:1})])])):I("",!0),!G.value||ee.value.length===0?(r(),v("div",Yl,[s("div",Ql,[s("div",Zl,[a(t(at),{class:"warning-icon"},{default:o(()=>[a(t(La))]),_:1}),s("span",null,l(t(e)("@E80AC:检测到冲突,请选择解决方式")),1)]),s("div",Xl,[a(t(rt),{type:"primary",size:"small",onClick:Ve},{default:o(()=>[z(l(t(e)("@E80AC:接受当前版本")),1)]),_:1}),a(t(rt),{type:"success",size:"small",onClick:ut},{default:o(()=>[z(l(t(e)("@E80AC:接受传入版本")),1)]),_:1}),a(t(rt),{type:"warning",size:"small",onClick:Et},{default:o(()=>[z(l(t(e)("@E80AC:接受两者")),1)]),_:1})])]),zt((r(),v("div",ei,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:t(e)("@E80AC:该文件没有差异内容"),"image-size":80},null,8,["description"])):X.value&&b.plainText?(r(),v("pre",{key:1,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,ti)):X.value?(r(),v("div",{key:2,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,si)):I("",!0)])),[[ke,b.isLoading]])])):I("",!0)])):B.value&&!n.value?(r(),v("div",ai,[s("div",oi,[a(t(at),{class:"success-icon",style:{color:"var(--color-success)","font-size":"var(--font-size-xl)"}},{default:o(()=>[a(t(lo))]),_:1}),s("span",ni,l(t(e)("@E80AC:冲突已解决,可以添加到暂存区")),1),a(t(rt),{type:"success",size:"default",onClick:F[21]||(F[21]=W=>c("stage",C.value))},{default:o(()=>[z(l(t(e)("@E80AC:添加到暂存区")),1)]),_:1})]),zt((r(),v("div",li,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:t(e)("@E80AC:该文件没有差异内容"),"image-size":80},null,8,["description"])):X.value&&b.plainText?(r(),v("pre",{key:1,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,ii)):X.value?(r(),v("div",{key:2,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,ri)):I("",!0)])),[[ke,b.isLoading]])])):B.value?I("",!0):zt((r(),v("div",ci,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:C.value?t(e)("@E80AC:该文件没有差异内容"):t(e)("@E80AC:请选择文件查看差异"),"image-size":80},null,8,["description"])):b.compareMode?(r(),v("div",ui,[a(Ha,{original:b.compareOriginal,modified:b.compareModified,language:"auto","file-path":C.value,theme:"auto","read-only":!0},null,8,["original","modified","file-path"])])):X.value&&b.plainText?(r(),v("pre",{key:2,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,di)):X.value?(r(),v("div",{key:3,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,pi)):I("",!0)])),[[ke,b.isLoading]])])]),_:3})]),_:3},512)):(r(),v("div",fi,[s("div",mi,[s("h4",null,l(t(e)("@E80AC:文件差异")),1),s("div",vi,[fs(b.$slots,"header-extra",{},void 0,!0),C.value?(r(),Y(t(gt),{key:0,content:C.value,placement:"top",effect:"light","show-after":200},{default:o(()=>[s("span",hi,[s("span",gi,l(V.value),1),s("span",yi,l(O.value),1)])]),_:1},8,["content"])):I("",!0),b.showOpenButton&&C.value?(r(),v("div",Ci,[a(t(gt),{content:t(e)("@E80AC:复制文件路径"),placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24",onClick:ge},[a(t(at),{class:"btn-icon"},{default:o(()=>[a(t(ya))]),_:1})])]),_:1},8,["content"]),a(t(gt),{content:St.value,placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24 btn-primary",onClick:se},[a(t(at),{class:"btn-icon"},{default:o(()=>[a(t(ta))]),_:1})])]),_:1},8,["content"]),a(t(gt),{content:t(e)("@E80AC:用VSCode打开文件"),placement:"top",effect:"light"},{default:o(()=>[s("button",{class:"modern-btn btn-icon-24 btn-success",onClick:Se},[a(At,{"icon-class":"vscode",class:"btn-icon"})])]),_:1},8,["content"])])):I("",!0)])]),B.value?(r(),v("div",_i,[ee.value.length>0?(r(),v("div",bi,[a(t(rt),{type:G.value?"primary":"default",size:"small",onClick:F[22]||(F[22]=W=>G.value=!0)},{default:o(()=>[z(l(t(e)("@E80AC:逐块解决")),1)]),_:1},8,["type"]),a(t(rt),{type:G.value?"default":"primary",size:"small",onClick:F[23]||(F[23]=W=>G.value=!1)},{default:o(()=>[z(l(t(e)("@E80AC:全局解决")),1)]),_:1},8,["type"])])):I("",!0),ee.value.length>0&&G.value?(r(),v("div",wi,[s("div",ki,[s("div",$i,[s("div",Si,[s("div",Di,l(t(e)("@E80AC:当前更改")),1)]),s("div",Fi,[a(Os,{modelValue:be.value,"onUpdate:modelValue":[F[24]||(F[24]=W=>be.value=W),()=>{}],language:"auto","file-path":C.value,theme:"auto","read-only":!0,"min-height":"360px","reveal-line":_.value,"highlight-range":ne.value,"dim-highlight-ranges":Ke.value,"highlight-kind":"current","right-actions":A.value,"applied-blocks":Ee.value,onGutterClick:F[25]||(F[25]=(W,Ce)=>Te(W,"current",Ce))},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks"])])]),s("div",Bi,[s("div",Oi,[s("div",Ni,l(t(e)("@E80AC:合并结果")),1)]),s("div",Ti,l(t(e)("@E80AC:可直接编辑合并结果(整文件)")),1),s("div",Ai,[a(Os,{modelValue:De.value,"onUpdate:modelValue":[F[26]||(F[26]=W=>De.value=W),F[27]||(F[27]=()=>Ie.value=!0)],language:"auto","file-path":C.value,theme:"auto","read-only":!1,"min-height":"360px","reveal-line":Ae.value,"highlight-range":Fe.value,"dim-highlight-ranges":R.value,"highlight-kind":"merged"},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges"])])]),s("div",Ei,[s("div",Pi,[s("div",Vi,l(t(e)("@E80AC:传入的更改")),1)]),s("div",Mi,[a(Os,{modelValue:Q.value,"onUpdate:modelValue":[F[28]||(F[28]=W=>Q.value=W),()=>{}],language:"auto","file-path":C.value,theme:"auto","read-only":!0,"min-height":"360px","reveal-line":de.value,"highlight-range":me.value,"dim-highlight-ranges":Xe.value,"highlight-kind":"incoming","right-actions":M.value,"applied-blocks":Ee.value,onGutterClick:F[29]||(F[29]=(W,Ce)=>Te(W,"incoming",Ce))},null,8,["modelValue","file-path","reveal-line","highlight-range","dim-highlight-ranges","right-actions","applied-blocks"])])])]),s("div",Gi,[a(t(rt),{type:"primary",size:"large",onClick:q},{default:o(()=>[z(l(t(e)("@E80AC:保存所有解决方案")),1)]),_:1})])])):I("",!0),!G.value||ee.value.length===0?(r(),v("div",Ii,[s("div",Ri,[s("div",Li,[a(t(at),{class:"warning-icon"},{default:o(()=>[a(t(La))]),_:1}),s("span",null,l(t(e)("@E80AC:检测到冲突,请选择解决方式")),1)]),s("div",xi,[a(t(rt),{type:"primary",size:"small",onClick:Ve},{default:o(()=>[z(l(t(e)("@E80AC:接受当前版本")),1)]),_:1}),a(t(rt),{type:"success",size:"small",onClick:ut},{default:o(()=>[z(l(t(e)("@E80AC:接受传入版本")),1)]),_:1}),a(t(rt),{type:"warning",size:"small",onClick:Et},{default:o(()=>[z(l(t(e)("@E80AC:接受两者")),1)]),_:1})])]),zt((r(),v("div",Ui,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:t(e)("@E80AC:该文件没有差异内容"),"image-size":80},null,8,["description"])):X.value&&b.plainText?(r(),v("pre",{key:1,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,zi)):X.value?(r(),v("div",{key:2,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,Hi)):I("",!0)])),[[ke,b.isLoading]])])):I("",!0)])):B.value?I("",!0):zt((r(),v("div",Wi,[!X.value&&!b.isLoading?(r(),Y(t(Zt),{key:0,description:C.value?t(e)("@E80AC:该文件没有差异内容"):t(e)("@E80AC:请选择文件查看差异"),"image-size":80},null,8,["description"])):b.compareMode?(r(),v("div",ji,[a(Ha,{original:b.compareOriginal,modified:b.compareModified,language:"auto","file-path":C.value,theme:"auto","read-only":!0},null,8,["original","modified","file-path"])])):X.value&&b.plainText?(r(),v("pre",{key:2,class:"diff-text plain-text",textContent:l(b.diffContent)},null,8,qi)):X.value?(r(),v("div",{key:3,class:"diff-text",innerHTML:t(Vs)(b.diffContent)},null,8,Ji)):I("",!0)])),[[ke,b.isLoading]])]))],4)}}}),Na=Je(Ki,[["__scopeId","data-v-d8ea0dd8"]]),Yi={class:"common-dialog__footer"},Qi=We({__name:"CommonDialog",props:{modelValue:{type:Boolean},title:{},size:{default:"medium"},type:{default:"default"},width:{},height:{},top:{default:"50px"},closeOnClickModal:{type:Boolean,default:!1},closeOnPressEscape:{type:Boolean,default:!0},destroyOnClose:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},customClass:{},appendToBody:{type:Boolean,default:!1},lockScroll:{type:Boolean,default:!0},zIndex:{},heightMode:{default:"max"},heightOffset:{default:"100px"},showFooter:{type:Boolean,default:!1},confirmText:{default:e("@803A9:确定")},cancelText:{default:e("@803A9:取消")},showCancel:{type:Boolean,default:!0},confirmLoading:{type:Boolean,default:!1}},emits:["update:modelValue","confirm","cancel","close","opened","closed"],setup(Z,{emit:k}){const i=Z,c=k,p=ie(()=>{if(i.width)return i.width;switch(i.size){case"small":return"30%";case"medium":return"50%";case"large":return"80%";case"extra-large":return"90%";case"fullscreen":return"100vw";default:return"50%"}}),d=ie(()=>i.size==="fullscreen"?"0":i.top),h=ie(()=>{const n=[];return i.customClass&&n.push(i.customClass),i.type==="flex"&&n.push("common-dialog--flex"),i.type==="full-height"&&n.push("common-dialog--full-height"),i.size==="fullscreen"&&n.push("common-dialog--fullscreen"),n.join(" ")}),y=ie(()=>{if(i.size==="fullscreen")return{height:"100vh",maxHeight:"100vh"};const n=`calc(100% - ${i.heightOffset})`;return i.heightMode==="fixed"?{height:n}:{maxHeight:n}});function m(){c("update:modelValue",!1),c("close")}function $(){c("confirm")}function N(){c("cancel"),m()}function C(){c("opened")}function B(){c("closed")}return(n,f)=>{const D=rt;return r(),Y(t(ka),{"model-value":n.modelValue,title:n.title,width:p.value,top:d.value,style:ls(y.value),"z-index":n.zIndex,fullscreen:n.size==="fullscreen","close-on-click-modal":n.closeOnClickModal,"close-on-press-escape":n.closeOnPressEscape,"destroy-on-close":n.destroyOnClose,draggable:n.draggable,class:Qe(h.value),"append-to-body":n.appendToBody,"lock-scroll":n.lockScroll,onClose:m,onOpened:C,onClosed:B},ro({default:o(()=>[fs(n.$slots,"default",{},void 0,!0)]),_:2},[n.showFooter||n.$slots.footer?{name:"footer",fn:o(()=>[fs(n.$slots,"footer",{},()=>[s("div",Yi,[n.showCancel?(r(),Y(D,{key:0,onClick:N},{default:o(()=>[z(l(n.cancelText),1)]),_:1})):I("",!0),a(D,{type:"primary",loading:n.confirmLoading,onClick:$},{default:o(()=>[z(l(n.confirmText),1)]),_:1},8,["loading"])])],!0)]),key:"0"}:void 0]),1032,["model-value","title","width","top","style","z-index","fullscreen","close-on-click-modal","close-on-press-escape","destroy-on-close","draggable","class","append-to-body","lock-scroll"])}}}),Mt=Je(Qi,[["__scopeId","data-v-938ceccc"]]),Zi={key:0,class:"file-group"},Xi={class:"file-count"},er={class:"file-list"},tr=["onClick"],sr={class:"file-info"},ar={class:"file-name-section"},or=["title"],nr={class:"file-directory"},lr={key:0,class:"file-actions"},ir=We({__name:"FileGroup",props:{files:{},title:{},groupKey:{},collapsedGroups:{},isFileLocked:{type:Function},isLocking:{type:Function},getFileName:{type:Function},getFileDirectory:{type:Function},isSelectionMode:{type:Boolean},isFileSelected:{type:Function}},emits:["toggleCollapse","fileClick","toggleFileLock","stageFile","unstageFile","revertFileChanges","manageLockedFiles","toggleFileSelection"],setup(Z,{emit:k}){const i=Z,c=k,p=ie(()=>i.files.length>0),d=ie(()=>i.collapsedGroups[i.groupKey]);function h(){c("toggleCollapse",i.groupKey)}function y(w,E){i.isSelectionMode?(E==null||E.stopPropagation(),c("toggleFileSelection",w.path)):c("fileClick",w)}function m(w){c("toggleFileSelection",w)}function $(w){c("toggleFileLock",w)}function N(){c("manageLockedFiles")}function C(w){c("stageFile",w)}function B(w){c("unstageFile",w)}function n(w){c("revertFileChanges",w)}function f(w){switch(w){case"added":return"A";case"modified":return"M";case"deleted":return"D";case"conflicted":return"!";case"untracked":return"U";default:return""}}const D=w=>{const E=i.getFileName(w);return Oa(E)};return(w,E)=>{const X=at,V=Hs,O=gt;return p.value?(r(),v("div",Zi,[s("div",{class:"file-group-header",onClick:h},[a(X,{class:Qe(["collapse-icon",{collapsed:d.value}])},{default:o(()=>[a(t(ds))]),_:1},8,["class"]),s("span",null,l(w.title),1),s("span",Xi,"("+l(w.files.length)+")",1)]),zt(s("div",er,[(r(!0),v(He,null,st(w.files,S=>{var se,ge;return r(),v("div",{key:S.path,class:Qe(["file-item file-group-item",{"is-loading":i.isLocking(S.path),locked:i.isFileLocked(S.path),selected:i.isSelectionMode&&((se=i.isFileSelected)==null?void 0:se.call(i,S.path)),[`file-type-${S.type}`]:S.type}]),onClick:Se=>y(S,Se)},[s("div",sr,[i.isSelectionMode?(r(),Y(V,{key:0,"model-value":(ge=i.isFileSelected)==null?void 0:ge.call(i,S.path),onChange:Se=>m(S.path),onClick:E[0]||(E[0]=Jt(()=>{},["stop"])),class:"file-checkbox"},null,8,["model-value","onChange"])):I("",!0),s("span",{class:Qe(["file-type-icon",D(S.path)])},null,2),s("div",ar,[a(O,{content:i.getFileName(S.path),placement:"top",disabled:i.getFileName(S.path).length<=25,"show-after":200},{default:o(()=>[s("div",{class:Qe(["file-name",{"locked-file-name":i.isFileLocked(S.path),"deleted-file-name":S.type==="deleted"}])},[z(l(i.getFileName(S.path))+" ",1),i.isFileLocked(S.path)?(r(),Y(X,{key:0,class:"lock-indicator"},{default:o(()=>[a(t(oa))]),_:1})):I("",!0)],2)]),_:2},1032,["content","disabled"])]),s("div",{class:"file-path-section",title:i.getFileDirectory(S.path)},[a(O,{content:i.getFileDirectory(S.path),placement:"top",disabled:i.getFileDirectory(S.path).length<=30,"show-after":200},{default:o(()=>[s("span",nr,l(i.getFileDirectory(S.path)),1)]),_:2},1032,["content","disabled"])],8,or),s("div",{class:Qe(["file-status-indicator",[S.type,{locked:i.isFileLocked(S.path)}]])},l(f(S.type)),3)]),i.isSelectionMode?I("",!0):(r(),v("div",lr,[a(Ba,{"file-path":S.path,"file-type":S.type,"is-locked":i.isFileLocked(S.path),"is-locking":i.isLocking(S.path),onToggleLock:$,onStage:C,onUnstage:B,onRevert:n,onManageLockedFiles:N},null,8,["file-path","file-type","is-locked","is-locking"])]))],10,tr)}),128))],512),[[Ss,!d.value]])])):I("",!0)}}}),Ys=Je(ir,[["__scopeId","data-v-55c32850"]]),rr={class:"settings-content"},cr={class:"package-info-bar"},ur={class:"info-label"},dr={class:"info-value"},pr={class:"info-path"},fr={class:"tab-content"},mr={class:"current-version"},vr={class:"version-label"},hr={class:"version-value"},gr={class:"version-options"},yr={class:"option-label"},Cr={class:"radio-content"},_r={class:"radio-label"},br={class:"radio-desc"},wr={class:"tab-content script-management"},kr={class:"scripts-list-section"},$r={class:"section-header"},Sr={class:"section-title"},Dr={class:"script-count"},Fr={key:0,class:"empty-scripts"},Br={key:1,class:"script-items"},Or={class:"script-item-content"},Nr={class:"script-name-tag"},Tr={class:"name-text"},Ar={class:"script-command"},Er={class:"script-item-actions"},Pr={class:"script-form-section"},Vr={class:"section-header"},Mr={class:"section-title"},Gr={class:"form-group"},Ir={class:"form-item"},Rr={class:"form-label"},Lr={key:0,class:"error-tip"},xr={key:1,class:"success-tip"},Ur={class:"form-item"},zr={class:"form-label"},Hr=We({__name:"NpmSettingsDialog",props:{visible:{type:Boolean},packageInfo:{}},emits:["close","complete"],setup(Z,{emit:k}){const i=Z,c=k,p=g("version"),d=g("patch"),h=g(!1),y=g(""),m=g(""),$=g(!1),N=g(""),C=g(!1),B=g(!1),n=g(!1),f=g("");function D(ee){if(!ee.trim())return f.value="",!1;const G=/^[a-zA-Z_:][a-zA-Z0-9_:.-]*$/;return ee.includes(" ")?(f.value=e("@NPM01:脚本名称不能包含空格"),!1):G.test(ee)?(f.value="",!0):(f.value=e("@NPM01:脚本名称只能包含字母、数字、连字符、冒号、下划线和点号,且不能以数字开头"),!1)}function w(){y.value.trim()?D(y.value):f.value=""}const E=[{label:e("@NPM01:主版本号 (major)"),value:"major",desc:"1.0.0 → 2.0.0"},{label:e("@NPM01:次版本号 (minor)"),value:"minor",desc:"1.0.0 → 1.1.0"},{label:e("@NPM01:修订号 (patch)"),value:"patch",desc:"1.0.0 → 1.0.1"}];async function X(){try{h.value=!0;const G=await(await fetch("/api/update-npm-version",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,versionType:d.value})})).json();G.success?(u.success(`${e("@NPM01:版本号已更新")}: ${G.oldVersion} → ${G.newVersion}`),c("complete")):u.error(G.error||e("@NPM01:更新版本号失败"))}catch(ee){console.error("更新版本号失败:",ee),u.error(e("@NPM01:更新版本号失败"))}finally{h.value=!1}}async function V(){if(!y.value.trim()){u.warning(e("@NPM01:请输入脚本名称"));return}if(!D(y.value)){u.warning(f.value||e("@NPM01:脚本名称格式不正确"));return}if(!m.value.trim()){u.warning(e("@NPM01:请输入脚本命令"));return}try{$.value=!0;const ee=n.value?"/api/update-npm-script":"/api/add-npm-script",De=await(await fetch(ee,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,scriptName:y.value.trim(),scriptCommand:m.value.trim(),oldScriptName:n.value?N.value:void 0})})).json();De.success?(u.success(n.value?e("@NPM01:脚本已更新"):e("@NPM01:脚本已添加")),S(),c("complete")):u.error(De.error||(n.value?e("@NPM01:更新脚本失败"):e("@NPM01:添加脚本失败")))}catch(ee){console.error("保存脚本失败:",ee),u.error(n.value?e("@NPM01:更新脚本失败"):e("@NPM01:添加脚本失败"))}finally{$.value=!1}}function O(ee,G){n.value=!0,N.value=ee,y.value=ee,m.value=G,f.value=""}function S(){n.value=!1,N.value="",y.value="",m.value="",f.value=""}async function se(ee){try{B.value=!0;const De=await(await fetch("/api/pin-npm-script",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,scriptName:ee})})).json();De.success?(u.success(e("@NPM01:脚本已置顶")),c("complete")):u.error(De.error||e("@NPM01:置顶脚本失败"))}catch(G){console.error("置顶脚本失败:",G),u.error(e("@NPM01:置顶脚本失败"))}finally{B.value=!1}}async function ge(ee){try{await Vt.confirm(e("@NPM01:确定要删除脚本")+` "${ee}" `+e("@NPM01:吗?"),e("@NPM01:删除脚本"),{confirmButtonText:e("@NPM01:确定"),cancelButtonText:e("@NPM01:取消"),type:"warning"}),C.value=!0;const De=await(await fetch("/api/delete-npm-script",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:i.packageInfo.path,scriptName:ee})})).json();De.success?(u.success(e("@NPM01:脚本已删除")),c("complete")):u.error(De.error||e("@NPM01:删除脚本失败"))}catch(G){G!=="cancel"&&(console.error("删除脚本失败:",G),u.error(e("@NPM01:删除脚本失败")))}finally{C.value=!1}}function Se(){p.value="version",d.value="patch",S(),c("close")}return(ee,G)=>{const De=co,Ie=Ws,be=rt,Q=sn,ye=Zt,ue=at,T=At,j=Tt,oe=tn;return r(),Y(Mt,{"model-value":ee.visible,title:ee.packageInfo.name+" - "+t(e)("@NPM01:NPM 设置"),size:"medium",onClose:Se},{default:o(()=>[s("div",rr,[s("div",cr,[s("span",ur,l(t(e)("@NPM01:包名称"))+":",1),s("span",dr,l(ee.packageInfo.name),1),s("span",pr,l(ee.packageInfo.relativePath),1)]),a(oe,{modelValue:p.value,"onUpdate:modelValue":G[3]||(G[3]=ae=>p.value=ae),class:"settings-tabs"},{default:o(()=>[a(Q,{label:t(e)("@NPM01:版本号管理"),name:"version"},{default:o(()=>[s("div",fr,[s("div",mr,[s("span",vr,l(t(e)("@NPM01:当前版本"))+":",1),s("span",hr,l(ee.packageInfo.version),1)]),s("div",gr,[s("label",yr,l(t(e)("@NPM01:选择要增加的版本号类型"))+":",1),a(Ie,{modelValue:d.value,"onUpdate:modelValue":G[0]||(G[0]=ae=>d.value=ae),class:"version-radio-group"},{default:o(()=>[(r(),v(He,null,st(E,ae=>a(De,{key:ae.value,value:ae.value,border:"",class:"version-radio"},{default:o(()=>[s("div",Cr,[s("span",_r,l(ae.label),1),s("span",br,l(ae.desc),1)])]),_:2},1032,["value"])),64))]),_:1},8,["modelValue"])]),a(be,{type:"primary",loading:h.value,onClick:X,class:"action-button"},{default:o(()=>[z(l(t(e)("@NPM01:更新版本号")),1)]),_:1},8,["loading"])])]),_:1},8,["label"]),a(Q,{label:t(e)("@NPM01:脚本管理"),name:"script"},{default:o(()=>[s("div",wr,[s("div",kr,[s("div",$r,[s("span",Sr,l(t(e)("@NPM01:当前脚本列表")),1),s("span",Dr,l(Object.keys(ee.packageInfo.scripts||{}).length)+" "+l(t(e)("@NPM01:个脚本")),1)]),Object.keys(ee.packageInfo.scripts||{}).length===0?(r(),v("div",Fr,[a(ye,{description:t(e)("@NPM01:暂无脚本"),"image-size":80},null,8,["description"])])):(r(),v("div",Br,[(r(!0),v(He,null,st(ee.packageInfo.scripts,(ae,K)=>(r(),v("div",{key:K,class:"script-item-card"},[s("div",Or,[s("div",Nr,[a(ue,{class:"script-icon"},{default:o(()=>G[4]||(G[4]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M160 224a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64V288a64 64 0 0 0-64-64H160zm0-64h704a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H160A128 128 0 0 1 32 736V288a128 128 0 0 1 128-128z"}),s("path",{fill:"currentColor",d:"m448 327.872 163.2 160-163.2 160-45.248-46.08L502.4 487.872l-99.648-99.84L448 327.872z"})],-1)])),_:1}),s("span",Tr,l(K),1)]),s("div",Ar,[s("code",null,l(ae),1)])]),s("div",Er,[a(be,{size:"small",text:"",class:"pin-button",onClick:ve=>se(K),loading:B.value,title:"置顶"},{default:o(()=>[a(T,{"icon-class":"pin","class-name":"pin-icon"})]),_:2},1032,["onClick","loading"]),a(be,{size:"small",type:"primary",text:"",onClick:ve=>O(K,ae),disabled:n.value&&N.value===K,title:t(e)("@NPM01:编辑")},{default:o(()=>[a(ue,null,{default:o(()=>G[5]||(G[5]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640V512z"}),s("path",{fill:"currentColor",d:"m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088l-139.456 19.904a32 32 0 0 1-36.224-36.224l19.904-139.456a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.808 0z"})],-1)])),_:1})]),_:2},1032,["onClick","disabled","title"]),a(be,{size:"small",type:"danger",text:"",onClick:ve=>ge(K),loading:C.value,title:t(e)("@NPM01:删除")},{default:o(()=>[a(ue,null,{default:o(()=>G[6]||(G[6]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V256zm448-64v-64H416v64h192zM224 896h576V256H224v640zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32zm192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32z"})],-1)])),_:1})]),_:2},1032,["onClick","loading","title"])])]))),128))]))]),s("div",Pr,[s("div",Vr,[s("span",Mr,l(n.value?t(e)("@NPM01:编辑脚本"):t(e)("@NPM01:添加新脚本")),1),n.value?(r(),Y(be,{key:0,size:"small",text:"",onClick:S},{default:o(()=>[z(l(t(e)("@NPM01:取消编辑")),1)]),_:1})):I("",!0)]),s("div",Gr,[s("div",Ir,[s("label",Rr,l(t(e)("@NPM01:脚本名称"))+":",1),a(j,{modelValue:y.value,"onUpdate:modelValue":G[1]||(G[1]=ae=>y.value=ae),placeholder:t(e)("@NPM01:例如: build, dev, test"),disabled:n.value,clearable:"",onInput:w},null,8,["modelValue","placeholder","disabled"]),f.value?(r(),v("div",Lr,[a(ue,null,{default:o(()=>G[7]||(G[7]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm0 832a384 384 0 1 0 0-768 384 384 0 0 0 0 768zm48-176a48 48 0 1 1-96 0 48 48 0 0 1 96 0zm-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32z"})],-1)])),_:1}),s("span",null,l(f.value),1)])):y.value.trim()&&!n.value?(r(),v("div",xr,[a(ue,null,{default:o(()=>G[8]||(G[8]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336L456.192 600.384z"})],-1)])),_:1}),s("span",null,l(t(e)("@NPM01:脚本名称格式正确")),1)])):I("",!0)]),s("div",Ur,[s("label",zr,l(t(e)("@NPM01:脚本命令"))+":",1),a(j,{modelValue:m.value,"onUpdate:modelValue":G[2]||(G[2]=ae=>m.value=ae),placeholder:t(e)("@NPM01:例如: vite build, vite dev"),clearable:""},null,8,["modelValue","placeholder"])])]),a(be,{type:"primary",loading:$.value,disabled:!y.value.trim()||!m.value.trim(),onClick:V,class:"action-button"},{default:o(()=>[z(l(n.value?t(e)("@NPM01:更新脚本"):t(e)("@NPM01:添加脚本")),1)]),_:1},8,["loading","disabled"])])])]),_:1},8,["label"])]),_:1},8,["modelValue"])])]),_:1},8,["model-value","title"])}}}),Wr=Je(Hr,[["__scopeId","data-v-186db1ed"]]),jr={key:0,class:"npm-scripts-panel"},qr={class:"panel-header"},Jr={class:"header-left"},Kr={class:"panel-title"},Yr={class:"header-right"},Qr={key:0,class:"loading-container"},Zr={class:"loading-text"},Xr={key:1,class:"empty-container"},ec={class:"empty-text"},tc=["onClick"],sc={class:"package-info"},ac={class:"package-name"},oc={class:"package-path"},nc={key:0,class:"scripts-list"},lc=["onClick"],ic={class:"script-left"},rc={class:"script-name"},cc={class:"script-command"},uc=We({__name:"NpmScriptsPanel",props:{visible:{type:Boolean}},emits:["close"],setup(Z,{emit:k}){const i=Z,c=k,p=g([]),d=g(!1),h=g(new Set),y=g(!1),m=g(""),$=g(null);function N(ee){m.value=ee.path,$.value=ee,y.value=!0}function C(){y.value=!1,m.value="",$.value=null}function B(){C(),se()}function n(ee){if(!ee)return null;if(typeof ee=="string")return ee;if(typeof ee=="object"&&ee.url){let G=ee.url;return G=G.replace(/^git\+/,""),G=G.replace(/\.git$/,""),G}return null}function f(ee){const G=n(ee.repository);G&&window.open(G,"_blank")}const D=g(300),w=g(!1),E=g(0),X=g(0);function V(ee){w.value=!0,E.value=ee.clientY,X.value=D.value,document.addEventListener("mousemove",O),document.addEventListener("mouseup",S),ee.preventDefault()}function O(ee){if(!w.value)return;const G=E.value-ee.clientY,De=Math.max(200,Math.min(600,X.value+G));D.value=De}function S(){w.value=!1,document.removeEventListener("mousemove",O),document.removeEventListener("mouseup",S)}async function se(){const ee=Date.now();console.log("[NPM面板] 开始加载npm脚本...");try{d.value=!0;const G=new AbortController,De=3e4,Ie=setTimeout(()=>{G.abort(),console.warn(`[NPM面板] 超时${De}ms,中断请求`)},De);console.log(`[NPM面板] 发起请求到后端(超时${De}ms)...`);const be=Date.now(),Q=await fetch("/api/scan-npm-scripts",{signal:G.signal});clearTimeout(Ie);const ye=Date.now()-be;console.log(`[NPM面板] 后端响应完成,耗时${ye}ms`);const ue=Date.now(),T=await Q.json(),j=Date.now()-ue;if(console.log(`[NPM面板] JSON解析完成,耗时${j}ms`),T.success){if(T.cancelled){console.log(`[NPM面板] 扫描被取消,总耗时${Date.now()-ee}ms`);return}p.value=T.packages,console.log(`[NPM面板] 加载完成,找到${p.value.length}个package.json,共${T.totalScripts}个脚本,总耗时${Date.now()-ee}ms`),p.value.length===0&&console.log("[NPM面板] 未找到包含scripts的package.json")}else console.error(`[NPM面板] 加载失败,耗时${Date.now()-ee}ms`),u.error(e("@NPM01:加载npm脚本失败"))}catch(G){G.name==="AbortError"?(console.warn(`[NPM面板] 请求超时被中断,耗时${Date.now()-ee}ms`),u.warning("NPM脚本扫描超时,请稍后重试")):console.error(`[NPM面板] 加载失败,耗时${Date.now()-ee}ms,错误:`,G)}finally{d.value=!1}}function ge(ee){h.value.has(ee)?h.value.delete(ee):h.value.add(ee)}async function Se(ee,G){try{const Ie=await(await fetch("/api/run-npm-script",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({packagePath:ee,scriptName:G})})).json();Ie.success?u.success(`${e("@NPM01:已在新终端中执行")}: ${G}`):u.error(Ie.error||e("@NPM01:执行脚本失败"))}catch(De){console.error("执行npm脚本失败:",De),u.error(`${e("@NPM01:执行脚本失败")}: ${De.message}`)}}return Ze(()=>i.visible,ee=>{ee&&se()},{immediate:!0}),(ee,G)=>{const De=at,Ie=gt;return ee.visible?(r(),v("div",jr,[s("div",{class:"resize-handle",onMousedown:V},null,32),s("div",qr,[s("div",Jr,[a(At,{"icon-class":"npm","class-name":"npm-icon"}),s("span",Kr,l(t(e)("@NPM01:NPM 脚本")),1)]),s("div",Yr,[a(lt,{size:"small",disabled:d.value,onClick:se},{default:o(()=>[a(De,{class:Qe({"is-rotating":d.value})},{default:o(()=>G[1]||(G[1]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})],-1)])),_:1},8,["class"])]),_:1},8,["disabled"]),a(lt,{size:"small",onClick:G[0]||(G[0]=be=>c("close"))},{default:o(()=>[a(De,null,{default:o(()=>G[2]||(G[2]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})],-1)])),_:1})]),_:1})])]),d.value?(r(),v("div",Qr,[a(De,{class:"is-loading loading-icon"},{default:o(()=>G[3]||(G[3]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z"})],-1)])),_:1}),s("p",Zr,l(t(e)("@NPM01:正在扫描项目中的 npm 脚本...")),1)])):p.value.length===0?(r(),v("div",Xr,[G[4]||(G[4]=s("svg",{class:"empty-icon",viewBox:"0 0 1024 1024",width:"64",height:"64"},[s("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640V384zm-26.496-64L640 154.496V320h165.504zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32z"})],-1)),s("p",ec,l(t(e)("@NPM01:当前项目中未找到包含 scripts 的 package.json")),1)])):(r(),v("div",{key:2,class:"packages-container",style:ls({maxHeight:D.value+"px"})},[(r(!0),v(He,null,st(p.value,be=>(r(),v("div",{key:be.path,class:"package-item"},[s("div",{class:"package-header",onClick:Q=>ge(be.path)},[a(De,{class:Qe(["expand-icon",{expanded:h.value.has(be.path)}])},{default:o(()=>G[5]||(G[5]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})],-1)])),_:2},1032,["class"]),a(De,{class:"folder-icon"},{default:o(()=>[a(t(ta))]),_:1}),s("div",sc,[s("span",ac,l(be.name),1),s("span",oc,l(be.relativePath),1)]),n(be.repository)?(r(),Y(Ie,{key:0,content:n(be.repository),placement:"bottom","show-after":300},{default:o(()=>[a(De,{class:"repo-icon",onClick:Jt(Q=>f(be),["stop"])},{default:o(()=>G[6]||(G[6]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M458.64 119.072a84.176 84.176 0 0 1 106.72 0l366.912 300.4a32 32 0 0 1-40.544 49.52L524.816 168.592a20.176 20.176 0 0 0-25.632 0L132.272 468.992a32 32 0 1 1-40.544-49.52L458.64 119.072zM304.32 415.184c0-27.2 22-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552H353.76a49.504 49.504 0 0 1-49.472-49.552V415.2z m64 14.432v67.68h66.976v-67.68H368.32z m-162.976 36.96a32 32 0 0 1 32 32v307.2c0 21.28 17.12 38.224 37.856 38.224h471.52a38.032 38.032 0 0 0 37.84-38.224v-307.2a32 32 0 1 1 64 0v307.2c0 56.304-45.44 102.224-101.856 102.224H275.2c-56.4 0-101.856-45.92-101.856-102.224v-307.2a32 32 0 0 1 32-32z m98.976 168.048c0-27.216 22-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552H353.76a49.504 49.504 0 0 1-49.472-49.552v-96.544z m64 14.432v67.68h66.976v-67.68H368.32z m154.288-14.432c0-27.216 21.984-49.568 49.472-49.568h96.048a49.504 49.504 0 0 1 49.456 49.568v96.544c0 27.2-21.984 49.552-49.456 49.552h-96.048a49.504 49.504 0 0 1-49.472-49.552v-96.544z m64 14.432v67.68h66.976v-67.68h-66.976z"})],-1)])),_:2},1032,["onClick"])]),_:2},1032,["content"])):I("",!0),a(De,{class:"settings-icon",onClick:Jt(Q=>N(be),["stop"])},{default:o(()=>G[7]||(G[7]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296L315.2 220.096c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384zm0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256z"})],-1)])),_:2},1032,["onClick"])],8,tc),h.value.has(be.path)?(r(),v("div",nc,[(r(!0),v(He,null,st(be.scripts,(Q,ye)=>(r(),v("div",{key:ye,class:"script-item",onClick:ue=>Se(be.path,ye)},[s("div",ic,[a(De,{class:"play-icon"},{default:o(()=>G[8]||(G[8]=[s("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[s("path",{fill:"currentColor",d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}),s("path",{fill:"currentColor",d:"M719.4 499.1l-296.1-215A15.9 15.9 0 0 0 398 297v430c0 13.1 14.8 20.5 25.3 12.9l296.1-215a15.9 15.9 0 0 0 0-25.8zm-257.6 134V390.9L628.5 512 461.8 633.1z"})],-1)])),_:1}),s("span",rc,l(ye),1)]),s("span",cc,l(Q),1)],8,lc))),128))])):I("",!0)]))),128))],4)),$.value?(r(),Y(Wr,{key:3,visible:y.value,"package-info":$.value,onClose:C,onComplete:B},null,8,["visible","package-info"])):I("",!0)])):I("",!0)}}}),dc=Je(uc,[["__scopeId","data-v-3ce1fd0d"]]),pc={key:0,class:"stash-changes-button"},fc={class:"stash-dialog-content"},mc={class:"stash-info-card"},vc={class:"info-icon"},hc={class:"info-content"},gc={class:"stash-options"},yc={class:"options-title"},Cc={class:"option-item"},_c={class:"option-label"},bc={class:"option-desc"},wc={class:"option-item"},kc={class:"option-label"},$c={key:0,class:"stash-preview"},Sc={class:"preview-title"},Dc={class:"file-count-info"},Fc={class:"dialog-footer"},Bc={class:"footer-actions"},Oc=["disabled"],Nc=We({__name:"StashChangesButton",props:{variant:{default:"icon"}},setup(Z){const k=Z,i=Bt(),c=Ut(),p=g(!1),d=g(""),h=g(!0),y=g(!1),m=ie(()=>i.fileList.some(n=>n.type==="modified"||n.type==="added"||n.type==="deleted"||n.type==="untracked")),$=ie(()=>{if(!m.value)return!1;const n=i.fileList.filter(f=>f.type==="modified"||f.type==="added"||f.type==="deleted"||f.type==="untracked");return n.length===0?!1:n.every(f=>{const D=f.path.replace(/\\/g,"/");return c.lockedFiles.some(w=>{const E=w.replace(/\\/g,"/");return D===E})})});function N(){d.value="",$.value||(y.value=!1),p.value=!0}async function C(){try{await i.saveStash(d.value,h.value,y.value),p.value=!1}catch(n){console.error("储藏失败:",n)}}function B(n){if(!(n.isComposing||n.keyCode===229)&&n.key==="Enter"&&!n.shiftKey){if(n.preventDefault(),i.isSavingStash||i.hasConflictedFiles)return;C()}}return(n,f)=>{const D=at,w=rt,E=Tt,X=bs,V=Hs,O=ws,S=_s;return m.value?(r(),v("div",pc,[k.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):t(e)("@76872:将工作区更改储藏起来"),size:"large",disabled:t(i).hasConflictedFiles||t(i).isSavingStash,"hover-color":"var(--color-warning)",onClick:N},{default:o(()=>[t(i).isSavingStash?(r(),Y(D,{key:0,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(At,{key:1,"icon-class":"git-stash"}))]),_:1},8,["tooltip","disabled"])):(r(),Y(w,{key:1,type:"warning",class:"action-button",onClick:N,loading:t(i).isSavingStash,disabled:t(i).hasConflictedFiles},{default:o(()=>[z(l(t(e)("@76872:储藏更改")),1)]),_:1},8,["loading","disabled"])),a(Mt,{modelValue:p.value,"onUpdate:modelValue":f[4]||(f[4]=se=>p.value=se),title:t(e)("@76872:储藏更改 (Git Stash)"),size:"medium","close-on-click-modal":!1,"custom-class":"stash-dialog"},{footer:o(()=>[s("div",Fc,[s("div",Bc,[s("button",{type:"button",class:"dialog-cancel-btn",onClick:f[3]||(f[3]=se=>p.value=!1)},l(t(e)("@76872:取消")),1),s("button",{type:"button",class:"dialog-confirm-btn",onClick:C,disabled:t(i).isSavingStash||t(i).hasConflictedFiles},[t(i).isSavingStash?(r(),Y(D,{key:1,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(D,{key:0},{default:o(()=>[a(t(Es))]),_:1})),s("span",null,l(t(e)("@76872:储藏")),1)],8,Oc)])])]),default:o(()=>[s("div",fc,[s("div",mc,[s("div",vc,[a(At,{"icon-class":"git-stash"})]),s("div",hc,[s("h4",null,l(t(e)("@76872:储藏工作区更改")),1),s("p",null,l(t(e)("@76872:将当前工作区的更改临时保存,稍后可以重新应用到任何分支")),1)])]),a(S,{"label-position":"top",class:"stash-form"},{default:o(()=>[a(X,{label:t(e)("@76872:储藏说明")},{default:o(()=>[a(E,{modelValue:d.value,"onUpdate:modelValue":f[0]||(f[0]=se=>d.value=se),placeholder:t(e)("@76872:为这次储藏添加描述信息(可选)"),clearable:"",onKeydown:B,rows:2,type:"textarea",resize:"none",maxlength:"200","show-word-limit":""},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s("div",gc,[s("h5",yc,[a(D,null,{default:o(()=>[a(t(na))]),_:1}),z(" "+l(t(e)("@76872:储藏选项")),1)]),s("div",Cc,[a(V,{modelValue:h.value,"onUpdate:modelValue":f[1]||(f[1]=se=>h.value=se),size:"large"},{default:o(()=>[s("span",_c,l(t(e)("@76872:包含未跟踪文件")),1)]),_:1},8,["modelValue"]),s("p",bc,l(t(e)("@76872:同时储藏新建但未添加到Git的文件 (--include-untracked)")),1)]),s("div",wc,[a(V,{modelValue:y.value,"onUpdate:modelValue":f[2]||(f[2]=se=>y.value=se),disabled:$.value,size:"large"},{default:o(()=>[s("span",kc,l(t(e)("@76872:排除锁定文件")),1)]),_:1},8,["modelValue","disabled"]),s("p",{class:Qe(["option-desc",{disabled:$.value}])},l(t(e)("@76872:不储藏被锁定的文件,保持其当前状态")),3)])]),t(i).status.staged.length>0||t(i).status.unstaged.length>0?(r(),v("div",$c,[s("h5",Sc,[a(D,null,{default:o(()=>[a(t($a))]),_:1}),z(" "+l(t(e)("@76872:将要储藏的文件")),1)]),s("div",Dc,[t(i).status.staged.length>0?(r(),Y(O,{key:0,type:"success"},{default:o(()=>[z(l(t(e)("@76872:已暂存: "))+l(t(i).status.staged.length)+" "+l(t(e)("@76872:个文件")),1)]),_:1})):I("",!0),t(i).status.unstaged.length>0?(r(),Y(O,{key:1,type:"warning"},{default:o(()=>[z(l(t(e)("@76872:未暂存: "))+l(t(i).status.unstaged.length)+" "+l(t(e)("@76872:个文件")),1)]),_:1})):I("",!0)])])):I("",!0)]),_:1})])]),_:1},8,["modelValue","title"])])):I("",!0)}}}),Fo=Je(Nc,[["__scopeId","data-v-6e8b3c6e"]]),Tc={class:"stash-list-button"},Ac={class:"stash-list-content"},Ec={key:0,class:"stash-header"},Pc={class:"stash-stats"},Vc={class:"stat-item"},Mc={class:"stat-number"},Gc={class:"stat-label"},Ic={key:0,class:"stash-actions-header"},Rc={class:"stash-list-container"},Lc={key:0,class:"empty-state"},xc={class:"empty-text"},Uc={class:"empty-hint"},zc={key:1,class:"stash-cards"},Hc={class:"stash-card-content"},Wc={class:"stash-info"},jc={class:"stash-main-info"},qc={class:"stash-id-badge"},Jc={class:"stash-id-text"},Kc={class:"stash-description"},Yc={class:"description-text"},Qc={class:"stash-card-actions"},Zc={class:"stash-content"},Xc={key:0,class:"stash-info-row"},eu={class:"stash-id"},tu={class:"stash-id-value"},su={class:"stash-description"},au={class:"info-label"},ou={class:"stash-description-value"},nu={class:"stash-main-content"},lu=We({__name:"StashListButton",props:{variant:{default:"icon"}},setup(Z){const k=Z,i=Bt(),c=g(!1),p=g(!1),d=g(null),h=g([]),y=g(""),m=g(!1),$=g(""),N=ie(()=>h.value.map(O=>({path:O,name:O.split("/").pop()||O})));function C(){i.getStashList(),c.value=!0}async function B(O,S=!1){try{await i.applyStash(O,S),S&&await i.getStashList()}catch(se){console.error("应用储藏失败:",se)}}async function n(O){Vt.confirm(e("@76872:确定要删除此储藏吗?此操作不可恢复。"),e("@76872:删除储藏"),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),type:"warning"}).then(async()=>{await i.dropStash(O),await i.getStashList()}).catch(()=>{})}async function f(){Vt.confirm(e("@76872:确定要清空所有储藏吗?此操作不可恢复。"),e("@76872:清空所有储藏"),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),type:"warning"}).then(async()=>{await i.clearAllStashes(),await i.getStashList()}).catch(()=>{})}async function D(O){if(O){d.value=O,p.value=!0,m.value=!0,h.value=[],y.value="",$.value="";try{if(!O.id||O.id.length<7){y.value=e("@76872:无效的stash ID"),m.value=!1;return}const se=await(await fetch(`/api/stash-files?stashId=${encodeURIComponent(O.id)}`)).json();se.success&&Array.isArray(se.files)?(h.value=se.files,h.value.length>0?await w(O.id,h.value[0]):y.value=e("@76872:该stash没有变更文件")):y.value=`${e("@76872:获取文件列表失败: ")}${se.error||e("@76872:未知错误")}`}catch(S){y.value=`${e("@76872:获取stash详情失败: ")}${S.message}`}finally{m.value=!1}}}async function w(O,S){m.value=!0,$.value=S;try{const ge=await(await fetch(`/api/stash-file-diff?stashId=${encodeURIComponent(O)}&file=${encodeURIComponent(S)}`)).json();ge.success?y.value=ge.diff||e("@76872:没有变更内容"):y.value=`${e("@76872:获取差异失败: ")}${ge.error||e("@76872:未知错误")}`}catch(se){y.value=`${e("@76872:获取差异失败: ")}${se.message}`}finally{m.value=!1}}function E(O){d.value&&w(d.value.id,O)}async function X(O,S){try{const ge=await(await fetch("/api/open-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:O,context:S})})).json();ge.success?u.success(ge.message):u.error(ge.error||e("@76872:打开文件失败"))}catch(se){u.error(`${e("@76872:打开文件失败: ")}${se.message}`)}}async function V(O,S){try{const ge=await(await fetch("/api/open-with-vscode",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:O,context:S})})).json();ge.success?u.success(ge.message):u.error(ge.error||e("@76872:用VSCode打开文件失败"))}catch(se){u.error(`${e("@76872:用VSCode打开文件失败: ")}${se.message}`)}}return(O,S)=>{const se=at,ge=rt,Se=Zt,ee=ws,G=Cs;return r(),v("div",Tc,[k.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(e)("@76872:查看和管理所有储藏记录"),size:"large","hover-color":"var(--color-info)",onClick:C},{default:o(()=>[a(se,null,{default:o(()=>[a(t(Ks))]),_:1})]),_:1},8,["tooltip"])):(r(),Y(ge,{key:1,type:"info",class:"action-button",onClick:C},{default:o(()=>[z(l(t(e)("@76872:储藏列表")),1)]),_:1})),a(Mt,{modelValue:c.value,"onUpdate:modelValue":S[0]||(S[0]=De=>c.value=De),title:t(e)("@76872:储藏列表 (Git Stash)"),size:"large","show-footer":!1,"custom-class":"stash-list-dialog"},{default:o(()=>[s("div",Ac,[t(i).isLoadingStashes?I("",!0):(r(),v("div",Ec,[s("div",Pc,[s("div",Vc,[a(se,{class:"stat-icon"},{default:o(()=>[a(t(Ks))]),_:1}),s("span",Mc,l(t(i).stashes.length),1),s("span",Gc,l(t(e)("@76872:个储藏")),1)])]),t(i).stashes.length>0?(r(),v("div",Ic,[a(ge,{type:"danger",size:"small",icon:t(ns),onClick:f,loading:t(i).isDroppingStash,class:"clear-all-btn"},{default:o(()=>[z(l(t(e)("@76872:清空所有储藏")),1)]),_:1},8,["icon","loading"])])):I("",!0)])),zt((r(),v("div",Rc,[t(i).stashes.length===0&&!t(i).isLoadingStashes?(r(),v("div",Lc,[a(Se,{description:t(e)("@76872:暂无储藏记录"),"image-size":120},{image:o(()=>[a(se,{class:"empty-icon"},{default:o(()=>[a(t(Ks))]),_:1})]),description:o(()=>[s("p",xc,l(t(e)("@76872:还没有任何储藏记录")),1),s("p",Uc,l(t(e)("@76872:使用 git stash 可以临时保存工作进度")),1)]),_:1},8,["description"])])):(r(),v("div",zc,[(r(!0),v(He,null,st(t(i).stashes,(De,Ie)=>(r(),v("div",{key:De.id,class:Qe(["stash-card",{"stash-card-latest":Ie===0}])},[s("div",Hc,[s("div",Wc,[s("div",jc,[s("div",qc,[a(se,{class:"badge-icon"},{default:o(()=>[a(t(Ks))]),_:1}),s("span",Jc,l(De.id),1),Ie===0?(r(),Y(ee,{key:0,size:"small",type:"success",class:"latest-tag"},{default:o(()=>[z(l(t(e)("@76872:最新")),1)]),_:1})):I("",!0)]),s("div",Kc,[s("span",Yc,l(De.description),1)])])]),s("div",Qc,[a(ge,{size:"small",type:"info",icon:t(Ts),onClick:be=>D(De),loading:m.value,class:"action-btn view-btn"},{default:o(()=>[z(l(t(e)("@76872:查看")),1)]),_:2},1032,["icon","onClick","loading"]),a(ge,{size:"small",type:"success",icon:t(Sa),onClick:be=>B(De.id,!1),loading:t(i).isApplyingStash,class:"action-btn apply-btn"},{default:o(()=>[z(l(t(e)("@76872:应用")),1)]),_:2},1032,["icon","onClick","loading"]),a(ge,{size:"small",type:"primary",icon:t(Es),onClick:be=>B(De.id,!0),loading:t(i).isApplyingStash,class:"action-btn apply-pop-btn"},{default:o(()=>[z(l(t(e)("@76872:应用并删除")),1)]),_:2},1032,["icon","onClick","loading"]),a(ge,{size:"small",type:"danger",icon:t(ns),onClick:be=>n(De.id),loading:t(i).isDroppingStash,class:"action-btn delete-btn"},{default:o(()=>[z(l(t(e)("@76872:删除")),1)]),_:2},1032,["icon","onClick","loading"])])])],2))),128))]))])),[[G,t(i).isLoadingStashes]])])]),_:1},8,["modelValue","title"]),a(Mt,{modelValue:p.value,"onUpdate:modelValue":S[1]||(S[1]=De=>p.value=De),title:t(e)("@76872:储藏详情"),"custom-class":"stash-detail-dialog",size:"extra-large",type:"flex",heightMode:"fixed","close-on-click-modal":!1},{default:o(()=>[s("div",Zc,[d.value?(r(),v("div",Xc,[s("div",eu,[S[2]||(S[2]=s("span",{class:"info-label"},"Stash ID:",-1)),s("code",tu,l(d.value.id),1)]),s("div",su,[s("span",au,l(t(e)("@76872:描述:")),1),s("span",ou,l(d.value.description),1)])])):I("",!0),s("div",nu,[a(Na,{files:N.value,diffContent:y.value,selectedFile:$.value,context:"stash-detail",emptyText:t(e)("@76872:该stash没有变更文件"),onFileSelect:E,onOpenFile:X,onOpenWithVscode:V},null,8,["files","diffContent","selectedFile","emptyText"])])])]),_:1},8,["modelValue","title"])])}}}),Bo=Je(lu,[["__scopeId","data-v-1a804435"]]),iu={key:0,class:"stash-selected-files-button"},ru={class:"stash-dialog-content"},cu={class:"stash-info-card"},uu={class:"info-icon"},du={class:"info-content"},pu={class:"stash-options"},fu={class:"options-title"},mu={class:"option-item"},vu={class:"option-label"},hu={class:"option-desc"},gu={class:"option-item"},yu={class:"option-label"},Cu={class:"option-desc"},_u={key:0,class:"locked-count"},bu={class:"stash-preview"},wu={class:"preview-title"},ku={class:"file-count-info"},$u={class:"file-list-preview"},Su={key:0,class:"more-files"},Du={class:"dialog-footer"},Fu={class:"footer-actions"},Bu=["disabled"],Ou=We({__name:"StashSelectedFilesButton",props:{selectedFiles:{},variant:{default:"icon"}},emits:["success"],setup(Z,{emit:k}){const i=Z,c=k,p=Bt(),d=Ut(),h=g(!1),y=g(""),m=g(!0),$=g(!1),N=ie(()=>i.selectedFiles.length>0),C=ie(()=>i.selectedFiles.filter(D=>{const w=D.replace(/\\/g,"/");return d.lockedFiles.some(E=>{const X=E.replace(/\\/g,"/");return w===X})}));function B(){if(!N.value){u.warning(e("@76872:请先选择要储藏的文件"));return}y.value="",$.value=!1,h.value=!0}async function n(){try{let D=i.selectedFiles;if($.value&&C.value.length>0&&(D=i.selectedFiles.filter(w=>{const E=w.replace(/\\/g,"/");return!d.lockedFiles.some(X=>{const V=X.replace(/\\/g,"/");return E===V})}),D.length===0)){u.warning(e("@76872:所有选中的文件都是锁定文件,无法储藏"));return}await p.savePartialStash(D,y.value,m.value),h.value=!1,c("success")}catch(D){console.error("储藏选中文件失败:",D)}}function f(D){if(!(D.isComposing||D.keyCode===229)&&D.key==="Enter"&&!D.shiftKey){if(D.preventDefault(),p.isSavingStash)return;n()}}return(D,w)=>{const E=at,X=rt,V=Tt,O=bs,S=Hs,se=ws,ge=_s;return N.value?(r(),v("div",iu,[i.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(e)("@76872:储藏选中的文件"),size:"large",disabled:t(p).isSavingStash||!N.value,"hover-color":"var(--color-warning)",onClick:B},{default:o(()=>[t(p).isSavingStash?(r(),Y(E,{key:0,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(At,{key:1,"icon-class":"git-stash"}))]),_:1},8,["tooltip","disabled"])):(r(),Y(X,{key:1,type:"warning",class:"action-button",onClick:B,loading:t(p).isSavingStash,disabled:!N.value},{default:o(()=>[z(l(t(e)("@76872:储藏选中文件"))+" ("+l(i.selectedFiles.length)+") ",1)]),_:1},8,["loading","disabled"])),a(Mt,{modelValue:h.value,"onUpdate:modelValue":w[4]||(w[4]=Se=>h.value=Se),title:t(e)("@76872:储藏选中的文件"),size:"medium","close-on-click-modal":!1,"custom-class":"stash-dialog"},{footer:o(()=>[s("div",Du,[s("div",Fu,[s("button",{type:"button",class:"dialog-cancel-btn",onClick:w[3]||(w[3]=Se=>h.value=!1)},l(t(e)("@76872:取消")),1),s("button",{type:"button",class:"dialog-confirm-btn",onClick:n,disabled:t(p).isSavingStash},[t(p).isSavingStash?(r(),Y(E,{key:1,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(E,{key:0},{default:o(()=>[a(t(Es))]),_:1})),s("span",null,l(t(e)("@76872:储藏")),1)],8,Bu)])])]),default:o(()=>[s("div",ru,[s("div",cu,[s("div",uu,[a(At,{"icon-class":"git-stash"})]),s("div",du,[s("h4",null,l(t(e)("@76872:储藏选中的文件")),1),s("p",null,l(t(e)("@76872:将选中的文件更改临时保存,稍后可以重新应用")),1)])]),a(ge,{"label-position":"top",class:"stash-form"},{default:o(()=>[a(O,{label:t(e)("@76872:储藏说明")},{default:o(()=>[a(V,{modelValue:y.value,"onUpdate:modelValue":w[0]||(w[0]=Se=>y.value=Se),placeholder:t(e)("@76872:为这次储藏添加描述信息(可选)"),clearable:"",onKeydown:f,rows:2,type:"textarea",resize:"none",maxlength:"200","show-word-limit":""},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s("div",pu,[s("h5",fu,[a(E,null,{default:o(()=>[a(t(na))]),_:1}),z(" "+l(t(e)("@76872:储藏选项")),1)]),s("div",mu,[a(S,{modelValue:m.value,"onUpdate:modelValue":w[1]||(w[1]=Se=>m.value=Se),size:"large"},{default:o(()=>[s("span",vu,l(t(e)("@76872:包含未跟踪文件")),1)]),_:1},8,["modelValue"]),s("p",hu,l(t(e)("@76872:对于未跟踪的文件,同时储藏 (--include-untracked)")),1)]),s("div",gu,[a(S,{modelValue:$.value,"onUpdate:modelValue":w[2]||(w[2]=Se=>$.value=Se),size:"large"},{default:o(()=>[s("span",yu,l(t(e)("@76872:排除锁定文件")),1)]),_:1},8,["modelValue"]),s("p",Cu,[z(l(t(e)("@76872:不储藏被锁定的文件,保持其当前状态"))+" ",1),C.value.length>0?(r(),v("span",_u," ("+l(t(e)("@76872:选中"))+" "+l(C.value.length)+" "+l(t(e)("@76872:个锁定文件"))+") ",1)):I("",!0)])])]),s("div",bu,[s("h5",wu,[a(At,{"icon-class":"git-stash",style:{"font-size":"16px"}}),z(" "+l(t(e)("@76872:将要储藏的文件")),1)]),s("div",ku,[a(se,{type:"warning"},{default:o(()=>[z(l(t(e)("@76872:已选中: "))+l(i.selectedFiles.length)+" "+l(t(e)("@76872:个文件")),1)]),_:1})]),s("div",$u,[(r(!0),v(He,null,st(i.selectedFiles.slice(0,10),Se=>(r(),v("div",{key:Se,class:"file-preview-item"},l(Se),1))),128)),i.selectedFiles.length>10?(r(),v("div",Su,l(t(e)("@76872:...还有"))+" "+l(i.selectedFiles.length-10)+" "+l(t(e)("@76872:个文件")),1)):I("",!0)])])]),_:1})])]),_:1},8,["modelValue","title"])])):I("",!0)}}}),Nu=Je(Ou,[["__scopeId","data-v-c70847d2"]]),Tu={class:"git-command-preview"},Au={class:"preview-container"},Eu={class:"preview-title"},Pu={class:"preview-content code-command"},Vu=We({__name:"GitCommandPreview",props:{command:{},title:{default:e("@34292:Git命令预览:")},copyButtonText:{default:e("@34292:复制命令")},placeholder:{default:"<命令内容>"}},setup(Z){const k=Z,i=ie(()=>k.command||k.placeholder);async function c(){if(!k.command){u.warning(e("@34292:没有可复制的命令内容"));return}try{await navigator.clipboard.writeText(k.command),u.success(e("@34292:命令已复制到剪贴板"))}catch(p){u.error(`${e("@34292:复制失败: ")}${p.message}`)}}return(p,d)=>{const h=at;return r(),v("div",Tu,[s("div",Au,[s("div",Eu,l(p.title),1),s("div",Pu,l(i.value),1),a(lt,{tooltip:p.copyButtonText,size:"small","custom-class":"copy-command-btn",onClick:c},{default:o(()=>[a(h,null,{default:o(()=>[a(t(ys))]),_:1})]),_:1},8,["tooltip"])])])}}}),Oo=Je(Vu,[["__scopeId","data-v-a3c3740a"]]),Mu={class:"merge-branch-button"},Gu={class:"merge-dialog-content"},Iu={class:"merge-info-card"},Ru={class:"info-icon"},Lu={class:"info-content"},xu={class:"merge-options"},Uu={class:"options-title"},zu={class:"options-horizontal"},Hu={key:0,class:"default-message-hint"},Wu={class:"hint-content"},ju=We({__name:"MergeBranchButton",props:{variant:{default:"icon"}},setup(Z){const k=Z,i=Bt(),c=g(!1),p=g(""),d=g({noCommit:!1,noFf:!1,squash:!1,message:""}),h=g("all"),y=ie(()=>{const n=i.allBranches.filter(f=>f!==i.currentBranch);return h.value==="local"?n.filter(f=>!f.includes("origin/")):h.value==="remote"?n.filter(f=>f.includes("origin/")):n});function m(){p.value="",d.value={noFf:!1,squash:!1,noCommit:!1,message:""},h.value="all",c.value=!0,i.allBranches.length===0&&i.getAllBranches();const n=i.allBranches.filter(f=>f!==i.currentBranch);n.includes("origin/master")?p.value="origin/master":n.includes("origin/main")&&(p.value="origin/main")}async function $(){if(N.value)try{await navigator.clipboard.writeText(N.value),u.success(e("@76872:默认合并消息已复制"))}catch{u.error(e("@76872:复制失败"))}}Ze(h,()=>{p.value&&!y.value.includes(p.value)&&(p.value="")});const N=ie(()=>{if(!p.value)return"";const n=i.currentBranch||"current";return`Merge branch '${p.value}' into ${n}`}),C=ie(()=>{if(!p.value)return"";let n=`git merge ${p.value}`;if(d.value.noFf&&(n+=" --no-ff"),d.value.squash&&(n+=" --squash"),d.value.noCommit&&(n+=" --no-commit"),!d.value.noCommit){const f=d.value.message||N.value;f&&(n+=` -m "${f}"`)}return n});async function B(){if(!p.value){u({message:e("@76872:请选择要合并的分支"),type:"warning"});return}try{await i.mergeBranch(p.value,d.value)?(c.value=!1,await Promise.all([i.fetchStatus(),i.fetchLog(!1),i.getBranchStatus(!0)])):(i.pendingMergeMessage=d.value.message||N.value,c.value=!1,await Promise.all([i.fetchStatus(),i.fetchLog(!1),i.getBranchStatus(!0)]))}catch(n){console.error("合并分支操作发生错误:",n),i.pendingMergeMessage=d.value.message||N.value,c.value=!1,await Promise.all([i.fetchStatus(),i.fetchLog(!1),i.getBranchStatus(!0)])}}return(n,f)=>{const D=at,w=rt,E=Da,X=Ws,V=bs,O=ss,S=ts,se=Hs,ge=gt,Se=Tt,ee=ea("Info-Filled"),G=ea("Document-Copy"),De=_s;return r(),v("div",Mu,[k.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):t(e)("@76872:合并其他分支到当前分支"),size:"large",disabled:t(i).hasConflictedFiles||t(i).isGitMerging,"hover-color":"var(--color-primary)",onClick:m},{default:o(()=>[t(i).isGitMerging?(r(),Y(D,{key:0,class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(At,{key:1,"icon-class":"git-merge"}))]),_:1},8,["tooltip","disabled"])):(r(),Y(w,{key:1,type:"primary",class:"action-button",onClick:m,loading:t(i).isGitMerging,disabled:t(i).hasConflictedFiles},{default:o(()=>[z(l(t(e)("@76872:合并分支")),1)]),_:1},8,["loading","disabled"])),a(Mt,{modelValue:c.value,"onUpdate:modelValue":f[6]||(f[6]=Ie=>c.value=Ie),title:t(e)("@76872:合并分支"),size:"medium","close-on-click-modal":!1,"show-footer":"","confirm-text":t(e)("@76872:合并"),"cancel-text":t(e)("@76872:取消"),"confirm-loading":t(i).isGitMerging,"custom-class":"merge-dialog",onConfirm:B},{default:o(()=>[s("div",Gu,[s("div",Iu,[s("div",Ru,[a(At,{"icon-class":"git-merge"})]),s("div",Lu,[s("h4",null,l(t(e)("@76872:合并分支到当前分支")),1),s("p",null,[z(l(t(e)("@76872:将选择的分支合并到"))+" ",1),s("code",null,l(t(i).currentBranch),1)])])]),a(De,{"label-position":"top",class:"merge-form"},{default:o(()=>[a(V,{label:t(e)("@76872:分支类型")},{default:o(()=>[a(X,{modelValue:h.value,"onUpdate:modelValue":f[0]||(f[0]=Ie=>h.value=Ie),size:"default"},{default:o(()=>[a(E,{value:"all"},{default:o(()=>[z(l(t(e)("@76872:所有分支")),1)]),_:1}),a(E,{value:"local"},{default:o(()=>[z(l(t(e)("@76872:本地分支")),1)]),_:1}),a(E,{value:"remote"},{default:o(()=>[z(l(t(e)("@76872:远程分支")),1)]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["label"]),a(V,{label:t(e)("@76872:选择分支")},{default:o(()=>[a(S,{modelValue:p.value,"onUpdate:modelValue":f[1]||(f[1]=Ie=>p.value=Ie),placeholder:t(e)("@76872:选择要合并的分支"),filterable:"",clearable:"",style:{width:"100%"}},{default:o(()=>[(r(!0),v(He,null,st(y.value,Ie=>(r(),Y(O,{key:Ie,label:Ie,value:Ie},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),_:1},8,["label"]),a(Oo,{command:C.value,title:t(e)("@76872:合并命令预览:"),placeholder:t(e)("@76872:请先选择要合并的分支")},null,8,["command","title","placeholder"]),s("div",xu,[s("h5",Uu,[a(D,null,{default:o(()=>[a(t(na))]),_:1}),z(" "+l(t(e)("@76872:合并选项")),1)]),s("div",zu,[a(ge,{content:t(e)("@76872:始终创建合并提交,即使可以快进 (--no-ff)"),placement:"top","show-after":200},{default:o(()=>[a(se,{modelValue:d.value.noFf,"onUpdate:modelValue":f[2]||(f[2]=Ie=>d.value.noFf=Ie),size:"large"},{default:o(()=>[z(l(t(e)("@76872:禁用快进合并")),1)]),_:1},8,["modelValue"])]),_:1},8,["content"]),a(ge,{content:t(e)("@76872:将所有提交压缩成一个提交 (--squash)"),placement:"top","show-after":200},{default:o(()=>[a(se,{modelValue:d.value.squash,"onUpdate:modelValue":f[3]||(f[3]=Ie=>d.value.squash=Ie),size:"large"},{default:o(()=>[z(l(t(e)("@76872:压缩合并")),1)]),_:1},8,["modelValue"])]),_:1},8,["content"]),a(ge,{content:t(e)("@76872:执行合并但不自动提交,可以手动检查后提交 (--no-commit)"),placement:"top","show-after":200},{default:o(()=>[a(se,{modelValue:d.value.noCommit,"onUpdate:modelValue":f[4]||(f[4]=Ie=>d.value.noCommit=Ie),size:"large"},{default:o(()=>[z(l(t(e)("@76872:不自动提交")),1)]),_:1},8,["modelValue"])]),_:1},8,["content"])])]),d.value.noCommit?I("",!0):(r(),Y(V,{key:0,label:t(e)("@76872:合并消息(可选)")},{default:o(()=>[a(Se,{modelValue:d.value.message,"onUpdate:modelValue":f[5]||(f[5]=Ie=>d.value.message=Ie),type:"textarea",rows:2,placeholder:t(e)("@76872:自定义合并提交消息"),clearable:"",resize:"none",maxlength:"200","show-word-limit":""},null,8,["modelValue","placeholder"]),p.value&&!d.value.message?(r(),v("div",Hu,[s("div",Wu,[a(D,null,{default:o(()=>[a(ee)]),_:1}),s("span",null,l(t(e)("@76872:默认消息:"))+l(N.value),1)]),a(w,{type:"primary",link:"",size:"small",onClick:$,class:"copy-btn"},{default:o(()=>[a(D,null,{default:o(()=>[a(G)]),_:1})]),_:1})])):I("",!0)]),_:1},8,["label"]))]),_:1})])]),_:1},8,["modelValue","title","confirm-text","cancel-text","confirm-loading"])])}}}),No=Je(ju,[["__scopeId","data-v-dba5f7f1"]]),qu={key:0,class:"unstage-all-button"},Ju={key:0},Ku=We({__name:"UnstageAllButton",props:{from:{default:"form"}},emits:["click"],setup(Z,{emit:k}){const i=Z,c=k,p=Bt(),d=ie(()=>p.fileList.filter(N=>["staged","renamed","added"].includes(N.type)).length),h=ie(()=>d.value>0),y=ie(()=>!h.value),m=ie(()=>h.value?"取消暂存所有文件(git reset HEAD)":"没有已暂存的更改");async function $(){c("click");try{await p.resetHead()&&p.fetchStatus()}catch(N){console.error("取消暂存失败:",N)}}return(N,C)=>{const B=at,n=rt,f=gt;return h.value?(r(),v("div",qu,[i.from==="status"?(r(),Y(lt,{key:0,tooltip:m.value,size:"large",disabled:y.value,loading:t(p).isResetting,"hover-color":"var(--color-warning)",onClick:$},{default:o(()=>[a(B,null,{default:o(()=>[a(t(an))]),_:1})]),_:1},8,["tooltip","disabled","loading"])):(r(),Y(f,{key:1,content:m.value,placement:"top","show-after":200},{default:o(()=>[a(n,{type:"warning",onClick:$,loading:t(p).isResetting,disabled:y.value,class:Qe(`from-${i.from}`)},{default:o(()=>[C[0]||(C[0]=z(" 取消暂存所有 ")),d.value>0?(r(),v("span",Ju,"("+l(d.value)+")",1)):I("",!0)]),_:1},8,["loading","disabled","class"])]),_:1},8,["content"]))])):I("",!0)}}}),To=Je(Ku,[["__scopeId","data-v-4acda07f"]]),Yu=We({__name:"ResetToRemoteButton",props:{variant:{default:"icon"}},setup(Z){const k=Z,i=Bt(),c=ie(()=>i.fileList.length>0||i.branchAhead>0);async function p(){try{await Vt.confirm(e("@76872:确定要重置当前分支吗?",{branch:i.currentBranch||"unknown"}),e("@76872:重置到远程")+(i.currentBranch?` origin/${i.currentBranch}`:""),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),confirmButtonClass:"el-button--danger",dangerouslyUseHTMLString:!0,type:"warning"}),await i.resetToRemote(i.currentBranch)&&(i.fetchStatus(),i.fetchLog())}catch(d){d!=="cancel"&&console.error("重置到远程失败:",d)}}return(d,h)=>{const y=rt,m=gt;return c.value?(r(),v(He,{key:0},[k.variant==="icon"?(r(),Y(lt,{key:0,"icon-class":"git-reset",tooltip:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):t(e)("@76872:重置到远程"),size:"large","hover-color":"#f56c6c",disabled:!t(i).hasUpstream||t(i).hasConflictedFiles||t(i).isResetting,onClick:p},null,8,["tooltip","disabled"])):(r(),Y(m,{key:1,content:t(i).hasConflictedFiles?t(e)("@76872:存在冲突文件,请先解决冲突"):"git reset --hard origin/branch",placement:"top"},{default:o(()=>[a(y,{type:"danger",onClick:p,loading:t(i).isResetting,disabled:!t(i).hasUpstream||t(i).hasConflictedFiles,class:"action-button danger-button"},{default:o(()=>[a(At,{"icon-class":"git-reset","class-name":"git-reset-icon"}),z(" "+l(t(e)("@76872:重置到远程")),1)]),_:1},8,["loading","disabled"])]),_:1},8,["content"]))],64)):I("",!0)}}}),Ao=Je(Yu,[["__scopeId","data-v-11a0a53f"]]),Qu=We({__name:"DiscardAllChangesButton",props:{variant:{default:"icon"},size:{default:"large"}},setup(Z){const k=Z,i=Bt(),c=ie(()=>i.fileList.length>0);async function p(){try{await Vt.confirm(e("@76872:确定要清除本地所有更改吗?"),e("@76872:清除所有本地更改"),{confirmButtonText:e("@76872:确定"),cancelButtonText:e("@76872:取消"),confirmButtonClass:"el-button--danger",dangerouslyUseHTMLString:!0,type:"warning"}),await i.discardAllChanges()&&(i.fetchStatus(),i.fetchLog())}catch(d){d!=="cancel"&&console.error("清除本地更改失败:",d)}}return(d,h)=>{const y=at,m=rt,$=gt;return c.value?(r(),v(He,{key:0},[k.variant==="icon"?(r(),Y(lt,{key:0,tooltip:t(e)("@76872:清除所有本地更改"),size:k.size,"hover-color":"#f56c6c",disabled:t(i).isResetting,onClick:p},{default:o(()=>[a(y,null,{default:o(()=>[a(t(xa))]),_:1})]),_:1},8,["tooltip","size","disabled"])):(r(),Y($,{key:1,content:"git reset --hard && git clean -fd",placement:"top"},{default:o(()=>[a(m,{type:"danger",icon:t(xa),onClick:p,loading:t(i).isResetting,class:"action-button danger-button"},{default:o(()=>[z(l(t(e)("@76872:清除所有本地更改")),1)]),_:1},8,["icon","loading"])]),_:1}))],64)):I("",!0)}}}),Zu=Je(Qu,[["__scopeId","data-v-fefb30e1"]]),Xu={class:"card git-status-card flex flex-col"},ed={class:"status-header"},td={class:"title-row"},sd={class:"header-actions"},ad={class:"flex items-center"},od=["element-loading-text"],nd={key:0,class:"status-box not-git-repo"},ld={class:"empty-status"},id={class:"empty-title"},rd={class:"empty-desc"},cd={key:1,class:"status-box-wrap"},ud={key:0,class:"upstream-tip"},dd={class:"tip-header"},pd={class:"tip-title"},fd={class:"tip-body"},md={class:"tip-text"},vd={class:"tip-actions"},hd={key:1,class:"branch-status-info"},gd={class:"branch-sync-status"},yd={class:"sync-status-content"},Cd={class:"status-badges"},_d={class:"badge-content"},bd={class:"badge-content"},wd={key:2,class:"file-list-wrapper"},kd={class:"file-list-header"},$d={class:"header-left"},Sd={key:2,class:"file-count"},Dd={class:"view-mode-toggle"},Fd={key:0,class:"selection-mode-banner"},Bd={class:"banner-content"},Od={class:"banner-text"},Nd={class:"banner-actions"},Td={class:"file-list-container"},Ad={key:0,class:"tree-group"},Ed={class:"file-count"},Pd={key:1,class:"tree-group"},Vd={class:"file-count"},Md={key:2,class:"tree-group"},Gd={class:"file-count"},Id={key:3,class:"tree-group"},Rd={class:"file-count"},Ld={key:3,class:"empty-status"},xd={class:"empty-icon"},Ud={class:"empty-text"},zd={class:"empty-subtext"},Hd={class:"lock-feature-description"},Wd={class:"description-header"},jd={class:"description-title"},qd={class:"description-content"},Jd={key:0,class:"empty-locked-files"},Kd={class:"empty-icon"},Yd={class:"empty-tip"},Qd={key:1,class:"locked-files-list"},Zd={class:"locked-files-header"},Xd={class:"locked-file-items"},ep={class:"file-info"},tp={class:"file-path-container"},sp={class:"file-name"},ap={class:"file-directory"},op={class:"file-actions"},np={class:"pull-error-content"},lp={key:0},ip={key:1},rp={class:"pull-error-detail"},cp={class:"pull-error-label"},up={class:"pull-error-pre"},dp={key:0,class:"pull-error-detail"},pp={class:"pull-error-label"},fp={class:"pull-error-pre"},ja="zen-gitsync-file-list-view-mode",mp=We({__name:"GitStatus",props:{initialDirectory:{type:String,default:""}},setup(Z,{expose:k}){const i=Z,c=Bt(),p=Ut(),d=ie(()=>c.isLoadingStatus),h=g(""),y=g(""),m=g(null),$=g(!1),N=g(!1),C=g(-1),B=g("compare"),n=g(""),f=g(""),D=g({});function w(x){return!!D.value[x]}const E=g(!0);function X(){E.value=!E.value}const V=g(new Set),O=g(!1);function S(){O.value=!O.value,O.value||V.value.clear()}function se(x){V.value.has(x)?V.value.delete(x):V.value.add(x)}function ge(){V.value.size===c.fileList.length?V.value.clear():V.value=new Set(c.fileList.map(x=>x.path))}function Se(x){return V.value.has(x)}const ee=ie(()=>Array.from(V.value)),G=ie(()=>c.fileList.map(x=>({path:x.path,name:x.path.split("/").pop()||x.path,type:x.type,locked:Pe(x.path)})));async function De(x){B.value==="compare"?await ne(x):await ve(x)}async function Ie(x,ce){try{const Ne=await(await fetch("/api/open-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:x,context:ce})})).json();Ne.success?u.success(Ne.message):u.error(Ne.error||e("@13D1C:打开文件失败"))}catch(we){u.error(`${e("@13D1C:打开文件失败: ")}${we.message}`)}}async function be(x,ce){try{const Ne=await(await fetch("/api/open-with-vscode",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:x,context:ce})})).json();Ne.success?u.success(Ne.message):u.error(Ne.error||e("@13D1C:用VSCode打开文件失败"))}catch(we){u.error(`${e("@13D1C:用VSCode打开文件失败: ")}${we.message}`)}}const Q=g(!1),ye=g({staged:!1,unstaged:!1,untracked:!1,conflicted:!1}),ue=localStorage.getItem(ja),T=g(ue||"list"),j=g(i.initialDirectory||"");async function oe(){try{if(!j.value){const ce=await(await fetch("/api/current_directory")).json();j.value=ce.directory||e("@13D1C:未知目录")}if(!c.isGitRepo)return;await c.fetchStatus(),await c.getBranchStatus(),u({message:e("@13D1C:Git 状态已刷新"),type:"success"})}catch(x){u({message:"刷新失败: "+x.message,type:"error"})}}async function ae(x){try{await Vt.confirm(`确认解锁该文件?
|
|
26
26
|
${x}`,e("@13D1C:确认解锁"),{type:"warning",confirmButtonText:e("@13D1C:解锁"),cancelButtonText:e("@13D1C:取消")}),await p.unlockFile(x)}catch{}}async function K(){if(p.lockedFiles.length)try{await Vt.confirm(`${e("@13D1C:确认解锁所有已锁定文件?共 ")}${p.lockedFiles.length}${e("@13D1C: 个。")}`,e("@13D1C:清空全部锁定"),{type:"warning",confirmButtonText:e("@13D1C:全部解锁"),cancelButtonText:e("@13D1C:取消")});const x=[...p.lockedFiles];await Promise.all(x.map(ce=>p.unlockFile(ce))),await p.loadLockedFiles(),u.success(e("@13D1C:已清空所有文件锁定"))}catch{}}async function ve(x){try{N.value=!0,y.value="",n.value="",f.value="",m.value=null,h.value=x,C.value=c.fileList.findIndex(we=>we.path===x);const ce=c.fileList[C.value];if(ce&&ce.type==="untracked")try{const Ne=await(await fetch(`/api/file-content?file=${encodeURIComponent(x)}`)).json();Ne.success&&Ne.content?y.value=`diff --git a/${x} b/${x}
|
|
27
27
|
${e("@13D1C:新文件: ")}${x}
|
|
28
28
|
--- /dev/null
|
|
@@ -55,12 +55,12 @@ ${T.stdout}
|
|
|
55
55
|
${T.stderr}
|
|
56
56
|
|
|
57
57
|
`}T.error&&(j+=`错误信息:
|
|
58
|
-
${T.error}`),await navigator.clipboard.writeText(j.trim()),u({message:e("@81F0F:输出已复制到剪贴板"),type:"success",zIndex:1e5})}catch(j){u.error(`${e("@81F0F:复制失败: ")}${j.message}`)}}function ye(){if(!k.socket){console.error(e("@81F0F:Socket实例不可用"));return}k.socket.on("initial_command_history",T=>{i.value=T.history,h.value=!0}),k.socket.on("command_history_update",T=>{i.value.unshift(T.newCommand),i.value.length>100&&i.value.pop(),h.value=!0}),k.socket.on("full_command_history",T=>{i.value=T.history,c.value=!1,h.value=!0}),k.socket.on("command_history_cleared",T=>{T.success&&(i.value=[],u.success(e("@81F0F:命令历史已清空"))),p.value=!1}),k.socket.on("connect",()=>{h.value=!0,u.success(e("@81F0F:已连接到实时命令历史"))}),k.socket.on("disconnect",()=>{h.value=!1,u.warning(e("@81F0F:实时命令历史连接已断开"))})}function ue(){k.socket&&(k.socket.off("initial_command_history"),k.socket.off("command_history_update"),k.socket.off("full_command_history"),k.socket.off("command_history_cleared"))}return is(()=>{ye(),k.socket||(console.log(e("@81F0F:尝试初始化Socket连接")),k.initSocketConnection())}),zs(()=>{ue()}),(T,j)=>{const oe=at,ae=ws,K=ss,ve=ts,fe=Tt,H=gt,ne=Zt,me=ho;return r(),v(He,null,[a(lt,{tooltip:t(e)("@81F0F:查看Git命令历史"),size:"large",onClick:X},{default:o(()=>[a(oe,null,{default:o(()=>[a(t(Fa))]),_:1})]),_:1},8,["tooltip"]),a(Mt,{modelValue:$.value,"onUpdate:modelValue":j[3]||(j[3]=Fe=>$.value=Fe),title:t(e)("@81F0F:Git 命令历史"),"destroy-on-close":"","custom-class":"command-history-dialog","append-to-body":!0},{default:o(()=>[s("div",s1,[a(ae,{type:h.value?"success":"danger",size:"small",effect:"dark",class:"socket-status"},{default:o(()=>[z(l(h.value?t(e)("@81F0F:实时更新"):t(e)("@81F0F:未连接")),1)]),_:1},8,["type"]),s("div",a1,[a(ve,{modelValue:N.value,"onUpdate:modelValue":j[0]||(j[0]=Fe=>N.value=Fe),size:"small",class:"filter-select"},{default:o(()=>[a(K,{label:"全部状态",value:"all"}),a(K,{label:`成功 (${f.value})`,value:"success"},null,8,["label"]),a(K,{label:`失败 (${D.value})`,value:"error"},null,8,["label"])]),_:1},8,["modelValue"]),a(ve,{modelValue:C.value,"onUpdate:modelValue":j[1]||(j[1]=Fe=>C.value=Fe),size:"small",class:"filter-select"},{default:o(()=>[a(K,{label:"全部命令",value:"all"}),a(K,{label:`Git 命令 (${w.value})`,value:"git"},null,8,["label"]),a(K,{label:`其他命令 (${E.value})`,value:"other"},null,8,["label"])]),_:1},8,["modelValue"]),a(fe,{modelValue:B.value,"onUpdate:modelValue":j[2]||(j[2]=Fe=>B.value=Fe),size:"small",placeholder:"搜索命令或输出...",clearable:"",class:"search-input"},{prefix:o(()=>[a(oe,null,{default:o(()=>[a(t(no))]),_:1})]),_:1},8,["modelValue"])]),s("div",o1,[a(H,{content:t(e)("@81F0F:只复制命令列表(不含输出)"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[s("button",{class:"modern-btn copy-commands-button enhanced-btn",onClick:S,disabled:n.value.length===0||m.value},[m.value?(r(),Y(oe,{key:1,class:"btn-icon is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(oe,{key:0,class:"btn-icon"},{default:o(()=>[a(t(ys))]),_:1})),s("span",l1,l(t(e)("@81F0F:命令")),1)],8,n1)]),_:1},8,["content"]),a(H,{content:t(e)("@81F0F:复制完整命令历史(含输出)"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[s("button",{class:"modern-btn copy-all-button enhanced-btn",onClick:O,disabled:n.value.length===0||d.value},[d.value?(r(),Y(oe,{key:1,class:"btn-icon is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(oe,{key:0,class:"btn-icon"},{default:o(()=>[a(t(ys))]),_:1})),s("span",r1,l(t(e)("@81F0F:全部")),1)],8,i1)]),_:1},8,["content"]),a(H,{content:t(e)("@81F0F:清空命令历史"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[s("button",{class:"modern-btn clear-button enhanced-btn danger-btn",onClick:se,disabled:i.value.length===0||p.value},[p.value?(r(),Y(oe,{key:1,class:"btn-icon is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(oe,{key:0,class:"btn-icon"},{default:o(()=>[a(t(ns))]),_:1})),s("span",u1,l(t(e)("@81F0F:清空")),1)],8,c1)]),_:1},8,["content"])])]),s("div",d1,[c.value&&i.value.length===0?(r(),v("div",p1,[a(oe,{class:"loading-icon is-loading"},{default:o(()=>[a(t(Ht))]),_:1}),s("div",f1,l(t(e)("@81F0F:加载命令历史...")),1)])):i.value.length===0?(r(),Y(ne,{key:1,description:t(e)("@81F0F:暂无命令历史")},null,8,["description"])):n.value.length===0?(r(),Y(ne,{key:2,description:t(e)("@81F0F:没有匹配的命令")},null,8,["description"])):(r(),v("div",m1,[(r(!0),v(He,null,st(n.value,(Fe,Ke)=>(r(),v("div",{key:Ke,class:Qe(["history-item",{"is-error":!Fe.success}])},[s("div",{class:"item-header",onClick:Xe=>ee(Ke)},[s("div",h1,[s("div",g1,[a(ae,{size:"small",type:Fe.success?"success":"danger",effect:"dark",class:"status-tag"},{default:o(()=>[z(l(Fe.success?t(e)("@81F0F:成功"):t(e)("@81F0F:失败")),1)]),_:2},1032,["type"]),s("code",null,l(Fe.command),1)]),s("div",y1,[s("span",C1,l(ge(Fe.timestamp)),1),s("span",_1,l(t(e)("@81F0F:耗时: "))+l(Se(Fe.executionTime)),1)])]),s("div",b1,[a(lt,{tooltip:t(e)("@81F0F:复制命令"),"custom-class":"item-copy-button",onClick:Jt(Xe=>De(Fe.command),["stop"])},{default:o(()=>[a(oe,null,{default:o(()=>[a(t(ys))]),_:1})]),_:2},1032,["tooltip","onClick"]),s("div",{class:Qe(["expand-button",{"is-expanded":G(Ke)}])},[a(oe,{class:"btn-icon"},{default:o(()=>[G(Ke)?(r(),Y(t(uo),{key:0})):(r(),Y(t(ds),{key:1}))]),_:2},1024)],2)])],8,v1),G(Ke)?(r(),v("div",w1,[Fe.stdout?(r(),v("div",k1,[s("div",$1,[s("h4",null,l(t(e)("@81F0F:标准输出")),1),a(H,{content:t(e)("@81F0F:复制输出"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[s("button",{class:"modern-btn output-copy-button enhanced-btn",onClick:Xe=>Q(Fe)},[a(oe,{class:"btn-icon"},{default:o(()=>[a(t(ys))]),_:1})],8,S1)]),_:2},1032,["content"])]),s("pre",D1,l(Fe.stdout),1),Fe.isStdoutTruncated?(r(),v("div",F1,[a(me,{type:"info",closable:!1,"show-icon":""},{default:o(()=>[z(l(t(e)("@81F0F:输出内容过长已被截断,请直接执行命令查看完整输出")),1)]),_:1})])):I("",!0)])):I("",!0),Fe.stderr?(r(),v("div",{key:1,class:Qe(["output-section",be(Fe.command)?"":"error"])},[s("div",B1,[s("h4",null,l(be(Fe.command)?t(e)("@81F0F:输出信息"):t(e)("@81F0F:错误输出")),1)]),s("pre",O1,l(Fe.stderr),1),Fe.isStderrTruncated?(r(),v("div",N1,[a(me,{type:"info",closable:!1,"show-icon":""},{default:o(()=>[z(l(be(Fe.command)?t(e)("@81F0F:输出信息"):t(e)("@81F0F:错误输出"))+l(t(e)("@81F0F:内容过长已被截断,请直接执行命令查看完整输出")),1)]),_:2},1024)])):I("",!0)],2)):I("",!0),Fe.error?(r(),v("div",T1,[s("div",A1,[s("h4",null,l(t(e)("@81F0F:错误信息")),1)]),s("pre",E1,l(Fe.error),1)])):I("",!0)])):I("",!0)],2))),128))]))])]),_:1},8,["modelValue","title"])],64)}}}),V1=Je(P1,[["__scopeId","data-v-e3a2bda1"]]),M1={class:"card-header app-card-header"},G1={class:"header-left"},I1={class:"header-right"},R1={class:"card-content app-card-content"},L1={class:"layout-container"},x1={key:0,class:"git-config-warning"},U1={key:1,class:"commit-section"},z1={key:
|
|
58
|
+
${T.error}`),await navigator.clipboard.writeText(j.trim()),u({message:e("@81F0F:输出已复制到剪贴板"),type:"success",zIndex:1e5})}catch(j){u.error(`${e("@81F0F:复制失败: ")}${j.message}`)}}function ye(){if(!k.socket){console.error(e("@81F0F:Socket实例不可用"));return}k.socket.on("initial_command_history",T=>{i.value=T.history,h.value=!0}),k.socket.on("command_history_update",T=>{i.value.unshift(T.newCommand),i.value.length>100&&i.value.pop(),h.value=!0}),k.socket.on("full_command_history",T=>{i.value=T.history,c.value=!1,h.value=!0}),k.socket.on("command_history_cleared",T=>{T.success&&(i.value=[],u.success(e("@81F0F:命令历史已清空"))),p.value=!1}),k.socket.on("connect",()=>{h.value=!0,u.success(e("@81F0F:已连接到实时命令历史"))}),k.socket.on("disconnect",()=>{h.value=!1,u.warning(e("@81F0F:实时命令历史连接已断开"))})}function ue(){k.socket&&(k.socket.off("initial_command_history"),k.socket.off("command_history_update"),k.socket.off("full_command_history"),k.socket.off("command_history_cleared"))}return is(()=>{ye(),k.socket||(console.log(e("@81F0F:尝试初始化Socket连接")),k.initSocketConnection())}),zs(()=>{ue()}),(T,j)=>{const oe=at,ae=ws,K=ss,ve=ts,fe=Tt,H=gt,ne=Zt,me=ho;return r(),v(He,null,[a(lt,{tooltip:t(e)("@81F0F:查看Git命令历史"),size:"large",onClick:X},{default:o(()=>[a(oe,null,{default:o(()=>[a(t(Fa))]),_:1})]),_:1},8,["tooltip"]),a(Mt,{modelValue:$.value,"onUpdate:modelValue":j[3]||(j[3]=Fe=>$.value=Fe),title:t(e)("@81F0F:Git 命令历史"),"destroy-on-close":"","custom-class":"command-history-dialog","append-to-body":!0},{default:o(()=>[s("div",s1,[a(ae,{type:h.value?"success":"danger",size:"small",effect:"dark",class:"socket-status"},{default:o(()=>[z(l(h.value?t(e)("@81F0F:实时更新"):t(e)("@81F0F:未连接")),1)]),_:1},8,["type"]),s("div",a1,[a(ve,{modelValue:N.value,"onUpdate:modelValue":j[0]||(j[0]=Fe=>N.value=Fe),size:"small",class:"filter-select"},{default:o(()=>[a(K,{label:"全部状态",value:"all"}),a(K,{label:`成功 (${f.value})`,value:"success"},null,8,["label"]),a(K,{label:`失败 (${D.value})`,value:"error"},null,8,["label"])]),_:1},8,["modelValue"]),a(ve,{modelValue:C.value,"onUpdate:modelValue":j[1]||(j[1]=Fe=>C.value=Fe),size:"small",class:"filter-select"},{default:o(()=>[a(K,{label:"全部命令",value:"all"}),a(K,{label:`Git 命令 (${w.value})`,value:"git"},null,8,["label"]),a(K,{label:`其他命令 (${E.value})`,value:"other"},null,8,["label"])]),_:1},8,["modelValue"]),a(fe,{modelValue:B.value,"onUpdate:modelValue":j[2]||(j[2]=Fe=>B.value=Fe),size:"small",placeholder:"搜索命令或输出...",clearable:"",class:"search-input"},{prefix:o(()=>[a(oe,null,{default:o(()=>[a(t(no))]),_:1})]),_:1},8,["modelValue"])]),s("div",o1,[a(H,{content:t(e)("@81F0F:只复制命令列表(不含输出)"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[s("button",{class:"modern-btn copy-commands-button enhanced-btn",onClick:S,disabled:n.value.length===0||m.value},[m.value?(r(),Y(oe,{key:1,class:"btn-icon is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(oe,{key:0,class:"btn-icon"},{default:o(()=>[a(t(ys))]),_:1})),s("span",l1,l(t(e)("@81F0F:命令")),1)],8,n1)]),_:1},8,["content"]),a(H,{content:t(e)("@81F0F:复制完整命令历史(含输出)"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[s("button",{class:"modern-btn copy-all-button enhanced-btn",onClick:O,disabled:n.value.length===0||d.value},[d.value?(r(),Y(oe,{key:1,class:"btn-icon is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(oe,{key:0,class:"btn-icon"},{default:o(()=>[a(t(ys))]),_:1})),s("span",r1,l(t(e)("@81F0F:全部")),1)],8,i1)]),_:1},8,["content"]),a(H,{content:t(e)("@81F0F:清空命令历史"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[s("button",{class:"modern-btn clear-button enhanced-btn danger-btn",onClick:se,disabled:i.value.length===0||p.value},[p.value?(r(),Y(oe,{key:1,class:"btn-icon is-loading"},{default:o(()=>[a(t(Ht))]),_:1})):(r(),Y(oe,{key:0,class:"btn-icon"},{default:o(()=>[a(t(ns))]),_:1})),s("span",u1,l(t(e)("@81F0F:清空")),1)],8,c1)]),_:1},8,["content"])])]),s("div",d1,[c.value&&i.value.length===0?(r(),v("div",p1,[a(oe,{class:"loading-icon is-loading"},{default:o(()=>[a(t(Ht))]),_:1}),s("div",f1,l(t(e)("@81F0F:加载命令历史...")),1)])):i.value.length===0?(r(),Y(ne,{key:1,description:t(e)("@81F0F:暂无命令历史")},null,8,["description"])):n.value.length===0?(r(),Y(ne,{key:2,description:t(e)("@81F0F:没有匹配的命令")},null,8,["description"])):(r(),v("div",m1,[(r(!0),v(He,null,st(n.value,(Fe,Ke)=>(r(),v("div",{key:Ke,class:Qe(["history-item",{"is-error":!Fe.success}])},[s("div",{class:"item-header",onClick:Xe=>ee(Ke)},[s("div",h1,[s("div",g1,[a(ae,{size:"small",type:Fe.success?"success":"danger",effect:"dark",class:"status-tag"},{default:o(()=>[z(l(Fe.success?t(e)("@81F0F:成功"):t(e)("@81F0F:失败")),1)]),_:2},1032,["type"]),s("code",null,l(Fe.command),1)]),s("div",y1,[s("span",C1,l(ge(Fe.timestamp)),1),s("span",_1,l(t(e)("@81F0F:耗时: "))+l(Se(Fe.executionTime)),1)])]),s("div",b1,[a(lt,{tooltip:t(e)("@81F0F:复制命令"),"custom-class":"item-copy-button",onClick:Jt(Xe=>De(Fe.command),["stop"])},{default:o(()=>[a(oe,null,{default:o(()=>[a(t(ys))]),_:1})]),_:2},1032,["tooltip","onClick"]),s("div",{class:Qe(["expand-button",{"is-expanded":G(Ke)}])},[a(oe,{class:"btn-icon"},{default:o(()=>[G(Ke)?(r(),Y(t(uo),{key:0})):(r(),Y(t(ds),{key:1}))]),_:2},1024)],2)])],8,v1),G(Ke)?(r(),v("div",w1,[Fe.stdout?(r(),v("div",k1,[s("div",$1,[s("h4",null,l(t(e)("@81F0F:标准输出")),1),a(H,{content:t(e)("@81F0F:复制输出"),placement:"bottom",effect:"dark","show-after":200},{default:o(()=>[s("button",{class:"modern-btn output-copy-button enhanced-btn",onClick:Xe=>Q(Fe)},[a(oe,{class:"btn-icon"},{default:o(()=>[a(t(ys))]),_:1})],8,S1)]),_:2},1032,["content"])]),s("pre",D1,l(Fe.stdout),1),Fe.isStdoutTruncated?(r(),v("div",F1,[a(me,{type:"info",closable:!1,"show-icon":""},{default:o(()=>[z(l(t(e)("@81F0F:输出内容过长已被截断,请直接执行命令查看完整输出")),1)]),_:1})])):I("",!0)])):I("",!0),Fe.stderr?(r(),v("div",{key:1,class:Qe(["output-section",be(Fe.command)?"":"error"])},[s("div",B1,[s("h4",null,l(be(Fe.command)?t(e)("@81F0F:输出信息"):t(e)("@81F0F:错误输出")),1)]),s("pre",O1,l(Fe.stderr),1),Fe.isStderrTruncated?(r(),v("div",N1,[a(me,{type:"info",closable:!1,"show-icon":""},{default:o(()=>[z(l(be(Fe.command)?t(e)("@81F0F:输出信息"):t(e)("@81F0F:错误输出"))+l(t(e)("@81F0F:内容过长已被截断,请直接执行命令查看完整输出")),1)]),_:2},1024)])):I("",!0)],2)):I("",!0),Fe.error?(r(),v("div",T1,[s("div",A1,[s("h4",null,l(t(e)("@81F0F:错误信息")),1)]),s("pre",E1,l(Fe.error),1)])):I("",!0)])):I("",!0)],2))),128))]))])]),_:1},8,["modelValue","title"])],64)}}}),V1=Je(P1,[["__scopeId","data-v-e3a2bda1"]]),M1={class:"card-header app-card-header"},G1={class:"header-left"},I1={class:"header-right"},R1={class:"card-content app-card-content"},L1={class:"layout-container"},x1={key:0,class:"git-config-warning"},U1={key:1,class:"commit-section"},z1={key:0,class:"commit-form"},H1={class:"description-container"},W1={key:1,class:"standard-commit-form"},j1={class:"standard-commit-header"},q1={class:"type-scope-container"},J1={class:"scope-wrapper"},K1={class:"description-container description-inline"},Y1={class:"advanced-fields"},Q1={key:0,class:"status-updating-indicator"},Z1={key:0,class:"status-updating-indicator"},X1=We({__name:"CommitForm",setup(Z){const k=Bt(),i=Ut(),c=g(""),{loadingState:p,show:d,hide:h,setText:y}=Dm(),{successState:m}=Fm(),$=g(!1),N=g("输入提交信息..."),C=g(""),B=ie({get:()=>i.isStandardCommit,set:le=>{i.isStandardCommit=le}}),n=g("feat"),f=g(""),D=g(""),w=g(""),E=g(""),X=g([]),V=g(!1),O=g([]),S=g(!1),se=g(!1),ge=ie({get:()=>i.skipHooks,set:le=>{i.skipHooks=le}}),Se=ie({get:()=>i.autoQuickPushOnEnter,set:le=>{i.autoQuickPushOnEnter=le}}),ee=g(null),G=g(!1),De=ie(()=>[{value:"feat",label:`feat: ${e("@76872:新功能")}`},{value:"fix",label:`fix: ${e("@76872:修复bug")}`},{value:"docs",label:`docs: ${e("@76872:文档修改")}`},{value:"style",label:`style: ${e("@76872:样式修改")}`},{value:"refactor",label:`refactor: ${e("@76872:代码重构")}`},{value:"test",label:`test: ${e("@76872:测试代码")}`},{value:"chore",label:`chore: ${e("@76872:构建/工具修改")}`}]),Ie=g([]),be=ie(()=>{if(!B.value)return c.value||C.value;let le=`${n.value||""}`;return f.value&&(le+=`(${f.value})`),le+=`: ${D.value}`,w.value&&(le+=`
|
|
59
59
|
|
|
60
60
|
${w.value}`),E.value&&(le+=`
|
|
61
61
|
|
|
62
62
|
${E.value}`),le}),Q=ie(()=>B.value?n.value.trim()!==""&&D.value.trim()!=="":c.value.trim()!==""),ye=ie(()=>k.hasConflictedFiles?!0:!k.fileList.some(Te=>!Fe(Te.path))||!Q.value),ue=ie(()=>{const le=`${e("@76872:输入提交信息 (默认: ")}${C.value})`;return Se.value?`${le}${e("@76872:(按回车一键推送)")}`:le}),T=ie(()=>{const le=e("@76872:简短描述(必填)");return Se.value?e("@76872:简短描述(必填,按回车一键推送)"):le}),j=ie(()=>{let le=`git commit -m "${be.value}"`;return ge.value&&(le+=" --no-verify"),le});function oe(){const le=i.config;le&&(N.value=`${e("@76872:输入提交信息 (默认: ")}${le.defaultCommitMessage})`,C.value=le.defaultCommitMessage||"",le.descriptionTemplates&&Array.isArray(le.descriptionTemplates)&&(X.value=le.descriptionTemplates),le.scopeTemplates&&Array.isArray(le.scopeTemplates)&&(O.value=le.scopeTemplates),le.messageTemplates&&Array.isArray(le.messageTemplates)&&(Ie.value=le.messageTemplates))}function ae(le){D.value=le,V.value=!1}function K(le){f.value=le,S.value=!1}function ve(){V.value=!0}function fe(){S.value=!0}function H(){c.value="",D.value="",w.value="",E.value="",n.value="feat",i.autoSetDefaultMessage&&i.defaultCommitMessage&&(B.value?D.value=i.defaultCommitMessage:c.value=i.defaultCommitMessage)}function ne(){d({text:e("@76872:正在暂存文件..."),showProgress:!1})}function me(le){if(h(),le){$.value=!0;try{setTimeout(async()=>{try{console.log(e("@76872:推送成功,状态已更新"))}catch(Te){console.error("一键推送后处理失败:",Te)}finally{$.value=!1}},1e3)}catch(Te){console.error("一键推送后处理失败:",Te),$.value=!1}}}function Fe(le){const Te=le.replace(/\\/g,"/");return i.lockedFiles.some(Be=>{const Pe=Be.replace(/\\/g,"/");return Te===Pe})}function Ke(le){c.value=le,se.value=!1}async function Xe(le){var Pe;if(!Se.value||!Q.value)return;const Te=k.fileList.some(Ve=>!Fe(Ve.path)),Be=k.hasConflictedFiles;if(!(!Te||!Q.value||!k.hasUpstream||Be)&&le.key==="Enter"&&!le.shiftKey){le.preventDefault();try{await((Pe=ee.value)==null?void 0:Pe.triggerQuickPush())}catch(Ve){console.error("回车自动一键提交失败:",Ve)}}}async function R(le){try{await i.saveDefaultMessage(le)&&u.success(e("@76872:默认提交信息设置成功"))}catch(Te){u.error(`${e("@76872:设置默认提交信息失败: ")}${Te.message}`)}}Ze(()=>k.pendingMergeMessage,le=>{le&&(B.value?D.value=le:c.value=le,k.pendingMergeMessage="",u.info(e("@76872:已自动填充合并提交信息")))}),Ze(()=>k.isAddingFiles,le=>{le&&p.visible&&y(e("@76872:正在暂存文件..."))}),Ze(()=>k.isCommiting,le=>{le&&p.visible&&y(e("@76872:正在提交更改..."))}),Ze(()=>k.isPushing,le=>{le&&p.visible&&h()}),is(async()=>{Ze(()=>i.config,oe,{immediate:!0}),i.config||await i.loadConfig(),i.autoSetDefaultMessage&&i.defaultCommitMessage&&(B.value?D.value||(D.value=i.defaultCommitMessage):c.value||(c.value=i.defaultCommitMessage)),k.pendingMergeMessage&&(B.value?D.value=k.pendingMergeMessage:c.value=k.pendingMergeMessage,k.pendingMergeMessage="",u.info(e("@76872:已自动填充合并提交信息")))});function _(le,Te){const Pe=[...le?X.value.filter(Ve=>Ve.toLowerCase().includes(le.toLowerCase())).map(Ve=>({value:Ve})):X.value.map(Ve=>({value:Ve})),{value:"⚙️ 管理模板...",isSettings:!0}];Te(Pe)}function de(le,Te){const Pe=[...le?O.value.filter(Ve=>Ve.toLowerCase().includes(le.toLowerCase())).map(Ve=>({value:Ve})):O.value.map(Ve=>({value:Ve})),{value:"⚙️ 管理模板...",isSettings:!0}];Te(Pe)}function Ae(le){le.isSettings?(ve(),D.value=""):D.value=le.value}function A(le){le.isSettings?(fe(),f.value=""):f.value=le.value}function M(le,Te){const Pe=[...le?Ie.value.filter(Ve=>Ve.toLowerCase().includes(le.toLowerCase())).map(Ve=>({value:Ve})):Ie.value.map(Ve=>({value:Ve})),{value:"⚙️ 管理模板...",isSettings:!0}];Te(Pe)}function Ee(le){le.isSettings?(se.value=!0,c.value=""):c.value=le.value}return(le,Te)=>{const Be=vm,Pe=ho,Ve=go,ut=ss,Et=ts,$t=at,St=Tt;return r(),v(He,null,[s("div",{class:Qe(["card app-card",{"is-pushing":t(k).isPushing}])},[s("div",M1,[s("div",G1,[t(k).userName!==""&&t(k).userEmail!==""?(r(),Y(t1,{key:0,ref_key:"gitActionButtonsRef",ref:ee,"has-user-commit-message":Q.value,"final-commit-message":be.value,"skip-hooks":ge.value,onAfterCommit:Te[0]||(Te[0]=q=>{q&&H()}),onAfterPush:me,onBeforePush:ne,onClearFields:H},null,8,["has-user-commit-message","final-commit-message","skip-hooks"])):I("",!0)]),s("div",I1,[a(V1),a(Be,{class:"ml-auto",variant:"icon"})])]),s("div",R1,[s("div",L1,[t(k).userName===""||t(k).userEmail===""?(r(),v("div",x1,[a(Pe,{title:t(e)("@76872:Git用户信息未配置"),type:"warning",closable:!1,"show-icon":""},{default:o(()=>[s("p",null,l(t(e)("@76872:您需要配置Git用户名和邮箱才能提交代码。请使用以下命令配置:")),1),Te[11]||(Te[11]=s("pre",{class:"config-command"},`git config --global user.name "Your Name"
|
|
63
|
-
git config --global user.email "your.email@example.com"`,-1))]),_:1},8,["title"])])):(r(),v("div",U1,[ye.value?I("",!0):(r(),Y(Oo,{key:0,command:j.value,title:t(e)("@76872:提交命令预览:"),placeholder:'git commit -m "<提交信息>"'},null,8,["command","title"])),B.value?(r(),v("div",W1,[s("div",j1,[s("div",q1,[a(Et,{modelValue:n.value,"onUpdate:modelValue":Te[2]||(Te[2]=q=>n.value=q),placeholder:t(e)("@76872:提交类型"),class:"type-select",clearable:""},{default:o(()=>[(r(!0),v(He,null,st(De.value,q=>(r(),Y(ut,{key:q.value,label:q.label,value:q.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"]),s("div",J1,[a(Ve,{modelValue:f.value,"onUpdate:modelValue":Te[3]||(Te[3]=q=>f.value=q),"fetch-suggestions":de,placeholder:t(e)("@76872:作用域(可选)"),class:"scope-input",clearable:"",onSelect:A},null,8,["modelValue","placeholder"])]),s("div",K1,[a(Ve,{modelValue:D.value,"onUpdate:modelValue":Te[4]||(Te[4]=q=>D.value=q),"fetch-suggestions":_,placeholder:T.value,class:"description-input",clearable:"",onSelect:Ae,onKeydown:Xe},null,8,["modelValue","placeholder"])])])]),s("div",{class:"advanced-options-toggle",onClick:Te[5]||(Te[5]=q=>G.value=!G.value)},[s("span",null,l(G.value?t(e)("@76872:收起"):t(e)("@76872:正文及页脚")),1),a($t,{class:Qe(["toggle-icon",{"is-active":G.value}])},{default:o(()=>[a(t(ds))]),_:1},8,["class"])]),zt(s("div",Y1,[a(St,{modelValue:w.value,"onUpdate:modelValue":Te[6]||(Te[6]=q=>w.value=q),type:"textarea",rows:4,placeholder:t(e)("@76872:正文(可选):详细描述本次提交的内容和原因"),class:"body-input",clearable:""},null,8,["modelValue","placeholder"]),a(St,{modelValue:E.value,"onUpdate:modelValue":Te[7]||(Te[7]=q=>E.value=q),placeholder:t(e)("@76872:页脚(可选):如 Closes #123"),class:"footer-input",clearable:""},null,8,["modelValue","placeholder"])],512),[[Ss,G.value]])])):(r(),v("div",z1,[s("div",H1,[a(Ve,{modelValue:c.value,"onUpdate:modelValue":Te[1]||(Te[1]=q=>c.value=q),"fetch-suggestions":M,placeholder:ue.value,type:"textarea",rows:3,resize:"none",class:"commit-message-input",onSelect:Ee,onKeydown:Xe},null,8,["modelValue","placeholder"])])]))]))])])],2),a(Xs,{visible:V.value,"onUpdate:visible":Te[8]||(Te[8]=q=>V.value=q),type:"description",title:t(e)("@76872:简短描述模板设置"),placeholder:t(e)("@76872:输入新模板内容"),"edit-placeholder":t(e)("@76872:编辑模板内容"),"empty-description":t(e)("@76872:暂无保存的模板"),onUseTemplate:ae},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),a(Xs,{visible:S.value,"onUpdate:visible":Te[9]||(Te[9]=q=>S.value=q),type:"scope",title:t(e)("@76872:作用域模板设置"),placeholder:t(e)("@76872:输入新作用域模板"),"edit-placeholder":t(e)("@76872:编辑作用域模板内容"),"empty-description":t(e)("@76872:暂无保存的作用域"),onUseTemplate:K},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),a(Xs,{visible:se.value,"onUpdate:visible":Te[10]||(Te[10]=q=>se.value=q),type:"message",title:t(e)("@76872:默认提交信息设置"),placeholder:t(e)("@76872:输入新模板内容"),"edit-placeholder":t(e)("@76872:编辑模板内容"),"empty-description":t(e)("@76872:暂无保存的模板"),"show-default-section":!0,"show-help-text":!0,onUseTemplate:Ke,onSetDefault:R},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),a(Us,{name:"el-fade-in-linear"},{default:o(()=>[$.value?(r(),v("div",Q1,[a($t,{class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1}),s("span",null,l(t(e)("@76872:更新状态中...")),1)])):I("",!0)]),_:1}),a(_m,{visible:t(p).visible,text:t(p).text,"show-progress":t(p).showProgress,progress:t(p).progress},null,8,["visible","text","show-progress","progress"]),a(Sm,{visible:t(m).visible,text:t(m).text,description:t(m).description},null,8,["visible","text","description"]),a(Us,{name:"el-fade-in-linear"},{default:o(()=>[$.value?(r(),v("div",Z1,[a($t,{class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1}),s("span",null,l(t(e)("@76872:更新状态中...")),1)])):I("",!0)]),_:1})],64)}}}),ev=Je(X1,[["__scopeId","data-v-b6140590"]]),tv={class:"log-header"},sv={class:"header-left"},av={class:"log-actions"},ov={key:1,viewBox:"0 0 24 24",width:"1em",height:"1em",fill:"currentColor",style:{display:"block"}},nv={key:0,class:"filter-panel-header"},lv={class:"filter-form"},iv={class:"filter-item"},rv={class:"compact-label"},cv={class:"filter-item"},uv={class:"compact-label"},dv={class:"filter-item"},pv={class:"compact-label"},fv={class:"filter-item"},mv={class:"compact-label"},vv={class:"filter-actions"},hv={key:0},gv={key:1,class:"log-empty-state"},yv={class:"log-empty-text"},Cv={key:2,class:"content-area-content"},_v={class:"table-view-container"},bv={class:"commit-message-cell"},wv={class:"message-content"},kv={key:0,class:"branch-container"},$v={class:"message-text"},Sv={class:"author-name"},Dv={class:"commit-detail-container"},Fv={key:0,class:"commit-info"},Bv={class:"commit-info-row"},Ov={class:"info-item date-item"},Nv={class:"info-label"},Tv={class:"info-value"},Av={class:"info-item message-item"},Ev={class:"info-label"},Pv=["innerHTML"],Vv=We({__name:"LogList",setup(Z,{expose:k}){const i=Bt();let c=[];const p=g(c),d=g(""),h=g(!1),y=ie(()=>i.isLoadingLog||h.value),m=g(!1),$=g(!1),N=g(null),C=g(!1),B=g(null),n=g([]),f=g(""),D=g(!1),w=g(""),E=g("full-new"),X=g(""),V=g(""),O=g(!1),S=g([]),se=g(""),ge=g(null),Se=g([]),ee=g([]),G=g([]),De=g(!1),Ie=g(0),be=g(0),Q=g(null),ye=g(null),ue=ie(()=>p.value),T=ie(()=>n.value.map(pe=>({path:pe,name:pe.split("/").pop()||pe})));async function j(pe=!1,b=1){const F=Bt();if(!F.isGitRepo){d.value="当前目录不是Git仓库";return}try{b>1?$.value=!0:h.value=!0;const P=new URLSearchParams;P.append("page",b.toString()),P.append("all",pe.toString()),P.append("with_parents","true"),S.value.length>0&&P.append("author",S.value.join(",")),ee.value.length>0&&P.append("branch",ee.value.join(",")),se.value&&P.append("message",se.value),ge.value&&Array.isArray(ge.value)&&ge.value.length===2&&(P.append("dateFrom",ge.value[0]),P.append("dateTo",ge.value[1])),P.append("_t",Date.now().toString());const W=await(await fetch(`/api/log?${P.toString()}`)).json();if(!W||!W.data||!Array.isArray(W.data)){d.value="加载提交历史失败: 服务器返回数据格式不正确";return}const Ce=b>1;Ce?W.data.forEach(L=>c.push(L)):(c.length=0,W.data.forEach(L=>c.push(L))),p.value=[...c],F.currentPage=b,F.totalCommits=W.total||c.length,F.hasMoreData=W.hasMore===!0,!Ce&&!pe&&gs(()=>{H(),setTimeout(ce,200)}),d.value=""}catch(P){d.value="加载提交历史失败: "+(P instanceof Error?P.message:String(P)),b>1&&(F.hasMoreData=!1)}finally{b>1?$.value=!1:h.value=!1}}function oe(pe){return pe.includes("HEAD -> ")?pe.replace("HEAD -> ",""):pe.includes("origin/")?pe:pe.trim()}function ae(pe){return pe.includes("HEAD")?"success":pe.includes("origin/")?"warning":"info"}const K=g(null),ve=g(null);function fe(pe){if(!i.hasMoreData||$.value||y.value)return;const b=pe.target,{scrollTop:F,scrollHeight:P,clientHeight:ke}=b;P-F-ke<=20&&Be()}function H(){if(!K.value)return;const pe=K.value.$el.querySelector(".el-table__body-wrapper");pe&&(ve.value=pe,ve.value&&(ve.value.removeEventListener("scroll",fe,!0),ve.value.addEventListener("scroll",fe,!0)))}function ne(){ve.value&&(ve.value.removeEventListener("scroll",fe,!0),ve.value=null)}function me(pe){pe.key==="Escape"&&we.value&&(we.value=!1)}is(()=>{i.isGitRepo?(i.log.length>0?(c.length=0,i.log.forEach(pe=>c.push(pe)),i.totalCommits=i.log.length):j(),ut()):d.value="当前目录不是Git仓库",gs(()=>{setTimeout(()=>{H()},500)}),Ze(()=>K.value,pe=>{pe&&!m.value&&gs(()=>{H()})}),window.addEventListener("keydown",me)}),Ze(()=>i.allBranches,pe=>{pe&&pe.length>0?G.value=[...pe].sort():G.value=[]},{immediate:!0}),wa(()=>{ne(),N.value!==null&&(window.clearInterval(N.value),N.value=null),window.removeEventListener("keydown",me)});async function Fe(){i.currentPage=1,i.hasMoreData=!0,await j(m.value,1),gs(()=>{if(K.value){const pe=K.value.$el.querySelector(".el-scrollbar__wrap");pe&&(pe.scrollTop=0)}})}Ze(()=>i.log,pe=>{try{c.length=0,Array.isArray(pe)&&pe.forEach(b=>b&&c.push(b)),i.totalCommits=c.length,i.currentPage=1,i.hasMoreData=!1,p.value=[...c]}catch{}},{immediate:!0}),k({refreshLog:Fe});async function Ke(pe){if(pe){B.value=pe,C.value=!0,D.value=!0,n.value=[],f.value="",w.value="",E.value="full-new",X.value="",V.value="";try{if(!pe.hash||pe.hash.length<7){f.value="无效的提交哈希值",D.value=!1;return}const F=await(await fetch(`/api/commit-files?hash=${pe.hash}`)).json();F.success&&Array.isArray(F.files)?(n.value=F.files,n.value.length>0?await _(pe.hash,n.value[0]):f.value="该提交没有变更文件"):f.value=`${e("@A1833:获取文件列表失败: ")}${F.error||"未知错误"}`}catch(b){f.value=`${e("@A1833:获取提交详情失败: ")}${b.message}`}finally{D.value=!1}}}async function Xe(pe,b){D.value=!0,w.value=b;try{const[F,P]=await Promise.all([fetch(`/api/commit-file-content?hash=${pe}&file=${encodeURIComponent(b)}&version=old`),fetch(`/api/commit-file-content?hash=${pe}&file=${encodeURIComponent(b)}&version=new`)]),[ke,W]=await Promise.all([F.json(),P.json()]);X.value=ke!=null&&ke.success?ke.content||"":`${e("@A1833:获取文件内容失败: ")}${(ke==null?void 0:ke.error)||"未知错误"}`,V.value=W!=null&&W.success?W.content||"":`${e("@A1833:获取文件内容失败: ")}${(W==null?void 0:W.error)||"未知错误"}`,f.value=""}catch(F){const P=`${e("@A1833:获取文件内容失败: ")}${F.message}`;X.value=P,V.value=P,f.value=""}finally{D.value=!1}}async function R(pe,b,F){E.value=F,X.value="",V.value="",await de(pe,b)}async function _(pe,b){E.value="full-new",await Xe(pe,b)}async function de(pe,b){D.value=!0,w.value=b;try{const P=await(await fetch(`/api/commit-file-diff?hash=${pe}&file=${encodeURIComponent(b)}`)).json();P.success?f.value=P.diff||"没有变更内容":f.value=`${e("@A1833:获取差异失败: ")}${P.error||"未知错误"}`}catch(F){f.value=`${e("@A1833:获取差异失败: ")}${F.message}`}finally{D.value=!1}}function Ae(pe){B.value&&(E.value==="diff"?R(B.value.hash,pe,"diff"):_(B.value.hash,pe))}function A(){if(!B.value||!w.value){E.value="diff";return}R(B.value.hash,w.value,"diff")}function M(){if(!B.value||!w.value){E.value="full-new";return}_(B.value.hash,w.value)}async function Ee(pe,b){try{const P=await(await fetch("/api/open-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:pe,context:b})})).json();P.success?u.success(P.message):u.error(P.error||e("@A1833:打开文件失败"))}catch(F){u.error(`${e("@A1833:打开文件失败: ")}${F.message}`)}}async function le(pe,b){try{const P=await(await fetch("/api/open-with-vscode",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:pe,context:b})})).json();P.success?u.success(P.message):u.error(P.error||e("@A1833:用VSCode打开文件失败"))}catch(F){u.error(`${e("@A1833:用VSCode打开文件失败: ")}${F.message}`)}}async function Te(pe){try{const b=qn(pe);await navigator.clipboard.writeText(b),u.success(e("@A1833:提交信息已复制到剪贴板"))}catch{u.error(e("@A1833:复制失败"))}}function Be(){!i.hasMoreData||$.value||y.value||j(m.value,i.currentPage+1)}function Pe(){S.value=[],ee.value=[],se.value="",ge.value=null,i.currentPage=1,j(m.value,1)}function Ve(){i.currentPage=1,j(m.value,1)}async function ut(){try{const b=await(await fetch("/api/authors")).json();b.success&&Array.isArray(b.authors)?Se.value=b.authors.sort():Et()}catch{Et()}}function Et(){const pe=new Set;p.value.forEach(b=>{b.author&&pe.add(b.author)}),Se.value=Array.from(pe).sort()}Ze(()=>p.value,()=>{},{deep:!0});function $t(pe,b,F){F.preventDefault(),Ie.value=F.clientY,be.value=F.clientX,Q.value=pe,De.value=!0,gs(()=>{const ke=ye.value;if(ke){const W=ke.getBoundingClientRect(),Ce=window.innerWidth,L=window.innerHeight,Ge=8;let bt=F.clientX,Ct=F.clientY;bt+W.width>Ce&&(bt=Math.max(Ge,F.clientX-W.width)),Ct+W.height>L&&(Ct=Math.max(Ge,F.clientY-W.height)),be.value=bt,Ie.value=Ct}});const P=()=>{De.value=!1,document.removeEventListener("click",P)};setTimeout(()=>{document.addEventListener("click",P)},0)}async function St(pe){if(pe)try{await Vt.confirm(`${e("@A1833:确定要撤销提交 ")}${pe.hash.substring(0,7)}${e("@A1833: 吗?这将创建一个新的提交来撤销这次提交的更改。")}`,"撤销提交确认",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"});const F=await(await fetch("/api/revert-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:pe.hash})})).json();F.success?(u.success(F.message||"已成功撤销提交"),Fe(),i.fetchStatus(),i.getBranchStatus()):u.error(F.error||"撤销提交失败")}catch(b){b!=="cancel"&&u.error("撤销提交失败: "+(b.message||b))}}async function q(pe){if(pe)try{await Vt.confirm(`${e("@A1833:确定要将提交 ")}${pe.hash.substring(0,7)}${e("@A1833: Cherry-Pick 到当前分支吗?")}`,"Cherry-Pick确认",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"});const F=await(await fetch("/api/cherry-pick-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:pe.hash})})).json();F.success?(u.success(F.message||"已成功Cherry-Pick提交"),Fe(),i.fetchStatus(),i.getBranchStatus()):u.error(F.error||"Cherry-Pick提交失败")}catch(b){b!=="cancel"&&u.error("Cherry-Pick提交失败: "+(b.message||b))}}async function te(pe){if(pe)try{await navigator.clipboard.writeText(pe.hash),u.success(`${e("@A1833:已复制提交哈希: ")}${pe.hash.substring(0,7)}`)}catch(b){u.error(`${e("@A1833:复制提交哈希失败: ")}${b.message}`)}}async function x(pe){if(pe)try{await Vt.confirm(`${e("@A1833:确定要将当前分支重置(hard)到提交 ")}${pe.hash.substring(0,7)} 吗?
|
|
63
|
+
git config --global user.email "your.email@example.com"`,-1))]),_:1},8,["title"])])):(r(),v("div",U1,[B.value?(r(),v("div",W1,[s("div",j1,[s("div",q1,[a(Et,{modelValue:n.value,"onUpdate:modelValue":Te[2]||(Te[2]=q=>n.value=q),placeholder:t(e)("@76872:提交类型"),class:"type-select",clearable:""},{default:o(()=>[(r(!0),v(He,null,st(De.value,q=>(r(),Y(ut,{key:q.value,label:q.label,value:q.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"]),s("div",J1,[a(Ve,{modelValue:f.value,"onUpdate:modelValue":Te[3]||(Te[3]=q=>f.value=q),"fetch-suggestions":de,placeholder:t(e)("@76872:作用域(可选)"),class:"scope-input",clearable:"",onSelect:A},null,8,["modelValue","placeholder"])]),s("div",K1,[a(Ve,{modelValue:D.value,"onUpdate:modelValue":Te[4]||(Te[4]=q=>D.value=q),"fetch-suggestions":_,placeholder:T.value,class:"description-input",clearable:"",onSelect:Ae,onKeydown:Xe},null,8,["modelValue","placeholder"])])])]),s("div",{class:"advanced-options-toggle",onClick:Te[5]||(Te[5]=q=>G.value=!G.value)},[s("span",null,l(G.value?t(e)("@76872:收起"):t(e)("@76872:正文及页脚")),1),a($t,{class:Qe(["toggle-icon",{"is-active":G.value}])},{default:o(()=>[a(t(ds))]),_:1},8,["class"])]),zt(s("div",Y1,[a(St,{modelValue:w.value,"onUpdate:modelValue":Te[6]||(Te[6]=q=>w.value=q),type:"textarea",rows:4,placeholder:t(e)("@76872:正文(可选):详细描述本次提交的内容和原因"),class:"body-input",clearable:""},null,8,["modelValue","placeholder"]),a(St,{modelValue:E.value,"onUpdate:modelValue":Te[7]||(Te[7]=q=>E.value=q),placeholder:t(e)("@76872:页脚(可选):如 Closes #123"),class:"footer-input",clearable:""},null,8,["modelValue","placeholder"])],512),[[Ss,G.value]])])):(r(),v("div",z1,[s("div",H1,[a(Ve,{modelValue:c.value,"onUpdate:modelValue":Te[1]||(Te[1]=q=>c.value=q),"fetch-suggestions":M,placeholder:ue.value,type:"textarea",rows:3,resize:"none",class:"commit-message-input",onSelect:Ee,onKeydown:Xe},null,8,["modelValue","placeholder"])])])),ye.value?I("",!0):(r(),Y(Oo,{key:2,command:j.value,title:t(e)("@76872:提交命令预览:"),placeholder:'git commit -m "<提交信息>"'},null,8,["command","title"]))]))])])],2),a(Xs,{visible:V.value,"onUpdate:visible":Te[8]||(Te[8]=q=>V.value=q),type:"description",title:t(e)("@76872:简短描述模板设置"),placeholder:t(e)("@76872:输入新模板内容"),"edit-placeholder":t(e)("@76872:编辑模板内容"),"empty-description":t(e)("@76872:暂无保存的模板"),onUseTemplate:ae},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),a(Xs,{visible:S.value,"onUpdate:visible":Te[9]||(Te[9]=q=>S.value=q),type:"scope",title:t(e)("@76872:作用域模板设置"),placeholder:t(e)("@76872:输入新作用域模板"),"edit-placeholder":t(e)("@76872:编辑作用域模板内容"),"empty-description":t(e)("@76872:暂无保存的作用域"),onUseTemplate:K},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),a(Xs,{visible:se.value,"onUpdate:visible":Te[10]||(Te[10]=q=>se.value=q),type:"message",title:t(e)("@76872:默认提交信息设置"),placeholder:t(e)("@76872:输入新模板内容"),"edit-placeholder":t(e)("@76872:编辑模板内容"),"empty-description":t(e)("@76872:暂无保存的模板"),"show-default-section":!0,"show-help-text":!0,onUseTemplate:Ke,onSetDefault:R},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),a(Us,{name:"el-fade-in-linear"},{default:o(()=>[$.value?(r(),v("div",Q1,[a($t,{class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1}),s("span",null,l(t(e)("@76872:更新状态中...")),1)])):I("",!0)]),_:1}),a(_m,{visible:t(p).visible,text:t(p).text,"show-progress":t(p).showProgress,progress:t(p).progress},null,8,["visible","text","show-progress","progress"]),a(Sm,{visible:t(m).visible,text:t(m).text,description:t(m).description},null,8,["visible","text","description"]),a(Us,{name:"el-fade-in-linear"},{default:o(()=>[$.value?(r(),v("div",Z1,[a($t,{class:"is-loading"},{default:o(()=>[a(t(Ht))]),_:1}),s("span",null,l(t(e)("@76872:更新状态中...")),1)])):I("",!0)]),_:1})],64)}}}),ev=Je(X1,[["__scopeId","data-v-a72efb33"]]),tv={class:"log-header"},sv={class:"header-left"},av={class:"log-actions"},ov={key:1,viewBox:"0 0 24 24",width:"1em",height:"1em",fill:"currentColor",style:{display:"block"}},nv={key:0,class:"filter-panel-header"},lv={class:"filter-form"},iv={class:"filter-item"},rv={class:"compact-label"},cv={class:"filter-item"},uv={class:"compact-label"},dv={class:"filter-item"},pv={class:"compact-label"},fv={class:"filter-item"},mv={class:"compact-label"},vv={class:"filter-actions"},hv={key:0},gv={key:1,class:"log-empty-state"},yv={class:"log-empty-text"},Cv={key:2,class:"content-area-content"},_v={class:"table-view-container"},bv={class:"commit-message-cell"},wv={class:"message-content"},kv={key:0,class:"branch-container"},$v={class:"message-text"},Sv={class:"author-name"},Dv={class:"commit-detail-container"},Fv={key:0,class:"commit-info"},Bv={class:"commit-info-row"},Ov={class:"info-item date-item"},Nv={class:"info-label"},Tv={class:"info-value"},Av={class:"info-item message-item"},Ev={class:"info-label"},Pv=["innerHTML"],Vv=We({__name:"LogList",setup(Z,{expose:k}){const i=Bt();let c=[];const p=g(c),d=g(""),h=g(!1),y=ie(()=>i.isLoadingLog||h.value),m=g(!1),$=g(!1),N=g(null),C=g(!1),B=g(null),n=g([]),f=g(""),D=g(!1),w=g(""),E=g("full-new"),X=g(""),V=g(""),O=g(!1),S=g([]),se=g(""),ge=g(null),Se=g([]),ee=g([]),G=g([]),De=g(!1),Ie=g(0),be=g(0),Q=g(null),ye=g(null),ue=ie(()=>p.value),T=ie(()=>n.value.map(pe=>({path:pe,name:pe.split("/").pop()||pe})));async function j(pe=!1,b=1){const F=Bt();if(!F.isGitRepo){d.value="当前目录不是Git仓库";return}try{b>1?$.value=!0:h.value=!0;const P=new URLSearchParams;P.append("page",b.toString()),P.append("all",pe.toString()),P.append("with_parents","true"),S.value.length>0&&P.append("author",S.value.join(",")),ee.value.length>0&&P.append("branch",ee.value.join(",")),se.value&&P.append("message",se.value),ge.value&&Array.isArray(ge.value)&&ge.value.length===2&&(P.append("dateFrom",ge.value[0]),P.append("dateTo",ge.value[1])),P.append("_t",Date.now().toString());const W=await(await fetch(`/api/log?${P.toString()}`)).json();if(!W||!W.data||!Array.isArray(W.data)){d.value="加载提交历史失败: 服务器返回数据格式不正确";return}const Ce=b>1;Ce?W.data.forEach(L=>c.push(L)):(c.length=0,W.data.forEach(L=>c.push(L))),p.value=[...c],F.currentPage=b,F.totalCommits=W.total||c.length,F.hasMoreData=W.hasMore===!0,!Ce&&!pe&&gs(()=>{H(),setTimeout(ce,200)}),d.value=""}catch(P){d.value="加载提交历史失败: "+(P instanceof Error?P.message:String(P)),b>1&&(F.hasMoreData=!1)}finally{b>1?$.value=!1:h.value=!1}}function oe(pe){return pe.includes("HEAD -> ")?pe.replace("HEAD -> ",""):pe.includes("origin/")?pe:pe.trim()}function ae(pe){return pe.includes("HEAD")?"success":pe.includes("origin/")?"warning":"info"}const K=g(null),ve=g(null);function fe(pe){if(!i.hasMoreData||$.value||y.value)return;const b=pe.target,{scrollTop:F,scrollHeight:P,clientHeight:ke}=b;P-F-ke<=20&&Be()}function H(){if(!K.value)return;const pe=K.value.$el.querySelector(".el-table__body-wrapper");pe&&(ve.value=pe,ve.value&&(ve.value.removeEventListener("scroll",fe,!0),ve.value.addEventListener("scroll",fe,!0)))}function ne(){ve.value&&(ve.value.removeEventListener("scroll",fe,!0),ve.value=null)}function me(pe){pe.key==="Escape"&&we.value&&(we.value=!1)}is(()=>{i.isGitRepo?(i.log.length>0?(c.length=0,i.log.forEach(pe=>c.push(pe)),i.totalCommits=i.log.length):j(),ut()):d.value="当前目录不是Git仓库",gs(()=>{setTimeout(()=>{H()},500)}),Ze(()=>K.value,pe=>{pe&&!m.value&&gs(()=>{H()})}),window.addEventListener("keydown",me)}),Ze(()=>i.allBranches,pe=>{pe&&pe.length>0?G.value=[...pe].sort():G.value=[]},{immediate:!0}),wa(()=>{ne(),N.value!==null&&(window.clearInterval(N.value),N.value=null),window.removeEventListener("keydown",me)});async function Fe(){i.currentPage=1,i.hasMoreData=!0,await j(m.value,1),gs(()=>{if(K.value){const pe=K.value.$el.querySelector(".el-scrollbar__wrap");pe&&(pe.scrollTop=0)}})}Ze(()=>i.log,pe=>{try{c.length=0,Array.isArray(pe)&&pe.forEach(b=>b&&c.push(b)),i.totalCommits=c.length,i.currentPage=1,i.hasMoreData=!1,p.value=[...c]}catch{}},{immediate:!0}),k({refreshLog:Fe});async function Ke(pe){if(pe){B.value=pe,C.value=!0,D.value=!0,n.value=[],f.value="",w.value="",E.value="full-new",X.value="",V.value="";try{if(!pe.hash||pe.hash.length<7){f.value="无效的提交哈希值",D.value=!1;return}const F=await(await fetch(`/api/commit-files?hash=${pe.hash}`)).json();F.success&&Array.isArray(F.files)?(n.value=F.files,n.value.length>0?await _(pe.hash,n.value[0]):f.value="该提交没有变更文件"):f.value=`${e("@A1833:获取文件列表失败: ")}${F.error||"未知错误"}`}catch(b){f.value=`${e("@A1833:获取提交详情失败: ")}${b.message}`}finally{D.value=!1}}}async function Xe(pe,b){D.value=!0,w.value=b;try{const[F,P]=await Promise.all([fetch(`/api/commit-file-content?hash=${pe}&file=${encodeURIComponent(b)}&version=old`),fetch(`/api/commit-file-content?hash=${pe}&file=${encodeURIComponent(b)}&version=new`)]),[ke,W]=await Promise.all([F.json(),P.json()]);X.value=ke!=null&&ke.success?ke.content||"":`${e("@A1833:获取文件内容失败: ")}${(ke==null?void 0:ke.error)||"未知错误"}`,V.value=W!=null&&W.success?W.content||"":`${e("@A1833:获取文件内容失败: ")}${(W==null?void 0:W.error)||"未知错误"}`,f.value=""}catch(F){const P=`${e("@A1833:获取文件内容失败: ")}${F.message}`;X.value=P,V.value=P,f.value=""}finally{D.value=!1}}async function R(pe,b,F){E.value=F,X.value="",V.value="",await de(pe,b)}async function _(pe,b){E.value="full-new",await Xe(pe,b)}async function de(pe,b){D.value=!0,w.value=b;try{const P=await(await fetch(`/api/commit-file-diff?hash=${pe}&file=${encodeURIComponent(b)}`)).json();P.success?f.value=P.diff||"没有变更内容":f.value=`${e("@A1833:获取差异失败: ")}${P.error||"未知错误"}`}catch(F){f.value=`${e("@A1833:获取差异失败: ")}${F.message}`}finally{D.value=!1}}function Ae(pe){B.value&&(E.value==="diff"?R(B.value.hash,pe,"diff"):_(B.value.hash,pe))}function A(){if(!B.value||!w.value){E.value="diff";return}R(B.value.hash,w.value,"diff")}function M(){if(!B.value||!w.value){E.value="full-new";return}_(B.value.hash,w.value)}async function Ee(pe,b){try{const P=await(await fetch("/api/open-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:pe,context:b})})).json();P.success?u.success(P.message):u.error(P.error||e("@A1833:打开文件失败"))}catch(F){u.error(`${e("@A1833:打开文件失败: ")}${F.message}`)}}async function le(pe,b){try{const P=await(await fetch("/api/open-with-vscode",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:pe,context:b})})).json();P.success?u.success(P.message):u.error(P.error||e("@A1833:用VSCode打开文件失败"))}catch(F){u.error(`${e("@A1833:用VSCode打开文件失败: ")}${F.message}`)}}async function Te(pe){try{const b=qn(pe);await navigator.clipboard.writeText(b),u.success(e("@A1833:提交信息已复制到剪贴板"))}catch{u.error(e("@A1833:复制失败"))}}function Be(){!i.hasMoreData||$.value||y.value||j(m.value,i.currentPage+1)}function Pe(){S.value=[],ee.value=[],se.value="",ge.value=null,i.currentPage=1,j(m.value,1)}function Ve(){i.currentPage=1,j(m.value,1)}async function ut(){try{const b=await(await fetch("/api/authors")).json();b.success&&Array.isArray(b.authors)?Se.value=b.authors.sort():Et()}catch{Et()}}function Et(){const pe=new Set;p.value.forEach(b=>{b.author&&pe.add(b.author)}),Se.value=Array.from(pe).sort()}Ze(()=>p.value,()=>{},{deep:!0});function $t(pe,b,F){F.preventDefault(),Ie.value=F.clientY,be.value=F.clientX,Q.value=pe,De.value=!0,gs(()=>{const ke=ye.value;if(ke){const W=ke.getBoundingClientRect(),Ce=window.innerWidth,L=window.innerHeight,Ge=8;let bt=F.clientX,Ct=F.clientY;bt+W.width>Ce&&(bt=Math.max(Ge,F.clientX-W.width)),Ct+W.height>L&&(Ct=Math.max(Ge,F.clientY-W.height)),be.value=bt,Ie.value=Ct}});const P=()=>{De.value=!1,document.removeEventListener("click",P)};setTimeout(()=>{document.addEventListener("click",P)},0)}async function St(pe){if(pe)try{await Vt.confirm(`${e("@A1833:确定要撤销提交 ")}${pe.hash.substring(0,7)}${e("@A1833: 吗?这将创建一个新的提交来撤销这次提交的更改。")}`,"撤销提交确认",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"});const F=await(await fetch("/api/revert-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:pe.hash})})).json();F.success?(u.success(F.message||"已成功撤销提交"),Fe(),i.fetchStatus(),i.getBranchStatus()):u.error(F.error||"撤销提交失败")}catch(b){b!=="cancel"&&u.error("撤销提交失败: "+(b.message||b))}}async function q(pe){if(pe)try{await Vt.confirm(`${e("@A1833:确定要将提交 ")}${pe.hash.substring(0,7)}${e("@A1833: Cherry-Pick 到当前分支吗?")}`,"Cherry-Pick确认",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"});const F=await(await fetch("/api/cherry-pick-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:pe.hash})})).json();F.success?(u.success(F.message||"已成功Cherry-Pick提交"),Fe(),i.fetchStatus(),i.getBranchStatus()):u.error(F.error||"Cherry-Pick提交失败")}catch(b){b!=="cancel"&&u.error("Cherry-Pick提交失败: "+(b.message||b))}}async function te(pe){if(pe)try{await navigator.clipboard.writeText(pe.hash),u.success(`${e("@A1833:已复制提交哈希: ")}${pe.hash.substring(0,7)}`)}catch(b){u.error(`${e("@A1833:复制提交哈希失败: ")}${b.message}`)}}async function x(pe){if(pe)try{await Vt.confirm(`${e("@A1833:确定要将当前分支重置(hard)到提交 ")}${pe.hash.substring(0,7)} 吗?
|
|
64
64
|
|
|
65
65
|
警告:这将丢失该提交之后的所有更改!`,"重置确认",{confirmButtonText:"确认重置",cancelButtonText:"取消",type:"warning",dangerouslyUseHTMLString:!0});const F=await(await fetch("/api/reset-to-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:pe.hash})})).json();F.success?(u.success(F.message||"已成功重置到指定提交"),Fe(),i.fetchStatus(),i.getBranchStatus()):u.error(F.error||"重置到指定提交失败")}catch(b){b!=="cancel"&&u.error("重置到指定提交失败: "+(b.message||b))}}function ce(){if(!i.hasMoreData||$.value||y.value||m.value)return;if(!ve.value){H();return}const{scrollTop:pe,scrollHeight:b,clientHeight:F}=ve.value;b-pe-F<=50&&Be()}const we=g(!1);function Ne(){we.value=!we.value}return(pe,b)=>{var Ce;const F=at,P=ea("Document"),ke=gt,W=Cs;return r(),v(He,null,[s("div",{class:Qe(["card",{"fullscreen-mode":we.value}])},[s("div",tv,[s("div",sv,[s("h2",null,l(t(e)("@A1833:提交历史")),1)]),s("div",av,[a(lt,{tooltip:O.value?t(e)("@A1833:隐藏筛选"):t(e)("@A1833:显示筛选"),active:O.value,"custom-class":"filter-button",onClick:b[0]||(b[0]=L=>O.value=!O.value)},{default:o(()=>[a(F,null,{default:o(()=>[a(t(cn))]),_:1})]),_:1},8,["tooltip","active"]),a(lt,{tooltip:we.value?t(e)("@A1833:退出全屏"):t(e)("@A1833:全屏显示"),active:we.value,"custom-class":"fullscreen-button",onClick:Ne},{default:o(()=>[we.value?(r(),v("svg",ov,b[13]||(b[13]=[s("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"},null,-1)]))):(r(),Y(F,{key:0},{default:o(()=>[a(t(yo))]),_:1}))]),_:1},8,["tooltip","active"]),a(lt,{tooltip:t(e)("@A1833:刷新日志"),"custom-class":"refresh-button",onClick:b[1]||(b[1]=L=>Fe())},{default:o(()=>[a(F,null,{default:o(()=>[a(t(Fs))]),_:1})]),_:1},8,["tooltip"])])]),O.value?(r(),v("div",nv,[s("div",lv,[s("div",iv,[a(t(ts),{modelValue:S.value,"onUpdate:modelValue":b[2]||(b[2]=L=>S.value=L),placeholder:t(e)("@A1833:选择作者"),multiple:"",clearable:"",filterable:"",class:"filter-input",size:"small"},{prefix:o(()=>[s("span",rv,l(t(e)("@A1833:作者")),1)]),default:o(()=>[(r(!0),v(He,null,st(Se.value,L=>(r(),Y(t(ss),{key:L,label:L,value:L},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),s("div",cv,[a(t(ts),{modelValue:ee.value,"onUpdate:modelValue":b[3]||(b[3]=L=>ee.value=L),placeholder:t(e)("@A1833:选择分支"),multiple:"",clearable:"",filterable:"",class:"filter-input",size:"small"},{prefix:o(()=>[s("span",uv,l(t(e)("@A1833:分支")),1)]),default:o(()=>[(r(!0),v(He,null,st(G.value,L=>(r(),Y(t(ss),{key:L,label:L,value:L},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"])]),s("div",dv,[a(t(Tt),{modelValue:se.value,"onUpdate:modelValue":b[4]||(b[4]=L=>se.value=L),placeholder:t(e)("@A1833:提交信息关键词"),clearable:"",class:"filter-input",size:"small",onKeyup:As(Ve,["enter"])},{prefix:o(()=>[s("span",pv,l(t(e)("@A1833:信息")),1)]),_:1},8,["modelValue","placeholder"])]),s("div",fv,[a(t(un),{modelValue:ge.value,"onUpdate:modelValue":b[5]||(b[5]=L=>ge.value=L),type:"daterange","range-separator":t(e)("@A1833:至"),"start-placeholder":t(e)("@A1833:开始日期"),"end-placeholder":t(e)("@A1833:结束日期"),format:"YYYY-MM-DD","value-format":"YYYY-MM-DD",class:"filter-input date-range",size:"small"},{prefix:o(()=>[s("span",mv,l(t(e)("@A1833:日期")),1)]),_:1},8,["modelValue","range-separator","start-placeholder","end-placeholder"])]),s("div",vv,[a(t(rt),{type:"primary",size:"small",onClick:Ve,class:"filter-action-button"},{default:o(()=>[z(l(t(e)("@A1833:应用")),1)]),_:1}),a(t(rt),{type:"info",size:"small",onClick:Pe,class:"filter-action-button"},{default:o(()=>[z(l(t(e)("@A1833:重置")),1)]),_:1})])])])):I("",!0),s("div",{class:Qe(["content-area",{"with-filter":O.value}])},[d.value&&t(i).isGitRepo?(r(),v("div",hv,l(d.value),1)):t(i).isGitRepo?(r(),v("div",Cv,[s("div",_v,[zt((r(),Y(t(Co),{ref_key:"tableRef",ref:K,data:ue.value,stripe:"",border:"",size:"small",class:"log-table compact-table","empty-text":y.value?t(e)("@A1833:加载中..."):t(e)("@A1833:没有匹配的提交记录"),height:"450",onRowContextmenu:$t,onRowClick:b[6]||(b[6]=L=>Ke(L))},{default:o(()=>[a(t(Zs),{label:t(e)("@A1833:提交信息"),"min-width":"300"},{default:o(L=>[s("div",bv,[s("div",wv,[L.row.branch?(r(),v("div",kv,[(r(!0),v(He,null,st(L.row.branch.split(","),(Ge,bt)=>(r(),Y(t(ws),{key:bt,size:"small",type:ae(Ge),class:"branch-tag"},{default:o(()=>[z(l(oe(Ge)),1)]),_:2},1032,["type"]))),128))])):I("",!0),s("span",$v,l(L.row.message),1),a(t(rt),{icon:t(ys),size:"small",onClick:Jt(Ge=>Te(L.row.message),["stop"]),class:"copy-message-btn",title:t(e)("@A1833:复制纯净提交信息(不含类型前缀)")},null,8,["icon","onClick","title"])])])]),_:1},8,["label"]),a(t(Zs),{prop:"date",label:t(e)("@A1833:日期"),width:"150",resizable:""},null,8,["label"]),a(t(Zs),{label:t(e)("@A1833:作者"),width:"100",resizable:""},{default:o(L=>[a(ke,{content:L.row.email,placement:"top","show-after":200},{default:o(()=>[s("span",Sv,l(L.row.author),1)]),_:2},1032,["content"])]),_:1},8,["label"])]),_:1},8,["data","empty-text"])),[[W,y.value]])])])):(r(),v("div",gv,[a(F,{class:"log-empty-icon"},{default:o(()=>[a(P)]),_:1}),s("span",yv,l(t(e)("@A1833:暂无提交记录")),1)]))],2),a(Mt,{modelValue:C.value,"onUpdate:modelValue":b[7]||(b[7]=L=>C.value=L),title:`${t(e)("@A1833:提交详情: ")}${(Ce=B.value)!=null&&Ce.hash?B.value.hash:t(e)("@A1833:未知")}`,size:"fullscreen",type:"flex",heightMode:"fixed","destroy-on-close":"","custom-class":"commit-detail-dialog"},{default:o(()=>[zt((r(),v("div",Dv,[B.value?(r(),v("div",Fv,[s("div",Bv,[s("div",Ov,[s("span",Nv,l(t(e)("@A1833:日期")),1),s("span",Tv,l(B.value.date),1)]),s("div",Av,[s("span",Ev,l(t(e)("@A1833:提交信息")),1),s("div",{class:"info-message",innerHTML:t(jn)(B.value.message).replace(/\n/g,"<br>")},null,8,Pv)])])])):I("",!0),a(Na,{files:T.value,loading:D.value,diffContent:f.value,selectedFile:w.value,plainText:!1,compareMode:E.value!=="diff",compareOriginal:X.value,compareModified:V.value,context:"commit-detail",emptyText:t(e)("@A1833:没有找到变更文件"),onFileSelect:Ae,onOpenFile:Ee,onOpenWithVscode:le},{"header-extra":o(()=>[a(t(rt),{size:"small",type:E.value==="diff"?"primary":"default",onClick:A},{default:o(()=>[z(l(t(e)("@A1833:仅显示差异")),1)]),_:1},8,["type"]),a(t(rt),{size:"small",type:E.value!=="diff"?"primary":"default",onClick:M},{default:o(()=>[z(l(t(e)("@A1833:显示完整对比")),1)]),_:1},8,["type"])]),_:1},8,["files","loading","diffContent","selectedFile","compareMode","compareOriginal","compareModified","emptyText"])])),[[W,D.value]])]),_:1},8,["modelValue","title"])],2),zt(s("div",{class:Qe(["context-menu",{"fullscreen-context-menu":we.value}]),style:ls({top:Ie.value+"px",left:be.value+"px"}),ref_key:"contextMenuRef",ref:ye},[s("div",{class:"context-menu-item",onClick:b[8]||(b[8]=L=>Ke(Q.value))},[b[14]||(b[14]=s("i",{class:"el-icon-view"},null,-1)),z(" "+l(t(e)("@A1833:查看详情")),1)]),s("div",{class:"context-menu-item",onClick:b[9]||(b[9]=L=>te(Q.value))},[b[15]||(b[15]=s("i",{class:"el-icon-document-copy"},null,-1)),z(" "+l(t(e)("@A1833:复制提交哈希")),1)]),s("div",{class:"context-menu-item",onClick:b[10]||(b[10]=L=>x(Q.value))},[b[16]||(b[16]=s("i",{class:"el-icon-refresh-right"},null,-1)),z(" "+l(t(e)("@A1833:重置到该提交(hard)")),1)]),s("div",{class:"context-menu-item",onClick:b[11]||(b[11]=L=>St(Q.value))},[b[17]||(b[17]=s("i",{class:"el-icon-delete"},null,-1)),z(" "+l(t(e)("@A1833:撤销提交 (Revert)")),1)]),s("div",{class:"context-menu-item",onClick:b[12]||(b[12]=L=>q(Q.value))},[b[18]||(b[18]=s("i",{class:"el-icon-edit"},null,-1)),z(" Cherry"+l(t(e)("@A1833:-Pick 到当前分支")),1)])],6),[[Ss,De.value]])],64)}}}),Mv=Je(Vv,[["__scopeId","data-v-393888d1"]]),Gv={class:"dir-browser"},Iv={key:0,class:"current-path"},Rv=["title"],Lv={key:1,class:"dir-list"},xv=["onClick"],Uv=["title"],zv={key:1,class:"dir-empty"},Hv=We({__name:"DirectoryBrowserDialog",props:{modelValue:{type:Boolean},initialPath:{default:""}},emits:["update:modelValue","select"],setup(Z,{emit:k}){const i=Z,c=k,p=g(null),d=g(!1);async function h(N){d.value=!0;try{const B=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:N})})).json();B.success?p.value=B:u.error(B.error||"加载目录失败")}catch(C){u.error(`浏览目录失败: ${C.message}`)}finally{d.value=!1}}function y(N){h(N)}function m(){var N;(N=p.value)!=null&&N.path&&c("select",p.value.path),c("update:modelValue",!1)}function $(){c("update:modelValue",!1)}return Ze(()=>i.modelValue,N=>{N?h(i.initialPath||""):p.value=null}),(N,C)=>{const B=at,n=Cs;return r(),Y(Mt,{"model-value":N.modelValue,title:"浏览并选择目录",size:"small","show-footer":!0,"confirm-text":"确定","append-to-body":!0,"destroy-on-close":!0,"onUpdate:modelValue":$,onConfirm:m,onCancel:$},{default:o(()=>[zt((r(),v("div",Gv,[p.value?(r(),v("div",Iv,[C[1]||(C[1]=s("span",{class:"path-label"},"当前路径:",-1)),s("span",{class:"path-value",title:p.value.path},l(p.value.path),9,Rv)])):I("",!0),p.value?(r(),v("div",Lv,[p.value.parentPath?(r(),v("div",{key:0,class:"dir-item dir-item--parent",onClick:C[0]||(C[0]=f=>y(p.value.parentPath))},[a(B,{class:"dir-icon dir-icon--parent"},{default:o(()=>[a(t(Xt))]),_:1}),C[2]||(C[2]=s("span",{class:"dir-name"},"返回上级目录",-1))])):I("",!0),(r(!0),v(He,null,st(p.value.items,f=>(r(),v("div",{key:f.path,class:"dir-item",onClick:D=>y(f.path)},[a(B,{class:"dir-icon"},{default:o(()=>[a(t(Xt))]),_:1}),s("span",{class:"dir-name",title:f.name},l(f.name),9,Uv)],8,xv))),128)),!p.value.parentPath&&p.value.items.length===0?(r(),v("div",zv," 此目录下没有子目录 ")):I("",!0)])):I("",!0)])),[[n,d.value]])]),_:1},8,["model-value"])}}}),Io=Je(Hv,[["__scopeId","data-v-9306cf30"]]),Wv={class:"command-container"},jv={class:"left-panel"},qv={class:"command-form"},Jv={class:"form-header"},Kv={class:"left-title"},Yv={class:"form-content"},Qv={class:"form-row"},Zv={class:"form-field"},Xv={class:"required"},eh={class:"form-row"},th={class:"form-field"},sh={class:"form-row"},ah={class:"form-field"},oh={class:"directory-input-group"},nh={class:"form-row"},lh={class:"form-field"},ih={class:"required"},rh={key:0,class:"command-params"},ch={class:"params-title"},uh={class:"form-actions"},dh={class:"right-panel"},ph={class:"command-list"},fh={class:"list-header"},mh={class:"list-content"},vh={key:1,class:"command-list-scroll"},hh={class:"name-cell"},gh={class:"name-text"},yh={key:0,class:"description-text"},Ch={class:"command-text"},_h={class:"directory-text"},bh={class:"action-buttons"},wh=We({__name:"CustomCommandManager",props:{visible:{type:Boolean},fullscreen:{type:Boolean}},emits:["update:visible","execute-command"],setup(Z,{expose:k,emit:i}){function c(ue){const T=`${ue}(copy)`,j=Array.isArray(O.value)?O.value:[],oe=K=>j.some(ve=>String((ve==null?void 0:ve.name)||"")===K);if(!oe(T))return T;let ae=2;for(;ae<1e3;){const K=`${ue}(copy${ae})`;if(!oe(K))return K;ae++}return`${T}-${Date.now()}`}async function p(ue){try{const T=D(ue),j={name:c(String((ue==null?void 0:ue.name)||"").trim()||e("@CMD01:命令名称")),description:String((ue==null?void 0:ue.description)||""),directory:String((ue==null?void 0:ue.directory)||""),command:String((ue==null?void 0:ue.command)||""),params:JSON.parse(JSON.stringify(T||[]))};(!j.directory||!j.directory.trim())&&(j.directory=y.currentDirectory||"");const oe=await y.saveCustomCommand(j)}catch(T){u.error(`${e("@CMD01:保存命令失败: ")}${T.message}`)}}const d=Z,h=i,y=Ut(),m=ie(()=>y.commandTemplates||[]),$=g(!1);function N(ue,T){const j=Array.isArray(m.value)?m.value:[],ae=[...ue?j.filter(K=>K.toLowerCase().includes(ue.toLowerCase())).map(K=>({value:K})):j.map(K=>({value:K})),{value:"⚙️ 管理模板...",isSettings:!0}];T(ae)}function C(ue){if(ue.isSettings){$.value=!0,w.value.command="";return}w.value.command=ue.value}function B(ue){const T=[],j=/{{\s*([a-zA-Z0-9_]+)\s*}}/g;let oe;for(;oe=j.exec(ue);){const ae=String(oe[1]||"").trim();ae&&!T.includes(ae)&&T.push(ae)}return T}function n(ue,T){return ue.replace(/{{\s*([a-zA-Z0-9_]+)\s*}}/g,(j,oe)=>{const ae=String(oe||"").trim();return Object.prototype.hasOwnProperty.call(T,ae)?String(T[ae]??""):""})}const f=We({name:"CmdParamForm",props:{vars:{type:Array,required:!0},values:{type:Object,required:!0},params:{type:Array,required:!1}},setup(ue){function T(j){const ae=(Array.isArray(ue.params)?ue.params:[]).find(K=>String((K==null?void 0:K.name)||"")===j);return ae?String((ae==null?void 0:ae.description)||"").trim():""}return()=>kt("div",{class:"cmd-param-form"},ue.vars.map(j=>kt("div",{class:"cmd-param-row"},[kt("div",{class:"cmd-param-label"},j),kt(Tt,{modelValue:ue.values[j],"onUpdate:modelValue":oe=>{ue.values[j]=String(oe??"")},placeholder:e("@CMD01:请输入变量值",{var:j}),clearable:!0}),T(j)?kt("div",{class:"cmd-param-desc"},T(j)):null])))}});function D(ue){const T=String((ue==null?void 0:ue.command)||""),j=B(T),oe=Array.isArray(ue==null?void 0:ue.params)?ue.params:[],ae=new Map;for(const K of oe){const ve=String((K==null?void 0:K.name)||"").trim();ve&&ae.set(ve,{name:ve,defaultValue:String((K==null?void 0:K.defaultValue)??""),required:!!(K!=null&&K.required),description:String((K==null?void 0:K.description)??"")})}return j.map(K=>ae.has(K)?ae.get(K):{name:K,defaultValue:"",required:!1,description:""})}const w=g({name:"",description:"",directory:"",command:"",params:[]}),E=g(!1),X=g(""),V=g(!1),O=ie(()=>y.customCommands||[]),S=ie({get:()=>d.visible,set:ue=>h("update:visible",ue)});Ze(S,ue=>{ue||se()});function se(){w.value={name:"",description:"",directory:"",command:"",params:[]},E.value=!1,X.value=""}Ze(()=>w.value.command,ue=>{const T=String(ue||""),j=B(T);if(!j.length){w.value.params=[];return}const oe=Array.isArray(w.value.params)?w.value.params:[],ae=new Map(oe.map(K=>[String((K==null?void 0:K.name)||""),K]));w.value.params=j.map(K=>{const ve=ae.get(K);return{name:K,defaultValue:ve?String(ve.defaultValue??""):"",required:ve?!!ve.required:!1,description:ve?String(ve.description??""):""}})},{immediate:!0});async function ge(){if(!w.value.name.trim()){u.warning(e("@CMD01:命令名称不能为空"));return}if(!w.value.command.trim()){u.warning(e("@CMD01:命令内容不能为空"));return}try{V.value=!0,E.value?await y.updateCustomCommand(X.value,w.value)&&se():((!w.value.directory||!w.value.directory.trim())&&(w.value.directory=y.currentDirectory||""),await y.saveCustomCommand(w.value)&&se())}catch(ue){u.error(`${e("@CMD01:命令保存失败: ")}${ue.message}`)}finally{V.value=!1}}function Se(ue){E.value=!0,X.value=ue.id||"",w.value={name:ue.name,description:ue.description||"",directory:ue.directory,command:ue.command,params:D(ue)}}function ee(){se()}async function G(ue){try{await Vt.confirm(e("@CMD01:确定要删除这个自定义命令吗?"),e("@CMD01:删除确认"),{confirmButtonText:e("@CMD01:确定"),cancelButtonText:e("@CMD01:取消"),type:"warning"}),await y.deleteCustomCommand(ue)}catch{}}async function De(ue){const T=String((ue==null?void 0:ue.command)||""),j=B(T);if(!j.length){h("execute-command",ue);return}const oe=ra({});try{const ae=D(ue),K=new Map(ae.map(H=>[String(H.name),H]));for(const H of j){const ne=K.get(H);oe[H]=ne?String(ne.defaultValue??""):""}await Vt({title:e("@CMD01:执行参数"),message:kt(f,{vars:j,values:oe,params:ae}),showCancelButton:!0,confirmButtonText:e("@CMD01:确定"),cancelButtonText:e("@CMD01:取消"),closeOnClickModal:!1,customClass:"cmd-param-message-box"});const ve=(Array.isArray(ue==null?void 0:ue.params)?ue.params:[]).map(H=>({name:String((H==null?void 0:H.name)||"").trim(),required:!!(H!=null&&H.required)})).filter(H=>H.name);for(const H of ve){if(!H.required)continue;const ne=oe[H.name];if(ne==null||String(ne).trim()===""){u.warning(e("@CMD01:请输入必填变量: ",{var:H.name}));return}}const fe=n(T,oe);h("execute-command",{...ue,command:fe})}catch{}}const Ie=g(!1);function be(){Ie.value=!0}function Q(ue){w.value.directory=ue}function ye(){w.value.directory=y.currentDirectory||""}return k({resetForm:se}),(ue,T)=>{const j=rt,oe=at,ae=go,K=Zs,ve=Bs,fe=Co,H=Zt,ne=ka;return r(),v(He,null,[a(ne,{modelValue:S.value,"onUpdate:modelValue":T[4]||(T[4]=me=>S.value=me),title:t(e)("@CMD01:自定义命令管理"),"close-on-click-modal":!1,"append-to-body":!0,"modal-append-to-body":!0,fullscreen:!!ue.fullscreen,width:ue.fullscreen?"100vw":"90%",top:ue.fullscreen?"0":"50px","z-index":3e6,"modal-class":"custom-command-overlay",class:"custom-command-dialog"},{default:o(()=>[s("div",Wv,[s("div",jv,[s("div",qv,[s("div",Jv,[s("div",Kv,l(E.value?t(e)("@CMD01:编辑命令"):t(e)("@CMD01:添加命令")),1)]),s("div",Yv,[s("div",Qv,[s("div",Zv,[s("label",Xv,l(t(e)("@CMD01:命令名称")),1),a(t(Tt),{modelValue:w.value.name,"onUpdate:modelValue":T[0]||(T[0]=me=>w.value.name=me),placeholder:t(e)("@CMD01:输入命令名称,例如: 拉取代码"),clearable:"",size:"large"},null,8,["modelValue","placeholder"])])]),s("div",eh,[s("div",th,[s("label",null,l(t(e)("@CMD01:描述")),1),a(t(Tt),{modelValue:w.value.description,"onUpdate:modelValue":T[1]||(T[1]=me=>w.value.description=me),placeholder:t(e)("@CMD01:可选,简要描述命令用途"),clearable:"",size:"large"},null,8,["modelValue","placeholder"])])]),s("div",sh,[s("div",ah,[s("label",null,l(t(e)("@CMD01:执行目录")),1),s("div",oh,[a(t(Tt),{modelValue:w.value.directory,"onUpdate:modelValue":T[2]||(T[2]=me=>w.value.directory=me),placeholder:t(e)("@CMD01:留空使用当前目录"),clearable:"",size:"large"},null,8,["modelValue","placeholder"]),a(j,{onClick:ye,type:"primary",plain:"",size:"default"},{default:o(()=>[z(l(t(e)("@CMD01:使用当前目录")),1)]),_:1}),a(j,{onClick:be,type:"info",plain:"",size:"default"},{default:o(()=>[a(oe,null,{default:o(()=>[a(t(Xt))]),_:1}),z(" "+l(t(e)("@CMD01:选择目录")),1)]),_:1})])])]),s("div",nh,[s("div",lh,[s("label",ih,l(t(e)("@CMD01:命令")),1),a(ae,{modelValue:w.value.command,"onUpdate:modelValue":T[3]||(T[3]=me=>w.value.command=me),"fetch-suggestions":N,placeholder:t(e)("@CMD01:输入要执行的命令,例如: npm run build"),clearable:"",size:"large","trigger-on-focus":"","popper-class":"custom-command-popper",onSelect:C,onKeyup:As(ge,["enter"]),style:{width:"100%"}},null,8,["modelValue","placeholder"]),w.value.params&&w.value.params.length>0?(r(),v("div",rh,[s("div",ch,l(t(e)("@CMD01:变量配置")),1),a(fe,{data:w.value.params,style:{width:"100%"},size:"small",stripe:""},{default:o(()=>[a(K,{prop:"name",label:t(e)("@CMD01:变量名"),width:"160"},null,8,["label"]),a(K,{label:t(e)("@CMD01:默认值"),"min-width":"180"},{default:o(me=>[a(t(Tt),{modelValue:me.row.defaultValue,"onUpdate:modelValue":Fe=>me.row.defaultValue=Fe,size:"small",clearable:"",placeholder:t(e)("@CMD01:默认值")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),_:1},8,["label"]),a(K,{label:t(e)("@CMD01:必填"),width:"90",align:"center"},{default:o(me=>[a(ve,{modelValue:me.row.required,"onUpdate:modelValue":Fe=>me.row.required=Fe},null,8,["modelValue","onUpdate:modelValue"])]),_:1},8,["label"]),a(K,{label:t(e)("@CMD01:描述"),"min-width":"220"},{default:o(me=>[a(t(Tt),{modelValue:me.row.description,"onUpdate:modelValue":Fe=>me.row.description=Fe,size:"small",clearable:"",placeholder:t(e)("@CMD01:描述")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),_:1},8,["label"])]),_:1},8,["data"])])):I("",!0)])]),s("div",uh,[E.value?(r(),Y(j,{key:0,onClick:ee,size:"large"},{default:o(()=>[z(l(t(e)("@CMD01:取消")),1)]),_:1})):I("",!0),a(j,{type:"primary",onClick:ge,disabled:!w.value.name.trim()||!w.value.command.trim()||V.value,loading:V.value,size:"large",class:"save-btn"},{default:o(()=>[z(l(E.value?t(e)("@CMD01:更新命令"):t(e)("@CMD01:添加命令")),1)]),_:1},8,["disabled","loading"])])])])]),s("div",dh,[s("div",ph,[s("div",fh,[s("h3",null,l(t(e)("@CMD01:已保存的命令")),1)]),s("div",mh,[O.value.length===0?(r(),Y(H,{key:0,description:t(e)("@CMD01:暂无保存的命令")},null,8,["description"])):(r(),v("div",vh,[a(fe,{data:O.value,style:{width:"100%",height:"100%"},stripe:""},{default:o(()=>[a(K,{prop:"name",label:t(e)("@CMD01:命令名称"),"min-width":"80"},{default:o(me=>[s("div",hh,[s("span",gh,l(me.row.name),1),me.row.description?(r(),v("span",yh,l(me.row.description),1)):I("",!0)])]),_:1},8,["label"]),a(K,{prop:"command",label:t(e)("@CMD01:命令"),"min-width":"200"},{default:o(me=>[s("code",Ch,l(me.row.command),1)]),_:1},8,["label"]),a(K,{prop:"directory",label:t(e)("@CMD01:执行目录"),"min-width":"200"},{default:o(me=>[s("span",_h,l(me.row.directory),1)]),_:1},8,["label"]),a(K,{label:t(e)("@CMD01:操作"),width:"110",fixed:"right"},{default:o(me=>[s("div",bh,[a(lt,{tooltip:t(e)("@CMD01:执行命令"),size:"small","hover-color":"var(--color-success)",onClick:Fe=>De(me.row)},{default:o(()=>[a(oe,null,{default:o(()=>[a(t(ps))]),_:1})]),_:2},1032,["tooltip","onClick"]),a(lt,{tooltip:t(e)("@CMD01:编辑"),size:"small","hover-color":"var(--color-primary)",onClick:Fe=>Se(me.row)},{default:o(()=>[a(oe,null,{default:o(()=>[a(t(Ts))]),_:1})]),_:2},1032,["tooltip","onClick"]),a(lt,{tooltip:t(e)("@CMD01:复制命令"),size:"small","hover-color":"var(--color-warning)",onClick:Fe=>p(me.row)},{default:o(()=>[a(oe,null,{default:o(()=>[a(t(ys))]),_:1})]),_:2},1032,["tooltip","onClick"]),a(lt,{tooltip:t(e)("@CMD01:删除"),size:"small","hover-color":"var(--color-danger)",onClick:Fe=>G(me.row.id)},{default:o(()=>[a(oe,null,{default:o(()=>[a(t(ns))]),_:1})]),_:2},1032,["tooltip","onClick"])])]),_:1},8,["label"])]),_:1},8,["data"])]))])])])])]),_:1},8,["modelValue","title","fullscreen","width","top"]),a(Xs,{visible:$.value,"onUpdate:visible":T[5]||(T[5]=me=>$.value=me),type:"command",title:t(e)("@CMD01:命令模板管理"),placeholder:t(e)("@CMD01:输入命令模板,例如: npm run build"),"edit-placeholder":t(e)("@CMD01:编辑命令模板"),"empty-description":t(e)("@CMD01:暂无保存的命令模板")},null,8,["visible","title","placeholder","edit-placeholder","empty-description"]),a(Io,{modelValue:Ie.value,"onUpdate:modelValue":T[6]||(T[6]=me=>Ie.value=me),"initial-path":w.value.directory||t(y).currentDirectory,onSelect:Q},null,8,["modelValue","initial-path"])],64)}}}),kh=Je(wh,[["__scopeId","data-v-ba078ea4"]]),$h={class:"project-startup-dialog"},Sh={class:"after-quick-push"},Dh={class:"after-quick-push__header"},Fh={class:"after-quick-push__title"},Bh={class:"after-quick-push__switch"},Oh={class:"after-quick-push__label"},Nh={class:"after-quick-push__row"},Th={class:"after-quick-push__hint"},Ah={class:"startup-toolbar"},Eh={class:"startup-toolbar__left"},Ph={class:"startup-toolbar__title"},Vh={class:"startup-toolbar__meta"},Mh={key:0,class:"startup-toolbar__warn"},Gh={class:"startup-toolbar__right"},Ih={class:"startup-auto-run"},Rh={class:"startup-auto-run__label"},Lh={key:0,class:"startup-empty"},xh={key:1,class:"startup-list"},Uh={class:"startup-item__main"},zh=["title"],Hh=["title"],Wh=["title"],jh=["title"],qh=["title"],Jh={class:"startup-item__actions"},Kh={class:"startup-add"},Yh={class:"startup-add__title"},Qh={class:"startup-add__type"},Zh={class:"startup-add__row"},Xh={class:"startup-option"},eg={class:"startup-option__name"},tg={class:"startup-option__cmd"},sg={class:"startup-option"},ag={class:"startup-option__name"},og={class:"startup-option__cmd"},ng=We({__name:"ProjectStartupDialog",props:{visible:{type:Boolean}},emits:["update:visible","execute-command","execute-workflow"],setup(Z,{emit:k}){const{t:i}=ia(),c=Z,p=k,d=Ut(),h=ie({get:()=>c.visible,set:Q=>p("update:visible",Q)}),y=ie({get:()=>d.startupAutoRun,set:async Q=>{ge.value=!0;try{await d.saveStartupItems(m.value,Q)}finally{ge.value=!1}}}),m=ie({get:()=>d.startupItems,set:Q=>{d.saveStartupItems(Q,y.value)}}),$=ie(()=>d.customCommands||[]),N=ie(()=>{const Q=new Map;for(const ye of $.value)ye!=null&&ye.id&&Q.set(String(ye.id),ye);return Q}),C=ie(()=>d.orchestrations||[]),B=ie(()=>{const Q=new Map;for(const ye of C.value)ye!=null&&ye.id&&Q.set(String(ye.id),ye);return Q}),n=ie({get:()=>d.afterQuickPushAction,set:Q=>{d.saveAfterQuickPushAction(Q)}}),f=ie({get:()=>{var Q;return!!((Q=n.value)!=null&&Q.enabled)},set:async Q=>{E.value=!0;try{await d.saveAfterQuickPushAction({enabled:Q,type:D.value,refId:w.value})}finally{E.value=!1}}}),D=ie({get:()=>{var Q;return((Q=n.value)==null?void 0:Q.type)==="workflow"?"workflow":"command"},set:async Q=>{E.value=!0;try{w.value="",await d.saveAfterQuickPushAction({enabled:f.value,type:Q,refId:""})}finally{E.value=!1}}}),w=g(""),E=g(!1);Ze(()=>d.afterQuickPushAction,Q=>{w.value=String((Q==null?void 0:Q.refId)||"")},{immediate:!0});async function X(Q){E.value=!0;try{await d.saveAfterQuickPushAction({enabled:f.value,type:D.value,refId:Q})}finally{E.value=!1}}const V=ie(()=>m.value.map(Q=>({...Q,cmd:Q.type==="command"?N.value.get(Q.refId):null,wf:Q.type==="workflow"?B.value.get(Q.refId):null})).filter(Q=>Q.type==="command"?!!Q.cmd:!!Q.wf)),O=ie(()=>m.value.filter(Q=>Q.type==="workflow"?!B.value.get(Q.refId):!N.value.get(Q.refId)).length),S=g("command"),se=g(""),ge=g(!1),Se=g({});async function ee(Q,ye){Se.value={...Se.value,[Q]:!0};try{const ue=m.value.map(T=>T.id===Q?{...T,enabled:ye}:T);await d.saveStartupItems(ue,y.value)}finally{const{[Q]:ue,...T}=Se.value;Se.value=T}}function G(){if(!se.value){S.value==="workflow"?u.warning(i("@PSTART:请选择一个工作流")):u.warning(i("@PSTART:请选择一个命令"));return}if(m.value.some(T=>T.type===S.value&&T.refId===se.value)){u.info(i("@PSTART:该启动项已存在"));return}const ye={id:`startup_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:S.value,refId:se.value,createdAt:Date.now(),enabled:!0},ue=[...m.value,ye];d.saveStartupItems(ue,y.value),se.value="",u.success(i("@PSTART:已添加启动项"))}async function De(Q){try{await Vt.confirm(i("@PSTART:删除确认"),i("@PSTART:删除启动项"),{confirmButtonText:i("@PSTART:确定"),cancelButtonText:i("@PSTART:取消"),type:"warning"});const ye=m.value.filter(ue=>ue.id!==Q.id);d.saveStartupItems(ye,y.value),u.success(i("@PSTART:已删除启动项"))}catch{}}function Ie(){const Q=m.value.length,ye=m.value.filter(T=>T.type==="workflow"?!!B.value.get(T.refId):!!N.value.get(T.refId)),ue=ye.length;ue!==Q?(d.saveStartupItems(ye,y.value),u.success(i("@PSTART:已清理N个失效启动项",{count:Q-ue}))):u.info(i("@PSTART:没有需要清理的启动项"))}function be(Q){if(Q.type==="command"){const ye=Q.cmd;if(!ye){u.warning(i("@PSTART:命令不存在"));return}p("execute-command",ye),u.success(i("@PSTART:已触发命令执行"))}else if(Q.type==="workflow"){const ye=Q.wf;if(!ye){u.warning(i("@PSTART:工作流不存在"));return}p("execute-workflow",ye),u.success(i("@PSTART:已触发工作流执行"))}}return(Q,ye)=>{const ue=Bs,T=Da,j=Ws,oe=ss,ae=ts,K=at,ve=rt,fe=gt;return r(),Y(Mt,{modelValue:h.value,"onUpdate:modelValue":ye[8]||(ye[8]=H=>h.value=H),title:t(i)("@PSTART:项目启动项"),size:"medium",type:"flex","height-mode":"max","height-offset":"140px"},{default:o(()=>[s("div",$h,[s("div",Sh,[s("div",Dh,[s("div",Fh,l(t(i)("@PSTART:一键推送成功后执行")),1),s("div",Bh,[s("span",Oh,l(t(i)("@PSTART:启用")),1),a(ue,{modelValue:f.value,"onUpdate:modelValue":ye[0]||(ye[0]=H=>f.value=H),size:"small",loading:E.value},null,8,["modelValue","loading"])])]),s("div",Nh,[a(j,{modelValue:D.value,"onUpdate:modelValue":ye[1]||(ye[1]=H=>D.value=H),size:"small",disabled:E.value},{default:o(()=>[a(T,{label:"command"},{default:o(()=>[z(l(t(i)("@PSTART:命令")),1)]),_:1}),a(T,{label:"workflow"},{default:o(()=>[z(l(t(i)("@PSTART:工作流")),1)]),_:1})]),_:1},8,["modelValue","disabled"]),a(ae,{modelValue:w.value,"onUpdate:modelValue":ye[2]||(ye[2]=H=>w.value=H),class:"after-quick-push__select",placeholder:D.value==="workflow"?t(i)("@PSTART:选择一个工作流"):t(i)("@PSTART:选择一个自定义命令"),filterable:"",clearable:"",disabled:E.value,onChange:ye[3]||(ye[3]=H=>X(String(H||"")))},{default:o(()=>[D.value==="workflow"?(r(!0),v(He,{key:0},st(C.value,H=>(r(),Y(oe,{key:H.id,label:H.name,value:H.id},null,8,["label","value"]))),128)):(r(!0),v(He,{key:1},st($.value,H=>(r(),Y(oe,{key:H.id,label:H.name,value:H.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","disabled"])]),s("div",Th,l(t(i)("@PSTART:仅在一键推送成功后触发,不影响主流程")),1)]),s("div",Ah,[s("div",Eh,[s("div",Ph,l(t(i)("@PSTART:启动项列表")),1),s("div",Vh,"("+l(V.value.length)+")",1),O.value>0?(r(),v("div",Mh,l(t(i)("@PSTART:有N项已失效",{count:O.value})),1)):I("",!0)]),s("div",Gh,[s("div",Ih,[s("span",Rh,l(t(i)("@PSTART:刷新页面自动执行")),1),a(ue,{modelValue:y.value,"onUpdate:modelValue":ye[4]||(ye[4]=H=>y.value=H),size:"small",loading:ge.value},null,8,["modelValue","loading"])]),a(fe,{content:t(i)("@PSTART:清理失效启动项"),placement:"bottom"},{default:o(()=>[a(ve,{size:"small",onClick:Ie,disabled:O.value===0},{default:o(()=>[a(K,null,{default:o(()=>[a(t(Fs))]),_:1}),z(" "+l(t(i)("@PSTART:清理")),1)]),_:1},8,["disabled"])]),_:1},8,["content"])])]),V.value.length===0?(r(),v("div",Lh,l(t(i)("@PSTART:暂无启动项")),1)):(r(),v("div",xh,[(r(!0),v(He,null,st(V.value,H=>{var ne,me,Fe,Ke,Xe,R,_,de,Ae,A,M,Ee,le,Te,Be,Pe,Ve;return r(),v("div",{key:H.id,class:"startup-item"},[s("div",Uh,[s("div",{class:"startup-item__name",title:H.type==="workflow"?(ne=H.wf)==null?void 0:ne.name:(me=H.cmd)==null?void 0:me.name},[s("span",{class:Qe(["startup-item__type",H.type==="workflow"?"is-workflow":"is-command"])},l(H.type==="workflow"?t(i)("@PSTART:工作流"):t(i)("@PSTART:命令")),3),z(" "+l(H.type==="workflow"?(Fe=H.wf)==null?void 0:Fe.name:(Ke=H.cmd)==null?void 0:Ke.name),1)],8,zh),H.type==="command"?(r(),v("div",{key:0,class:"startup-item__desc",title:(Xe=H.cmd)==null?void 0:Xe.command},l((R=H.cmd)==null?void 0:R.command),9,Hh)):(r(),v("div",{key:1,class:"startup-item__desc",title:((_=H.wf)==null?void 0:_.description)||((de=H.wf)==null?void 0:de.name)},l(((Ae=H.wf)==null?void 0:Ae.description)||t(i)("@PSTART:工作流")),9,Wh)),H.type==="command"?(r(),v("div",{key:2,class:"startup-item__dir",title:(A=H.cmd)==null?void 0:A.directory},l(t(i)("@PSTART:目录"))+":"+l(((M=H.cmd)==null?void 0:M.directory)||"-"),9,jh)):(r(),v("div",{key:3,class:"startup-item__dir",title:String(((Te=(le=(Ee=H.wf)==null?void 0:Ee.flowData)==null?void 0:le.nodes)==null?void 0:Te.length)||0)},l(t(i)("@PSTART:步骤"))+":"+l(((Ve=(Pe=(Be=H.wf)==null?void 0:Be.flowData)==null?void 0:Pe.nodes)==null?void 0:Ve.length)||0),9,qh))]),s("div",Jh,[a(fe,{content:t(i)("@PSTART:刷新页面自动执行"),placement:"top"},{default:o(()=>[a(ue,{"model-value":H.enabled!==!1,size:"small",loading:!!Se.value[H.id],"onUpdate:modelValue":ut=>ee(H.id,!!ut)},null,8,["model-value","loading","onUpdate:modelValue"])]),_:2},1032,["content"]),a(fe,{content:t(i)("@PSTART:执行"),placement:"top"},{default:o(()=>[a(ve,{text:"",type:"primary",size:"small",onClick:ut=>be(H)},{default:o(()=>[a(K,null,{default:o(()=>[a(t(ps))]),_:1})]),_:2},1032,["onClick"])]),_:2},1032,["content"]),a(fe,{content:t(i)("@PSTART:删除"),placement:"top"},{default:o(()=>[a(ve,{text:"",type:"danger",size:"small",onClick:ut=>De(H)},{default:o(()=>[a(K,null,{default:o(()=>[a(t(ns))]),_:1})]),_:2},1032,["onClick"])]),_:2},1032,["content"])])])}),128))])),s("div",Kh,[s("div",Yh,l(t(i)("@PSTART:添加启动项")),1),s("div",Qh,[a(j,{modelValue:S.value,"onUpdate:modelValue":ye[5]||(ye[5]=H=>S.value=H),size:"small",onChange:ye[6]||(ye[6]=H=>se.value="")},{default:o(()=>[a(T,{label:"command"},{default:o(()=>[z(l(t(i)("@PSTART:命令")),1)]),_:1}),a(T,{label:"workflow"},{default:o(()=>[z(l(t(i)("@PSTART:工作流")),1)]),_:1})]),_:1},8,["modelValue"])]),s("div",Zh,[a(ae,{modelValue:se.value,"onUpdate:modelValue":ye[7]||(ye[7]=H=>se.value=H),class:"startup-add__select",placeholder:S.value==="workflow"?t(i)("@PSTART:选择一个工作流"):t(i)("@PSTART:选择一个自定义命令"),filterable:"",clearable:""},{default:o(()=>[S.value==="workflow"?(r(!0),v(He,{key:0},st(C.value,H=>(r(),Y(oe,{key:H.id,label:H.name,value:H.id},{default:o(()=>{var ne,me;return[s("div",Xh,[s("div",eg,l(H.name),1),s("div",tg,l(H.description||`步骤: ${((me=(ne=H.flowData)==null?void 0:ne.nodes)==null?void 0:me.length)||0}`),1)])]}),_:2},1032,["label","value"]))),128)):(r(!0),v(He,{key:1},st($.value,H=>(r(),Y(oe,{key:H.id,label:H.name,value:H.id},{default:o(()=>[s("div",sg,[s("div",ag,l(H.name),1),s("div",og,l(H.command),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder"]),a(ve,{type:"primary",onClick:G},{default:o(()=>[a(K,null,{default:o(()=>[a(t(os))]),_:1}),z(" "+l(t(i)("@PSTART:添加")),1)]),_:1})])])])]),_:1},8,["modelValue","title"])}}}),lg=Je(ng,[["__scopeId","data-v-11d7f88a"]]),ig=We({__name:"ProjectStartupButton",emits:["execute-command","execute-workflow"],setup(Z,{emit:k}){const{t:i}=ia(),c=k,p=g(!1);function d(){p.value=!0}function h(m){c("execute-command",m)}function y(m){c("execute-workflow",m)}return(m,$)=>(r(),v("div",null,[a(lt,{tooltip:t(i)("@PSTART:项目启动项"),"hover-color":"#409EFF",onClick:d,"custom-class":"project-startup-btn"},{default:o(()=>[a(At,{"icon-class":"start-run-command","class-name":"icon-btn"})]),_:1},8,["tooltip"]),a(lg,{visible:p.value,"onUpdate:visible":$[0]||($[0]=N=>p.value=N),onExecuteCommand:h,onExecuteWorkflow:y},null,8,["visible"])]))}}),rg=Je(ig,[["__scopeId","data-v-914b5529"]]),cg={key:0},ug={key:1},dg={key:2},pg={key:3,class:"node-header"},fg={class:"flow-node-icon"},mg={class:"node-title"},vg={class:"node-body"},hg={key:4,class:"disabled-overlay"},gg=We({__name:"BaseNode",props:{id:{},nodeId:{},nodeType:{default:"command"},title:{},icon:{},enabled:{type:Boolean,default:!0},selected:{type:Boolean,default:!1},deletable:{type:Boolean,default:!0},showDeleteOnSelected:{type:Boolean,default:!1},sourceHandleIds:{},execStatus:{}},emits:["delete"],setup(Z,{emit:k}){const i=Z,c=ie(()=>!!(i.title&&String(i.title).trim()||i.icon&&String(i.icon).trim())),p=ie(()=>c.value?16:0),d=ie(()=>i.sourceHandleIds&&i.sourceHandleIds.length?i.sourceHandleIds:["source"]),h=k;return(y,m)=>{const $=at;return r(),v("div",{class:Qe(["flow-node-wrapper",[{disabled:!y.enabled,"is-selected":y.selected,"show-delete-on-selected":y.showDeleteOnSelected},y.nodeType?`node-type-${y.nodeType}`:""]])},[y.nodeType!=="start"?(r(),Y(t(fa),{key:0,id:"target",type:"target",position:t(pa).Left,class:"flow-node-handle handle-left"},null,8,["position"])):I("",!0),y.deletable!==!1?(r(),Y($,{key:1,class:"flow-node-delete-btn",onClick:m[0]||(m[0]=Jt(N=>h("delete",y.nodeId),["stop"])),title:"删除节点",role:"button",tabindex:"0"},{default:o(()=>[a(t(dn))]),_:1})):I("",!0),y.execStatus?(r(),v("div",{key:2,class:Qe(["flow-node-status",[`status-${y.execStatus}`]])},[y.execStatus==="running"?(r(),v("span",cg,"执行中")):y.execStatus==="success"?(r(),v("span",ug,"成功")):(r(),v("span",dg,"失败"))],2)):I("",!0),y.title||y.icon?(r(),v("div",pg,[s("div",fg,l(y.icon),1),s("div",mg,l(y.title),1)])):I("",!0),s("div",vg,[fs(y.$slots,"default",{},void 0,!0)]),y.enabled?I("",!0):(r(),v("div",hg,"已禁用")),y.nodeType==="condition"?(r(!0),v(He,{key:5},st(d.value,N=>(r(),Y(t(fa),{key:N,id:N,type:"source",position:t(pa).Right,class:"flow-node-handle handle-right",style:ls({top:`calc(50% + ${p.value}px + ${(d.value.indexOf(N)-(d.value.length-1)/2)*18}px)`})},null,8,["id","position","style"]))),128)):(r(),Y(t(fa),{key:6,id:"source",type:"source",position:t(pa).Right,class:"flow-node-handle handle-right"},null,8,["position"]))],2)}}}),aa=Je(gg,[["__scopeId","data-v-5c886827"]]),yg={class:"command-node-content"},Cg={class:"node-badges"},_g={key:0,class:"node-badge terminal"},bg={key:0,class:"node-warning"},wg={key:1,class:"command-details"},kg={class:"command-code"},$g={key:0,class:"command-dir"},Sg=We({__name:"CommandNode",props:{data:{},id:{}},setup(Z){const k=Z,i=Ut(),c=ie(()=>!k.data.config||!k.data.config.commandId?null:i.customCommands.find(h=>h.id===k.data.config.commandId)||null),p=ie(()=>{var d,h;return k.data.config?{name:k.data.config.commandName||e("@FLOWNODE:未配置"),terminal:k.data.config.useTerminal||!1,command:((d=c.value)==null?void 0:d.command)||"",directory:((h=c.value)==null?void 0:h.directory)||""}:null});return(d,h)=>{var m,$;const y=at;return r(),v("div",yg,[s("div",Cg,[(m=p.value)!=null&&m.terminal?(r(),v("div",_g,[a(y,null,{default:o(()=>[a(t(xs))]),_:1}),s("span",null,l(t(e)("@FLOWNODE:终端")),1)])):I("",!0)]),d.data.config?I("",!0):(r(),v("div",bg,l(t(e)("@FLOWNODE:未配置")),1)),($=p.value)!=null&&$.command?(r(),v("div",wg,[s("div",kg,[s("code",null,l(p.value.command),1)]),p.value.directory?(r(),v("div",$g,[a(y,null,{default:o(()=>[a(t(Xt))]),_:1}),s("span",null,l(p.value.directory),1)])):I("",!0)])):I("",!0)])}}}),Ro=Je(Sg,[["__scopeId","data-v-c64b7099"]]),Dg={class:"wait-node-content"},Fg={key:0,class:"node-warning"},Bg={key:1,class:"wait-seconds"},Og=We({__name:"WaitNode",props:{data:{},id:{}},setup(Z){return(k,i)=>{var c;return r(),v("div",Dg,[k.data.config?(r(),v("div",Bg,l(t(e)("@FLOWNODE:等待 {seconds} 秒",{seconds:((c=k.data.config)==null?void 0:c.waitSeconds)??0})),1)):(r(),v("div",Fg,l(t(e)("@FLOWNODE:未配置")),1))])}}}),Lo=Je(Og,[["__scopeId","data-v-5c0bacde"]]),Ng={class:"version-node-content"},Tg={key:0,class:"node-badge"},Ag={key:1,class:"info-grid"},Eg={class:"info-label"},Pg=["title"],Vg={key:2,class:"node-warning"},Mg=We({__name:"VersionNode",props:{data:{},id:{}},setup(Z){const k=Z,i=ie(()=>{var m,$;if(!k.data.config)return null;const c=k.data.config,p=String((c==null?void 0:c.versionTarget)||"version"),d=String((c==null?void 0:c.versionSource)||"bump"),h=[];h.push({label:e("@FLOWNODE:目标"),value:e(p==="dependency"?"@FLOWNODE:依赖版本":"@FLOWNODE:version字段")}),h.push({label:e("@FLOWNODE:来源"),value:e(d==="reference"?"@FLOWNODE:引用输出":d==="input"?"@FLOWNODE:引用输入":d==="manual"?"@FLOWNODE:手动输入":"@FLOWNODE:自动递增")});const y=String((c==null?void 0:c.packageJsonPath)||"").trim();if(h.push({label:e("@FLOWNODE:package.json"),value:y||e("@FLOWNODE:当前目录")}),p==="dependency"){const N=String((c==null?void 0:c.dependencyType)||"dependencies"),C=String((c==null?void 0:c.dependencyName)||"").trim();if(C&&h.push({label:e("@FLOWNODE:依赖"),value:`${N}::${C}`}),d==="manual"){const B=String((c==null?void 0:c.dependencyVersion)||"").trim();B&&h.push({label:e("@FLOWNODE:版本号"),value:B})}else if(d==="bump"){const B=String((c==null?void 0:c.dependencyVersionBump)||(c==null?void 0:c.versionBump)||"patch");h.push({label:e("@FLOWNODE:递增"),value:B})}else if(d==="reference"){const B=String(((m=c==null?void 0:c.inputRef)==null?void 0:m.nodeId)||"").trim(),n=String((($=c==null?void 0:c.inputRef)==null?void 0:$.outputKey)||"").trim(),f=B&&n?`${B}::${n}`:"";f&&h.push({label:e("@FLOWNODE:引用"),value:f})}else if(d==="input"){const B=String((c==null?void 0:c.dependencyVersionInputKey)||(c==null?void 0:c.versionInputKey)||"").trim();B&&h.push({label:e("@FLOWNODE:引用"),value:B})}}else{const N=String((c==null?void 0:c.versionBump)||"patch");h.push({label:e("@FLOWNODE:递增"),value:N})}return{target:p,rows:h}});return(c,p)=>{var d,h,y;return r(),v("div",Ng,[((d=i.value)==null?void 0:d.target)==="dependency"?(r(),v("div",Tg,l(t(e)("@FLOWNODE:依赖")),1)):I("",!0),(y=(h=i.value)==null?void 0:h.rows)!=null&&y.length?(r(),v("div",Ag,[(r(!0),v(He,null,st(i.value.rows,(m,$)=>(r(),v("div",{key:$,class:"info-row"},[s("div",Eg,l(m.label),1),s("div",{class:"info-value",title:m.value},l(m.value),9,Pg)]))),128))])):I("",!0),c.data.config?I("",!0):(r(),v("div",Vg,l(t(e)("@FLOWNODE:未配置")),1))])}}}),xo=Je(Mg,[["__scopeId","data-v-8b45244f"]]),Gg={key:0,class:"confirm-node-content"},Ig={class:"node-warning"},Rg=We({__name:"ConfirmNode",props:{data:{},id:{}},setup(Z){return(k,i)=>k.data.config?I("",!0):(r(),v("div",Gg,[s("div",Ig,l(t(e)("@FLOWNODE:未配置")),1)]))}}),Uo=Je(Rg,[["__scopeId","data-v-230ca263"]]),Lg={class:"code-node-content"},xg={key:0,class:"node-warning"},Ug={key:1,class:"code-details"},zg={class:"code-meta"},Hg={class:"meta-item"},Wg={class:"meta-item"},jg=We({__name:"CodeNode",props:{data:{},id:{}},setup(Z){const k=Z,i=ie(()=>{const c=k.data.config||{};return{hasScript:!!(c.codeScript&&String(c.codeScript).trim()),outputKeys:Array.isArray(c.codeOutputKeys)?c.codeOutputKeys:[]}});return(c,p)=>(r(),v("div",Lg,[c.data.config?(r(),v("div",Ug,[s("div",zg,[s("span",Hg,l(t(e)("@NODECFG:脚本"))+": "+l(i.value.hasScript?t(e)("@FLOWNODE:已添加"):t(e)("@FLOWNODE:未配置")),1),s("span",Wg,l(t(e)("@NODECFG:输出键列表"))+": "+l(i.value.outputKeys.length?i.value.outputKeys.join(", "):t(e)("@FLOWNODE:未配置")),1)])])):(r(),v("div",xg,l(t(e)("@FLOWNODE:未配置")),1))]))}}),zo=Je(jg,[["__scopeId","data-v-dd521e2d"]]),qg={class:"condition-node"},Jg={key:0,class:"condition-empty"},Kg={key:1,class:"condition-branches"},Yg={class:"branch-name"},Qg={class:"branch-meta"},Zg=We({__name:"ConditionNode",props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(Z){const k=Z,i=ie(()=>{var h;const c=(h=k.data)==null?void 0:h.config;return[...Array.isArray(c==null?void 0:c.conditionBranches)?c.conditionBranches:[]].sort((y,m)=>(y.priority??0)-(m.priority??0))});return(c,p)=>(r(),v("div",qg,[i.value.length===0?(r(),v("div",Jg,"未配置条件分支")):(r(),v("div",Kg,[(r(!0),v(He,null,st(i.value,d=>(r(),v("div",{key:d.id,class:"condition-branch"},[s("span",Yg,l(d.isDefault?"DEFAULT":d.name),1),s("span",Qg,"("+l(d.combine.toUpperCase())+" / "+l(d.rules.length)+")",1)]))),128))]))]))}}),Ho=Je(Zg,[["__scopeId","data-v-7fbdbc3f"]]),Xg={class:"user-input-node-content"},e2={key:0,class:"node-warning"},t2={key:0,class:"node-warning"},s2={key:1,class:"param-summary"},a2={class:"param-count"},o2={class:"param-list"},n2={key:0,class:"star"},l2={key:0,class:"more"},i2=We({__name:"UserInputNode",props:{data:{},id:{}},setup(Z){const k=Z,i=ie(()=>{var m;const h=(m=k.data)==null?void 0:m.config;return(Array.isArray(h==null?void 0:h.userInputParams)?h.userInputParams:[]).map($=>String(($==null?void 0:$.name)||"").trim()).filter($=>!!$)}),c=ie(()=>{var $;const h=($=k.data)==null?void 0:$.config,y=Array.isArray(h==null?void 0:h.userInputParams)?h.userInputParams:[],m=new Set;for(const N of y){const C=String((N==null?void 0:N.name)||"").trim();C&&N!=null&&N.required&&m.add(C)}return m}),p=ie(()=>i.value.slice(0,3)),d=ie(()=>i.value.length>3);return(h,y)=>(r(),v("div",Xg,[h.data.config?(r(),v(He,{key:1},[i.value.length===0?(r(),v("div",t2,l(t(e)("@UINPUT:暂无输入参数")),1)):(r(),v("div",s2,[s("div",a2,l(t(e)("@UINPUT:参数名"))+" ("+l(i.value.length)+")",1),s("div",o2,[(r(!0),v(He,null,st(p.value,m=>(r(),v("span",{key:m,class:Qe(["param-chip",{required:c.value.has(m)}])},[c.value.has(m)?(r(),v("span",n2,"*")):I("",!0),z(" "+l(m),1)],2))),128)),d.value?(r(),v("span",l2,"+"+l(i.value.length-3),1)):I("",!0)])]))],64)):(r(),v("div",e2,l(t(e)("@FLOWNODE:未配置")),1))]))}}),Wo=Je(i2,[["__scopeId","data-v-f55e1923"]]),r2=We({__name:"NodeContextMenu",props:{nodeId:{}},emits:["execute-from-node","execute-single-node"],setup(Z,{emit:k}){const i=Z,c=k,p=g(!1);function d(h){h==="executeFrom"?c("execute-from-node",i.nodeId):h==="executeSingle"&&c("execute-single-node",i.nodeId)}return(h,y)=>{const m=at,$=fn,N=pn,C=mn;return r(),Y(C,{trigger:"contextmenu",onCommand:d,onVisibleChange:y[0]||(y[0]=B=>p.value=B),"popper-class":"flow-node-dropdown"},{dropdown:o(()=>[a(N,null,{default:o(()=>[a($,{command:"executeFrom"},{default:o(()=>[a(m,null,{default:o(()=>[a(t(ps))]),_:1}),y[1]||(y[1]=z(" 从此处开始执行 "))]),_:1}),a($,{command:"executeSingle"},{default:o(()=>[a(m,null,{default:o(()=>[a(t(ps))]),_:1}),y[2]||(y[2]=z(" 只执行此节点 "))]),_:1})]),_:1})]),default:o(()=>[fs(h.$slots,"default",{dropdownVisible:p.value})]),_:3})}}}),c2={class:"package-json-selector"},u2={class:"selector-container"},d2={class:"option-content"},p2={class:"option-main"},f2={class:"package-name"},m2={class:"option-path"},v2={key:0,class:"empty-hint"},h2=We({__name:"PackageJsonSelector",props:{modelValue:{},placeholder:{},clearable:{type:Boolean},disabled:{type:Boolean}},emits:["update:modelValue","change"],setup(Z,{emit:k}){const i=Z,c=k,p=g(!1),d=g([]),h=g(""),y=ie({get:()=>i.modelValue,set:n=>{h.value=n,c("update:modelValue",n);const f=d.value.find(D=>D.fullPath===n);c("change",f||null)}}),m=ie(()=>d.value.map(n=>({label:n.displayName,value:n.fullPath,relativePath:n.relativePath,version:n.version})));async function $(n){p.value=!0;try{const f=n?`/api/scan-package-files?directory=${encodeURIComponent(n)}`:"/api/scan-package-files",D=await fetch(f);if(!D.ok)throw new Error(`HTTP ${D.status}: ${D.statusText}`);const w=await D.json();if(w.success){d.value=w.packages||[],y.value&&!d.value.some(X=>X.fullPath===y.value)&&(y.value="");const E=n?`目录 ${n}`:"当前项目";u.success(`扫描 ${E} 完成,找到 ${d.value.length} 个 package.json 文件`)}else throw new Error(w.error||"扫描失败")}catch(f){console.error("扫描package.json文件失败:",f),u.error(`扫描失败: ${f.message}`),d.value=[]}finally{p.value=!1}}async function N(){try{const f=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:""})})).json();f.success?C(f):f.error&&u.error(f.error)}catch(n){u.error(`浏览目录失败: ${n.message}`)}}function C(n){if(!n||!n.items)return;let f=String(n.path||"");const D=()=>{const w=String(f||"").trim();if(!w){u.warning("请输入目录路径");return}B(w)};Vt.alert(kt("div",{class:"directory-browser"},[kt("div",{class:"current-path"},[kt("span",{class:"path-label"},"当前路径:"),kt("input",{class:"path-value",value:f,onInput:w=>{f=w.target.value},onKeydown:w=>{w.key==="Enter"&&(w.preventDefault(),D())}}),kt("button",{type:"button",class:"path-jump-btn",onClick:D},"跳转")]),kt("div",{class:"directory-list"},[n.parentPath?kt("div",{class:"directory-item parent-dir",onClick:()=>B(n.parentPath)},[kt("span",{class:"dir-icon"},kt("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-warning)"}},[kt("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"})])),kt("span",{class:"dir-name"},"返回上级目录")]):null,...n.items.map(w=>kt("div",{class:"directory-item",onClick:()=>B(w.path)},[kt("span",{class:"dir-icon"},kt("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"var(--color-primary)"}},[kt("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"})])),kt("span",{class:"dir-name"},w.name)]))])]),"浏览并选择目录",{confirmButtonText:"确定",cancelButtonText:"取消",showCancelButton:!0,customClass:"directory-browser-dialog",callback:w=>{if(w==="confirm"){const E=String(f||n.path||"").trim();if(!E){u.warning("请输入目录路径");return}$(E)}}})}async function B(n){try{Vt.close(),setTimeout(async()=>{try{const D=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:n})})).json();D.success?C(D):D.error&&u.error(D.error)}catch(f){u.error(`浏览目录失败: ${f.message}`)}},100)}catch(f){u.error(`处理目录选择时出错: ${f.message}`)}}return $(),Ze(()=>i.modelValue,n=>{h.value=n},{immediate:!0}),(n,f)=>{const D=at,w=ss,E=ts,X=rt,V=hn;return r(),v("div",c2,[s("div",u2,[a(E,{modelValue:y.value,"onUpdate:modelValue":f[0]||(f[0]=O=>y.value=O),placeholder:n.placeholder||"选择 package.json 文件",clearable:n.clearable,disabled:n.disabled||p.value,filterable:"",class:"package-select"},{default:o(()=>[(r(!0),v(He,null,st(m.value,O=>(r(),Y(w,{key:O.value,label:O.label,value:O.value},{default:o(()=>[s("div",d2,[s("div",p2,[a(D,{class:"folder-icon"},{default:o(()=>[a(t(Xt))]),_:1}),s("span",f2,l(O.label),1)]),s("div",m2,l(O.relativePath),1)])]),_:2},1032,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","clearable","disabled"]),a(X,{icon:p.value?t(Ht):t(la),loading:p.value,disabled:n.disabled,size:"default",onClick:f[1]||(f[1]=O=>$()),class:"refresh-btn",title:"刷新当前项目"},{default:o(()=>[z(l(p.value?"扫描中...":"刷新"),1)]),_:1},8,["icon","loading","disabled"]),a(X,{icon:t(vn),disabled:n.disabled||p.value,size:"default",onClick:N,class:"custom-dir-btn",title:"浏览并选择其他目录"},{default:o(()=>f[2]||(f[2]=[z(" 其他目录 ")])),_:1},8,["icon","disabled"])]),d.value.length===0&&!p.value?(r(),v("div",v2,[a(V,{type:"info",size:"small"},{default:o(()=>f[3]||(f[3]=[z(" 未找到 package.json 文件,请确保项目包含有效的 package.json ")])),_:1})])):I("",!0)])}}}),g2=Je(h2,[["__scopeId","data-v-d84ec8a7"]]),y2={class:"param-list"},C2={key:0,class:"param-list__title"},_2={key:0,class:"param-list__title-text"},b2={class:"param-list__title-actions"},w2={key:1,class:"param-list__empty"},k2={key:2,class:"param-list__body"},$2={class:"param-list__row-content"},S2={key:0,class:"param-list__row-actions"},D2=We({__name:"ParamListContainer",props:{modelValue:{},title:{},addable:{type:Boolean},removable:{type:Boolean},minItems:{},createItem:{type:Function},itemKey:{type:Function},disableAdd:{type:Boolean},disableRemove:{type:Function}},emits:["update:modelValue","add","remove"],setup(Z,{emit:k}){const i=Z,c=k,p=ie(()=>Array.isArray(i.modelValue)?i.modelValue:[]);function d(){if(!i.addable||i.disableAdd)return;const m=i.createItem;if(!m)return;const $=[...p.value,m()];c("update:modelValue",$),c("add")}function h(m){if(!i.removable)return;const $=typeof i.minItems=="number"?i.minItems:0;if(p.value.length<=$)return;const N=p.value[m];if(i.disableRemove&&i.disableRemove(N,m))return;const C=[...p.value];C.splice(m,1),c("update:modelValue",C),c("remove",m)}function y(m,$){return i.itemKey?i.itemKey(m,$):$}return(m,$)=>{const N=rt;return r(),v("div",y2,[m.title!==void 0||m.addable?(r(),v("div",C2,[m.title?(r(),v("span",_2,l(m.title),1)):I("",!0),s("div",b2,[fs(m.$slots,"title-actions",{},void 0,!0),m.addable?(r(),Y(N,{key:0,type:"primary",plain:"",icon:t(os),disabled:m.disableAdd||!m.createItem,onClick:d},null,8,["icon","disabled"])):I("",!0)])])):I("",!0),p.value.length===0?(r(),v("div",w2,[fs(m.$slots,"empty",{},void 0,!0)])):(r(),v("div",k2,[(r(!0),v(He,null,st(p.value,(C,B)=>(r(),v("div",{key:y(C,B),class:Qe(["param-list__row",{"param-list__row--no-actions":!m.removable}])},[s("div",$2,[fs(m.$slots,"row",{item:C,index:B},void 0,!0)]),m.removable?(r(),v("div",S2,[a(N,{type:"danger",plain:"",icon:t(ns),disabled:typeof m.minItems=="number"&&p.value.length<=m.minItems||(m.disableRemove?m.disableRemove(C,B):!1),onClick:n=>h(B)},null,8,["icon","disabled","onClick"])])):I("",!0)],2))),128))]))])}}}),Ns=Je(D2,[["__scopeId","data-v-dd70d4bc"]]),F2={class:"node-input-config"},B2={class:"input-row"},O2={class:"input-field param-name-field"},N2={class:"field-label"},T2={class:"input-field type-field"},A2={class:"field-label"},E2={class:"input-field value-field"},P2={class:"field-label"},V2={class:"tree-node-label"},M2={class:"input-field required-field"},G2={class:"field-label"},I2=We({__name:"NodeInputConfig",props:{modelValue:{},paramNames:{},disableParamNameEdit:{type:Boolean},predecessorNodes:{}},emits:["update:modelValue"],setup(Z,{emit:k}){const i=Z,c=k,p=g([]);Ze(()=>i.modelValue,C=>{p.value=C?[...C]:[]},{immediate:!0,deep:!0}),Ze(()=>i.paramNames,C=>{if(!C||C.length===0){p.value=[],c("update:modelValue",[]);return}const B=new Map(p.value.map(f=>[f.paramName,f])),n=[];for(const f of C)B.has(f)?n.push(B.get(f)):n.push({paramName:f,inputType:"manual",required:!1,manualValue:""});p.value=n,c("update:modelValue",n)},{immediate:!0});function d(C,B,n){if(!p.value[C])return;const f=[...p.value];f[C]={...f[C],[B]:n},B==="inputType"&&(n==="manual"?(f[C].referenceNodeId=void 0,f[C].referenceOutputKey=void 0):f[C].manualValue=void 0),p.value=f,c("update:modelValue",f)}function h(C){var B,n,f;return C.type==="command"?((B=C.data.config)==null?void 0:B.displayName)||((n=C.data.config)==null?void 0:n.commandName)||C.data.label||e("@FLOWNODE:命令节点"):C.type==="code"?((f=C.data.config)==null?void 0:f.displayName)||C.data.label||e("@FLOWNODE:代码节点"):C.data.label||C.id}function y(C){var B,n;if(C.type==="command")return[{key:"stdout",label:e("@NODEINPUT:标准输出(stdout)")},{key:"stderr",label:e("@NODEINPUT:标准错误(stderr)")},{key:"error",label:e("@NODEINPUT:错误(error)")}];if(C.type==="code"){const f=(B=C.data)==null?void 0:B.config,D=Array.isArray(f==null?void 0:f.codeOutputParams)?f.codeOutputParams:[];if(D.length>0)return D.map(X=>String((X==null?void 0:X.key)||"").trim()).filter(X=>!!X).map(X=>({key:X,label:X}));const w=f==null?void 0:f.codeOutputKeys;return(Array.isArray(w)?w:[]).map(X=>String(X||"").trim()).filter(X=>!!X).map(X=>({key:X,label:X}))}if(C.type==="user_input"){const f=(n=C.data)==null?void 0:n.config;return(Array.isArray(f==null?void 0:f.userInputParams)?f.userInputParams:[]).map(w=>String((w==null?void 0:w.name)||"").trim()).filter(w=>!!w).map(w=>({key:w,label:w}))}return[]}const m=ie(()=>!i.predecessorNodes||i.predecessorNodes.length===0?[]:i.predecessorNodes.map(C=>({value:C.id,label:h(C),children:y(C).map(B=>({value:`${C.id}::${B.key}`,label:B.label}))})));function $(C,B){if(!B)return;const[n,f]=B.split("::"),D=[...p.value];D[C]={...D[C],referenceNodeId:n,referenceOutputKey:f},p.value=D,c("update:modelValue",D)}function N(C){return C.referenceNodeId&&C.referenceOutputKey?`${C.referenceNodeId}::${C.referenceOutputKey}`:""}return(C,B)=>{const n=Tt,f=ss,D=ts,w=at,E=ca,X=Bs;return r(),v("div",F2,[a(Ns,{"model-value":p.value,title:void 0,addable:!1,removable:!1},{empty:o(()=>[z(l(t(e)("@NODEINPUT:命令中未检测到变量参数")),1)]),row:o(({item:V,index:O})=>[s("div",B2,[s("div",O2,[s("label",N2,l(t(e)("@NODEINPUT:参数名")),1),a(n,{"model-value":V.paramName,disabled:C.disableParamNameEdit,placeholder:t(e)("@NODEINPUT:参数名"),size:"default","onUpdate:modelValue":S=>d(O,"paramName",S)},null,8,["model-value","disabled","placeholder","onUpdate:modelValue"])]),s("div",T2,[s("label",A2,l(t(e)("@NODEINPUT:类型")),1),a(D,{"model-value":V.inputType,placeholder:t(e)("@NODEINPUT:选择类型"),size:"default","onUpdate:modelValue":S=>d(O,"inputType",S)},{default:o(()=>[a(f,{value:"manual",label:t(e)("@NODEINPUT:手动输入")},null,8,["label"]),a(f,{value:"reference",label:t(e)("@NODEINPUT:引用节点"),disabled:!C.predecessorNodes||C.predecessorNodes.length===0},null,8,["label","disabled"])]),_:2},1032,["model-value","placeholder","onUpdate:modelValue"])]),s("div",E2,[s("label",P2,l(t(e)("@NODEINPUT:值")),1),V.inputType==="manual"?(r(),Y(n,{key:0,"model-value":V.manualValue,placeholder:t(e)("@NODEINPUT:输入参数值"),size:"default",clearable:"","onUpdate:modelValue":S=>d(O,"manualValue",S)},null,8,["model-value","placeholder","onUpdate:modelValue"])):(r(),Y(E,{key:1,"model-value":N(V),data:m.value,placeholder:t(e)("@NODEINPUT:选择节点输出"),size:"default",clearable:"",filterable:"","check-strictly":"","render-after-expand":!1,"onUpdate:modelValue":S=>$(O,S)},{default:o(({data:S})=>[s("span",V2,[S.children?I("",!0):(r(),Y(w,{key:0},{default:o(()=>[a(t(Wt))]),_:1})),z(" "+l(S.label),1)])]),_:2},1032,["model-value","data","placeholder","onUpdate:modelValue"]))]),s("div",M2,[s("label",G2,l(t(e)("@NODEINPUT:必填")),1),a(X,{"model-value":!!V.required,"onUpdate:modelValue":S=>d(O,"required",S)},null,8,["model-value","onUpdate:modelValue"])])])]),_:1},8,["model-value"])])}}}),R2=Je(I2,[["__scopeId","data-v-c29deac4"]]),L2={class:"code-node-input-config"},x2={class:"input-row"},U2={class:"input-field name-field"},z2={class:"field-label"},H2={class:"input-field type-field"},W2={class:"field-label"},j2={class:"input-field value-field"},q2={class:"field-label"},J2={class:"input-field action-field"},K2={class:"field-label"},Y2=We({__name:"CodeNodeInputConfig",props:{modelValue:{},predecessorNodes:{},title:{},addable:{type:Boolean}},emits:["update:modelValue"],setup(Z,{expose:k,emit:i}){const c=Z,p=i,d=g([]);Ze(()=>c.modelValue,f=>{d.value=Array.isArray(f)?[...f]:[]},{immediate:!0,deep:!0});function h(f){var D,w,E;return f.type==="command"?((D=f.data.config)==null?void 0:D.displayName)||((w=f.data.config)==null?void 0:w.commandName)||f.data.label||e("@FLOWNODE:命令节点"):f.type==="code"?((E=f.data.config)==null?void 0:E.displayName)||f.data.label||e("@FLOWNODE:代码节点"):f.data.label||f.id}function y(f){var D,w;if(!f)return[];if(f.type==="command")return[{key:"stdout",label:e("@NODEINPUT:标准输出(stdout)")},{key:"stderr",label:e("@NODEINPUT:标准错误(stderr)")},{key:"error",label:e("@NODEINPUT:错误(error)")}];if(f.type==="code"){const E=(D=f.data)==null?void 0:D.config;return(Array.isArray(E==null?void 0:E.codeOutputParams)?E.codeOutputParams:[]).map(V=>String((V==null?void 0:V.key)||"").trim()).filter(V=>!!V).map(V=>({key:V,label:V}))}if(f.type==="user_input"){const E=(w=f.data)==null?void 0:w.config;return(Array.isArray(E==null?void 0:E.userInputParams)?E.userInputParams:[]).map(V=>String((V==null?void 0:V.name)||"").trim()).filter(V=>!!V).map(V=>({key:V,label:V}))}return[]}const m=ie(()=>!c.predecessorNodes||c.predecessorNodes.length===0?[]:c.predecessorNodes.map(f=>({value:f.id,label:h(f),children:y(f).map(D=>({value:`${f.id}::${D.key}`,label:D.label}))})));function $(){return{name:"",source:"reference",required:!1,ref:{nodeId:"",outputKey:"stdout"}}}function N(){const f=[...d.value,$()];d.value=f,p("update:modelValue",f)}k({addRow:N});function C(f,D){if(!d.value[f])return;const w=[...d.value];w[f]={...w[f],...D},D.source&&(D.source==="manual"?(w[f].ref=void 0,w[f].manualValue===void 0&&(w[f].manualValue="")):(w[f].manualValue=void 0,w[f].ref||(w[f].ref={nodeId:"",outputKey:"stdout"}))),d.value=w,p("update:modelValue",w)}function B(f,D){if(!D)return;const[w,E]=D.split("::");C(f,{ref:{nodeId:w,outputKey:E}})}function n(f){var D,w;return(D=f.ref)!=null&&D.nodeId&&((w=f.ref)!=null&&w.outputKey)?`${f.ref.nodeId}::${f.ref.outputKey}`:""}return(f,D)=>{const w=Tt,E=ss,X=ts,V=ca,O=Bs;return r(),v("div",L2,[a(Ns,{"model-value":d.value,title:f.title,addable:f.addable!==!1,removable:!0,"min-items":0,"create-item":$,"onUpdate:modelValue":D[0]||(D[0]=S=>p("update:modelValue",S))},{empty:o(()=>[z(l(t(e)("@NODECFG:暂无输入参数")),1)]),row:o(({item:S,index:se})=>[s("div",x2,[s("div",U2,[s("label",z2,l(t(e)("@NODECFG:参数名")),1),a(w,{modelValue:S.name,"onUpdate:modelValue":[ge=>S.name=ge,ge=>C(se,{name:ge})],placeholder:t(e)("@NODECFG:参数名")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),s("div",H2,[s("label",W2,l(t(e)("@NODECFG:参数值")),1),a(X,{modelValue:S.source,"onUpdate:modelValue":[ge=>S.source=ge,ge=>C(se,{source:ge})],style:{width:"110px"}},{default:o(()=>[a(E,{label:t(e)("@NODECFG:引用"),value:"reference",disabled:!f.predecessorNodes||f.predecessorNodes.length===0},null,8,["label","disabled"]),a(E,{label:t(e)("@NODECFG:手动"),value:"manual"},null,8,["label"])]),_:2},1032,["modelValue","onUpdate:modelValue"])]),s("div",j2,[s("label",q2,l(t(e)("@NODECFG:值")),1),S.source==="manual"?(r(),Y(w,{key:0,modelValue:S.manualValue,"onUpdate:modelValue":[ge=>S.manualValue=ge,ge=>C(se,{manualValue:ge})],placeholder:t(e)("@NODECFG:请输入")},null,8,["modelValue","onUpdate:modelValue","placeholder"])):(r(),Y(V,{key:1,"model-value":n(S),data:m.value,placeholder:t(e)("@NODEINPUT:选择节点输出"),clearable:"",filterable:"","check-strictly":"","render-after-expand":!1,"onUpdate:modelValue":ge=>B(se,ge)},null,8,["model-value","data","placeholder","onUpdate:modelValue"]))]),s("div",J2,[s("label",K2,l(t(e)("@NODEINPUT:必填")),1),a(O,{"model-value":!!S.required,"onUpdate:modelValue":ge=>C(se,{required:ge})},null,8,["model-value","onUpdate:modelValue"])])])]),_:1},8,["model-value","title","addable"])])}}}),qa=Je(Y2,[["__scopeId","data-v-f1422931"]]),Q2={class:"user-input-param-config"},Z2={class:"input-row"},X2={class:"input-field name-field"},e0={class:"field-label"},t0={class:"input-field type-field"},s0={class:"field-label"},a0={class:"input-field value-field"},o0={class:"field-label"},n0={class:"tree-node-label"},l0={class:"input-field action-field"},i0={class:"field-label"},r0=We({__name:"UserInputParamConfig",props:{modelValue:{},predecessorNodes:{},title:{},addable:{type:Boolean}},emits:["update:modelValue"],setup(Z,{expose:k,emit:i}){const c=Z,p=i,d=g([]);Ze(()=>c.modelValue,f=>{d.value=Array.isArray(f)?[...f]:[]},{immediate:!0,deep:!0});function h(){return{name:"",source:"manual",defaultValue:"",required:!1}}function y(){const f=[...d.value,h()];d.value=f,p("update:modelValue",f)}k({addRow:y});function m(f,D){if(!d.value[f])return;const w=[...d.value];w[f]={...w[f],...D},D.source&&(D.source==="manual"?(w[f].ref=void 0,w[f].defaultValue===void 0&&(w[f].defaultValue="")):(w[f].defaultValue=void 0,w[f].ref||(w[f].ref={nodeId:"",outputKey:"stdout"}))),d.value=w,p("update:modelValue",w)}function $(f){var D,w,E,X;return f.type==="command"?((D=f.data.config)==null?void 0:D.displayName)||((w=f.data.config)==null?void 0:w.commandName)||f.data.label||e("@FLOWNODE:命令节点"):f.type==="code"?((E=f.data.config)==null?void 0:E.displayName)||f.data.label||e("@FLOWNODE:代码节点"):f.type==="user_input"?((X=f.data.config)==null?void 0:X.displayName)||f.data.label||e("@FLOWNODE:用户输入"):f.data.label||f.id}function N(f){var D,w;if(!f)return[];if(f.type==="command")return[{key:"stdout",label:e("@NODEINPUT:标准输出(stdout)")},{key:"stderr",label:e("@NODEINPUT:标准错误(stderr)")},{key:"error",label:e("@NODEINPUT:错误(error)")}];if(f.type==="code"){const E=(D=f.data)==null?void 0:D.config;return(Array.isArray(E==null?void 0:E.codeOutputParams)?E.codeOutputParams:[]).map(V=>String((V==null?void 0:V.key)||"").trim()).filter(V=>!!V).map(V=>({key:V,label:V}))}if(f.type==="user_input"){const E=(w=f.data)==null?void 0:w.config;return(Array.isArray(E==null?void 0:E.userInputParams)?E.userInputParams:[]).map(V=>String((V==null?void 0:V.name)||"").trim()).filter(V=>!!V).map(V=>({key:V,label:V}))}return[]}const C=ie(()=>!c.predecessorNodes||c.predecessorNodes.length===0?[]:c.predecessorNodes.map(f=>({value:f.id,label:$(f),children:N(f).map(D=>({value:`${f.id}::${D.key}`,label:D.label}))})));function B(f,D){if(!D)return;const[w,E]=D.split("::");m(f,{ref:{nodeId:w,outputKey:E}})}function n(f){var D,w;return(D=f.ref)!=null&&D.nodeId&&((w=f.ref)!=null&&w.outputKey)?`${f.ref.nodeId}::${f.ref.outputKey}`:""}return(f,D)=>{const w=Tt,E=ss,X=ts,V=at,O=ca,S=Bs,se=rt;return r(),v("div",Q2,[a(Ns,{"model-value":d.value,title:f.title,addable:f.addable!==!1,removable:!0,"min-items":0,"create-item":h,"onUpdate:modelValue":D[0]||(D[0]=ge=>p("update:modelValue",ge))},{empty:o(()=>[z(l(t(e)("@UINPUT:暂无输入参数")),1)]),row:o(({item:ge,index:Se})=>[s("div",Z2,[s("div",X2,[s("label",e0,l(t(e)("@UINPUT:参数名")),1),a(w,{modelValue:ge.name,"onUpdate:modelValue":[ee=>ge.name=ee,ee=>m(Se,{name:ee})],placeholder:t(e)("@UINPUT:参数名")},null,8,["modelValue","onUpdate:modelValue","placeholder"])]),s("div",t0,[s("label",s0,l(t(e)("@UINPUT:类型")),1),a(X,{modelValue:ge.source,"onUpdate:modelValue":[ee=>ge.source=ee,ee=>m(Se,{source:ee})],style:{width:"130px"}},{default:o(()=>[a(E,{label:t(e)("@UINPUT:手动输入"),value:"manual"},null,8,["label"]),a(E,{label:t(e)("@UINPUT:引用"),value:"reference",disabled:!c.predecessorNodes||c.predecessorNodes.length===0},null,8,["label","disabled"])]),_:2},1032,["modelValue","onUpdate:modelValue"])]),s("div",a0,[s("label",o0,l(ge.source==="manual"?t(e)("@UINPUT:默认值"):t(e)("@UINPUT:引用输出")),1),ge.source==="manual"?(r(),Y(w,{key:0,modelValue:ge.defaultValue,"onUpdate:modelValue":[ee=>ge.defaultValue=ee,ee=>m(Se,{defaultValue:ee})],placeholder:t(e)("@UINPUT:默认值"),clearable:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):(r(),Y(O,{key:1,"model-value":n(ge),data:C.value,placeholder:t(e)("@NODEINPUT:选择节点输出"),clearable:"",filterable:"","check-strictly":"","render-after-expand":!1,"onUpdate:modelValue":ee=>B(Se,ee)},{default:o(({data:ee})=>[s("span",n0,[ee.children?I("",!0):(r(),Y(V,{key:0},{default:o(()=>[a(t(Wt))]),_:1})),z(" "+l(ee.label),1)])]),_:2},1032,["model-value","data","placeholder","onUpdate:modelValue"]))]),s("div",l0,[s("label",i0,l(t(e)("@NODEINPUT:必填")),1),a(S,{"model-value":!!ge.required,"onUpdate:modelValue":ee=>m(Se,{required:ee})},null,8,["model-value","onUpdate:modelValue"])])])]),actions:o(()=>[f.addable!==!1?(r(),Y(se,{key:0,type:"primary",plain:"",size:"small",onClick:y},{default:o(()=>[z(l(t(e)("@UINPUT:添加参数")),1)]),_:1})):I("",!0)]),_:1},8,["model-value","title","addable"])])}}}),c0=Je(r0,[["__scopeId","data-v-1f668177"]]);function u0(Z){if(!Z)return[];const k=/\{\{(\w+)\}\}/g,i=[];let c;for(;(c=k.exec(Z))!==null;){const p=c[1];i.includes(p)||i.push(p)}return i}function d0(Z,k){if(!Z)return"";let i=Z;for(const[c,p]of Object.entries(k)){const d=new RegExp(`\\{\\{${c}\\}\\}`,"g");i=i.replace(d,p||"")}return i}const p0={key:0,class:"config-content"},f0={class:"config-section"},m0={class:"section-title"},v0={key:0,class:"config-section"},h0={class:"section-title"},g0={key:1,class:"config-section"},y0={class:"section-title"},C0={class:"sub-section"},_0={class:"sub-title"},b0={key:0,class:"empty-tip"},w0={key:1,class:"condition-branch-list"},k0={class:"branch-main"},$0={class:"branch-header"},S0={class:"branch-title"},D0={key:0,class:"branch-badge"},F0={class:"branch-meta"},B0={key:0,class:"branch-rules"},O0={class:"rules-header"},N0={class:"rule-col"},T0={class:"field-label"},A0={class:"rule-col"},E0={class:"field-label"},P0={class:"rule-col"},V0={class:"field-label"},M0={class:"rule-col",style:{"align-self":"flex-end"}},G0={key:1,class:"branch-default-tip"},I0={key:0,class:"branch-actions"},R0={key:2,class:"config-section"},L0={class:"section-title"},x0={key:3,class:"config-section"},U0={class:"section-title"},z0={key:4,class:"config-section"},H0={class:"section-title"},W0={key:5,class:"config-section"},j0={class:"section-title"},q0={key:6,class:"config-section"},J0={class:"section-title"},K0={class:"output-param-row"},Y0={class:"output-param-field"},Q0={class:"field-label"},Z0={key:7,class:"config-section"},X0={class:"section-title"},e8={key:0,class:"empty-tip"},t8={key:1,class:"command-list"},s8=["onClick"],a8={class:"command-info"},o8={class:"command-header"},n8={class:"command-name"},l8={key:0,class:"command-desc"},i8={class:"command-code"},r8={class:"command-dir"},c8={key:8,class:"config-section"},u8={class:"section-title"},d8={style:{"margin-left":"var(--spacing-md)"}},p8={key:9,class:"config-section"},f8={class:"section-title"},m8={class:"sub-section"},v8={class:"sub-title"},h8={class:"code-examples"},g8={class:"examples-title"},y8={class:"examples-actions"},C8={key:10,class:"config-section"},_8={class:"section-title"},b8={class:"reference-tip"},w8={class:"reference-tip"},k8={class:"node-option"},$8={class:"node-name"},S8={class:"node-id"},D8={class:"reference-tip"},F8={class:"reference-tip"},B8={key:11,class:"config-section"},O8={class:"section-title"},N8={class:"output-param-row"},T8={class:"output-param-field"},A8={class:"field-label"},E8={class:"output-param-field"},P8={class:"field-label"},V8={key:12,class:"config-section"},M8={class:"section-title"},G8={class:"output-param-row"},I8={class:"output-param-field"},R8={class:"field-label"},L8={class:"output-param-field"},x8={class:"field-label"},U8={class:"dialog-footer"},z8={class:"footer-actions"},H8=`function main(param) {
|
|
66
66
|
const out = new Object()
|