tmui-cli 1.2.7 → 1.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/createTmui.js +3 -3
- package/bin/net.js +6 -3
- package/package.json +1 -1
- package/website/css/app.930a5dcc.css +1 -0
- package/website/css/chunk-vendors.4ad1cdb5.css +2 -0
- package/website/index.html +1 -20
- package/website/js/app.4d09dd9c.js +2 -0
- package/website/js/app.4d09dd9c.js.map +1 -0
- package/website/js/chunk-vendors.6ab6ae16.js +15 -0
- package/website/js/chunk-vendors.6ab6ae16.js.map +1 -0
- package/website/js/app.js +0 -997
- package/website/js/chunk-vendors.js +0 -13592
package/website/index.html
CHANGED
|
@@ -1,20 +1 @@
|
|
|
1
|
-
<!
|
|
2
|
-
<html lang="">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
6
|
-
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
|
7
|
-
<link rel="icon" href="/favicon.ico" />
|
|
8
|
-
<title>tmuistore</title>
|
|
9
|
-
<script defer src="/js/chunk-vendors.js"></script><script defer src="/js/app.js"></script></head>
|
|
10
|
-
<body>
|
|
11
|
-
<noscript>
|
|
12
|
-
<strong
|
|
13
|
-
>We're sorry but tmuistore doesn't work properly without JavaScript enabled. Please enable it to
|
|
14
|
-
continue.</strong
|
|
15
|
-
>
|
|
16
|
-
</noscript>
|
|
17
|
-
<div id="app"></div>
|
|
18
|
-
<!-- built files will be auto injected -->
|
|
19
|
-
</body>
|
|
20
|
-
</html>
|
|
1
|
+
<!doctype html><html lang=""><head><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link rel="icon" href="/favicon.ico"/><title>tmuistore</title><script defer="defer" src="/js/chunk-vendors.6ab6ae16.js"></script><script defer="defer" src="/js/app.4d09dd9c.js"></script><link href="/css/chunk-vendors.4ad1cdb5.css" rel="stylesheet"><link href="/css/app.930a5dcc.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but tmuistore doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(function(){"use strict";var e={707:function(e,t,a){var l=a(9242),n=a(4423),i=a(1020),u=a(8914),o=a(2522),s=a.n(o),d=a(3396),r=a(4870),p=a(6367);a(7658);localStorage.getItem("token");const c=(0,i.Q_)("Log",{state:()=>({logMsg:"",localhostIng:!1,ws:void 0,cmd:void 0}),actions:{}});function v(e,t={}){return new Promise(((a,l)=>{(0,p.ibN)(e,{refetch:!1,onFetchError:e=>{l(e.error)},beforeFetch({options:e}){return e.headers.token=localStorage.getItem("token"),e.headers["Content-Type"]="application/json",e}}).post(t).json().then((e=>{if(200!=e.statusCode.value)return void l(e.statusCode);let t=e.data.value;a(t)}))}))}async function m(e){let t=await v("/api/cehckTmuiVer",{type:e});return t.version}async function f(){let e=await v("/api/checkUniappVer");return e.data}var g=a(9994),w=a.n(g);const y={class:"bloger"};var h={__name:"Loger",setup(e){const t=c(),a=w().$api,l=((0,r.iH)(null),(0,r.iH)(null),(0,r.iH)(window.innerWidth-550)),n=(0,r.iH)(window.innerHeight-260),i=(0,r.iH)("tmui"),u=(0,r.iH)(null),o=[{type:"normal",content:"欢迎来到TMUI CLI可视化",class:"success"}],p=[{key:"tmui",title:"Tmui",group:"local",usage:"tmui [参数]",description:"tmui 命令行工具",example:[{des:"保姆级别分步安装tmui3.0组件库哦~",cmd:"tmui help"},{des:"保姆级别分步安装tmui3.0组件库哦~",cmd:"tmui use"},{des:"查看当前项目路径",cmd:"tmui dir"}]}],m=["list","use","cli","rcli"],f=(0,r.iH)(!1);var g=void 0;function h(){(0,d.Y3)((()=>{w().$api}))}function k(e,a,l,n){if(t.localhostIng)if("fail"===e)n("Something wrong!!!");else{const e=a.trim().split(" ");if("tmui"!=e[0]&&"npm"!=e[0])return void n("只能接受help中提到的命令");if("tmui"==e[0]&&2==e.length&&m.includes(e[1])){const t=e[1];try{_[t](l,n)}catch(i){n(i)}return}_["cmd"](l,n,a)}else n("未连接到cli本地,请重新执行cmd命令tmui ui来启动本界面,并刷新.")}t.cmd=a,(0,d.bv)((()=>{h()})),(0,d.YP)((()=>t.logMsg),(e=>{if(a&&"object"==typeof e&&e){const t=e.wscontend;"info"==t.event&&u.value._pushMessage({content:t.data,class:"info"}),"end"==t.event&&g&&(f.value=!1,g({content:""}))}else g&&(f.value=!1,g({content:""}))}),{deep:!0});const _={list:async(e,t)=>{const a=await v("/api/dirlist").catch((e=>{t(e)}));a&&e({type:"normal",class:"success",tag:"成功",content:a})},cli:(e,t)=>{e({type:"normal",class:"warning",tag:"警醒",content:"正在执行安装中,时间可能需要几分钟,如果一直未响应,请刷新页面重试命令."})},cmd:async(e,a,l)=>{t.ws?(f.value=!0,g=e,t.ws.send(JSON.stringify({event:"cmd",command:l}))):(f.value=!1,g=void 0,a("未连接"))}};return(e,t)=>((0,d.wg)(),(0,d.iD)("div",y,[(0,d.Wm)((0,r.SU)(s()),{style:{"z-index":"100"},x:l.value,"onUpdate:x":t[0]||(t[0]=e=>l.value=e),y:n.value,"onUpdate:y":t[1]||(t[1]=e=>n.value=e),initW:540,initH:250,draggable:!0,resizable:!0},{default:(0,d.w5)((()=>[(0,d.Wm)((0,r.SU)(w()),{ref_key:"cmdvue",ref:u,"command-store":p,"init-log":o,title:"tmui cli",name:"cmd",context:i.value,onExecCmd:k},null,8,["context"])])),_:1},8,["x","y"])]))}},k=a(89);const _=(0,k.Z)(h,[["__scopeId","data-v-250b236a"]]);var x=_;let U=localStorage.getItem("token")||"",b=localStorage.getItem("project")||"";b&&(b=JSON.parse(b));const W=(0,i.Q_)("user",{state:()=>({token:U,menuKeys:["xiangmu"],projectPath:{id:"",path:"",createTime:"",name:"",type:"cli",lastRunTime:"",osName:""},projects:b,user:{admin:null,ask:null,black:null,jifen:null,loginTime:null,loginip:null,nicename:null,openid:null,phone:null,sex:null,timestart:null,tmzdy_tmuiAccountID:null,tourl:null,upload:null,vip:null}}),actions:{login(e,{token:t}){e.token=t,localStorage.setItem("token",t)},setUserInfo(e,{user:t}){e.user={...e.user,...t}},loginOut(e){e.token="",localStorage.removeItem("token")},removeProject(e){let t=this.projects.findIndex((t=>t.id==e));t>-1&&(this.projects.splice(t,1),localStorage.setItem("project",JSON.stringify(this.projects)))}}}),S={class:"header"},j={href:"https://tmui.design",target:"_blank"},z={href:"https://xui.tmui.design",target:"_blank"},O={href:"https://tmui.tmui.design",target:"_blank"},C={href:"https://jx2d.cn",target:"_blank"};var I={__name:"MenuView",setup(e){const t=W();function a(e){t.menuKeys=[e]}return(e,l)=>{const n=(0,d.up)("icon-apps"),i=(0,d.up)("a-menu-item"),u=(0,d.up)("icon-link"),o=(0,d.up)("a-menu");return(0,d.wg)(),(0,d.iD)("div",S,[(0,d.Wm)(o,{onMenuItemClick:a,"selected-keys":(0,r.SU)(t).menuKeys,"onUpdate:selectedKeys":l[0]||(l[0]=e=>(0,r.SU)(t).menuKeys=e),class:"headerMenu",theme:"dark","default-open-keys":(0,r.SU)(t).menuKeys,"default-selected-keys":(0,r.SU)(t).menuKeys},{default:(0,d.w5)((()=>[(0,d.Wm)(i,{key:"xiangmu"},{icon:(0,d.w5)((()=>[(0,d.Wm)(n)])),default:(0,d.w5)((()=>[(0,d.Uk)(" 项目管理 ")])),_:1}),(0,d.Wm)(i,{key:"update"},{icon:(0,d.w5)((()=>[(0,d.Wm)(n)])),default:(0,d.w5)((()=>[(0,d.Uk)(" 更新计划 ")])),_:1}),(0,d.Wm)(i,{key:"zhanzhu"},{icon:(0,d.w5)((()=>[(0,d.Wm)(n)])),default:(0,d.w5)((()=>[(0,d.Uk)(" 赞助作者 ")])),_:1}),(0,d._)("a",j,[(0,d.Wm)(i,{key:"zhanzhu",style:{color:"greenyellow"}},{icon:(0,d.w5)((()=>[(0,d.Wm)(u)])),default:(0,d.w5)((()=>[(0,d.Uk)(" 3.2.x文档(Vue3 TS 维护) ")])),_:1})]),(0,d._)("a",z,[(0,d.Wm)(i,{key:"zhanzhu",style:{color:"greenyellow"}},{icon:(0,d.w5)((()=>[(0,d.Wm)(u)])),default:(0,d.w5)((()=>[(0,d.Uk)(" 4x文档(UniAppx UTS 维护) ")])),_:1})]),(0,d._)("a",O,[(0,d.Wm)(i,{key:"zhanzhu",style:{color:"red"}},{icon:(0,d.w5)((()=>[(0,d.Wm)(u)])),default:(0,d.w5)((()=>[(0,d.Uk)(" 3.1.x文档(Nvue VUE3 暂停维护) ")])),_:1})]),(0,d._)("a",C,[(0,d.Wm)(i,{key:"zhanzhu",style:{color:"red"}},{icon:(0,d.w5)((()=>[(0,d.Wm)(u)])),default:(0,d.w5)((()=>[(0,d.Uk)(" 2.x文档(vue2 JS 暂停维护) ")])),_:1})])])),_:1},8,["selected-keys","default-open-keys","default-selected-keys"])])}}};const H=(0,k.Z)(I,[["__scopeId","data-v-779a5d22"]]);var T=H;const M={id:"appbody"};var D={__name:"App",setup(e){const t=c(),a=((0,d.FN)().appContext.config.globalProperties,(0,p.sdJ)());let l;function n(){const{ws:e,status:a,data:n,send:i,close:u,open:o}=(0,p.sOn)("ws://localhost:6169",{autoReconnect:!0});(0,r.qj)(e.value);e.value.onerror=e=>{},e.value.onopen=()=>{clearInterval(l),t.logMsg={type:"info",wscontend:"",msg:{type:"nomal",class:"success",tag:"成功",content:"已与tmui服务连接成功,如果显示失败可以尝试刷新页面,或者关掉命令工具,重启应用."}},t.localhostIng=!0,t.ws=e.value},e.value.onclose=e=>{t.logMsg={type:"info",wscontend:"",msg:{type:"nomal",class:"error",tag:"连接丢失",content:"尝试重连中..."}},t.localhostIng=!1,t.ws=void 0,clearInterval(l)},(0,d.YP)(n,(()=>{try{let e=JSON.parse(n.value);t.logMsg={type:"ws",wscontend:e,msg:{content:""}}}catch(e){}}),{deep:!0})}return n(),(e,t)=>{const l=(0,d.up)("router-view"),n=(0,d.up)("a-layout-header"),i=(0,d.up)("a-alert"),u=(0,d.up)("a-layout-sider"),o=(0,d.up)("a-layout-content"),s=(0,d.up)("a-layout"),p=(0,d.up)("a-layout-footer");return(0,d.wg)(),(0,d.iD)("div",M,[(0,d.Wm)(s,{class:"appbody"},{default:(0,d.w5)((()=>[(0,d.Wm)(n,null,{default:(0,d.w5)((()=>[(0,d.Wm)(l,{name:"header"})])),_:1}),(0,d.Wm)(s,null,{default:(0,d.w5)((()=>[(0,r.SU)(a)?(0,d.kq)("",!0):((0,d.wg)(),(0,d.j4)(i,{key:0,title:"你丢失了网络,请检查网络连接情况!",type:"error"})),(0,d.Wm)(u,{theme:"dark",style:{width:"290px"}},{default:(0,d.w5)((()=>[(0,d.Wm)(T)])),_:1}),(0,d.Wm)(o,{style:{"background-color":"#fafafa"}},{default:(0,d.w5)((()=>[(0,d.Wm)(l,{name:"body"})])),_:1})])),_:1}),(0,d.Wm)(p,null,{default:(0,d.w5)((()=>[(0,d.Wm)(l,{name:"footer"})])),_:1})])),_:1}),(0,d.Wm)(x)])}}};const V=D;var N=V,P=(a(9072),a(2483)),q=a(7139);const A={uuid(e=24,t){var a,l,n="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),i=[];if(t=t||n.length,e)for(a=0;a<e;a++)i[a]=n[0|Math.random()*t];else for(i[8]=i[13]=i[18]=i[23]="-",i[14]="4",a=0;a<36;a++)i[a]||(l=0|16*Math.random(),i[a]=n[19==a?3&l|8:l]);return i.join("")},getClass(e){let t=document.querySelector("#"+e),a=t.classList;return a},addClass(e,t){let a=document.querySelector("#"+e),l=a.classList,n=new Set(l);return n.add(t),a.className=[...n].join(" "),A},removeClass(e,t){let a=document.querySelector("#"+e),l=a.classList,n=new Set(l);return n.delete(t),a.className=[...n].join(" "),A},toogleClass(e,t){let a=document.querySelector("#"+e),l=a.classList,n=new Set(l);return n.has(t)?n.delete(t):n.add(t),a.className=[...n].join(" "),A},getElementAttr(e,t){let a=null;a="string"==typeof e?document.querySelector("#"+e):e;let l=a.getAttribute(t);return l},createDiv(){},isWinOs(){var e=navigator.userAgent.toLowerCase(),t=/macintosh|mac os x/i.test(navigator.userAgent);return e.indexOf("win32")>=0||e.indexOf("wow32")>=0||(e.indexOf("win64")>=0||e.indexOf("wow64")>=0||!t&&void 0)},getOsSep(){return this.isWinOs()?"\\":"/"},formatSeconds(e){const t=Math.floor(e/86400),a=Math.floor(e%86400/3600),l=Math.floor(e%86400%3600/60),n=e%86400%3600%60;return`${t} 天 ${a} 小时 ${l} 分钟 ${n} 秒`}};var J=a(6413);a(7239);const K=e=>((0,d.dD)("data-v-e821f0f4"),e=e(),(0,d.Cn)(),e),$={key:0,style:{height:"100%",position:"relative",width:"100%"}},Y={class:"removeClse"},F={key:0,style:{display:"flex","flex-flow":"column","justify-content":"center","align-items":"center"}},E={key:1,class:"headerRunMasker",style:{}},R={key:0},Z=["href"],B={style:{"padding-top":"14px"}},L={key:0,style:{"margin-bottom":"14px","font-size":"16px","font-weight":"bold",color:"white"}},Q={style:{color:"white",margin:"16px 16px",position:"absolute",left:"0",top:"0",display:"flex","flex-direction":"column",gap:"8px"}},X={style:{"font-size":"28px"}},G={style:{"font-size":"12px"}},ee={style:{"font-size":"12px"}},te={style:{"font-size":"12px",gap:"10px",display:"flex"}},ae={style:{"font-size":"12px"}},le={style:{"font-size":"12px",color:"white",margin:"16px 16px",position:"absolute",right:"0",bottom:"0","text-align":"right",display:"flex","flex-direction":"column",gap:"4px"}},ne={key:0},ie={key:1},ue=K((()=>(0,d._)("div",{class:"etitle"},"导入/创建项目",-1)));var oe={__name:"mobanCell",props:{data:{type:Object,default:()=>null}},emits:["click","remove"],setup(e,{emit:t}){const a=e,l=(0,d.FN)().appContext.config.globalProperties,{counter:n,reset:i,pause:u,resume:o}=(0,J.Yz)(1e3,{controls:!0}),s=c(),p=W(),v=(0,r.iH)(!1),g=(0,r.iH)(!1),w=(0,r.iH)(!1),y=(0,r.iH)(!1),h=(0,r.iH)(!1),k=(0,r.iH)({pid:0,id:"",host:[]}),_=(0,r.iH)({name:"",appid:"",versionName:"",tmui:"",id:"",scripts:null}),x=(0,r.iH)({ver:"",uniappver:""}),U=(0,r.iH)([]),b=(0,r.iH)([]),S={},j={},z=(0,r.iH)("dev"),O=(0,d.Fl)((()=>A.formatSeconds(n.value))),C=(0,d.Fl)((()=>!a.data)),I=(0,d.Fl)((()=>{if(!x.value.ver||!_.value.tmui)return!0;let e=parseFloat(_.value.tmui.replace(".","")),t=parseFloat(x.value.ver.replace(".",""));return e<=t}));function H(e,t){a.data&&s.ws&&(w.value=!0,y.value=!0,z.value=t,i(),"build"==t?(s.ws.send(JSON.stringify({event:"3",command:{command:"npm run "+e,data:a.data}})),s.ws.send(JSON.stringify({event:"saveRunInfo",command:{..._.value,...k.value,id:a.data.id,runType:z.value}}))):"dev"==t&&s.ws.send(JSON.stringify({event:"1",command:{command:"npm run "+e,data:a.data}})))}function T(){w.value=!1,y.value=!0,s.ws.send(JSON.stringify({event:"2",command:k.value.pid})),k.value={pid:0,id:"",host:[]}}function M(){s.ws&&a.data&&s.ws.send(JSON.stringify({event:"17",command:{id:a.data.id,path:a.data.path,type:a.data.type}}))}function D(){l.$modal.confirm({title:"加入微信群",width:"300px",hideCancel:!0,content:(0,d.h)("img",{src:"https://cdn.tmui.design/public/design/weixinQR2.jpg?id="+Math.random()})})}async function V(){if(!s.ws)return l.$message.error({content:"未连接"}),null;h.value=!0,v.value=!0;let e=await m(a.data.uvue?"uniappx":"uniapp");if(U.value=e,"hbx"==a.data.type)return void(v.value=!1);let t=await f();b.value=t.versions,v.value=!1}async function N(){x.value.ver&&(x.value.uniappver||"cli"!=a.data.type)?l.$modal.confirm({title:"注意",width:"300px",content:"更新tmui版本会删除原有的tmui目录,如果你更改过源码,请先备份,再更新?",onOk(){g.value=!0,h.value=!1,s.ws.send(JSON.stringify({event:"21",command:{path:a.data.path,type:a.data.type,uvue:a.data.uvue,tmui:x.value.ver,uniappver:x.value.uniappver}}))}}):l.$notification.error({title:"请选择版本"})}function P(){g.value||v.value||w.value||y.value||l.$modal.confirm({title:"注意",width:"300px",content:"是关闭当前项目,不会删除你的本地文件,请放心,你还可以再次导入进来.",onOk(){p.removeProject(a.data.id)}})}return(0,d.YP)((()=>s.logMsg),(()=>{const e=s.logMsg?.wscontend;if(e&&a.data){if("17"==e.event){const t=e.data;if(t.id==a.data.id&&(_.value=t,e.run[0]&&(k.value.pid=e.run[0].pid,k.value.id=a.data.id,k.value.host=e.run[0].host,w.value=!0,y.value=!1,z.value=e.run[0].runType),t.scripts&&(t.scripts,1)))for(const e in t.scripts)e.indexOf("dev")>-1?S[e]=t.scripts[e]:e.indexOf("build")>-1&&(j[e]=t.scripts[e])}if("1"==e.event){const t=e.data;t.id==a.data.id&&(k.value.pid=t.pid,k.value.id=a.data.id,k.value.host.push(t.msg))}if("ready"==e.event){const t=e.data;t.id==a.data.id&&(y.value=!1,a.data&&s.ws&&s.ws.send(JSON.stringify({event:"saveRunInfo",command:{..._.value,...k.value,id:a.data.id,runType:z.value}})))}if("error"==e.event){const t=e.data;u(),i(),t.id==a.data.id&&(y.value=!1,l.$message.error({content:"运行错误,重试,并查看日志"}))}if("buildSucess"==e.event){const t=e.data;u(),i(),t.id==a.data.id&&(y.value=!1,w.value=!1,l.$message.success({content:"编译完成"}))}"21"==e.event&&"end"==e?.flag&&(g.value=!1,M())}}),{deep:!0}),(0,d.m0)((()=>{a.data&&s.ws&&M()})),(e,l)=>{const i=(0,d.up)("icon-close"),u=(0,d.up)("a-button"),o=(0,d.up)("a-doption"),s=(0,d.up)("a-dropdown"),p=(0,d.up)("a-space"),c=(0,d.up)("a-descriptions-item"),m=(0,d.up)("a-descriptions"),f=(0,d.up)("a-divider"),W=(0,d.up)("a-tag"),A=(0,d.up)("a-alert"),J=(0,d.up)("a-option"),K=(0,d.up)("a-select"),oe=(0,d.up)("a-form-item"),se=(0,d.up)("a-form"),de=(0,d.up)("a-modal"),re=(0,d.up)("icon-plus"),pe=(0,d.up)("a-spin");return(0,d.wg)(),(0,d.j4)(pe,{loading:g.value,style:{height:"100%",width:"100%"}},{default:(0,d.w5)((()=>[(0,r.SU)(C)?(0,d.kq)("",!0):((0,d.wg)(),(0,d.iD)("div",$,[(0,d._)("div",Y,[(0,d.Wm)(u,{onClick:P,style:{background:"rgba(255,0,0,0.5)"},type:"primary",shape:"circle"},{default:(0,d.w5)((()=>[(0,d.Wm)(i)])),_:1})]),(0,d._)("div",{class:(0,q.C_)(["header",[a.data.uvue?"onux":"on"]])},[w.value?(0,d.kq)("",!0):((0,d.wg)(),(0,d.iD)("div",F,[(0,d.Wm)(p,null,{default:(0,d.w5)((()=>["cli"==a.data.type?((0,d.wg)(),(0,d.j4)(s,{key:0,onSelect:l[0]||(l[0]=e=>H(e,"dev"))},{content:(0,d.w5)((()=>[((0,d.wg)(),(0,d.iD)(d.HY,null,(0,d.Ko)(S,((e,t,a)=>(0,d.Wm)(o,{value:`${t}`,key:a},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(t),1)])),_:2},1032,["value"]))),64))])),default:(0,d.w5)((()=>[(0,d.Wm)(u,{shape:"round",type:"primary"},{default:(0,d.w5)((()=>[(0,d.Uk)("运行")])),_:1})])),_:1})):(0,d.kq)("",!0),"cli"==a.data.type?((0,d.wg)(),(0,d.j4)(s,{key:1,onSelect:l[1]||(l[1]=e=>H(e,"build"))},{content:(0,d.w5)((()=>[((0,d.wg)(),(0,d.iD)(d.HY,null,(0,d.Ko)(j,((e,t,a)=>(0,d.Wm)(o,{value:`${t}`,key:a},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(t),1)])),_:2},1032,["value"]))),64))])),default:(0,d.w5)((()=>[(0,d.Wm)(u,{shape:"round",type:"primary",status:"success"},{default:(0,d.w5)((()=>[(0,d.Uk)("编译")])),_:1})])),_:1})):(0,d.kq)("",!0),(0,d.Wm)(u,{onClick:M,shape:"round",status:"warning"},{default:(0,d.w5)((()=>[(0,d.Uk)("刷新项目")])),_:1})])),_:1}),(0,d.Wm)(p,{style:{"margin-top":"10px"}},{default:(0,d.w5)((()=>[_.value.tmui||_.value.unix?(0,d.kq)("",!0):((0,d.wg)(),(0,d.j4)(u,{key:0,onClick:V,shape:"round"},{default:(0,d.w5)((()=>[(0,d.Uk)("安装TMUI")])),_:1})),_.value.tmui&&!_.value.unix?((0,d.wg)(),(0,d.j4)(u,{key:1,onClick:V,shape:"round"},{default:(0,d.w5)((()=>[(0,d.Uk)("更新TMUI")])),_:1})):(0,d.kq)("",!0),_.value.unix?((0,d.wg)(),(0,d.j4)(u,{key:2,onClick:D,shape:"round"},{default:(0,d.w5)((()=>[(0,d.Uk)("无法更新TMUI4.0x,查看群码")])),_:1})):(0,d.kq)("",!0),"cli"==a.data.type?((0,d.wg)(),(0,d.j4)(u,{key:3,onClick:V,shape:"round"},{default:(0,d.w5)((()=>[(0,d.Uk)("更新UniApp SDK")])),_:1})):(0,d.kq)("",!0)])),_:1})])),w.value?((0,d.wg)(),(0,d.iD)("div",E,["dev"==z.value&&k.value.pid?((0,d.wg)(),(0,d.iD)("div",R,[(0,d.Wm)(m,{theme:"dark",bordered:"",layout:"inline-horizontal",column:1,"label-style":{color:"#fff"},"value-style":{color:"#1ef31e"},size:"mini"},{default:(0,d.w5)((()=>[(0,d.Wm)(c,{label:"运行时间"},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)((0,r.SU)(O)),1)])),_:1}),(0,d.Wm)(c,{label:"进程标识"},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(k.value.pid),1)])),_:1}),((0,d.wg)(!0),(0,d.iD)(d.HY,null,(0,d.Ko)(k.value.host,((e,t)=>((0,d.wg)(),(0,d.j4)(c,{label:"访问地址",key:t},{default:(0,d.w5)((()=>[(0,d._)("a",{style:{color:"#1ef31e"},href:e,target:"_blank"},(0,q.zw)(e),9,Z)])),_:2},1024)))),128))])),_:1})])):(0,d.kq)("",!0),(0,d._)("div",B,["build"==z.value?((0,d.wg)(),(0,d.iD)("div",L," 编译耗时:"+(0,q.zw)((0,r.SU)(n)),1)):(0,d.kq)("",!0),"dev"==z.value?((0,d.wg)(),(0,d.j4)(u,{key:1,style:{width:"300px"},onClick:T,loading:y.value,shape:"round",type:"primary",status:"success"},{default:(0,d.w5)((()=>[(0,d.Uk)("停止运行")])),_:1},8,["loading"])):(0,d.kq)("",!0),"build"==z.value?((0,d.wg)(),(0,d.j4)(u,{key:2,disabled:!0,loading:y.value,shape:"round",status:"success"},{default:(0,d.w5)((()=>[(0,d.Uk)("编译中,勿关闭应用")])),_:1},8,["loading"])):(0,d.kq)("",!0)])])):(0,d.kq)("",!0),(0,d._)("div",Q,[(0,d._)("div",X,(0,q.zw)(a.data.name),1),(0,d._)("div",G,(0,q.zw)(a.data.createTime),1),(0,d._)("div",ee,(0,q.zw)(a.data.osName),1),(0,d.Wm)(f,{margin:"1px",style:{opacity:"0.4"}}),(0,d._)("div",te,[(0,d.Wm)(W,{color:"red"},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(a.data.type),1)])),_:1}),(0,d.Wm)(W,{color:a.data.uvue?"#f53f3f":"#00b42a"},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(a.data.uvue?"UniAppX项目":"UniApp项目"),1)])),_:1},8,["color"]),_.value.tmui?((0,d.wg)(),(0,d.j4)(W,{key:0,color:a.data.uvue?"#f53f3f":"#00b42a"},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(_.value.unix?"TMUI4x:":"TMUI3x:")+" "+(0,q.zw)(_.value.tmui),1)])),_:1},8,["color"])):(0,d.kq)("",!0)]),(0,d._)("div",ae,"运行状态:"+(0,q.zw)(w.value?"运行中:"+(0,r.SU)(O):"未运行"),1)]),(0,d._)("div",le,[(0,d._)("div",null,"项目名称:"+(0,q.zw)(_.value.name||"-"),1),(0,d._)("div",null,"APPID:"+(0,q.zw)(_.value.appid||"-"),1),(0,d._)("div",null,"VER:"+(0,q.zw)(_.value.versionName||"-"),1),(0,d.Wm)(f,{margin:"1px",style:{opacity:"0.4"}}),_.value.tmui?(0,d.kq)("",!0):((0,d.wg)(),(0,d.iD)("div",ne,"非TMUI项目")),_.value.tmui?((0,d.wg)(),(0,d.iD)("div",ie,(0,q.zw)(_.value.unix?"TMUI4x:":"TMUI3:")+" "+(0,q.zw)(_.value.tmui),1)):(0,d.kq)("",!0)])],2),(0,d.Wm)(de,{width:"650px",visible:h.value,"ok-loading":v.value,onCancel:l[4]||(l[4]=e=>h.value=!!v.value),onOk:N,"ok-text":"更新/下载"},{title:(0,d.w5)((()=>[(0,d.Uk)(" 更新/下载项目 ")])),footer:(0,d.w5)((()=>[(0,d.Wm)(u,{loading:v.value,disabled:!(0,r.SU)(I),type:"primary",onClick:N},{default:(0,d.w5)((()=>[(0,d.Uk)("更新/下载")])),_:1},8,["loading","disabled"])])),default:(0,d.w5)((()=>[(0,d.Wm)(A,{style:{"margin-bottom":"16px"},type:(0,r.SU)(I)?"success":"error"},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)((0,r.SU)(I)?"可以更新/下载当前版本,适配项目版本":"当前更新/下载的版本不兼容你所在项目的版本!!!"),1)])),_:1},8,["type"]),(0,d.Wm)(se,{model:x.value},{default:(0,d.w5)((()=>[(0,d.Wm)(oe,{field:"ver",tooltip:"根据类型切换项目",label:"TMUI3版本"},{default:(0,d.w5)((()=>[(0,d.Wm)(K,{loading:v.value,modelValue:x.value.ver,"onUpdate:modelValue":l[2]||(l[2]=e=>x.value.ver=e),placeholder:"选择TMUI版本"},{default:(0,d.w5)((()=>[((0,d.wg)(!0),(0,d.iD)(d.HY,null,(0,d.Ko)(U.value,((e,t)=>((0,d.wg)(),(0,d.j4)(J,{key:t,value:e},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(e)+(0,q.zw)(parseFloat(e.replace(".",""))>=32?"(全新对标4.0x vue版本不兼容3.1.x)":"(nvue版本)"),1)])),_:2},1032,["value"])))),128))])),_:1},8,["loading","modelValue"])])),_:1}),"cli"==a.data.type?((0,d.wg)(),(0,d.j4)(oe,{key:0,field:"uniappver",tooltip:"2.0开头是vue2,3.0开头是vue3",label:"SDK版本"},{default:(0,d.w5)((()=>[(0,d.Wm)(K,{loading:v.value,modelValue:x.value.uniappver,"onUpdate:modelValue":l[3]||(l[3]=e=>x.value.uniappver=e),placeholder:"选择UniApp SDK版本"},{default:(0,d.w5)((()=>[((0,d.wg)(!0),(0,d.iD)(d.HY,null,(0,d.Ko)(b.value,((e,t)=>((0,d.wg)(),(0,d.j4)(J,{key:t,value:e},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(e)+" - ",1),22==e.length?((0,d.wg)(),(0,d.j4)(W,{key:0,color:"#00b42a"},{default:(0,d.w5)((()=>[(0,d.Uk)("正式版")])),_:1})):((0,d.wg)(),(0,d.j4)(W,{key:1,color:"#f53f3f"},{default:(0,d.w5)((()=>[(0,d.Uk)("开发版")])),_:1}))])),_:2},1032,["value"])))),128))])),_:1},8,["loading","modelValue"])])),_:1})):(0,d.kq)("",!0)])),_:1},8,["model"])])),_:1},8,["visible","ok-loading"])])),(0,r.SU)(C)?((0,d.wg)(),(0,d.iD)("div",{key:1,onClick:l[5]||(l[5]=e=>t("click")),class:"header"},[(0,d._)("div",null,[(0,d.Wm)(re,{size:42})]),ue])):(0,d.kq)("",!0)])),_:1},8,["loading"])}}};const se=(0,k.Z)(oe,[["__scopeId","data-v-e821f0f4"]]);var de=se;const re={style:{display:"flex !important"}},pe={style:{margin:"12px 0"}},ce={style:{"font-size":"12px"}},ve={style:{"font-size":"14px","font-weight":"bold"}},me={style:{"font-size":"12px"}},fe={style:{"font-size":"11px"}};var ge={__name:"fileOpen",props:{data:{type:Object,default:()=>null}},setup(e,{expose:t}){const a=(0,r.iH)(""),l=(0,d.FN)().appContext.config.globalProperties,n=(0,r.iH)({name:"",type:"uniapp",ver:"",uniappver:"",uniappBuildType:"cli",machine:"inter",rootDir:""}),i=(0,r.iH)([]),u=(0,r.iH)([]),o=(0,r.iH)([]),s=c(),p=W(),m=(0,r.iH)(!1),f=(0,r.iH)(!1),g=(0,r.iH)(!1),w=(0,r.iH)(!1),y=(0,r.iH)([]),h=(0,r.iH)("none"),k=[{title:"根目录",path:A.isWinOs()?"C:\\":"/usr"},{title:"用户目录",path:A.isWinOs()?"C:\\Users":"/Volumes/Macintosh HD/Users"}];function _(){}function x(){}function U(){s.ws&&(g.value=!0,s.ws.send(JSON.stringify({event:"18",command:a.value})))}function b(){return A.isWinOs()?"\\":"/"}(0,d.bv)((()=>{})),(0,d.YP)((()=>s.logMsg),(()=>{const e=s.logMsg?.wscontend;if(e)if("18"==e.event){if(""==e?.flag){const t=e.data;if(t?.errno)l.$message.error({content:"不存在的目录"});else{a.value=t?.parent??(A.isWinOs()?"C:\\":"/Volumes"),y.value=t?.children??[],y.value=y.value.sort(((e,t)=>e.type==t.type));let e=[],l=[];y.value.forEach((t=>{"dir"==t.type?e.push(t):l.push(t)})),y.value=[...e,...l],H()}}"end"==e?.flag&&setTimeout((()=>{g.value=!1,h.value=j()}),200)}else"22"==e.event&&"end"==e?.flag&&(w.value=!1,f.value=!1,a.value=e.data,U(),l.$notification.success({title:"创建成功,请点击导入新创建的项目"}))}),{deep:!0});const S=(0,d.Fl)((()=>"none"==h.value?"未知路径,不会执行操作":"empty"==h.value?"创建项目":"hbx"==h.value||"cli"==h.value?"更新tmui":"warn"==h.value?"谨慎创建项目":"未知"));function j(){if(!a.value)return"none";if(0==y.value.length)return"empty";const e=y.value.map((e=>e.name));return e.includes("manifest.json")&&e.includes("pages")&&e.includes("pages.json")?"hbx":e.includes("src")&&e.includes("index.html")&&e.includes("package.json")?"cli":"warn"}function z(){const e=y.value.map((e=>e.suffix));return!(!e.includes(".uvue")||!e.includes(".uts"))}function O(e){let t=e.name;"dir"==e.type&&(s.ws?(g.value=!0,s.ws.send(JSON.stringify({event:"18",command:a.value+b()+t}))):l.$message.error({content:"未连接"}))}function C(){let e=a.value.split(b());if(e[e.length-1]||(e=[e]),0==e.length&&(e=a.value.split("/")),0==e.length||1==e.length)return;const t=e.slice(0,e.length-1),l=1==t.length?t[0]+b():t.join(b());g.value=!0,s.ws.send(JSON.stringify({event:"18",command:l}))}function I(e){g.value=!0,s.ws.send(JSON.stringify({event:"18",command:e.path}))}function H(){localStorage.setItem("nowfileDirPath",a.value)}function T(e){if("save"==e){let e=localStorage.getItem("project"),t=[];e&&(t=JSON.parse(e));let n={id:"",path:"",createTime:"",name:"",type:"cli",lastRunTime:"",osName:"",uvue:z()};const i=t.map((e=>e.path));i.includes(a.value)?l.$message.error({content:"已存在相同项目"}):(n.id=A.uuid(),n.path=a.value,n.createTime=new Date,n.name=n.path.substring(n.path.lastIndexOf(A.getOsSep())+1),n.type=j(),n.lastRunTime="-",n.osName=A.isWinOs()?"windows":"Mac/liunx",t.push(n),localStorage.setItem("project",JSON.stringify(t)),p.projectPath=n,p.projects=t),m.value=!1}else"create"==e&&(f.value=!0,D())}function M(){n.value.name.trim()?n.value.ver.trim()||"uniappx"==n.value.type?(n.value.rootDir=a.value,w.value=!0,s.ws.send(JSON.stringify({event:"22",command:n.value}))):l.$notification.error({title:"请选择tmui版本"}):l.$notification.error({title:"请填写项目名称"})}async function D(e){n.value.ver="",n.value.uniappver="";let t=await v("/api/cehckTmuiVer",{type:e});i.value=t.version,V(),"uniappx"==e&&"cli"==n.value.uniappBuildType&&(n.value.uniappBuildType="hbx")}async function V(){if(!s.ws)return void l.$message.error({content:"未连接"});w.value=!0;let e=await v("/api/checkUniappVer");u.value=e.data.versions,o.value=e.data.dist,w.value=!1}const N=e=>{e.indexOf("alpha");let t=e.split("-"),a=t[t.length-1],l=a[0],n=a.substring(1,3),i=a.substring(3,5);return l+"."+parseInt(n)+parseInt(i)};return t({open:()=>{m.value=!0,setTimeout((()=>{const e=localStorage.getItem("nowfileDirPath");g.value=!0,s.ws.send(JSON.stringify({event:"18",command:e||""}))}),500)}}),(e,t)=>{const l=(0,d.up)("a-button"),o=(0,d.up)("a-button-group"),s=(0,d.up)("icon-left"),p=(0,d.up)("a-input-search"),c=(0,d.up)("a-alert"),v=(0,d.up)("icon-folder"),b=(0,d.up)("a-list-item"),W=(0,d.up)("a-list"),j=(0,d.up)("a-spin"),z=(0,d.up)("a-space"),H=(0,d.up)("a-modal"),V=(0,d.up)("a-input"),P=(0,d.up)("a-form-item"),A=(0,d.up)("a-radio-group"),J=(0,d.up)("a-option"),K=(0,d.up)("a-select"),$=(0,d.up)("a-tag"),Y=(0,d.up)("a-form");return(0,d.wg)(),(0,d.iD)(d.HY,null,[(0,d.Wm)(H,{width:"60vw","ok-text":(0,r.SU)(S),"ok-loading":g.value,visible:m.value,"onUpdate:visible":t[4]||(t[4]=e=>m.value=e),onOk:_,onCancel:x,draggable:""},{title:(0,d.w5)((()=>[(0,d.Uk)(" 目录选择 ")])),footer:(0,d.w5)((()=>[(0,d.Wm)(z,null,{default:(0,d.w5)((()=>[(0,d.Wm)(l,{loading:g.value,onClick:t[1]||(t[1]=e=>m.value=!1)},{default:(0,d.w5)((()=>[(0,d.Uk)("取消操作")])),_:1},8,["loading"]),"hbx"==h.value||"cli"==h.value?((0,d.wg)(),(0,d.j4)(l,{key:0,type:"primary",status:"success",loading:g.value,onClick:t[2]||(t[2]=e=>T("save"))},{default:(0,d.w5)((()=>[(0,d.Uk)("导入当前UNIAPP项目")])),_:1},8,["loading"])):((0,d.wg)(),(0,d.j4)(l,{key:1,type:"primary",loading:g.value,onClick:t[3]||(t[3]=e=>T("create"))},{default:(0,d.w5)((()=>[(0,d.Uk)("在此创建项目")])),_:1},8,["loading"]))])),_:1})])),default:(0,d.w5)((()=>[(0,d._)("div",null,[(0,d.Wm)(o,null,{default:(0,d.w5)((()=>[((0,d.wg)(),(0,d.iD)(d.HY,null,(0,d.Ko)(k,((e,t)=>(0,d.Wm)(l,{onClick:t=>I(e),key:t},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(e.title),1)])),_:2},1032,["onClick"]))),64))])),_:1})]),(0,d._)("div",null,[(0,d._)("div",re,[(0,d.Wm)(l,{loading:g.value,onClick:C},{default:(0,d.w5)((()=>[(0,d.Wm)(s)])),_:1},8,["loading"]),(0,d.Wm)(p,{onPressEnter:U,loading:g.value,onSearch:U,modelValue:a.value,"onUpdate:modelValue":t[0]||(t[0]=e=>a.value=e),"button-text":"查询目录","search-button":""},null,8,["loading","modelValue"])]),(0,d._)("div",pe,[(0,d._)("div",ce,["cli"==h.value||"hbx"==h.value?((0,d.wg)(),(0,d.j4)(c,{key:0,type:"success","show-icon":""},{default:(0,d.w5)((()=>[(0,d.Uk)("这是一个UNIAPP项目,你可以更新/下载[tmui]组件库")])),_:1})):((0,d.wg)(),(0,d.j4)(c,{key:1,"show-icon":""},{default:(0,d.w5)((()=>[(0,d.Uk)("可以在此创建项目目录,来创新一个新项目")])),_:1}))])]),(0,d.Wm)(j,{loading:g.value,style:{width:"100%"}},{default:(0,d.w5)((()=>[(0,d.Wm)(W,{size:"small","max-height":450,style:{height:"450px"}},{default:(0,d.w5)((()=>[((0,d.wg)(!0),(0,d.iD)(d.HY,null,(0,d.Ko)(y.value,((e,t)=>((0,d.wg)(),(0,d.j4)(b,{key:t,onClick:t=>O(e),class:(0,q.C_)(["itemcell",[e.type]]),style:(0,q.j5)({color:"dir"==e.type?"rgb(36, 76, 255)":"black"})},{default:(0,d.w5)((()=>[(0,d._)("div",ve,["dir"==e.type?((0,d.wg)(),(0,d.j4)(v,{key:0,size:16,style:{"padding-right":"10px"}})):(0,d.kq)("",!0),(0,d.Uk)((0,q.zw)(e.name),1)]),(0,d._)("div",me,(0,q.zw)(e.parent),1)])),_:2},1032,["onClick","class","style"])))),128))])),_:1})])),_:1},8,["loading"])])])),_:1},8,["ok-text","ok-loading","visible"]),(0,d.Wm)(H,{width:"650px",visible:f.value,"ok-loading":w.value,onCancel:t[11]||(t[11]=e=>f.value=!!w.value),onOk:M,"ok-text":"创建tmui项目"},{title:(0,d.w5)((()=>[(0,d.Uk)(" 创建项目 ")])),footer:(0,d.w5)((()=>[(0,d.Wm)(l,{onClick:t[10]||(t[10]=e=>f.value=w.value||!1),loading:w.value},{default:(0,d.w5)((()=>[(0,d.Uk)("取消")])),_:1},8,["loading"]),(0,d.Wm)(l,{onClick:M,type:"primary",loading:w.value},{default:(0,d.w5)((()=>[(0,d.Uk)("创建tmui项目")])),_:1},8,["loading"])])),default:(0,d.w5)((()=>[(0,d.Wm)(c,{type:"success"},{default:(0,d.w5)((()=>[(0,d.Uk)("您将在目录:"),(0,d._)("span",fe,(0,q.zw)(a.value),1),(0,d.Uk)("创建项目")])),_:1}),(0,d.Wm)(Y,{model:n.value,style:{"margin-top":"20px"}},{default:(0,d.w5)((()=>[(0,d.Wm)(P,{field:"name",tooltip:"建议纯字母不要带特殊符号",label:"项目名称"},{default:(0,d.w5)((()=>[(0,d.Wm)(V,{modelValue:n.value.name,"onUpdate:modelValue":t[5]||(t[5]=e=>n.value.name=e),placeholder:"请输入项目名称,不要有中文和特殊字符"},null,8,["modelValue"])])),_:1}),(0,d.Wm)(P,{field:"type",tooltip:"x项目是原生uvue uts,uniapp项目是正常的小程序,appvue项目",label:"项目类型"},{default:(0,d.w5)((()=>[(0,d.Wm)(j,{loading:w.value},{default:(0,d.w5)((()=>[(0,d.Wm)(A,{onChange:D,modelValue:n.value.type,"onUpdate:modelValue":t[6]||(t[6]=e=>n.value.type=e),options:[{label:"uniapp项目",value:"uniapp"},{label:"uniappX项目",value:"uniappx"}]},null,8,["modelValue"])])),_:1},8,["loading"])])),_:1}),"uniappx"==n.value.type?((0,d.wg)(),(0,d.j4)(c,{key:0,type:"error"},{default:(0,d.w5)((()=>[(0,d.Uk)("注意:X项目只是创建个空项目")])),_:1})):(0,d.kq)("",!0),n.value.type&&"uniappx"!=n.value.type?((0,d.wg)(),(0,d.j4)(P,{key:1,field:"ver",tooltip:"根据类型切换项目",label:("uniapp"==n.value.type?"TMUI3":"TMUI4")+"版本"},{default:(0,d.w5)((()=>[(0,d.Wm)(K,{loading:w.value,modelValue:n.value.ver,"onUpdate:modelValue":t[7]||(t[7]=e=>n.value.ver=e),placeholder:"选择TMUI版本"},{default:(0,d.w5)((()=>[((0,d.wg)(!0),(0,d.iD)(d.HY,null,(0,d.Ko)(i.value,((e,t)=>((0,d.wg)(),(0,d.j4)(J,{key:t,value:e},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(e)+(0,q.zw)(parseFloat(e.replace(".",""))>=32?"(全新对标4.0x vue版本不兼容3.1.x)":"(nvue版本)"),1)])),_:2},1032,["value"])))),128))])),_:1},8,["loading","modelValue"])])),_:1},8,["label"])):(0,d.kq)("",!0),n.value.type&&"uniappx"!=n.value.type&&"cli"==n.value.uniappBuildType?((0,d.wg)(),(0,d.j4)(P,{key:2,field:"uniappver",tooltip:"2.0开头是vue2,3.0开头是vue3",label:"SDK版本"},{default:(0,d.w5)((()=>[(0,d.Wm)(K,{loading:w.value,modelValue:n.value.uniappver,"onUpdate:modelValue":t[8]||(t[8]=e=>n.value.uniappver=e),placeholder:"选择UniApp SDK版本"},{default:(0,d.w5)((()=>[((0,d.wg)(!0),(0,d.iD)(d.HY,null,(0,d.Ko)(u.value,((e,t)=>((0,d.wg)(),(0,d.j4)(J,{key:t,value:e},{default:(0,d.w5)((()=>[(0,d.Uk)((0,q.zw)(e)+" - ",1),22==e.length?((0,d.wg)(),(0,d.j4)($,{key:0,color:"#00b42a"},{default:(0,d.w5)((()=>[(0,d.Uk)("正式版"+(0,q.zw)(N(e)),1)])),_:2},1024)):((0,d.wg)(),(0,d.j4)($,{key:1,color:"#f53f3f"},{default:(0,d.w5)((()=>[(0,d.Uk)("开发版"+(0,q.zw)(N(e)),1)])),_:2},1024))])),_:2},1032,["value"])))),128))])),_:1},8,["loading","modelValue"])])),_:1})):(0,d.kq)("",!0),(0,d.Wm)(P,{field:"uniappBuildType",tooltip:"根据类型切换项目",label:"项目类型"},{default:(0,d.w5)((()=>[(0,d.Wm)(A,{modelValue:n.value.uniappBuildType,"onUpdate:modelValue":t[9]||(t[9]=e=>n.value.uniappBuildType=e),"default-value":n.value.uniappBuildType,options:[{disabled:"uniappx"==n.value.type,label:"CLI(推荐,可使用vscode,ws等编译运行,也可在本cli运行预览.也可用Hbuilder编译)",value:"cli"},{label:"HBX(仅支持Hbuilder工具,不推荐)",value:"hbx"}]},null,8,["modelValue","default-value","options"])])),_:1})])),_:1},8,["model"])])),_:1},8,["visible","ok-loading"])],64)}}};const we=(0,k.Z)(ge,[["__scopeId","data-v-9746d8e2"]]);var ye=we;const he={class:"body"},ke={class:"item"};var _e={__name:"XiangMu",setup(e){const t=W(),a=(0,r.iH)(null),l=c();async function n(e){l.localhostIng?a.value?.open():proxyGlobal.$message.error({content:"未连接"})}return(e,l)=>((0,d.wg)(),(0,d.iD)(d.HY,null,[(0,d._)("div",he,[((0,d.wg)(!0),(0,d.iD)(d.HY,null,(0,d.Ko)((0,r.SU)(t).projects,((e,t)=>((0,d.wg)(),(0,d.iD)("div",{class:"item",key:t},[(0,d.Wm)(de,{data:e},null,8,["data"])])))),128)),(0,d._)("div",ke,[(0,d.Wm)(de,{onClick:n})])]),(0,d.Wm)(ye,{ref_key:"filesystem",ref:a},null,512)],64))}};const xe=(0,k.Z)(_e,[["__scopeId","data-v-2674685f"]]);var Ue=xe;const be={class:"",style:{padding:"24px",display:"flex",gap:"24px","flex-direction":"column"}},We=(0,d._)("h2",null,"如果它在你的商业项目中帮助了你,可以通过以下方式赞助我,让项目持续的更新。",-1),Se=(0,d._)("img",{style:{width:"550px"},src:"https://cdn.tmui.design/public/design/payzhanzhu.jpg"},null,-1),je=(0,d._)("h3",{style:{color:"red"}},"你的支持赞助,会使得项目可持续发展的更好,而不是因为经济,精力问题导致中断。",-1),ze=(0,d._)("h2",null,"加入微信群",-1),Oe=(0,d._)("img",{style:{width:"300px"},src:"https://cdn.tmui.design/public/design/weixinQR2.jpg"},null,-1),Ce=[We,Se,je,ze,Oe];function Ie(e,t){return(0,d.wg)(),(0,d.iD)("div",be,Ce)}const He={},Te=(0,k.Z)(He,[["render",Ie]]);var Me=Te;const De=e=>((0,d.dD)("data-v-5efaaea3"),e=e(),(0,d.Cn)(),e),Ve={class:"box"},Ne=De((()=>(0,d._)("div",{class:"card"},[(0,d._)("h2",{style:{"margin-bottom":"20px"}},"前言"),(0,d._)("p",null," 因为有了4.0x原生组件的收费,产生了收益,促使我继续维护uniapp版本的3系列, 并升级到了3.2,丢掉了3.1的一些屎山代码: "),(0,d._)("p",null," 主要是放弃了nvue的支持,因为官方Dcloud也放弃了对nvue的支持,所以已经没有意义维护了。维护一个版本需要 大量的测试。以3.1比喻我每测试检测一下就要同时运行到:微信,andriod,ios,支付宝,web等不同平台测试。 因此维护一个版本是需要很多精力和时间测试,不是一下就能发布的。 "),(0,d._)("p",null," 同理3.2在发布正式版本前我需要做很多适配工作,因此也有大量的时间和维护成本。好在我的4.0原生项目在插件市场 售卖的收益不错,形成了正向利益驱动,让我有了动力维护更新3系列。我对2025年作了如下的规划: ")],-1))),Pe={class:"card"},qe=De((()=>(0,d._)("div",{class:"title"},"UniApp TMUI3.2.x的任务计划",-1))),Ae=De((()=>(0,d._)("div",null,[(0,d._)("ul",null,[(0,d._)("li",null,"鸿蒙适配"),(0,d._)("li",null,"抖音适配"),(0,d._)("li",null,"支付宝适配"),(0,d._)("li",null,"安卓APP适配"),(0,d._)("li",null,"IOS适配"),(0,d._)("li",null,"把剩余的对标4的一些能移植的组件,适配过来。不能适配请使用4.0x")])],-1))),Je={class:"card"},Ke=De((()=>(0,d._)("div",{class:"title"},"原生Uvue Uts TMUI4.x的任务计划",-1)));function $e(e,t){const a=(0,d.up)("H3");return(0,d.wg)(),(0,d.iD)("div",Ve,[Ne,(0,d._)("div",Pe,[qe,(0,d.Wm)(a,null,{default:(0,d.w5)((()=>[(0,d.Uk)("2025年6月前完成tmui3.2的所有开发工作并发布正式版本")])),_:1}),Ae]),(0,d._)("div",Je,[Ke,(0,d.Wm)(a,null,{default:(0,d.w5)((()=>[(0,d.Uk)("2025年3月前完成tmui4x的微信适配工作")])),_:1}),(0,d.Wm)(a,null,{default:(0,d.w5)((()=>[(0,d.Uk)("2025年6月前完成tmui4x的鸿蒙适配工作")])),_:1})])])}const Ye={},Fe=(0,k.Z)(Ye,[["render",$e],["__scopeId","data-v-5efaaea3"]]);var Ee=Fe,Re={__name:"HomeView",setup(e){const t=W(),a=(0,d.Fl)((()=>t.menuKeys[0]??""));return(e,t)=>((0,d.wg)(),(0,d.iD)(d.HY,null,["xiangmu"==(0,r.SU)(a)?((0,d.wg)(),(0,d.j4)(Ue,{key:0})):(0,d.kq)("",!0),"zhanzhu"==(0,r.SU)(a)?((0,d.wg)(),(0,d.j4)(Me,{key:1})):(0,d.kq)("",!0),"update"==(0,r.SU)(a)?((0,d.wg)(),(0,d.j4)(Ee,{key:2})):(0,d.kq)("",!0)],64))}};const Ze=Re;var Be=Ze;const Le=e=>((0,d.dD)("data-v-6469922e"),e=e(),(0,d.Cn)(),e),Qe={class:"header"},Xe=Le((()=>(0,d._)("span",{class:"logo"},"TMUI CLI 可视化配置工具",-1))),Ge={style:{color:"orange"}},et={style:{color:"green"}},tt={key:0,style:{color:"red"}},at=Le((()=>(0,d._)("img",{style:{width:"20px"},src:"https://xui.tmui.design/logo.png"},null,-1))),lt=Le((()=>(0,d._)("img",{style:{width:"20px"},src:"https://tmui.design/images/logoGreat.png"},null,-1)));var nt={__name:"HeadView",setup(e){const t=(0,d.FN)().appContext.config.globalProperties,a=c(),l=(0,r.iH)({memUsage:0,cpuUsage:0}),{pause:n,resume:i,isActive:u}=(0,J.Zv)((()=>{a.ws&&a.ws.send(JSON.stringify({event:"getCpu",command:""}))}),3e3);function o(){t.$modal.confirm({title:"加入微信群",width:"300px",hideCancel:!0,content:(0,d.h)("img",{src:"https://cdn.tmui.design/public/design/weixinQR2.jpg?id="+Math.random()})})}return(0,d.YP)((()=>a.logMsg),(()=>{const e=a.logMsg?.wscontend;if(e&&"getCpu"==e.event){const t=e.data;l.value=t}}),{deep:!0}),(0,d.YP)((()=>a.ws),(()=>{a.ws&&a.ws.send(JSON.stringify({event:"getCpu",command:""}))}),{deep:!0}),(e,t)=>{const a=(0,d.up)("a-button"),n=(0,d.up)("icon-wechat"),i=(0,d.up)("a-space");return(0,d.wg)(),(0,d.iD)("div",Qe,[(0,d._)("div",null,[Xe,(0,d._)("span",Ge," USE CPU:"+(0,q.zw)(l.value.cpuUsage)+"% ",1),(0,d._)("span",et," USE MEM:"+(0,q.zw)(l.value.memUsage)+"% ",1),l.value.memUsage>=80||l.value.cpuUsage>=50?((0,d.wg)(),(0,d.iD)("span",tt," 使用率过高,影响编译 ")):(0,d.kq)("",!0)]),(0,d._)("div",null,[(0,d.Wm)(i,{size:"large"},{default:(0,d.w5)((()=>[(0,d.Wm)(a,{style:{background:"#ffffff"},href:"https://xui.tmui.design",target:"_blank",type:"primary",shape:"circle"},{default:(0,d.w5)((()=>[at])),_:1}),(0,d.Wm)(a,{href:"https://tmui.design",style:{background:"#ffffff"},target:"_blank",type:"primary",shape:"circle"},{default:(0,d.w5)((()=>[lt])),_:1}),(0,d.Wm)(a,{onClick:o,type:"primary",shape:"circle"},{default:(0,d.w5)((()=>[(0,d.Wm)(n,{style:{fontSize:"21px"}})])),_:1})])),_:1})])])}}};const it=(0,k.Z)(nt,[["__scopeId","data-v-6469922e"]]);var ut=it;const ot=[{path:"/",name:"Home",components:{header:ut,body:Be}}],st=(0,P.p7)({history:(0,P.r5)(),routes:ot});var dt=st;window["VUE_APP_IMG_STATIC_HOST"]="https://tmui.design/api_v2/store/static/public/moban/",window["VUE_APP_WS_HOST"]="wss://tmui.design:8124/wss",window["VUE_APP_API_HOST"]="/api_v2";const rt=(0,l.ri)(N);rt.use(s()),rt.use(w()),rt.use((0,i.WB)()),rt.use(n.Z),rt.use(u.Z),rt.use(dt),rt.mount("#app"),window.app=rt}},t={};function a(l){var n=t[l];if(void 0!==n)return n.exports;var i=t[l]={exports:{}};return e[l].call(i.exports,i,i.exports,a),i.exports}a.m=e,function(){var e=[];a.O=function(t,l,n,i){if(!l){var u=1/0;for(r=0;r<e.length;r++){l=e[r][0],n=e[r][1],i=e[r][2];for(var o=!0,s=0;s<l.length;s++)(!1&i||u>=i)&&Object.keys(a.O).every((function(e){return a.O[e](l[s])}))?l.splice(s--,1):(o=!1,i<u&&(u=i));if(o){e.splice(r--,1);var d=n();void 0!==d&&(t=d)}}return t}i=i||0;for(var r=e.length;r>0&&e[r-1][2]>i;r--)e[r]=e[r-1];e[r]=[l,n,i]}}(),function(){a.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return a.d(t,{a:t}),t}}(),function(){a.d=function(e,t){for(var l in t)a.o(t,l)&&!a.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:t[l]})}}(),function(){a.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}}(),function(){var e={143:0};a.O.j=function(t){return 0===e[t]};var t=function(t,l){var n,i,u=l[0],o=l[1],s=l[2],d=0;if(u.some((function(t){return 0!==e[t]}))){for(n in o)a.o(o,n)&&(a.m[n]=o[n]);if(s)var r=s(a)}for(t&&t(l);d<u.length;d++)i=u[d],a.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return a.O(r)},l=self["webpackChunktmuistore"]=self["webpackChunktmuistore"]||[];l.forEach(t.bind(null,0)),l.push=t.bind(null,l.push.bind(l))}();var l=a.O(void 0,[998],(function(){return a(707)}));l=a.O(l)})();
|
|
2
|
+
//# sourceMappingURL=app.4d09dd9c.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js/app.4d09dd9c.js","mappings":"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","sources":["webpack://tmuistore/./src/store/log.js","webpack://tmuistore/./src/fetch.js","webpack://tmuistore/./src/components/Loger.vue","webpack://tmuistore/./src/components/Loger.vue?3131","webpack://tmuistore/./src/store/user.js","webpack://tmuistore/./src/components/MenuView.vue","webpack://tmuistore/./src/components/MenuView.vue?2c0e","webpack://tmuistore/./src/App.vue","webpack://tmuistore/./src/App.vue?7ccd","webpack://tmuistore/./src/libs/util.js","webpack://tmuistore/./src/components/moban/mobanCell.vue","webpack://tmuistore/./src/components/moban/mobanCell.vue?8003","webpack://tmuistore/./src/components/moban/fileOpen.vue","webpack://tmuistore/./src/components/moban/fileOpen.vue?b813","webpack://tmuistore/./src/components/XiangMu.vue","webpack://tmuistore/./src/components/XiangMu.vue?c3a5","webpack://tmuistore/./src/components/ZhanZhu.vue","webpack://tmuistore/./src/components/ZhanZhu.vue?f36d","webpack://tmuistore/./src/components/UpdateLine.vue","webpack://tmuistore/./src/components/UpdateLine.vue?1186","webpack://tmuistore/./src/views/HomeView.vue","webpack://tmuistore/./src/views/HomeView.vue?1da1","webpack://tmuistore/./src/components/HeadView.vue","webpack://tmuistore/./src/components/HeadView.vue?b2e0","webpack://tmuistore/./src/router/index.js","webpack://tmuistore/./src/main.js","webpack://tmuistore/webpack/bootstrap","webpack://tmuistore/webpack/runtime/chunk loaded","webpack://tmuistore/webpack/runtime/compat get default export","webpack://tmuistore/webpack/runtime/define property getters","webpack://tmuistore/webpack/runtime/global","webpack://tmuistore/webpack/runtime/hasOwnProperty shorthand","webpack://tmuistore/webpack/runtime/make namespace object","webpack://tmuistore/webpack/runtime/jsonp chunk loading","webpack://tmuistore/webpack/startup"],"sourcesContent":["import { defineStore } from 'pinia'\r\nlet tokenNow = localStorage.getItem(\"token\") || \"\"\r\n\r\nexport const useLog = defineStore('Log', {\r\n state: () => {\r\n return {\r\n logMsg: '',\r\n // 是否已经连接到主机\r\n localhostIng: false,\r\n ws: undefined,\r\n cmd: undefined\r\n }\r\n },\r\n actions: {\r\n\r\n },\r\n})","import { useFetch } from '@vueuse/core'\r\nimport { useLog } from '@/store/log'\r\n\r\n\r\nconst hostname = process.env.VUE_APP_API_HOST\r\n// const hostname = \"/api_v2\"\r\nexport function get(url) {\r\n return new Promise((reslove, reject) => {\r\n useFetch(url, {\r\n refetch: false,\r\n onFetchError: (e => {\r\n reject(e.error)\r\n }), beforeFetch({ options }) {\r\n options.headers.token = localStorage.getItem(\"token\")\r\n return options;\r\n }\r\n }).get().json()\r\n .then(rulst => {\r\n if (rulst.statusCode.value != 200) {\r\n reject(rulst.statusCode)\r\n return;\r\n }\r\n let data = rulst.data.value;\r\n reslove(data)\r\n })\r\n\r\n\r\n })\r\n}\r\nexport function post(url, opts = {}) {\r\n return new Promise((reslove, reject) => {\r\n useFetch(url, {\r\n refetch: false,\r\n \r\n onFetchError: (e => {\r\n reject(e.error)\r\n }), beforeFetch({ options }) {\r\n options.headers.token = localStorage.getItem(\"token\")\r\n options.headers['Content-Type'] = \"application/json\"\r\n return options;\r\n }\r\n }).post(opts).json()\r\n .then(rulst => {\r\n if (rulst.statusCode.value != 200) {\r\n reject(rulst.statusCode)\r\n return;\r\n }\r\n let data = rulst.data.value;\r\n reslove(data)\r\n })\r\n\r\n\r\n })\r\n}\r\n\r\nexport function downloadFileGet(url, callback) {\r\n\r\n return new Promise((reslove, reject) => {\r\n fetch(hostname + url, { mode: \"cors\", headers: { token: localStorage.getItem(\"token\") } }).then(async rulst => {\r\n if (rulst.status != 200) {\r\n reject(rulst.statusText)\r\n return;\r\n }\r\n let readerOn = rulst.body.getReader()\r\n let receivedLength = 0;\r\n let maxlen = rulst.headers.get(\"content-length\")\r\n let chunk = []\r\n // 在 body 下载时,一直为无限循环\r\n while (true) {\r\n // 当最后一块下载完成时,done 值为 true\r\n // value 是块字节的 Uint8Array\r\n if (!readerOn) break;\r\n const { done, value } = await readerOn.read();\r\n if (!done) {\r\n let len = value.length;\r\n receivedLength = receivedLength + len;\r\n chunk.push(value.buffer)\r\n callback(Math.ceil(receivedLength / maxlen * 100))\r\n\r\n }\r\n if (done) break;\r\n }\r\n var reader = new FileReader();\r\n reader.readAsDataURL(new Blob(chunk)); // 转换为base64,可以直接放入a表情href\r\n reader.onload = function (e) {\r\n // 转换完成,创建一个a标签用于下载\r\n var a = document.createElement('a');\r\n a.download = new Date().getTime() + \".zip\";\r\n a.href = e.target?.result;\r\n document.body.append(a);\r\n a.click();\r\n document.body.removeChild(a);\r\n reslove(true)\r\n }\r\n reader.onerror = function () {\r\n reslove(false)\r\n }\r\n reader.abort = function () {\r\n reslove(false)\r\n }\r\n })\r\n\r\n })\r\n}\r\n\r\nexport async function globalCheckTmuiVer(type) {\r\n\tlet result = await post('/api/cehckTmuiVer', { type })\r\n\treturn result.version\r\n}\r\nexport async function globalCheckUniAppVer() {\r\n\r\n\tlet result = await post('/api/checkUniappVer')\r\n\treturn result.data\r\n}","<template>\r\n\t<div class=\"bloger\">\r\n\t\t<Vue3DraggableResizable style=\"z-index: 100;\" \r\n\t\tv-model:x=\"maxwidth\" v-model:y=\"maxheight\" :initW=\"540\" :initH=\"250\" :draggable=\"true\" \r\n\t\t:resizable=\"true\">\r\n\t\t\t<terminal ref=\"cmdvue\" :command-store=\"customCommand\" :init-log=\"initMsg\" \r\n\t\t\ttitle=\"tmui cli\" name=\"cmd\" :context=\"cliPath\" @execCmd=\"onExecCmd\">\r\n\t\t\t</terminal>\r\n\t\t</Vue3DraggableResizable>\r\n\t</div>\r\n</template>\r\n\r\n<script setup>\r\nimport { get, post } from '@/fetch'\r\nimport { h, nextTick, onMounted, ref, watch } from 'vue'\r\nimport Terminal from 'vue-web-terminal'\r\nimport Vue3DraggableResizable from 'vue3-draggable-resizable'\r\nimport { useLog } from './../store/log'\r\nconst LogStore = useLog()\r\nconst cmd = Terminal.$api\r\nconst lodom = ref(null)\r\nconst lodomBody = ref(null)\r\n// window.innerWidth-260\r\nconst maxwidth = ref(window.innerWidth-550)\r\nconst maxheight = ref(window.innerHeight-260)\r\nconst cliPath = ref('tmui')\r\nconst cmdvue = ref(null)\r\nconst initMsg = [\r\n\t{\r\n\t\ttype: 'normal',\r\n\t\tcontent: '欢迎来到TMUI CLI可视化',\r\n\t\tclass: 'success'\r\n\t}\r\n]\r\nconst customCommand = [\r\n\t{\r\n\t\tkey: 'tmui',\r\n\t\ttitle: 'Tmui',\r\n\t\tgroup: 'local',\r\n\t\tusage: 'tmui [参数]',\r\n\t\tdescription: 'tmui 命令行工具',\r\n\t\texample: [\r\n\t\t\t{\r\n\t\t\t\tdes: '保姆级别分步安装tmui3.0组件库哦~',\r\n\t\t\t\tcmd: 'tmui help'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tdes: '保姆级别分步安装tmui3.0组件库哦~',\r\n\t\t\t\tcmd: 'tmui use'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tdes: '查看当前项目路径',\r\n\t\t\t\tcmd: 'tmui dir'\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n]\r\nconst commandKey = ['list', 'use', 'cli', 'rcli']\r\nconst isExecIng = ref(false)\r\nvar LogClient = undefined\r\nLogStore.cmd = cmd\r\nonMounted(() => {\r\n\tinit()\r\n})\r\n\r\nfunction init() {\r\n\t\r\n\tnextTick(()=>{\r\n\t\tconst cmd = Terminal.$api\r\n\t})\r\n\r\n}\r\nwatch(\r\n\t() => LogStore.logMsg,\r\n\t(msg) => {\r\n\t\t\r\n\t\tif (cmd && typeof msg == 'object' && msg) {\r\n\t\t\t\r\n\t\t\tconst wscontent = msg.wscontend\r\n\r\n\t\t\tif (wscontent.event == 'info') {\r\n\t\t\t\tcmdvue.value._pushMessage({content:wscontent.data,class:'info'})\r\n\t\t\t}\r\n\r\n\t\t\tif (wscontent.event == 'end' && LogClient) {\r\n\t\t\t\tisExecIng.value = false\r\n\t\t\t\tLogClient({ content: '' })\r\n\t\t\t} else {\r\n\t\t\t\t// console.log(wscontent)\r\n\t\t\t\t// if(typeof wscontent.data == 'string'){\r\n\t\t\t\t// \tcmd.pushMessage('cmd', {content:wscontent.data})\r\n\t\t\t\t// }else if(typeof wscontent.data=='object' && wscontent.data){\r\n\t\t\t\t// \tcmd.pushMessage('cmd', {content:JSON.stringify(wscontent.data)})\r\n\t\t\t\t// }\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (LogClient) {\r\n\t\t\t\tisExecIng.value = false\r\n\t\t\t\tLogClient({ content: '' })\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t{ deep: true }\r\n)\r\nfunction onExecCmd(key, command, success, failed) {\r\n\tif (!LogStore.localhostIng) {\r\n\t\tfailed('未连接到cli本地,请重新执行cmd命令tmui ui来启动本界面,并刷新.')\r\n\t\treturn\r\n\t}\r\n\tif (key === 'fail') {\r\n\t\tfailed('Something wrong!!!')\r\n\t} else {\r\n\t\tlet allClass = ['success', 'error', 'system', 'info', 'warning']\r\n\r\n\t\tconst words = command.trim().split(' ')\r\n\t\tif (words[0] != 'tmui' && words[0] != 'npm') {\r\n\t\t\tfailed('只能接受help中提到的命令')\r\n\t\t\treturn\r\n\t\t}\r\n\t\tif (words[0] == 'tmui' && words.length == 2 && commandKey.includes(words[1])) {\r\n\t\t\tconst keys = words[1]\r\n\t\t\ttry {\r\n\t\t\t\tml[keys](success, failed)\r\n\t\t\t} catch (e) {\r\n\t\t\t\tfailed(e)\r\n\t\t\t}\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// failed('未识别的命令行.')\r\n\t\tml['cmd'](success, failed, command)\r\n\t}\r\n}\r\n\r\nconst ml = {\r\n\tlist: async (success, failed) => {\r\n\t\tconst d = await post('/api/dirlist').catch((error) => {\r\n\t\t\tfailed(error)\r\n\t\t})\r\n\r\n\t\tif (!d) return\r\n\r\n\t\tsuccess({\r\n\t\t\ttype: 'normal',\r\n\t\t\tclass: 'success',\r\n\t\t\ttag: '成功',\r\n\t\t\tcontent: d\r\n\t\t})\r\n\t},\r\n\tcli: (success, failed) => {\r\n\t\tsuccess({\r\n\t\t\ttype: 'normal',\r\n\t\t\tclass: 'warning',\r\n\t\t\ttag: '警醒',\r\n\t\t\tcontent: '正在执行安装中,时间可能需要几分钟,如果一直未响应,请刷新页面重试命令.'\r\n\t\t})\r\n\t},\r\n\r\n\tcmd: async (success, failed, str) => {\r\n\t\tif (LogStore.ws) {\r\n\t\t\tisExecIng.value = true\r\n\t\t\tLogClient = success\r\n\t\t\tLogStore.ws.send(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tevent: 'cmd',\r\n\t\t\t\t\tcommand: str\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t} else {\r\n\t\t\tisExecIng.value = false\r\n\t\t\tLogClient = undefined\r\n\t\t\tfailed('未连接')\r\n\t\t}\r\n\t}\r\n}\r\nfunction addDivLog(str, color = '#FFFFFF') {\r\n\tconst div = lodom.value\r\n\tconst node = document.createElement('div')\r\n\tnode.innerHTML = str\r\n\tnode.style = `color:${color};font-size:14px;`\r\n\tdiv.append(node)\r\n\t// node.scrollTop\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.bloger {\r\n\t// width: 400px;\r\n\t// height: 300px;\r\n\t// position: fixed;\r\n\t// right: 0;\r\n\t// top: 60px;\r\n}\r\n</style>\r\n","import script from \"./Loger.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./Loger.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./Loger.vue?vue&type=style&index=0&id=250b236a&scoped=true&lang=less\"\n\nimport exportComponent from \"D:\\\\myapp\\\\tmui3.0\\\\clidomian\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-250b236a\"]])\n\nexport default __exports__","import { defineStore } from 'pinia'\r\nlet tokenNow = localStorage.getItem(\"token\") || \"\"\r\nlet projects = localStorage.getItem(\"project\") || \"\"\r\nif (projects) {\r\n projects = JSON.parse(projects)\r\n}\r\nexport const useAccount = defineStore('user', {\r\n state: () => {\r\n return {\r\n token: tokenNow,\r\n menuKeys: ['xiangmu'],\r\n //当前的项目信息\r\n projectPath: {\r\n id: \"\",\r\n path: \"\",\r\n createTime: \"\",\r\n name: \"\",\r\n type: \"cli\",\r\n lastRunTime: \"\",\r\n osName: \"\",\r\n },\r\n projects: projects,\r\n user: {\r\n admin: null,\r\n ask: null,\r\n black: null,\r\n jifen: null,\r\n loginTime: null,\r\n loginip: null,\r\n nicename: null,\r\n openid: null,\r\n phone: null,\r\n sex: null,\r\n timestart: null,\r\n tmzdy_tmuiAccountID: null,\r\n tourl: null,\r\n upload: null,\r\n vip: null,\r\n }\r\n }\r\n },\r\n actions: {\r\n login(state, { token }) {\r\n state.token = token\r\n localStorage.setItem(\"token\", token)\r\n },\r\n setUserInfo(state, { user }) {\r\n state.user = { ...state.user, ...user }\r\n },\r\n loginOut(state) {\r\n state.token = \"\";\r\n localStorage.removeItem(\"token\")\r\n },\r\n removeProject(id){\r\n let index = this.projects.findIndex(el=>el.id==id)\r\n if(index>-1){\r\n this.projects.splice(index,1)\r\n localStorage.setItem('project',JSON.stringify(this.projects))\r\n }\r\n }\r\n },\r\n})","<template>\r\n\t<div class=\"header\">\r\n\t\t<a-menu\r\n\t\t\t@menu-item-click=\"changeKeys\"\r\n\t\t\tv-model:selected-keys=\"store.menuKeys\"\r\n\t\t\tclass=\"headerMenu\"\r\n\t\t\ttheme=\"dark\"\r\n\t\t\t:default-open-keys=\"store.menuKeys\"\r\n\t\t\t:default-selected-keys=\"store.menuKeys\"\r\n\t\t>\r\n\t\t\t<a-menu-item key=\"xiangmu\">\r\n\t\t\t\t<template #icon><icon-apps></icon-apps></template>\r\n\t\t\t\t项目管理\r\n\t\t\t</a-menu-item>\r\n\t\t\t<a-menu-item key=\"update\">\r\n\t\t\t\t<template #icon><icon-apps></icon-apps></template>\r\n\t\t\t\t更新计划\r\n\t\t\t</a-menu-item>\r\n\t\t\t<!-- <a-sub-menu key=\"moban\">\r\n\t\t\t\t<template #icon><icon-apps></icon-apps></template>\r\n\t\t\t\t<template #title>模板管理</template>\r\n\t\t\t\t<a-menu-item key=\"moban_pingtai\">平台模板</a-menu-item>\r\n\t\t\t\t<a-menu-item key=\"moban_mydownload\">我下载的</a-menu-item>\r\n\t\t\t</a-sub-menu>\r\n\t\t\t<a-sub-menu key=\"userinfo\">\r\n\t\t\t\t<template #icon><icon-apps></icon-apps></template>\r\n\t\t\t\t<template #title>个人中心</template>\r\n\t\t\t\t<a-menu-item key=\"userinfo_info\">个人信息</a-menu-item>\r\n\t\t\t\t<a-menu-item key=\"userinfo_jifen\">积分记录</a-menu-item>\r\n\t\t\t</a-sub-menu> -->\r\n\t\t\t<a-menu-item key=\"zhanzhu\" >\r\n\t\t\t\t\r\n\t\t\t\t<template #icon><icon-apps></icon-apps></template>\r\n\t\t\t\t赞助作者\r\n\t\t\t</a-menu-item>\r\n\t\t\t<a href=\"https://tmui.design\" target=\"_blank\">\r\n\t\t\t\t<a-menu-item key=\"zhanzhu\" style=\"color: greenyellow;\">\r\n\t\t\t\t\t<template #icon><icon-link></icon-link></template>\r\n\t\t\t\t\t3.2.x文档(Vue3 TS 维护)\r\n\t\t\t\t</a-menu-item>\r\n\t\t\t</a>\r\n\t\t\t<a href=\"https://xui.tmui.design\" target=\"_blank\">\r\n\t\t\t\t<a-menu-item key=\"zhanzhu\" style=\"color: greenyellow;\">\r\n\t\t\t\t\t<template #icon><icon-link></icon-link></template>\r\n\t\t\t\t\t4x文档(UniAppx UTS 维护)\r\n\t\t\t\t</a-menu-item>\r\n\t\t\t</a>\r\n\t\t\t<a href=\"https://tmui.tmui.design\" target=\"_blank\">\r\n\t\t\t\t<a-menu-item key=\"zhanzhu\" style=\"color: red\" >\r\n\t\t\t\t\t<template #icon><icon-link></icon-link></template>\r\n\t\t\t\t\t3.1.x文档(Nvue VUE3 暂停维护)\r\n\t\t\t\t</a-menu-item>\r\n\t\t\t</a>\r\n\t\t\t<a href=\"https://jx2d.cn\" target=\"_blank\">\r\n\t\t\t\t<a-menu-item key=\"zhanzhu\" style=\"color: red\" >\r\n\t\t\t\t\t<template #icon><icon-link></icon-link></template>\r\n\t\t\t\t\t2.x文档(vue2 JS 暂停维护)\r\n\t\t\t\t</a-menu-item>\r\n\t\t\t</a>\r\n\t\t\t\r\n\t\t</a-menu>\r\n\t</div>\r\n</template>\r\n\r\n<script setup>\r\nimport { useAccount } from '@/store/user'\r\nconst store = useAccount()\r\n\r\nfunction changeKeys(keys) {\r\n\tstore.menuKeys = [keys]\r\n}\r\n</script>\r\n\r\n<style>\r\n/* .arco-menu-item,\r\n.arco-menu-inline-header {\r\n background-color: #000 !important;\r\n color: #fff;\r\n}\r\n\r\n.arco-menu-item.arco-menu-selected {\r\n color: #395aff !important;\r\n} */\r\n</style>\r\n<style scoped lang=\"less\">\r\n.header,\r\n.headerMenu {\r\n\t// background: rgb(36, 76, 255);\r\n}\r\n</style>\r\n","import script from \"./MenuView.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./MenuView.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./MenuView.vue?vue&type=style&index=0&id=779a5d22&lang=css\"\nimport \"./MenuView.vue?vue&type=style&index=1&id=779a5d22&scoped=true&lang=less\"\n\nimport exportComponent from \"D:\\\\myapp\\\\tmui3.0\\\\clidomian\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-779a5d22\"]])\n\nexport default __exports__","<template>\r\n\t<div id=\"appbody\">\r\n\t\t<a-layout class=\"appbody\">\r\n\t\t\t<a-layout-header>\r\n\t\t\t\t<router-view name=\"header\" />\r\n\t\t\t</a-layout-header>\r\n\t\t\t<a-layout>\r\n\t\t\t\t<a-alert title=\"你丢失了网络,请检查网络连接情况!\" type=\"error\" v-if=\"!Online\"></a-alert>\r\n\t\t\t\t<a-layout-sider theme=\"dark\" style=\"width: 290px;\">\r\n\t\t\t\t\t<MenuView />\r\n\t\t\t\t</a-layout-sider>\r\n\t\t\t\t<a-layout-content style=\"background-color: #fafafa\">\r\n\t\t\t\t\t<router-view name=\"body\" />\r\n\t\t\t\t</a-layout-content>\r\n\t\t\t</a-layout>\r\n\r\n\t\t\t<a-layout-footer>\r\n\t\t\t\t<router-view name=\"footer\" />\r\n\t\t\t</a-layout-footer>\r\n\t\t</a-layout>\r\n\t\t<Loger />\r\n\t</div>\r\n</template>\r\n<script setup>\r\nimport { useOnline } from '@vueuse/core'\r\nimport Loger from './components/Loger.vue'\r\nimport MenuView from './components/MenuView.vue'\r\nimport { getCurrentInstance, reactive, watch } from 'vue'\r\nimport { useWebSocket } from '@vueuse/core'\r\nimport { useLog } from './store/log'\r\nimport { msgChuli } from './libs/msgChulis'\r\n\r\nconst LogStore = useLog()\r\nconst proxyGlobal = getCurrentInstance().appContext.config.globalProperties\r\nconst Online = useOnline()\r\nlet tid\r\nvar client\r\nwscont()\r\nfunction wscont() {\r\n\tconst { ws, status, data, send, close, open } = useWebSocket('ws://localhost:6169', {\r\n\t\tautoReconnect: true\r\n\t})\r\n\r\n\tconst wsclient = reactive(ws.value)\r\n\tws.value.onerror = (ev) => {\r\n\t\t// LogStore.logMsg ={\r\n\t\t// \ttype: 'nomal',\r\n\t\t// \tclass: 'error',\r\n\t\t// \ttag: '连接丢失',\r\n\t\t// \tcontent: '尝试重新中...'\r\n\t\t// }\r\n\t\t// LogStore.localhostIng = false;\r\n\t\t// LogStore.ws = undefined\r\n\t}\r\n\tws.value.onopen = () => {\r\n\t\tclearInterval(tid)\r\n\t\tLogStore.logMsg = {\r\n\t\t\ttype: 'info',\r\n\t\t\twscontend: '',\r\n\t\t\tmsg: {\r\n\t\t\t\ttype: 'nomal',\r\n\t\t\t\tclass: 'success',\r\n\t\t\t\ttag: '成功',\r\n\t\t\t\tcontent: '已与tmui服务连接成功,如果显示失败可以尝试刷新页面,或者关掉命令工具,重启应用.'\r\n\t\t\t}\r\n\t\t}\r\n\t\tLogStore.localhostIng = true\r\n\t\tLogStore.ws = ws.value\r\n\t}\r\n\tws.value.onclose = (ev) => {\r\n\t\tLogStore.logMsg = {\r\n\t\t\ttype: 'info',\r\n\t\t\twscontend: '',\r\n\t\t\tmsg: {\r\n\t\t\t\ttype: 'nomal',\r\n\t\t\t\tclass: 'error',\r\n\t\t\t\ttag: '连接丢失',\r\n\t\t\t\tcontent: '尝试重连中...'\r\n\t\t\t}\r\n\t\t}\r\n\t\tLogStore.localhostIng = false\r\n\t\tLogStore.ws = undefined\r\n\t\tclearInterval(tid)\r\n\t\t// tid = setInterval(() => {\r\n\t\t// \twscont()\r\n\t\t// }, 1000)\r\n\t}\r\n\r\n\twatch(\r\n\t\tdata,\r\n\t\t() => {\r\n\t\t\ttry {\r\n\t\t\t\tlet msg = JSON.parse(data.value)\r\n\t\t\t\tLogStore.logMsg = {\r\n\t\t\t\t\ttype: 'ws',\r\n\t\t\t\t\twscontend: msg,\r\n\t\t\t\t\tmsg: { content: '' }\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\t//TODO handle the exception\r\n\t\t\t}\r\n\t\t},\r\n\t\t{\r\n\t\t\tdeep: true\r\n\t\t}\r\n\t)\r\n}\r\n</script>\r\n<style>\r\nhtml,\r\nbody,\r\n* {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.appbody {\r\n\tmin-height: 100vh;\r\n}\r\n\r\n.arco-layout-content {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n.arco-layout-sider {\r\n\tbackground: #000724 !important;\r\n}\r\n.arco-menu-dark,\r\n.arco-menu-dark .arco-menu-inline-header {\r\n\tbackground: transparent !important;\r\n}\r\n.arco-menu-dark .arco-menu-item,\r\n.arco-menu-dark .arco-menu-group-title,\r\n.arco-menu-dark .arco-menu-pop-header,\r\n.arco-menu-dark .arco-menu-inline-header {\r\n\tbackground: transparent !important;\r\n}\r\n</style>\r\n","import script from \"./App.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./App.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=35ca569c&lang=css\"\n\nconst __exports__ = script;\n\nexport default __exports__","export const util = {\r\n\tuuid(len = 24, radix) {\r\n\t\tvar chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\r\n\t\tvar uuid = [],\r\n\t\t\ti;\r\n\t\tradix = radix || chars.length;\r\n\t\tif (len) {\r\n\t\t\t// Compact form\r\n\t\t\tfor (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];\r\n\t\t} else {\r\n\t\t\t// rfc4122, version 4 form\r\n\t\t\tvar r;\r\n\t\t\t// rfc4122 requires these characters\r\n\t\t\tuuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\r\n\t\t\tuuid[14] = '4';\r\n\t\t\tfor (i = 0; i < 36; i++) {\r\n\t\t\t\tif (!uuid[i]) {\r\n\t\t\t\t\tr = 0 | Math.random() * 16;\r\n\t\t\t\t\tuuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn uuid.join('');\r\n\t},\r\n\tgetClass(id) {\r\n\t\tlet el = document.querySelector('#' + id)\r\n\t\tlet classNames = el.classList;\r\n\t\treturn classNames\r\n\t},\r\n\taddClass(id, classname) {\r\n\t\tlet el = document.querySelector('#' + id)\r\n\t\tlet classNames = el.classList;\r\n\t\tlet newCLass = new Set(classNames)\r\n\t\tnewCLass.add(classname)\r\n\r\n\t\tel.className = [...newCLass].join(\" \")\r\n\t\treturn util\r\n\t},\r\n\tremoveClass(id, classname) {\r\n\t\tlet el = document.querySelector('#' + id)\r\n\t\tlet classNames = el.classList;\r\n\t\tlet newCLass = new Set(classNames)\r\n\t\tnewCLass.delete(classname)\r\n\t\tel.className = [...newCLass].join(\" \")\r\n\t\treturn util\r\n\t},\r\n\ttoogleClass(id, classname) {\r\n\t\tlet el = document.querySelector('#' + id)\r\n\t\tlet classNames = el.classList;\r\n\t\tlet newCLass = new Set(classNames)\r\n\t\tif (newCLass.has(classname)) {\r\n\t\t\tnewCLass.delete(classname)\r\n\t\t} else {\r\n\t\t\tnewCLass.add(classname)\r\n\t\t}\r\n\t\tel.className = [...newCLass].join(\" \")\r\n\t\treturn util\r\n\t},\r\n\tgetElementAttr(el, name) {\r\n\t\tlet ele = null;\r\n\t\tif (typeof el == 'string') {\r\n\t\t\tele = document.querySelector('#' + el)\r\n\t\t} else {\r\n\t\t\tele = el;\r\n\t\t}\r\n\t\tlet data = ele.getAttribute(name);\r\n\t\treturn data\r\n\t},\r\n\tcreateDiv() { },\r\n\tisWinOs() {\r\n\t\tvar agent = navigator.userAgent.toLowerCase();\r\n\t\tvar isMac = /macintosh|mac os x/i.test(navigator.userAgent);\r\n\t\tif (agent.indexOf(\"win32\") >= 0 || agent.indexOf(\"wow32\") >= 0) {\r\n\t\t\treturn true\r\n\t\t}\r\n\t\tif (agent.indexOf(\"win64\") >= 0 || agent.indexOf(\"wow64\") >= 0) {\r\n\t\t\treturn true\r\n\t\t}\r\n\t\tif (isMac) {\r\n\t\t\t//your code\r\n\t\t\treturn false\r\n\t\t}\r\n\t},\r\n\t//返回当前系统的分割符路径\\ /\r\n\tgetOsSep() {\r\n\t\tif (this.isWinOs()) return '\\\\'\r\n\t\treturn '\\/'\r\n\t},\r\n\tformatSeconds(seconds) {\r\n\t\tconst day = Math.floor(seconds / 86400);\r\n\t\tconst hour = Math.floor((seconds % 86400) / 3600);\r\n\t\tconst minute = Math.floor(((seconds % 86400) % 3600) / 60);\r\n\t\tconst second = ((seconds % 86400) % 3600) % 60;\r\n\t\treturn `${day} 天 ${hour} 小时 ${minute} 分钟 ${second} 秒`;\r\n\t},\r\n\r\n}","<template>\r\n\t<a-spin :loading=\"uploading\" style=\"height: 100%;width:100%\">\r\n\t\t<div v-if=\"!isEmpty\" style=\"height: 100%;position:relative;width:100%;\">\r\n\t\t\t<div class=\"removeClse\">\r\n\t\t\t\t<a-button @click=\"removeClose\" style=\"background:rgba(255,0,0,0.5)\" type=\"primary\" shape=\"circle\">\r\n\t\t\t\t\t<icon-close />\r\n\t\t\t\t</a-button>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"header \" :class=\"[props.data.uvue ? 'onux' : 'on']\">\r\n\r\n\t\t\t\t<div v-if=\"!runApp\"\r\n\t\t\t\t\tstyle=\"display: flex; flex-flow: column; justify-content: center; align-items: center\">\r\n\r\n\t\t\t\t\t<a-space>\r\n\t\t\t\t\t\t<a-dropdown v-if=\"props.data.type == 'cli'\" @select=\"devProject($event, 'dev')\">\r\n\t\t\t\t\t\t\t<!-- @click=\"devProject\" -->\r\n\t\t\t\t\t\t\t<a-button shape=\"round\" type=\"primary\">运行</a-button>\r\n\t\t\t\t\t\t\t<template #content>\r\n\t\t\t\t\t\t\t\t<a-doption :value=\"`${key}`\" v-for=\"(value, key, index) in devCmd\" :key=\"index\">{{ key\r\n\t\t\t\t\t\t\t\t\t}}</a-doption>\r\n\t\t\t\t\t\t\t</template>\r\n\t\t\t\t\t\t</a-dropdown>\r\n\t\t\t\t\t\t<a-dropdown v-if=\"props.data.type == 'cli'\" @select=\"devProject($event, 'build')\">\r\n\t\t\t\t\t\t\t<a-button shape=\"round\" type=\"primary\" status=\"success\">编译</a-button>\r\n\t\t\t\t\t\t\t<template #content>\r\n\t\t\t\t\t\t\t\t<a-doption :value=\"`${key}`\" v-for=\"(value, key, index) in buildCmd\" :key=\"index\">{{ key\r\n\t\t\t\t\t\t\t\t\t}}</a-doption>\r\n\t\t\t\t\t\t\t</template>\r\n\t\t\t\t\t\t</a-dropdown>\r\n\t\t\t\t\t\t<a-button @click=\"checkProjectInfo\" shape=\"round\" status=\"warning\">刷新项目</a-button>\r\n\t\t\t\t\t</a-space>\r\n\r\n\r\n\t\t\t\t\t<a-space style=\"margin-top: 10px\">\r\n\t\t\t\t\t\t<a-button @click=\"checkVer\" shape=\"round\" v-if=\"!tmuiInfo.tmui&& !tmuiInfo.unix\">安装TMUI</a-button>\r\n\t\t\t\t\t\t<a-button @click=\"checkVer\" shape=\"round\"\r\n\t\t\t\t\t\t\tv-if=\"tmuiInfo.tmui && !tmuiInfo.unix\">更新TMUI</a-button>\r\n\t\t\t\t\t\t<a-button @click=\"seeQunMa\" shape=\"round\" v-if=\"tmuiInfo.unix\">无法更新TMUI4.0x,查看群码</a-button>\r\n\t\t\t\t\t\t<a-button @click=\"checkVer\" shape=\"round\" v-if=\"props.data.type == 'cli'\">更新UniApp\r\n\t\t\t\t\t\t\tSDK</a-button>\r\n\t\t\t\t\t</a-space>\r\n\r\n\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div class=\"headerRunMasker\" v-if=\"runApp\" style=\"\">\r\n\t\t\t\t\t<div v-if=\"runType == 'dev' && runInfo.pid\">\r\n\t\t\t\t\t\t<!-- <div>访问地址</div> -->\r\n\t\t\t\t\t\t<a-descriptions theme=\"dark\" bordered layout=\"inline-horizontal\" :column=\"1\"\r\n\t\t\t\t\t\t\t:label-style=\"{ color: '#fff' }\" :value-style=\"{ color: '#1ef31e' }\" size=\"mini\">\r\n\t\t\t\t\t\t\t<a-descriptions-item label=\"运行时间\">\r\n\t\t\t\t\t\t\t\t{{ runTime }}\r\n\t\t\t\t\t\t\t</a-descriptions-item>\r\n\t\t\t\t\t\t\t<a-descriptions-item label=\"进程标识\">\r\n\t\t\t\t\t\t\t\t{{ runInfo.pid }}\r\n\t\t\t\t\t\t\t</a-descriptions-item>\r\n\t\t\t\t\t\t\t<a-descriptions-item label=\"访问地址\" v-for=\"(item, index) in runInfo.host\" :key=\"index\">\r\n\t\t\t\t\t\t\t\t<a :style=\"{ color: '#1ef31e' }\" :href=\"item\" target=\"_blank\">{{ item }}</a>\r\n\t\t\t\t\t\t\t</a-descriptions-item>\r\n\t\t\t\t\t\t</a-descriptions>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div style=\"padding-top: 14px\">\r\n\t\t\t\t\t\t<div v-if=\"runType == 'build'\"\r\n\t\t\t\t\t\t\tstyle=\"margin-bottom: 14px; font-size: 16px; font-weight: bold; color: white\">\r\n\t\t\t\t\t\t\t编译耗时:{{ counter }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<a-button style=\"width: 300px\" @click=\"closeApp\" :loading=\"buildApping\" v-if=\"runType == 'dev'\"\r\n\t\t\t\t\t\t\tshape=\"round\" type=\"primary\" status=\"success\">停止运行</a-button>\r\n\t\t\t\t\t\t<a-button :disabled=\"true\" :loading=\"buildApping\" v-if=\"runType == 'build'\" shape=\"round\"\r\n\t\t\t\t\t\t\tstatus=\"success\">编译中,勿关闭应用</a-button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div style=\"color: white; margin: 16px 16px; position: absolute; left: 0; top: 0;display:flex;flex-direction: column;gap:8px\" >\r\n\t\t\t\t\t<div style=\"font-size: 28px\">{{ props.data.name }}</div>\r\n\t\t\t\t\t<div style=\"font-size: 12px\">{{ props.data.createTime }}</div>\r\n\t\t\t\t\t<div style=\"font-size: 12px\">{{ props.data.osName }}</div>\r\n\t\t\t\t\t<a-divider margin=\"1px\" style=\"opacity: 0.4;\" />\r\n\t\t\t\t\t<div style=\"font-size: 12px;gap:10px;display:flex;\">\r\n\t\t\t\t\t\t<a-tag color=\"red\">{{ props.data.type }}</a-tag>\r\n\t\t\t\t\t\t<a-tag :color=\"props.data.uvue ? '#f53f3f' : '#00b42a'\">{{ props.data.uvue ? 'UniAppX项目' :\r\n\t\t\t\t\t\t\t'UniApp项目'\r\n\t\t\t\t\t\t\t}}</a-tag>\r\n\t\t\t\t\t\t<a-tag v-if=\"tmuiInfo.tmui\" :color=\"props.data.uvue ? '#f53f3f' : '#00b42a'\">{{\r\n\t\t\t\t\t\t\ttmuiInfo.unix ? 'TMUI4x:' : 'TMUI3x:' }}\r\n\t\t\t\t\t\t\t{{ tmuiInfo.tmui }}</a-tag>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div style=\"font-size: 12px;\">运行状态:{{ runApp ? '运行中:' + runTime : '未运行' }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div\r\n\t\t\t\t\tstyle=\"font-size: 12px; color: white; margin: 16px 16px; position: absolute; right: 0; bottom: 0; text-align: right;display:flex;flex-direction: column;gap:4px\">\r\n\t\t\t\t\t<div>项目名称:{{ tmuiInfo.name || '-' }}</div>\r\n\t\t\t\t\t<div>APPID:{{ tmuiInfo.appid || '-' }}</div>\r\n\t\t\t\t\t<div>VER:{{ tmuiInfo.versionName || '-' }}</div>\r\n\t\t\t\t\t<a-divider margin=\"1px\" style=\"opacity: 0.4;\" />\r\n\t\t\t\t\t<div v-if=\"!tmuiInfo.tmui\">非TMUI项目</div>\r\n\t\t\t\t\t<div v-if=\"tmuiInfo.tmui\">{{ tmuiInfo.unix ? 'TMUI4x:' : 'TMUI3:' }} {{ tmuiInfo.tmui }}</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\r\n\r\n\t\t\t<a-modal width=\"650px\" :visible=\"shwotmuimodal\" :ok-loading=\"loading\"\r\n\t\t\t\t@cancel=\"shwotmuimodal = loading ? true : false\" @ok=\"updateTmui\" ok-text=\"更新/下载\">\r\n\t\t\t\t<template #title> 更新/下载项目 </template>\r\n\t\t\t\t<a-alert style=\"margin-bottom: 16px;\" :type=\"isJianRongVerTMui ? 'success' : 'error'\">{{\r\n\t\t\t\t\tisJianRongVerTMui ? \"可以更新/下载当前版本,适配项目版本\" : \"当前更新/下载的版本不兼容你所在项目的版本!!!\" }}</a-alert>\r\n\t\t\t\t<a-form :model=\"newProjectForm\">\r\n\r\n\t\t\t\t\t<a-form-item field=\"ver\" tooltip=\"根据类型切换项目\" :label=\"`TMUI3版本`\">\r\n\t\t\t\t\t\t<a-select :loading=\"loading\" v-model=\"newProjectForm.ver\" placeholder=\"选择TMUI版本\">\r\n\t\t\t\t\t\t\t<a-option v-for=\"(item, index) in newProjectTmuiVers\" :key=\"index\" :value=\"item\">\r\n\t\t\t\t\t\t\t\t{{ item }}{{ parseFloat(item.replace('.', '')) >= 32 ? '(全新对标4.0x vue版本不兼容3.1.x)' : '(nvue版本)' }}\r\n\t\t\t\t\t\t\t</a-option>\r\n\t\t\t\t\t\t</a-select>\r\n\t\t\t\t\t</a-form-item>\r\n\t\t\t\t\t<a-form-item v-if=\"props.data.type == 'cli'\" field=\"uniappver\" tooltip=\"2.0开头是vue2,3.0开头是vue3\"\r\n\t\t\t\t\t\tlabel=\"SDK版本\">\r\n\t\t\t\t\t\t<a-select :loading=\"loading\" v-model=\"newProjectForm.uniappver\" placeholder=\"选择UniApp SDK版本\">\r\n\t\t\t\t\t\t\t<a-option v-for=\"(item, index) in uniappVerList\" :key=\"index\" :value=\"item\">\r\n\t\t\t\t\t\t\t\t{{ item }} -\r\n\t\t\t\t\t\t\t\t<a-tag v-if=\"item.length == 22\" color=\"#00b42a\">正式版</a-tag>\r\n\t\t\t\t\t\t\t\t<a-tag v-else color=\"#f53f3f\">开发版</a-tag>\r\n\t\t\t\t\t\t\t</a-option>\r\n\t\t\t\t\t\t</a-select>\r\n\t\t\t\t\t</a-form-item>\r\n\r\n\t\t\t\t\t<!-- <a-button :loading=\"confirmLoading\" @click=\"checkUniAppVer\">查询版本</a-button> -->\r\n\t\t\t\t</a-form>\r\n\t\t\t\t<template #footer>\r\n\t\t\t\t\t<a-button :loading=\"loading\" :disabled=\"!isJianRongVerTMui\" type=\"primary\"\r\n\t\t\t\t\t\t@click=\"updateTmui\">更新/下载</a-button>\r\n\r\n\t\t\t\t</template>\r\n\t\t\t</a-modal>\r\n\t\t</div>\r\n\t\t<div @click=\"emits('click')\" v-if=\"isEmpty\" class=\"header\">\r\n\t\t\t<div><icon-plus :size=\"42\" /></div>\r\n\t\t\t<div class=\"etitle\">导入/创建项目</div>\r\n\t\t</div>\r\n\t</a-spin>\r\n\r\n</template>\r\n\r\n<script setup>\r\nimport { useLog } from '@/store/log'\r\nimport { useAccount } from '@/store/user'\r\n\r\nimport { util } from '@/libs/util'\r\nimport { computed, ref, getCurrentInstance, watch, watchEffect, h } from 'vue'\r\nimport { useInterval } from '@vueuse/core'\r\nimport { globalCheckTmuiVer, globalCheckUniAppVer } from '@/fetch'\r\nimport { title } from 'process'\r\nconst proxyGlobal = getCurrentInstance().appContext.config.globalProperties\r\nconst { counter, reset, pause, resume } = useInterval(1000, { controls: true })\r\nconst store = useLog()\r\nconst user = useAccount()\r\n\r\nconst loading = ref(false)\r\nconst uploading = ref(false)\r\nconst emits = defineEmits(['click','remove'])\r\nconst runApp = ref(false)\r\nconst buildApping = ref(false)\r\nconst shwotmuimodal = ref(false)\r\n\r\nconst runInfo = ref({\r\n\tpid: 0,\r\n\tid: '',\r\n\thost: []\r\n})\r\nconst tmuiInfo = ref({\r\n\tname: '',\r\n\tappid: '',\r\n\tversionName: '',\r\n\ttmui: '',\r\n\tid: '',\r\n\tscripts: null\r\n})\r\nconst newProjectForm = ref({\r\n\tver: \"\",\r\n\tuniappver: \"\"\r\n})\r\nconst newProjectTmuiVers = ref([])\r\nconst uniappVerList = ref([])\r\n\r\nconst devCmd = {}\r\nconst buildCmd = {}\r\nconst runType = ref('dev')\r\n\r\nconst runTime = computed(() => {\r\n\treturn util.formatSeconds(counter.value)\r\n})\r\nconst props = defineProps({\r\n\tdata: {\r\n\t\ttype: Object,\r\n\t\tdefault: () => null\r\n\t}\r\n})\r\nconst isEmpty = computed(() => !props.data)\r\nconst isJianRongVerTMui = computed(() => {\r\n\r\n\tif (!newProjectForm.value.ver || !tmuiInfo.value.tmui) return true;\r\n\r\n\tlet oldver = parseFloat(tmuiInfo.value.tmui.replace('.', ''))\r\n\tlet newver = parseFloat(newProjectForm.value.ver.replace('.', ''))\r\n\treturn oldver <= newver\r\n})\r\n\r\nwatch(\r\n\t() => store.logMsg,\r\n\t() => {\r\n\t\tconst wscontent = store.logMsg?.wscontend\r\n\r\n\t\tif (!wscontent || !props.data) return\r\n\t\tif (wscontent.event == '17') {\r\n\t\t\tconst msg = wscontent.data\r\n\t\t\tif (msg.id == props.data.id) {\r\n\t\t\t\ttmuiInfo.value = msg\r\n\r\n\t\t\t\tif (wscontent.run[0]) {\r\n\t\t\t\t\trunInfo.value.pid = wscontent.run[0].pid\r\n\t\t\t\t\trunInfo.value.id = props.data.id\r\n\t\t\t\t\trunInfo.value.host = wscontent.run[0].host\r\n\t\t\t\t\trunApp.value = true\r\n\t\t\t\t\tbuildApping.value = false\r\n\t\t\t\t\trunType.value = wscontent.run[0].runType\r\n\t\t\t\t}\r\n\t\t\t\tif (msg.scripts && typeof msg.scripts) {\r\n\t\t\t\t\tfor (const key in msg.scripts) {\r\n\t\t\t\t\t\tif (key.indexOf('dev') > -1) {\r\n\t\t\t\t\t\t\tdevCmd[key] = msg.scripts[key]\r\n\t\t\t\t\t\t} else if (key.indexOf('build') > -1) {\r\n\t\t\t\t\t\t\tbuildCmd[key] = msg.scripts[key]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (wscontent.event == '1') {\r\n\t\t\tconst msg = wscontent.data\r\n\t\t\tif (msg.id == props.data.id) {\r\n\t\t\t\trunInfo.value.pid = msg.pid\r\n\t\t\t\trunInfo.value.id = props.data.id\r\n\t\t\t\trunInfo.value.host.push(msg.msg)\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (wscontent.event == 'ready') {\r\n\t\t\tconst msg = wscontent.data\r\n\t\t\tif (msg.id == props.data.id) {\r\n\t\t\t\tbuildApping.value = false\r\n\t\t\t\t// 向服务器保存运行中的项目信息。\r\n\t\t\t\tif (props.data && store.ws) {\r\n\t\t\t\t\tstore.ws.send(\r\n\t\t\t\t\t\tJSON.stringify({\r\n\t\t\t\t\t\t\tevent: 'saveRunInfo',\r\n\t\t\t\t\t\t\tcommand: {\r\n\t\t\t\t\t\t\t\t...tmuiInfo.value,\r\n\t\t\t\t\t\t\t\t...runInfo.value,\r\n\t\t\t\t\t\t\t\tid: props.data.id,\r\n\t\t\t\t\t\t\t\trunType: runType.value\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (wscontent.event == 'error') {\r\n\t\t\tconst msg = wscontent.data\r\n\t\t\tpause()\r\n\t\t\treset()\r\n\r\n\t\t\tif (msg.id == props.data.id) {\r\n\t\t\t\tbuildApping.value = false\r\n\t\t\t\tproxyGlobal.$message.error({ content: '运行错误,重试,并查看日志' })\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (wscontent.event == 'buildSucess') {\r\n\t\t\tconst msg = wscontent.data\r\n\t\t\tpause()\r\n\t\t\treset()\r\n\t\t\tif (msg.id == props.data.id) {\r\n\t\t\t\tbuildApping.value = false\r\n\t\t\t\trunApp.value = false\r\n\t\t\t\tproxyGlobal.$message.success({ content: '编译完成' })\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (wscontent.event == '21' && wscontent?.flag == 'end') {\r\n\t\t\tuploading.value = false;\r\n\t\t\tcheckProjectInfo()\r\n\t\t}\r\n\t},\r\n\t{ deep: true }\r\n)\r\n\r\nwatchEffect(() => {\r\n\tif (props.data && store.ws) {\r\n\t\tcheckProjectInfo()\r\n\t}\r\n})\r\n/**运行或者 编译项目 */\r\nfunction devProject(command, type) {\r\n\tif (!props.data || !store.ws) return\r\n\trunApp.value = true\r\n\tbuildApping.value = true\r\n\trunType.value = type\r\n\treset()\r\n\tif (type == 'build') {\r\n\t\tstore.ws.send(\r\n\t\t\tJSON.stringify({\r\n\t\t\t\tevent: '3',\r\n\t\t\t\tcommand: {\r\n\t\t\t\t\tcommand: `npm run ` + command,\r\n\t\t\t\t\tdata: props.data\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t)\r\n\r\n\t\tstore.ws.send(\r\n\t\t\tJSON.stringify({\r\n\t\t\t\tevent: 'saveRunInfo',\r\n\t\t\t\tcommand: {\r\n\t\t\t\t\t...tmuiInfo.value,\r\n\t\t\t\t\t...runInfo.value,\r\n\t\t\t\t\tid: props.data.id,\r\n\t\t\t\t\trunType: runType.value\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t)\r\n\t} else if (type == 'dev') {\r\n\t\tstore.ws.send(\r\n\t\t\tJSON.stringify({\r\n\t\t\t\tevent: '1',\r\n\t\t\t\tcommand: {\r\n\t\t\t\t\tcommand: `npm run ` + command,\r\n\t\t\t\t\tdata: props.data\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t)\r\n\t}\r\n}\r\n\r\nfunction closeApp() {\r\n\trunApp.value = false\r\n\tbuildApping.value = true\r\n\tstore.ws.send(\r\n\t\tJSON.stringify({\r\n\t\t\tevent: '2',\r\n\t\t\tcommand: runInfo.value.pid\r\n\t\t})\r\n\t)\r\n\trunInfo.value = {\r\n\t\tpid: 0,\r\n\t\tid: '',\r\n\t\thost: []\r\n\t}\r\n}\r\n\r\n/** 查询项目的基本信息 */\r\nfunction checkProjectInfo() {\r\n\tif (!store.ws || !props.data) return\r\n\r\n\tstore.ws.send(\r\n\t\tJSON.stringify({\r\n\t\t\tevent: '17',\r\n\t\t\tcommand: { id: props.data.id, path: props.data.path, type: props.data.type }\r\n\t\t})\r\n\t)\r\n}\r\n\r\nfunction seeQunMa() {\r\n\tproxyGlobal.$modal.confirm({\r\n\t\ttitle: \"加入微信群\",\r\n\t\twidth: '300px',\r\n\t\thideCancel: true,\r\n\t\tcontent: h('img', { src: 'https://cdn.tmui.design/public/design/weixinQR2.jpg?id=' + Math.random() })\r\n\t})\r\n}\r\nasync function checkVer() {\r\n\tif (!store.ws) {\r\n\t\tproxyGlobal.$message.error({ content: '未连接' })\r\n\t\treturn null\r\n\t}\r\n\tshwotmuimodal.value = true;\r\n\tloading.value = true;\r\n\tlet tmuilist = await globalCheckTmuiVer(props.data.uvue ? 'uniappx' : 'uniapp')\r\n\tnewProjectTmuiVers.value = tmuilist\r\n\tif (props.data.type == 'hbx') {\r\n\t\tloading.value = false;\r\n\t\treturn;\r\n\t}\r\n\tlet unilist = await globalCheckUniAppVer()\r\n\tuniappVerList.value = unilist.versions\r\n\tloading.value = false;\r\n}\r\n\r\nasync function updateTmui() {\r\n\tif (!newProjectForm.value.ver || (!newProjectForm.value.uniappver && props.data.type == 'cli')) {\r\n\t\tproxyGlobal.$notification.error({ title: \"请选择版本\" })\r\n\t\treturn;\r\n\t}\r\n\tproxyGlobal.$modal.confirm({\r\n\t\ttitle: \"注意\",\r\n\t\twidth: '300px',\r\n\t\tcontent: `更新tmui版本会删除原有的tmui目录,如果你更改过源码,请先备份,再更新?`,\r\n\t\tonOk() {\r\n\t\t\tuploading.value = true;\r\n\t\t\tshwotmuimodal.value = false;\r\n\t\t\tstore.ws.send(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tevent: '21',\r\n\t\t\t\t\tcommand: {\r\n\t\t\t\t\t\tpath: props.data.path,\r\n\t\t\t\t\t\ttype: props.data.type,\r\n\t\t\t\t\t\tuvue: props.data.uvue,\r\n\t\t\t\t\t\ttmui: newProjectForm.value.ver,\r\n\t\t\t\t\t\tuniappver: newProjectForm.value.uniappver\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t}\r\n\t})\r\n}\r\n\r\nfunction removeClose(){\r\n\tif(uploading.value||loading.value||runApp.value||buildApping.value) return;\r\n\tproxyGlobal.$modal.confirm({\r\n\t\ttitle: \"注意\",\r\n\t\twidth: '300px',\r\n\t\tcontent: `是关闭当前项目,不会删除你的本地文件,请放心,你还可以再次导入进来.`,\r\n\t\tonOk() {\r\n\t\t\tuser.removeProject(props.data.id)\r\n\t\t}\r\n\t})\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.removeClse{\r\n\tposition: absolute;\r\n\tz-index: 4;\r\n\tright: 10px;\r\n\ttop: 10px;\r\n}\r\n.header {\r\n\theight: 60px;\r\n\tdisplay: flex;\r\n\tflex-flow: column;\r\n\tjustify-content: center;\r\n\talign-items: center;\r\n\tbackground: #ffffff;\r\n\tcolor: rgb(0, 0, 0);\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tborder-radius: 10px;\r\n\toverflow: hidden;\r\n\tbox-shadow: 0 0 24px rgba(36, 76, 255, 0.1);\r\n\ttransition: all 0.3s;\r\n\tposition: relative;\r\n\r\n\t&:hover {\r\n\t\tcolor: #ffffff;\r\n\t\tcursor: pointer;\r\n\t\t// font-weight: bold;\r\n\t\tbackground: rgb(36, 76, 255);\r\n\t\tbox-shadow: 0 0 24px rgba(36, 76, 255, 0.4);\r\n\t}\r\n\r\n\t&.on {\r\n\t\tbackground: linear-gradient(45deg, #021406, #256133);\r\n\r\n\t\t&:hover {\r\n\t\t\tcursor: default;\r\n\t\t}\r\n\t}\r\n\r\n\t&.onux {\r\n\t\tbackground: linear-gradient(45deg, #1c0303, #6c2525);\r\n\r\n\t}\r\n\r\n\t.etitle {\r\n\t\tmargin-top: 12px;\r\n\t}\r\n}\r\n\r\n.headerRunMasker {\r\n\tfont-size: 12px;\r\n\tcolor: white;\r\n\tpadding: 0;\r\n\tmargin: 0;\r\n\tbackground: rgba(0, 12, 38, 0.1);\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tdisplay: flex;\r\n\tflex-flow: column;\r\n\tjustify-content: center;\r\n\talign-items: center;\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\tz-index: 5;\r\n\tbackdrop-filter: blur(3px);\r\n\r\n\ta {\r\n\t\tpadding: 10px 0;\r\n\t}\r\n}\r\n</style>\r\n","import script from \"./mobanCell.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./mobanCell.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./mobanCell.vue?vue&type=style&index=0&id=e821f0f4&scoped=true&lang=less\"\n\nimport exportComponent from \"D:\\\\myapp\\\\tmui3.0\\\\clidomian\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e821f0f4\"]])\n\nexport default __exports__","<template>\r\n\t<a-modal width=\"60vw\" :ok-text=\"okText\" :ok-loading=\"searchLoading\" v-model:visible=\"visible\" @ok=\"handleOk\"\r\n\t\t@cancel=\"handleCancel\" draggable>\r\n\t\t<template #title> 目录选择 </template>\r\n\t\t<div>\r\n\t\t\t<a-button-group>\r\n\t\t\t\t<a-button @click=\"changeUserDir(item)\" v-for=\"(item, index) in dirslstQuicker\" :key=\"index\">{{\r\n\t\t\t\t\titem.title\r\n\t\t\t\t}}</a-button>\r\n\t\t\t</a-button-group>\r\n\t\t</div>\r\n\t\t<div>\r\n\t\t\t<div style=\"display: flex !important\">\r\n\t\t\t\t<a-button :loading=\"searchLoading\" @click=\"prevDir\">\r\n\t\t\t\t\t<icon-left />\r\n\t\t\t\t</a-button>\r\n\t\t\t\t<a-input-search @pressEnter=\"search\" :loading=\"searchLoading\" @search=\"search\" v-model=\"rootDir\"\r\n\t\t\t\t\tbutton-text=\"查询目录\" search-button></a-input-search>\r\n\t\t\t</div>\r\n\t\t\t<div style=\"margin: 12px 0\">\r\n\r\n\t\t\t\t<div style=\"font-size: 12px;\">\r\n\r\n\t\t\t\t\t<a-alert v-if=\"projectType == 'cli' || projectType == 'hbx'\" type=\"success\"\r\n\t\t\t\t\t\tshow-icon>这是一个UNIAPP项目,你可以更新/下载[tmui]组件库</a-alert>\r\n\t\t\t\t\t\t<a-alert v-else \r\n\t\t\t\t\t\tshow-icon>可以在此创建项目目录,来创新一个新项目</a-alert>\r\n\t\t\t\t\t<!-- <a-alert v-if=\"projectType == 'warn'\" type=\"error\"\r\n\t\t\t\t\t\tshow-icon>这是一个非空目录,且不是一个uni项目,请谨慎操作,建议在空目录下操作。</a-alert>\r\n\t\t\t\t\t<a-alert v-if=\"projectType == 'empty'\" type=\"info\" show-icon>这是一个空目录,你可以在此创建项目</a-alert> -->\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<a-spin :loading=\"searchLoading\" style=\"width: 100%;\">\r\n\t\t\t\t<a-list size=\"small\" :max-height=\"450\" style=\"height: 450px;\">\r\n\t\t\t\t\t<template v-for=\"(item, index) in dir\" :key=\"index\">\r\n\t\t\t\t\t\t<a-list-item @click=\"nextDir(item)\" class=\"itemcell\" :class=\"[item.type]\"\r\n\t\t\t\t\t\t\t:style=\"{ color: item.type == 'dir' ? 'rgb(36, 76, 255)' : 'black' }\">\r\n\t\t\t\t\t\t\t<div style=\"font-size: 14px; font-weight: bold\">\r\n\t\t\t\t\t\t\t\t<icon-folder :size=\"16\" style=\"padding-right: 10px\" v-if=\"item.type == 'dir'\" />{{\r\n\t\t\t\t\t\t\t\t\titem.name }}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div style=\"font-size: 12px\">{{ item.parent }}</div>\r\n\t\t\t\t\t\t</a-list-item>\r\n\t\t\t\t\t</template>\r\n\t\t\t\t</a-list>\r\n\t\t\t</a-spin>\r\n\t\t</div>\r\n\t\t<template #footer>\r\n\t\t\t<a-space>\r\n\t\t\t\t<a-button :loading=\"searchLoading\" @click=\"visible = false\">取消操作</a-button>\r\n\t\t\t\t<a-button v-if=\"projectType == 'hbx' || projectType == 'cli'\" type=\"primary\" status=\"success\"\r\n\t\t\t\t\t:loading=\"searchLoading\" @click=\"save('save')\">导入当前UNIAPP项目</a-button>\r\n\t\t\t\t<a-button v-else type=\"primary\" :loading=\"searchLoading\" @click=\"save('create')\">在此创建项目</a-button>\r\n\t\t\t</a-space>\r\n\t\t</template>\r\n\t</a-modal>\r\n\r\n\t<a-modal width=\"650px\" :visible=\"showCreateFileDir\" :ok-loading=\"confirmLoading\"\r\n\t\t@cancel=\"showCreateFileDir = confirmLoading ? true : false\" @ok=\"createProject\" ok-text=\"创建tmui项目\">\r\n\t\t<template #title> 创建项目 </template>\r\n\t\t<a-alert type=\"success\">您将在目录:<span style=\"font-size: 11px;\">{{ rootDir }}</span>创建项目</a-alert>\r\n\t\t<a-form :model=\"newProjectForm\" style=\"margin-top: 20px;\">\r\n\t\t\t<a-form-item field=\"name\" tooltip=\"建议纯字母不要带特殊符号\" label=\"项目名称\">\r\n\t\t\t\t<a-input v-model=\"newProjectForm.name\" placeholder=\"请输入项目名称,不要有中文和特殊字符\"></a-input>\r\n\t\t\t</a-form-item>\r\n\t\t\t<a-form-item field=\"type\" tooltip=\"x项目是原生uvue uts,uniapp项目是正常的小程序,appvue项目\" label=\"项目类型\">\r\n\t\t\t\t<a-spin :loading=\"confirmLoading\">\r\n\t\t\t\t\t<a-radio-group @change=\"checkTmuiVer\" v-model=\"newProjectForm.type\"\r\n\t\t\t\t\t\t:options=\"[{ label: 'uniapp项目', value: 'uniapp' }, { label: 'uniappX项目', value: 'uniappx' }]\" />\r\n\t\t\t\t</a-spin>\r\n\t\t\t</a-form-item>\r\n\t\t\t\r\n\t\t\t<a-alert v-if=\"newProjectForm.type=='uniappx'\" type=\"error\">注意:X项目只是创建个空项目</a-alert>\r\n\t\t\t<a-form-item v-if=\"newProjectForm.type && newProjectForm.type != 'uniappx'\" field=\"ver\" tooltip=\"根据类型切换项目\"\r\n\t\t\t\t:label=\"`${newProjectForm.type == 'uniapp' ? 'TMUI3' : 'TMUI4'}版本`\">\r\n\t\t\t\t<a-select :loading=\"confirmLoading\" v-model=\"newProjectForm.ver\" placeholder=\"选择TMUI版本\">\r\n\t\t\t\t\t<a-option v-for=\"(item, index) in newProjectTmuiVers\" :key=\"index\" :value=\"item\">\r\n\t\t\t\t\t\t{{ item }}{{ parseFloat(item.replace('.', '')) >= 32 ? '(全新对标4.0x vue版本不兼容3.1.x)' : '(nvue版本)' }}\r\n\t\t\t\t\t</a-option>\r\n\t\t\t\t</a-select>\r\n\t\t\t</a-form-item>\r\n\t\t\t<a-form-item v-if=\"newProjectForm.type && newProjectForm.type != 'uniappx'&&newProjectForm.uniappBuildType=='cli'\" field=\"uniappver\"\r\n\t\t\t\ttooltip=\"2.0开头是vue2,3.0开头是vue3\" label=\"SDK版本\">\r\n\t\t\t\t<a-select :loading=\"confirmLoading\" v-model=\"newProjectForm.uniappver\" placeholder=\"选择UniApp SDK版本\">\r\n\t\t\t\t\t<a-option v-for=\"(item, index) in uniappVerList\" :key=\"index\" :value=\"item\">\r\n\t\t\t\t\t\t{{ item }} -\r\n\t\t\t\t\t\t<a-tag v-if=\"item.length == 22\" color=\"#00b42a\">正式版{{getUniSdkShorVerName(item)}}</a-tag>\r\n\t\t\t\t\t\t<a-tag v-else color=\"#f53f3f\">开发版{{getUniSdkShorVerName(item)}}</a-tag>\r\n\t\t\t\t\t</a-option>\r\n\t\t\t\t</a-select>\r\n\t\t\t</a-form-item>\r\n\t\t\t<a-form-item field=\"uniappBuildType\" tooltip=\"根据类型切换项目\" label=\"项目类型\">\r\n\t\t\t\t<a-radio-group v-model=\"newProjectForm.uniappBuildType\" :default-value=\"newProjectForm.uniappBuildType\"\r\n\t\t\t\t\t:options=\"[{ disabled: newProjectForm.type == 'uniappx', label: 'CLI(推荐,可使用vscode,ws等编译运行,也可在本cli运行预览.也可用Hbuilder编译)', value: 'cli' }, { label: 'HBX(仅支持Hbuilder工具,不推荐)', value: 'hbx' }]\" />\r\n\r\n\t\t\t</a-form-item>\r\n\t\t<!-- \t<a-form-item v-if=\"newProjectForm.type != 'uniappx'&&newProjectForm.uniappBuildType=='cli'\" field=\"machine\" label=\"电脑芯片\">\r\n\t\t\t\t<div>\r\n\t\t\t\t\t<a-radio-group v-model=\"newProjectForm.machine\" :default-value=\"newProjectForm.machine\"\r\n\t\t\t\t\t\t:options=\"[{ label: 'x86/amd/inter', value: 'inter' }, { label: 'M1/M2/M3系列Apple arm芯片', disabled: isWindow(), value: 'arm' }]\" />\r\n\t\t\t\t\t<div style=\"font-size: 12px;color:grey;\">\r\n\t\t\t\t\t\tuniapp sdk不知道从哪个版本开始在m系列编译时需要指定编译依赖,如果你是windowns电脑默认不用选择即可.\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</a-form-item> -->\r\n\t\t</a-form>\r\n\t\t<template #footer>\r\n\t\t\t<a-button @click=\"showCreateFileDir = confirmLoading||false\" :loading=\"confirmLoading\">取消</a-button>\r\n\t\t\t<a-button @click=\"createProject\" type=\"primary\" :loading=\"confirmLoading\">创建tmui项目</a-button>\r\n\t\t</template>\r\n\t</a-modal>\r\n</template>\r\n\r\n<script setup>\r\nimport { useLog } from '@/store/log'\r\nimport { useAccount } from '@/store/user'\r\nimport { computed, onMounted, ref, getCurrentInstance, watch } from 'vue'\r\nimport { util } from '@/libs/util'\r\nimport { post, globalCheckTmuiVer, globalCheckUniAppVer } from '@/fetch'\r\nimport { isWindow } from '@vueuse/core'\r\nconst rootDir = ref('')\r\nconst proxyGlobal = getCurrentInstance().appContext.config.globalProperties\r\nconst newProjectForm = ref({\r\n\tname: '',\r\n\t// uniapp,uniappx\r\n\ttype: \"uniapp\",\r\n\tver: \"\",\r\n\tuniappver: \"\",\r\n\t// cli,hbx\r\n\tuniappBuildType: \"cli\",\r\n\t//inter,arm\r\n\tmachine: 'inter',\r\n\trootDir:\"\"\r\n})\r\nconst newProjectTmuiVers = ref([])\r\nconst uniappVerList = ref([])\r\nconst uniappVerDistList = ref([])\r\nconst store = useLog()\r\nconst user = useAccount()\r\nconst visible = ref(false)\r\nconst showCreateFileDir = ref(false)\r\nconst searchLoading = ref(false)\r\nconst confirmLoading = ref(false)\r\n\r\nconst dir = ref([])\r\nconst projectType = ref('none')\r\nconst dirslstQuicker = [\r\n\t{ title: \"根目录\", path: util.isWinOs() ? 'C:\\\\' : \"/usr\" },\r\n\t{ title: \"用户目录\", path: util.isWinOs() ? 'C:\\\\Users' : \"/Volumes/Macintosh HD/Users\" },\r\n]\r\nconst props = defineProps({\r\n\tdata: {\r\n\t\ttype: Object,\r\n\t\tdefault: () => null\r\n\t}\r\n})\r\n\r\nfunction handleOk() { }\r\nfunction handleCancel() { }\r\n\r\nfunction search() {\r\n\tif (store.ws) {\r\n\t\tsearchLoading.value = true\r\n\t\tstore.ws.send(\r\n\t\t\tJSON.stringify({\r\n\t\t\t\tevent: '18',\r\n\t\t\t\tcommand: rootDir.value\r\n\t\t\t})\r\n\t\t)\r\n\t}\r\n}\r\n\r\nonMounted(() => { })\r\nfunction getSplitChar() {\r\n\treturn util.isWinOs() ? '\\\\' : '/';\r\n}\r\n\r\nwatch(\r\n\t() => store.logMsg,\r\n\t() => {\r\n\t\tconst wscontent = store.logMsg?.wscontend\r\n\t\tif (!wscontent) return\r\n\t\tif (wscontent.event == '18') {\r\n\t\t\tif (wscontent?.flag == '') {\r\n\t\t\t\tconst file = wscontent.data\r\n\t\t\t\tif (!file?.errno) {\r\n\t\t\t\t\trootDir.value = file?.parent ?? (util.isWinOs() ? 'C:\\\\' : '/Volumes')\r\n\t\t\t\t\tdir.value = file?.children ?? []\r\n\t\t\t\t\t// 排序。目录在前文件在后。\r\n\t\t\t\t\tdir.value = dir.value.sort((a, b) => a.type == b.type)\r\n\t\t\t\t\tlet dirs = []\r\n\t\t\t\t\tlet files = []\r\n\t\t\t\t\tdir.value.forEach((el) => {\r\n\t\t\t\t\t\tif (el.type == 'dir') {\r\n\t\t\t\t\t\t\tdirs.push(el)\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tfiles.push(el)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\tdir.value = [...dirs, ...files]\r\n\t\t\t\t\tsaveNowPath()\r\n\t\t\t\t} else {\r\n\t\t\t\t\tproxyGlobal.$message.error({ content: '不存在的目录' })\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (wscontent?.flag == 'end') {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tsearchLoading.value = false\r\n\t\t\t\t\tprojectType.value = checkIsUNI()\r\n\t\t\t\t}, 200)\r\n\t\t\t}\r\n\t\t}else if (wscontent.event == '22') {\r\n\t\t\tif (wscontent?.flag == 'end') {\r\n\t\t\t\tconfirmLoading.value= false\r\n\t\t\t\t// 安装成功\r\n\t\t\t\tshowCreateFileDir.value = false;\r\n\t\t\t\trootDir.value = wscontent.data\r\n\t\t\t\tsearch();\r\n\t\t\t\tproxyGlobal.$notification.success({ title: \"创建成功,请点击导入新创建的项目\" })\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\t{ deep: true }\r\n)\r\nconst okText = computed(() => {\r\n\tif (projectType.value == 'none') return '未知路径,不会执行操作'\r\n\tif (projectType.value == 'empty') return '创建项目'\r\n\tif (projectType.value == 'hbx') return '更新tmui'\r\n\tif (projectType.value == 'cli') return '更新tmui'\r\n\tif (projectType.value == 'warn') return '谨慎创建项目'\r\n\treturn '未知'\r\n})\r\nfunction checkIsUNI() {\r\n\tif (!rootDir.value) return 'none'\r\n\tif (dir.value.length == 0) return 'empty'\r\n\tconst filename = dir.value.map((el) => el.name)\r\n\r\n\tif (filename.includes('manifest.json') && filename.includes('pages') && filename.includes('pages.json')) {\r\n\t\treturn 'hbx'\r\n\t}\r\n\tif (filename.includes('src') && filename.includes('index.html') && filename.includes('package.json')) {\r\n\t\treturn 'cli'\r\n\t}\r\n\treturn 'warn'\r\n}\r\n\r\nfunction checkIsUvue() {\r\n\tconst suffixs = dir.value.map((el) => el.suffix)\r\n\tif (suffixs.includes('.uvue') && suffixs.includes('.uts')) return true;\r\n\treturn false;\r\n}\r\nfunction nextDir(item) {\r\n\tlet nextPathName = item.name\r\n\tif (item.type != 'dir') return\r\n\tif (!store.ws) {\r\n\t\tproxyGlobal.$message.error({ content: '未连接' })\r\n\t\treturn\r\n\t}\r\n\tsearchLoading.value = true\r\n\tstore.ws.send(\r\n\t\tJSON.stringify({\r\n\t\t\tevent: '18',\r\n\t\t\tcommand: rootDir.value + getSplitChar() + nextPathName\r\n\t\t})\r\n\t)\r\n}\r\nfunction prevDir() {\r\n\tlet dirs = rootDir.value.split(getSplitChar())\r\n\tif (!dirs[dirs.length - 1]) {\r\n\t\tdirs = [dirs]\r\n\t}\r\n\r\n\tif (dirs.length == 0) {\r\n\t\tdirs = rootDir.value.split('\\/')\r\n\t}\r\n\tif (dirs.length == 0 || dirs.length == 1) return\r\n\tconst pr = dirs.slice(0, dirs.length - 1)\r\n\tconst strpath = pr.length == 1 ? pr[0] + getSplitChar() : pr.join(getSplitChar())\r\n\tsearchLoading.value = true\r\n\tstore.ws.send(\r\n\t\tJSON.stringify({\r\n\t\t\tevent: '18',\r\n\t\t\tcommand: strpath\r\n\t\t})\r\n\t)\r\n}\r\nfunction changeUserDir(item) {\r\n\tsearchLoading.value = true\r\n\tstore.ws.send(\r\n\t\tJSON.stringify({\r\n\t\t\tevent: '18',\r\n\t\t\tcommand: item.path\r\n\t\t})\r\n\t)\r\n}\r\nfunction saveNowPath() {\r\n\tlocalStorage.setItem('nowfileDirPath', rootDir.value)\r\n}\r\n\r\n/**保存项目信息。 */\r\nfunction save(type) {\r\n\r\n\tif (type == 'save') {\r\n\t\tlet project = localStorage.getItem('project')\r\n\t\tlet projectJson = []\r\n\t\tif (project) {\r\n\t\t\tprojectJson = JSON.parse(project)\r\n\t\t}\r\n\t\tlet newpro = {\r\n\t\t\tid: '',\r\n\t\t\tpath: '',\r\n\t\t\tcreateTime: '',\r\n\t\t\tname: '',\r\n\t\t\ttype: 'cli',\r\n\t\t\tlastRunTime: '',\r\n\t\t\tosName: '',\r\n\t\t\tuvue: checkIsUvue()\r\n\t\t}\r\n\t\tconst names = projectJson.map((el) => el.path)\r\n\r\n\t\tif (!names.includes(rootDir.value)) {\r\n\t\t\tnewpro.id = util.uuid()\r\n\t\t\tnewpro.path = rootDir.value\r\n\t\t\tnewpro.createTime = new Date()\r\n\t\t\tnewpro.name = newpro.path.substring(newpro.path.lastIndexOf(util.getOsSep()) + 1)\r\n\t\t\tnewpro.type = checkIsUNI()\r\n\t\t\tnewpro.lastRunTime = '-'\r\n\t\t\tnewpro.osName = util.isWinOs() ? 'windows' : 'Mac/liunx'\r\n\t\t\tprojectJson.push(newpro)\r\n\t\t\tlocalStorage.setItem('project', JSON.stringify(projectJson))\r\n\t\t\tuser.projectPath = newpro\r\n\t\t\tuser.projects = projectJson\r\n\t\t} else {\r\n\t\t\tproxyGlobal.$message.error({ content: '已存在相同项目' })\r\n\t\t}\r\n\r\n\t\tvisible.value = false\r\n\t} else if (type == 'create') {\r\n\t\t// searchLoading.value = true;\r\n\t\t// proxyGlobal.$message.loading({ content: '创建中,不要关闭应用...' })\r\n\t\tshowCreateFileDir.value = true;\r\n\t\t// visible.value = false\r\n\t\tcheckTmuiVer()\r\n\t}\r\n\r\n}\r\nfunction createProject() {\r\n\r\n\tif(!newProjectForm.value.name.trim()){\r\n\t\tproxyGlobal.$notification.error({ title: \"请填写项目名称\" })\r\n\t\treturn;\r\n\t}\r\n\tif(!newProjectForm.value.ver.trim()&&newProjectForm.value.type != 'uniappx'){\r\n\t\tproxyGlobal.$notification.error({ title: \"请选择tmui版本\" })\r\n\t\treturn;\r\n\t}\r\n\r\n\tnewProjectForm.value.rootDir = rootDir.value\r\n\tconfirmLoading.value = true;\r\n\tstore.ws.send(\r\n\t\tJSON.stringify({\r\n\t\t\tevent: '22',\r\n\t\t\tcommand: newProjectForm.value\r\n\t\t})\r\n\t)\r\n}\r\nasync function checkTmuiVer(type) {\r\n\tnewProjectForm.value.ver = ''\r\n\tnewProjectForm.value.uniappver = ''\r\n\tlet result = await post('/api/cehckTmuiVer', { type })\r\n\tnewProjectTmuiVers.value = result.version\r\n\tcheckUniAppVer()\r\n\tif (type == 'uniappx' && newProjectForm.value.uniappBuildType == 'cli') {\r\n\t\tnewProjectForm.value.uniappBuildType = 'hbx'\r\n\t}\r\n}\r\nasync function checkUniAppVer() {\r\n\tif (!store.ws) {\r\n\t\tproxyGlobal.$message.error({ content: '未连接' })\r\n\t\treturn\r\n\t}\r\n\tconfirmLoading.value = true;\r\n\tlet result = await post('/api/checkUniappVer')\r\n\tuniappVerList.value = result.data.versions\r\n\tuniappVerDistList.value = result.data.dist\r\n\tconfirmLoading.value = false;\r\n}\r\nconst getUniSdkShorVerName = (name)=>{\r\n\tlet isAlpha = name.indexOf('alpha')>-1;\r\n\tlet names = name.split(\"-\")\r\n\tlet namestr = names[names.length-1]\r\n\tlet ver = namestr[0]\r\n\tlet lagver = namestr.substring(1,3)\r\n\tlet minver = namestr.substring(3,5)\r\n\treturn ver+\".\"+parseInt(lagver)+parseInt(minver)\r\n}\r\ndefineExpose({\r\n\topen: () => {\r\n\t\tvisible.value = true\r\n\t\tsetTimeout(() => {\r\n\t\t\tconst pathdir = localStorage.getItem('nowfileDirPath')\r\n\t\t\tsearchLoading.value = true\r\n\t\t\tstore.ws.send(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tevent: '18',\r\n\t\t\t\t\tcommand: pathdir || ''\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t}, 500)\r\n\t}\r\n})\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.itemcell {\r\n\t&.dir:hover {\r\n\t\tbackground-color: rgba(36, 76, 255, 0.1);\r\n\t\tcolor: rgb(36, 76, 255);\r\n\t\tcursor: pointer;\r\n\t}\r\n}\r\n</style>\r\n","import script from \"./fileOpen.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./fileOpen.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./fileOpen.vue?vue&type=style&index=0&id=9746d8e2&scoped=true&lang=less\"\n\nimport exportComponent from \"D:\\\\myapp\\\\tmui3.0\\\\clidomian\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9746d8e2\"]])\n\nexport default __exports__","<template>\r\n\t<div class=\"body\">\r\n\t\t<div class=\"item\" v-for=\"(item, index) in user.projects\" :key=\"index\">\r\n\t\t\t<MobanCell :data=\"item\" />\r\n\t\t</div>\r\n\t\t<div class=\"item\">\r\n\t\t\t<MobanCell @click=\"selectedDir\" />\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<FileOpen ref=\"filesystem\" />\r\n</template>\r\n\r\n<script setup>\r\nimport { ref } from 'vue'\r\nimport { useAccount } from '@/store/user'\r\nimport { useLog } from '@/store/log'\r\nimport MobanCell from './moban/mobanCell.vue'\r\nimport FileOpen from './moban/fileOpen.vue'\r\nconst user = useAccount()\r\nconst filesystem = ref(null)\r\nconst store = useLog()\r\n\r\nasync function selectedDir(evt) {\r\n\tif (!store.localhostIng) {\r\n\t\tproxyGlobal.$message.error({ content: '未连接' })\r\n\t\treturn\r\n\t}\r\n\t// loading.value = true;\r\n\tfilesystem.value?.open()\r\n}\r\n\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.body {\r\n\tdisplay: grid;\r\n\tgrid-template-columns: repeat(1, 1fr);\r\n\tgap: 20px;\r\n\tpadding: 10px;\r\n\r\n\t.item {\r\n\t\tbackground-color: grey;\r\n\t\theight: 450px;\r\n\t\tborder-radius: 10px;\r\n\t}\r\n}\r\n\r\n@media screen and (min-width: 900px) {\r\n\t.body {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(2, 1fr);\r\n\t}\r\n}\r\n\r\n@media screen and (min-width: 1200px) {\r\n\t.body {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(3, 1fr);\r\n\t}\r\n}\r\n\r\n@media screen and (min-width: 1500px) {\r\n\t.body {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(4, 1fr);\r\n\t}\r\n}\r\n@media screen and (min-width: 1800px) {\r\n\t.body {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(4, 1fr);\r\n\t}\r\n}\r\n@media screen and (min-width: 2100px) {\r\n\t.body {\r\n\t\tdisplay: grid;\r\n\t\tgrid-template-columns: repeat(5, 1fr);\r\n\t}\r\n}\r\n</style>\r\n","import script from \"./XiangMu.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./XiangMu.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./XiangMu.vue?vue&type=style&index=0&id=2674685f&scoped=true&lang=less\"\n\nimport exportComponent from \"D:\\\\myapp\\\\tmui3.0\\\\clidomian\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2674685f\"]])\n\nexport default __exports__","<template>\r\n\r\n <div class=\"\" style=\"padding: 24px;display:flex;gap:24px;flex-direction: column;\">\r\n <h2>如果它在你的商业项目中帮助了你,可以通过以下方式赞助我,让项目持续的更新。</h2>\r\n <img style=\"width: 550px;\" src=\"https://cdn.tmui.design/public/design/payzhanzhu.jpg\" />\r\n <h3 style=\"color: red;\">你的支持赞助,会使得项目可持续发展的更好,而不是因为经济,精力问题导致中断。</h3>\r\n <h2>加入微信群</h2>\r\n <img style=\"width: 300px;\" src=\"https://cdn.tmui.design/public/design/weixinQR2.jpg\" />\r\n </div>\r\n\r\n</template>\r\n<script setup lang=\"js\">\r\n\r\n</script>","import { render } from \"./ZhanZhu.vue?vue&type=template&id=3dc45983\"\nconst script = {}\n\nimport exportComponent from \"D:\\\\myapp\\\\tmui3.0\\\\clidomian\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\r\n\t<div class=\"box\">\r\n\t\t<div class=\"card\">\r\n\t\t\t<h2 style=\"margin-bottom: 20px;\">前言</h2>\r\n\t\t\t<p>\r\n\t\t\t\t因为有了4.0x原生组件的收费,产生了收益,促使我继续维护uniapp版本的3系列,\r\n\t\t\t\t并升级到了3.2,丢掉了3.1的一些屎山代码:\r\n\t\t\t</p>\r\n\t\t\t<p>\r\n\t\t\t\t主要是放弃了nvue的支持,因为官方Dcloud也放弃了对nvue的支持,所以已经没有意义维护了。维护一个版本需要\r\n\t\t\t\t大量的测试。以3.1比喻我每测试检测一下就要同时运行到:微信,andriod,ios,支付宝,web等不同平台测试。\r\n\t\t\t\t因此维护一个版本是需要很多精力和时间测试,不是一下就能发布的。\r\n\t\t\t</p>\r\n\t\t\t<p>\r\n\t\t\t\t同理3.2在发布正式版本前我需要做很多适配工作,因此也有大量的时间和维护成本。好在我的4.0原生项目在插件市场\r\n\t\t\t\t售卖的收益不错,形成了正向利益驱动,让我有了动力维护更新3系列。我对2025年作了如下的规划:\r\n\t\t\t</p>\r\n\t\t</div>\r\n\t\t<div class=\"card\">\r\n\t\t\t<div class=\"title\">UniApp TMUI3.2.x的任务计划</div>\r\n\t\t\t<H3>2025年6月前完成tmui3.2的所有开发工作并发布正式版本</H3>\r\n\t\t\t<div>\r\n\t\t\t\t<ul>\r\n\t\t\t\t\t<li>鸿蒙适配</li>\r\n\t\t\t\t\t<li>抖音适配</li>\r\n\t\t\t\t\t<li>支付宝适配</li>\r\n\t\t\t\t\t<li>安卓APP适配</li>\r\n\t\t\t\t\t<li>IOS适配</li>\r\n\t\t\t\t\t<li>把剩余的对标4的一些能移植的组件,适配过来。不能适配请使用4.0x</li>\r\n\t\t\t\t\r\n\t\t\t\t</ul>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div class=\"card\">\r\n\t\t\t<div class=\"title\">原生Uvue Uts TMUI4.x的任务计划</div>\r\n\t\t <H3>2025年3月前完成tmui4x的微信适配工作</H3>\r\n\t\t\t<H3>2025年6月前完成tmui4x的鸿蒙适配工作</H3>\r\n\t\t</div>\r\n\t</div>\r\n\r\n</template>\r\n<script setup lang=\"js\">\r\n\r\n</script>\r\n<style scoped>\r\n\t.box{\r\n\t\tmargin:24px;\r\n\t\tmargin-top: 0;\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: row;\r\n\t\tflex-wrap:wrap;\r\n\t}\r\n\t.title{\r\n\t\tfont-size: 24px;\r\n\t\tmargin-bottom: 16px;\r\n\t}\r\n\t.card{\r\n\t\tmargin: 24px 0;\r\n\t\tpadding: 24px;\r\n\t\tbox-shadow: 0 0 20px rgba(0, 0, 0, 0.05);\r\n\t\tborder-radius: 5px;\r\n\t\tbox-sizing: border-box;\r\n\t\tmax-width: 450px;\r\n\t}\r\n\tul li {\r\n\t\tpadding: 6px 0;\r\n\t\tlist-style: none;\r\n\t}\r\n\tp{\r\n\t\tmargin-bottom: 16px;\r\n\t\tline-height: 28px;\r\n\t\tfont-size: 14px;\r\n\t}\r\n</style>","import { render } from \"./UpdateLine.vue?vue&type=template&id=5efaaea3&scoped=true\"\nconst script = {}\n\nimport \"./UpdateLine.vue?vue&type=style&index=0&id=5efaaea3&scoped=true&lang=css\"\n\nimport exportComponent from \"D:\\\\myapp\\\\tmui3.0\\\\clidomian\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5efaaea3\"]])\n\nexport default __exports__","<template>\r\n\t<XiangMu v-if=\"pageKeyname == 'xiangmu'\"></XiangMu>\r\n\t<ZhanZhu v-if=\"pageKeyname == 'zhanzhu'\"></ZhanZhu>\r\n\t<UpdateLine v-if=\"pageKeyname == 'update'\"></UpdateLine>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue'\r\nimport XiangMu from '@/components/XiangMu.vue'\r\nimport ZhanZhu from '@/components/ZhanZhu.vue'\r\nimport UpdateLine from '@/components/UpdateLine.vue'\r\nimport { useAccount } from '@/store/user'\r\n\r\nconst store = useAccount()\r\nconst pageKeyname = computed(() => store.menuKeys[0] ?? '')\r\n</script>\r\n\r\n<style scoped lang=\"less\"></style>\r\n","import script from \"./HomeView.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./HomeView.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\r\n\t<div class=\"header\">\r\n\t\t<div>\r\n\t\t\t<span class=\"logo\">TMUI CLI 可视化配置工具</span>\r\n\t\t\t<span style=\"color: orange\"> USE CPU:{{ cpuuse.cpuUsage }}% </span>\r\n\t\t\t<span style=\"color: green\"> USE MEM:{{ cpuuse.memUsage }}% </span>\r\n\t\t\t<span v-if=\"cpuuse.memUsage >= 80 || cpuuse.cpuUsage >= 50\" style=\"color: red\"> 使用率过高,影响编译 </span>\r\n\t\t</div>\r\n\t\t<div>\r\n\t\t\t<a-space size=\"large\">\r\n\t\t\t\t<!-- <icon-user :style=\"{ fontSize: '21px' }\" /> -->\r\n\t\t\t\t<a-button style=\"background:#ffffff\" href=\"https://xui.tmui.design\" target=\"_blank\" type=\"primary\" shape=\"circle\">\r\n\t\t\t\t\t<img style=\"width: 20px;\" src=\"https://xui.tmui.design/logo.png\" />\r\n\t\t\t\t</a-button>\r\n\t\t\t\t<a-button href=\"https://tmui.design\" style=\"background:#ffffff\" target=\"_blank\" type=\"primary\" shape=\"circle\">\r\n\t\t\t\t\t<img style=\"width: 20px;\" src=\"https://tmui.design/images/logoGreat.png\" />\r\n\r\n\t\t\t\t</a-button>\r\n\t\t\t\t<a-button @click=\"seeQunMa\" type=\"primary\" shape=\"circle\">\r\n\t\t\t\t\t<icon-wechat :style=\"{ fontSize: '21px' }\" />\r\n\t\t\t\t</a-button>\r\n\t\t\t</a-space>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<script setup>\r\nimport { useIntervalFn } from '@vueuse/core'\r\nimport { useLog } from '@/store/log'\r\nimport { watch, getCurrentInstance, ref, h } from 'vue'\r\nconst proxyGlobal = getCurrentInstance().appContext.config.globalProperties\r\nconst store = useLog()\r\nconst cpuuse = ref({\r\n\tmemUsage: 0,\r\n\tcpuUsage: 0\r\n})\r\nconst { pause, resume, isActive } = useIntervalFn(() => {\r\n\t/* your function */\r\n\tif (store.ws) {\r\n\t\tstore.ws.send(\r\n\t\t\tJSON.stringify({\r\n\t\t\t\tevent: 'getCpu',\r\n\t\t\t\tcommand: ''\r\n\t\t\t})\r\n\t\t)\r\n\t}\r\n}, 3000)\r\n\r\nwatch(\r\n\t() => store.logMsg,\r\n\t() => {\r\n\t\tconst wscontent = store.logMsg?.wscontend\r\n\t\tif (!wscontent) return\r\n\t\tif (wscontent.event == 'getCpu') {\r\n\t\t\tconst msg = wscontent.data\r\n\t\t\tcpuuse.value = msg\r\n\t\t}\r\n\t},\r\n\t{ deep: true }\r\n)\r\nwatch(\r\n\t() => store.ws,\r\n\t() => {\r\n\t\tif (store.ws) {\r\n\t\t\tstore.ws.send(\r\n\t\t\t\tJSON.stringify({\r\n\t\t\t\t\tevent: 'getCpu',\r\n\t\t\t\t\tcommand: ''\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t}\r\n\t},\r\n\t{ deep: true }\r\n)\r\n\r\nfunction seeQunMa() {\r\n\tproxyGlobal.$modal.confirm({\r\n\t\ttitle: \"加入微信群\",\r\n\t\twidth: '300px',\r\n\t\thideCancel: true,\r\n\t\tcontent: h('img', { src: 'https://cdn.tmui.design/public/design/weixinQR2.jpg?id=' + Math.random() })\r\n\t})\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.header {\r\n\theight: 60px;\r\n\tdisplay: flex;\r\n\tflex-flow: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tbackground: rgb(0, 7, 36);\r\n\tpadding: 0 24px;\r\n\tcolor: white;\r\n\r\n\t.logo {\r\n\t\tfont-size: 21px;\r\n\t}\r\n}\r\n</style>\r\n","import script from \"./HeadView.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./HeadView.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./HeadView.vue?vue&type=style&index=0&id=6469922e&scoped=true&lang=less\"\n\nimport exportComponent from \"D:\\\\myapp\\\\tmui3.0\\\\clidomian\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6469922e\"]])\n\nexport default __exports__","import { createRouter, createWebHashHistory } from 'vue-router'\r\nimport HomeView from '../views/HomeView.vue'\r\nimport HeadView from '../components/HeadView.vue'\r\nconst routes = [\r\n {\r\n path: '/',\r\n name: 'Home',\r\n components: {\r\n header: HeadView,\r\n body: HomeView,\r\n }\r\n }\r\n]\r\n\r\nconst router = createRouter({\r\n history: createWebHashHistory(),\r\n routes\r\n})\r\n\r\nexport default router\r\n","import {\r\n\tcreateApp\r\n} from 'vue'\r\nimport ArcoVue from '@arco-design/web-vue';\r\nimport { createPinia } from 'pinia'\r\n// 额外引入图标库\r\nimport ArcoVueIcon from '@arco-design/web-vue/es/icon';\r\nimport Vue3DraggableResizable from 'vue3-draggable-resizable'\r\n//需引入默认样式\r\nimport 'vue3-draggable-resizable/dist/Vue3DraggableResizable.css'\r\nimport App from './App.vue';\r\nimport Terminal from 'vue-web-terminal'\r\nimport '@arco-design/web-vue/dist/arco.css';\r\nimport router from \"./router/index.js\"\r\nwindow[\"VUE_APP_IMG_STATIC_HOST\"] = process.env.VUE_APP_IMG_STATIC_HOST\r\nwindow[\"VUE_APP_WS_HOST\"] = process.env.VUE_APP_WS_HOST\r\nwindow[\"VUE_APP_API_HOST\"] = process.env.VUE_APP_API_HOST\r\n\r\nconst app = createApp(App);\r\napp.use(Vue3DraggableResizable)\r\napp.use(Terminal)\r\napp.use(createPinia())\r\napp.use(ArcoVue);\r\napp.use(ArcoVueIcon);\r\napp.use(router)\r\napp.mount('#app');\r\nwindow.app = app;\r\n\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunktmuistore\"] = self[\"webpackChunktmuistore\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(707); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["localStorage","getItem","useLog","defineStore","state","logMsg","localhostIng","ws","undefined","cmd","actions","post","url","opts","Promise","reslove","reject","useFetch","refetch","onFetchError","e","error","beforeFetch","options","headers","token","json","then","rulst","statusCode","value","data","async","globalCheckTmuiVer","type","result","version","globalCheckUniAppVer","LogStore","Terminal","maxwidth","ref","window","innerWidth","maxheight","innerHeight","cliPath","cmdvue","initMsg","content","class","customCommand","key","title","group","usage","description","example","des","commandKey","isExecIng","LogClient","init","nextTick","onExecCmd","command","success","failed","words","trim","split","length","includes","keys","ml","onMounted","watch","msg","wscontent","wscontend","event","_pushMessage","deep","list","d","catch","tag","cli","str","send","JSON","stringify","__exports__","tokenNow","projects","parse","useAccount","menuKeys","projectPath","id","path","createTime","name","lastRunTime","osName","user","admin","ask","black","jifen","loginTime","loginip","nicename","openid","phone","sex","timestart","tmzdy_tmuiAccountID","tourl","upload","vip","login","setItem","setUserInfo","loginOut","removeItem","removeProject","index","this","findIndex","el","splice","store","changeKeys","Online","getCurrentInstance","appContext","config","globalProperties","useOnline","tid","wscont","status","close","open","useWebSocket","autoReconnect","reactive","onerror","ev","onopen","clearInterval","onclose","util","uuid","len","radix","i","r","chars","Math","random","join","getClass","document","querySelector","classNames","classList","addClass","classname","newCLass","Set","add","className","removeClass","delete","toogleClass","has","getElementAttr","ele","getAttribute","createDiv","isWinOs","agent","navigator","userAgent","toLowerCase","isMac","test","indexOf","getOsSep","formatSeconds","seconds","day","floor","hour","minute","second","proxyGlobal","counter","reset","pause","resume","useInterval","controls","loading","uploading","runApp","buildApping","shwotmuimodal","runInfo","pid","host","tmuiInfo","appid","versionName","tmui","scripts","newProjectForm","ver","uniappver","newProjectTmuiVers","uniappVerList","devCmd","buildCmd","runType","runTime","computed","isEmpty","props","isJianRongVerTMui","oldver","parseFloat","replace","newver","devProject","closeApp","checkProjectInfo","seeQunMa","$modal","confirm","width","hideCancel","h","src","checkVer","$message","tmuilist","uvue","unilist","versions","updateTmui","onOk","$notification","removeClose","run","push","flag","watchEffect","rootDir","uniappBuildType","machine","uniappVerDistList","visible","showCreateFileDir","searchLoading","confirmLoading","dir","projectType","dirslstQuicker","handleOk","handleCancel","search","getSplitChar","file","errno","parent","children","sort","a","b","dirs","files","forEach","saveNowPath","setTimeout","checkIsUNI","okText","filename","map","checkIsUvue","suffixs","suffix","nextDir","item","nextPathName","prevDir","pr","slice","strpath","changeUserDir","save","project","projectJson","newpro","names","Date","substring","lastIndexOf","checkTmuiVer","createProject","checkUniAppVer","dist","getUniSdkShorVerName","namestr","lagver","minver","parseInt","expose","pathdir","filesystem","selectedDir","evt","style","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_createElementBlock","_hoisted_1","_hoisted_7","script","render","_createVNode","_component_H3","pageKeyname","cpuuse","memUsage","cpuUsage","isActive","useIntervalFn","routes","components","header","HeadView","body","HomeView","router","createRouter","history","createWebHashHistory","process","app","createApp","App","use","Vue3DraggableResizable","createPinia","ArcoVue","ArcoVueIcon","mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","every","n","getter","__esModule","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}
|