【优化】重绘各类厂商和资源来源图标

【新增】CA类型SSL.COM
【新增】消息通知渠道-webhook
【新增】消息通知渠道-飞书
【新增】消息通知渠道-钉钉
【新增】huaweicloud-cdn部署类型
This commit is contained in:
chudong
2025-05-29 14:23:45 +08:00
parent b20b5fd290
commit a0768181bb
215 changed files with 166 additions and 20548 deletions

View File

@@ -5,7 +5,7 @@
<link rel="icon" href="./favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AllinSSL</title>
<script type="module" crossorigin src="./static/js/main-byVHXlrF.js"></script>
<script type="module" crossorigin src="./static/js/main-BO_qvVyv.js"></script>
<link rel="stylesheet" crossorigin href="./static/css/style-CpwLZ6Fp.css">
</head>
<body>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{u as s}from"./index-Dm-CbavK.js";import{d as t,c as o}from"./main-BO_qvVyv.js";import"./useStore-CeD7Jshg.js";import"./index-fspvPnRK.js";import"./access-uHYClSM1.js";import"./index-CT47IChd.js";import"./throttle-BeVTGEP8.js";import"./index-B1WGBnOF.js";import"./data-BpRW_c-h.js";import"./index-xSmAfiwT.js";import"./business-CftdAKwa.js";import"./index-kqNzwJC_.js";const r=t({name:"CAManageForm",setup(){const{CAForm:t}=s();return()=>o(t,{labelPlacement:"top"},null)}});export{r as default};

View File

@@ -1 +0,0 @@
import{u as s}from"./index-CqJDx4DP.js";import{d as t,c as o}from"./main-byVHXlrF.js";import"./useStore-CQMFt1oy.js";import"./index-BEscpGJe.js";import"./access-B61MZcFD.js";import"./index-CpTLTIly.js";import"./throttle-DQeaeZy5.js";import"./index-DKQnDezm.js";import"./data-BG5jXh4E.js";import"./index-MIX_2uK-.js";import"./business-DeaCYAUx.js";import"./index-Dw6Nd4ZZ.js";const r=t({name:"CAManageForm",setup(){const{CAForm:t}=s();return()=>o(t,{labelPlacement:"top"},null)}});export{r as default};

View File

@@ -1 +1 @@
import{d as a,Y as l,Z as n,_ as r}from"./main-byVHXlrF.js";const t={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 20 20"},o=a({name:"Certificate20Regular",render:function(a,o){return n(),l("svg",t,o[0]||(o[0]=[r("g",{fill:"none"},[r("path",{d:"M2 5a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v3.146a4.508 4.508 0 0 0-1-.678V5a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h7.258c.076.113.157.223.242.329V15H4a2 2 0 0 1-2-2V5zm16.5 6.5c0 .954-.381 1.818-1 2.45V18a.5.5 0 0 1-.8.4l-1.4-1.05a.5.5 0 0 0-.6 0l-1.4 1.05a.5.5 0 0 1-.8-.4v-4.05a3.5 3.5 0 1 1 6-2.45zM15 15c-.537 0-1.045-.12-1.5-.337v2.087l1.243-.746a.5.5 0 0 1 .514 0l1.243.746v-2.087A3.486 3.486 0 0 1 15 15zm0-1a2.5 2.5 0 1 0 0-5a2.5 2.5 0 0 0 0 5zM5 6.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm.5 4.5a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4z",fill:"currentColor"})],-1)]))}}),h={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},w=a({name:"CloudMonitoring",render:function(a,t){return n(),l("svg",h,t[0]||(t[0]=[r("path",{d:"M28 16v6H4V6h7V4H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h8v4H8v2h16v-2h-4v-4h8a2 2 0 0 0 2-2v-6zM18 28h-4v-4h4z",fill:"currentColor"},null,-1),r("path",{d:"M18 18h-.01a1 1 0 0 1-.951-.725L15.246 11H11V9h5a1 1 0 0 1 .962.725l1.074 3.76l3.009-9.78A1.014 1.014 0 0 1 22 3a.98.98 0 0 1 .949.684L24.72 9H30v2h-6a1 1 0 0 1-.949-.684l-1.013-3.04l-3.082 10.018A1 1 0 0 1 18 18z",fill:"currentColor"},null,-1)]))}}),v={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},e=a({name:"Flow",render:function(a,t){return n(),l("svg",v,t[0]||(t[0]=[r("path",{d:"M27 22.14V17a2 2 0 0 0-2-2h-8V9.86a4 4 0 1 0-2 0V15H7a2 2 0 0 0-2 2v5.14a4 4 0 1 0 2 0V17h18v5.14a4 4 0 1 0 2 0zM8 26a2 2 0 1 1-2-2a2 2 0 0 1 2 2zm6-20a2 2 0 1 1 2 2a2 2 0 0 1-2-2zm12 22a2 2 0 1 1 2-2a2 2 0 0 1-2 2z",fill:"currentColor"},null,-1)]))}});export{o as C,e as F,w as a};
import{d as a,Y as l,Z as n,_ as r}from"./main-BO_qvVyv.js";const t={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 20 20"},o=a({name:"Certificate20Regular",render:function(a,o){return n(),l("svg",t,o[0]||(o[0]=[r("g",{fill:"none"},[r("path",{d:"M2 5a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v3.146a4.508 4.508 0 0 0-1-.678V5a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h7.258c.076.113.157.223.242.329V15H4a2 2 0 0 1-2-2V5zm16.5 6.5c0 .954-.381 1.818-1 2.45V18a.5.5 0 0 1-.8.4l-1.4-1.05a.5.5 0 0 0-.6 0l-1.4 1.05a.5.5 0 0 1-.8-.4v-4.05a3.5 3.5 0 1 1 6-2.45zM15 15c-.537 0-1.045-.12-1.5-.337v2.087l1.243-.746a.5.5 0 0 1 .514 0l1.243.746v-2.087A3.486 3.486 0 0 1 15 15zm0-1a2.5 2.5 0 1 0 0-5a2.5 2.5 0 0 0 0 5zM5 6.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm.5 4.5a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1h-4z",fill:"currentColor"})],-1)]))}}),h={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},w=a({name:"CloudMonitoring",render:function(a,t){return n(),l("svg",h,t[0]||(t[0]=[r("path",{d:"M28 16v6H4V6h7V4H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h8v4H8v2h16v-2h-4v-4h8a2 2 0 0 0 2-2v-6zM18 28h-4v-4h4z",fill:"currentColor"},null,-1),r("path",{d:"M18 18h-.01a1 1 0 0 1-.951-.725L15.246 11H11V9h5a1 1 0 0 1 .962.725l1.074 3.76l3.009-9.78A1.014 1.014 0 0 1 22 3a.98.98 0 0 1 .949.684L24.72 9H30v2h-6a1 1 0 0 1-.949-.684l-1.013-3.04l-3.082 10.018A1 1 0 0 1 18 18z",fill:"currentColor"},null,-1)]))}}),v={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},e=a({name:"Flow",render:function(a,t){return n(),l("svg",v,t[0]||(t[0]=[r("path",{d:"M27 22.14V17a2 2 0 0 0-2-2h-8V9.86a4 4 0 1 0-2 0V15H7a2 2 0 0 0-2 2v5.14a4 4 0 1 0 2 0V17h18v5.14a4 4 0 1 0 2 0zM8 26a2 2 0 1 1-2-2a2 2 0 0 1 2 2zm6-20a2 2 0 1 1 2 2a2 2 0 0 1-2-2zm12 22a2 2 0 1 1 2-2a2 2 0 0 1-2 2z",fill:"currentColor"},null,-1)]))}});export{o as C,e as F,w as a};

View File

@@ -1 +1 @@
import{d as c,Y as n,Z as r,_ as t}from"./main-byVHXlrF.js";const o={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 1024 1024"},s=c({name:"LockOutlined",render:function(c,s){return r(),n("svg",o,s[0]||(s[0]=[t("path",{d:"M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM332 240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224H332V240zm460 600H232V536h560v304zM484 701v53c0 4.4 3.6 8 8 8h40c4.4 0 8-3.6 8-8v-53a48.01 48.01 0 1 0-56 0z",fill:"currentColor"},null,-1)]))}});export{s as L};
import{d as c,Y as n,Z as r,_ as t}from"./main-BO_qvVyv.js";const o={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 1024 1024"},s=c({name:"LockOutlined",render:function(c,s){return r(),n("svg",o,s[0]||(s[0]=[t("path",{d:"M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM332 240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224H332V240zm460 600H232V536h560v304zM484 701v53c0 4.4 3.6 8 8 8h40c4.4 0 8-3.6 8-8v-53a48.01 48.01 0 1 0-56 0z",fill:"currentColor"},null,-1)]))}});export{s as L};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{c as s}from"./index-BEscpGJe.js";const a=a=>s("/v1/access/get_list",a),c=a=>s("/v1/access/add_access",a),e=a=>s("/v1/access/upd_access",a),t=a=>s("/v1/access/del_access",a),_=a=>s("/v1/access/get_all",a),v=a=>s("/v1/access/get_eab_list",a),d=a=>s("/v1/access/add_eab",a),l=a=>s("/v1/access/del_eab",a),g=a=>s("/v1/access/get_all_eab",a),i=a=>s("/v1/access/test_access",a),b=a=>s("/v1/access/get_sites",a);export{c as a,v as b,d as c,t as d,l as e,g as f,a as g,b as h,_ as i,i as t,e as u};
import{c as s}from"./index-fspvPnRK.js";const a=a=>s("/v1/access/get_list",a),c=a=>s("/v1/access/add_access",a),e=a=>s("/v1/access/upd_access",a),t=a=>s("/v1/access/del_access",a),_=a=>s("/v1/access/get_all",a),v=a=>s("/v1/access/get_eab_list",a),d=a=>s("/v1/access/add_eab",a),l=a=>s("/v1/access/del_eab",a),g=a=>s("/v1/access/get_all_eab",a),i=a=>s("/v1/access/test_access",a),b=a=>s("/v1/access/get_sites",a);export{c as a,v as b,d as c,t as d,l as e,g as f,a as g,b as h,_ as i,i as t,e as u};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{c as t}from"./index-BEscpGJe.js";const e=e=>t("/v1/cert/get_list",e),r=e=>t("/v1/cert/upload_cert",e),c=e=>t("/v1/cert/del_cert",e);export{c as d,e as g,r as u};
import{c as t}from"./index-fspvPnRK.js";const e=e=>t("/v1/cert/get_list",e),r=e=>t("/v1/cert/upload_cert",e),c=e=>t("/v1/cert/del_cert",e);export{c as d,e as g,r as u};

View File

@@ -1 +0,0 @@
import{$ as e}from"./main-byVHXlrF.js";const t={email:{name:e("t_68_1745289354676"),type:"mail"},wecom:{name:e("t_33_1746773350932"),type:"wecom"},dingtalk:{name:e("t_32_1746773348993"),type:"dingtalk"},feishu:{name:e("t_34_1746773350153"),type:"feishu"},webhook:{name:"WebHook",type:"webhook"}},n={zerossl:{name:"ZeroSSL",type:"zerossl"},google:{name:"Google",type:"google"}},a={localhost:{name:e("t_4_1744958838951"),icon:"ssh",type:["host"],notApi:!1,hostRelated:{default:{name:e("t_4_1744958838951")}},sort:1},ssh:{name:"SSH",icon:"ssh",type:["host"],hostRelated:{default:{name:"SSH"}},sort:2},btpanel:{name:e("t_10_1745735765165"),icon:"btpanel",hostRelated:{default:{name:e("t_10_1745735765165")},site:{name:e("t_1_1747886307276")},dockersite:{name:e("t_0_1747994891459")}},type:["host"],sort:3},btwaf:{name:e("t_3_1747886302848"),icon:"btwaf",hostRelated:{site:{name:e("t_4_1747886303229")}},type:["host"],sort:4},"1panel":{name:"1Panel",icon:"1panel",hostRelated:{default:{name:"1Panel"},site:{name:e("t_2_1747886302053")}},type:["host"],sort:5},aliyun:{name:e("t_2_1747019616224"),icon:"aliyun",type:["host","dns"],hostRelated:{cdn:{name:e("t_16_1745735766712")},oss:{name:e("t_2_1746697487164")},waf:{name:e("t_10_1744958860078")}},sort:6},tencentcloud:{name:e("t_3_1747019616129"),icon:"tencentcloud",type:["host","dns"],hostRelated:{cdn:{name:e("t_14_1745735766121")},cos:{name:e("t_15_1745735768976")},waf:{name:e("t_9_1744958840634")},teo:{name:e("t_5_1747886301427")}},sort:7},safeline:{name:e("t_11_1747886301986"),icon:"safeline",type:["host"],hostRelated:{panel:{name:e("t_1_1747298114192")},site:{name:e("t_12_1747886302725")}},sort:8},qiniu:{name:e("t_6_1747886301844"),icon:"qiniu",type:["host"],hostRelated:{cdn:{name:e("t_7_1747886302395")},oss:{name:e("t_8_1747886304014")}},sort:9},huaweicloud:{name:e("t_9_1747886301128"),icon:"huaweicloud",type:["dns"],sort:10},baidu:{name:e("t_10_1747886300958"),icon:"baidu",type:["host","dns"],hostRelated:{cdn:{name:"百度云CDN"}},sort:11},cloudflare:{name:"Cloudflare",icon:"cloudflare",type:["dns"],sort:12},volcengine:{name:e("t_13_1747886301689"),icon:"volcengine",type:["dns"],sort:13},westcn:{name:e("t_14_1747886301884"),icon:"westcn",type:["dns"],sort:14},godaddy:{name:"GoDaddy",icon:"godaddy",type:["dns"],sort:15}};export{a as A,n as C,t as M};

View File

@@ -0,0 +1 @@
import{$ as e}from"./main-BO_qvVyv.js";const t={mail:{name:e("t_68_1745289354676"),type:"mail"},wecom:{name:e("t_33_1746773350932"),type:"wecom"},dingtalk:{name:e("t_32_1746773348993"),type:"dingtalk"},feishu:{name:e("t_34_1746773350153"),type:"feishu"},webhook:{name:"WebHook",type:"webhook"}},n={zerossl:{name:"ZeroSSL",type:"zerossl"},google:{name:"Google",type:"google"},sslcom:{name:"SSL.COM",type:"sslcom"}},a={localhost:{name:e("t_4_1744958838951"),icon:"ssh",type:["host"],notApi:!1,hostRelated:{default:{name:e("t_4_1744958838951")}},sort:1},ssh:{name:"SSH",icon:"ssh",type:["host"],hostRelated:{default:{name:"SSH"}},sort:2},btpanel:{name:e("t_10_1745735765165"),icon:"btpanel",hostRelated:{default:{name:e("t_10_1745735765165")},site:{name:e("t_1_1747886307276")},dockersite:{name:e("t_0_1747994891459")}},type:["host"],sort:3},btwaf:{name:e("t_3_1747886302848"),icon:"btwaf",hostRelated:{site:{name:e("t_4_1747886303229")}},type:["host"],sort:4},"1panel":{name:"1Panel",icon:"1panel",hostRelated:{default:{name:"1Panel"},site:{name:e("t_2_1747886302053")}},type:["host"],sort:5},aliyun:{name:e("t_2_1747019616224"),icon:"aliyun",type:["host","dns"],hostRelated:{cdn:{name:e("t_16_1745735766712")},oss:{name:e("t_2_1746697487164")},waf:{name:e("t_10_1744958860078")}},sort:6},tencentcloud:{name:e("t_3_1747019616129"),icon:"tencentcloud",type:["host","dns"],hostRelated:{cdn:{name:e("t_14_1745735766121")},cos:{name:e("t_15_1745735768976")},waf:{name:e("t_9_1744958840634")},teo:{name:e("t_5_1747886301427")}},sort:7},safeline:{name:e("t_11_1747886301986"),icon:"safeline",type:["host"],hostRelated:{panel:{name:e("t_1_1747298114192")},site:{name:e("t_12_1747886302725")}},sort:8},qiniu:{name:e("t_6_1747886301844"),icon:"qiniu",type:["host"],hostRelated:{cdn:{name:e("t_7_1747886302395")},oss:{name:e("t_8_1747886304014")}},sort:9},huaweicloud:{name:e("t_9_1747886301128"),icon:"huaweicloud",type:["dns","host"],hostRelated:{cdn:{name:e("t_9_1747886301128")+"CDN"}},sort:10},baidu:{name:e("t_10_1747886300958"),icon:"baidu",type:["host","dns"],hostRelated:{cdn:{name:"百度云CDN"}},sort:11},cloudflare:{name:"Cloudflare",icon:"cloudflare",type:["dns"],sort:12},volcengine:{name:e("t_13_1747886301689"),icon:"volcengine",type:["dns"],sort:13},westcn:{name:e("t_14_1747886301884"),icon:"westcn",type:["dns"],sort:14},godaddy:{name:"GoDaddy",icon:"godaddy",type:["dns"],sort:15},namecheap:{name:"Namecheap",icon:"namecheap",type:["dns"],sort:16},ns1:{name:"NS1",icon:"ns1",type:["dns"],sort:17},cloudns:{name:"ClouDNS",icon:"cloudns",type:["dns"],sort:18},aws:{name:"AWS",icon:"aws",type:["dns"],sort:19},azure:{name:"Azure",icon:"azure",type:["dns"],sort:20}};export{a as A,n as C,t as M};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{d as t,Y as a,Z as e,_ as s,c as l,aa as r,$ as n,b as i,B as p}from"./main-byVHXlrF.js";const u={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},o=t({name:"Search",render:function(t,l){return e(),a("svg",u,l[0]||(l[0]=[s("path",{d:"M29 27.586l-7.552-7.552a11.018 11.018 0 1 0-1.414 1.414L27.586 29zM4 13a9 9 0 1 1 9 9a9.01 9.01 0 0 1-9-9z",fill:"currentColor"},null,-1)]))}}),d=t({name:"TableEmptyState",props:{addButtonText:{type:String,required:!0},onAddClick:{type:Function,required:!0}},setup:t=>()=>l("div",{class:"flex justify-center items-center h-full"},[l(r,{class:"px-[4rem]"},{default:()=>[n("t_1_1747754231838"),l(p,{text:!0,type:"primary",size:"small",onClick:t.onAddClick},{default:()=>[t.addButtonText]}),i(""),n("t_2_1747754234999"),l(p,{text:!0,tag:"a",target:"_blank",type:"primary",href:"https://github.com/allinssl/allinssl/issues"},{default:()=>[i("Issues")]}),i(""),n("t_3_1747754232000"),l(p,{text:!0,tag:"a",target:"_blank",type:"primary",href:"https://github.com/allinssl/allinssl"},{default:()=>[i("Star")]}),i(""),n("t_4_1747754235407")]})])});export{d as E,o as S};
import{d as t,Y as a,Z as e,_ as s,c as l,aa as r,$ as n,b as i,B as p}from"./main-BO_qvVyv.js";const u={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},o=t({name:"Search",render:function(t,l){return e(),a("svg",u,l[0]||(l[0]=[s("path",{d:"M29 27.586l-7.552-7.552a11.018 11.018 0 1 0-1.414 1.414L27.586 29zM4 13a9 9 0 1 1 9 9a9.01 9.01 0 0 1-9-9z",fill:"currentColor"},null,-1)]))}}),d=t({name:"TableEmptyState",props:{addButtonText:{type:String,required:!0},onAddClick:{type:Function,required:!0}},setup:t=>()=>l("div",{class:"flex justify-center items-center h-full"},[l(r,{class:"px-[4rem]"},{default:()=>[n("t_1_1747754231838"),l(p,{text:!0,type:"primary",size:"small",onClick:t.onAddClick},{default:()=>[t.addButtonText]}),i(""),n("t_2_1747754234999"),l(p,{text:!0,tag:"a",target:"_blank",type:"primary",href:"https://github.com/allinssl/allinssl/issues"},{default:()=>[i("Issues")]}),i(""),n("t_3_1747754232000"),l(p,{text:!0,tag:"a",target:"_blank",type:"primary",href:"https://github.com/allinssl/allinssl"},{default:()=>[i("Star")]}),i(""),n("t_4_1747754235407")]})])});export{d as E,o as S};

View File

@@ -1 +1 @@
var t;import{S as e}from"./index-MIX_2uK-.js";import{A as o,M as n}from"./data-BG5jXh4E.js";import{l as a,d as s,c as r,N as i}from"./main-byVHXlrF.js";const l={},c={},p=new Set;for(const d in o)if(Object.prototype.hasOwnProperty.call(o,d)){const e=o[d];if(l[d]=e.name,c[d]=e.icon,null==e?void 0:e.hostRelated)for(const o in e.hostRelated)if(Object.prototype.hasOwnProperty.call(e.hostRelated,o)){const n=e.hostRelated[o],a=`${d}-${o}`;a&&(l[a]=(null==(t=null==n?void 0:n.name)?void 0:t.toString())??"",c[a]=e.icon)}}for(const d in n)if(Object.prototype.hasOwnProperty.call(n,d)){const t=n[d];l[d]=t.name,c[d]=t.type,p.add(d)}o.btwaf&&(c.btwaf="btpanel");const f=s({name:"AuthApiTypeIcon",props:{icon:{type:String,required:!0},type:{type:String,default:"default"},text:{type:Boolean,default:!0}},setup(t){const{iconPath:o,typeName:n}=function(t){return{iconPath:a((()=>(p.has(t.icon)?"notify-":"resources-")+(c[t.icon]||"default"))),typeName:a((()=>l[t.icon]||t.icon))}}(t);return()=>r(i,{type:t.type,size:"small"},{default:()=>[r(e,{icon:o.value,size:"1.2rem",class:"mr-[0.4rem]"},null),t.text&&r("span",{class:"text-[12px]"},[n.value])]})}});export{f as T};
var t;import{S as e}from"./index-xSmAfiwT.js";import{A as o,M as n}from"./data-BpRW_c-h.js";import{l as a,d as s,c as r,N as i}from"./main-BO_qvVyv.js";const l={},c={},p=new Set;for(const d in o)if(Object.prototype.hasOwnProperty.call(o,d)){const e=o[d];if(l[d]=e.name,c[d]=e.icon,null==e?void 0:e.hostRelated)for(const o in e.hostRelated)if(Object.prototype.hasOwnProperty.call(e.hostRelated,o)){const n=e.hostRelated[o],a=`${d}-${o}`;a&&(l[a]=(null==(t=null==n?void 0:n.name)?void 0:t.toString())??"",c[a]=e.icon)}}for(const d in n)if(Object.prototype.hasOwnProperty.call(n,d)){const t=n[d];l[d]=t.name,c[d]=t.type,p.add(d)}o.btwaf&&(c.btwaf="btpanel");const f=s({name:"AuthApiTypeIcon",props:{icon:{type:String,required:!0},type:{type:String,default:"default"},text:{type:Boolean,default:!0}},setup(t){const{iconPath:o,typeName:n}=function(t){return{iconPath:a((()=>(p.has(t.icon)?"notify-":"resources-")+(c[t.icon]||"default"))),typeName:a((()=>l[t.icon]||t.icon))}}(t);return()=>r(i,{type:t.type,size:"small"},{default:()=>[r(e,{icon:o.value,size:"1.2rem",class:"mr-[0.4rem]"},null),t.text&&r("span",{class:"text-[12px]"},[n.value])]})}});export{f as T};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{u as e}from"./useStore-D6u3-JR-.js";import{u as a,N as l}from"./index-BEscpGJe.js";import{r as u,x as t,o as s,aV as v,$ as d,d as o,c as r,w as n,q as i,n as p,B as y,i as c}from"./main-byVHXlrF.js";import{S as f}from"./index-MIX_2uK-.js";import{a as m,N as b}from"./business-DeaCYAUx.js";const _=o({name:"DnsProviderSelect",props:{type:{type:String,required:!0},path:{type:String,required:!0},value:{type:String,required:!0},valueType:{type:String,default:"value"},isAddMode:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},customClass:{type:String,default:""}},emits:["update:value"],setup(o,{emit:_}){const g=function(l,o){const{handleError:r}=a(),{fetchDnsProvider:n,resetDnsProvider:i,dnsProvider:p}=e(),y=u({label:"",value:"",type:""}),c=u([]),f=u(!1),m=u(""),b=()=>{var e,a,u,t,s;const v=p.value.find((e=>("value"===l.valueType?e.value:e.type)===y.value.value));v?(y.value={label:v.label,value:"value"===l.valueType?v.value:v.type,type:"value"===l.valueType?v.type:v.value},o("update:value",{...y.value})):""===y.value.value&&p.value.length>0&&(y.value={label:(null==(e=p.value[0])?void 0:e.label)||"",value:"value"===l.valueType?(null==(a=p.value[0])?void 0:a.value)||"":(null==(u=p.value[0])?void 0:u.type)||"",type:"value"===l.valueType?(null==(t=p.value[0])?void 0:t.type)||"":(null==(s=p.value[0])?void 0:s.value)||""},o("update:value",{...y.value}))},_=e=>{y.value.value=e,b()},g=async(e=l.type)=>{f.value=!0,m.value="";try{await n(e),l.value?(y.value.value=l.value,b()):b()}catch(a){m.value="string"==typeof a?a:d("t_0_1746760933542"),r(a)}finally{f.value=!1}};return t((()=>p.value),(e=>{var a;c.value=e.map((e=>({label:e.label,value:"value"===l.valueType?e.value:e.type,type:"value"===l.valueType?e.type:e.value})))||[],c.value.some((e=>e.value===y.value.value))?b():l.value&&c.value.some((e=>e.value===l.value))?(y.value.value=l.value,b()):""===y.value.value&&c.value.length>0&&(y.value.value=(null==(a=c.value[0])?void 0:a.value)||"",b())}),{deep:!0}),t((()=>l.value),(e=>{e!==y.value.value&&_(e)}),{immediate:!0}),t((()=>l.type),(e=>{g(e)})),s((async()=>{await g(l.type)})),v((()=>{i()})),{param:y,dnsProviderRef:c,isLoading:f,errorMessage:m,goToAddDnsProvider:()=>{window.open("/auth-api-manage","_blank")},handleUpdateValue:_,loadDnsProviders:g,handleFilter:(e,a)=>a.label.toLowerCase().includes(e.toLowerCase())}}(o,_),h=e=>r(b,{align:"center"},{default:()=>[r(f,{icon:`resources-${e.type}`,size:"2rem"},null),r(m,null,{default:()=>[e.label]})]});return()=>{let e;return r(l,{show:g.isLoading.value},{default:()=>[r(n,{cols:24,class:o.customClass},{default:()=>[r(i,{span:o.isAddMode?13:24,label:"dns"===o.type?d("t_3_1745735765112"):d("t_0_1746754500246"),path:o.path},{default:()=>[r(p,{class:"flex-1 w-full",filterable:!0,options:g.dnsProviderRef.value,renderLabel:h,renderTag:({option:e})=>(({option:e})=>r("div",{class:"flex items-center"},[e.label?h(e):r(m,{class:"text-[#aaa]"},{default:()=>["dns"===o.type?d("t_0_1747019621052"):d("t_0_1746858920894")]})]))({option:e}),filter:(e,a)=>g.handleFilter(e,a),placeholder:"dns"===o.type?d("t_3_1745490735059"):d("t_0_1746858920894"),value:g.param.value.value,onUpdateValue:g.handleUpdateValue,disabled:o.disabled},{empty:()=>r("span",{class:"text-[1.4rem]"},[g.errorMessage.value||("dns"===o.type?d("t_1_1746858922914"):d("t_2_1746858923964"))])})]}),o.isAddMode&&r(i,{span:11},{default:()=>{return[r(y,{class:"mx-[8px]",onClick:g.goToAddDnsProvider,disabled:o.disabled},{default:()=>["dns"===o.type?d("t_1_1746004861166"):d("t_3_1746858920060")]}),r(y,{onClick:()=>g.loadDnsProviders(o.type),loading:g.isLoading.value,disabled:o.disabled},(a=e=d("t_0_1746497662220"),"function"==typeof a||"[object Object]"===Object.prototype.toString.call(a)&&!c(a)?e:{default:()=>[e]}))];var a}})]})]})}}});export{_ as D};
import{u as e}from"./useStore-C1IReCiF.js";import{u as a,N as l}from"./index-fspvPnRK.js";import{r as u,x as t,o as s,aV as v,$ as d,d as o,c as r,w as n,q as i,n as p,B as y,i as c}from"./main-BO_qvVyv.js";import{S as f}from"./index-xSmAfiwT.js";import{a as m,N as b}from"./business-CftdAKwa.js";const _=o({name:"DnsProviderSelect",props:{type:{type:String,required:!0},path:{type:String,required:!0},value:{type:String,required:!0},valueType:{type:String,default:"value"},isAddMode:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},customClass:{type:String,default:""}},emits:["update:value"],setup(o,{emit:_}){const g=function(l,o){const{handleError:r}=a(),{fetchDnsProvider:n,resetDnsProvider:i,dnsProvider:p}=e(),y=u({label:"",value:"",type:""}),c=u([]),f=u(!1),m=u(""),b=()=>{var e,a,u,t,s;const v=p.value.find((e=>("value"===l.valueType?e.value:e.type)===y.value.value));v?(y.value={label:v.label,value:"value"===l.valueType?v.value:v.type,type:"value"===l.valueType?v.type:v.value},o("update:value",{...y.value})):""===y.value.value&&p.value.length>0&&(y.value={label:(null==(e=p.value[0])?void 0:e.label)||"",value:"value"===l.valueType?(null==(a=p.value[0])?void 0:a.value)||"":(null==(u=p.value[0])?void 0:u.type)||"",type:"value"===l.valueType?(null==(t=p.value[0])?void 0:t.type)||"":(null==(s=p.value[0])?void 0:s.value)||""},o("update:value",{...y.value}))},_=e=>{y.value.value=e,b()},g=async(e=l.type)=>{f.value=!0,m.value="";try{await n(e),l.value?(y.value.value=l.value,b()):b()}catch(a){m.value="string"==typeof a?a:d("t_0_1746760933542"),r(a)}finally{f.value=!1}};return t((()=>p.value),(e=>{var a;c.value=e.map((e=>({label:e.label,value:"value"===l.valueType?e.value:e.type,type:"value"===l.valueType?e.type:e.value})))||[],c.value.some((e=>e.value===y.value.value))?b():l.value&&c.value.some((e=>e.value===l.value))?(y.value.value=l.value,b()):""===y.value.value&&c.value.length>0&&(y.value.value=(null==(a=c.value[0])?void 0:a.value)||"",b())}),{deep:!0}),t((()=>l.value),(e=>{e!==y.value.value&&_(e)}),{immediate:!0}),t((()=>l.type),(e=>{g(e)})),s((async()=>{await g(l.type)})),v((()=>{i()})),{param:y,dnsProviderRef:c,isLoading:f,errorMessage:m,goToAddDnsProvider:()=>{window.open("/auth-api-manage","_blank")},handleUpdateValue:_,loadDnsProviders:g,handleFilter:(e,a)=>a.label.toLowerCase().includes(e.toLowerCase())}}(o,_),h=e=>r(b,{align:"center"},{default:()=>[r(f,{icon:`resources-${e.type}`,size:"2rem"},null),r(m,null,{default:()=>[e.label]})]});return()=>{let e;return r(l,{show:g.isLoading.value},{default:()=>[r(n,{cols:24,class:o.customClass},{default:()=>[r(i,{span:o.isAddMode?13:24,label:"dns"===o.type?d("t_3_1745735765112"):d("t_0_1746754500246"),path:o.path},{default:()=>[r(p,{class:"flex-1 w-full",filterable:!0,options:g.dnsProviderRef.value,renderLabel:h,renderTag:({option:e})=>(({option:e})=>r("div",{class:"flex items-center"},[e.label?h(e):r(m,{class:"text-[#aaa]"},{default:()=>["dns"===o.type?d("t_0_1747019621052"):d("t_0_1746858920894")]})]))({option:e}),filter:(e,a)=>g.handleFilter(e,a),placeholder:"dns"===o.type?d("t_3_1745490735059"):d("t_0_1746858920894"),value:g.param.value.value,onUpdateValue:g.handleUpdateValue,disabled:o.disabled},{empty:()=>r("span",{class:"text-[1.4rem]"},[g.errorMessage.value||("dns"===o.type?d("t_1_1746858922914"):d("t_2_1746858923964"))])})]}),o.isAddMode&&r(i,{span:11},{default:()=>{return[r(y,{class:"mx-[8px]",onClick:g.goToAddDnsProvider,disabled:o.disabled},{default:()=>["dns"===o.type?d("t_1_1746004861166"):d("t_3_1746858920060")]}),r(y,{onClick:()=>g.loadDnsProviders(o.type),loading:g.isLoading.value,disabled:o.disabled},(a=e=d("t_0_1746497662220"),"function"==typeof a||"[object Object]"===Object.prototype.toString.call(a)&&!c(a)?e:{default:()=>[e]}))];var a}})]})]})}}});export{_ as D};

View File

@@ -1 +1 @@
import{p as e,i as t,b as n,t as a,w as r,c as o,d as l,e as s,f as i}from"./index-Dw6Nd4ZZ.js";import{bI as u,ay as f,bJ as c,l as d,bK as v,o as g,bL as p,bM as w,r as m,x as y,V as h}from"./main-byVHXlrF.js";const b=n?window:void 0;function S(...e){const t=[],n=()=>{t.forEach((e=>e())),t.length=0},s=d((()=>{const t=a(c(e[0])).filter((e=>null!=e));return t.every((e=>"string"!=typeof e))?t:void 0})),i=r((()=>{var t,n;return[null!=(n=null==(t=s.value)?void 0:t.map((e=>function(e){var t;const n=c(e);return null!=(t=null==n?void 0:n.$el)?t:n}(e))))?n:[b].filter((e=>null!=e)),a(c(s.value?e[1]:e[0])),a(w(s.value?e[2]:e[1])),c(s.value?e[3]:e[2])]}),(([e,a,r,o])=>{if(n(),!(null==e?void 0:e.length)||!(null==a?void 0:a.length)||!(null==r?void 0:r.length))return;const s=l(o)?{...o}:o;t.push(...e.flatMap((e=>a.flatMap((t=>r.map((n=>((e,t,n,a)=>(e.addEventListener(t,n,a),()=>e.removeEventListener(t,n,a)))(e,t,n,s))))))))}),{flush:"post"});return o(n),()=>{i(),n()}}function N(e){const t=function(){const e=u(!1),t=p();return t&&g((()=>{e.value=!0}),t),e}();return d((()=>(t.value,Boolean(e()))))}const M=Symbol("vueuse-ssr-width");function O(){const e=v()?t(M,null):null;return"number"==typeof e?e:void 0}function E(t,n={}){const{window:a=b,ssrWidth:r=O()}=n,o=N((()=>a&&"matchMedia"in a&&"function"==typeof a.matchMedia)),l=u("number"==typeof r),s=u(),i=u(!1);return f((()=>{if(l.value){l.value=!o.value;const n=c(t).split(",");i.value=n.some((t=>{const n=t.includes("not all"),a=t.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),o=t.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let l=Boolean(a||o);return a&&l&&(l=r>=e(a[1])),o&&l&&(l=r<=e(o[1])),n?!l:l}))}else o.value&&(s.value=a.matchMedia(c(t)),i.value=s.value.matches)})),S(s,"change",(e=>{i.value=e.matches}),{passive:!0}),d((()=>i.value))}const I="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},J="__vueuse_ssr_handlers__",j=A();function A(){return J in I||(I[J]=I[J]||{}),I[J]}const _={boolean:{read:e=>"true"===e,write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},x="vueuse-storage";function D(e,t,n,a={}){var r;const{flush:o="pre",deep:l=!0,listenToStorageChanges:f=!0,writeDefaults:v=!0,mergeDefaults:g=!1,shallow:p,window:w=b,eventFilter:N,onError:M=e=>{},initOnMounted:O}=a,E=(p?u:m)("function"==typeof t?t():t),I=d((()=>c(e)));if(!n)try{n=function(e,t){return j[e]||t}("getDefaultStorage",(()=>{var e;return null==(e=b)?void 0:e.localStorage}))()}catch(T){M(T)}if(!n)return E;const J=c(t),A=function(e){return null==e?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":"boolean"==typeof e?"boolean":"string"==typeof e?"string":"object"==typeof e?"object":Number.isNaN(e)?"any":"number"}(J),D=null!=(r=a.serializer)?r:_[A],{pause:V,resume:k}=s(E,(()=>function(e){try{const t=n.getItem(I.value);if(null==e)z(t,null),n.removeItem(I.value);else{const a=D.write(e);t!==a&&(n.setItem(I.value,a),z(t,a))}}catch(T){M(T)}}(E.value)),{flush:o,deep:l,eventFilter:N});function z(e,t){if(w){const a={key:I.value,oldValue:e,newValue:t,storageArea:n};w.dispatchEvent(n instanceof Storage?new StorageEvent("storage",a):new CustomEvent(x,{detail:a}))}}function F(e){if(!e||e.storageArea===n)if(e&&null==e.key)E.value=J;else if(!e||e.key===I.value){V();try{(null==e?void 0:e.newValue)!==D.write(E.value)&&(E.value=function(e){const t=e?e.newValue:n.getItem(I.value);if(null==t)return v&&null!=J&&n.setItem(I.value,D.write(J)),J;if(!e&&g){const e=D.read(t);return"function"==typeof g?g(e,J):"object"!==A||Array.isArray(e)?e:{...J,...e}}return"string"!=typeof t?t:D.read(t)}(e))}catch(T){M(T)}finally{e?h(k):k()}}}function L(e){F(e.detail)}return y(I,(()=>F()),{flush:o}),w&&f&&i((()=>{n instanceof Storage?S(w,"storage",F,{passive:!0}):S(w,x,L),O&&F()})),O||F(),E}function V(e,t,n={}){const{window:a=b}=n;return D(e,t,null==a?void 0:a.localStorage,n)}function k(e,t,n={}){const{window:a=b}=n;return D(e,t,null==a?void 0:a.sessionStorage,n)}export{V as a,k as b,E as u};
import{p as e,i as t,b as n,t as a,w as r,c as o,d as l,e as s,f as i}from"./index-kqNzwJC_.js";import{bI as u,ay as f,bJ as c,l as d,bK as v,o as g,bL as p,bM as w,r as m,x as y,V as h}from"./main-BO_qvVyv.js";const b=n?window:void 0;function S(...e){const t=[],n=()=>{t.forEach((e=>e())),t.length=0},s=d((()=>{const t=a(c(e[0])).filter((e=>null!=e));return t.every((e=>"string"!=typeof e))?t:void 0})),i=r((()=>{var t,n;return[null!=(n=null==(t=s.value)?void 0:t.map((e=>function(e){var t;const n=c(e);return null!=(t=null==n?void 0:n.$el)?t:n}(e))))?n:[b].filter((e=>null!=e)),a(c(s.value?e[1]:e[0])),a(w(s.value?e[2]:e[1])),c(s.value?e[3]:e[2])]}),(([e,a,r,o])=>{if(n(),!(null==e?void 0:e.length)||!(null==a?void 0:a.length)||!(null==r?void 0:r.length))return;const s=l(o)?{...o}:o;t.push(...e.flatMap((e=>a.flatMap((t=>r.map((n=>((e,t,n,a)=>(e.addEventListener(t,n,a),()=>e.removeEventListener(t,n,a)))(e,t,n,s))))))))}),{flush:"post"});return o(n),()=>{i(),n()}}function N(e){const t=function(){const e=u(!1),t=p();return t&&g((()=>{e.value=!0}),t),e}();return d((()=>(t.value,Boolean(e()))))}const M=Symbol("vueuse-ssr-width");function O(){const e=v()?t(M,null):null;return"number"==typeof e?e:void 0}function E(t,n={}){const{window:a=b,ssrWidth:r=O()}=n,o=N((()=>a&&"matchMedia"in a&&"function"==typeof a.matchMedia)),l=u("number"==typeof r),s=u(),i=u(!1);return f((()=>{if(l.value){l.value=!o.value;const n=c(t).split(",");i.value=n.some((t=>{const n=t.includes("not all"),a=t.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),o=t.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let l=Boolean(a||o);return a&&l&&(l=r>=e(a[1])),o&&l&&(l=r<=e(o[1])),n?!l:l}))}else o.value&&(s.value=a.matchMedia(c(t)),i.value=s.value.matches)})),S(s,"change",(e=>{i.value=e.matches}),{passive:!0}),d((()=>i.value))}const I="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},J="__vueuse_ssr_handlers__",j=A();function A(){return J in I||(I[J]=I[J]||{}),I[J]}const _={boolean:{read:e=>"true"===e,write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},x="vueuse-storage";function D(e,t,n,a={}){var r;const{flush:o="pre",deep:l=!0,listenToStorageChanges:f=!0,writeDefaults:v=!0,mergeDefaults:g=!1,shallow:p,window:w=b,eventFilter:N,onError:M=e=>{},initOnMounted:O}=a,E=(p?u:m)("function"==typeof t?t():t),I=d((()=>c(e)));if(!n)try{n=function(e,t){return j[e]||t}("getDefaultStorage",(()=>{var e;return null==(e=b)?void 0:e.localStorage}))()}catch(T){M(T)}if(!n)return E;const J=c(t),A=function(e){return null==e?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":"boolean"==typeof e?"boolean":"string"==typeof e?"string":"object"==typeof e?"object":Number.isNaN(e)?"any":"number"}(J),D=null!=(r=a.serializer)?r:_[A],{pause:V,resume:k}=s(E,(()=>function(e){try{const t=n.getItem(I.value);if(null==e)z(t,null),n.removeItem(I.value);else{const a=D.write(e);t!==a&&(n.setItem(I.value,a),z(t,a))}}catch(T){M(T)}}(E.value)),{flush:o,deep:l,eventFilter:N});function z(e,t){if(w){const a={key:I.value,oldValue:e,newValue:t,storageArea:n};w.dispatchEvent(n instanceof Storage?new StorageEvent("storage",a):new CustomEvent(x,{detail:a}))}}function F(e){if(!e||e.storageArea===n)if(e&&null==e.key)E.value=J;else if(!e||e.key===I.value){V();try{(null==e?void 0:e.newValue)!==D.write(E.value)&&(E.value=function(e){const t=e?e.newValue:n.getItem(I.value);if(null==t)return v&&null!=J&&n.setItem(I.value,D.write(J)),J;if(!e&&g){const e=D.read(t);return"function"==typeof g?g(e,J):"object"!==A||Array.isArray(e)?e:{...J,...e}}return"string"!=typeof t?t:D.read(t)}(e))}catch(T){M(T)}finally{e?h(k):k()}}}function L(e){F(e.detail)}return y(I,(()=>F()),{flush:o}),w&&f&&i((()=>{n instanceof Storage?S(w,"storage",F,{passive:!0}):S(w,x,L),O&&F()})),O||F(),E}function V(e,t,n={}){const{window:a=b}=n;return D(e,t,null==a?void 0:a.localStorage,n)}function k(e,t,n={}){const{window:a=b}=n;return D(e,t,null==a?void 0:a.sessionStorage,n)}export{V as a,k as b,E as u};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{d as e,c as s}from"./main-byVHXlrF.js";const l=e({name:"BaseComponent",setup(e,{slots:l}){const t=l["header-left"]||l.headerLeft,f=l["header-right"]||l.headerRight,r=l.header,o=l["footer-left"]||l.footerLeft,a=l["footer-right"]||l.footerRight,i=l.footer;return()=>s("div",{class:"flex flex-col"},[r?s("div",{class:"flex justify-between flex-wrap w-full"},[r()]):(t||f)&&s("div",{class:"flex justify-between flex-wrap",style:{rowGap:"0.8rem"}},[s("div",{class:"flex flex-shrink-0"},[t&&t()]),s("div",{class:"flex flex-shrink-0"},[f&&f()])]),s("div",{class:`w-full content ${r||t||f?"mt-[1.2rem]":""} ${i||o||a?"mb-[1.2rem]":""}`},[l.content&&l.content()]),i?s("div",{class:"flex justify-between w-full"},[i()]):(o||a)&&s("div",{class:"flex justify-between"},[s("div",{class:"flex flex-shrink-0"},[o&&o()]),s("div",{class:"flex flex-shrink-0"},[a&&a()])]),l.popup&&l.popup()])}});export{l as B};
import{d as e,c as s}from"./main-BO_qvVyv.js";const l=e({name:"BaseComponent",setup(e,{slots:l}){const t=l["header-left"]||l.headerLeft,f=l["header-right"]||l.headerRight,r=l.header,o=l["footer-left"]||l.footerLeft,a=l["footer-right"]||l.footerRight,i=l.footer;return()=>s("div",{class:"flex flex-col"},[r?s("div",{class:"flex justify-between flex-wrap w-full"},[r()]):(t||f)&&s("div",{class:"flex justify-between flex-wrap",style:{rowGap:"0.8rem"}},[s("div",{class:"flex flex-shrink-0"},[t&&t()]),s("div",{class:"flex flex-shrink-0"},[f&&f()])]),s("div",{class:`w-full content ${r||t||f?"mt-[1.2rem]":""} ${i||o||a?"mb-[1.2rem]":""}`},[l.content&&l.content()]),i?s("div",{class:"flex justify-between w-full"},[i()]):(o||a)&&s("div",{class:"flex justify-between"},[s("div",{class:"flex flex-shrink-0"},[o&&o()]),s("div",{class:"flex flex-shrink-0"},[a&&a()])]),l.popup&&l.popup()])}});export{l as B};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{d as e,u as t,a as o,c as r,b as s,$ as l,B as a,i as c}from"./main-byVHXlrF.js";const m=(e=16,t)=>r("svg",{width:e,height:e,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",fill:t},[r("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M8.6 1c1.6.1 3.1.9 4.2 2 1.3 1.4 2 3.1 2 5.1 0 1.6-.6 3.1-1.6 4.4-1 1.2-2.4 2.1-4 2.4-1.6.3-3.2.1-4.6-.7-1.4-.8-2.5-2-3.1-3.5C.9 9.2.8 7.5 1.3 6c.5-1.6 1.4-2.9 2.8-3.8C5.4 1.3 7 .9 8.6 1zm.5 12.9c1.3-.3 2.5-1 3.4-2.1.8-1.1 1.3-2.4 1.2-3.8 0-1.6-.6-3.2-1.7-4.3-1-1-2.2-1.6-3.6-1.7-1.3-.1-2.7.2-3.8 1-1.1.8-1.9 1.9-2.3 3.3-.4 1.3-.4 2.7.2 4 .6 1.3 1.5 2.3 2.7 3 1.2.7 2.6.9 3.9.6zM7.9 7.5L10.3 5l.7.7-2.4 2.5 2.4 2.5-.7.7-2.4-2.5-2.4 2.5-.7-.7 2.4-2.5-2.4-2.5.7-.7 2.4 2.5z"},null)]),n=e({setup(){const e=t(),n=o(["baseColor","textColorBase","textColorSecondary","textColorDisabled"]);return()=>{let t;return r("div",{class:"flex flex-col items-center justify-center min-h-screen p-4",style:n.value},[r("div",{class:"text-center px-4 sm:px-8 max-w-[60rem] mx-auto"},[r("div",{class:"text-[4.5rem] sm:text-[6rem] md:text-[8rem] font-bold leading-none mb-2 sm:mb-4",style:{color:"var(--n-text-color-base)",textShadow:"2px 2px 8px rgba(0,0,0,0.25)"}},[s("404")]),r("div",{class:"flex items-center justify-center mb-4 sm:mb-8"},[m(60,"var(--n-text-color-base)")]),r("div",{class:"text-[1.2rem] sm:text-[1.5rem] md:text-[1.8rem] mb-4 sm:mb-8",style:{color:"var(--n-text-color-secondary)"}},[l("t_0_1744098811152")]),r(a,{style:{backgroundColor:"var(--n-text-color-base)",color:"var(--n-base-color)",border:"none"},onClick:()=>e.push("/")},(o=t=l("t_1_1744098801860"),"function"==typeof o||"[object Object]"===Object.prototype.toString.call(o)&&!c(o)?t:{default:()=>[t]})),r("div",{class:"mt-4 sm:mt-8 text-[1rem] sm:text-[1.1rem] md:text-[1.3rem]",style:{color:"var(--n-text-color-disabled)"}},[l("t_2_1744098804908")])])]);var o}}});export{n as default};
import{d as e,u as t,a as o,c as r,b as s,$ as l,B as a,i as c}from"./main-BO_qvVyv.js";const m=(e=16,t)=>r("svg",{width:e,height:e,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",fill:t},[r("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M8.6 1c1.6.1 3.1.9 4.2 2 1.3 1.4 2 3.1 2 5.1 0 1.6-.6 3.1-1.6 4.4-1 1.2-2.4 2.1-4 2.4-1.6.3-3.2.1-4.6-.7-1.4-.8-2.5-2-3.1-3.5C.9 9.2.8 7.5 1.3 6c.5-1.6 1.4-2.9 2.8-3.8C5.4 1.3 7 .9 8.6 1zm.5 12.9c1.3-.3 2.5-1 3.4-2.1.8-1.1 1.3-2.4 1.2-3.8 0-1.6-.6-3.2-1.7-4.3-1-1-2.2-1.6-3.6-1.7-1.3-.1-2.7.2-3.8 1-1.1.8-1.9 1.9-2.3 3.3-.4 1.3-.4 2.7.2 4 .6 1.3 1.5 2.3 2.7 3 1.2.7 2.6.9 3.9.6zM7.9 7.5L10.3 5l.7.7-2.4 2.5 2.4 2.5-.7.7-2.4-2.5-2.4 2.5-.7-.7 2.4-2.5-2.4-2.5.7-.7 2.4 2.5z"},null)]),n=e({setup(){const e=t(),n=o(["baseColor","textColorBase","textColorSecondary","textColorDisabled"]);return()=>{let t;return r("div",{class:"flex flex-col items-center justify-center min-h-screen p-4",style:n.value},[r("div",{class:"text-center px-4 sm:px-8 max-w-[60rem] mx-auto"},[r("div",{class:"text-[4.5rem] sm:text-[6rem] md:text-[8rem] font-bold leading-none mb-2 sm:mb-4",style:{color:"var(--n-text-color-base)",textShadow:"2px 2px 8px rgba(0,0,0,0.25)"}},[s("404")]),r("div",{class:"flex items-center justify-center mb-4 sm:mb-8"},[m(60,"var(--n-text-color-base)")]),r("div",{class:"text-[1.2rem] sm:text-[1.5rem] md:text-[1.8rem] mb-4 sm:mb-8",style:{color:"var(--n-text-color-secondary)"}},[l("t_0_1744098811152")]),r(a,{style:{backgroundColor:"var(--n-text-color-base)",color:"var(--n-base-color)",border:"none"},onClick:()=>e.push("/")},(o=t=l("t_1_1744098801860"),"function"==typeof o||"[object Object]"===Object.prototype.toString.call(o)&&!c(o)?t:{default:()=>[t]})),r("div",{class:"mt-4 sm:mt-8 text-[1rem] sm:text-[1.1rem] md:text-[1.3rem]",style:{color:"var(--n-text-color-disabled)"}},[l("t_2_1744098804908")])])]);var o}}});export{n as default};

View File

@@ -1 +1 @@
import{S as e}from"./index-MIX_2uK-.js";import{r as t,l,x as a,d as u,c as n,w as i,q as o,$ as s,n as r,b2 as d,bu as p,B as v,i as f}from"./main-byVHXlrF.js";import{u as c}from"./useStore-D6u3-JR-.js";import{M as y}from"./data-BG5jXh4E.js";import{a as m,N as b}from"./business-DeaCYAUx.js";function h(e){return"function"==typeof e||"[object Object]"===Object.prototype.toString.call(e)&&!f(e)}const g=u({name:"NotifyProviderSelect",props:{path:{type:String,default:""},value:{type:String,default:""},valueType:{type:String,default:"value",validator:e=>["value","type"].includes(e)},isAddMode:{type:Boolean,default:!1}},emits:{"update:value":e=>"object"==typeof e&&null!==e&&"label"in e&&"value"in e&&"type"in e},setup(u,{emit:f}){const{selectOptions:g,goToAddNotifyProvider:_,handleSelectUpdate:j,fetchNotifyProviderData:x}=function(e,u){const{fetchNotifyProvider:n,notifyProvider:i}=c(),o=t({label:"",value:"",type:""}),s=t([]),r=l((()=>Object.entries(y).map((([t,l])=>({label:l.name,value:"value"===e.valueType?t:l.type,type:l.type}))))),d=e=>{if(!e)return void(o.value={label:"",value:"",type:""});const t=s.value.find((t=>t.value===e));if(t)return void(o.value={...t});const l=r.value.find((t=>t.value===e));o.value=l?{...l}:{label:e,value:e,type:""}},p=()=>{n()};return a((()=>e.value),(e=>{0===s.value.length&&e&&p(),d(e)}),{immediate:!0}),a((()=>i.value),(t=>{t&&t.length>0?s.value=t.map((t=>({label:t.label,value:"value"===e.valueType?t.value:t.type,type:t.type}))):s.value=r.value,d(e.value)}),{immediate:!0,deep:!0}),i.value&&0!==i.value.length||(s.value=r.value,p()),{selectedOptionFull:o,selectOptions:s,goToAddNotifyProvider:()=>{window.open("/settings?tab=notification","_blank")},handleSelectUpdate:e=>{d(e),u("update:value",{...o.value})},fetchNotifyProviderData:p}}(u,f),S=({option:t})=>{let l;const a=t;return n("div",{class:"flex items-center"},[a.label?n(b,{align:"center",size:"small"},{default:()=>[n(e,{icon:`notify-${a.type||""}`,size:"1.6rem"},null),n(m,null,{default:()=>[a.label]})]}):n(m,{depth:"3"},h(l=s("t_0_1745887835267"))?l:{default:()=>[l]})])},N=t=>{const l=t;return n(b,{align:"center",size:"small"},{default:()=>[n(e,{icon:`notify-${l.type||""}`,size:"1.6rem"},null),n(m,null,{default:()=>[l.label]})]})},P=l((()=>g.value.map((e=>({...e})))));return()=>{let e,t;return n(i,{cols:24},{default:()=>[n(o,{span:u.isAddMode?13:24,label:s("t_1_1745887832941"),path:u.path},{default:()=>[n(r,{class:"flex-1 w-full",options:P.value,renderLabel:N,renderTag:S,filterable:!0,clearable:!0,placeholder:s("t_0_1745887835267"),value:u.value,onUpdateValue:j},{empty:()=>n("div",{class:"text-center py-4"},[n(m,{depth:"3",class:"text-[1.4rem]"},{default:()=>[0===g.value.length?s("t_0_1745887835267"):"暂无匹配的通知渠道"]})])})]}),u.isAddMode&&n(d,{span:11},{default:()=>[n("div",{class:"flex items-center h-full"},[n(p,{vertical:!0},null),n(v,{class:"mx-[8px]",onClick:_,ghost:!0},h(e=s("t_2_1745887834248"))?e:{default:()=>[e]}),n(v,{onClick:x,ghost:!0},h(t=s("t_0_1746497662220"))?t:{default:()=>[t]})])]})]})}}});export{g as N};
import{S as e}from"./index-xSmAfiwT.js";import{r as t,l,x as a,d as u,c as n,w as i,q as o,$ as s,n as r,b2 as d,bu as p,B as v,i as f}from"./main-BO_qvVyv.js";import{u as c}from"./useStore-C1IReCiF.js";import{M as y}from"./data-BpRW_c-h.js";import{a as m,N as b}from"./business-CftdAKwa.js";function h(e){return"function"==typeof e||"[object Object]"===Object.prototype.toString.call(e)&&!f(e)}const g=u({name:"NotifyProviderSelect",props:{path:{type:String,default:""},value:{type:String,default:""},valueType:{type:String,default:"value",validator:e=>["value","type"].includes(e)},isAddMode:{type:Boolean,default:!1}},emits:{"update:value":e=>"object"==typeof e&&null!==e&&"label"in e&&"value"in e&&"type"in e},setup(u,{emit:f}){const{selectOptions:g,goToAddNotifyProvider:_,handleSelectUpdate:j,fetchNotifyProviderData:x}=function(e,u){const{fetchNotifyProvider:n,notifyProvider:i}=c(),o=t({label:"",value:"",type:""}),s=t([]),r=l((()=>Object.entries(y).map((([t,l])=>({label:l.name,value:"value"===e.valueType?t:l.type,type:l.type}))))),d=e=>{if(!e)return void(o.value={label:"",value:"",type:""});const t=s.value.find((t=>t.value===e));if(t)return void(o.value={...t});const l=r.value.find((t=>t.value===e));o.value=l?{...l}:{label:e,value:e,type:""}},p=()=>{n()};return a((()=>e.value),(e=>{0===s.value.length&&e&&p(),d(e)}),{immediate:!0}),a((()=>i.value),(t=>{t&&t.length>0?s.value=t.map((t=>({label:t.label,value:"value"===e.valueType?t.value:t.type,type:t.type}))):s.value=r.value,d(e.value)}),{immediate:!0,deep:!0}),i.value&&0!==i.value.length||(s.value=r.value,p()),{selectedOptionFull:o,selectOptions:s,goToAddNotifyProvider:()=>{window.open("/settings?tab=notification","_blank")},handleSelectUpdate:e=>{d(e),u("update:value",{...o.value})},fetchNotifyProviderData:p}}(u,f),S=({option:t})=>{let l;const a=t;return n("div",{class:"flex items-center"},[a.label?n(b,{align:"center",size:"small"},{default:()=>[n(e,{icon:`notify-${a.type||""}`,size:"1.6rem"},null),n(m,null,{default:()=>[a.label]})]}):n(m,{depth:"3"},h(l=s("t_0_1745887835267"))?l:{default:()=>[l]})])},N=t=>{const l=t;return n(b,{align:"center",size:"small"},{default:()=>[n(e,{icon:`notify-${l.type||""}`,size:"1.6rem"},null),n(m,null,{default:()=>[l.label]})]})},P=l((()=>g.value.map((e=>({...e})))));return()=>{let e,t;return n(i,{cols:24},{default:()=>[n(o,{span:u.isAddMode?13:24,label:s("t_1_1745887832941"),path:u.path},{default:()=>[n(r,{class:"flex-1 w-full",options:P.value,renderLabel:N,renderTag:S,filterable:!0,clearable:!0,placeholder:s("t_0_1745887835267"),value:u.value,onUpdateValue:j},{empty:()=>n("div",{class:"text-center py-4"},[n(m,{depth:"3",class:"text-[1.4rem]"},{default:()=>[0===g.value.length?s("t_0_1745887835267"):"暂无匹配的通知渠道"]})])})]}),u.isAddMode&&n(d,{span:11},{default:()=>[n("div",{class:"flex items-center h-full"},[n(p,{vertical:!0},null),n(v,{class:"mx-[8px]",onClick:_,ghost:!0},h(e=s("t_2_1745887834248"))?e:{default:()=>[e]}),n(v,{onClick:x,ghost:!0},h(t=s("t_0_1746497662220"))?t:{default:()=>[t]})])]})]})}}});export{g as N};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{bI as e,bN as t,bO as n,bJ as a,bP as i,aS as o,bL as r,bK as s,A as u,x as c,o as l,V as f,J as m,r as p,bQ as v}from"./main-byVHXlrF.js";function b(e){return!!i()&&(o(e),!0)}const d=new WeakMap,w=(...e)=>{var t;const n=e[0],a=null==(t=r())?void 0:t.proxy;if(null==a&&!s())throw new Error("injectLocal must be called in setup");return a&&d.has(a)&&n in d.get(a)?d.get(a)[n]:u(...e)},g="undefined"!=typeof window&&"undefined"!=typeof document;"undefined"!=typeof WorkerGlobalScope&&(globalThis,WorkerGlobalScope);const h=Object.prototype.toString,y=e=>"[object Object]"===h.call(e),j=()=>{};function A(e,t){return function(...n){return new Promise(((a,i)=>{Promise.resolve(e((()=>t.apply(this,n)),{fn:t,thisArg:this,args:n})).then(a).catch(i)}))}}const F=e=>e();function S(e=F,n={}){const{initialState:a="active"}=n,i=function(...e){if(1!==e.length)return m(...e);const n=e[0];return"function"==typeof n?t(v((()=>({get:n,set:j})))):p(n)}("active"===a);return{isActive:t(i),pause:function(){i.value=!1},resume:function(){i.value=!0},eventFilter:(...t)=>{i.value&&e(...t)}}}function T(e){return e.endsWith("rem")?16*Number.parseFloat(e):Number.parseFloat(e)}function P(e){return Array.isArray(e)?e:[e]}function k(e,t=200,i=!1,o=!0,r=!1){return A(function(...e){let t,i,o,r,s,u,c=0,l=!0,f=j;n(e[0])||"object"!=typeof e[0]?[o,r=!0,s=!0,u=!1]=e:({delay:o,trailing:r=!0,leading:s=!0,rejectOnCancel:u=!1}=e[0]);const m=()=>{t&&(clearTimeout(t),t=void 0,f(),f=j)};return e=>{const n=a(o),p=Date.now()-c,v=()=>i=e();return m(),n<=0?(c=Date.now(),v()):(p>n&&(s||!l)?(c=Date.now(),v()):r&&(i=new Promise(((e,a)=>{f=u?a:e,t=setTimeout((()=>{c=Date.now(),l=!0,e(v()),m()}),Math.max(0,n-p))}))),s||t||(t=setTimeout((()=>l=!0),n)),l=!1,i)}}(t,i,o,r),e)}function x(e,t,n={}){const{eventFilter:a,initialState:i="active",...o}=n,{eventFilter:r,pause:s,resume:u,isActive:l}=S(a,{initialState:i}),f=function(e,t,n={}){const{eventFilter:a=F,...i}=n;return c(e,A(a,t),i)}(e,t,{...o,eventFilter:r});return{stop:f,pause:s,resume:u,isActive:l}}function D(e,t=!0,n){r()?l(e,n):t?e():f(e)}function O(n,i,o={}){const{immediate:r=!0,immediateCallback:s=!1}=o,u=e(!1);let c=null;function l(){c&&(clearTimeout(c),c=null)}function f(){u.value=!1,l()}function m(...e){s&&n(),l(),u.value=!0,c=setTimeout((()=>{u.value=!1,c=null,n(...e)}),a(i))}return r&&(u.value=!0,g&&m()),b(f),{isPending:t(u),start:m,stop:f}}function W(e,t,n){return c(e,t,{...n,immediate:!0})}export{k as a,g as b,b as c,y as d,x as e,D as f,w as i,T as p,P as t,O as u,W as w};
import{bI as e,bN as t,bO as n,bJ as a,bP as i,aS as o,bL as r,bK as s,A as u,x as c,o as l,V as f,J as m,r as p,bQ as v}from"./main-BO_qvVyv.js";function b(e){return!!i()&&(o(e),!0)}const d=new WeakMap,w=(...e)=>{var t;const n=e[0],a=null==(t=r())?void 0:t.proxy;if(null==a&&!s())throw new Error("injectLocal must be called in setup");return a&&d.has(a)&&n in d.get(a)?d.get(a)[n]:u(...e)},g="undefined"!=typeof window&&"undefined"!=typeof document;"undefined"!=typeof WorkerGlobalScope&&(globalThis,WorkerGlobalScope);const h=Object.prototype.toString,y=e=>"[object Object]"===h.call(e),j=()=>{};function A(e,t){return function(...n){return new Promise(((a,i)=>{Promise.resolve(e((()=>t.apply(this,n)),{fn:t,thisArg:this,args:n})).then(a).catch(i)}))}}const F=e=>e();function S(e=F,n={}){const{initialState:a="active"}=n,i=function(...e){if(1!==e.length)return m(...e);const n=e[0];return"function"==typeof n?t(v((()=>({get:n,set:j})))):p(n)}("active"===a);return{isActive:t(i),pause:function(){i.value=!1},resume:function(){i.value=!0},eventFilter:(...t)=>{i.value&&e(...t)}}}function T(e){return e.endsWith("rem")?16*Number.parseFloat(e):Number.parseFloat(e)}function P(e){return Array.isArray(e)?e:[e]}function k(e,t=200,i=!1,o=!0,r=!1){return A(function(...e){let t,i,o,r,s,u,c=0,l=!0,f=j;n(e[0])||"object"!=typeof e[0]?[o,r=!0,s=!0,u=!1]=e:({delay:o,trailing:r=!0,leading:s=!0,rejectOnCancel:u=!1}=e[0]);const m=()=>{t&&(clearTimeout(t),t=void 0,f(),f=j)};return e=>{const n=a(o),p=Date.now()-c,v=()=>i=e();return m(),n<=0?(c=Date.now(),v()):(p>n&&(s||!l)?(c=Date.now(),v()):r&&(i=new Promise(((e,a)=>{f=u?a:e,t=setTimeout((()=>{c=Date.now(),l=!0,e(v()),m()}),Math.max(0,n-p))}))),s||t||(t=setTimeout((()=>l=!0),n)),l=!1,i)}}(t,i,o,r),e)}function x(e,t,n={}){const{eventFilter:a,initialState:i="active",...o}=n,{eventFilter:r,pause:s,resume:u,isActive:l}=S(a,{initialState:i}),f=function(e,t,n={}){const{eventFilter:a=F,...i}=n;return c(e,A(a,t),i)}(e,t,{...o,eventFilter:r});return{stop:f,pause:s,resume:u,isActive:l}}function D(e,t=!0,n){r()?l(e,n):t?e():f(e)}function O(n,i,o={}){const{immediate:r=!0,immediateCallback:s=!1}=o,u=e(!1);let c=null;function l(){c&&(clearTimeout(c),c=null)}function f(){u.value=!1,l()}function m(...e){s&&n(),l(),u.value=!0,c=setTimeout((()=>{u.value=!1,c=null,n(...e)}),a(i))}return r&&(u.value=!0,g&&m()),b(f),{isPending:t(u),start:m,stop:f}}function W(e,t,n){return c(e,t,{...n,immediate:!0})}export{k as a,g as b,b as c,y as d,x as e,D as f,w as i,T as p,P as t,O as u,W as w};

View File

@@ -1 +1 @@
import{d as e,l as i,c as r}from"./main-byVHXlrF.js";const t=e({name:"SvgIcon",props:{icon:{type:String,required:!0},color:{type:String,default:""},size:{type:String,default:"1.8rem"}},setup(e){const t=i((()=>`#icon-${e.icon}`));return()=>r("svg",{class:"relative inline-block align-[-0.2rem]",style:{width:e.size,height:e.size},"aria-hidden":"true"},[r("use",{"xlink:href":t.value,fill:e.color},null)])}});export{t as S};
import{d as e,l as i,c as r}from"./main-BO_qvVyv.js";const t=e({name:"SvgIcon",props:{icon:{type:String,required:!0},color:{type:String,default:""},size:{type:String,default:"1.8rem"}},setup(e){const t=i((()=>`#icon-${e.icon}`));return()=>r("svg",{class:"relative inline-block align-[-0.2rem]",style:{width:e.size,height:e.size},"aria-hidden":"true"},[r("use",{"xlink:href":t.value,fill:e.color},null)])}});export{t as S};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{c as o,d as s}from"./index-BEscpGJe.js";const e=s=>o("/v1/login/sign",s),g=()=>s.get("/v1/login/get_code"),i=()=>o("/v1/login/sign-out",{}),v=s=>o("/v1/overview/get_overviews",s);export{g as a,v as g,e as l,i as s};
import{c as o,d as s}from"./index-fspvPnRK.js";const e=s=>o("/v1/login/sign",s),g=()=>s.get("/v1/login/get_code"),i=()=>o("/v1/login/sign-out",{}),v=s=>o("/v1/overview/get_overviews",s);export{g as a,v as g,e as l,i as s};

View File

@@ -1 +1 @@
import{c as t}from"./index-BEscpGJe.js";const e=e=>t("/v1/setting/get_setting",e),r=e=>t("/v1/setting/save_setting",e),s=e=>t("/v1/report/add_report",e),o=e=>t("/v1/report/upd_report",e),a=e=>t("/v1/report/del_report",e),p=e=>t("/v1/report/notify_test",e),i=e=>t("/v1/report/get_list",e);export{i as a,s as b,a as d,e as g,r as s,p as t,o as u};
import{c as t}from"./index-fspvPnRK.js";const e=e=>t("/v1/setting/get_setting",e),r=e=>t("/v1/setting/save_setting",e),s=e=>t("/v1/report/add_report",e),o=e=>t("/v1/report/upd_report",e),a=e=>t("/v1/report/del_report",e),p=e=>t("/v1/report/notify_test",e),i=e=>t("/v1/report/get_list",e);export{i as a,s as b,a as d,e as g,r as s,p as t,o as u};

View File

@@ -1 +1 @@
import{c1 as t,c2 as n,c3 as i}from"./main-byVHXlrF.js";var r=/\s/;var e=/^\s+/;function a(t){return t?t.slice(0,function(t){for(var n=t.length;n--&&r.test(t.charAt(n)););return n}(t)+1).replace(e,""):t}var o=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,f=/^0o[0-7]+$/i,c=parseInt;function v(i){if("number"==typeof i)return i;if(t(i))return NaN;if(n(i)){var r="function"==typeof i.valueOf?i.valueOf():i;i=n(r)?r+"":r}if("string"!=typeof i)return 0===i?i:+i;i=a(i);var e=u.test(i);return e||f.test(i)?c(i.slice(2),e?2:8):o.test(i)?NaN:+i}var s=function(){return i.Date.now()},l=Math.max,d=Math.min;function m(t,i,r){var e,a,o,u,f,c,m=0,p=!1,g=!1,h=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function x(n){var i=e,r=a;return e=a=void 0,m=n,u=t.apply(r,i)}function y(t){var n=t-c;return void 0===c||n>=i||n<0||g&&t-m>=o}function T(){var t=s();if(y(t))return w(t);f=setTimeout(T,function(t){var n=i-(t-c);return g?d(n,o-(t-m)):n}(t))}function w(t){return f=void 0,h&&e?x(t):(e=a=void 0,u)}function E(){var t=s(),n=y(t);if(e=arguments,a=this,c=t,n){if(void 0===f)return function(t){return m=t,f=setTimeout(T,i),p?x(t):u}(c);if(g)return clearTimeout(f),f=setTimeout(T,i),x(c)}return void 0===f&&(f=setTimeout(T,i)),u}return i=v(i)||0,n(r)&&(p=!!r.leading,o=(g="maxWait"in r)?l(v(r.maxWait)||0,i):o,h="trailing"in r?!!r.trailing:h),E.cancel=function(){void 0!==f&&clearTimeout(f),m=0,e=c=a=f=void 0},E.flush=function(){return void 0===f?u:w(s())},E}function p(t,i,r){var e=!0,a=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return n(r)&&(e="leading"in r?!!r.leading:e,a="trailing"in r?!!r.trailing:a),m(t,i,{leading:e,maxWait:i,trailing:a})}export{p as t};
import{c1 as t,c2 as n,c3 as i}from"./main-BO_qvVyv.js";var r=/\s/;var e=/^\s+/;function a(t){return t?t.slice(0,function(t){for(var n=t.length;n--&&r.test(t.charAt(n)););return n}(t)+1).replace(e,""):t}var o=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,f=/^0o[0-7]+$/i,c=parseInt;function v(i){if("number"==typeof i)return i;if(t(i))return NaN;if(n(i)){var r="function"==typeof i.valueOf?i.valueOf():i;i=n(r)?r+"":r}if("string"!=typeof i)return 0===i?i:+i;i=a(i);var e=u.test(i);return e||f.test(i)?c(i.slice(2),e?2:8):o.test(i)?NaN:+i}var s=function(){return i.Date.now()},l=Math.max,d=Math.min;function m(t,i,r){var e,a,o,u,f,c,m=0,p=!1,g=!1,h=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function x(n){var i=e,r=a;return e=a=void 0,m=n,u=t.apply(r,i)}function y(t){var n=t-c;return void 0===c||n>=i||n<0||g&&t-m>=o}function T(){var t=s();if(y(t))return w(t);f=setTimeout(T,function(t){var n=i-(t-c);return g?d(n,o-(t-m)):n}(t))}function w(t){return f=void 0,h&&e?x(t):(e=a=void 0,u)}function E(){var t=s(),n=y(t);if(e=arguments,a=this,c=t,n){if(void 0===f)return function(t){return m=t,f=setTimeout(T,i),p?x(t):u}(c);if(g)return clearTimeout(f),f=setTimeout(T,i),x(c)}return void 0===f&&(f=setTimeout(T,i)),u}return i=v(i)||0,n(r)&&(p=!!r.leading,o=(g="maxWait"in r)?l(v(r.maxWait)||0,i):o,h="trailing"in r?!!r.trailing:h),E.cancel=function(){void 0!==f&&clearTimeout(f),m=0,e=c=a=f=void 0},E.flush=function(){return void 0===f?u:w(s())},E}function p(t,i,r){var e=!0,a=!0;if("function"!=typeof t)throw new TypeError("Expected a function");return n(r)&&(e="leading"in r?!!r.leading:e,a="trailing"in r?!!r.trailing:a),m(t,i,{leading:e,maxWait:i,trailing:a})}export{p as t};

View File

@@ -1 +1 @@
import{e,s as a,r as t,l as o,$ as l}from"./main-byVHXlrF.js";import{a as s,b as n}from"./index--GqcFdsN.js";import{u as r}from"./index-BEscpGJe.js";import{a as i}from"./setting-BQLXtppO.js";import{i as u}from"./access-B61MZcFD.js";const m=e("layout-store",(()=>{const{handleError:e}=r(),a=s("layout-collapsed",!1),m=t([]),c=t([]),v=n("menu-active","home"),d=o((()=>"home"!==v.value?"var(--n-content-padding)":"0")),p=s("locales-active","zhCN"),h=t({mail:{name:l("t_68_1745289354676")},dingtalk:{name:l("t_32_1746773348993")},wecom:{name:l("t_33_1746773350932")},feishu:{name:l("t_34_1746773350153")},webhook:{name:"WebHook"}});return{isCollapsed:a,notifyProvider:m,dnsProvider:c,menuActive:v,layoutPadding:d,locales:p,pushSourceType:h,toggleCollapse:()=>{a.value=!a.value},handleCollapse:()=>{a.value=!0},handleExpand:()=>{a.value=!1},updateMenuActive:e=>{"logout"!==e&&(v.value=e)},resetDataInfo:()=>{v.value="home",sessionStorage.removeItem("menu-active")},fetchNotifyProvider:async()=>{try{m.value=[];const{data:e}=await i({p:1,search:"",limit:1e3}).fetch();m.value=(null==e?void 0:e.map((e=>({label:e.name,value:e.id.toString(),type:e.type}))))||[]}catch(a){e(a)}},fetchDnsProvider:async(a="")=>{try{c.value=[];const{data:e}=await u({type:a}).fetch();c.value=(null==e?void 0:e.map((e=>({label:e.name,value:e.id.toString(),type:e.type}))))||[]}catch(t){c.value=[],e(t)}},resetDnsProvider:()=>{c.value=[]}}})),c=()=>{const e=m();return{...e,...a(e)}};export{c as u};
import{e,s as a,r as t,l as o,$ as l}from"./main-BO_qvVyv.js";import{a as s,b as n}from"./index-C1G3lJXo.js";import{u as r}from"./index-fspvPnRK.js";import{a as i}from"./setting-DN-lNl-4.js";import{i as u}from"./access-uHYClSM1.js";const m=e("layout-store",(()=>{const{handleError:e}=r(),a=s("layout-collapsed",!1),m=t([]),c=t([]),v=n("menu-active","home"),d=o((()=>"home"!==v.value?"var(--n-content-padding)":"0")),p=s("locales-active","zhCN"),h=t({mail:{name:l("t_68_1745289354676")},dingtalk:{name:l("t_32_1746773348993")},wecom:{name:l("t_33_1746773350932")},feishu:{name:l("t_34_1746773350153")},webhook:{name:"WebHook"}});return{isCollapsed:a,notifyProvider:m,dnsProvider:c,menuActive:v,layoutPadding:d,locales:p,pushSourceType:h,toggleCollapse:()=>{a.value=!a.value},handleCollapse:()=>{a.value=!0},handleExpand:()=>{a.value=!1},updateMenuActive:e=>{"logout"!==e&&(v.value=e)},resetDataInfo:()=>{v.value="home",sessionStorage.removeItem("menu-active")},fetchNotifyProvider:async()=>{try{m.value=[];const{data:e}=await i({p:1,search:"",limit:1e3}).fetch();m.value=(null==e?void 0:e.map((e=>({label:e.name,value:e.id.toString(),type:e.type}))))||[]}catch(a){e(a)}},fetchDnsProvider:async(a="")=>{try{c.value=[];const{data:e}=await u({type:a}).fetch();c.value=(null==e?void 0:e.map((e=>({label:e.name,value:e.id.toString(),type:e.type}))))||[]}catch(t){c.value=[],e(t)}},resetDnsProvider:()=>{c.value=[]}}})),c=()=>{const e=m();return{...e,...a(e)}};export{c as u};

View File

@@ -1 +1 @@
import{c as e,u as a}from"./index-BEscpGJe.js";import{e as o,s as t,r as l,$ as r}from"./main-byVHXlrF.js";const w=a=>e("/v1/workflow/get_list",a),s=a=>e("/v1/workflow/del_workflow",a),c=a=>e("/v1/workflow/get_workflow_history",a),n=a=>e("/v1/workflow/get_exec_log",a),d=a=>e("/v1/workflow/execute_workflow",a),f=a=>e("/v1/workflow/exec_type",a),i=a=>e("/v1/workflow/active",a),u=o("work-edit-view-store",(()=>{const{handleError:o}=a(),t=l(!1),w=l(!1),s=l({id:"",name:"",content:"",active:"1",exec_type:"manual"}),c=l("quick"),n=l({id:"",name:"",childNode:{id:"start-1",name:"开始",type:"start",config:{exec_type:"manual"},childNode:null}});return{isEdit:t,detectionRefresh:w,workflowData:s,workflowType:c,workDefalutNodeData:n,resetWorkflowData:()=>{s.value={id:"",name:"",content:"",active:"1",exec_type:"manual"},n.value={id:"",name:"",childNode:{id:"start-1",name:"开始",type:"start",config:{exec_type:"manual"},childNode:null}},c.value="quick",t.value=!1},addNewWorkflow:async a=>{try{const{message:o,fetch:t}=(a=>e("/v1/workflow/add_workflow",a))(a);o.value=!0,await t()}catch(t){o(t).default(r("t_10_1745457486451"))}},updateWorkflowData:async a=>{try{const{message:o,fetch:t}=e("/v1/workflow/upd_workflow",a);o.value=!0,await t()}catch(t){o(t).default(r("t_11_1745457488256"))}}}})),k=()=>{const e=u();return{...e,...t(e)}};export{c as a,d as b,n as c,s as d,i as e,k as f,w as g,f as u};
import{c as e,u as a}from"./index-fspvPnRK.js";import{e as o,s as t,r as l,$ as r}from"./main-BO_qvVyv.js";const w=a=>e("/v1/workflow/get_list",a),s=a=>e("/v1/workflow/del_workflow",a),c=a=>e("/v1/workflow/get_workflow_history",a),n=a=>e("/v1/workflow/get_exec_log",a),d=a=>e("/v1/workflow/execute_workflow",a),f=a=>e("/v1/workflow/exec_type",a),i=a=>e("/v1/workflow/active",a),u=o("work-edit-view-store",(()=>{const{handleError:o}=a(),t=l(!1),w=l(!1),s=l({id:"",name:"",content:"",active:"1",exec_type:"manual"}),c=l("quick"),n=l({id:"",name:"",childNode:{id:"start-1",name:"开始",type:"start",config:{exec_type:"manual"},childNode:null}});return{isEdit:t,detectionRefresh:w,workflowData:s,workflowType:c,workDefalutNodeData:n,resetWorkflowData:()=>{s.value={id:"",name:"",content:"",active:"1",exec_type:"manual"},n.value={id:"",name:"",childNode:{id:"start-1",name:"开始",type:"start",config:{exec_type:"manual"},childNode:null}},c.value="quick",t.value=!1},addNewWorkflow:async a=>{try{const{message:o,fetch:t}=(a=>e("/v1/workflow/add_workflow",a))(a);o.value=!0,await t()}catch(t){o(t).default(r("t_10_1745457486451"))}},updateWorkflowData:async a=>{try{const{message:o,fetch:t}=e("/v1/workflow/upd_workflow",a);o.value=!0,await t()}catch(t){o(t).default(r("t_11_1745457488256"))}}}})),k=()=>{const e=u();return{...e,...t(e)}};export{c as a,d as b,n as c,s as d,i as e,k as f,w as g,f as u};

View File

@@ -1,131 +0,0 @@
// Type imports
import type { useAxiosReturn } from '@baota/hooks/axios'
import type {
AccessListParams,
AccessListResponse,
AddAccessParams,
DeleteAccessParams,
GetAccessAllListParams,
GetAccessAllListResponse,
UpdateAccessParams,
// CA授权相关类型
EabListParams,
EabListResponse,
EabAddParams,
EabUpdateParams,
EabDeleteParams,
EabGetAllListParams,
EabGetAllListResponse,
// 新增类型
TestAccessParams,
GetSitesParams,
GetSitesResponse,
} from '@/types/access' // Sorted types
import type { AxiosResponseData } from '@/types/public'
// Relative internal imports
import { useApi } from '@api/index'
/**
* @description 获取授权列表
* @param {AccessListParams} [params] 请求参数
* @returns {useAxiosReturn<AccessListResponse, AccessListParams>} 获取授权列表的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getAccessList = (params?: AccessListParams): useAxiosReturn<AccessListResponse, AccessListParams> =>
useApi<AccessListResponse, AccessListParams>('/v1/access/get_list', params)
/**
* @description 新增授权
* @param {AddAccessParams<string>} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, AddAccessParams<string>>} 新增授权的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const addAccess = (
params?: AddAccessParams<string>,
): useAxiosReturn<AxiosResponseData, AddAccessParams<string>> =>
useApi<AxiosResponseData, AddAccessParams<string>>('/v1/access/add_access', params)
/**
* @description 修改授权
* @param {UpdateAccessParams<string>} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, UpdateAccessParams<string>>} 修改授权的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const updateAccess = (
params?: UpdateAccessParams<string>,
): useAxiosReturn<AxiosResponseData, UpdateAccessParams<string>> =>
useApi<AxiosResponseData, UpdateAccessParams<string>>('/v1/access/upd_access', params)
/**
* @description 删除授权
* @param {DeleteAccessParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, DeleteAccessParams>} 删除授权的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const deleteAccess = (params?: DeleteAccessParams): useAxiosReturn<AxiosResponseData, DeleteAccessParams> =>
useApi<AxiosResponseData, DeleteAccessParams>('/v1/access/del_access', params)
/**
* @description 获取DNS提供商列表
* @param {GetAccessAllListParams} [params] 请求参数
* @returns {useAxiosReturn<GetAccessAllListResponse, GetAccessAllListParams>} 获取DNS提供商列表的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getAccessAllList = (
params?: GetAccessAllListParams,
): useAxiosReturn<GetAccessAllListResponse, GetAccessAllListParams> =>
useApi<GetAccessAllListResponse, GetAccessAllListParams>('/v1/access/get_all', params)
/**
* @description 获取CA授权列表
* @param {EabListParams} [params] 请求参数
* @returns {useAxiosReturn<EabListResponse, EabListParams>} 获取CA授权列表的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getEabList = (params?: EabListParams): useAxiosReturn<EabListResponse, EabListParams> =>
useApi<EabListResponse, EabListParams>('/v1/access/get_eab_list', params)
/**
* @description 添加CA授权
* @param {EabAddParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, EabAddParams>} 添加CA授权的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const addEab = (params?: EabAddParams): useAxiosReturn<AxiosResponseData, EabAddParams> =>
useApi<AxiosResponseData, EabAddParams>('/v1/access/add_eab', params)
/**
* @description 修改CA授权
* @param {EabUpdateParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, EabUpdateParams>} 修改CA授权的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const updateEab = (params?: EabUpdateParams): useAxiosReturn<AxiosResponseData, EabUpdateParams> =>
useApi<AxiosResponseData, EabUpdateParams>('/v1/access/upd_eab', params)
/**
* @description 删除CA授权
* @param {EabDeleteParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, EabDeleteParams>} 删除CA授权的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const deleteEab = (params?: EabDeleteParams): useAxiosReturn<AxiosResponseData, EabDeleteParams> =>
useApi<AxiosResponseData, EabDeleteParams>('/v1/access/del_eab', params)
/**
* @description 获取CA授权列表下拉框
* @param {EabGetAllListParams} [params] 请求参数
* @returns {useAxiosReturn<EabGetAllListResponse, EabGetAllListParams>} 获取CA授权列表下拉框的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getAllEabList = (
params?: EabGetAllListParams,
): useAxiosReturn<EabGetAllListResponse, EabGetAllListParams> =>
useApi<EabGetAllListResponse, EabGetAllListParams>('/v1/access/get_all_eab', params)
/**
* @description 测试授权API
* @param {TestAccessParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, TestAccessParams>} 测试授权的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const testAccess = (params?: TestAccessParams): useAxiosReturn<AxiosResponseData, TestAccessParams> =>
useApi<AxiosResponseData, TestAccessParams>('/v1/access/test_access', params)
/**
* @description 获取网站列表
* @param {GetSitesParams} [params] 请求参数
* @returns {useAxiosReturn<GetSitesResponse, GetSitesParams>} 获取网站列表的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getSites = (params?: GetSitesParams): useAxiosReturn<GetSitesResponse, GetSitesParams> =>
useApi<GetSitesResponse, GetSitesParams>('/v1/access/get_sites', params)

View File

@@ -1,61 +0,0 @@
// External library dependencies
import axios, { AxiosResponse } from 'axios'
// Type imports
import type { useAxiosReturn } from '@baota/hooks/axios'
import type {
ApplyCertParams,
ApplyCertResponse,
CertListParams,
CertListResponse,
DeleteCertParams,
DeleteCertResponse,
DownloadCertParams,
DownloadCertResponse, // Ensuring this type is imported
UploadCertParams,
UploadCertResponse,
} from '@/types/cert' // Path alias and sorted types
// Relative internal imports
import { useApi } from '@api/index'
/**
* @description 获取证书列表
* @param {CertListParams} [params] 请求参数
* @returns {useAxiosReturn<CertListResponse, CertListParams>} 获取证书列表的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getCertList = (params?: CertListParams): useAxiosReturn<CertListResponse, CertListParams> =>
useApi<CertListResponse, CertListParams>('/v1/cert/get_list', params)
/**
* @description 申请证书
* @param {ApplyCertParams} [params] 请求参数
* @returns {useAxiosReturn<ApplyCertResponse, ApplyCertParams>} 申请证书的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const applyCert = (params?: ApplyCertParams): useAxiosReturn<ApplyCertResponse, ApplyCertParams> =>
useApi<ApplyCertResponse, ApplyCertParams>('/v1/cert/apply_cert', params)
/**
* @description 上传证书
* @param {UploadCertParams} [params] 请求参数
* @returns {useAxiosReturn<UploadCertResponse, UploadCertParams>} 上传证书的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const uploadCert = (params?: UploadCertParams): useAxiosReturn<UploadCertResponse, UploadCertParams> =>
useApi<UploadCertResponse, UploadCertParams>('/v1/cert/upload_cert', params)
/**
* @description 删除证书
* @param {DeleteCertParams} [params] 请求参数
* @returns {useAxiosReturn<DeleteCertResponse, DeleteCertParams>} 删除证书的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const deleteCert = (params?: DeleteCertParams): useAxiosReturn<DeleteCertResponse, DeleteCertParams> =>
useApi<DeleteCertResponse, DeleteCertParams>('/v1/cert/del_cert', params)
/**
* @description 下载证书
* @param {DownloadCertParams} [params] 请求参数
* @returns {Promise<AxiosResponse<DownloadCertResponse>>} 下载结果的 Promise 对象。
*/
export const downloadCert = (params?: DownloadCertParams): Promise<AxiosResponse<DownloadCertResponse>> => {
return axios.get<DownloadCertResponse>('/v1/cert/download', { params })
}

View File

@@ -1,98 +0,0 @@
// External Libraries (sorted alphabetically by module path)
import { HttpClient, useAxios, useAxiosReturn } from '@baota/hooks/axios'
import { errorMiddleware } from '@baota/hooks/axios/model'
import { isDev } from '@baota/utils/browser'
import { AxiosError } from 'axios'
import MD5 from 'crypto-js/md5'
// Type Imports (sorted alphabetically by module path)
import type { AxiosResponseData } from '@/types/public'
import type { Ref } from 'vue'
// Relative Internal Imports (sorted alphabetically by module path)
import { router } from '@router/index'
/**
* @description 处理返回数据,如果状态码为 401 或 404
* @param {AxiosError} error 错误对象
* @returns {AxiosError} 错误对象
*/
export const responseHandleStatusCode = errorMiddleware((error: AxiosError) => {
// 处理 401 状态码
if (error.status === 401) {
router.push(`/login`)
}
// 处理404状态码
if (error.status === 404) {
// router.go(0) // 刷新页面
}
return error
})
/**
* @description 返回数据
* @param {T} data 数据
* @returns {AxiosResponseData<T>} 返回数据
*/
export const useApiReturn = <T>(data: T, message?: string): AxiosResponseData<T> => {
return {
code: 200,
count: 0,
data,
message: message || '请求返回值错误,请检查',
status: false,
} as AxiosResponseData<T>
}
/**
* @description 创建http客户端实例
*/
export const instance = new HttpClient({
baseURL: isDev() ? '/api' : '/',
timeout: 50000,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
middlewares: [responseHandleStatusCode],
})
/**
* @description API Token 结构
*/
interface ApiTokenResult {
api_token: string
timestamp: number
}
/**
* @description 创建api token
* @returns {ApiTokenResult} 包含API token和时间戳的对象
*/
export const createApiToken = (): ApiTokenResult => {
const now = new Date().getTime()
const apiKey = '123456' // 注意: 此处为硬编码密钥,建议后续优化
const api_token = MD5(now + MD5(apiKey).toString()).toString()
return { api_token, timestamp: now }
}
/**
* @description 创建axios请求
* @param {string} url 请求地址
* @param {Z} [params] 请求参数
* @returns {useAxiosReturn<T, Z>} 返回结果
*/
export const useApi = <T, Z = Record<string, unknown>>(url: string, params?: Z) => {
const { urlRef, paramsRef, ...other } = useAxios<T>(instance)
const apiParams = createApiToken()
urlRef.value = url
paramsRef.value = isDev() ? { ...(params || {}), ...apiParams } : params || {}
return { urlRef, paramsRef: paramsRef as Ref<Z>, ...other } as useAxiosReturn<T, Z>
}
// 导出所有模块
export * from './public'
export * from './workflow'
export * from './cert'
export * from './access'
export * from './monitor'
export * from './setting'

View File

@@ -1,60 +0,0 @@
// Type imports
import type { useAxiosReturn } from '@baota/hooks/axios'
import type {
AddSiteMonitorParams,
DeleteSiteMonitorParams,
SetSiteMonitorParams,
SiteMonitorListParams,
SiteMonitorListResponse,
UpdateSiteMonitorParams,
} from '@/types/monitor' // Sorted types
import type { AxiosResponseData } from '@/types/public'
// Relative internal imports
import { useApi } from '@api/index'
/**
* @description 获取站点监控列表
* @param {SiteMonitorListParams} [params] 请求参数
* @returns {useAxiosReturn<SiteMonitorListResponse, SiteMonitorListParams>} 获取站点监控列表的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getSiteMonitorList = (
params?: SiteMonitorListParams,
): useAxiosReturn<SiteMonitorListResponse, SiteMonitorListParams> =>
useApi<SiteMonitorListResponse, SiteMonitorListParams>('/v1/siteMonitor/get_list', params)
/**
* @description 新增站点监控
* @param {AddSiteMonitorParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, AddSiteMonitorParams>} 新增站点监控的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const addSiteMonitor = (params?: AddSiteMonitorParams): useAxiosReturn<AxiosResponseData, AddSiteMonitorParams> =>
useApi<AxiosResponseData, AddSiteMonitorParams>('/v1/siteMonitor/add_site_monitor', params)
/**
* @description 修改站点监控
* @param {UpdateSiteMonitorParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, UpdateSiteMonitorParams>} 修改站点监控的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const updateSiteMonitor = (
params?: UpdateSiteMonitorParams,
): useAxiosReturn<AxiosResponseData, UpdateSiteMonitorParams> =>
useApi<AxiosResponseData, UpdateSiteMonitorParams>('/v1/siteMonitor/upd_site_monitor', params)
/**
* @description 删除站点监控
* @param {DeleteSiteMonitorParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, DeleteSiteMonitorParams>} 删除站点监控的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const deleteSiteMonitor = (
params?: DeleteSiteMonitorParams,
): useAxiosReturn<AxiosResponseData, DeleteSiteMonitorParams> =>
useApi<AxiosResponseData, DeleteSiteMonitorParams>('/v1/siteMonitor/del_site_monitor', params)
/**
* @description 启用/禁用站点监控
* @param {SetSiteMonitorParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, SetSiteMonitorParams>} 启用/禁用站点监控的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const setSiteMonitor = (params?: SetSiteMonitorParams): useAxiosReturn<AxiosResponseData, SetSiteMonitorParams> =>
useApi<AxiosResponseData, SetSiteMonitorParams>('/v1/siteMonitor/set_site_monitor', params)

View File

@@ -1,47 +0,0 @@
// External library dependencies
import axios, { type AxiosResponse } from 'axios'
// Type imports
import type { useAxiosReturn } from '@baota/hooks/axios'
import type {
AxiosResponseData,
GetOverviewsParams,
GetOverviewsResponse,
loginCodeResponse, // Added this type based on usage
loginParams,
loginResponse,
} from '@/types/public' // Sorted types
// Relative internal imports
import { useApi } from '@api/index'
/**
* @description 登录
* @param {loginParams} [params] 登录参数
* @returns {useAxiosReturn<loginResponse, loginParams>} 登录操作的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const login = (params?: loginParams): useAxiosReturn<loginResponse, loginParams> =>
useApi<loginResponse, loginParams>('/v1/login/sign', params)
/**
* @description 获取登录验证码
* @returns {Promise<AxiosResponse<loginCodeResponse>>} 获取登录验证码的 Promise 对象。
*/
export const getLoginCode = (): Promise<AxiosResponse<loginCodeResponse>> => {
return axios.get<loginCodeResponse>('/v1/login/get_code')
}
/**
* @description 登出
* @returns {useAxiosReturn<AxiosResponseData, unknown>} 登出操作的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const signOut = (): useAxiosReturn<AxiosResponseData, unknown> =>
useApi<AxiosResponseData, unknown>('/v1/login/sign-out', {})
/**
* @description 获取首页概览
* @param {GetOverviewsParams} [params] 请求参数
* @returns {useAxiosReturn<GetOverviewsResponse, GetOverviewsParams>} 获取首页概览数据的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getOverviews = (params?: GetOverviewsParams): useAxiosReturn<GetOverviewsResponse, GetOverviewsParams> =>
useApi<GetOverviewsResponse, GetOverviewsParams>('/v1/overview/get_overviews', params)

View File

@@ -1,73 +0,0 @@
// Type imports
import type { useAxiosReturn } from '@baota/hooks/axios'
import type { AxiosResponseData } from '@/types/public'
import type {
AddReportParams,
DeleteReportParams,
GetReportListParams,
GetReportListResponse,
GetSettingParams,
GetSettingResponse,
SaveSettingParams,
TestReportParams,
UpdateReportParams,
} from '@/types/setting' // Sorted types
// Relative internal imports
import { useApi } from '@api/index'
/**
* @description 获取系统设置
* @param {GetSettingParams} [params] 请求参数
* @returns {useAxiosReturn<GetSettingResponse, GetSettingParams>} 获取系统设置的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getSystemSetting = (params?: GetSettingParams): useAxiosReturn<GetSettingResponse, GetSettingParams> =>
useApi<GetSettingResponse, GetSettingParams>('/v1/setting/get_setting', params)
/**
* @description 保存系统设置
* @param {SaveSettingParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, SaveSettingParams>} 保存系统设置的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const saveSystemSetting = (params?: SaveSettingParams): useAxiosReturn<AxiosResponseData, SaveSettingParams> =>
useApi<AxiosResponseData, SaveSettingParams>('/v1/setting/save_setting', params)
/**
* @description 添加告警
* @param {AddReportParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, AddReportParams>} 添加告警的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const addReport = (params?: AddReportParams): useAxiosReturn<AxiosResponseData, AddReportParams> =>
useApi<AxiosResponseData, AddReportParams>('/v1/report/add_report', params)
/**
* @description 更新告警
* @param {UpdateReportParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, UpdateReportParams>} 更新告警的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const updateReport = (params?: UpdateReportParams): useAxiosReturn<AxiosResponseData, UpdateReportParams> =>
useApi<AxiosResponseData, UpdateReportParams>('/v1/report/upd_report', params)
/**
* @description 删除告警
* @param {DeleteReportParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, DeleteReportParams>} 删除告警的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const deleteReport = (params?: DeleteReportParams): useAxiosReturn<AxiosResponseData, DeleteReportParams> =>
useApi<AxiosResponseData, DeleteReportParams>('/v1/report/del_report', params)
/**
* @description 测试告警
* @param {TestReportParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, TestReportParams>} 测试告警的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const testReport = (params?: TestReportParams): useAxiosReturn<AxiosResponseData, TestReportParams> =>
useApi<AxiosResponseData, TestReportParams>('/v1/report/notify_test', params)
/**
* @description 获取告警类型列表
* @param {GetReportListParams} [params] 请求参数
* @returns {useAxiosReturn<GetReportListResponse, GetReportListParams>} 获取告警类型列表的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getReportList = (params?: GetReportListParams): useAxiosReturn<GetReportListResponse, GetReportListParams> =>
useApi<GetReportListResponse, GetReportListParams>('/v1/report/get_list', params)

View File

@@ -1,97 +0,0 @@
// Type imports
import type { useAxiosReturn } from '@baota/hooks/axios'
import type { AxiosResponseData } from '@/types/public'
import type {
AddWorkflowParams,
DeleteWorkflowParams,
EnableWorkflowParams,
ExecuteWorkflowParams,
UpdateWorkflowExecTypeParams,
UpdateWorkflowParams,
WorkflowHistoryDetailParams,
WorkflowHistoryParams,
WorkflowHistoryResponse,
WorkflowListParams,
WorkflowListResponse,
} from '@/types/workflow' // Sorted types
// Relative internal imports
import { useApi } from '@api/index'
/**
* @description 获取工作流列表
* @param {WorkflowListParams} [params] 请求参数
* @returns {useAxiosReturn<WorkflowListResponse, WorkflowListParams>} 获取工作流列表的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getWorkflowList = (params?: WorkflowListParams): useAxiosReturn<WorkflowListResponse, WorkflowListParams> =>
useApi<WorkflowListResponse, WorkflowListParams>('/v1/workflow/get_list', params)
/**
* @description 新增工作流
* @param {AddWorkflowParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, AddWorkflowParams>} 新增工作流的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const addWorkflow = (params?: AddWorkflowParams): useAxiosReturn<AxiosResponseData, AddWorkflowParams> =>
useApi<AxiosResponseData, AddWorkflowParams>('/v1/workflow/add_workflow', params)
/**
* @description 修改工作流
* @param {UpdateWorkflowParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, UpdateWorkflowParams>} 修改工作流的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const updateWorkflow = (params?: UpdateWorkflowParams): useAxiosReturn<AxiosResponseData, UpdateWorkflowParams> =>
useApi<AxiosResponseData, UpdateWorkflowParams>('/v1/workflow/upd_workflow', params)
/**
* @description 删除工作流
* @param {DeleteWorkflowParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, DeleteWorkflowParams>} 删除工作流的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const deleteWorkflow = (params?: DeleteWorkflowParams): useAxiosReturn<AxiosResponseData, DeleteWorkflowParams> =>
useApi<AxiosResponseData, DeleteWorkflowParams>('/v1/workflow/del_workflow', params)
/**
* @description 获取工作流执行历史
* @param {WorkflowHistoryParams} [params] 请求参数
* @returns {useAxiosReturn<WorkflowHistoryResponse, WorkflowHistoryParams>} 获取工作流执行历史的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getWorkflowHistory = (
params?: WorkflowHistoryParams,
): useAxiosReturn<WorkflowHistoryResponse, WorkflowHistoryParams> =>
useApi<WorkflowHistoryResponse, WorkflowHistoryParams>('/v1/workflow/get_workflow_history', params)
/**
* @description 获取工作流执行历史详情
* @param {WorkflowHistoryDetailParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, WorkflowHistoryDetailParams>} 获取工作流执行历史详情的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const getWorkflowHistoryDetail = (
params?: WorkflowHistoryDetailParams,
): useAxiosReturn<AxiosResponseData, WorkflowHistoryDetailParams> =>
useApi<AxiosResponseData, WorkflowHistoryDetailParams>('/v1/workflow/get_exec_log', params)
/**
* @description 手动执行工作流
* @param {ExecuteWorkflowParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, ExecuteWorkflowParams>} 手动执行工作流的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const executeWorkflow = (params?: ExecuteWorkflowParams): useAxiosReturn<AxiosResponseData, ExecuteWorkflowParams> =>
useApi<AxiosResponseData, ExecuteWorkflowParams>('/v1/workflow/execute_workflow', params)
/**
* @description 修改工作流执行方式
* @param {UpdateWorkflowExecTypeParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, UpdateWorkflowExecTypeParams>} 修改工作流执行方式的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const updateWorkflowExecType = (
params?: UpdateWorkflowExecTypeParams,
): useAxiosReturn<AxiosResponseData, UpdateWorkflowExecTypeParams> =>
useApi<AxiosResponseData, UpdateWorkflowExecTypeParams>('/v1/workflow/exec_type', params)
/**
* @description 启用工作流或禁用工作流
* @param {EnableWorkflowParams} [params] 请求参数
* @returns {useAxiosReturn<AxiosResponseData, EnableWorkflowParams>} 启用或禁用工作流的组合式 API 调用封装。包含响应数据、加载状态及执行函数。
*/
export const enableWorkflow = (params?: EnableWorkflowParams): useAxiosReturn<AxiosResponseData, EnableWorkflowParams> =>
useApi<AxiosResponseData, EnableWorkflowParams>('/v1/workflow/active', params)

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747902416932" class="icon" viewBox="0 0 1273 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10903" width="49.7265625" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M692.017327 292.268083l29.243926 0.499287 79.457889-79.457889 3.851639-33.666179A355.634679 355.634679 0 0 0 567.409668 89.300966c-164.621909 0-303.566225 112.011372-344.693171 263.737423 8.673321-6.0485 27.21825-1.512125 27.21825-1.512125l158.773124-26.105554s8.159769-13.509268 12.296714-12.838797A198.002782 198.002782 0 0 1 567.509525 247.86011c47.075589 0.099857 90.442193 16.733232 124.507802 44.251054z" fill="#EA4335" p-id="10904"></path><path d="M912.302554 353.352227a357.674622 357.674622 0 0 0-107.774569-173.708925l-112.510658 112.510658c45.078443 36.376592 73.994267 92.03991 73.994267 154.350872v19.85734c54.736072 0 99.201106 44.564891 99.201105 99.201105 0 54.736072-44.564891 99.201106-99.201105 99.201106H567.609383L547.752043 684.735845v119.058445l19.85734 19.757482h198.402211A258.345128 258.345128 0 0 0 1024.000089 565.577542c-0.099857-87.803107-44.222523-165.477829-111.697535-212.21105z" fill="#4285F4" p-id="10905"></path><path d="M369.007457 823.68016h198.288089V664.764383h-198.288089a98.288124 98.288124 0 0 1-40.827375-8.873036l-28.630517 8.773178-79.457889 79.457889-6.961481 26.818821a256.775942 256.775942 0 0 0 155.862997 52.624802z" fill="#34A853" p-id="10906"></path><path d="M369.007457 307.70317A258.345128 258.345128 0 0 0 111.018962 565.6774c0 83.780284 40.128374 158.273837 102.225356 205.463549l115.035622-115.035622a99.286697 99.286697 0 0 1-58.473588-90.427927c0-54.736072 44.564891-99.201106 99.201105-99.201106 40.228231 0 74.807391 24.251061 90.442193 58.487854l115.035622-115.035622c-47.175447-62.096982-121.683266-102.225355-205.46355-102.225356z" fill="#FBBC05" p-id="10907"></path></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747988020538" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5468" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M776.399 1023.968H247.664a41.194 41.194 0 0 1-41.053-41.021V591.801a41.18 41.18 0 0 1 41.053-41.053h49.661v-63.227c0-118.393 96.346-214.675 214.675-214.675s214.674 96.347 214.674 214.675v63.228h49.661a41.18 41.18 0 0 1 41.05 41.052v391.145a41.167 41.167 0 0 1-40.986 41.055zM538.785 807.565a54.36 54.36 0 0 0-26.686-101.722h-0.128a54.4 54.4 0 0 0-27.073 101.558l0.256 0.128v52.989a26.782 26.782 0 0 0 53.565 0zM420.454 550.75H603.61v-63.228a91.547 91.547 0 0 0-183.093 0z m-226.418-58.3H66.46a37.47 37.47 0 1 1 0-74.939h127.576a37.47 37.47 0 1 1 0 74.939z m89.882-200.691h-0.1a37.06 37.06 0 0 1-23.743-8.575l0.064 0.064-100.89-82.971a37.483 37.483 0 1 1 47.677-57.852l-0.064-0.064 100.89 82.971a37.468 37.468 0 0 1-23.767 66.426h-0.1z m228.082-88.218a37.458 37.458 0 0 1-37.47-37.47V37.47a37.47 37.47 0 0 1 74.939 0v128.6a37.458 37.458 0 0 1-37.47 37.47z m228.085 88.217h-0.16a37.42 37.42 0 0 1-23.742-66.332l0.064-0.064 100.89-82.971a37.471 37.471 0 0 1 47.677 57.82l-0.064 0.064-100.89 82.971a37.184 37.184 0 0 1-23.711 8.479h-0.064zM957.54 492.449H828.748a37.47 37.47 0 1 1 0-74.939H957.54a37.47 37.47 0 1 1 0 74.939z" fill="#003A70" p-id="5469"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747901885171" class="icon" viewBox="0 0 1113 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5838" width="43.4765625" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M107.287 512.928c0-79.047-0.045-158.094 0.03-237.141 0.02-21.15 1.256-42.135 9.203-62.181 23.74-59.883 67.166-95.237 130.865-105.518 8.582-1.385 17.221-1.667 25.889-1.667 159.718 0.009 319.436-0.021 479.155 0.019 74.315 0.019 133.182 41.364 157.993 111.108 6.12 17.204 8.542 35.132 8.54 53.403-0.022 161.072 0.122 322.144-0.072 483.215-0.091 75.418-50.342 141.59-119.876 158.868-15.044 3.738-30.331 5.422-45.807 5.423-160.26 0.014-320.521 0.29-480.78-0.12-71.188-0.182-121.825-33.848-152.353-97.864-10.72-22.48-12.842-46.672-12.817-71.218 0.081-78.774 0.03-157.551 0.03-236.327z m283.66-4.813v136.454H254.062v138.583h138.402V645.64h138.004v137.437h138.576V644.705h137.443V505.977H668.339V367.658H530.496V229.98H391.685v138.154H254.216c-0.365 1.798-0.66 2.576-0.661 3.354-0.035 43.047 0.079 86.094-0.188 129.139-0.042 6.738 3.542 6.504 8.205 6.495 39.798-0.073 79.596-0.06 119.394-0.007 3.173 0.005 6.462-0.676 9.981 1z" fill="#4D70D4" p-id="5839"></path></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="m576 512 277.333 277.333-64 64L512 576 234.667 853.333l-64-64L448 512 170.667 234.667l64-64L512 448l277.333-277.333 64 64L576 512z"/></svg>

Before

Width:  |  Height:  |  Size: 250 B

View File

@@ -1 +0,0 @@
<svg viewBox="64 64 896 896" data-icon="solution" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M688 264c0-4.4-3.6-8-8-8H296c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h384c4.4 0 8-3.6 8-8v-48zm-8 136H296c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h384c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM480 544H296c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm-48 308H208V148h560v344c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V108c0-17.7-14.3-32-32-32H168c-17.7 0-32 14.3-32 32v784c0 17.7 14.3 32 32 32h264c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm356.8-74.4c29-26.3 47.2-64.3 47.2-106.6 0-79.5-64.5-144-144-144s-144 64.5-144 144c0 42.3 18.2 80.3 47.2 106.6-57 32.5-96.2 92.7-99.2 162.1-.2 4.5 3.5 8.3 8 8.3h48.1c4.2 0 7.7-3.3 8-7.6C564 871.2 621.7 816 692 816s128 55.2 131.9 124.4c.2 4.2 3.7 7.6 8 7.6H880c4.6 0 8.2-3.8 8-8.3-2.9-69.5-42.2-129.6-99.2-162.1zM692 591c44.2 0 80 35.8 80 80s-35.8 80-80 80-80-35.8-80-80 35.8-80 80-80z"/></svg>

Before

Width:  |  Height:  |  Size: 958 B

View File

@@ -1 +0,0 @@
<svg viewBox="64 64 896 896" data-icon="sisternode" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M672 432c-120.3 0-219.9 88.5-237.3 204H320c-15.5 0-28-12.5-28-28V244h291c14.2 35.2 48.7 60 89 60 53 0 96-43 96-96s-43-96-96-96c-40.3 0-74.8 24.8-89 60H112v72h108v364c0 55.2 44.8 100 100 100h114.7c17.4 115.5 117 204 237.3 204 132.5 0 240-107.5 240-240S804.5 432 672 432zm128 266c0 4.4-3.6 8-8 8h-86v86c0 4.4-3.6 8-8 8h-52c-4.4 0-8-3.6-8-8v-86h-86c-4.4 0-8-3.6-8-8v-52c0-4.4 3.6-8 8-8h86v-86c0-4.4 3.6-8 8-8h52c4.4 0 8 3.6 8 8v86h86c4.4 0 8 3.6 8 8v52z"/></svg>

Before

Width:  |  Height:  |  Size: 584 B

View File

@@ -1 +0,0 @@
<svg viewBox="64 64 896 896" data-icon="deployment-unit" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M888.3 693.2c-42.5-24.6-94.3-18-129.2 12.8l-53-30.7V523.6c0-15.7-8.4-30.3-22-38.1l-136-78.3v-67.1c44.2-15 76-56.8 76-106.1 0-61.9-50.1-112-112-112s-112 50.1-112 112c0 49.3 31.8 91.1 76 106.1v67.1l-136 78.3c-13.6 7.8-22 22.4-22 38.1v151.6l-53 30.7c-34.9-30.8-86.8-37.4-129.2-12.8-53.5 31-71.7 99.4-41 152.9 30.8 53.5 98.9 71.9 152.2 41 42.5-24.6 62.7-73 53.6-118.8l48.7-28.3 140.6 81c6.8 3.9 14.4 5.9 22 5.9s15.2-2 22-5.9L674.5 740l48.7 28.3c-9.1 45.7 11.2 94.2 53.6 118.8 53.3 30.9 121.5 12.6 152.2-41 30.8-53.6 12.6-122-40.7-152.9zm-673 138.4a47.6 47.6 0 0 1-65.2-17.6c-13.2-22.9-5.4-52.3 17.5-65.5a47.6 47.6 0 0 1 65.2 17.6c13.2 22.9 5.4 52.3-17.5 65.5zM522 463.8zM464 234a48.01 48.01 0 0 1 96 0 48.01 48.01 0 0 1-96 0zm170 446.2-122 70.3-122-70.3V539.8l122-70.3 122 70.3v140.4zm239.9 133.9c-13.2 22.9-42.4 30.8-65.2 17.6-22.8-13.2-30.7-42.6-17.5-65.5s42.4-30.8 65.2-17.6c22.9 13.2 30.7 42.5 17.5 65.5z"/></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="40" height="40"><path d="M64 512a448 448 0 1 0 896 0 448 448 0 1 0-896 0z" fill="#FA5151"/><path d="m557.3 512 113.1-113.1c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L512 466.7 398.9 353.6c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L466.7 512 353.6 625.1c-12.5 12.5-12.5 32.8 0 45.3 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4L512 557.3l113.1 113.1c6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4c12.5-12.5 12.5-32.8 0-45.3L557.3 512z" fill="#FFF"/></svg>

Before

Width:  |  Height:  |  Size: 538 B

View File

@@ -1 +0,0 @@
<svg viewBox="64 64 896 896" data-icon="send" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M931.4 498.9 94.9 79.5c-3.4-1.7-7.3-2.1-11-1.2a15.99 15.99 0 0 0-11.7 19.3l86.2 352.2c1.3 5.3 5.2 9.6 10.4 11.3l147.7 50.7-147.6 50.7c-5.2 1.8-9.1 6-10.3 11.3L72.2 926.5c-.9 3.7-.5 7.6 1.2 10.9 3.9 7.9 13.5 11.1 21.5 7.2l836.5-417c3.1-1.5 5.6-4.1 7.2-7.1 3.9-8 .7-17.6-7.2-21.6zM170.8 826.3l50.3-205.6 295.2-101.3c2.3-.8 4.2-2.6 5-5 1.4-4.2-.8-8.7-5-10.2L221.1 403 171 198.2l628 314.9-628.2 313.2z"/></svg>

Before

Width:  |  Height:  |  Size: 525 B

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="40" height="40"><path d="M64 512a448 448 0 1 0 896 0 448 448 0 1 0-896 0z" fill="#07C160"/><path d="M466.7 679.8c-8.5 0-16.6-3.4-22.6-9.4l-181-181.1c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l158.4 158.5 249-249c12.5-12.5 32.8-12.5 45.3 0s12.5 32.8 0 45.3L489.3 670.4c-6 6-14.1 9.4-22.6 9.4z" fill="#FFF"/></svg>

Before

Width:  |  Height:  |  Size: 398 B

View File

@@ -1 +0,0 @@
<svg viewBox="64 64 896 896" data-icon="cloud-upload" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M518.3 459a8 8 0 0 0-12.6 0l-112 141.7a7.98 7.98 0 0 0 6.3 12.9h73.9V856c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V613.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 459z"/><path d="M811.4 366.7C765.6 245.9 648.9 160 512.2 160S258.8 245.8 213 366.6C127.3 389.1 64 467.2 64 560c0 110.5 89.5 200 199.9 200H304c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8h-40.1c-33.7 0-65.4-13.4-89-37.7-23.5-24.2-36-56.8-34.9-90.6.9-26.4 9.9-51.2 26.2-72.1 16.7-21.3 40.1-36.8 66.1-43.7l37.9-9.9 13.9-36.6c8.6-22.8 20.6-44.1 35.7-63.4a245.6 245.6 0 0 1 52.4-49.9c41.1-28.9 89.5-44.2 140-44.2s98.9 15.3 140 44.2c19.9 14 37.5 30.8 52.4 49.9 15.1 19.3 27.1 40.7 35.7 63.4l13.8 36.5 37.8 10C846.1 454.5 884 503.8 884 560c0 33.1-12.9 64.3-36.3 87.7a123.07 123.07 0 0 1-87.6 36.3H720c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h40.1C870.5 760 960 670.5 960 560c0-92.7-63.1-170.7-148.6-193.3z"/></svg>

Before

Width:  |  Height:  |  Size: 968 B

View File

@@ -1 +0,0 @@
<svg class="icon" width="30" height="30" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M717.62 682.138h116.582l-212.02 296.396-5.12-1.792 46.08-194.816h-91.136c10.24-47.257 20.07-91.648 30.72-140.185-25.907 7.782-48.537 12.288-69.17 21.299-44.698 19.456-84.89 11.162-121.14-17.613a455.68 455.68 0 0 1-66.97-63.232c-20.48-24.473-13.977-38.451 17.05-43.673 65.69-11.06 131.584-20.788 197.58-33.076h-41.42c-56.78-.563-113.613-1.484-170.394-1.69-34.867 0-59.443-18.175-80.486-43.468a272.589 272.589 0 0 1-54.989-110.848c-6.451-26.01.666-33.178 27.495-26.931 67.84 15.77 135.577 32.102 203.417 47.974a1030.195 1030.195 0 0 0 105.165 20.173c-40.96-13.62-82.74-26.112-123.34-40.96-61.953-22.938-122.88-47.923-184.833-71.68a66.56 66.56 0 0 1-38.963-37.376c-24.115-54.989-42.138-111.565-42.547-172.288 0-22.118 7.219-27.546 26.214-18.33C378.88 143.36 578.918 222.31 779.571 299.315a288.666 288.666 0 0 1 54.989 29.747c33.331 22.17 44.186 50.125 26.931 85.248-35.43 72.09-74.393 142.439-112.23 213.35-9.472 17.46-20.02 34.407-31.642 54.478z" fill="#59ADF8"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +0,0 @@
<svg class="icon" width="30" height="30" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M512 0q512 0 512 512t-512 512Q0 1024 0 512T512 0z" fill="#FFF"/><path d="M832.032 367.205c4.123.024 8.243.265 12.34.723a345.91 345.91 0 0 1 91.865 25.368c8.523 3.818 10.629 6.91 3.291 14.608a296.456 296.456 0 0 0-51.46 75.942c-14.15 29.776-29.614 58.928-44.09 88.576a190.048 190.048 0 0 1-43.992 58.567c-45.276 40.963-98.052 58.238-158.264 49.88-69.096-9.575-134.541-32.903-196.365-63.667-3.85-1.908-6.581-3.29-8.851-4.672a4.483 4.483 0 0 1-2.096-3.943 4.483 4.483 0 0 1 2.358-3.79l4.278-2.304c50.079-26.749 91.866-64.027 132.138-103.216 17.011-16.451 33.331-33.725 50.507-50.045a291.126 291.126 0 0 1 135.2-72.387c11.12-2.666 22.34-4.837 33.527-7.239h.528l23.82-2.204" fill="#133C9A"/><path d="M348.029 850.682c-7.6-.428-26.322-2.994-28.56-3.29a452.614 452.614 0 0 1-139.312-40.734c-25.466-11.91-49.98-25.96-74.559-39.648-16.155-9.016-23.492-23.032-23.328-42.05.528-70.347.528-140.704 0-211.074-.262-45.275-1.579-90.548-2.27-135.792a36.602 36.602 0 0 1 1.875-11.744c2.731-8.16 8.359-8.656 13.92-3.29 6.416 6.185 11.515 13.686 17.866 19.74 56.856 56 117.1 107.296 184.651 149.546a1017.56 1017.56 0 0 0 118.451 65.246c65.642 29.81 132.928 56.1 203.44 72.78 62.285 14.742 122.861 5.463 173.333-34.086 15.4-13.161 23.034-22.803 41.294-47.118a303.662 303.662 0 0 1-31.555 61.464c-11.745 18.491-38.2 43.168-58.368 62.515-30.633 29.613-70.677 53.632-108.253 73.901-40.963 22.078-83.54 39.714-129.044 49.354-23.328 5.824-57.023 12.504-68.637 13.161-2.04-.165-8.983 1.415-12.536 1.12-29.975 2.269-48.466 3.125-78.408 0z" fill="#3370FF"/><path d="M219.28 172.912a44.256 44.256 0 0 1 6.283 0c128.848 0 256.645 2.072 385.328 2.072.224 0 .443.069.626.198a303.498 303.498 0 0 1 33.133 33.856c29.054 28.89 50.704 78.968 65.51 109.503 7.371 21.091 18.491 41.26 23.757 64.752v.429a281.552 281.552 0 0 0-38.3 15.596c-37.214 18.887-54.126 32.672-85.022 63.108-16.813 16.45-31.192 31.29-53.533 52.348-7.008 6.581-24.841 23.264-25.137 22.736-5.923-10.464-106.08-206.4-307.283-360.552" fill="#00D6B9"/></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1 +0,0 @@
<svg class="icon" width="30" height="30" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M906.667 266.667v640h-832v-640h832zM585.259 623.872l-94.592 94.592-94.614-94.613-218.837 218.816h626.88L585.259 623.85zm257.408-257.43-212.139 212.14 212.139 212.16v-424.32zm-704 0V790.72l212.138-212.117-212.138-212.139zm649.28-35.775H193.365l297.302 297.301 297.28-297.301z" fill="#1677FF"/></svg>

Before

Width:  |  Height:  |  Size: 407 B

View File

@@ -1 +0,0 @@
<svg class="icon" width="30" height="30" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M446.293 810.667C384 898.987 262.4 921.173 174.507 859.733 87.04 798.293 66.56 675.84 128 586.667a195.627 195.627 0 0 1 152.747-84.48l2.133 61.013c-38.827 2.987-76.373 23.04-100.693 58.027-42.667 61.44-29.44 144.213 29.013 185.6 58.88 40.96 141.227 25.173 183.893-35.84 13.227-19.2 20.907-40.107 23.894-61.44v-43.094l238.08-1.706 2.986-4.694c22.614-39.253 71.68-52.906 110.08-30.72a81.067 81.067 0 0 1 29.014 110.934c-22.614 38.826-72.107 52.48-110.507 30.293-17.493-9.813-29.867-25.6-35.413-43.52l-173.654.853a211.627 211.627 0 0 1-33.28 82.774m310.614-304.64c107.946 13.226 184.746 110.08 171.52 216.32-13.227 106.666-111.36 182.186-219.307 168.96a197.504 197.504 0 0 1-146.347-94.294l52.907-30.72a137.387 137.387 0 0 0 98.987 61.867c74.666 8.96 140.8-41.813 149.76-113.067 8.96-71.253-43.947-136.533-117.76-145.493-23.04-2.56-45.227.427-65.28 7.68l-36.267 18.773-110.08-203.52h-9.387a81.323 81.323 0 0 1-78.933-83.2C448 264.96 486.4 230.4 531.2 232.107c44.8 2.56 80.213 38.826 78.933 83.2-.853 18.773-8.106 35.84-19.626 49.066l81.066 149.76c26.454-8.533 55.467-11.52 85.334-8.106M352 389.973c-42.667-100.266 2.56-215.04 101.12-256.853 98.987-41.813 213.333 5.547 256 105.813 25.173 58.454 20.053 122.454-8.533 173.654l-52.907-30.72c17.92-34.56 20.907-76.8 3.84-116.48C622.507 197.12 545.28 164.267 479.147 192c-66.56 28.16-96.427 106.667-67.414 174.933 11.947 28.16 32 49.92 56.32 64.427l16.64 8.96-130.986 212.907c1.28 2.133 2.986 4.693 4.266 8.106 20.907 38.827 6.4 87.894-32.853 108.8-38.827 20.907-87.893 5.547-109.227-34.56-20.906-39.68-6.4-88.746 32.854-109.653 16.64-8.96 34.986-11.093 52.48-7.253l98.56-160.854c-20.054-18.346-37.12-41.386-47.787-67.84z" fill="#44A3F3"/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -1 +0,0 @@
<svg class="icon" width="30" height="30" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"><path d="M803.6 859.2c0 26.6-20.4 49.2-48.4 51.8-21.2 2-48.6-11-54.8-39.8-5.6-26-13.2-50.8-29-72.4-6-8.2-12.8-16-20-23.4-7.6-8-9.4-14-4.4-19.8 5-5.8 12.8-5 20.8 3.2 20.8 21 45.4 35.2 73.6 43.6 7.2 2.2 14.8 3.4 22.2 5.2 24.6 6.2 40 26.2 40 51.6z" fill="#FC6401"/><path d="M698.2 549.8c.2-28.4 20.8-50.2 49.6-52.6 25.6-2.2 50.6 17.6 55 45.2 6 36.2 22.8 66.2 48.4 92 3.2 3.2 5.6 9.2 5.2 13.8-.4 7.2-9.8 10.6-16.2 6.4-3.4-2.2-6.2-5-9-7.8-25.4-24.6-55.6-39.4-90.4-45.4-24.8-4.6-42.6-26.2-42.6-51.6z" fill="#2DBD00"/><path d="M595.4 765.2c-26.6 0-49.2-20.4-51.8-48.4-2-21.2 11-48.6 39.8-54.8 26-5.6 50.8-13.2 72.4-29 8.2-6 16-12.8 23.4-20 8-7.6 14-9.4 19.8-4.4 5.8 5 5 12.8-3.2 20.8-21 20.8-35.2 45.4-43.6 73.6-2.2 7.2-3.4 14.8-5.2 22.2-6.2 24.6-26.2 40-51.6 40z" fill="#FFCD00"/><path d="M898.8 650c28.4.2 50.2 20.8 52.6 49.6 2.2 25.6-17.6 50.6-45.2 55-36.2 6-66.2 22.8-92 48.4-3.2 3.2-9.2 5.6-13.8 5.2-7.2-.4-10.6-9.8-6.4-16.2 2.2-3.4 5-6.2 7.8-9 24.6-25.4 39.4-55.6 45.4-90.4 4.6-25 26.2-42.8 51.6-42.6z" fill="#0084F0"/><path d="M734 208.6c-110.4-108.4-244.8-139.8-392.4-100-260 70.2-340.4 340.6-209 517 6.4 8.6 7.6 24.4 5.2 35.4-7 32.4-17.4 64.2-26 96.2-4.6 17.2-7.4 34.6 8 48.4 16.6 14.8 34.2 11.8 52.2 2.6 29.6-15 59.8-29.2 89-45 19-10.4 36.2-10.8 57.6-4.8 42.8 11.8 87.2 18.4 109.6 23 43.8-.8 83.6-5.2 120.2-13.6-13.8-12-23-29.2-24.8-49-.4-5.4-.2-10.8.6-16.2C466.4 715 405 710 341 688.6c-42.2-14.2-76.8-17.8-113.4 7-3.4 2.2-7.8 2.8-24.6 8.2 33.8-58.4 8.8-95-19.6-136.6-63.4-92-50.4-210.8 24.6-296.4C330.8 131 571 131 693.8 271c52.8 60.2 73.6 135.2 61.8 206.2 28 1.6 52.8 20.6 63 47.2 32-108.8 4-228.8-84.6-315.8z" fill="#0083EF"/></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M939.94 459.073h-377.6V83.519H462.055v375.554h-377.6v100.284h377.6v379.646H562.34V559.357h377.6z"/></svg>

Before

Width:  |  Height:  |  Size: 216 B

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="40" height="40"><path d="M69.53 0h884.94v1024H69.53z" fill="none"/><path d="M79.56 259.856v503.572l435.095 250.732 434.041-250.732-1.054-502.519L514.655 10.177 79.56 259.856z" fill="#005EFD"/><path d="M93.256 268.284V755l422.452 241.25L935 753.947V268.284L513.601 25.979 93.256 268.284z" fill="#FFF"/><path d="m139.61 294.621 95.868 56.89 371.885-218.075L513.6 79.708 139.61 294.62z" fill="#005EFD"/><path d="M139.61 293.568v435.094l243.358 139.062 92.707-55.835-241.25-140.116 1.053-320.263-95.868-57.942zm651.66 56.528v321.78l95.27 55.733V294.364L645.75 154.506l-94.223 55.732L791.27 350.096z" fill="#0854C1"/><path d="m420.893 886.47 93.34 56.052L886.54 727.83l-94.388-57.11-371.259 215.75zm-35.818-469.643h49.88v280.23l93.395 55.836V278.819l-143.275 81.12v56.888z" fill="#005EFD"/><path d="m528.35 752.893 31.605-16.856V295.675l-31.605-16.856v474.074z" fill="#0854C1"/></svg>

Before

Width:  |  Height:  |  Size: 963 B

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="40" height="40"><path d="M1020.587 361.813c0-92.16-75.094-167.253-167.254-167.253h-266.24l23.894 95.573 228.693 51.2c20.48 3.414 37.547 23.894 37.547 44.374v245.76c0 20.48-17.067 40.96-37.547 44.373l-228.693 51.2-27.307 92.16h266.24c92.16 0 167.253-75.093 167.253-167.253 3.414 0 3.414-290.134 3.414-290.134zM187.733 672.427c-20.48-3.414-37.546-23.894-37.546-44.374v-245.76c0-20.48 17.066-40.96 37.546-44.373l228.694-51.2 23.893-95.573H174.08C81.92 191.147 6.827 266.24 6.827 358.4v290.133c0 92.16 75.093 167.254 167.253 167.254h266.24l-23.893-95.574c0 3.414-228.694-47.786-228.694-47.786zM402.773 460.8h218.454v88.747H402.773V460.8z" fill="#ff6b01"/></svg>

Before

Width:  |  Height:  |  Size: 741 B

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747219302071" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7813" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M0 0h1024v1024H0z" fill="#FFFFFF" p-id="7814"></path><path d="M705.024 658.901333L557.098667 738.133333A82.304 82.304 0 0 0 512 811.818667V934.4l353.578667-188.416a25.514667 25.514667 0 0 0 14.250666-22.826667V345.941333l-115.114666 60.16a82.304 82.304 0 0 0-45.056 73.685334v154.794666c-0.426667 11.221333-6.357333 18.688-14.634667 24.32" fill="#DA4725" p-id="7815"></path><path d="M304.768 637.397333v-155.306666c0-30.378667-16.64-58.496-45.098667-73.898667l-115.498666-62.293333v376.618666c0 9.386667 6.314667 18.773333 14.250666 22.869334L512 934.442667v-123.008c0-30.378667-16.64-58.538667-45.098667-73.898667l-147.925333-77.653333c-8.277333-5.632-14.208-13.141333-14.208-22.485334" fill="#028DCF" p-id="7816"></path><path d="M665.770667 181.333333l-140.458667-88.661333a31.530667 31.530667 0 0 0-27.392 0L162.56 303.914667l109.269333 67.328c27.434667 16.725333 60.458667 16.725333 86.016 0l140.458667-88.661334c1.877333-2.090667 3.754667-2.090667 5.973333-2.090666a25.856 25.856 0 0 1 21.418667 2.090666l140.458667 88.661334c27.434667 16.725333 60.458667 16.725333 86.016 0l109.226666-67.328-195.626666-122.538667z" fill="#72AE2C" p-id="7817"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747041966838" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7167" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M654.7456 646.5536c5.4784-17.408 3.6864-34.7648-5.4784-45.2096s-22.016-17.408-38.5024-19.1488l-318.976-3.4816c-1.8432 0-3.6864-1.7408-5.4784-1.7408-1.8432-1.7408-1.8432-3.4816 0-5.2224 1.8432-3.4816 3.6864-5.2224 7.3216-5.2224l320.8192-3.4816c38.5024-1.7408 78.848-31.2832 93.4912-66.048l18.3296-45.2096c0-1.7408 1.8432-3.4816 0-5.2224C706.048 357.888 621.7216 291.84 522.752 291.84c-91.648 0-170.496 55.6544-197.9904 133.888-18.3296-12.1856-40.3456-19.1488-65.9968-17.408-43.9808 3.4816-78.848 38.2464-84.3264 79.9744-1.8432 10.4448 0 20.8896 1.8432 31.2832C104.7552 521.3696 46.08 576.9728 46.08 646.5536c0 6.9632 0 12.1856 1.8432 19.1488 0 3.4816 3.6864 5.2224 5.4784 5.2224h588.4928c3.6864 0 7.3216-1.7408 7.3216-5.2224l5.5296-19.1488z" fill="#F48120" p-id="7168"></path><path d="M764.7232 460.8h-10.7008c-2.1504 0-4.2496 1.6896-6.4 3.4304l-14.9504 41.1136c-6.4 17.1008-4.2496 34.2528 6.4 44.4928s25.6512 17.1008 44.8512 18.8416l79.0528 3.4304c2.1504 0 4.2496 1.6896 6.4 1.6896 2.1504 1.6896 2.1504 3.4304 0 5.12-2.1504 3.4304-4.2496 5.12-8.5504 5.12l-81.2032 3.4304c-44.8512 1.6896-91.8528 30.8224-108.9536 65.0752l-4.2496 15.4112c-2.1504 1.6896 0 5.12 4.2496 5.12h282.0096c4.2496 0 6.4-1.6896 6.4-5.12 4.2496-13.7216 8.5504-29.1328 8.5504-44.4928C967.68 534.4256 875.8272 460.8 764.7232 460.8" fill="#FAAD3F" p-id="7169"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747971094313" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8988" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M683.52 924.16c69.427-32.922 165.786-91.546 245.76-194.56 20.275-26.112 37.171-52.02 51.2-76.8 12.698-31.488 27.802-76.851 35.84-133.12 18.278-127.54-12.39-222.31-20.48-245.76-12.902-37.376-29.85-80.896-71.68-122.88C858.726 85.3 778.906 72.55 755.2 69.12c-57.907-8.397-103.322 2.15-138.24 10.24-23.808 5.53-67.942 16.128-117.76 46.08-39.578 23.808-64.512 48.845-81.92 66.56-48.486 49.357-73.267 95.283-107.52 158.72-20.275 37.58-37.58 70.042-51.2 117.76-2.611 9.165-9.011 32.614-15.36 76.8-5.99 41.882-11.827 101.325-10.138 175.104-49.92-82.227-79.462-154.112-97.382-205.824-15.872-45.875-22.17-74.803-25.6-102.4-7.066-56.986-13.67-110.285 15.36-158.72 38.81-64.717 116.173-79.053 138.854-83.251 95.181-17.613 170.036 29.645 188.826 42.291 27.29-23.91 54.63-47.77 81.92-71.68-31.898-24.934-89.293-62.208-168.96-76.8-17.152-3.123-57.651-9.318-109.21-3.891-39.475 4.147-96.921 9.933-151.91 49.971-11.93 8.653-46.029 35.174-71.68 81.92C-5.837 263.27 0.256 334.95 7.68 422.4c3.738 44.186 10.445 79.82 15.36 102.4 34.714 125.645 86.374 210.637 122.88 261.12 29.03 40.09 51.251 62.157 58.01 68.762 27.699 26.982 95.027 90.982 203.11 115.558 31.795 7.22 98.406 21.555 179.251-1.434 27.085-7.68 99.687-29.388 155.853-96.46 76.493-91.392 68.915-202.855 64.256-270.695-4.864-71.475-24.525-115.046-30.72-128-20.787-43.571-47.616-73.881-66.56-92.16-80.23 32.41-160.41 64.87-240.64 97.28l34.56 86.477 165.12-71.117c13.875 24.013 34.202 67.123 35.84 122.88 2.662 92.211-46.387 203.264-143.36 240.64-50.842 19.61-131.584 25.344-179.2-20.48-28.416-27.34-33.178-61.696-40.96-117.76-3.891-28.211-12.954-111.104 15.36-215.04 10.291-37.734 35.02-113.305 92.16-189.44 33.229-44.288 63.078-69.632 71.68-76.8 27.546-22.886 57.344-47.616 101.018-61.184 16.998-5.273 99.276-28.518 178.534 18.023 67.38 39.526 90.368 104.704 99.328 130.201 13.67 38.81 14.592 70.861 15.36 97.28 0.768 26.573 1.946 85.043-25.6 153.6-23.86 59.392-58.573 99.84-81.92 122.88-40.96 75.06-81.92 150.119-122.88 225.229z" fill="#13EAE4" p-id="8989"></path></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747043132978" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8260" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M433.728 0C382.72 0 336.32 23.424 303.872 60.8c-51.008 70.4-13.888 168.704 13.952 224.832 27.904 56.128 153.152 257.472 157.76 262.208 4.544 4.672 9.28 4.672 9.28 0 0-4.736 13.888-299.712 4.544-369.92A998.016 998.016 0 0 0 433.728 0zM160 135.68c-9.28 0-74.24 70.272-83.52 131.2-9.28 60.8 23.168 107.712 97.408 159.168 78.912 56.128 259.84 154.496 264.448 149.888 4.544-9.344-69.568-140.544-134.592-238.848C238.912 238.72 169.344 135.744 160 135.744z m23.168 599.424c55.68 23.424 143.872-32.832 167.04-46.72l64.96-46.912-315.52 9.344c18.624 32.832 46.4 60.992 83.52 84.288z m9.28-257.472c-55.68-28.16-171.52-93.696-176.256-93.696-4.608 0-23.168 84.288 13.952 145.28 37.12 60.8 106.752 79.552 139.136 84.224 37.12 4.736 250.496 4.736 250.496 0-4.608-4.8-171.584-107.776-227.328-135.808zM712.128 60.8C679.68 23.424 633.28 0 582.272 0c-23.168 56.128-41.728 112.384-51.008 173.248-9.28 70.208 4.608 369.92 4.608 369.92 0 4.672 4.544 4.672 9.28 0 4.544-4.736 134.528-210.752 157.696-262.208 23.168-51.456 60.288-149.888 9.28-220.16zM1004.416 384c-4.608 0-120.704 65.472-176.256 93.632-55.68 28.096-222.72 131.2-227.328 135.808 0 4.736 213.44 4.736 250.56 0 32.448-4.672 102.016-23.424 139.136-84.288 32.448-60.928 13.888-145.216 13.888-145.216z m-338.688 304.32c23.168 14.08 111.36 70.208 167.04 46.784 37.12-18.752 64.96-51.456 83.392-88.96l-315.52-9.344 65.088 51.52z m273.664-421.44c-4.544-60.928-74.24-131.2-83.52-131.2-9.28 0-88.128 103.04-148.48 201.408-60.224 98.304-134.528 229.504-129.792 238.848 4.544 9.408 185.6-93.632 264.384-149.888 74.24-51.456 102.144-93.632 97.408-159.168z" fill="#EA020A" p-id="8261"></path><path d="M71.232 1002.24V931.2h81.28v70.976h26.24v-160.256h-26.24v66.88h-81.28v-66.88h-26.24v160.256h26.24z m222.656 3.136c21.12 0 37.44-5.44 49.088-16.192 11.712-11.008 17.536-26.88 17.536-47.808v-99.392h-26.24v99.84c0 13.952-3.392 24-9.664 30.72-6.528 6.592-16.832 9.92-30.72 9.92-14.208 0-24.512-3.392-30.784-9.856-6.464-6.784-9.6-16.832-9.6-30.72v-99.84H227.2v99.328c0 20.928 5.824 36.8 17.728 48 11.2 10.56 27.584 16 48.96 16z m127.424-3.2l14.592-40.128H503.04l14.528 40.192h28.032l-61.248-160.256h-29.824l-61.248 160.256h28.032z m73.856-61.696h-51.392l25.344-70.208h0.896l25.152 70.208z m142.72 61.76l31.36-120.512h0.896l31.232 120.512h27.84l46.208-160.256h-29.632l-30.08 121.856h-0.832l-31.68-121.856h-27.136l-31.616 121.856h-0.896l-30.08-121.856H563.84l46.016 160.256h28.032z m290.816 0v-22.464h-93.12v-48.512h62.08v-22.4h-62.08v-44.48h89.344v-22.4h-115.584v160.256h119.36z m67.968 0v-160.256h-26.24v160.256h26.24z" fill="#010101" p-id="8262"></path></svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747799496116" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5036" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M998.4 191.488c-1.536-3.072-5.12-6.144-11.776-4.608-12.8 3.072-159.232 246.784-474.624 240.128-59.904 1.024-113.664-6.656-161.792-19.968l-25.6-87.04s-5.12-21.504-26.112-32.768c-14.336-7.68-23.04-5.12-24.576-3.072-1.536 2.048-1.536 4.096-1.536 4.096l12.8 96.256C124.928 315.904 46.08 189.44 36.864 187.392c-6.656-1.536-10.24 1.536-11.776 4.608-2.56 5.12 0 12.288 0 12.288 45.568 134.144 143.36 240.128 269.824 296.448l34.816 232.448c2.56 66.56 47.104 104.448 104.96 104.448h173.568c57.856 0 101.376-41.472 104.96-104.448l31.744-192.512s0.512-2.56-1.024-3.584c-2.048-1.024-16.896-1.536-47.616 20.992-30.72 22.528-40.96 55.296-40.96 55.296s-33.28 79.872-41.984 114.176c-9.216 35.84-49.664 32.768-49.664 32.768h-92.16c-31.232 0-34.304-27.648-34.304-27.648L378.88 529.408c42.496 10.752 86.528 16.384 133.12 15.872 228.352 1.024 417.792-137.728 486.912-341.504 0 0 2.56-7.168-0.512-12.288" fill="#00AAE7" p-id="5037"></path></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="40px" height="40px" viewBox="0 0 298 324" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>雷池logo</title>
<defs>
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-1">
<stop stop-color="#4B4B4B" offset="0%"></stop>
<stop stop-color="#000000" offset="100%"></stop>
</linearGradient>
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-2">
<stop stop-color="#0FC6C2" stop-opacity="0.9" offset="0%"></stop>
<stop stop-color="#0FC6C2" stop-opacity="0.7" offset="99.9426355%"></stop>
</linearGradient>
<path d="M110.049657,49.667649 C110.049657,49.667649 81.1358702,46.2263115 76.8,26.7636364 C72.4880848,46.2263115 43.5503431,49.667649 43.5503431,49.667649 C14.2053649,53.3001718 0,36.4567369 0,36.4567369 C13.941859,65.8036979 38.4,64.7712967 38.4,64.7712967 L115.2,64.7712967 C115.2,64.7712967 139.634186,65.8036979 153.6,36.4567369 C153.6,36.4567369 139.394635,53.3192904 110.049657,49.667649 Z" id="path-3"></path>
<filter x="-16.9%" y="-57.9%" width="133.9%" height="236.8%" filterUnits="objectBoundingBox" id="filter-4">
<feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="8" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0.0346592498 0 0 0 0 0.410127944 0 0 0 0 0.401920978 0 0 0 1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="雷池logo">
<path d="M292.40836,59.04 C290.927217,51.9634286 285.002646,46.6971429 277.761503,46.368 C222.13636,44.8868571 176.385503,16.5805714 157.953503,3.08571429 C152.358074,-1.02857143 144.95236,-1.02857143 139.356931,3.08571429 C120.431217,16.5805714 75.1740742,44.8868571 19.5489314,46.368 C12.4723599,46.6971429 6.21864565,51.9634286 4.90207422,59.04 C-3.98478292,103.474286 -19.2899258,254.057143 148.902074,324 C316.60036,253.892571 300.966074,103.474286 292.40836,59.04 Z" id="路径" fill="url(#linearGradient-1)" fill-rule="nonzero"></path>
<path d="M149,261.4 C205.553958,261.4 251.4,215.553958 251.4,159 C251.4,131.275004 240.381593,106.123494 222.484813,87.6855068 C209.900749,96.0964568 185.81512,106.024178 175.564259,100.853688 C166.334879,96.1984273 157.476591,88.4505652 148.989396,77.610101 C142.047769,88.5334102 134.670586,95.5517221 126.857848,98.6650367 C120.689419,101.123107 98.2592604,102.915695 75.4419467,87.761039 C57.5883513,106.192154 46.6,131.312844 46.6,159 C46.6,215.553958 92.4460416,261.4 149,261.4 Z" id="椭圆形备份-31" fill="url(#linearGradient-2)"></path>
<g id="编组-5备份-5" transform="translate(91.771423, 102.101722)" fill="#FFFFFF">
<polygon id="路径-130备份-29" transform="translate(57.217971, 95.920999) rotate(-180.000000) translate(-57.217971, -95.920999) " points="56.6651511 64.9496372 -7.57241738e-17 97.1108413 50.6084036 126.892361 68.8016729 117.264704 34.3433228 97.1108413 56.6651511 84.5503086 96.9001091 107.376711 96.9001091 114.88399 114.435942 125.435553 114.435942 97.1108413"></polygon>
<polygon id="路径-130备份-30" transform="translate(57.217971, 30.971362) rotate(-360.000000) translate(-57.217971, -30.971362) " points="56.6651511 0 -7.57241738e-17 32.1612041 50.6084036 61.9427239 68.8016729 52.3150668 34.3433228 32.1612041 56.6651511 19.6006714 96.9001091 42.4270741 96.9001091 49.9343528 114.435942 60.4859155 114.435942 32.1612041"></polygon>
</g>
<g id="长亭logo备份-20" transform="translate(72.200000, 45.222222)" fill-rule="nonzero">
<g id="编组-7">
<path d="M96.7632666,18.0061837 C96.7632666,18.0061837 79.3862969,15.2966085 76.7907961,0 C74.1952953,15.2966085 56.8183256,18.0061837 56.8183256,18.0061837 C39.1836466,20.8694936 30.6424242,7.60987058 30.6424242,7.60987058 C39.0363842,30.6893013 53.7258141,29.862977 53.7258141,29.862977 L99.8741859,29.862977 C99.8741859,29.862977 114.563616,30.6700845 122.957576,7.60987058 C122.957576,7.60987058 114.416353,20.8694936 96.7816744,18.0061837 L96.7632666,18.0061837 Z" id="路径" fill="#0FC6C2"></path>
<g id="路径">
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-3"></use>
<use fill="#0FC6C2" xlink:href="#path-3"></use>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="40" height="40"><path d="M607.934 417.857c-6.18-6.178-12.766-11.747-19.554-16.91l-.012.011c-6.986-6.72-16.472-10.857-26.93-10.857-21.465 0-38.865 17.4-38.865 38.864a38.697 38.697 0 0 0 9.072 24.947h-.001a39.02 39.02 0 0 0 9.59 8.256c3.665 3.022 7.262 5.998 10.625 9.361l3.204 3.205c40.28 40.23 28.255 109.54-12.025 149.82l-171.88 171.83c-40.279 40.23-105.762 40.23-146.042 0l-3.23-3.232c-40.281-40.278-40.281-105.81 0-145.99l75.936-75.91c9.742-7.734 15.997-19.67 15.997-33.073 0-23.313-18.899-42.211-42.212-42.211a42.01 42.01 0 0 0-23.725 7.297c-.021-.045-.044-.088-.066-.134l-.81.757a42.455 42.455 0 0 0-8.026 7.51l-78.913 73.842c-74.178 74.23-74.178 195.633 0 269.759l3.204 3.203c74.179 74.127 195.53 74.127 269.708 0l171.83-171.88c74.075-74.175 80.356-191.185 6.281-265.312l-3.156-3.153z" fill="#333"/><path d="m855.62 165.804-3.204-3.204c-74.178-74.178-195.529-74.178-269.707 0l-171.83 171.88c-74.178 74.178-78.263 181.296-4.085 255.523l3.153 3.104c3.369 3.368 6.866 6.543 10.435 9.589a36.872 36.872 0 0 0 8.993 7.31l.077.062.012-.01a36.508 36.508 0 0 0 18.258 4.87c20.263 0 36.69-16.428 36.69-36.69 0-5.719-1.31-11.132-3.646-15.958-4.85-10.89-13.93-17.52-20.21-23.802l-3.154-3.103c-40.278-40.278-24.983-98.796 15.295-139.074l171.931-171.83c40.18-40.281 105.685-40.281 145.966 0l3.206 3.152c40.279 40.282 40.279 105.839 0 146.068l-75.687 75.738c-10.297 7.629-16.974 19.865-16.974 33.663 0 23.123 18.746 41.87 41.87 41.87a41.668 41.668 0 0 0 21.946-6.211c.048.082.093.157.14.24l1.175-1.083a42.09 42.09 0 0 0 9.529-8.793l79.766-73.603c74.233-74.177 74.233-195.53.055-269.708z" fill="#333"/></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="40" height="40"><path d="M512 170.667c130.475 0 240.939 83.797 277.93 199.296a198.827 198.827 0 0 0-41.557-.598 222.293 222.293 0 0 0-49.706 10.624C668.203 309.333 596.096 259.755 512 259.755c-100.267 0-183.467 70.528-199.381 163.029a279.04 279.04 0 0 0-89.43-3.84C241.28 278.954 363.691 170.667 512 170.667z" fill="#006DFE"/><path d="M258.475 417.323c54.442 0 104.192 20.181 142.165 53.418 16.085 14.08 45.227 39.68 87.381 76.8l-7.381-6.528-61.568 60.886-54.4-54.4c-34.219-34.262-66.09-47.958-106.197-47.958a133.59 133.59 0 0 0 0 267.222c10.666 0 29.312.768 56.064 2.346l-90.454 77.142a215.893 215.893 0 0 1 34.347-428.971z" fill="#00CDD8"/><path d="M674.347 434.475a215.808 215.808 0 0 1 168.618 397.354c-15.36 6.486-38.186 15.958-63.146 16.214-72.107.597-244.182.896-516.352.938H220.8a206248.107 206248.107 0 0 0 397.013-380.714c18.262-17.579 41.131-27.264 56.534-33.792zm41.856 80.554c-9.259 3.926-23.04 9.771-34.048 20.352-30.166 29.099-109.952 105.643-239.446 229.632h53.419c148.181 0 242.773-.213 283.733-.554 15.062-.128 28.843-5.846 38.102-9.814a130.133 130.133 0 0 0-101.76-239.616z" fill="#00A2FF"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747365642427" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4628" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M865.905929 472.578561l-137.917759 539.191238a9.407847 9.407847 0 0 0 0 4.479927 10.047837 10.047837 0 0 0 9.983838 7.679875h275.643521a9.983838 9.983838 0 0 0 10.047836-7.679875 9.983838 9.983838 0 0 0 0-4.479927l-138.493749-539.191238a10.175835 10.175835 0 0 0-19.327686 0M107.07026 594.752575l-106.878263 416.953225a9.983838 9.983838 0 0 0 10.111836 12.159802h212.796542a10.239834 10.239834 0 0 0 8.063869-3.583942 9.727842 9.727842 0 0 0 1.919968-4.031934 9.407847 9.407847 0 0 0 0-4.479927l-106.878263-417.081223a9.791841 9.791841 0 0 0-3.583942-5.119916 10.239834 10.239834 0 0 0-11.967805 0 9.791841 9.791841 0 0 0-3.583942 5.119916z" fill="#00E5E5" p-id="4629"></path><path d="M295.3552 249.478186L100.798362 1011.833798a9.727842 9.727842 0 0 0 1.919969 8.319865 9.983838 9.983838 0 0 0 7.679875 3.839937h389.241675a10.111836 10.111836 0 0 0 9.983838-7.615876 10.047837 10.047837 0 0 0 0.063999-4.479927L314.618887 249.414187a9.791841 9.791841 0 0 0-3.64794-5.119917 10.239834 10.239834 0 0 0-11.967806 0 9.791841 9.791841 0 0 0-3.647941 5.119917" fill="#006EFF" p-id="4630"></path><path d="M631.029746 7.050125a9.791841 9.791841 0 0 0-3.583942-5.119916 10.239834 10.239834 0 0 0-11.967806 0 9.791841 9.791841 0 0 0-3.64794 5.119916l-265.979678 1004.783673a9.983838 9.983838 0 0 0 10.047837 12.031804h531.575362a10.175835 10.175835 0 0 0 10.047836-7.615876 10.111836 10.111836 0 0 0 0-4.479927L631.029746 7.050125z" fill="#006EFF" p-id="4631"></path><path d="M435.640921 360.324385L266.939662 1011.769799a9.599844 9.599844 0 0 0 1.983968 8.57586 9.983838 9.983838 0 0 0 8.063869 3.647941h336.63453a10.239834 10.239834 0 0 0 8.127868-3.71194 10.111836 10.111836 0 0 0 1.983967-8.511861L454.904608 360.260386a10.239834 10.239834 0 0 0-9.599844-7.039886 10.239834 10.239834 0 0 0-9.599844 7.039886" fill="#00E5E5" p-id="4632"></path></svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747365740690" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7399" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M735.899826 924.582957a467.656348 467.656348 0 0 1-223.944348 56.765217c-81.029565 0-157.295304-20.569043-223.855304-56.765217H735.944348z m111.081739-83.878957c-15.582609 15.894261-32.322783 30.675478-49.997913 44.210087H227.06087a467.166609 467.166609 0 0 1-49.997913-44.210087h669.96313zM912.517565 756.869565c-9.349565 15.36-19.589565 30.052174-30.675478 44.165565H142.157913a475.225043 475.225043 0 0 1-30.675478-44.165565h801.03513z m66.159305-294.956522a467.033043 467.033043 0 0 1-44.432696 255.198609H89.755826a467.033043 467.033043 0 0 1-44.477217-254.664348l138.106434 2.715826 180.313044 201.19374 147.945739-173.100522 183.563131 179.734261 156.850086-211.033044h126.619827zM512 42.651826c204.176696 0 377.856 130.359652 442.412522 312.409044H824.987826l-131.650783 157.161739-177.730782-164.062609-156.493913 165.888L235.52 356.173913H69.186783C133.431652 173.545739 307.46713 42.651826 512 42.651826z" fill="#0070B6" p-id="7400"></path></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M128 479.2h768v65.6H128z"/></svg>

Before

Width:  |  Height:  |  Size: 144 B

View File

@@ -1 +0,0 @@
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M512 .445C229.477.445.445 229.477.445 512.003c0 282.521 229.032 511.552 511.555 511.552s511.555-229.032 511.555-511.552C1023.555 229.477 794.523.445 512 .445zm0 900.338c-47.087 0-85.26-39.416-85.26-88.035S464.913 724.71 512 724.71c47.085 0 85.257 39.417 85.257 88.038s-38.17 88.035-85.257 88.035zm66.202-316.928c0 48.621-26.946 88.035-60.183 88.035h-12.036c-33.24 0-60.183-39.414-60.183-88.035l-36.11-352.14c0-48.62 26.944-88.031 60.181-88.031h84.258c33.239 0 60.183 39.412 60.183 88.032l-36.11 352.14z"/></svg>

Before

Width:  |  Height:  |  Size: 622 B

View File

@@ -1,69 +0,0 @@
import { defineComponent, type Slots } from 'vue'
/**
* @description 基础组件
* @example
* ```tsx
* <BaseComponent>
* <template #header-left>左侧头部内容</template>
* <template #header-right>右侧头部内容</template>
* <template #header>完整头部内容</template>
* <template #content>主要内容</template>
* <template #footer-left>左侧底部内容</template>
* <template #footer-right>右侧底部内容</template>
* <template #footer>完整底部内容</template>
* <template #popup>弹窗内容</template>
* </BaseComponent>
* ```
*/
export default defineComponent({
name: 'BaseComponent',
setup(_, { slots }: { slots: Slots }) {
// 获取插槽内容,支持驼峰和短横线两种命名方式
const slotHL = slots['header-left'] || slots.headerLeft
const slotHR = slots['header-right'] || slots.headerRight
const slotHeader = slots.header // 新增对 #header 插槽的支持
const slotFL = slots['footer-left'] || slots.footerLeft
const slotFR = slots['footer-right'] || slots.footerRight
const slotFooter = slots.footer // 新增对 #footer 插槽的支持
return () => (
<div class="flex flex-col">
{/* 头部区域: 优先使用 #header 插槽,如果不存在则尝试 #header-left 和 #header-right */}
{slotHeader ? (
<div class="flex justify-between flex-wrap w-full">{slotHeader()}</div>
) : (
(slotHL || slotHR) && (
<div class="flex justify-between flex-wrap" style={{ rowGap: '0.8rem' }}>
<div class="flex flex-shrink-0">{slotHL && slotHL()}</div>
<div class="flex flex-shrink-0">{slotHR && slotHR()}</div>
</div>
)
)}
{/* 内容区域 */}
<div
class={`w-full content ${
slotHeader || slotHL || slotHR ? 'mt-[1.2rem]' : ''
} ${slotFooter || slotFL || slotFR ? 'mb-[1.2rem]' : ''}`}
>
{slots.content && slots.content()}
</div>
{/* 底部区域: 优先使用 #footer 插槽,如果不存在则尝试 #footer-left 和 #footer-right */}
{slotFooter ? (
<div class="flex justify-between w-full">{slotFooter()}</div>
) : (
(slotFL || slotFR) && (
<div class="flex justify-between">
<div class="flex flex-shrink-0">{slotFL && slotFL()}</div>
<div class="flex flex-shrink-0">{slotFR && slotFR()}</div>
</div>
)
)}
{/* 弹窗区域 */}
{slots.popup && slots.popup()}
</div>
)
},
})

View File

@@ -1,153 +0,0 @@
import { defineComponent, VNode } from 'vue'
import { NButton, NFormItemGi, NGrid, NSelect, NText, NSpin, NFlex } from 'naive-ui'
// 类型导入
import type { CAProviderSelectProps, CAProviderOption, CAProviderSelectEmits } from './types'
// 绝对内部导入 - Controller
import { useCAProviderSelectController } from './useController'
// 绝对内部导入 - Components
import SvgIcon from '@components/SvgIcon'
// 绝对内部导入 - Utilities
import { $t } from '@locales/index'
/**
* @component CAProviderSelect
* @description CA授权选择组件支持选择Let's Encrypt和其他CA授权并提供跳转到CA授权管理页面的功能。
* 遵循 MVC/MV* 模式,将业务逻辑、状态管理与视图渲染分离。
*
* @example 基础使用
* <CAProviderSelect
* path="form.eabId"
* v-model:value="formValue.eabId"
* v-model:ca="formValue.ca"
* v-model:email="formValue.email"
* />
*
* @property {string} path - 表单路径,用于表单校验。
* @property {string} value - 当前选中的值 (通过 v-model:value 绑定)。
* @property {string} ca - 当前选中的CA类型 (通过 v-model:ca 绑定)。
* @property {string} email - 邮箱地址 (通过 v-model:email 绑定),当 value 不为空时会被自动赋值。
* @property {boolean} [disabled=false] - 是否禁用。
* @property {string} [customClass] - 自定义CSS类名。
*
* @emits update:value - (value: { value: string; ca: string }) 当选择的CA授权变更时触发传递值和CA类型。
* @emits update:email - (email: string) 当 value 不为空时触发,传递邮箱地址。
*/
export default defineComponent<CAProviderSelectProps>({
name: 'CAProviderSelect',
props: {
path: {
type: String,
required: true,
},
value: {
type: String,
required: true,
default: '',
},
ca: {
type: String,
required: true,
},
email: {
type: String,
required: true,
},
disabled: {
type: Boolean,
default: false,
},
customClass: {
type: String,
default: '',
},
},
emits: {
'update:value': (value: { value: string; ca: string }) => true,
'update:email': (email: string) => true,
},
setup(props: CAProviderSelectProps, { emit }: { emit: CAProviderSelectEmits }) {
const {
isLoading,
caProviderRef,
param,
handleUpdateValue,
handleFilter,
goToAddCAProvider,
errorMessage,
loadCAProviders,
} = useCAProviderSelectController(props, emit)
/**
* 渲染标签
* @param option - 选项
* @returns 渲染后的VNode
*/
const renderLabel = (option: CAProviderOption): VNode => {
return (
<NFlex align="center">
<SvgIcon icon={`cert-${option.ca}`} size="2rem" />
<NText>{option.label}</NText>
</NFlex>
)
}
/**
* 渲染单选标签
* @param option - 选项 (Record<string, any> 来自 naive-ui 的类型)
* @returns 渲染后的VNode
*/
const renderSingleSelectTag = ({ option }: { option: CAProviderOption }): VNode => {
return (
<div class="flex items-center">
{option.label ? renderLabel(option) : <NText class="text-[#aaa]">{$t('t_0_1747990228780')}</NText>}
</div>
)
}
return () => (
<NSpin show={isLoading.value}>
<NGrid cols={24} class={props.customClass}>
<NFormItemGi span={13} label={$t('t_0_1748052857931')} path={props.path}>
<NSelect
class="flex-1 w-full"
options={caProviderRef.value}
renderLabel={renderLabel}
renderTag={({ option }: { option: any }) => renderSingleSelectTag({ option: option as CAProviderOption })}
filterable
filter={(pattern: string, option: any) => handleFilter(pattern, option as CAProviderOption)}
placeholder={$t('t_0_1747990228780')}
value={param.value.value} // 使用 controller 中的 param.value.value
onUpdateValue={handleUpdateValue}
disabled={props.disabled}
v-slots={{
header: () => {
return (
<div
class="flex items-center cursor-pointer hover:text-[#333] hover:bg-[#eee]"
onClick={() => goToAddCAProvider('addCAForm')}
>
{$t('t_1_1748052860539')}
</div>
)
},
empty: () => {
return <span class="text-[1.4rem]">{errorMessage.value || $t('t_2_1747990228008')}</span>
},
}}
/>
</NFormItemGi>
<NFormItemGi span={11}>
<NButton class="mx-[8px]" onClick={() => goToAddCAProvider('caManage')} disabled={props.disabled}>
{$t('t_0_1747903670020')}
</NButton>
<NButton onClick={() => loadCAProviders()} loading={isLoading.value} disabled={props.disabled}>
{$t('t_0_1746497662220')}
</NButton>
</NFormItemGi>
</NGrid>
</NSpin>
)
},
})

View File

@@ -1,72 +0,0 @@
/**
* @interface CAProviderOption
* @description CA授权选项的结构
*/
export interface CAProviderOption {
label: string
value: string
ca: string
email: string
}
/**
* @interface CAProviderSelectProps
* @description CAProviderSelect 组件的 Props 定义
*/
export interface CAProviderSelectProps {
/**
* @property path
* @description 表单路径,用于 naive-ui 表单校验
*/
path: string
/**
* @property value
* @description 当前选中的值
*/
value: string
/**
* @property ca
* @description 当前选中的CA类型
*/
ca: string
/**
* @property email
* @description 邮箱地址,当 value 不为空时会被赋值
*/
email: string
/**
* @property disabled
* @description 是否禁用选择器
* @default false
*/
disabled?: boolean
/**
* @property customClass
* @description 自定义CSS类名应用于 NGrid 组件
*/
customClass?: string
}
/**
* @interface CAProviderSelectEmits
* @description CAProviderSelect 组件的 Emits 定义
*/
export interface CAProviderSelectEmits {
(e: 'update:value', value: { value: string; ca: string; email: string }): void
(e: 'update:email', email: string): void
}
/**
* @interface CAProviderControllerExposes
* @description useCAProviderSelectController 返回对象的类型接口
*/
export interface CAProviderControllerExposes {
param: import('vue').Ref<CAProviderOption>
caProviderRef: import('vue').Ref<CAProviderOption[]>
isLoading: import('vue').Ref<boolean>
errorMessage: import('vue').Ref<string>
goToAddCAProvider: () => void
handleUpdateValue: (value: string) => void
loadCAProviders: () => Promise<void>
handleFilter: (pattern: string, option: CAProviderOption) => boolean
}

View File

@@ -1,159 +0,0 @@
import { ref, watch, onMounted } from 'vue'
import type { CAProviderSelectProps, CAProviderOption, CAProviderSelectEmits } from './types'
// 绝对内部导入 - API
import { getAllEabList } from '@api/access'
// 绝对内部导入 - Hooks
import { useError } from '@baota/hooks/error'
// 绝对内部导入 - Utilities
import { $t } from '@locales/index'
/**
* @function useCAProviderSelectController
* @description CAProviderSelect 组件的控制器逻辑
* @param props - 组件的 props
* @param emit - 组件的 emit 函数
* @returns {CAProviderControllerExposes} 控制器暴露给视图的数据和方法
*/
export function useCAProviderSelectController(props: CAProviderSelectProps, emit: CAProviderSelectEmits) {
const { handleError } = useError()
const param = ref<CAProviderOption>({
label: '',
value: '',
ca: '',
email: '',
})
const caProviderRef = ref<CAProviderOption[]>([])
const isLoading = ref(false)
const errorMessage = ref('')
/**
* @function goToAddCAProvider
* @description 跳转到CA授权管理页面
*/
const goToAddCAProvider = (type: string) => {
window.open(`/auto-deploy?type=${type}`, '_blank')
}
/**
* @function handleUpdateType
* @description 根据当前 param.value 更新 param 对象的 label 和 ca并 emit 更新事件
*/
const handleUpdateType = () => {
const selectedProvider = caProviderRef.value.find((item) => item.value === param.value.value)
if (selectedProvider) {
param.value = {
label: selectedProvider.label,
value: selectedProvider.value,
ca: selectedProvider.ca,
email: selectedProvider.email,
}
} else if (caProviderRef.value.length > 0 && param.value.value === '') {
// 如果 param.value 为空(例如初始状态或清空后),且 caProviderRef 列表不为空,则默认选中第一个
param.value = {
label: caProviderRef.value[0]?.label || '',
value: caProviderRef.value[0]?.value || '',
ca: caProviderRef.value[0]?.ca || '',
email: caProviderRef.value[0]?.email || '',
}
}
// 当 value 不为空时,将其赋值给 email 字段
if (param.value.value !== '') {
emit('update:email', param.value.email)
}
emit('update:value', { value: param.value.value, ca: param.value.ca, email: param.value.email })
}
/**
* @function handleUpdateValue
* @description 更新 param.value 并触发类型更新
* @param value - 新的选中值
*/
const handleUpdateValue = (value: string) => {
param.value.value = value
handleUpdateType()
}
/**
* @function loadCAProviders
* @description 加载CA授权选项
*/
const loadCAProviders = async () => {
isLoading.value = true
errorMessage.value = ''
try {
// 添加Let's Encrypt作为首选项
const letsEncryptOption: CAProviderOption = {
label: "Let's Encrypt",
value: '',
ca: 'letsencrypt',
email: '',
}
// 获取其他CA授权列表
const { data } = await getAllEabList({ ca: '' }).fetch()
const eabOptions: CAProviderOption[] = (data || []).map((item) => ({
label: item.name,
value: item.id.toString(),
ca: item.ca,
email: item.mail,
}))
// 合并选项Let's Encrypt在首位
caProviderRef.value = [letsEncryptOption, ...eabOptions]
// 数据加载后,如果 props.value 有值,尝试根据 props.value 初始化 param
if (props.value) {
handleUpdateValue(props.value)
} else {
handleUpdateType() // 确保在 caProviderRef 更新后param 也得到相应更新
}
} catch (error) {
errorMessage.value = typeof error === 'string' ? error : $t('t_3_1747990229599')
handleError(error)
} finally {
isLoading.value = false
}
}
/**
* @function handleFilter
* @description NSelect 组件的搜索过滤函数
* @param pattern - 搜索文本
* @param option - 当前选项
* @returns {boolean} 是否匹配
*/
const handleFilter = (pattern: string, option: CAProviderOption): boolean => {
return option.label.toLowerCase().includes(pattern.toLowerCase())
}
watch(
() => props.value,
(newValue) => {
// 仅当外部 props.value 与内部 param.value.value 不一致时才更新
if (newValue !== param.value.value) {
handleUpdateValue(newValue)
}
},
{ immediate: true },
)
onMounted(() => {
loadCAProviders()
})
return {
param,
caProviderRef,
isLoading,
errorMessage,
goToAddCAProvider,
handleUpdateValue,
loadCAProviders,
handleFilter,
}
}

View File

@@ -1,122 +0,0 @@
// External Libraries
import { defineComponent, type PropType } from 'vue';
import { NCard, NSpin, NButton, NSpace, NIcon, NLog, NConfigProvider } from 'naive-ui';
import hljs from 'highlight.js/lib/core'; // hljs 仍需在此导入以传递给 NConfigProvider
// Type Imports
import type { LogDisplayProps } from './types';
// Absolute Internal Imports
import { $t } from '@locales/index';
import { DownloadOutline, RefreshOutline } from '@vicons/ionicons5';
// Relative Internal Imports
import { useLogDisplayController } from './useController';
/**
* @description LogDisplay 组件 (LogViewer)
* @description 用于显示日志内容,支持加载、刷新、下载和自定义高亮。
*/
export default defineComponent({
name: 'LogViewer',
props: {
content: {
type: String,
default: '',
},
loading: {
type: Boolean,
default: false,
},
enableDownload: {
type: Boolean,
default: true,
},
downloadFileName: {
type: String,
default: 'logs.txt',
},
title: {
type: String,
default: () => $t('t_0_1746776194126'), // $t('t_0_1747754231151')
},
fetchLogs: {
type: Function as PropType<() => Promise<string>>,
default: undefined, // 显式设为 undefined由 controller 判断
},
} as const, // 使用 as const 帮助类型推断
setup(props: LogDisplayProps) {
const {
isLoading,
logRef,
logContent, // NLog 的 log prop 应该直接使用 controller.logs.value
cssVarStyles,
refreshLogs,
downloadLogs,
} = useLogDisplayController(props);
return () => (
<NCard
title={props.title} // 使用 props.title
bordered={false}
class="w-full h-full flex flex-col" // 确保 NCard 充满高度
contentClass="!p-3 flex-grow overflow-hidden" // 让内容区域可滚动
style={cssVarStyles.value} // 应用主题样式
headerClass="flex-shrink-0"
footerClass="flex-shrink-0"
>
{{
header: () => props.title,
'header-extra': () => (
<NSpace>
<NButton onClick={refreshLogs} size="small" type="primary" disabled={isLoading.value}>
{{
icon: () => (
<NIcon>
<RefreshOutline />
</NIcon>
),
default: () => $t('t_0_1746497662220'),
}}
</NButton>
{props.enableDownload && (
<NButton onClick={downloadLogs} size="small" disabled={isLoading.value || !logContent.value.length}>
{{
icon: () => (
<NIcon>
<DownloadOutline />
</NIcon>
),
default: () => $t('t_2_1746776194263'),
}}
</NButton>
)}
</NSpace>
),
default: () => (
<NSpin show={isLoading.value} class="h-full">
<NConfigProvider hljs={hljs} class="h-full">
<NLog
ref={logRef}
log={logContent.value.map((line) => line.content).join('\n')} // NLog 的 log prop 期望是 string
language="custom-logs"
trim={false}
fontSize={14}
lineHeight={1.5}
class="h-full" // NLog 充满 NSpin
style={{
// height: '500px', // 改为 flex 布局后,由父容器控制高度
border: '1px solid var(--n-border-color)',
borderRadius: 'var(--n-border-radius)', // 使用 Naive UI 变量
padding: '10px',
}}
/>
</NConfigProvider>
</NSpin>
),
}}
</NCard>
)
},
});

View File

@@ -1,74 +0,0 @@
import type { PropType, Ref, ComputedRef, StyleValue } from 'vue';
import type { NLog } from 'naive-ui'; // 假设 NLog 类型可以这样导入,如果不行,需要找到正确的导入方式或使用更通用的类型
/**
* @description 日志行项目结构
*/
export interface LogLine {
type: string; // 例如: 'default', 'info', 'error', 'warning'
content: string;
}
/**
* @description LogDisplay 组件的 Props 定义
*/
export interface LogDisplayProps {
/**
* 日志内容
*/
content?: string;
/**
* 是否加载中
*/
loading?: boolean;
/**
* 是否允许下载
*/
enableDownload?: boolean;
/**
* 下载文件名
*/
downloadFileName?: string;
/**
* 标题
*/
title?: string;
/**
* 获取日志方法
*/
fetchLogs?: () => Promise<string>;
}
/**
* @description useLogDisplayController 组合式函数暴露的接口
*/
export interface LogDisplayControllerExposes {
/**
* 内部日志内容引用
*/
logs: Ref<string>;
/**
* 内部加载状态引用
*/
isLoading: Ref<boolean>;
/**
* NLog 组件实例引用
*/
logRef: Ref<InstanceType<typeof NLog> | null>;
/**
* 格式化后的日志内容,供 NLog 组件使用
*/
logContent: ComputedRef<LogLine[]>;
/**
* 主题相关的 CSS 变量
*/
cssVarStyles: ComputedRef<StyleValue>;
/**
* 刷新日志的方法
*/
refreshLogs: () => void;
/**
* 下载日志的方法
*/
downloadLogs: () => void;
}

View File

@@ -1,157 +0,0 @@
// External Libraries
import { ref, watch, computed, onMounted, nextTick, type StyleValue } from 'vue';
import hljs from 'highlight.js/lib/core';
import { NLog } from 'naive-ui'; // 确保 NLog 可以作为类型导入,或者其类型定义可用
// Type Imports
import type { LogDisplayProps, LogLine, LogDisplayControllerExposes } from './types';
// Absolute Internal Imports
import { $t } from '@locales/index';
import { useThemeCssVar } from '@baota/naive-ui/theme'; // 假设路径正确
/**
* @description LogDisplay 组件的控制器逻辑
* @param props - 组件的 props
* @returns {LogDisplayControllerExposes} 暴露给视图的响应式数据和方法
*/
export function useLogDisplayController(
props: LogDisplayProps,
): LogDisplayControllerExposes {
const logs = ref(props.content || '');
const isLoading = ref(props.loading || false);
const logRef = ref<InstanceType<typeof NLog> | null>(null);
// 初始化 highlight.js 自定义语言 (仅执行一次)
// 注意: 如果多个 LogDisplay 实例共享页面,此注册是全局的。
// 如果需要隔离,可能需要更复杂的处理或在应用级别注册。
if (!hljs.getLanguage('custom-logs')) {
hljs.registerLanguage('custom-logs', () => ({
contains: [
{
className: 'info-text',
begin: /\[INFO\]/,
},
{
className: 'error-text',
begin: /\[ERROR\]/,
},
{
className: 'warning-text',
begin: /\[WARNING\]/,
},
{
className: 'date-text',
begin: /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/,
},
],
}));
}
const themeCssVars = useThemeCssVar(['successColor', 'errorColor', 'warningColor', 'successColorPressed']);
const cssVarStyles = computed((): StyleValue => {
// 根据 useThemeCssVar 的实际返回值和 NCard 的 style 需求来构造
// 示例: return { '--success-color': themeCssVars.value.successColor, ... }
// 为了简单起见,这里直接返回,实际项目中可能需要转换
return themeCssVars.value as StyleValue;
});
// 监听外部 props.content 变化
watch(
() => props.content,
(newValue) => {
logs.value = newValue || '';
scrollToBottom();
},
);
// 监听外部 props.loading 变化
watch(
() => props.loading,
(newValue) => {
isLoading.value = !!newValue;
},
);
/**
* @description 滚动到日志底部
*/
const scrollToBottom = () => {
nextTick(() => {
// NLog 的 scrollTo 方法可能需要特定参数或直接操作其内部的滚动元素
// 此处假设 NLog 实例有 scrollTo 方法且接受 { top: number }
logRef.value?.scrollTo({ top: Number.MAX_SAFE_INTEGER, behavior: 'smooth' });
});
};
/**
* @description 加载日志内容
*/
const loadLogs = async () => {
if (!props.fetchLogs) return;
isLoading.value = true;
try {
const result = await props.fetchLogs();
logs.value = result;
scrollToBottom();
} catch (error) {
logs.value = `${$t('t_1_1746776198156')}: ${error instanceof Error ? error.message : String(error)}`;
} finally {
isLoading.value = false;
}
};
/**
* @description 下载日志
*/
const downloadLogs = () => {
if (!logs.value) return;
const blob = new Blob([logs.value], { type: 'text/plain;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = props.downloadFileName || 'logs.txt';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
};
/**
* @description 刷新日志
*/
const refreshLogs = () => {
loadLogs();
};
/**
* @description 将日志内容字符串转换为 NLog 需要的格式
*/
const logContent = computed((): LogLine[] => {
if (!logs.value) return [];
return logs.value.split('\n').map(
(line): LogLine => ({
type: 'default', // NLog 可能不需要这个 type或者可以根据行内容动态设置
content: line,
}),
);
});
onMounted(() => {
if (props.fetchLogs) {
loadLogs();
} else if (props.content) {
scrollToBottom() // 如果初始就有 content prop也尝试滚动到底部
}
});
return {
logs,
isLoading,
logRef,
logContent,
cssVarStyles,
refreshLogs,
downloadLogs,
};
}

View File

@@ -1,48 +0,0 @@
import { $t } from '@locales/index'
import { NEmpty, NButton } from 'naive-ui'
import { defineComponent, type PropType } from 'vue' // Added PropType, vue after naive-ui if sorted strictly by name
/**
* @description 表格空状态提示组件,带有添加按钮和社区链接
* @param {string} addButtonText 添加按钮文本
* @param {() => void} onAddClick 添加按钮点击事件
*/
interface TableEmptyStateProps { // Renamed from EmptyActionPromptProps
addButtonText: string
onAddClick: () => void
}
export default defineComponent({
name: 'TableEmptyState', // Renamed from EmptyActionPrompt
props: {
addButtonText: {
type: String,
required: true,
},
onAddClick: {
type: Function as PropType<() => void>, // Use PropType for better type definition
required: true,
},
},
setup(props: TableEmptyStateProps) { // Use renamed interface
return () => (
<div class="flex justify-center items-center h-full">
<NEmpty class="px-[4rem]">
{$t('t_1_1747754231838')}
<NButton text type="primary" size="small" onClick={props.onAddClick}>
{props.addButtonText}
</NButton>
{$t('t_2_1747754234999')}
<NButton text tag="a" target="_blank" type="primary" href="https://github.com/allinssl/allinssl/issues">
Issues
</NButton>
{$t('t_3_1747754232000')}
<NButton text tag="a" target="_blank" type="primary" href="https://github.com/allinssl/allinssl">
Star
</NButton>
{$t('t_4_1747754235407')}
</NEmpty>
</div>
)
},
})

View File

@@ -1,159 +0,0 @@
import { defineComponent, PropType, VNode } from 'vue'
import { NButton, NFormItemGi, NGrid, NSelect, NText, NSpin, NFlex } from 'naive-ui'
// 类型导入
import type { DnsProviderSelectProps, DnsProviderOption, DnsProviderType, DnsProviderSelectEmits } from './types'
// 绝对内部导入 - Controller
import { useDnsProviderSelectController } from './useController'
// 绝对内部导入 - Components
import SvgIcon from '@components/SvgIcon'
// 绝对内部导入 - Utilities
import { $t } from '@locales/index'
/**
* @component DnsProviderSelect
* @description DNS提供商选择组件支持多种DNS提供商类型并提供刷新和跳转到授权页面的功能。
* 遵循 MVC/MV* 模式,将业务逻辑、状态管理与视图渲染分离。
*
* @example 基础使用
* <DnsProviderSelect
* type="dns"
* path="form.dnsProvider"
* v-model:value="formValue.dnsProvider"
* valueType="value"
* :isAddMode="true"
* />
*
* @property {DnsProviderType} type - DNS提供商类型。
* @property {string} path - 表单路径,用于表单校验。
* @property {string} value - 当前选中的值 (通过 v-model:value 绑定)。
* @property {'value' | 'type'} valueType - 表单值的类型,决定 emit 'update:value' 时传递的是选项的 'value' 还是 'type'。
* @property {boolean} isAddMode - 是否为添加模式,显示添加和刷新按钮。
* @property {boolean} [disabled=false] - 是否禁用。
* @property {string} [customClass] - 自定义CSS类名。
*
* @emits update:value - (value: DnsProviderOption) 当选择的DNS提供商变更时触发传递整个选项对象。
*/
export default defineComponent<DnsProviderSelectProps>({
name: 'DnsProviderSelect',
props: {
type: {
type: String as PropType<DnsProviderType>,
required: true,
},
path: {
type: String,
required: true,
},
value: {
type: String,
required: true,
},
valueType: {
type: String as PropType<'value' | 'type'>,
default: 'value',
},
isAddMode: {
type: Boolean,
default: true,
},
disabled: {
type: Boolean,
default: false,
},
customClass: {
type: String,
default: '',
},
},
emits: ['update:value'] as unknown as DnsProviderSelectEmits, // 类型断言以匹配严格的 emits 定义
setup(props: DnsProviderSelectProps, { emit }: { emit: DnsProviderSelectEmits }) {
const controller = useDnsProviderSelectController(props, emit)
/**
* 渲染标签
* @param option - 选项
* @returns 渲染后的VNode
*/
const renderLabel = (option: DnsProviderOption): VNode => {
return (
<NFlex align="center">
<SvgIcon icon={`resources-${option.type}`} size="2rem" />
<NText>{option.label}</NText>
</NFlex>
)
}
/**
* 渲染单选标签
* @param option - 选项 (Record<string, any> 来自 naive-ui 的类型)
* @returns 渲染后的VNode
*/
const renderSingleSelectTag = ({ option }: { option: DnsProviderOption }): VNode => {
return (
<div class="flex items-center">
{option.label ? (
renderLabel(option)
) : (
<NText class="text-[#aaa]">
{props.type === 'dns' ? $t('t_0_1747019621052') : $t('t_0_1746858920894')}
</NText>
)}
</div>
)
}
return () => (
<NSpin show={controller.isLoading.value}>
<NGrid cols={24} class={props.customClass}>
<NFormItemGi
span={props.isAddMode ? 13 : 24}
label={props.type === 'dns' ? $t('t_3_1745735765112') : $t('t_0_1746754500246')}
path={props.path}
>
<NSelect
class="flex-1 w-full"
filterable
options={controller.dnsProviderRef.value}
renderLabel={renderLabel}
renderTag={({ option }: { option: any }) =>
renderSingleSelectTag({ option: option as DnsProviderOption })
}
filter={(pattern: string, option: any) => controller.handleFilter(pattern, option as DnsProviderOption)}
placeholder={props.type === 'dns' ? $t('t_3_1745490735059') : $t('t_0_1746858920894')}
value={controller.param.value.value} // 使用 controller 中的 param.value.value
onUpdateValue={controller.handleUpdateValue}
disabled={props.disabled}
v-slots={{
empty: () => {
return (
<span class="text-[1.4rem]">
{controller.errorMessage.value ||
(props.type === 'dns' ? $t('t_1_1746858922914') : $t('t_2_1746858923964'))}
</span>
)
},
}}
/>
</NFormItemGi>
{props.isAddMode && (
<NFormItemGi span={11}>
<NButton class="mx-[8px]" onClick={controller.goToAddDnsProvider} disabled={props.disabled}>
{props.type === 'dns' ? $t('t_1_1746004861166') : $t('t_3_1746858920060')}
</NButton>
<NButton
onClick={() => controller.loadDnsProviders(props.type)}
loading={controller.isLoading.value}
disabled={props.disabled}
>
{$t('t_0_1746497662220')}
</NButton>
</NFormItemGi>
)}
</NGrid>
</NSpin>
)
},
})

View File

@@ -1,95 +0,0 @@
// 类型导入 (如果需要)
// import type { SomeOtherType } from '@/types/someModule';
/**
* @interface DnsProviderOption
* @description DNS提供商选项的结构
*/
export interface DnsProviderOption {
label: string
value: string
type: string
}
/**
* @type DnsProviderType
* @description DNS提供商的具体类型
*/
export type DnsProviderType =
| 'aliyun'
| 'tencentcloud'
| 'baidu'
| 'qiniu'
| 'huaweicloud'
| 'cloudflare'
| 'dns'
| 'btpanel'
| '1panel'
| 'ssh'
| ''
/**
* @interface DnsProviderSelectProps
* @description DnsProviderSelect 组件的 Props 定义
*/
export interface DnsProviderSelectProps {
/**
* @property type
* @description 表单类型,用于获取不同的下拉列表
*/
type: DnsProviderType
/**
* @property path
* @description 表单路径,用于 naive-ui 表单校验
*/
path: string
/**
* @property value
* @description 当前选中的值
*/
value: string
/**
* @property valueType
* @description 表单值的类型,决定 emit 出去的是选项的 value 还是 type
*/
valueType: 'value' | 'type'
/**
* @property isAddMode
* @description 是否为添加模式,控制是否显示"添加"和"刷新"按钮
*/
isAddMode: boolean
/**
* @property disabled
* @description 是否禁用选择器
* @default false
*/
disabled?: boolean
/**
* @property customClass
* @description 自定义CSS类名应用于 NGrid 组件
*/
customClass?: string
}
/**
* @interface DnsProviderSelectEmits
* @description DnsProviderSelect 组件的 Emits 定义
*/
export interface DnsProviderSelectEmits {
(e: 'update:value', value: DnsProviderOption): void
}
/**
* @interface DnsProviderControllerExposes
* @description useDnsProviderSelectController 返回对象的类型接口
*/
export interface DnsProviderControllerExposes {
param: import('vue').Ref<DnsProviderOption>
dnsProviderRef: import('vue').Ref<DnsProviderOption[]>
isLoading: import('vue').Ref<boolean>
errorMessage: import('vue').Ref<string>
goToAddDnsProvider: () => void
handleUpdateValue: (value: string) => void
loadDnsProviders: (type?: DnsProviderType) => Promise<void>
handleFilter: (pattern: string, option: DnsProviderOption) => boolean
}

View File

@@ -1,190 +0,0 @@
import { ref, watch, onMounted, onUnmounted } from 'vue'
import type { DnsProviderSelectProps, DnsProviderOption, DnsProviderType, DnsProviderSelectEmits } from './types'
// 绝对内部导入 - Stores
import { useStore } from '@layout/useStore'
// 绝对内部导入 - Hooks
import { useError } from '@baota/hooks/error'
// 绝对内部导入 - Utilities
import { $t } from '@locales/index'
/**
* @function useDnsProviderSelectController
* @description DnsProviderSelect 组件的控制器逻辑
* @param props - 组件的 props
* @param emit - 组件的 emit 函数
* @returns {DnsProviderControllerExposes} 控制器暴露给视图的数据和方法
*/
export function useDnsProviderSelectController(props: DnsProviderSelectProps, emit: DnsProviderSelectEmits) {
const { handleError } = useError()
const { fetchDnsProvider, resetDnsProvider, dnsProvider } = useStore()
const param = ref<DnsProviderOption>({
label: '',
value: '',
type: '',
})
const dnsProviderRef = ref<DnsProviderOption[]>([])
const isLoading = ref(false)
const errorMessage = ref('')
/**
* @function goToAddDnsProvider
* @description 跳转到DNS提供商授权页面
*/
const goToAddDnsProvider = () => {
window.open('/auth-api-manage', '_blank')
}
/**
* @function handleUpdateType
* @description 根据当前 param.value 更新 param 对象的 label 和 type并 emit 更新事件
*/
const handleUpdateType = () => {
const selectedProvider = dnsProvider.value.find((item) => {
// 根据 props.valueType 决定是比较 item.value 还是 item.type
const valueToCompare = props.valueType === 'value' ? item.value : item.type
return valueToCompare === param.value.value
})
if (selectedProvider) {
param.value = {
label: selectedProvider.label,
value: props.valueType === 'value' ? selectedProvider.value : selectedProvider.type,
type: props.valueType === 'value' ? selectedProvider.type : selectedProvider.value,
}
emit('update:value', { ...param.value })
} else {
// 如果找不到匹配的选项,只有在 param.value.value 为空时才设置默认值
// 这样可以避免覆盖用户设置的初始值
if (param.value.value === '' && dnsProvider.value.length > 0) {
param.value = {
label: dnsProvider.value[0]?.label || '',
value: props.valueType === 'value' ? dnsProvider.value[0]?.value || '' : dnsProvider.value[0]?.type || '',
type: props.valueType === 'value' ? dnsProvider.value[0]?.type || '' : dnsProvider.value[0]?.value || '',
}
emit('update:value', { ...param.value })
}
// 如果 param.value.value 不为空但找不到匹配项,保持当前值不变
// 这种情况可能是数据还未加载完成或者选项暂时不可用
}
}
/**
* @function handleUpdateValue
* @description 更新 param.value 并触发类型更新
* @param value - 新的选中值
*/
const handleUpdateValue = (value: string) => {
param.value.value = value
handleUpdateType()
}
/**
* @function loadDnsProviders
* @description 加载DNS提供商选项
* @param type - DNS提供商类型默认为 props.type
*/
const loadDnsProviders = async (type: DnsProviderType = props.type) => {
isLoading.value = true
errorMessage.value = ''
try {
await fetchDnsProvider(type)
// 数据加载后,优先使用 props.value 设置初始值
if (props.value) {
// 直接设置 param.value.value然后调用 handleUpdateType 来更新完整信息
param.value.value = props.value
handleUpdateType()
} else {
// 只有在 props.value 为空时才考虑设置默认值
handleUpdateType()
}
} catch (error) {
errorMessage.value = typeof error === 'string' ? error : $t('t_0_1746760933542') // '获取DNS提供商列表失败'
handleError(error)
} finally {
isLoading.value = false
}
}
/**
* @function handleFilter
* @description NSelect 组件的搜索过滤函数
* @param pattern - 搜索文本
* @param option - 当前选项
* @returns {boolean} 是否匹配
*/
const handleFilter = (pattern: string, option: DnsProviderOption): boolean => {
return option.label.toLowerCase().includes(pattern.toLowerCase())
}
watch(
() => dnsProvider.value,
(newVal) => {
dnsProviderRef.value =
newVal.map((item) => ({
label: item.label,
value: props.valueType === 'value' ? item.value : item.type,
type: props.valueType === 'value' ? item.type : item.value, // 确保 type 也被正确映射
})) || []
// 当 dnsProvider 列表更新后,重新评估 param 的值
const currentParamExists = dnsProviderRef.value.some((opt) => opt.value === param.value.value)
if (currentParamExists) {
// 如果当前值在新列表中存在,更新完整信息
handleUpdateType()
} else if (props.value && dnsProviderRef.value.some((opt) => opt.value === props.value)) {
// 如果 props.value 在新列表中存在,使用 props.value
param.value.value = props.value
handleUpdateType()
} else if (param.value.value === '') {
// 只有在当前值为空时才设置默认值
if (dnsProviderRef.value.length > 0) {
param.value.value = dnsProviderRef.value[0]?.value || ''
handleUpdateType()
}
}
// 如果当前值不为空但在新列表中不存在,保持当前值不变
// 这样可以避免在数据加载过程中意外覆盖用户设置的值
},
{ deep: true }, // 监听 dnsProvider 数组内部变化
)
watch(
() => props.value,
(newValue) => {
// 仅当外部 props.value 与内部 param.value.value 不一致时才更新
// 避免因子组件 emit('update:value') 导致父组件 props.value 更新,从而再次触发此 watch 造成的循环
if (newValue !== param.value.value) {
handleUpdateValue(newValue)
}
},
{ immediate: true },
)
watch(
() => props.type,
(newType) => {
loadDnsProviders(newType)
},
)
onMounted(async () => {
await loadDnsProviders(props.type)
})
onUnmounted(() => {
resetDnsProvider()
})
return {
param,
dnsProviderRef,
isLoading,
errorMessage,
goToAddDnsProvider,
handleUpdateValue,
loadDnsProviders,
handleFilter,
}
}

View File

@@ -1,182 +0,0 @@
.node {
@apply flex flex-col items-center relative mx-[1.2rem];
}
.nodeArrows::before {
content: '';
position: absolute;
top: -1.2rem;
left: 50%;
transform: translateX(-50%);
width: 0;
height: 0.4rem;
border-style: solid;
border-width: 0.8rem 0.6rem 0.4rem;
border-color: #cacaca transparent transparent;
background-color: #f5f5f7;
}
.nodeContent {
display: flex;
flex-direction: column;
align-items: center;
width: 20rem;
min-height: 8rem;
font-size: 1.4rem;
box-shadow: .2rem .2rem .5rem .2rem rgba(0, 0, 0, 0.2);
white-space: normal;
word-break: break-word;
position: relative;
box-sizing: border-box;
border-radius: 0.5rem;
transition: box-shadow 0.1s;
}
.nodeContent:hover {
box-shadow: 0.3rem 0.3rem .6rem 0.3rem rgba(0, 0, 0, 0.2);
}
.nodeSelected {
box-shadow: 0 0 0 2px #1e83e9;
border: 1px solid #1e83e9;
}
.nodeHeader {
@apply w-full flex relative items-center justify-center bg-[#1e83e9] rounded-t-[0.5rem] p-[0.5rem_1rem] text-white box-border;
}
.nodeHeaderBranch{
@apply flex-1 justify-between;
}
.nodeCondition{
min-height: 5rem;
}
.nodeConditionHeader {
min-height: 5rem;
border-radius: 1rem;
color: #333 !important;
background-color: #f8fafc !important;
}
.nodeConditionHeader input{
color: #333 !important;
}
.nodeConditionHeader input:focus{
background-color: #efefef !important;
}
.nodeConditionHeader .nodeIcon{
color: #333 !important;
}
.nodeIcon {
@apply text-[1.6rem];
}
.nodeHeaderTitle {
@apply flex flex-row items-center justify-center relative px-[2rem];
}
.nodeHeaderTitleText {
@apply max-w-[11rem] min-w-[2rem] mr-[0.5rem] whitespace-nowrap overflow-hidden text-ellipsis;
}
.nodeHeaderTitleInput {
@apply w-auto ;
}
.nodeHeaderTitleInput input {
@apply w-full text-center border border-none rounded px-2 py-1 text-[#fff] focus:outline-none bg-transparent;
}
.nodeHeaderTitleInput input:focus {
@apply border-[#1e83e9] text-[#333];
}
.nodeHeaderTitleEdit {
@apply w-[3rem] cursor-pointer hidden;
}
.nodeHeaderTitle:hover .nodeHeaderTitleEdit {
@apply inline;
}
.nodeClose {
@apply text-[1.6rem] text-center cursor-pointer;
}
.nodeBody {
@apply w-full flex-1 flex flex-col justify-center bg-white rounded-b-[0.5rem] p-[1rem] text-[#5a5e66] cursor-pointer box-border;
}
.nodeConditionBody {
@apply bg-[#f8fafc] rounded-[0.5rem];
}
.nodeError {
box-shadow: 0 0 1rem 0.2rem rgba(243, 5, 5, 0.5);
}
.nodeError:hover {
box-shadow: 0 0 1.2rem 0.4rem rgba(243, 5, 5, 0.5);
}
.nodeErrorMsg {
@apply absolute top-1/2 -translate-y-1/2 -right-[5.5rem] z-[1];
}
.nodeErrorMsgBox {
@apply relative;
}
.nodeErrorIcon {
@apply w-[2.5rem] h-[2.5rem] cursor-pointer;
}
.nodeErrorTips {
position: absolute;
z-index: 3;
top: 50%;
transform: translateY(-50%);
left: 4.5rem;
min-width: 15rem;
background-color: white;
border-radius: 0.5rem;
box-shadow: 0.5rem 0.5rem 1rem 0.2rem rgba(0, 0, 0, 0.2);
display: flex;
padding: 1.6rem;
}
.nodeErrorTips::before {
content: '';
width: 0;
height: 0;
border-width: 1rem;
border-style: solid;
position: absolute;
top: 50%;
left: -2rem;
transform: translateY(-50%);
border-color: transparent #FFFFFF transparent transparent;
}
.nodeMove {
@apply absolute top-1/2 -translate-y-1/2;
}
.nodeMoveLeft {
@apply -left-[3rem];
}
.nodeMoveRight {
@apply -right-[3rem];
}
.nodeMoveIcon {
@apply w-[3.5rem] h-[3.5rem] cursor-pointer;
}

View File

@@ -1,248 +0,0 @@
import { v4 as uuidv4 } from 'uuid'
import { markRaw } from 'vue'
import { useStore } from '@components/FlowChart/useStore'
import nodeOptions from '@components/FlowChart/lib/config'
import { useDialog } from '@baota/naive-ui/hooks'
import { $t } from '@locales/index'
import { CONDITION, EXECUTE_RESULT_CONDITION, START } from '@components/FlowChart/lib/alias'
import { useNodeValidator } from '@components/FlowChart/lib/verify'
import AddNode from '@components/FlowChart/components/other/addNode/index'
import SvgIcon from '@components/SvgIcon'
import type { BaseNodeData, NodeNum, BaseRenderNodeOptions, BaseNodeProps } from '@components/FlowChart/types'
import styles from './index.module.css'
import ErrorNode from '../errorNode/index'
export default defineComponent({
name: 'BaseNode',
props: {
// 节点数据
node: {
type: Object as PropType<BaseNodeData>,
required: true, // 自读
},
},
setup(props: BaseNodeProps) {
// 注入任务节点组件映射
const taskComponents = inject('taskComponents', {}) as Record<string, Component>
// ====================== 基础状态数据 ======================
const { validator, validate } = useNodeValidator() // 验证器
const tempNodeId = ref(props.node.id || uuidv4()) // 节点id
const config = ref<BaseRenderNodeOptions<BaseNodeData>>(nodeOptions[props.node.type]() || {}) // 节点配置
const nodeNameRef = ref<HTMLInputElement | null>(null) // 节点名称输入框
const isShowEditNodeName = ref(false) // 是否显示编辑节点名称
const inputValue = ref(props.node.name) // 输入框值
const renderNodeContent = ref() // 节点组件
const nodeContentRef = ref() // 节点内容
const { removeNode, updateNode, selectedNodeId, selectedNode } = useStore()
// ====================== 节点状态数据 ======================
// 错误状态
const errorState = ref({
isError: false,
message: null as string | null,
showTips: false,
})
// ====================== 计算属性 ======================
// 是否是开始节点
const isStart = computed(() => props.node.type === START)
// 是否可以删除
const isRemoved = computed(() => config.value?.operateNode?.remove)
// 是否是条件节点
const isCondition = computed(() => [CONDITION, EXECUTE_RESULT_CONDITION].includes(props.node.type))
// 根据节点类型获取图标
const typeIcon: ComputedRef<string> = computed(() => {
const type = {
success: 'flow-success',
fail: 'flow-error',
}
// console.log(props.node.config?.type)
if (props.node.type === EXECUTE_RESULT_CONDITION)
return (type[props.node.config?.type as keyof typeof type] || '') as string
return ''
})
// 根据节点类型获取图标颜色
const typeIconColor: ComputedRef<string> = computed(() => {
if (props.node.type === EXECUTE_RESULT_CONDITION) return (props.node.config?.type || '') as string
return '#FFFFFF'
})
// ====================== 数据监听与副作用 ======================
// 监听节点数据,更新节点配置
watch(
() => props.node,
() => {
config.value = nodeOptions[props.node.type as NodeNum]() // 更新节点配置
inputValue.value = props.node.name // 更新节点名称
tempNodeId.value = props.node.id || uuidv4() // 更新节点id
validator.validateAll() // 验证器验证
// 使用注入的taskComponents而不是props传递
const nodeType = props.node.type
const nodeComponentKey = `${nodeType}Node`
// 如果taskComponents中有对应的组件就使用否则使用ErrorNode
if (taskComponents && taskComponents[nodeComponentKey]) {
renderNodeContent.value = markRaw(taskComponents[nodeComponentKey])
} else {
renderNodeContent.value = markRaw(
defineAsyncComponent({
loader: () => import('@components/FlowChart/components/base/errorNode'),
loadingComponent: () => <div>Loading...</div>,
errorComponent: () => <ErrorNode />,
}),
)
}
},
{ immediate: true },
)
// ====================== 节点操作方法 ======================
/**
* @description 显示错误提示
* @param {boolean} flag - 是否显示
*/
const showErrorTips = (flag: boolean) => {
errorState.value.showTips = flag
}
/**
* @description 删除选中节点
* @param {MouseEvent} ev - 事件对象
* @param {string} id - 节点id
* @param {BaseNodeData} node - 节点数据
*/
const removeFindNode = (ev: MouseEvent, id: string, node: BaseNodeData) => {
const validator = validate(id)
if (validator.valid) {
useDialog({
type: 'warning',
title: $t('t_1_1745765875247', { name: node.name }),
content: node.type === CONDITION ? $t('t_2_1745765875918') : $t('t_3_1745765920953'),
onPositiveClick: () => removeNode(id),
})
}
// 如果节点类型是条件节点或验证不通过,则删除节点
if ([EXECUTE_RESULT_CONDITION].includes(node.type) || !validator.valid) {
removeNode(id)
}
ev.stopPropagation()
ev.preventDefault()
}
/**
* @description 点击节点
*/
const handleNodeClick = () => {
console.log('nodeContentRef', nodeContentRef.value)
if (
nodeContentRef.value?.handleNodeClick &&
props.node.type !== CONDITION &&
props.node.type !== EXECUTE_RESULT_CONDITION
) {
selectedNodeId.value = props.node.id || ''
nodeContentRef.value.handleNodeClick(selectedNode)
}
}
// ====================== 事件处理函数 ======================
// 回车保存
const keyupSaveNodeName = (e: KeyboardEvent) => {
if (e.keyCode === 13) {
isShowEditNodeName.value = false
}
}
// 保存节点名称
const saveNodeName = (e: Event) => {
const target = e.target as HTMLInputElement
inputValue.value = target.value
updateNode(tempNodeId.value, { name: inputValue.value })
}
// ====================== 渲染函数 ======================
return () => (
<div class={[styles.node, !isStart.value && styles.nodeArrows]}>
<div class={[styles.nodeContent, isCondition.value && styles.nodeCondition]} onClick={handleNodeClick}>
{/* 节点头部 */}
<div
class={[
styles.nodeHeader,
isCondition.value && styles.nodeConditionHeader,
!typeIcon.value ? styles.nodeHeaderBranch : '',
]}
style={{
color: config.value?.title?.color,
backgroundColor: config.value?.title?.bgColor,
}}
>
{/* 节点图标 */}
{typeIcon.value ? (
<SvgIcon
icon={typeIcon.value ? typeIcon.value : config.value?.icon?.name || ''}
class={[styles.nodeIcon, '!absolute top-[50%] left-[1rem] -mt-[.8rem]']}
color={typeIconColor.value}
/>
) : null}
{/* 节点标题 */}
<div class={styles.nodeHeaderTitle} title="点击编辑">
<div class={styles.nodeHeaderTitleInput}>
<input
ref={nodeNameRef}
value={inputValue.value}
onClick={(e) => e.stopPropagation()}
onInput={saveNodeName}
onBlur={() => (isShowEditNodeName.value = false)}
onKeyup={keyupSaveNodeName}
/>
</div>
</div>
{/* 删除按钮 */}
{isRemoved.value && (
<span
onClick={(ev) => removeFindNode(ev, tempNodeId.value, props.node)}
class="flex items-center justify-center absolute top-[50%] right-[1rem] -mt-[.9rem]"
>
<SvgIcon class={styles.nodeClose} icon="close" color={isCondition.value ? '#333' : '#FFFFFF'} />
</span>
)}
</div>
{/* 节点主体 */}
{!isCondition.value ? (
<div class={[styles.nodeBody]}>
{renderNodeContent.value &&
h(renderNodeContent.value, {
id: props.node.id,
node: props.node || {},
class: 'text-center',
ref: nodeContentRef,
})}
</div>
) : null}
{/* 错误提示 */}
{errorState.value.showTips && (
<div class={styles.nodeErrorMsg}>
<div class={styles.nodeErrorMsgBox}>
<span onMouseenter={() => showErrorTips(true)} onMouseleave={() => showErrorTips(false)}>
<SvgIcon class={styles.nodeErrorIcon} icon="tips" color="red" />
</span>
{errorState.value.message && <div class={styles.nodeErrorTips}>{errorState.value.message}</div>}
</div>
</div>
)}
</div>
{/* 添加节点组件 */}
<AddNode node={props.node} />
</div>
)
},
})

View File

@@ -1,69 +0,0 @@
.flowNodeBranch {
@apply flex flex-col justify-center w-full relative max-w-full overflow-visible;
}
/* 多列分支样式 */
.multipleColumns {
@apply w-full
}
.flowNodeBranchBox {
@apply flex flex-row w-full flex-nowrap min-h-[50px] relative overflow-visible;
}
/* 有嵌套分支的容器样式 */
.hasNestedBranch {
@apply w-full justify-around;
}
.flowNodeBranchCol {
@apply flex flex-col items-center border-t-2 border-b-2 border-[#cacaca] pt-[50px] bg-[#f8fafc] flex-1 relative max-w-[50%];
}
/* 有嵌套分支时列宽调整 */
.hasNestedBranch .flowNodeBranchCol {
@apply w-full;
}
/* 多级嵌套分支样式调整 */
.flowNodeBranchCol .flowNodeBranchCol {
@apply min-w-[20rem] w-[24rem]
}
.flowNodeBranchCol::before {
@apply content-[''] absolute top-0 left-0 right-0 bottom-0 z-0 m-auto w-[2px] h-full bg-[#cacaca];
}
.coverLine {
@apply absolute h-[8px] w-[calc(50%-1px)] bg-[#f8fafc];
}
.topLeftCoverLine {
@apply -top-[4px] left-0;
}
.topRightCoverLine {
@apply -top-[4px] right-0;
}
.bottomLeftCoverLine {
@apply -bottom-[4px] left-0;
}
.bottomRightCoverLine {
@apply -bottom-[4px] right-0;
}
.rightCoverLine{
@apply absolute w-[2px] bg-[#f8fafc] top-0 right-0 h-full;
}
.leftCoverLine{
@apply absolute w-[2px] bg-[#f8fafc] top-0 left-0 h-full;
}
.flowConditionNodeAdd {
@apply absolute left-1/2 -translate-x-1/2 -top-[15px] flex justify-center items-center z-[2] w-[70px] h-[30px] text-[12px] text-[#1c84c6] bg-white rounded-[20px] cursor-pointer shadow-md;
}

View File

@@ -1,113 +0,0 @@
import { v4 as uuidv4 } from 'uuid'
import nodeOptions from '@components/FlowChart/lib/config'
import { useStore } from '@components/FlowChart/useStore'
import { CONDITION } from '@components/FlowChart/lib/alias'
import NodeWrap from '@components/FlowChart/components/render/nodeWrap'
import AddNode from '@components/FlowChart/components/other/addNode'
import styles from './index.module.css'
import type { BaseRenderNodeOptions, BranchNodeData } from '@components/FlowChart/types'
export default defineComponent({
name: 'BranchNode',
props: {
node: {
type: Object as () => BranchNodeData,
default: () => ({}),
},
},
setup(props: { node: BranchNodeData }) {
const { addNode } = useStore() // 流程图数据
const config = ref<BaseRenderNodeOptions<BranchNodeData>>(nodeOptions[props.node.type]() || {}) // 节点配置
watch(
() => props.node.type,
(newVal) => {
config.value = nodeOptions[newVal]() || {}
},
)
// 添加分支
const addCondition = () => {
const tempNodeId = uuidv4() // 临时节点id
addNode(
props.node.id || '',
CONDITION,
{
id: tempNodeId,
name: `分支${(props.node.conditionNodes?.length || 0) + 1}`,
},
props.node.conditionNodes?.length,
)
}
// 计算容器类名,根据分支数量调整样式
const getContainerClass = () => {
const count = props.node.conditionNodes?.length || 0
const baseClass = styles.flowNodeBranch
// 分支数量多时添加特殊类
if (count > 3) {
return `${baseClass} ${styles.multipleColumns}`
}
return baseClass
}
// 计算分支盒子类名,处理多层嵌套情况
const getBoxClass = () => {
// 检查是否有嵌套的分支节点
const hasNestedBranch = props.node.conditionNodes?.some(
(node) => node.childNode && ['branch', 'execute_result_branch'].includes(node.childNode.type),
)
const baseClass = styles.flowNodeBranchBox
if (hasNestedBranch) {
return `${baseClass} ${styles.hasNestedBranch}`
}
return baseClass
}
return () => (
<div class={getContainerClass()}>
{config.value.operateNode?.addBranch && (
<div class={styles.flowConditionNodeAdd} onClick={addCondition}>
{config.value.operateNode?.addBranchTitle || '添加分支'}
</div>
)}
<div class={getBoxClass()}>
{props.node.conditionNodes?.map((condition, index: number) => (
<div
class={styles.flowNodeBranchCol}
key={index}
data-branch-index={index}
data-branches-count={props.node.conditionNodes?.length}
>
{/* 条件节点 */}
<NodeWrap node={condition} />
{/* 用来遮挡最左列的线 */}
{index === 0 && (
<div>
<div class={`${styles.coverLine} ${styles.topLeftCoverLine}`} />
<div class={`${styles.coverLine} ${styles.bottomLeftCoverLine}`} />
<div class={`${styles.rightCoverLine}`} />
</div>
)}
{/* 用来遮挡最右列的线 */}
{index === (props.node.conditionNodes?.length || 0) - 1 && (
<div>
<div class={`${styles.coverLine} ${styles.topRightCoverLine}`} />
<div class={`${styles.coverLine} ${styles.bottomRightCoverLine}`} />
<div class={`${styles.leftCoverLine}`} />
</div>
)}
</div>
))}
</div>
<AddNode node={props.node} />
</div>
)
},
})

View File

@@ -1,111 +0,0 @@
import { v4 as uuidv4 } from 'uuid'
import nodeOptions from '@components/FlowChart/lib/config'
import { useStore } from '@components/FlowChart/useStore'
import { CONDITION } from '@components/FlowChart/lib/alias'
import NodeWrap from '@components/FlowChart/components/render/nodeWrap'
import AddNode from '@components/FlowChart/components/other/addNode'
import styles from '../branchNode/index.module.css'
import type { BaseRenderNodeOptions, ExecuteResultBranchNodeData } from '@components/FlowChart/types'
export default defineComponent({
name: 'BranchNode',
props: {
node: {
type: Object as () => ExecuteResultBranchNodeData,
default: () => ({}),
},
},
setup(props: { node: ExecuteResultBranchNodeData }) {
const { addNode } = useStore() // 流程图数据
const config = ref<BaseRenderNodeOptions<ExecuteResultBranchNodeData>>(nodeOptions[props.node.type]() || {}) // 节点配置
watch(
() => props.node.type,
(newVal) => {
config.value = nodeOptions[newVal]() || {}
},
)
// 添加条件
const addCondition = () => {
const tempNodeId = uuidv4() // 临时节点id
addNode(
props.node.id || '',
CONDITION,
{
id: tempNodeId,
name: `分支${(props.node.conditionNodes?.length || 0) + 1}`,
},
props.node.conditionNodes?.length,
)
}
// 计算容器类名,根据分支数量调整样式
const getContainerClass = () => {
const count = props.node.conditionNodes?.length || 0
const baseClass = styles.flowNodeBranch
// 分支数量多时添加特殊类
if (count > 3) {
return `${baseClass} ${styles.multipleColumns}`
}
return baseClass
}
// 计算分支盒子类名,处理多层嵌套情况
const getBoxClass = () => {
// 检查是否有嵌套的分支节点
const hasNestedBranch = props.node.conditionNodes?.some(
(node) => node.childNode && ['branch', 'execute_result_branch'].includes(node.childNode.type),
)
const baseClass = styles.flowNodeBranchBox
if (hasNestedBranch) {
return `${baseClass} ${styles.hasNestedBranch}`
}
return baseClass
}
return () => (
<div class={getContainerClass()}>
{config.value.operateNode?.addBranch && (
<div class={styles.flowConditionNodeAdd} onClick={addCondition}>
{config.value.operateNode?.addBranchTitle || '添加分支'}
</div>
)}
<div class={getBoxClass()}>
{props.node.conditionNodes?.map((condition, index: number) => (
<div
class={styles.flowNodeBranchCol}
key={index}
data-branch-index={index}
data-branches-count={props.node.conditionNodes?.length}
>
{/* 条件节点 */}
<NodeWrap node={condition} />
{/* 用来遮挡最左列的线 */}
{index === 0 && (
<div>
<div class={`${styles.coverLine} ${styles.topLeftCoverLine}`} />
<div class={`${styles.coverLine} ${styles.bottomLeftCoverLine}`} />
<div class={`${styles.rightCoverLine}`} />
</div>
)}
{/* 用来遮挡最右列的线 */}
{index === (props.node.conditionNodes?.length || 0) - 1 && (
<div>
<div class={`${styles.coverLine} ${styles.topRightCoverLine}`} />
<div class={`${styles.coverLine} ${styles.bottomRightCoverLine}`} />
<div class={`${styles.leftCoverLine}`} />
</div>
)}
</div>
))}
</div>
<AddNode node={props.node} />
</div>
)
},
})

View File

@@ -1,11 +0,0 @@
export default defineComponent({
name: 'EndNode',
setup() {
return () => (
<div class="flex flex-col items-center justify-center">
<div class="w-[1.5rem] h-[1.5rem] rounded-[1rem] bg-[#cacaca]"></div>
<div class="text-[#5a5e66] mb-[10rem]"></div>
</div>
)
},
})

View File

@@ -1,14 +0,0 @@
import { BaseNodeData } from '@components/FlowChart/types'
export default defineComponent({
name: 'BranchNode',
props: {
node: {
type: Object as () => BaseNodeData,
default: () => ({}),
},
},
setup() {
return () => <div></div>
},
})

Some files were not shown because too many files have changed in this diff Show More