npmapps 1.0.11 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/app/nginxManagement/backend/command_records.json +46 -0
- package/app/nginxManagement/backend/nginx-1.28.0/conf/api.conf +2 -1
- package/app/nginxManagement/backend/nginx-1.28.0/conf/nginx.conf +1 -0
- package/app/nginxManagement/backend/nginx-1.28.0/logs/error.log +18 -62
- package/app/nginxManagement/backend/nm.exe +0 -0
- package/app/nginxManagement/frontend/dist/assets/index-AG5xSNXD.css +1 -0
- package/app/nginxManagement/frontend/dist/assets/{index-_jG9n0U8.js → index-B2VcD4B4.js} +1 -1
- package/app/nginxManagement/frontend/dist/assets/index-BW5QC1wD.js +58 -0
- package/app/nginxManagement/frontend/dist/assets/index-BXCmlf1X.js +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-BqD_g85X.js +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-CZs0cWnm.js +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-CckWg4BZ.js +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-CfQ0CtE1.js +21 -0
- package/app/nginxManagement/frontend/dist/assets/index-CnlsVqSb.js +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-D80vACWt.js +58 -0
- package/app/nginxManagement/frontend/dist/assets/index-DCkNgPTg.css +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-DDbr5qwm.css +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-DIf3GFFr.js +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-DIkZrekD.js +21 -0
- package/app/nginxManagement/frontend/dist/assets/index-DJ10N3ef.js +21 -0
- package/app/nginxManagement/frontend/dist/assets/index-DZqALzxJ.css +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-DijMOVEo.js +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-Dj94f0_e.js +58 -0
- package/app/nginxManagement/frontend/dist/assets/index-DxsiA9NS.css +1 -0
- package/app/nginxManagement/frontend/dist/assets/index-MbI1qjjU.js +21 -0
- package/app/nginxManagement/frontend/dist/assets/index-PO5K0hSX.js +58 -0
- package/app/nginxManagement/frontend/dist/assets/request-DK54gOQ7.js +6 -0
- package/app/nginxManagement/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/app/nginxManagement/backend/nginx-1.28.0/logs/nginx.pid +0 -1
- package/app/nginxManagement/frontend/dist/assets/index-Bx3YfIlI.css +0 -1
- package/app/nginxManagement/frontend/dist/assets/index-CR2wJXtr.js +0 -58
- package/app/nginxManagement/frontend/dist/assets/index-eLDUQSKK.js +0 -26
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.card-header[data-v-661a1032]{display:flex;justify-content:space-between;align-items:center}.header-actions[data-v-661a1032]{display:flex;gap:10px}.config-content[data-v-661a1032]{margin-bottom:30px}.config-preview[data-v-661a1032]{margin-top:30px}.config-preview h3[data-v-661a1032]{margin-bottom:15px;color:#303133}.el-table[data-v-661a1032]{margin-bottom:10px}.el-form-item[data-v-661a1032]{margin-bottom:20px}.proxy-addresses[data-v-661a1032]{display:flex;flex-direction:column;gap:5px}.proxy-address-item[data-v-661a1032]{display:flex;gap:5px;align-items:center}.proxy-address-item .el-input[data-v-661a1032]{flex:1}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as W,r as _,g as X,c as V,o as g,a as t,w as l,E as u,b as r,m as Y,d as m,n as Z,u as T,l as s,p as h,i as I,t as d,j as z,q as ee}from"./index-BW5QC1wD.js";import{r as $}from"./request-DK54gOQ7.js";function te(B){return $({url:"/api/command/execute",method:"post",data:{command:B}})}function le(){return $({url:"/api/command/records",method:"get"})}function oe(){return $({url:"/api/command/records",method:"delete"})}const ae={class:"command-page"},ne={class:"quick-commands"},se={class:"card-header"},re={key:0},ue={key:0},de={__name:"index",setup(B){const c=_({command:""}),D=_([]),x=_(!1),k=_(!1),w=_(!1),n=_(null),C=async()=>{x.value=!0;try{const o=await le();o.success?D.value=o.data||[]:u.error(o.message||"获取记录失败")}catch(o){u.error("获取记录失败: "+o.message)}finally{x.value=!1}},M=async()=>{if(!c.value.command.trim()){u.warning("请输入要执行的命令");return}k.value=!0;try{const o=await te(c.value.command);o.success?(u.success("命令执行完成"),c.value.command="",await C()):u.error(o.message||"命令执行失败")}catch(o){u.error("命令执行失败: "+o.message)}finally{k.value=!1}},v=o=>{c.value.command=o,M()},K=async()=>{try{await ee.confirm("确定要清空所有记录吗?","确认",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"});const o=await oe();o.success?(u.success("记录已清空"),await C()):u.error(o.message||"清空记录失败")}catch(o){o!=="cancel"&&u.error("清空记录失败: "+o.message)}},S=o=>{n.value=o,w.value=!0},H=()=>{w.value=!1,n.value=null},R=o=>{switch(o){case"success":return"success";case"error":return"danger";case"running":return"warning";default:return"info"}},N=o=>{switch(o){case"success":return"成功";case"error":return"失败";case"running":return"执行中";default:return"未知"}},y=o=>o?new Date(o).toLocaleString("zh-CN"):"-",U=M,j=K;return X(()=>{C()}),(o,e)=>{const i=r("el-button"),b=r("el-input"),A=r("el-form-item"),F=r("el-form"),L=r("el-button-group"),q=r("el-card"),p=r("el-table-column"),E=r("el-tag"),G=r("el-table"),f=r("el-descriptions-item"),J=r("el-descriptions"),O=r("el-divider"),P=r("el-dialog"),Q=Y("loading");return g(),V("div",ae,[t(q,{class:"command-card"},{header:l(()=>e[10]||(e[10]=[m("div",{class:"card-header"},[m("span",null,"命令执行")],-1)])),default:l(()=>[t(F,{model:c.value,"label-width":"80px"},{default:l(()=>[t(A,{label:"命令"},{default:l(()=>[t(b,{modelValue:c.value.command,"onUpdate:modelValue":e[0]||(e[0]=a=>c.value.command=a),placeholder:"请输入要执行的命令",onKeyup:Z(T(U),["enter"])},{append:l(()=>[t(i,{onClick:T(U),loading:k.value},{default:l(()=>e[11]||(e[11]=[s(" 执行 ")])),_:1,__:[11]},8,["onClick","loading"])]),_:1},8,["modelValue","onKeyup"])]),_:1})]),_:1},8,["model"]),m("div",ne,[e[17]||(e[17]=m("h4",null,"常用命令:",-1)),t(L,null,{default:l(()=>[t(i,{onClick:e[1]||(e[1]=a=>v("dir")),size:"small"},{default:l(()=>e[12]||(e[12]=[s("dir")])),_:1,__:[12]}),t(i,{onClick:e[2]||(e[2]=a=>v("ipconfig")),size:"small"},{default:l(()=>e[13]||(e[13]=[s("ipconfig")])),_:1,__:[13]}),t(i,{onClick:e[3]||(e[3]=a=>v("netstat -an")),size:"small"},{default:l(()=>e[14]||(e[14]=[s("netstat -an")])),_:1,__:[14]}),t(i,{onClick:e[4]||(e[4]=a=>v("tasklist")),size:"small"},{default:l(()=>e[15]||(e[15]=[s("tasklist")])),_:1,__:[15]}),t(i,{onClick:e[5]||(e[5]=a=>v("ping 127.0.0.1")),size:"small"},{default:l(()=>e[16]||(e[16]=[s("ping 127.0.0.1")])),_:1,__:[16]})]),_:1})])]),_:1}),t(q,{class:"records-card"},{header:l(()=>[m("div",se,[e[19]||(e[19]=m("span",null,"执行记录",-1)),t(i,{onClick:T(j),type:"danger",size:"small"},{default:l(()=>e[18]||(e[18]=[s(" 清空记录 ")])),_:1,__:[18]},8,["onClick"])])]),default:l(()=>[h((g(),I(G,{data:D.value,style:{width:"100%"}},{default:l(()=>[t(p,{prop:"id",label:"ID",width:"60"}),t(p,{prop:"command",label:"命令","min-width":"200","show-overflow-tooltip":""}),t(p,{prop:"status",label:"状态",width:"100"},{default:l(a=>[t(E,{type:R(a.row.status)},{default:l(()=>[s(d(N(a.row.status)),1)]),_:2},1032,["type"])]),_:1}),t(p,{prop:"startTime",label:"开始时间",width:"180"},{default:l(a=>[s(d(y(a.row.startTime)),1)]),_:1}),t(p,{prop:"duration",label:"耗时",width:"100"},{default:l(a=>[s(d(a.row.duration)+"ms ",1)]),_:1}),t(p,{label:"操作",width:"120"},{default:l(a=>[t(i,{onClick:ie=>S(a.row),size:"small",type:"primary"},{default:l(()=>e[20]||(e[20]=[s(" 查看详情 ")])),_:2,__:[20]},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[Q,x.value]])]),_:1}),t(P,{modelValue:w.value,"onUpdate:modelValue":e[9]||(e[9]=a=>w.value=a),title:"命令执行详情",width:"80%","before-close":H},{default:l(()=>[n.value?(g(),V("div",re,[t(J,{column:2,border:""},{default:l(()=>[t(f,{label:"命令ID"},{default:l(()=>[s(d(n.value.id),1)]),_:1}),t(f,{label:"状态"},{default:l(()=>[t(E,{type:R(n.value.status)},{default:l(()=>[s(d(N(n.value.status)),1)]),_:1},8,["type"])]),_:1}),t(f,{label:"开始时间"},{default:l(()=>[s(d(y(n.value.startTime)),1)]),_:1}),t(f,{label:"结束时间"},{default:l(()=>[s(d(y(n.value.endTime)),1)]),_:1}),t(f,{label:"执行时长"},{default:l(()=>[s(d(n.value.duration)+"ms",1)]),_:1}),t(f,{label:"创建时间"},{default:l(()=>[s(d(y(n.value.createdAt)),1)]),_:1})]),_:1}),t(O),e[21]||(e[21]=m("h4",null,"执行的命令:",-1)),t(b,{modelValue:n.value.command,"onUpdate:modelValue":e[6]||(e[6]=a=>n.value.command=a),type:"textarea",rows:2,readonly:"",style:{"margin-bottom":"20px"}},null,8,["modelValue"]),e[22]||(e[22]=m("h4",null,"命令输出:",-1)),t(b,{modelValue:n.value.output,"onUpdate:modelValue":e[7]||(e[7]=a=>n.value.output=a),type:"textarea",rows:10,readonly:"",style:{"margin-bottom":"20px"}},null,8,["modelValue"]),n.value.errorMsg?(g(),V("h4",ue,"错误信息:")):z("",!0),n.value.errorMsg?(g(),I(b,{key:1,modelValue:n.value.errorMsg,"onUpdate:modelValue":e[8]||(e[8]=a=>n.value.errorMsg=a),type:"textarea",rows:5,readonly:"",style:{color:"#f56c6c"}},null,8,["modelValue"])):z("",!0)])):z("",!0)]),_:1},8,["modelValue"])])}}},pe=W(de,[["__scopeId","data-v-19e2b22e"]]);export{pe as default};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{r as w}from"./request-DK54gOQ7.js";import{_ as me,r as m,e as ye,f as fe,g as _e,h as ge,c as z,o as P,a as l,w as t,b as n,i as S,j as T,d as f,F as ve,k as xe,l as u,t as j}from"./index-Dj94f0_e.js";const he=async()=>{try{return await w.get("/api/proxy/config")}catch(r){throw r}},Ve=async r=>{try{return await w.post("/api/proxy/config",r)}catch(v){throw v}},we=async()=>{try{return await w.post("/api/proxy/test-config")}catch(r){throw r}},be=async()=>{try{return await w.post("/api/proxy/reload-config")}catch(r){throw r}},Ce=async()=>{try{return await w.post("/api/proxy/start-nginx")}catch(r){throw r}},Ae=async()=>{try{return await w.post("/api/proxy/stop-nginx")}catch(r){throw r}},ke=async(r,v="access")=>{try{return await w.get("/api/proxy/log",{params:{port:r,type:v}})}catch(b){throw b}},Pe={class:"proxy-container"},$e={class:"card-header"},Ue={class:"header-actions"},Ie={class:"config-content"},Re={class:"proxy-addresses"},Ne={style:{"margin-top":"10px"}},ze={class:"config-preview"},Fe={style:{"margin-bottom":"10px"}},Le={style:{"margin-left":"20px",color:"#888"}},De={__name:"index",setup(r){const v=m(!1),b=m(!1),$=m(!1),U=m(!1),I=m(!1),R=m(!1),s=m(""),d=m(""),c=ye({configPath:"/etc/nginx/conf.d/api.conf",proxyRules:[{title:"端口80的API代理",port:"80",location:"/api/",proxyAddresses:[{url:"http://localhost:8080",comment:"开发环境",isActive:!0},{url:"http://127.0.0.1:8081",comment:"测试环境",isActive:!1}],activeIndex:0,description:"API接口代理",enabled:!0}]}),F=fe(()=>{let e=`# API代理配置文件
|
|
2
|
+
`;return e+=`# 自动生成于 ${new Date().toLocaleString()}
|
|
3
|
+
|
|
4
|
+
`,c.proxyRules.forEach(o=>{o.enabled&&o.proxyAddresses.length>0&&(o.title&&(e+=`# ${o.title}
|
|
5
|
+
`),e+=`server {
|
|
6
|
+
listen ${o.port||"80"};
|
|
7
|
+
server_name localhost;
|
|
8
|
+
|
|
9
|
+
location ${o.location} {
|
|
10
|
+
`,o.proxyAddresses.forEach((y,_)=>{_===o.activeIndex?y.comment?e+=` proxy_pass ${y.url}; # ${y.comment}
|
|
11
|
+
`:e+=` proxy_pass ${y.url};
|
|
12
|
+
`:y.comment?e+=` # proxy_pass ${y.url}; # ${y.comment}
|
|
13
|
+
`:e+=` # proxy_pass ${y.url};
|
|
14
|
+
`}),e+=` proxy_set_header Host $host;
|
|
15
|
+
`,e+=` proxy_set_header X-Real-IP $remote_addr;
|
|
16
|
+
`,e+=` proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
17
|
+
`,e+=` proxy_set_header X-Forwarded-Proto $scheme;
|
|
18
|
+
`,e+=` }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
`)}),e}),L=async()=>{v.value=!0,s.value="",d.value="";try{const e=await he();e.success?(c.configPath=e.data.configPath||c.configPath,c.proxyRules=e.data.proxyRules||c.proxyRules,d.value="配置加载成功"):s.value=e.message||"加载配置失败"}catch(e){s.value="加载配置时发生错误: "+e.message}finally{v.value=!1}},q=async()=>{b.value=!0,s.value="",d.value="",c.proxyRules.forEach(e=>{e.proxyAddresses&&Array.isArray(e.proxyAddresses)&&e.proxyAddresses.forEach(o=>{o.comment&&(o.comment=o.comment.replace(/[\#;]/g,"").trim())})});try{const e=await Ve({configPath:c.configPath,proxyRules:c.proxyRules});e.success?d.value="配置保存成功":s.value=e.message||"保存配置失败"}catch(e){s.value="保存配置时发生错误: "+e.message}finally{b.value=!1}},H=()=>{c.proxyRules.push({title:"新端口代理",port:"80",location:"/api/",proxyAddresses:[{url:"http://localhost:8080",comment:"新地址",isActive:!0}],activeIndex:0,description:"新代理规则",enabled:!0})},M=e=>{c.proxyRules.splice(e,1)},G=(e,o)=>{e.activeIndex=o,this.saveConfig(),this.reloadConfig()},J=e=>{e.proxyAddresses.push({url:"http://localhost:8080",comment:"新地址",isActive:!1})},K=(e,o)=>{e.proxyAddresses.length>1&&(e.proxyAddresses.splice(o,1),e.activeIndex>=e.proxyAddresses.length&&(e.activeIndex=0))},O=async()=>{$.value=!0,s.value="",d.value="";try{const e=await we();e.success?d.value="配置测试成功: "+e.message:s.value=e.message||"配置测试失败"}catch(e){s.value="测试配置时发生错误: "+e.message}finally{$.value=!1}},Q=async()=>{U.value=!0,s.value="",d.value="";try{const e=await be();e.success?d.value="配置重载成功":s.value=e.message||"重载配置失败"}catch(e){s.value="重载配置时发生错误: "+e.message}finally{U.value=!1}},W=async()=>{I.value=!0,s.value="",d.value="";try{const e=await Ce();e.success?d.value=e.message||"nginx启动成功":s.value=e.message||"启动nginx失败"}catch(e){s.value="启动nginx时发生错误: "+e.message}finally{I.value=!1}},Y=async()=>{R.value=!0,s.value="",d.value="";try{const e=await Ae();e.success?d.value=e.message||"nginx停止成功":s.value=e.message||"停止nginx失败"}catch(e){s.value="停止nginx时发生错误: "+e.message}finally{R.value=!1}};_e(()=>{L()});const C=m(!1),h=m(""),N=m(""),A=m("access"),Z=async(e,o="access")=>{C.value=!0,N.value=e.port,A.value=o,await D()},D=async()=>{h.value="加载中...";try{const e=await ke(N.value,A.value);e.success?h.value=e.data||"(无内容)":h.value=e.message||"日志读取失败"}catch(e){h.value="日志读取失败: "+e.message}},ee=()=>{C.value=!1,h.value=""};return ge(A,async()=>{C.value&&await D()}),(e,o)=>{const y=n("refresh"),_=n("el-icon"),p=n("el-button"),oe=n("warning"),le=n("check"),te=n("reload"),ae=n("video-play"),se=n("video-pause"),E=n("el-alert"),g=n("el-input"),B=n("el-form-item"),V=n("el-table-column"),ne=n("el-switch"),re=n("el-table"),ie=n("plus"),de=n("el-form"),ce=n("el-card"),X=n("el-radio-button"),ue=n("el-radio-group"),pe=n("el-dialog");return P(),z("div",Pe,[l(ce,null,{header:t(()=>[f("div",$e,[o[11]||(o[11]=f("span",null,"接口代理配置",-1)),f("div",Ue,[l(p,{type:"primary",onClick:L,loading:v.value},{default:t(()=>[l(_,null,{default:t(()=>[l(y)]),_:1}),o[5]||(o[5]=u(" 刷新配置 "))]),_:1,__:[5]},8,["loading"]),l(p,{type:"warning",onClick:O,loading:$.value},{default:t(()=>[l(_,null,{default:t(()=>[l(oe)]),_:1}),o[6]||(o[6]=u(" 测试配置 "))]),_:1,__:[6]},8,["loading"]),l(p,{type:"success",onClick:q,loading:b.value},{default:t(()=>[l(_,null,{default:t(()=>[l(le)]),_:1}),o[7]||(o[7]=u(" 保存配置 "))]),_:1,__:[7]},8,["loading"]),l(p,{type:"info",onClick:Q,loading:U.value},{default:t(()=>[l(_,null,{default:t(()=>[l(te)]),_:1}),o[8]||(o[8]=u(" 重载配置 "))]),_:1,__:[8]},8,["loading"]),l(p,{type:"success",onClick:W,loading:I.value},{default:t(()=>[l(_,null,{default:t(()=>[l(ae)]),_:1}),o[9]||(o[9]=u(" 启动Nginx "))]),_:1,__:[9]},8,["loading"]),l(p,{type:"danger",onClick:Y,loading:R.value},{default:t(()=>[l(_,null,{default:t(()=>[l(se)]),_:1}),o[10]||(o[10]=u(" 停止Nginx "))]),_:1,__:[10]},8,["loading"])])])]),default:t(()=>[s.value?(P(),S(E,{key:0,title:s.value,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"20px"}},null,8,["title"])):T("",!0),d.value?(P(),S(E,{key:1,title:d.value,type:"success","show-icon":"",closable:"",style:{"margin-bottom":"20px"}},null,8,["title"])):T("",!0),f("div",Ie,[l(de,{model:c,"label-width":"120px","label-position":"top"},{default:t(()=>[l(B,{label:"配置文件路径"},{default:t(()=>[l(g,{modelValue:c.configPath,"onUpdate:modelValue":o[0]||(o[0]=a=>c.configPath=a),placeholder:"nginx配置文件路径"},null,8,["modelValue"])]),_:1}),l(B,{label:"代理配置"},{default:t(()=>[l(re,{data:c.proxyRules,border:"",style:{width:"100%"}},{default:t(()=>[l(V,{prop:"title",label:"标题",width:"180"},{default:t(({row:a})=>[l(g,{modelValue:a.title,"onUpdate:modelValue":i=>a.title=i,placeholder:"如:端口80的API代理"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{prop:"port",label:"端口号",width:"140"},{default:t(({row:a})=>[l(g,{modelValue:a.port,"onUpdate:modelValue":i=>a.port=i,placeholder:"140"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{prop:"location",label:"路径",width:"140"},{default:t(({row:a})=>[l(g,{modelValue:a.location,"onUpdate:modelValue":i=>a.location=i,placeholder:"/api/"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{prop:"proxyAddresses",label:"代理地址"},{default:t(({row:a})=>[f("div",Re,[(P(!0),z(ve,null,xe(a.proxyAddresses,(i,x)=>(P(),z("div",{key:x,class:"proxy-address-item"},[l(g,{modelValue:i.url,"onUpdate:modelValue":k=>i.url=k,placeholder:`代理地址 ${x+1}`,size:"small",style:{width:"160px"}},null,8,["modelValue","onUpdate:modelValue","placeholder"]),l(g,{modelValue:i.comment,"onUpdate:modelValue":k=>i.comment=k,placeholder:"备注",size:"small",style:{width:"100px"}},null,8,["modelValue","onUpdate:modelValue"]),l(p,{size:"small",type:a.activeIndex===x?"primary":"default",onClick:k=>G(a,x)},{default:t(()=>[u(j(a.activeIndex===x?"当前":"切换"),1)]),_:2},1032,["type","onClick"]),l(p,{size:"small",type:"danger",onClick:k=>K(a,x),disabled:a.proxyAddresses.length<=1},{default:t(()=>o[12]||(o[12]=[u(" 删除 ")])),_:2,__:[12]},1032,["onClick","disabled"])]))),128)),l(p,{type:"primary",size:"small",onClick:i=>J(a),style:{"margin-top":"5px"}},{default:t(()=>o[13]||(o[13]=[u(" 添加地址 ")])),_:2,__:[13]},1032,["onClick"])])]),_:1}),l(V,{prop:"description",label:"描述",width:"140"},{default:t(({row:a})=>[l(g,{modelValue:a.description,"onUpdate:modelValue":i=>a.description=i,placeholder:"API接口代理"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{prop:"enabled",label:"状态",width:"100"},{default:t(({row:a})=>[l(ne,{modelValue:a.enabled,"onUpdate:modelValue":i=>a.enabled=i},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{label:"操作",width:"160"},{default:t(({row:a,$index:i})=>[l(p,{size:"small",type:"primary",onClick:x=>Z(a,"access")},{default:t(()=>o[14]||(o[14]=[u("查看日志")])),_:2,__:[14]},1032,["onClick"]),l(p,{size:"small",type:"danger",onClick:x=>M(i)},{default:t(()=>o[15]||(o[15]=[u("删除")])),_:2,__:[15]},1032,["onClick"])]),_:1})]),_:1},8,["data"]),f("div",Ne,[l(p,{type:"primary",onClick:H},{default:t(()=>[l(_,null,{default:t(()=>[l(ie)]),_:1}),o[16]||(o[16]=u(" 添加代理规则 "))]),_:1,__:[16]})])]),_:1})]),_:1},8,["model"])]),f("div",ze,[o[17]||(o[17]=f("h3",null,"配置预览",-1)),l(g,{type:"textarea",rows:15,modelValue:F.value,"onUpdate:modelValue":o[1]||(o[1]=a=>F.value=a),readonly:"",placeholder:"配置预览将在这里显示"},null,8,["modelValue"])])]),_:1}),l(pe,{modelValue:C.value,"onUpdate:modelValue":o[4]||(o[4]=a=>C.value=a),title:"查看日志",width:"60%","before-close":ee},{default:t(()=>[f("div",Fe,[l(ue,{modelValue:A.value,"onUpdate:modelValue":o[2]||(o[2]=a=>A.value=a)},{default:t(()=>[l(X,{label:"access"},{default:t(()=>o[18]||(o[18]=[u("访问日志")])),_:1,__:[18]}),l(X,{label:"error"},{default:t(()=>o[19]||(o[19]=[u("错误日志")])),_:1,__:[19]})]),_:1},8,["modelValue"]),f("span",Le,"端口: "+j(N.value),1)]),l(g,{type:"textarea",rows:20,modelValue:h.value,"onUpdate:modelValue":o[3]||(o[3]=a=>h.value=a),readonly:"",style:{"font-family":"monospace"}},null,8,["modelValue"])]),_:1},8,["modelValue"])])}}},Xe=me(De,[["__scopeId","data-v-4ed7fb36"]]);export{Xe as default};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{r as w}from"./request-DK54gOQ7.js";import{_ as me,r as m,e as ye,f as _e,g as fe,h as ge,c as z,o as P,a as l,w as t,b as n,i as j,j as q,d as _,F as ve,k as xe,l as u,t as H}from"./index-D80vACWt.js";const he=async()=>{try{return await w.get("/api/proxy/config")}catch(r){throw r}},Ve=async r=>{try{return await w.post("/api/proxy/config",r)}catch(v){throw v}},we=async()=>{try{return await w.post("/api/proxy/test-config")}catch(r){throw r}},be=async()=>{try{return await w.post("/api/proxy/reload-config")}catch(r){throw r}},Ce=async()=>{try{return await w.post("/api/proxy/start-nginx")}catch(r){throw r}},Ae=async()=>{try{return await w.post("/api/proxy/stop-nginx")}catch(r){throw r}},ke=async(r,v="access")=>{try{return await w.get("/api/proxy/log",{params:{port:r,type:v}})}catch(b){throw b}},Pe={class:"proxy-container"},$e={class:"card-header"},Ue={class:"header-actions"},Ie={class:"config-content"},Re={class:"proxy-addresses"},Ne={style:{"margin-top":"10px"}},ze={class:"config-preview"},Fe={style:{"margin-bottom":"10px"}},Le={style:{"margin-left":"20px",color:"#888"}},De={__name:"index",setup(r){const v=m(!1),b=m(!1),$=m(!1),U=m(!1),I=m(!1),R=m(!1),s=m(""),d=m(""),c=ye({configPath:"/etc/nginx/conf.d/api.conf",proxyRules:[{title:"端口80的API代理",port:"80",location:"/api/",proxyAddresses:[{url:"http://localhost:8080",comment:"开发环境",isActive:!0},{url:"http://127.0.0.1:8081",comment:"测试环境",isActive:!1}],activeIndex:0,description:"API接口代理",enabled:!0}]}),F=_e(()=>{let e=`# API代理配置文件
|
|
2
|
+
`;return e+=`# 自动生成于 ${new Date().toLocaleString()}
|
|
3
|
+
|
|
4
|
+
`,c.proxyRules.forEach(o=>{o.enabled&&o.proxyAddresses.length>0&&(o.title&&(e+=`# ${o.title}
|
|
5
|
+
`),e+=`server {
|
|
6
|
+
listen ${o.port||"80"};
|
|
7
|
+
server_name localhost;
|
|
8
|
+
|
|
9
|
+
location ${o.location} {
|
|
10
|
+
`,o.proxyAddresses.forEach((y,f)=>{f===o.activeIndex?y.comment?e+=` proxy_pass ${y.url}; # ${y.comment}
|
|
11
|
+
`:e+=` proxy_pass ${y.url};
|
|
12
|
+
`:y.comment?e+=` # proxy_pass ${y.url}; # ${y.comment}
|
|
13
|
+
`:e+=` # proxy_pass ${y.url};
|
|
14
|
+
`}),e+=` proxy_set_header Host $host;
|
|
15
|
+
`,e+=` proxy_set_header X-Real-IP $remote_addr;
|
|
16
|
+
`,e+=` proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
17
|
+
`,e+=` proxy_set_header X-Forwarded-Proto $scheme;
|
|
18
|
+
`,e+=` }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
`)}),e}),L=async()=>{v.value=!0,s.value="",d.value="";try{const e=await he();e.success?(c.configPath=e.data.configPath||c.configPath,c.proxyRules=e.data.proxyRules||c.proxyRules,d.value="配置加载成功"):s.value=e.message||"加载配置失败"}catch(e){s.value="加载配置时发生错误: "+e.message}finally{v.value=!1}},D=async()=>{b.value=!0,s.value="",d.value="",c.proxyRules.forEach(e=>{e.proxyAddresses&&Array.isArray(e.proxyAddresses)&&e.proxyAddresses.forEach(o=>{o.comment&&(o.comment=o.comment.replace(/[\#;]/g,"").trim())})});try{const e=await Ve({configPath:c.configPath,proxyRules:c.proxyRules});e.success?d.value="配置保存成功":s.value=e.message||"保存配置失败"}catch(e){s.value="保存配置时发生错误: "+e.message}finally{b.value=!1}},M=()=>{c.proxyRules.push({title:"新端口代理",port:"80",location:"/api/",proxyAddresses:[{url:"http://localhost:8080",comment:"新地址",isActive:!0}],activeIndex:0,description:"新代理规则",enabled:!0})},G=e=>{c.proxyRules.splice(e,1)},J=(e,o)=>{e.activeIndex=o,D(),E()},K=e=>{e.proxyAddresses.push({url:"http://localhost:8080",comment:"新地址",isActive:!1})},O=(e,o)=>{e.proxyAddresses.length>1&&(e.proxyAddresses.splice(o,1),e.activeIndex>=e.proxyAddresses.length&&(e.activeIndex=0))},Q=async()=>{$.value=!0,s.value="",d.value="";try{const e=await we();e.success?d.value="配置测试成功: "+e.message:s.value=e.message||"配置测试失败"}catch(e){s.value="测试配置时发生错误: "+e.message}finally{$.value=!1}},E=async()=>{U.value=!0,s.value="",d.value="";try{const e=await be();e.success?d.value="配置重载成功":s.value=e.message||"重载配置失败"}catch(e){s.value="重载配置时发生错误: "+e.message}finally{U.value=!1}},W=async()=>{I.value=!0,s.value="",d.value="";try{const e=await Ce();e.success?d.value=e.message||"nginx启动成功":s.value=e.message||"启动nginx失败"}catch(e){s.value="启动nginx时发生错误: "+e.message}finally{I.value=!1}},Y=async()=>{R.value=!0,s.value="",d.value="";try{const e=await Ae();e.success?d.value=e.message||"nginx停止成功":s.value=e.message||"停止nginx失败"}catch(e){s.value="停止nginx时发生错误: "+e.message}finally{R.value=!1}};fe(()=>{L()});const C=m(!1),h=m(""),N=m(""),A=m("access"),Z=async(e,o="access")=>{C.value=!0,N.value=e.port,A.value=o,await B()},B=async()=>{h.value="加载中...";try{const e=await ke(N.value,A.value);e.success?h.value=e.data||"(无内容)":h.value=e.message||"日志读取失败"}catch(e){h.value="日志读取失败: "+e.message}},ee=()=>{C.value=!1,h.value=""};return ge(A,async()=>{C.value&&await B()}),(e,o)=>{const y=n("refresh"),f=n("el-icon"),p=n("el-button"),oe=n("warning"),le=n("check"),te=n("reload"),ae=n("video-play"),se=n("video-pause"),X=n("el-alert"),g=n("el-input"),S=n("el-form-item"),V=n("el-table-column"),ne=n("el-switch"),re=n("el-table"),ie=n("plus"),de=n("el-form"),ce=n("el-card"),T=n("el-radio-button"),ue=n("el-radio-group"),pe=n("el-dialog");return P(),z("div",Pe,[l(ce,null,{header:t(()=>[_("div",$e,[o[11]||(o[11]=_("span",null,"接口代理配置",-1)),_("div",Ue,[l(p,{type:"primary",onClick:L,loading:v.value},{default:t(()=>[l(f,null,{default:t(()=>[l(y)]),_:1}),o[5]||(o[5]=u(" 刷新配置 "))]),_:1,__:[5]},8,["loading"]),l(p,{type:"warning",onClick:Q,loading:$.value},{default:t(()=>[l(f,null,{default:t(()=>[l(oe)]),_:1}),o[6]||(o[6]=u(" 测试配置 "))]),_:1,__:[6]},8,["loading"]),l(p,{type:"success",onClick:D,loading:b.value},{default:t(()=>[l(f,null,{default:t(()=>[l(le)]),_:1}),o[7]||(o[7]=u(" 保存配置 "))]),_:1,__:[7]},8,["loading"]),l(p,{type:"info",onClick:E,loading:U.value},{default:t(()=>[l(f,null,{default:t(()=>[l(te)]),_:1}),o[8]||(o[8]=u(" 重载配置 "))]),_:1,__:[8]},8,["loading"]),l(p,{type:"success",onClick:W,loading:I.value},{default:t(()=>[l(f,null,{default:t(()=>[l(ae)]),_:1}),o[9]||(o[9]=u(" 启动Nginx "))]),_:1,__:[9]},8,["loading"]),l(p,{type:"danger",onClick:Y,loading:R.value},{default:t(()=>[l(f,null,{default:t(()=>[l(se)]),_:1}),o[10]||(o[10]=u(" 停止Nginx "))]),_:1,__:[10]},8,["loading"])])])]),default:t(()=>[s.value?(P(),j(X,{key:0,title:s.value,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"20px"}},null,8,["title"])):q("",!0),d.value?(P(),j(X,{key:1,title:d.value,type:"success","show-icon":"",closable:"",style:{"margin-bottom":"20px"}},null,8,["title"])):q("",!0),_("div",Ie,[l(de,{model:c,"label-width":"120px","label-position":"top"},{default:t(()=>[l(S,{label:"配置文件路径"},{default:t(()=>[l(g,{modelValue:c.configPath,"onUpdate:modelValue":o[0]||(o[0]=a=>c.configPath=a),placeholder:"nginx配置文件路径"},null,8,["modelValue"])]),_:1}),l(S,{label:"代理配置"},{default:t(()=>[l(re,{data:c.proxyRules,border:"",style:{width:"100%"}},{default:t(()=>[l(V,{prop:"title",label:"标题",width:"180"},{default:t(({row:a})=>[l(g,{modelValue:a.title,"onUpdate:modelValue":i=>a.title=i,placeholder:"如:端口80的API代理"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{prop:"port",label:"端口号",width:"140"},{default:t(({row:a})=>[l(g,{modelValue:a.port,"onUpdate:modelValue":i=>a.port=i,placeholder:"140"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{prop:"location",label:"路径",width:"140"},{default:t(({row:a})=>[l(g,{modelValue:a.location,"onUpdate:modelValue":i=>a.location=i,placeholder:"/api/"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{prop:"proxyAddresses",label:"代理地址"},{default:t(({row:a})=>[_("div",Re,[(P(!0),z(ve,null,xe(a.proxyAddresses,(i,x)=>(P(),z("div",{key:x,class:"proxy-address-item"},[l(g,{modelValue:i.url,"onUpdate:modelValue":k=>i.url=k,placeholder:`代理地址 ${x+1}`,size:"small",style:{width:"160px"}},null,8,["modelValue","onUpdate:modelValue","placeholder"]),l(g,{modelValue:i.comment,"onUpdate:modelValue":k=>i.comment=k,placeholder:"备注",size:"small",style:{width:"100px"}},null,8,["modelValue","onUpdate:modelValue"]),l(p,{size:"small",type:a.activeIndex===x?"primary":"default",onClick:k=>J(a,x)},{default:t(()=>[u(H(a.activeIndex===x?"当前":"切换"),1)]),_:2},1032,["type","onClick"]),l(p,{size:"small",type:"danger",onClick:k=>O(a,x),disabled:a.proxyAddresses.length<=1},{default:t(()=>o[12]||(o[12]=[u(" 删除 ")])),_:2,__:[12]},1032,["onClick","disabled"])]))),128)),l(p,{type:"primary",size:"small",onClick:i=>K(a),style:{"margin-top":"5px"}},{default:t(()=>o[13]||(o[13]=[u(" 添加地址 ")])),_:2,__:[13]},1032,["onClick"])])]),_:1}),l(V,{prop:"description",label:"描述",width:"140"},{default:t(({row:a})=>[l(g,{modelValue:a.description,"onUpdate:modelValue":i=>a.description=i,placeholder:"API接口代理"},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{prop:"enabled",label:"状态",width:"100"},{default:t(({row:a})=>[l(ne,{modelValue:a.enabled,"onUpdate:modelValue":i=>a.enabled=i},null,8,["modelValue","onUpdate:modelValue"])]),_:1}),l(V,{label:"操作",width:"160"},{default:t(({row:a,$index:i})=>[l(p,{size:"small",type:"primary",onClick:x=>Z(a,"access")},{default:t(()=>o[14]||(o[14]=[u("查看日志")])),_:2,__:[14]},1032,["onClick"]),l(p,{size:"small",type:"danger",onClick:x=>G(i)},{default:t(()=>o[15]||(o[15]=[u("删除")])),_:2,__:[15]},1032,["onClick"])]),_:1})]),_:1},8,["data"]),_("div",Ne,[l(p,{type:"primary",onClick:M},{default:t(()=>[l(f,null,{default:t(()=>[l(ie)]),_:1}),o[16]||(o[16]=u(" 添加代理规则 "))]),_:1,__:[16]})])]),_:1})]),_:1},8,["model"])]),_("div",ze,[o[17]||(o[17]=_("h3",null,"配置预览",-1)),l(g,{type:"textarea",rows:15,modelValue:F.value,"onUpdate:modelValue":o[1]||(o[1]=a=>F.value=a),readonly:"",placeholder:"配置预览将在这里显示"},null,8,["modelValue"])])]),_:1}),l(pe,{modelValue:C.value,"onUpdate:modelValue":o[4]||(o[4]=a=>C.value=a),title:"查看日志",width:"60%","before-close":ee},{default:t(()=>[_("div",Fe,[l(ue,{modelValue:A.value,"onUpdate:modelValue":o[2]||(o[2]=a=>A.value=a)},{default:t(()=>[l(T,{label:"access"},{default:t(()=>o[18]||(o[18]=[u("访问日志")])),_:1,__:[18]}),l(T,{label:"error"},{default:t(()=>o[19]||(o[19]=[u("错误日志")])),_:1,__:[19]})]),_:1},8,["modelValue"]),_("span",Le,"端口: "+H(N.value),1)]),l(g,{type:"textarea",rows:20,modelValue:h.value,"onUpdate:modelValue":o[3]||(o[3]=a=>h.value=a),readonly:"",style:{"font-family":"monospace"}},null,8,["modelValue"])]),_:1},8,["modelValue"])])}}},Xe=me(De,[["__scopeId","data-v-fd7b6e19"]]);export{Xe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.card-header[data-v-fd7b6e19]{display:flex;justify-content:space-between;align-items:center}.header-actions[data-v-fd7b6e19]{display:flex;gap:10px}.config-content[data-v-fd7b6e19]{margin-bottom:30px}.config-preview[data-v-fd7b6e19]{margin-top:30px}.config-preview h3[data-v-fd7b6e19]{margin-bottom:15px;color:#303133}.el-table[data-v-fd7b6e19]{margin-bottom:10px}.el-form-item[data-v-fd7b6e19]{margin-bottom:20px}.proxy-addresses[data-v-fd7b6e19]{display:flex;flex-direction:column;gap:5px}.proxy-address-item[data-v-fd7b6e19]{display:flex;gap:5px;align-items:center}.proxy-address-item .el-input[data-v-fd7b6e19]{flex:1}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as W,r as _,g as X,c as V,o as g,a as t,w as l,E as u,b as r,m as Y,d as m,n as Z,u as T,l as s,p as h,i as I,t as d,j as z,q as ee}from"./index-PO5K0hSX.js";import{r as $}from"./request-DK54gOQ7.js";function te(B){return $({url:"/api/command/execute",method:"post",data:{command:B}})}function le(){return $({url:"/api/command/records",method:"get"})}function oe(){return $({url:"/api/command/records",method:"delete"})}const ae={class:"command-page"},ne={class:"quick-commands"},se={class:"card-header"},re={key:0},ue={key:0},de={__name:"index",setup(B){const c=_({command:""}),D=_([]),x=_(!1),k=_(!1),w=_(!1),n=_(null),C=async()=>{x.value=!0;try{const o=await le();o.success?D.value=o.data||[]:u.error(o.message||"获取记录失败")}catch(o){u.error("获取记录失败: "+o.message)}finally{x.value=!1}},M=async()=>{if(!c.value.command.trim()){u.warning("请输入要执行的命令");return}k.value=!0;try{const o=await te(c.value.command);o.success?(u.success("命令执行完成"),c.value.command="",await C()):u.error(o.message||"命令执行失败")}catch(o){u.error("命令执行失败: "+o.message)}finally{k.value=!1}},v=o=>{c.value.command=o,M()},K=async()=>{try{await ee.confirm("确定要清空所有记录吗?","确认",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"});const o=await oe();o.success?(u.success("记录已清空"),await C()):u.error(o.message||"清空记录失败")}catch(o){o!=="cancel"&&u.error("清空记录失败: "+o.message)}},S=o=>{n.value=o,w.value=!0},H=()=>{w.value=!1,n.value=null},R=o=>{switch(o){case"success":return"success";case"error":return"danger";case"running":return"warning";default:return"info"}},N=o=>{switch(o){case"success":return"成功";case"error":return"失败";case"running":return"执行中";default:return"未知"}},y=o=>o?new Date(o).toLocaleString("zh-CN"):"-",U=M,j=K;return X(()=>{C()}),(o,e)=>{const i=r("el-button"),b=r("el-input"),A=r("el-form-item"),F=r("el-form"),L=r("el-button-group"),q=r("el-card"),p=r("el-table-column"),E=r("el-tag"),G=r("el-table"),f=r("el-descriptions-item"),J=r("el-descriptions"),O=r("el-divider"),P=r("el-dialog"),Q=Y("loading");return g(),V("div",ae,[t(q,{class:"command-card"},{header:l(()=>e[10]||(e[10]=[m("div",{class:"card-header"},[m("span",null,"命令执行")],-1)])),default:l(()=>[t(F,{model:c.value,"label-width":"80px"},{default:l(()=>[t(A,{label:"命令"},{default:l(()=>[t(b,{modelValue:c.value.command,"onUpdate:modelValue":e[0]||(e[0]=a=>c.value.command=a),placeholder:"请输入要执行的命令",onKeyup:Z(T(U),["enter"])},{append:l(()=>[t(i,{onClick:T(U),loading:k.value},{default:l(()=>e[11]||(e[11]=[s(" 执行 ")])),_:1,__:[11]},8,["onClick","loading"])]),_:1},8,["modelValue","onKeyup"])]),_:1})]),_:1},8,["model"]),m("div",ne,[e[17]||(e[17]=m("h4",null,"常用命令:",-1)),t(L,null,{default:l(()=>[t(i,{onClick:e[1]||(e[1]=a=>v("dir")),size:"small"},{default:l(()=>e[12]||(e[12]=[s("dir")])),_:1,__:[12]}),t(i,{onClick:e[2]||(e[2]=a=>v("ipconfig")),size:"small"},{default:l(()=>e[13]||(e[13]=[s("ipconfig")])),_:1,__:[13]}),t(i,{onClick:e[3]||(e[3]=a=>v("netstat -an")),size:"small"},{default:l(()=>e[14]||(e[14]=[s("netstat -an")])),_:1,__:[14]}),t(i,{onClick:e[4]||(e[4]=a=>v("tasklist")),size:"small"},{default:l(()=>e[15]||(e[15]=[s("tasklist")])),_:1,__:[15]}),t(i,{onClick:e[5]||(e[5]=a=>v("ping 127.0.0.1")),size:"small"},{default:l(()=>e[16]||(e[16]=[s("ping 127.0.0.1")])),_:1,__:[16]})]),_:1})])]),_:1}),t(q,{class:"records-card"},{header:l(()=>[m("div",se,[e[19]||(e[19]=m("span",null,"执行记录",-1)),t(i,{onClick:T(j),type:"danger",size:"small"},{default:l(()=>e[18]||(e[18]=[s(" 清空记录 ")])),_:1,__:[18]},8,["onClick"])])]),default:l(()=>[h((g(),I(G,{data:D.value,style:{width:"100%"}},{default:l(()=>[t(p,{prop:"id",label:"ID",width:"60"}),t(p,{prop:"command",label:"命令","min-width":"200","show-overflow-tooltip":""}),t(p,{prop:"status",label:"状态",width:"100"},{default:l(a=>[t(E,{type:R(a.row.status)},{default:l(()=>[s(d(N(a.row.status)),1)]),_:2},1032,["type"])]),_:1}),t(p,{prop:"startTime",label:"开始时间",width:"180"},{default:l(a=>[s(d(y(a.row.startTime)),1)]),_:1}),t(p,{prop:"duration",label:"耗时",width:"100"},{default:l(a=>[s(d(a.row.duration)+"ms ",1)]),_:1}),t(p,{label:"操作",width:"120"},{default:l(a=>[t(i,{onClick:ie=>S(a.row),size:"small",type:"primary"},{default:l(()=>e[20]||(e[20]=[s(" 查看详情 ")])),_:2,__:[20]},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[Q,x.value]])]),_:1}),t(P,{modelValue:w.value,"onUpdate:modelValue":e[9]||(e[9]=a=>w.value=a),title:"命令执行详情",width:"80%","before-close":H},{default:l(()=>[n.value?(g(),V("div",re,[t(J,{column:2,border:""},{default:l(()=>[t(f,{label:"命令ID"},{default:l(()=>[s(d(n.value.id),1)]),_:1}),t(f,{label:"状态"},{default:l(()=>[t(E,{type:R(n.value.status)},{default:l(()=>[s(d(N(n.value.status)),1)]),_:1},8,["type"])]),_:1}),t(f,{label:"开始时间"},{default:l(()=>[s(d(y(n.value.startTime)),1)]),_:1}),t(f,{label:"结束时间"},{default:l(()=>[s(d(y(n.value.endTime)),1)]),_:1}),t(f,{label:"执行时长"},{default:l(()=>[s(d(n.value.duration)+"ms",1)]),_:1}),t(f,{label:"创建时间"},{default:l(()=>[s(d(y(n.value.createdAt)),1)]),_:1})]),_:1}),t(O),e[21]||(e[21]=m("h4",null,"执行的命令:",-1)),t(b,{modelValue:n.value.command,"onUpdate:modelValue":e[6]||(e[6]=a=>n.value.command=a),type:"textarea",rows:2,readonly:"",style:{"margin-bottom":"20px"}},null,8,["modelValue"]),e[22]||(e[22]=m("h4",null,"命令输出:",-1)),t(b,{modelValue:n.value.output,"onUpdate:modelValue":e[7]||(e[7]=a=>n.value.output=a),type:"textarea",rows:10,readonly:"",style:{"margin-bottom":"20px"}},null,8,["modelValue"]),n.value.errorMsg?(g(),V("h4",ue,"错误信息:")):z("",!0),n.value.errorMsg?(g(),I(b,{key:1,modelValue:n.value.errorMsg,"onUpdate:modelValue":e[8]||(e[8]=a=>n.value.errorMsg=a),type:"textarea",rows:5,readonly:"",style:{color:"#f56c6c"}},null,8,["modelValue"])):z("",!0)])):z("",!0)]),_:1},8,["modelValue"])])}}},pe=W(de,[["__scopeId","data-v-19e2b22e"]]);export{pe as default};
|