【调整】SSH地址支持域名形式

【新增】支持自定义监控端口
【新增】通知类型-企业微信
【新增】申请证书(Buypass)、自定义ACME服务器地址
【新增】授权API管理(namesilo、Bunny、Gcore、name.com、京东云)
pull/236/head
chudong 2025-06-07 17:37:42 +08:00
parent 87ae1c9570
commit f0d83d23c6
106 changed files with 1570 additions and 223 deletions

View File

@ -5,8 +5,8 @@
<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-8EQU3vkq.js"></script>
<link rel="stylesheet" crossorigin href="./static/css/style-DiZIyFa4.css">
<script type="module" crossorigin src="./static/js/main-BDpNwYoq.js"></script>
<link rel="stylesheet" crossorigin href="./static/css/style-Bl7CD6Rg.css">
</head>
<body>
<div id="app"></div>

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 +0,0 @@
import{u as s}from"./index-DuzXVHO8.js";import{d as t,c as o}from"./main-8EQU3vkq.js";import"./useStore-D25EZPuq.js";import"./index-DmFXBilk.js";import"./access-Yc3nMp5i.js";import"./index-BLQBOH3S.js";import"./throttle-DwTT6ee8.js";import"./index-C4C8o2au.js";import"./data-DKMNuQUU.js";import"./index-BkKKTGm9.js";import"./business-C0XjYveQ.js";import"./index-0ZfPVTfP.js";const r=t({name:"CAManageForm",setup(){const{CAForm:t}=s();return()=>o(t,{labelPlacement:"top"},null)}});export{r as default};

View File

@ -0,0 +1 @@
import{u as s}from"./index-BlcQ5EX9.js";import{d as t,c as o}from"./main-BDpNwYoq.js";import"./useStore-BkPNjegu.js";import"./index-tKbXP7vZ.js";import"./access-DnkgYTNR.js";import"./index-DF_PW_bx.js";import"./throttle-ILlbNFLH.js";import"./index-jbhegxlH.js";import"./data-CdgEUQod.js";import"./index-BS6eeb8S.js";import"./business-C8cf7OIR.js";import"./index-DxNQwyVP.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-8EQU3vkq.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-BDpNwYoq.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-8EQU3vkq.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-BDpNwYoq.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};

View File

@ -0,0 +1 @@
import{d as c,Y as a,Z as n,_ as o}from"./main-BDpNwYoq.js";const r={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 512 512"},t=c({name:"LogoGithub",render:function(c,t){return n(),a("svg",r,t[0]||(t[0]=[o("path",{d:"M256 32C132.3 32 32 134.9 32 261.7c0 101.5 64.2 187.5 153.2 217.9a17.56 17.56 0 0 0 3.8.4c8.3 0 11.5-6.1 11.5-11.4c0-5.5-.2-19.9-.3-39.1a102.4 102.4 0 0 1-22.6 2.7c-43.1 0-52.9-33.5-52.9-33.5c-10.2-26.5-24.9-33.6-24.9-33.6c-19.5-13.7-.1-14.1 1.4-14.1h.1c22.5 2 34.3 23.8 34.3 23.8c11.2 19.6 26.2 25.1 39.6 25.1a63 63 0 0 0 25.6-6c2-14.8 7.8-24.9 14.2-30.7c-49.7-5.8-102-25.5-102-113.5c0-25.1 8.7-45.6 23-61.6c-2.3-5.8-10-29.2 2.2-60.8a18.64 18.64 0 0 1 5-.5c8.1 0 26.4 3.1 56.6 24.1a208.21 208.21 0 0 1 112.2 0c30.2-21 48.5-24.1 56.6-24.1a18.64 18.64 0 0 1 5 .5c12.2 31.6 4.5 55 2.2 60.8c14.3 16.1 23 36.6 23 61.6c0 88.2-52.4 107.6-102.3 113.3c8 7.1 15.2 21.1 15.2 42.5c0 30.7-.3 55.5-.3 63c0 5.4 3.1 11.5 11.4 11.5a19.35 19.35 0 0 0 4-.4C415.9 449.2 480 363.1 480 261.7C480 134.9 379.7 32 256 32z",fill:"currentColor"},null,-1)]))}});export{t as L};

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{c as s}from"./index-DmFXBilk.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-tKbXP7vZ.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

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 t}from"./index-DmFXBilk.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-tKbXP7vZ.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 +1 @@
import{$ as e}from"./main-8EQU3vkq.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")},singlesite:{name:e("t_1_1747886307276")+"\r\nWin/Linux 9.4前)"}},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},huaweicloud:{name:e("t_9_1747886301128"),icon:"huaweicloud",type:["host","dns"],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},volcengine:{name:e("t_13_1747886301689"),icon:"volcengine",type:["host","dns"],hostRelated:{cdn:{name:e("t_13_1747886301689")+"CDN"},dcdn:{name:e("t_13_1747886301689")+"DCDN"}},sort:13},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},cloudflare:{name:"Cloudflare",icon:"cloudflare",type:["dns"],sort:12},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};
import{$ as e}from"./main-BDpNwYoq.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"}},o={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")},singlesite:{name:e("t_1_1747886307276")+"\r\nWin/Linux 9.4前)"}},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},huaweicloud:{name:e("t_9_1747886301128"),icon:"huaweicloud",type:["host","dns"],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},volcengine:{name:e("t_13_1747886301689"),icon:"volcengine",type:["host","dns"],hostRelated:{cdn:{name:e("t_13_1747886301689")+"CDN"},dcdn:{name:e("t_13_1747886301689")+"DCDN"}},sort:13},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},cloudflare:{name:"Cloudflare",icon:"cloudflare",type:["dns"],sort:12},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},namesilo:{name:"Namesilo",icon:"namesilo",type:["dns"],sort:21},namedotcom:{name:"Name.com",icon:"namedotcom",type:["dns"],sort:22},bunny:{name:"Bunny",icon:"bunny",type:["dns"],sort:23},gcore:{name:"Gcore",icon:"gcore",type:["dns"],sort:24},jdcloud:{name:"京东云",icon:"jdcloud",type:["dns"],sort:25}};export{o as A,n as C,t as M};

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

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{S as e}from"./index-BkKKTGm9.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-8EQU3vkq.js";import{u as c}from"./useStore-CqTywDu_.js";import{M as y}from"./data-DKMNuQUU.js";import{a as m,N as b}from"./business-C0XjYveQ.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-BS6eeb8S.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,bC as p,B as v,i as f}from"./main-BDpNwYoq.js";import{u as c}from"./useStore--5QSg69L.js";import{M as y}from"./data-CdgEUQod.js";import{a as m,N as b}from"./business-C8cf7OIR.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};

View File

@ -1 +1 @@
import{d as e,l as i,c as r}from"./main-8EQU3vkq.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-BDpNwYoq.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

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-CqTywDu_.js";import{u as a,N as l}from"./index-DmFXBilk.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-8EQU3vkq.js";import{S as f}from"./index-BkKKTGm9.js";import{a as m,N as b}from"./business-C0XjYveQ.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--5QSg69L.js";import{u as a,N as l}from"./index-tKbXP7vZ.js";import{r as u,x as t,o as s,aG 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-BDpNwYoq.js";import{S as f}from"./index-BS6eeb8S.js";import{a as m,N as b}from"./business-C8cf7OIR.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};

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{d as e,c as s}from"./main-8EQU3vkq.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-BDpNwYoq.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

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-8EQU3vkq.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-BDpNwYoq.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};

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{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-8EQU3vkq.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{bQ as e,bV as t,bW as n,bR as a,bX as i,aI as o,bT as r,bS as s,A as u,x as c,o as l,V as f,J as m,r as p,bY as v}from"./main-BDpNwYoq.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 W(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 P(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 O(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,W as t,P as u,O as w};

View File

@ -1 +1 @@
var t;import{S as e}from"./index-BkKKTGm9.js";import{A as o,M as a}from"./data-DKMNuQUU.js";import{l as n,d as s,c as l,N as r}from"./main-8EQU3vkq.js";const i={},p={},c=new Set;for(const d in o)if(Object.prototype.hasOwnProperty.call(o,d)){const e=o[d];if(i[d]=e.name,p[d]=e.icon,null==e?void 0:e.hostRelated)for(const o in e.hostRelated)if(Object.prototype.hasOwnProperty.call(e.hostRelated,o)){const a=e.hostRelated[o],n=`${d}-${o}`;n&&(i[n]=(null==(t=null==a?void 0:a.name)?void 0:t.toString())??"",p[n]=e.icon)}}for(const d in a)if(Object.prototype.hasOwnProperty.call(a,d)){const t=a[d];i[d]=t.name,p[d]=t.type,c.add(d)}o.btwaf&&(p.btwaf="btpanel");const u=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:a}=function(t){return{iconPath:n((()=>(c.has(t.icon)?"notify-":"resources-")+(p[t.icon]||"default"))),typeName:n((()=>i[t.icon]||t.icon))}}(t);return()=>l(r,{type:t.type,size:"small",class:"w-auto text-ellipsis overflow-hidden whitespace-normal p-[.6rem] h-auto"},{default:()=>[l(e,{icon:o.value,size:"1.2rem",class:"mr-[0.4rem]"},null),l("span",null,[t.text&&l("span",{class:"text-[12px]"},[a.value])])]})}});export{u as T};
var t;import{S as e}from"./index-BS6eeb8S.js";import{A as o,M as a}from"./data-CdgEUQod.js";import{l as n,d as s,c as l,N as r}from"./main-BDpNwYoq.js";const i={},p={},c=new Set;for(const d in o)if(Object.prototype.hasOwnProperty.call(o,d)){const e=o[d];if(i[d]=e.name,p[d]=e.icon,null==e?void 0:e.hostRelated)for(const o in e.hostRelated)if(Object.prototype.hasOwnProperty.call(e.hostRelated,o)){const a=e.hostRelated[o],n=`${d}-${o}`;n&&(i[n]=(null==(t=null==a?void 0:a.name)?void 0:t.toString())??"",p[n]=e.icon)}}for(const d in a)if(Object.prototype.hasOwnProperty.call(a,d)){const t=a[d];i[d]=t.name,p[d]=t.type,c.add(d)}o.btwaf&&(p.btwaf="btpanel");const u=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:a}=function(t){return{iconPath:n((()=>(c.has(t.icon)?"notify-":"resources-")+(p[t.icon]||"default"))),typeName:n((()=>i[t.icon]||t.icon))}}(t);return()=>l(r,{type:t.type,size:"small",class:"w-auto text-ellipsis overflow-hidden whitespace-normal p-[.6rem] h-auto"},{default:()=>[l(e,{icon:o.value,size:"1.2rem",class:"mr-[0.4rem]"},null),l("span",null,[t.text&&l("span",{class:"text-[12px]"},[a.value])])]})}});export{u as T};

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 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-8EQU3vkq.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-BDpNwYoq.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 @@
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-0ZfPVTfP.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-8EQU3vkq.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-DxNQwyVP.js";import{bQ as u,ay as f,bR as c,l as d,bS as v,o as g,bT as p,bU as w,r as m,x as y,V as h}from"./main-BDpNwYoq.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 j="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},A="__vueuse_ssr_handlers__",I=J();function J(){return A in j||(j[A]=j[A]||{}),j[A]}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),j=d((()=>c(e)));if(!n)try{n=function(e,t){return I[e]||t}("getDefaultStorage",(()=>{var e;return null==(e=b)?void 0:e.localStorage}))()}catch(B){M(B)}if(!n)return E;const A=c(t),J=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"}(A),D=null!=(r=a.serializer)?r:_[J],{pause:V,resume:T}=s(E,(()=>function(e){try{const t=n.getItem(j.value);if(null==e)k(t,null),n.removeItem(j.value);else{const a=D.write(e);t!==a&&(n.setItem(j.value,a),k(t,a))}}catch(B){M(B)}}(E.value)),{flush:o,deep:l,eventFilter:N});function k(e,t){if(w){const a={key:j.value,oldValue:e,newValue:t,storageArea:n};w.dispatchEvent(n instanceof Storage?new StorageEvent("storage",a):new CustomEvent(x,{detail:a}))}}function z(e){if(!e||e.storageArea===n)if(e&&null==e.key)E.value=A;else if(!e||e.key===j.value){V();try{(null==e?void 0:e.newValue)!==D.write(E.value)&&(E.value=function(e){const t=e?e.newValue:n.getItem(j.value);if(null==t)return v&&null!=A&&n.setItem(j.value,D.write(A)),A;if(!e&&g){const e=D.read(t);return"function"==typeof g?g(e,A):"object"!==J||Array.isArray(e)?e:{...A,...e}}return"string"!=typeof t?t:D.read(t)}(e))}catch(B){M(B)}finally{e?h(T):T()}}}function F(e){z(e.detail)}return y(j,(()=>z()),{flush:o}),w&&f&&i((()=>{n instanceof Storage?S(w,"storage",z,{passive:!0}):S(w,x,F),O&&z()})),O||z(),E}function V(e,t,n={}){const{window:a=b}=n;return D(e,t,null==a?void 0:a.localStorage,n)}function T(e,t,n={}){const{window:a=b}=n;return D(e,t,null==a?void 0:a.sessionStorage,n)}export{V as a,T as b,E as u};

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

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{c as o,d as s}from"./index-DmFXBilk.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-tKbXP7vZ.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};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{c as t}from"./index-DmFXBilk.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

@ -0,0 +1 @@
import{c as t}from"./index-tKbXP7vZ.js";const e=e=>t("/v1/setting/get_setting",e),s=e=>t("/v1/setting/save_setting",e),r=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),v=e=>t("/v1/setting/get_version",e);export{e as a,i as b,r as c,a as d,v as g,s,p as t,o as u};

View File

@ -1 +1 @@
import{c1 as t,c2 as n,c3 as i}from"./main-8EQU3vkq.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{c7 as t,c8 as n,c9 as i}from"./main-BDpNwYoq.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-8EQU3vkq.js";import{a as s,b as n}from"./index-zwGx0-tj.js";import{u as r}from"./index-DmFXBilk.js";import{a as i}from"./setting-B2E69T0V.js";import{i as u}from"./access-Yc3nMp5i.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-BDpNwYoq.js";import{a as s,b as n}from"./index-ljV2JH1b.js";import{u as r}from"./index-tKbXP7vZ.js";import{b as i}from"./setting-CUXc7rMj.js";import{i as u}from"./access-DnkgYTNR.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

@ -0,0 +1 @@
import{c as e,u as a}from"./index-tKbXP7vZ.js";import{e as o,s as t,r as l,$ as r}from"./main-BDpNwYoq.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),f=a=>e("/v1/workflow/get_exec_log",a),n=a=>e("/v1/workflow/execute_workflow",a),d=a=>e("/v1/workflow/exec_type",a),i=a=>e("/v1/workflow/active",a),k=a=>e("/v1/workflow/stop",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"),f=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:f,resetWorkflowData:()=>{s.value={id:"",name:"",content:"",active:"1",exec_type:"manual"},f.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"))}}}})),v=()=>{const e=u();return{...e,...t(e)}};export{c as a,n as b,f as c,s as d,i as e,v as f,w as g,k as s,d as u};

View File

@ -1 +0,0 @@
import{c as e,u as a}from"./index-DmFXBilk.js";import{e as o,s as t,r as l,$ as r}from"./main-8EQU3vkq.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};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -10792,5 +10792,192 @@
"arDZ": "إرسال رسالة اختبار إلى، التكوين الحالي {type} إشعار، هل تتابع؟"
},
"timestamp": "2025-05-30T07:54:29.194Z"
},
"服务器IP地址或域名格式错误": {
"text": "服务器IP地址或域名格式错误",
"key": "t_0_1749119980577",
"translations": {
"zhCN": "服务器IP地址或域名格式错误",
"zhTW": "伺服器IP位址或網域名稱格式錯誤",
"enUS": "Server IP address or domain name format error",
"jaJP": "サーバーのIPアドレスまたはドメイン名の形式が正しくありません",
"koKR": "서버 IP 주소 또는 도메인 이름 형식 오류",
"ruRU": "Ошибка формата IP-адреса сервера или доменного имени",
"ptBR": "Erro de formato de endereço IP ou nome de domínio do servidor",
"frFR": "Erreur de format d'adresse IP ou de nom de domaine du serveur",
"esAR": "Error de formato de dirección IP o nombre de dominio del servidor",
"arDZ": "خطأ في تنسيق عنوان IP الخادم أو اسم النطاق"
},
"timestamp": "2025-06-05T10:39:40.577Z"
},
"停止执行": {
"text": "停止执行",
"key": "t_0_1749204565782",
"translations": {
"zhCN": "停止执行",
"zhTW": "停止執行",
"enUS": "Stop execution",
"jaJP": "実行を停止",
"koKR": "실행 중지",
"ruRU": "Остановить выполнение",
"ptBR": "Parar execução",
"frFR": "Arrêter l'exécution",
"esAR": "Detener ejecución",
"arDZ": "إيقاف التنفيذ"
},
"timestamp": "2025-06-06T10:09:30.473Z"
},
"确定要停止当前工作流的执行吗?": {
"text": "确定要停止当前工作流的执行吗?",
"key": "t_1_1749204570473",
"translations": {
"zhCN": "确定要停止当前工作流的执行吗?",
"zhTW": "確定要停止當前工作流的執行嗎?",
"enUS": "Are you sure you want to stop the execution of the current workflow?",
"jaJP": "現在のワークフローの実行を停止しますか?",
"koKR": "현재 워크플로우 실행을 중지하시겠습니까?",
"ruRU": "Вы уверены, что хотите остановить выполнение текущего рабочего процесса?",
"ptBR": "Tem certeza de que deseja interromper a execução do fluxo de trabalho atual?",
"frFR": "Êtes-vous sûr de vouloir arrêter l'exécution du workflow actuel ?",
"esAR": "¿Estás seguro de que quieres detener la ejecución del flujo de trabajo actual?",
"arDZ": "هل أنت متأكد أنك تريد إيقاف تنفيذ سير العمل الحالي؟"
},
"timestamp": "2025-06-06T10:09:30.474Z"
},
"禁用CNAME支持": {
"text": "禁用CNAME支持",
"key": "t_2_1749204567193",
"translations": {
"zhCN": "禁用CNAME支持",
"zhTW": "禁用CNAME支援",
"enUS": "Disable CNAME support",
"jaJP": "CNAMEサポートを無効にする",
"koKR": "CNAME 지원 비활성화",
"ruRU": "Отключить поддержку CNAME",
"ptBR": "Desativar suporte CNAME",
"frFR": "Désactiver la prise en charge CNAME",
"esAR": "Deshabilitar soporte CNAME",
"arDZ": "تعطيل دعم CNAME"
},
"timestamp": "2025-06-06T10:09:30.474Z"
},
"预检查超时时间(秒)": {
"text": "预检查超时时间(秒)",
"key": "t_0_1749263105073",
"translations": {
"zhCN": "预检查超时时间(秒)",
"zhTW": "預檢查超時時間(秒)",
"enUS": "Pre-check timeout (seconds)",
"jaJP": "事前チェックのタイムアウト時間(秒)",
"koKR": "사전 점검 시간 초과 (초)",
"ruRU": "Таймаут предварительной проверки (секунды)",
"ptBR": "Tempo limite de pré-verificação (segundos)",
"frFR": "Délai d'expiration de la pré-vérification (secondes)",
"esAR": "Tiempo de espera de la preverificación (segundos)",
"arDZ": "وقت انتهاء الفحص المسبق (ثانية)"
},
"timestamp": "2025-06-07T02:25:05.074Z"
},
"请输入预检查超时时间": {
"text": "请输入预检查超时时间",
"key": "t_1_1749263104936",
"translations": {
"zhCN": "请输入预检查超时时间",
"zhTW": "請輸入預檢查超時時間",
"enUS": "Please enter the pre-check timeout",
"jaJP": "事前チェックのタイムアウト時間を入力してください",
"koKR": "사전 검사 시간 초과 시간을 입력하십시오",
"ruRU": "Введите время ожидания предварительной проверки",
"ptBR": "Insira o tempo limite de pré-verificação",
"frFR": "Veuillez entrer le délai d'attente de pré-vérification",
"esAR": "Introduce el tiempo de espera de la comprobación previa",
"arDZ": "الرجاء إدخال مهلة التحقق المسبق"
},
"timestamp": "2025-06-07T02:25:05.074Z"
},
"忽略预检查结果": {
"text": "忽略预检查结果",
"key": "t_2_1749263103765",
"translations": {
"zhCN": "忽略预检查结果",
"zhTW": "忽略預檢查結果",
"enUS": "Ignore pre-check results",
"jaJP": "事前チェック結果を無視",
"koKR": "사전 점검 결과 무시",
"ruRU": "Игнорировать результаты предварительной проверки",
"ptBR": "Ignorar resultados de pré-verificação",
"frFR": "Ignorer les résultats de la pré-vérification",
"esAR": "Ignorar los resultados de la verificación previa",
"arDZ": "تجاهل نتائج الفحص المسبق"
},
"timestamp": "2025-06-07T02:25:05.074Z"
},
"当预检查失败时": {
"text": "当预检查失败时",
"key": "t_3_1749263104237",
"translations": {
"zhCN": "当预检查失败时",
"zhTW": "當預檢查失敗時",
"enUS": "When the pre-check fails",
"jaJP": "事前チェックが失敗した場合",
"koKR": "사전 점검이 실패했을 때",
"ruRU": "Когда предварительная проверка не удалась",
"ptBR": "Quando a pré-verificação falha",
"frFR": "Lorsque la pré-vérification échoue",
"esAR": "Cuando falla la verificación previa",
"arDZ": "عندما تفشل الفحص المسبق"
},
"timestamp": "2025-06-07T02:25:05.074Z"
},
"继续": {
"text": "继续",
"key": "t_4_1749263101853",
"translations": {
"zhCN": "继续",
"zhTW": "繼續",
"enUS": "Continue",
"jaJP": "続ける",
"koKR": "계속하다",
"ruRU": "Продолжить",
"ptBR": "Continuar",
"frFR": "Continuer",
"esAR": "Continuar",
"arDZ": "استمر"
},
"timestamp": "2025-06-07T02:25:05.074Z"
},
"停止": {
"text": "停止",
"key": "t_5_1749263101934",
"translations": {
"zhCN": "停止",
"zhTW": "停止",
"enUS": "Stop",
"jaJP": "停止",
"koKR": "중지",
"ruRU": "Остановить",
"ptBR": "Parar",
"frFR": "Arrêter",
"esAR": "Detener",
"arDZ": "توقف"
},
"timestamp": "2025-06-07T02:25:05.074Z"
},
"向ca发起验证请求": {
"text": "向ca发起验证请求",
"key": "t_6_1749263103891",
"translations": {
"zhCN": "向CA发起验证请求",
"zhTW": "向CA發起驗證請求",
"enUS": "Initiate verification request to CA",
"jaJP": "CAに検証リクエストを送信する",
"koKR": "CA에 검증 요청 시작",
"ruRU": "Отправить запрос на проверку в CA",
"ptBR": "Enviar solicitação de verificação para CA",
"frFR": "Envoyer une demande de vérification à CA",
"esAR": "Enviar solicitud de verificación a CA",
"arDZ": "إرسال طلب التحقق إلى CA"
},
"timestamp": "2025-06-07T02:25:05.074Z"
}
}

View File

@ -8,6 +8,8 @@ import type {
GetReportListResponse,
GetSettingParams,
GetSettingResponse,
GetVersionParams,
GetVersionResponse,
SaveSettingParams,
TestReportParams,
UpdateReportParams,
@ -69,5 +71,15 @@ export const testReport = (params?: TestReportParams): useAxiosReturn<AxiosRespo
* @param {GetReportListParams} [params]
* @returns {useAxiosReturn<GetReportListResponse, GetReportListParams>} API
*/
export const getReportList = (params?: GetReportListParams): useAxiosReturn<GetReportListResponse, GetReportListParams> =>
export const getReportList = (
params?: GetReportListParams,
): useAxiosReturn<GetReportListResponse, GetReportListParams> =>
useApi<GetReportListResponse, GetReportListParams>('/v1/report/get_list', params)
/**
* @description
* @param {GetVersionParams} [params]
* @returns {useAxiosReturn<GetVersionResponse, GetVersionParams>} API
*/
export const getVersion = (params?: GetVersionParams): useAxiosReturn<GetVersionResponse, GetVersionParams> =>
useApi<GetVersionResponse, GetVersionParams>('/v1/setting/get_version', params)

View File

@ -6,6 +6,7 @@ import type {
DeleteWorkflowParams,
EnableWorkflowParams,
ExecuteWorkflowParams,
StopWorkflowParams,
UpdateWorkflowExecTypeParams,
UpdateWorkflowParams,
WorkflowHistoryDetailParams,
@ -23,7 +24,9 @@ import { useApi } from '@api/index'
* @param {WorkflowListParams} [params]
* @returns {useAxiosReturn<WorkflowListResponse, WorkflowListParams>} API
*/
export const getWorkflowList = (params?: WorkflowListParams): useAxiosReturn<WorkflowListResponse, WorkflowListParams> =>
export const getWorkflowList = (
params?: WorkflowListParams,
): useAxiosReturn<WorkflowListResponse, WorkflowListParams> =>
useApi<WorkflowListResponse, WorkflowListParams>('/v1/workflow/get_list', params)
/**
@ -39,7 +42,9 @@ export const addWorkflow = (params?: AddWorkflowParams): useAxiosReturn<AxiosRes
* @param {UpdateWorkflowParams} [params]
* @returns {useAxiosReturn<AxiosResponseData, UpdateWorkflowParams>} API
*/
export const updateWorkflow = (params?: UpdateWorkflowParams): useAxiosReturn<AxiosResponseData, UpdateWorkflowParams> =>
export const updateWorkflow = (
params?: UpdateWorkflowParams,
): useAxiosReturn<AxiosResponseData, UpdateWorkflowParams> =>
useApi<AxiosResponseData, UpdateWorkflowParams>('/v1/workflow/upd_workflow', params)
/**
@ -47,7 +52,9 @@ export const updateWorkflow = (params?: UpdateWorkflowParams): useAxiosReturn<Ax
* @param {DeleteWorkflowParams} [params]
* @returns {useAxiosReturn<AxiosResponseData, DeleteWorkflowParams>} API
*/
export const deleteWorkflow = (params?: DeleteWorkflowParams): useAxiosReturn<AxiosResponseData, DeleteWorkflowParams> =>
export const deleteWorkflow = (
params?: DeleteWorkflowParams,
): useAxiosReturn<AxiosResponseData, DeleteWorkflowParams> =>
useApi<AxiosResponseData, DeleteWorkflowParams>('/v1/workflow/del_workflow', params)
/**
@ -75,7 +82,9 @@ export const getWorkflowHistoryDetail = (
* @param {ExecuteWorkflowParams} [params]
* @returns {useAxiosReturn<AxiosResponseData, ExecuteWorkflowParams>} API
*/
export const executeWorkflow = (params?: ExecuteWorkflowParams): useAxiosReturn<AxiosResponseData, ExecuteWorkflowParams> =>
export const executeWorkflow = (
params?: ExecuteWorkflowParams,
): useAxiosReturn<AxiosResponseData, ExecuteWorkflowParams> =>
useApi<AxiosResponseData, ExecuteWorkflowParams>('/v1/workflow/execute_workflow', params)
/**
@ -93,5 +102,15 @@ export const updateWorkflowExecType = (
* @param {EnableWorkflowParams} [params]
* @returns {useAxiosReturn<AxiosResponseData, EnableWorkflowParams>} API
*/
export const enableWorkflow = (params?: EnableWorkflowParams): useAxiosReturn<AxiosResponseData, EnableWorkflowParams> =>
export const enableWorkflow = (
params?: EnableWorkflowParams,
): useAxiosReturn<AxiosResponseData, EnableWorkflowParams> =>
useApi<AxiosResponseData, EnableWorkflowParams>('/v1/workflow/active', params)
/**
* @description
* @param {StopWorkflowParams} [params]
* @returns {useAxiosReturn<AxiosResponseData, StopWorkflowParams>} API
*/
export const stopWorkflow = (params?: StopWorkflowParams): useAxiosReturn<AxiosResponseData, StopWorkflowParams> =>
useApi<AxiosResponseData, StopWorkflowParams>('/v1/workflow/stop', params)

View File

@ -0,0 +1,79 @@
<svg width="64.000000pt" height="64.000000pt" viewBox="0 0 64.000000 64.000000" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(0.000000,64.000000) scale(0.100000,-0.100000)" fill="#fefefe" stroke="none">
<path d="M0 320 l0 -320 320 0 320 0 0 320 0 320 -320 0 -320 0 0 -320z m205
184 c-11 -9 -27 -21 -35 -27 -9 -7 -26 -25 -38 -41 l-22 -29 0 -55 0 -55 34
-31 c39 -37 94 -56 162 -56 l49 0 42 19 c64 30 82 82 42 122 l-22 22 -74 -7
-75 -6 -29 29 -29 29 9 24 c4 13 26 33 47 45 l39 23 47 0 47 0 56 -21 56 -21
34 -33 c18 -19 38 -49 45 -69 l11 -35 -11 -43 -12 -43 -48 -46 -47 -47 -54
-17 c-108 -36 -230 -16 -308 51 -45 39 -81 100 -81 136 1 35 34 100 66 129 25
23 100 68 114 68 3 0 -4 -7 -15 -15z" />
</g>
<g transform="translate(0.000000,64.000000) scale(0.100000,-0.100000)" fill="#2470f0" stroke="none">
<path d="M267 498 c-42 -21 -63 -55 -54 -90 10 -38 95 -75 111 -49 5 7 50 8
98 2 4 -1 15 -12 23 -25 l16 -25 -11 -23 c-17 -32 -51 -58 -77 -58 -13 0 -23
-4 -23 -10 l0 -10 -44 0 c-25 0 -48 5 -51 10 -3 6 -15 10 -26 10 -29 0 -87 41
-98 70 -12 29 -14 44 -12 82 l1 27 30 34 c17 19 30 40 30 46 0 40 -99 -37
-130 -101 l-18 -38 5 -42 6 -43 26 -35 c27 -36 71 -79 82 -80 4 0 24 -7 45
-16 l39 -17 88 -1 c48 -1 87 2 87 7 0 4 8 7 18 7 27 0 117 56 135 84 9 14 23
44 32 68 l14 43 -11 35 c-7 19 -23 50 -36 69 l-25 33 -46 22 c-25 11 -50 21
-56 22 -5 1 -12 3 -15 4 -3 1 -30 3 -60 4 l-55 2 -38 -18z" />
</g>
<g transform="translate(0.000000,64.000000) scale(0.100000,-0.100000)" fill="#2573f7" stroke="none">
<path d="M159 505 c-25 -13 -60 -40 -77 -59 -30 -34 -52 -90 -52 -131 1 -38
37 -101 81 -138 l43 -37 50 -15 c64 -19 169 -19 233 0 l50 15 45 40 c48 41 73
86 65 117 l-4 18 -7 -20 c-4 -11 -15 -35 -24 -54 l-17 -35 -45 -28 c-25 -16
-57 -32 -72 -35 -16 -3 -28 -8 -28 -12 0 -3 -35 -5 -78 -4 l-77 1 -45 18 c-25
10 -46 17 -47 16 -6 -5 -103 105 -98 110 2 2 0 19 -4 38 l-7 35 14 30 c17 35
69 92 97 107 l20 11 -26 -29 c-35 -38 -52 -72 -43 -85 l7 -12 13 29 c17 38 31
54 77 88 20 16 37 32 37 37 0 16 -33 9 -81 -16z" />
<path d="M277 506 c-49 -18 -67 -34 -67 -60 l0 -21 23 27 c12 15 36 33 52 39
33 12 101 15 127 4 9 -4 22 -4 28 0 5 3 10 2 10 -2 0 -8 41 -27 63 -31 14 -1
66 -76 67 -94 0 -9 5 -20 10 -23 l10 -6 0 23 c0 13 -11 40 -25 60 l-25 36 -53
26 -53 26 -64 5 -65 5 -38 -14z" />
<path d="M210 409 c0 -23 32 -48 65 -51 53 -3 95 2 95 12 0 13 -47 13 -54 1
-4 -5 -12 -8 -19 -7 -20 3 -61 28 -74 45 l-12 16 -1 -16z" />
<path d="M380 371 c0 -5 11 -12 25 -15 13 -3 30 -16 36 -27 l11 -22 -11 -23
c-5 -13 -28 -32 -50 -44 l-40 -20 -51 0 -50 0 -45 21 c-48 22 -85 61 -85 87
l0 16 -13 -13 -12 -13 13 -5 c6 -3 10 -8 7 -13 -5 -9 51 -67 60 -62 3 1 13 -4
22 -13 8 -9 22 -14 29 -11 7 3 16 1 19 -4 4 -6 31 -10 61 -10 l54 0 0 11 c0 5
5 7 10 4 16 -10 75 31 88 60 17 38 15 53 -13 80 -23 24 -65 34 -65 16z" />
</g>
<g transform="translate(0.000000,64.000000) scale(0.100000,-0.100000)" fill="#2a74f0" stroke="none">
<path d="M164 504 l-19 -15 24 7 24 6 -7 -11 c-4 -6 -3 -11 3 -11 5 0 13 5 16
10 3 6 1 10 -5 10 -6 0 -8 5 -5 10 9 15 -9 12 -31 -6z" />
<path d="M290 510 c0 -5 4 -10 9 -10 6 0 13 5 16 10 l6 10 -15 0 c-9 0 -16 -4
-16 -10z" />
<path d="M395 510 c3 -5 10 -10 16 -10 5 0 9 5 9 10 0 6 -7 10 -16 10 l-15 0
6 -10z" />
<path d="M474 485 c11 -8 25 -15 30 -15 6 0 2 7 -8 15 -11 8 -25 15 -30 15 -6
0 -2 -7 8 -15z" />
<path d="M70 428 c-16 -22 -30 -46 -29 -52 0 -6 6 -2 12 8 7 11 25 34 41 53
15 18 23 33 17 33 -6 0 -24 -19 -41 -42z" />
<path d="M205 437 c-4 -10 -5 -21 -1 -24 10 -10 18 4 13 24 l-4 18 -8 -18z" />
<path d="M120 420 c-6 -12 -9 -24 -7 -27 3 -2 11 5 17 17 6 12 9 24 7 27 -3 2
-11 -5 -17 -17z" />
<path d="M260 360 c0 -5 7 -10 16 -10 l15 0 -6 10 c-3 6 -10 10 -16 10 -5 0
-9 -4 -9 -10z" />
<path d="M100 351 c0 -6 5 -13 10 -16 l10 -6 0 15 c0 9 -4 16 -10 16 -5 0 -10
-4 -10 -9z" />
<path d="M592 330 c1 -16 5 -30 10 -30 4 0 8 14 8 30 0 17 -4 30 -9 30 -5 0
-9 -13 -9 -30z" />
<path d="M30 296 c0 -9 5 -16 10 -16 6 0 10 4 10 9 0 6 -4 13 -10 16 l-10 6 0
-15z" />
<path d="M130 282 c0 -12 19 -26 26 -19 2 2 -2 10 -11 17 l-15 12 0 -10z" />
<path d="M425 260 c-10 -11 -13 -20 -8 -20 13 0 38 29 31 35 -3 3 -13 -4 -23
-15z" />
<path d="M566 234 c-10 -14 -16 -28 -13 -30 2 -3 12 7 21 22 10 14 16 28 13
30 -2 3 -12 -7 -21 -22z" />
<path d="M70 221 c0 -5 5 -13 10 -16 6 -3 10 -2 10 4 0 5 -4 13 -10 16 -5 3
-10 2 -10 -4z" />
<path d="M105 180 c3 -5 11 -10 16 -10 6 0 7 5 4 10 -3 6 -11 10 -16 10 -6 0
-7 -4 -4 -10z" />
<path d="M515 180 c-3 -5 -2 -10 4 -10 5 0 13 5 16 10 3 6 2 10 -4 10 -5 0
-13 -4 -16 -10z" />
<path d="M195 130 c3 -5 11 -10 16 -10 6 0 7 5 4 10 -3 6 -11 10 -16 10 -6 0
-7 -4 -4 -10z" />
<path d="M425 130 c-3 -5 -2 -10 4 -10 5 0 13 5 16 10 3 6 2 10 -4 10 -5 0
-13 -4 -16 -10z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1 @@
<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>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -114,9 +114,11 @@ export default defineComponent<CAProviderSelectProps>({
class="flex-1 w-full"
options={caProviderRef.value}
renderLabel={renderLabel}
renderTag={({ option }: { option: any }) => renderSingleSelectTag({ option: option as CAProviderOption })}
renderTag={({ option }: { option: unknown }) =>
renderSingleSelectTag({ option: option as CAProviderOption })
}
filterable
filter={(pattern: string, option: any) => handleFilter(pattern, option as CAProviderOption)}
filter={(pattern: string, option: unknown) => handleFilter(pattern, option as CAProviderOption)}
placeholder={$t('t_0_1747990228780')}
value={param.value.value} // 使用 controller 中的 param.value.value
onUpdateValue={handleUpdateValue}

View File

@ -31,7 +31,7 @@ export interface CAProviderSelectProps {
ca: string
/**
* @property email
* @description value
* @description content
*/
email: string
/**

View File

@ -44,26 +44,36 @@ export function useCAProviderSelectController(props: CAProviderSelectProps, emit
const selectedProvider = caProviderRef.value.find((item) => item.value === param.value.value)
if (selectedProvider) {
// 对于 Let's Encrypt 和 Buypass使用传入的工作流邮件
let email = selectedProvider.email
if (selectedProvider.ca === 'letsencrypt' || selectedProvider.ca === 'buypass') {
email = props.email || selectedProvider.email
}
param.value = {
label: selectedProvider.label,
value: selectedProvider.value,
ca: selectedProvider.ca,
email: selectedProvider.email,
email: email,
}
} else if (caProviderRef.value.length > 0 && param.value.value === '') {
// 如果 param.value 为空(例如初始状态或清空后),且 caProviderRef 列表不为空,则默认选中第一个
const firstProvider = caProviderRef.value[0]
let email = firstProvider?.email || ''
if (firstProvider && (firstProvider.ca === 'letsencrypt' || firstProvider.ca === 'buypass')) {
email = props.email || firstProvider.email
}
param.value = {
label: caProviderRef.value[0]?.label || '',
value: caProviderRef.value[0]?.value || '',
ca: caProviderRef.value[0]?.ca || '',
email: caProviderRef.value[0]?.email || '',
label: firstProvider?.label || '',
value: firstProvider?.value || '',
ca: firstProvider?.ca || '',
email: 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 })
}
@ -86,15 +96,23 @@ export function useCAProviderSelectController(props: CAProviderSelectProps, emit
isLoading.value = true
errorMessage.value = ''
try {
// 添加Let's Encrypt作为首选项
// 添加Let's Encrypt作为首选项,使用传入的工作流邮件
const letsEncryptOption: CAProviderOption = {
label: "Let's Encrypt",
value: '',
ca: 'letsencrypt',
email: '',
email: props.email || '',
}
// 获取其他CA授权列表
// 添加Buypass作为第二选项使用传入的工作流邮件
const buypassOption: CAProviderOption = {
label: 'Buypass',
value: 'buypass',
ca: 'buypass',
email: props.email || '',
}
// 获取其他CA授权列表使用接口返回的邮件
const { data } = await getAllEabList({ ca: '' }).fetch()
const eabOptions: CAProviderOption[] = (data || []).map((item) => ({
label: item.name,
@ -103,8 +121,8 @@ export function useCAProviderSelectController(props: CAProviderSelectProps, emit
email: item.mail,
}))
// 合并选项Let's Encrypt在首位
caProviderRef.value = [letsEncryptOption, ...eabOptions]
// 合并选项Let's Encrypt在首位Buypass在第二位
caProviderRef.value = [letsEncryptOption, buypassOption, ...eabOptions]
// 数据加载后,如果 props.value 有值,尝试根据 props.value 初始化 param
if (props.value) {

View File

@ -0,0 +1,115 @@
// External Libraries
import { defineComponent } from 'vue'
import { NModal, NButton, NSpace, NScrollbar, NIcon } from 'naive-ui'
import { LogoGithub } from '@vicons/ionicons5'
// Type Imports
import type { PropType } from 'vue'
import type { UpdateLogModalProps } from './types'
import type { VersionData } from '@/types/setting'
// Relative Internal Imports - Controller
import { useUpdateLogModalController } from './useController'
/**
* @description
* @example
* <UpdateLogModal
* v-model:show="showModal"
* :versionData="versionData"
* />
*/
export default defineComponent({
name: 'UpdateLogModal',
props: {
/**
*
* @default false
*/
show: {
type: Boolean as PropType<UpdateLogModalProps['show']>,
default: false,
},
/**
*
* @default null
*/
versionData: {
type: Object as PropType<VersionData | null>,
default: null,
},
},
/**
* @event update:show -
* @param {boolean} show -
*/
emits: {
'update:show': (payload: boolean) => typeof payload === 'boolean',
},
setup(props: UpdateLogModalProps, { emit }) {
const { formattedLog, goToGitHub, handleClose } = useUpdateLogModalController(props, emit)
return () => (
<NModal
show={props.show}
onUpdateShow={(show: boolean) => emit('update:show', show)}
preset="card"
title="发现新版本"
style={{ width: '600px', maxWidth: '90vw' }}
maskClosable={false}
closable={true}
onClose={handleClose}
>
{props.versionData && (
<div class="update-log-content">
{/* 版本信息 */}
<div class="mb-[1.6rem]">
<div class="flex items-center justify-between mb-[.8rem]">
<span class="text-[1.5rem] font-medium">: {props.versionData.version}</span>
<span class="text-[1.5rem] font-medium text-primary">: {props.versionData.new_version}</span>
</div>
<div class="text-[1.4rem] text-gray-500">: {props.versionData.date}</div>
</div>
{/* 更新日志 */}
<div class="mb-[2.4rem]">
<h3 class="text-[1.6rem] font-medium mb-[1.2rem]"></h3>
<NScrollbar style={{ maxHeight: '300px' }}>
<div class="update-log-list">
{formattedLog.value.map((line, index) => (
<div key={index} class="mb-[.8rem]">
{line.startsWith('■') ? (
<div class="text-[1.4rem] font-medium text-primary mb-[.4rem]">{line}</div>
) : line.startsWith('新增:') || line.startsWith('调整:') ? (
<div class="ml-[1.6rem] text-[1.3rem] text-green-600">{line}</div>
) : (
<div class="ml-[1.6rem] text-[1.3rem] text-gray-700">{line}</div>
)}
</div>
))}
</div>
</NScrollbar>
</div>
{/* 操作按钮 */}
<div class="flex justify-end">
<NSpace size="medium">
<NButton size="medium" onClick={handleClose}>
<span class="text-[1.4rem]"></span>
</NButton>
<NButton size="medium" type="primary" onClick={goToGitHub}>
<div class="flex items-center">
<NIcon size="18" class="mr-[.8rem]">
<LogoGithub />
</NIcon>
<span class="text-[1.4rem]">GitHub</span>
</div>
</NButton>
</NSpace>
</div>
</div>
)}
</NModal>
)
},
})

View File

@ -0,0 +1,44 @@
// Type Imports
import type { Ref } from 'vue'
import type { VersionData } from '@/types/setting'
/**
* @description Props
*/
export interface UpdateLogModalProps {
/**
*
* @default false
*/
show: boolean
/**
*
* @default null
*/
versionData: VersionData | null
}
/**
* @description Emits
*/
export interface UpdateLogModalEmits {
(e: 'update:show', show: boolean): void
}
/**
* @description
*/
export interface UpdateLogModalControllerExposes {
/**
*
*/
formattedLog: Ref<string[]>
/**
* GitHub
*/
goToGitHub: () => void
/**
*
*/
handleClose: () => void
}

View File

@ -0,0 +1,50 @@
// External Libraries
import { computed } from 'vue'
// Type Imports
import type { UpdateLogModalProps, UpdateLogModalEmits, UpdateLogModalControllerExposes } from './types'
/**
* @description
* @param props - props
* @param emit - emit
* @returns {UpdateLogModalControllerExposes}
*/
export function useUpdateLogModalController(
props: UpdateLogModalProps,
emit: (event: 'update:show', payload: boolean) => void,
): UpdateLogModalControllerExposes {
/**
* @description \r\n \n
*/
const formattedLog = computed(() => {
if (!props.versionData?.log) return []
return props.versionData.log
.replace(/\\r\\n/g, '\n')
.replace(/\\n/g, '\n')
.split('\n')
.filter(line => line.trim() !== '')
})
/**
* @description GitHub
*/
const goToGitHub = (): void => {
window.open('https://github.com/allinssl/allinssl', '_blank')
emit('update:show', false)
}
/**
* @description
*/
const handleClose = (): void => {
emit('update:show', false)
}
return {
formattedLog,
goToGitHub,
handleClose,
}
}

View File

@ -114,6 +114,9 @@ nodeOptions[APPLY] = () =>
provider_id: '',
algorithm: 'RSA2048',
skip_check: 0,
close_cname: 0,
max_wait: undefined,
ignore_check: 0,
},
childNode: null,
},

View File

@ -217,6 +217,9 @@ export interface ApplyNodeConfig {
name_server: string // DNS递归服务器
skip_check: number // 跳过检查
algorithm: string // 数字证书算法
close_cname: number // 禁用CNAME支持0关闭1开启默认0
max_wait?: number // 预检查超时时间,单位秒(可选)
ignore_check: number // 忽略预检查结果1继续0停止默认0
// 高级功能
// algorithm: 'RSA2048' | 'RSA3072' | 'RSA4096' | 'RSA8192' | 'EC256' | 'EC384' // 数字证书算法
// dnsServer?: string // 指定DNS解析服务器

View File

@ -191,6 +191,36 @@ export const ApiProjectConfig: Record<string, ApiProjectType> = {
type: ['dns'],
sort: 20,
},
namesilo: {
name: 'Namesilo',
icon: 'namesilo',
type: ['dns'],
sort: 21,
},
namedotcom: {
name: 'Name.com',
icon: 'namedotcom',
type: ['dns'],
sort: 22,
},
bunny: {
name: 'Bunny',
icon: 'bunny',
type: ['dns'],
sort: 23,
},
gcore: {
name: 'Gcore',
icon: 'gcore',
type: ['dns'],
sort: 24,
},
jdcloud: {
name: '京东云',
icon: 'jdcloud',
type: ['dns'],
sort: 25,
},
}

View File

@ -633,5 +633,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "جارٍ اختبار إشعار {type}",
"t_5_1748591491370": "اختبار{type}",
"t_0_1748591669194": "إرسال رسالة اختبار إلى، التكوين الحالي {type} إشعار، هل تتابع؟"
"t_0_1748591669194": "إرسال رسالة اختبار إلى، التكوين الحالي {type} إشعار، هل تتابع؟",
"t_0_1749119980577": "خطأ في تنسيق عنوان IP الخادم أو اسم النطاق",
"t_0_1749204565782": "إيقاف التنفيذ",
"t_1_1749204570473": "هل أنت متأكد أنك تريد إيقاف تنفيذ سير العمل الحالي؟",
"t_2_1749204567193": "تعطيل دعم CNAME",
"t_0_1749263105073": "وقت انتهاء الفحص المسبق (ثانية)",
"t_1_1749263104936": "الرجاء إدخال مهلة التحقق المسبق",
"t_2_1749263103765": "تجاهل نتائج الفحص المسبق",
"t_3_1749263104237": "عندما تفشل الفحص المسبق",
"t_4_1749263101853": "استمر",
"t_5_1749263101934": "توقف",
"t_6_1749263103891": "إرسال طلب التحقق إلى CA"
}

View File

@ -633,5 +633,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "Testing {type} notification",
"t_5_1748591491370": "Test{type}",
"t_0_1748591669194": "Send test message to, current configuration {type} notification, continue?"
"t_0_1748591669194": "Send test message to, current configuration {type} notification, continue?",
"t_0_1749119980577": "Server IP address or domain name format error",
"t_0_1749204565782": "Stop execution",
"t_1_1749204570473": "Are you sure you want to stop the execution of the current workflow?",
"t_2_1749204567193": "Disable CNAME support",
"t_0_1749263105073": "Pre-check timeout (seconds)",
"t_1_1749263104936": "Please enter the pre-check timeout",
"t_2_1749263103765": "Ignore pre-check results",
"t_3_1749263104237": "When the pre-check fails",
"t_4_1749263101853": "Continue",
"t_5_1749263101934": "Stop",
"t_6_1749263103891": "Initiate verification request to CA"
}

View File

@ -633,5 +633,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "Probando notificación {type}",
"t_5_1748591491370": "Prueba{type}",
"t_0_1748591669194": "Enviar mensaje de prueba a, configuración actual {type} notificación, ¿continuar?"
"t_0_1748591669194": "Enviar mensaje de prueba a, configuración actual {type} notificación, ¿continuar?",
"t_0_1749119980577": "Error de formato de dirección IP o nombre de dominio del servidor",
"t_0_1749204565782": "Detener ejecución",
"t_1_1749204570473": "¿Estás seguro de que quieres detener la ejecución del flujo de trabajo actual?",
"t_2_1749204567193": "Deshabilitar soporte CNAME",
"t_0_1749263105073": "Tiempo de espera de la preverificación (segundos)",
"t_1_1749263104936": "Introduce el tiempo de espera de la comprobación previa",
"t_2_1749263103765": "Ignorar los resultados de la verificación previa",
"t_3_1749263104237": "Cuando falla la verificación previa",
"t_4_1749263101853": "Continuar",
"t_5_1749263101934": "Detener",
"t_6_1749263103891": "Enviar solicitud de verificación a CA"
}

View File

@ -633,5 +633,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "Test de la notification {type}",
"t_5_1748591491370": "Test{type}",
"t_0_1748591669194": "Envoyer un message test à, configuration actuelle {type} notification, continuer ?"
"t_0_1748591669194": "Envoyer un message test à, configuration actuelle {type} notification, continuer ?",
"t_0_1749119980577": "Erreur de format d'adresse IP ou de nom de domaine du serveur",
"t_0_1749204565782": "Arrêter l'exécution",
"t_1_1749204570473": "Êtes-vous sûr de vouloir arrêter l'exécution du workflow actuel ?",
"t_2_1749204567193": "Désactiver la prise en charge CNAME",
"t_0_1749263105073": "Délai d'expiration de la pré-vérification (secondes)",
"t_1_1749263104936": "Veuillez entrer le délai d'attente de pré-vérification",
"t_2_1749263103765": "Ignorer les résultats de la pré-vérification",
"t_3_1749263104237": "Lorsque la pré-vérification échoue",
"t_4_1749263101853": "Continuer",
"t_5_1749263101934": "Arrêter",
"t_6_1749263103891": "Envoyer une demande de vérification à CA"
}

View File

@ -633,5 +633,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "{type}通知をテスト中",
"t_5_1748591491370": "テスト{type}",
"t_0_1748591669194": "テストメッセージを送信します、現在の設定 {type} 通知、続行しますか?"
"t_0_1748591669194": "テストメッセージを送信します、現在の設定 {type} 通知、続行しますか?",
"t_0_1749119980577": "サーバーのIPアドレスまたはドメイン名の形式が正しくありません",
"t_0_1749204565782": "実行を停止",
"t_1_1749204570473": "現在のワークフローの実行を停止しますか?",
"t_2_1749204567193": "CNAMEサポートを無効にする",
"t_0_1749263105073": "事前チェックのタイムアウト時間(秒)",
"t_1_1749263104936": "事前チェックのタイムアウト時間を入力してください",
"t_2_1749263103765": "事前チェック結果を無視",
"t_3_1749263104237": "事前チェックが失敗した場合",
"t_4_1749263101853": "続ける",
"t_5_1749263101934": "停止",
"t_6_1749263103891": "CAに検証リクエストを送信する"
}

View File

@ -633,5 +633,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "{type} 알림 테스트 중",
"t_5_1748591491370": "테스트{type}",
"t_0_1748591669194": "테스트 메시지를 보냅니다, 현재 구성 {type} 알림, 계속하시겠습니까?"
"t_0_1748591669194": "테스트 메시지를 보냅니다, 현재 구성 {type} 알림, 계속하시겠습니까?",
"t_0_1749119980577": "서버 IP 주소 또는 도메인 이름 형식 오류",
"t_0_1749204565782": "실행 중지",
"t_1_1749204570473": "현재 워크플로우 실행을 중지하시겠습니까?",
"t_2_1749204567193": "CNAME 지원 비활성화",
"t_0_1749263105073": "사전 점검 시간 초과 (초)",
"t_1_1749263104936": "사전 검사 시간 초과 시간을 입력하십시오",
"t_2_1749263103765": "사전 점검 결과 무시",
"t_3_1749263104237": "사전 점검이 실패했을 때",
"t_4_1749263101853": "계속하다",
"t_5_1749263101934": "중지",
"t_6_1749263103891": "CA에 검증 요청 시작"
}

View File

@ -633,5 +633,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "Testando notificação {type}",
"t_5_1748591491370": "Teste{type}",
"t_0_1748591669194": "Enviar mensagem de teste para, configuração atual {type} notificação, continuar?"
"t_0_1748591669194": "Enviar mensagem de teste para, configuração atual {type} notificação, continuar?",
"t_0_1749119980577": "Erro de formato de endereço IP ou nome de domínio do servidor",
"t_0_1749204565782": "Parar execução",
"t_1_1749204570473": "Tem certeza de que deseja interromper a execução do fluxo de trabalho atual?",
"t_2_1749204567193": "Desativar suporte CNAME",
"t_0_1749263105073": "Tempo limite de pré-verificação (segundos)",
"t_1_1749263104936": "Insira o tempo limite de pré-verificação",
"t_2_1749263103765": "Ignorar resultados de pré-verificação",
"t_3_1749263104237": "Quando a pré-verificação falha",
"t_4_1749263101853": "Continuar",
"t_5_1749263101934": "Parar",
"t_6_1749263103891": "Enviar solicitação de verificação para CA"
}

View File

@ -633,5 +633,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "Тестирование уведомления {type}",
"t_5_1748591491370": "Тест{type}",
"t_0_1748591669194": "Отправить тестовое сообщение, текущая конфигурация {type} уведомления, продолжить?"
"t_0_1748591669194": "Отправить тестовое сообщение, текущая конфигурация {type} уведомления, продолжить?",
"t_0_1749119980577": "Ошибка формата IP-адреса сервера или доменного имени",
"t_0_1749204565782": "Остановить выполнение",
"t_1_1749204570473": "Вы уверены, что хотите остановить выполнение текущего рабочего процесса?",
"t_2_1749204567193": "Отключить поддержку CNAME",
"t_0_1749263105073": "Таймаут предварительной проверки (секунды)",
"t_1_1749263104936": "Введите время ожидания предварительной проверки",
"t_2_1749263103765": "Игнорировать результаты предварительной проверки",
"t_3_1749263104237": "Когда предварительная проверка не удалась",
"t_4_1749263101853": "Продолжить",
"t_5_1749263101934": "Остановить",
"t_6_1749263103891": "Отправить запрос на проверку в CA"
}

View File

@ -633,5 +633,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "正在测试{type}通知",
"t_5_1748591491370": "测试{type}",
"t_0_1748591669194": "发送测试信息到,当前配置{type}通知,是否继续?"
"t_0_1748591669194": "发送测试信息到,当前配置{type}通知,是否继续?",
"t_0_1749119980577": "服务器IP地址或域名格式错误",
"t_0_1749204565782": "停止执行",
"t_1_1749204570473": "确定要停止当前工作流的执行吗?",
"t_2_1749204567193": "禁用CNAME支持",
"t_0_1749263105073": "预检查超时时间(秒)",
"t_1_1749263104936": "请输入预检查超时时间",
"t_2_1749263103765": "忽略预检查结果",
"t_3_1749263104237": "当预检查失败时",
"t_4_1749263101853": "继续",
"t_5_1749263101934": "停止",
"t_6_1749263103891": "向CA发起验证请求"
}

View File

@ -632,5 +632,16 @@
"t_3_1748591484673": "Webhook",
"t_4_1748591492587": "正在測試{type}通知",
"t_5_1748591491370": "測試{type}",
"t_0_1748591669194": "發送測試信息到,當前配置{type}通知,是否繼續?"
"t_0_1748591669194": "發送測試信息到,當前配置{type}通知,是否繼續?",
"t_0_1749119980577": "伺服器IP位址或網域名稱格式錯誤",
"t_0_1749204565782": "停止執行",
"t_1_1749204570473": "確定要停止當前工作流的執行嗎?",
"t_2_1749204567193": "禁用CNAME支援",
"t_0_1749263105073": "預檢查超時時間(秒)",
"t_1_1749263104936": "請輸入預檢查超時時間",
"t_2_1749263103765": "忽略預檢查結果",
"t_3_1749263104237": "當預檢查失敗時",
"t_4_1749263101853": "繼續",
"t_5_1749263101934": "停止",
"t_6_1749263103891": "向CA發起驗證請求"
}

View File

@ -53,7 +53,12 @@ export interface AddAccessParams<
| NS1AccessConfig
| CloudnsAccessConfig
| AwsAccessConfig
| AzureAccessConfig,
| AzureAccessConfig
| NamesiloAccessConfig
| NamedotcomAccessConfig
| BunnyAccessConfig
| GcoreAccessConfig
| JdcloudAccessConfig,
> {
name: string
type: string
@ -79,7 +84,12 @@ export interface UpdateAccessParams<
| NS1AccessConfig
| CloudnsAccessConfig
| AwsAccessConfig
| AzureAccessConfig,
| AzureAccessConfig
| NamesiloAccessConfig
| NamedotcomAccessConfig
| BunnyAccessConfig
| GcoreAccessConfig
| JdcloudAccessConfig,
> extends AddAccessParams<T> {
id: string
}
@ -213,6 +223,43 @@ export interface AzureAccessConfig {
environment: string
}
/**
* Namesilo
*/
export interface NamesiloAccessConfig {
api_key: string
}
/**
* Name.com
*/
export interface NamedotcomAccessConfig {
username: string
api_token: string
}
/**
* Bunny
*/
export interface BunnyAccessConfig {
api_key: string
}
/**
* Gcore
*/
export interface GcoreAccessConfig {
api_token: string
}
/**
*
*/
export interface JdcloudAccessConfig {
access_key_id: string
secret_access_key: string
}
/** 删除授权请求参数 */
export interface DeleteAccessParams {
id: string

View File

@ -87,6 +87,14 @@ export interface ReportWebhook {
ignore_ssl: boolean
}
/** 企业微信通知配置 */
export interface ReportWecom {
name?: string
enabled: string
url: string
data: string
}
/** 添加告警请求参数 */
export interface AddReportParams<T = string> {
name: string
@ -109,6 +117,25 @@ export interface TestReportParams {
id: number
}
/** 获取版本信息请求参数 */
export interface GetVersionParams {
// 无参数
}
/** 版本信息数据 */
export interface VersionData {
date: string // 版本日期
log: string // 更新日志
new_version: string // 新版本号
update: string // 是否有更新 "1" 表示有更新,"0" 表示无更新
version: string // 当前版本号
}
/** 获取版本信息响应 */
export interface GetVersionResponse extends AxiosResponseData {
data: VersionData
}
/** 消息通知选项 */
export interface NotifyProviderOption {
label: string

View File

@ -81,7 +81,7 @@ export interface WorkflowHistoryItem {
create_time: number
end_time: string
exec_type: 'auto' | 'manual'
status: 'success' | 'failed' | 'pending'
status: 'success' | 'failed' | 'running'
workflow_id: string
}
@ -112,3 +112,8 @@ export interface EnableWorkflowParams {
active: string
}
/** 停止工作流请求参数 */
export interface StopWorkflowParams {
id: string
}

View File

@ -27,7 +27,7 @@ import {
useLoadingMask,
} from '@baota/naive-ui/hooks'
import { useError } from '@baota/hooks/error'
import { isEmail, isIp, isPort, isUrl } from '@baota/utils/business'
import { isEmail, isIp, isPort, isUrl, isDomain } from '@baota/utils/business'
import { $t } from '@locales/index'
import { useStore } from './useStore'
import { ApiProjectConfig } from '@config/data'
@ -42,6 +42,11 @@ import type {
CloudnsAccessConfig,
AwsAccessConfig,
AzureAccessConfig,
NamesiloAccessConfig,
NamedotcomAccessConfig,
BunnyAccessConfig,
GcoreAccessConfig,
JdcloudAccessConfig,
} from '@/types/access'
import type { VNode, Ref } from 'vue'
import { testAccess } from '@/api/access'
@ -306,8 +311,8 @@ export const useApiFormController = (props: ApiFormControllerProps): ApiFormCont
required: true,
trigger: 'input',
validator: (rule: FormItemRule, value: string, callback: (error?: Error) => void) => {
if (!isIp(value)) {
return callback(new Error($t('t_0_1745317313835')))
if (!isIp(value) && !isDomain(value)) {
return callback(new Error($t('t_0_1749119980577')))
}
callback()
},
@ -663,6 +668,27 @@ export const useApiFormController = (props: ApiFormControllerProps): ApiFormCont
useFormInput('Environment', 'config.environment', { allowInput: noSideSpace, placeholder: 'public' }),
)
break
case 'namesilo':
items.push(useFormInput('API Key', 'config.api_key', { allowInput: noSideSpace }))
break
case 'namedotcom':
items.push(
useFormInput('Username', 'config.username', { allowInput: noSideSpace }),
useFormInput('API Token', 'config.api_token', { allowInput: noSideSpace }),
)
break
case 'bunny':
items.push(useFormInput('API Key', 'config.api_key', { allowInput: noSideSpace }))
break
case 'gcore':
items.push(useFormInput('API Token', 'config.api_token', { allowInput: noSideSpace }))
break
case 'jdcloud':
items.push(
useFormInput('Access Key ID', 'config.access_key_id', { allowInput: noSideSpace }),
useFormInput('Secret Access Key', 'config.secret_access_key', { allowInput: noSideSpace }),
)
break
default:
break
}
@ -760,6 +786,33 @@ export const useApiFormController = (props: ApiFormControllerProps): ApiFormCont
environment: '',
} as AzureAccessConfig
break
case 'namesilo':
param.value.config = {
api_key: '',
} as NamesiloAccessConfig
break
case 'namedotcom':
param.value.config = {
username: '',
api_token: '',
} as NamedotcomAccessConfig
break
case 'bunny':
param.value.config = {
api_key: '',
} as BunnyAccessConfig
break
case 'gcore':
param.value.config = {
api_token: '',
} as GcoreAccessConfig
break
case 'jdcloud':
param.value.config = {
access_key_id: '',
secret_access_key: '',
} as JdcloudAccessConfig
break
}
},
)

View File

@ -1,4 +1,4 @@
import { NFormItem, NInputNumber } from 'naive-ui'
import { NFormItem, NInputNumber, NSwitch } from 'naive-ui'
import { useForm, useFormHooks, useModalHooks } from '@baota/naive-ui/hooks'
import { useStore } from '@components/FlowChart/useStore'
import { $t } from '@locales/index'
@ -29,6 +29,9 @@ export default defineComponent({
name_server: '',
skip_check: 0,
algorithm: 'RSA2048',
close_cname: 0,
max_wait: undefined,
ignore_check: 0,
},
}),
},
@ -86,7 +89,8 @@ export default defineComponent({
'onUpdate:value': (val: { value: string; ca: string; email: string }) => {
param.value.eabId = val.value
param.value.ca = val.ca
if (val.value) param.value.email = val.email
// 始终更新邮件,确保 Let's Encrypt 和 Buypass 的邮件能正确显示
param.value.email = val.email
},
}}
/>
@ -138,15 +142,12 @@ export default defineComponent({
},
{ showRequireMark: false },
),
useFormInput(
$t('t_0_1747106957037'),
'name_server',
useFormSwitch(
$t('t_2_1749204567193'),
'close_cname',
{
placeholder: $t('t_1_1747106961747'),
allowInput: noSideSpace,
onInput: (val: string) => {
param.value.name_server = val.replace(//g, ',').replace(/;/g, ',') // 中文逗号分隔
},
checkedValue: 1,
uncheckedValue: 0,
},
{ showRequireMark: false },
),
@ -159,6 +160,62 @@ export default defineComponent({
},
{ showRequireMark: false },
),
// 只有在跳过预检查关闭时才显示DNS递归服务器、预检查超时时间和忽略预检查结果
...(param.value.skip_check === 0
? [
useFormInput(
$t('t_0_1747106957037'),
'name_server',
{
placeholder: $t('t_1_1747106961747'),
allowInput: noSideSpace,
onInput: (val: string) => {
param.value.name_server = val.replace(//g, ',').replace(/;/g, ',') // 中文逗号分隔
},
},
{ showRequireMark: false },
),
{
type: 'custom' as const,
render: () => {
return (
<NFormItem label={$t('t_0_1749263105073')} path="max_wait">
<NInputNumber
v-model:value={(param.value as ApplyNodeConfig & { max_wait?: number }).max_wait}
showButton={false}
min={1}
class="w-full"
placeholder={$t('t_1_1749263104936')}
/>
</NFormItem>
)
},
},
{
type: 'custom' as const,
render: () => {
return (
<NFormItem label={$t('t_2_1749263103765')} path="ignore_check">
<div class="flex items-center">
<span class="text-[1.4rem] mr-[1.2rem]">{$t('t_3_1749263104237')}</span>
<NSwitch
v-model:value={param.value.ignore_check}
checkedValue={1}
uncheckedValue={0}
class="mx-[.5rem]"
v-slots={{
checked: () => $t('t_4_1749263101853'),
unchecked: () => $t('t_5_1749263101934'),
}}
/>
<span class="text-[1.4rem] ml-[1.2rem]">{$t('t_6_1749263103891')}</span>
</div>
</NFormItem>
)
},
},
]
: []),
]
: []),
useFormHelp([
@ -183,6 +240,7 @@ export default defineComponent({
confirm(async (close) => {
try {
await example.value?.validate()
updateNodeConfig(props.node.id, data.value) // 更新节点配置
isRefreshNode.value = props.node.id // 刷新节点
close()

View File

@ -35,6 +35,7 @@ const {
workflowFormData,
deleteExistingWorkflow,
executeExistingWorkflow,
stopExistingWorkflow,
setWorkflowActive,
setWorkflowExecType,
caFormData,
@ -220,7 +221,7 @@ export const useController = () => {
useModal({
title: workflow ? `${workflow.name}】 - ${$t('t_9_1745215914666')}` : $t('t_9_1745215914666'),
component: HistoryModal,
area: 800,
area: 850,
componentProps: { id: workflow.id.toString() },
})
}
@ -422,6 +423,23 @@ export const useHistoryController = (id: string) => {
})
}
/**
* @description
* @param {WorkflowHistoryItem} historyItem -
*/
const handleStopWorkflow = async (historyItem: WorkflowHistoryItem) => {
useDialog({
title: $t('t_0_1749204565782'),
content: $t('t_1_1749204570473'),
onPositiveClick: async () => {
await stopExistingWorkflow(historyItem.id)
await fetch() // 刷新历史记录表格
// 触发外部主表格刷新
refreshTable.value = true
},
})
}
/**
* @description
* @returns {DataTableColumn<WorkflowHistoryItem>[]}
@ -430,7 +448,7 @@ export const useHistoryController = (id: string) => {
{
title: $t('t_4_1745227838558'),
key: 'create_time',
width: 230,
width: 200,
render: (row: WorkflowHistoryItem) => {
// 处理数字类型的时间戳
return row.create_time ? row.create_time : '-'
@ -439,7 +457,7 @@ export const useHistoryController = (id: string) => {
{
title: $t('t_5_1745227839906'),
key: 'end_time',
width: 230,
width: 200,
render: (row: WorkflowHistoryItem) => {
// 处理数字类型的时间戳
return row.end_time ? row.end_time : '-'
@ -448,7 +466,7 @@ export const useHistoryController = (id: string) => {
{
title: $t('t_6_1745227838798'),
key: 'exec_type',
width: 110,
width: 120,
render: (row: WorkflowHistoryItem) => (
<NTag type={row.exec_type === 'auto' ? 'info' : 'default'} size="small" bordered={false}>
{row.exec_type === 'auto' ? $t('t_2_1745215915397') : $t('t_3_1745215914237')}
@ -461,9 +479,14 @@ export const useHistoryController = (id: string) => {
key: 'actions',
fixed: 'right',
align: 'right',
width: 80,
width: 180,
render: (row: WorkflowHistoryItem) => (
<NSpace justify="end">
<NSpace justify="end" size="small">
{row.status === 'running' && (
<NButton size="tiny" strong secondary type="error" onClick={() => handleStopWorkflow(row)}>
{$t('t_0_1749204565782')}
</NButton>
)}
<NButton
size="tiny"
strong

View File

@ -5,6 +5,7 @@ import {
executeWorkflow,
updateWorkflowExecType,
enableWorkflow,
stopWorkflow,
} from '@/api/workflow'
import { getEabList, addEab, deleteEab } from '@/api/access'
import { useError } from '@baota/hooks/error'
@ -17,6 +18,7 @@ import type {
WorkflowItem,
UpdateWorkflowExecTypeParams,
EnableWorkflowParams,
StopWorkflowParams,
} from '@/types/workflow'
import type { EabItem, EabListParams, EabAddParams } from '@/types/access'
import type { TableResponse } from '@baota/naive-ui/types/table'
@ -148,6 +150,22 @@ export const useWorkflowStore = defineStore('workflow-store', () => {
}
}
/**
*
* @description
* @param {string} id - ID
* @returns {Promise<void>}
*/
const stopExistingWorkflow = async (id: string) => {
try {
const { message, fetch } = stopWorkflow({ id })
message.value = true
await fetch()
} catch (error) {
handleError(error).default($t('t_1_1747895712756'))
}
}
/**
* CA
* @param {EabListParams} params -
@ -217,6 +235,7 @@ export const useWorkflowStore = defineStore('workflow-store', () => {
fetchWorkflowHistory,
deleteExistingWorkflow,
executeExistingWorkflow,
stopExistingWorkflow,
setWorkflowActive,
setWorkflowExecType,
fetchEabList,

View File

@ -1,5 +1,15 @@
// 外部库依赖
import { Transition, type Component as ComponentType, h, defineComponent, ref, onMounted, computed, watch } from 'vue' // 添加 watch
import {
Transition,
type Component as ComponentType,
h,
defineComponent,
ref,
onMounted,
computed,
watch,
onUnmounted,
} from 'vue' // 添加 watch, onUnmounted
import { NBadge, NIcon, NLayout, NLayoutContent, NLayoutHeader, NLayoutSider, NMenu, NTooltip } from 'naive-ui'
import { RouterView } from 'vue-router'
import { MenuFoldOutlined, MenuUnfoldOutlined } from '@vicons/antd'
@ -12,7 +22,12 @@ import { useController } from './useController'
import { $t } from '@locales/index'
// 内部模块导入 - 样式
import styles from './index.module.css'
// 内部模块导入 - API
import { getVersion } from '@api/setting'
// 内部模块导入 - 组件
import UpdateLogModal from '@/components/UpdateLogModal'
// 内部模块导入 - 类型
import type { VersionData } from '@/types/setting'
/**
* @description
@ -35,9 +50,39 @@ export default defineComponent({
'actionColor',
'layoutContentBackgroundColor',
'siderLoginHeight', // 确保这个变量在 Naive UI 主题中存在或已自定义
'contentPadding'
'contentPadding',
])
// 版本检查相关状态
const hasUpdate = ref(false)
const versionData = ref<VersionData | null>(null)
const showUpdateModal = ref(false)
const checkTimer = ref<NodeJS.Timeout | null>(null)
// 版本检查API
const versionApi = getVersion()
// 检查版本更新
const checkVersion = async () => {
try {
await versionApi.fetch()
if (versionApi.data.value && versionApi.data.value.data) {
const data = versionApi.data.value.data
versionData.value = data
hasUpdate.value = data.update === '1'
}
} catch (error) {
console.error('检查版本更新失败:', error)
}
}
// 点击版本号
const handleVersionClick = () => {
if (hasUpdate.value && versionData.value) {
showUpdateModal.value = true
}
}
const siderWidth = ref(200)
const siderCollapsedWidth = ref(60)
@ -50,13 +95,28 @@ export default defineComponent({
if (isMobile.value || isNarrowScreen.value) {
isCollapsed.value = true
}
// 初始检查版本
checkVersion()
// 设置定时检查版本更新每30分钟检查一次
checkTimer.value = setInterval(checkVersion, 30 * 60 * 1000)
})
// 组件卸载时清理定时器
onUnmounted(() => {
if (checkTimer.value) {
clearInterval(checkTimer.value)
}
})
// 监听屏幕宽度变化,自动折叠/展开菜单
watch(isNarrowScreen, (newValue) => {
if (newValue && !isMobile.value) { // 仅在非移动设备且宽度小于1100px时处理
if (newValue && !isMobile.value) {
// 仅在非移动设备且宽度小于1100px时处理
isCollapsed.value = true
} else if (!newValue && !isMobile.value) { // 宽度大于1100px且非移动设备时
} else if (!newValue && !isMobile.value) {
// 宽度大于1100px且非移动设备时
isCollapsed.value = false
}
})
@ -109,13 +169,13 @@ export default defineComponent({
class={[styles.sider, siderDynamicClass.value].join(' ')}
bordered
>
<div class={`${styles.logoContainer} ${
<div
class={`${styles.logoContainer} ${
// Logo 容器的 'active' 状态 (仅在桌面端且折叠时应用)
// 在移动端,由于 NLayoutSider 自身宽度不变,不应用 active 样式来改变 Logo 区域布局
(isMobile.value ? false : isCollapsed.value)
? styles.logoContainerActive
: ''
}`}>
(isMobile.value ? false : isCollapsed.value) ? styles.logoContainerActive : ''
}`}
>
{/* Logo 显示逻辑 */}
{(isMobile.value ? false : isCollapsed.value) ? (
// 折叠时的 Logo (仅桌面端)
@ -134,11 +194,11 @@ export default defineComponent({
<NTooltip placement="right" trigger="hover">
{{
trigger: () => (
<div
class={styles.menuToggleButton}
onClick={() => toggleCollapse()}
>
<NIcon size={20}><MenuFoldOutlined /></NIcon> {/* 图标大小调整为 20 */}
<div class={styles.menuToggleButton} onClick={() => toggleCollapse()}>
<NIcon size={20}>
<MenuFoldOutlined />
</NIcon>{' '}
{/* 图标大小调整为 20 */}
</div>
),
default: () => <span>{$t('t_4_1744098802046')}</span>,
@ -172,9 +232,7 @@ export default defineComponent({
{{
trigger: () => (
<div class={styles.headerMenuToggleButton} onClick={() => toggleCollapse()}>
<NIcon size={20}>
{isCollapsed.value ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}
</NIcon>
<NIcon size={20}>{isCollapsed.value ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}</NIcon>
</div>
),
default: () => <span></span>,
@ -183,8 +241,13 @@ export default defineComponent({
</div>
)}
<div class={styles.systemInfo}>
<NBadge value={1} show={false} dot>
<span class="px-1 sm:px-[.5rem] cursor-pointer">v1.0.4</span>
<NBadge value={1} show={hasUpdate.value} dot>
<span
class="px-[.8rem] sm:px-[.5rem] py-[.4rem] cursor-pointer hover:text-primary transition-colors text-[1.4rem] font-medium"
onClick={handleVersionClick}
>
v1.0.4
</span>
</NBadge>
</div>
</NLayoutHeader>
@ -199,9 +262,10 @@ export default defineComponent({
</NLayoutContent>
</NLayout>
{/* 移动端菜单展开时的背景遮罩 */}
{showBackdrop.value && (
<div class={styles.mobileMenuBackdrop} onClick={() => toggleCollapse()}></div>
)}
{showBackdrop.value && <div class={styles.mobileMenuBackdrop} onClick={() => toggleCollapse()}></div>}
{/* 更新日志弹窗 */}
<UpdateLogModal v-model:show={showUpdateModal.value} versionData={versionData.value} />
</NLayout>
)
},

View File

@ -14,7 +14,7 @@ import {
useLoadingMask,
} from '@baota/naive-ui/hooks'
import { useError } from '@baota/hooks/error'
import { isDomain } from '@baota/utils/business'
import { isDomain, isPort, isIp } from '@baota/utils/business'
import { $t } from '@locales/index'
// Store和组件
@ -64,6 +64,31 @@ const {
// 错误处理
const { handleError } = useError()
/**
* IP+
* @param value -
* @returns {boolean} IP true
*/
const isDomainWithPort = (value: string): boolean => {
if (!value) return false
// 检查是否包含端口号
const parts = value.split(':')
if (parts.length === 1) {
// 只有域名或IP验证域名或IP地址
return isDomain(value) || isIp(value)
} else if (parts.length === 2) {
// 域名/IP+端口格式
const [host, port] = parts
if (!host || !port) return false
return (isDomain(host) || isIp(host)) && isPort(port)
}
// 超过一个冒号格式不正确IPv6除外但这里暂不处理IPv6+端口的复杂情况)
return false
}
/**
*
* @description
@ -318,7 +343,7 @@ export const useMonitorFormController = (data: UpdateSiteMonitorParams | null =
*/
const config = computed(() => [
useFormInput('名称', 'name'),
useFormInput('域名', 'domain'),
useFormInput('域名/IP地址', 'domain'),
useFormInputNumber('周期(分钟)', 'cycle', { class: 'w-full' }),
useFormCustom(() => {
return (
@ -342,11 +367,11 @@ export const useMonitorFormController = (data: UpdateSiteMonitorParams | null =
name: { required: true, message: '请输入名称', trigger: 'input' },
domain: {
required: true,
message: '请输入正确的域名',
message: '请输入正确的域名或IP地址',
trigger: 'input',
validator: (rule: any, value: any, callback: any) => {
if (!isDomain(value)) {
callback(new Error('请输入正确的域名'))
if (!isDomainWithPort(value)) {
callback(new Error('请输入正确的域名或IP地址支持域名:端口或IP:端口格式)'))
} else {
callback()
}

View File

@ -1,20 +1,65 @@
import { NCard, NSpace, NDescriptions, NDescriptionsItem, NIcon, NButton } from 'naive-ui'
import { NCard, NSpace, NDescriptions, NDescriptionsItem, NIcon, NButton, NBadge, NAlert } from 'naive-ui'
import { $t } from '@locales/index'
import { LogoGithub } from '@vicons/ionicons5'
import { getVersion } from '@api/setting'
import type { VersionData } from '@/types/setting'
/**
*
*/
export default defineComponent({
name: 'AboutSettings',
setup() {
// 版本检查相关状态
const versionData = ref<VersionData | null>(null)
const hasUpdate = ref(false)
// 版本检查API
const versionApi = getVersion()
// 检查版本更新
const checkVersion = async () => {
try {
await versionApi.fetch()
if (versionApi.data.value && versionApi.data.value.data) {
const data = versionApi.data.value.data
versionData.value = data
hasUpdate.value = data.update === '1'
}
} catch (error) {
console.error('检查版本更新失败:', error)
}
}
// 跳转到GitHub
const goToGitHub = () => {
window.open('https://github.com/allinssl/allinssl', '_blank')
}
// 组件挂载时检查版本
onMounted(() => {
checkVersion()
})
return () => (
<div class="about-settings">
<NCard title={$t('t_4_1745833932780')} class="mb-4">
<NSpace vertical size={24}>
<NDescriptions bordered>
<NDescriptionsItem label={$t('t_5_1745833933241')}>
<div class="flex items-center">
<span class="text-[2rem] font-medium">v1.0.4</span>
<div class="flex items-center space-x-[1.2rem]">
<span class="text-[2.0rem] font-medium">v1.0.4</span>
{hasUpdate.value && versionData.value && (
<div class="relative">
<NBadge value="NEW" type="success" offset={[4, -3]}>
<span
class="text-[1.4rem] text-primary cursor-pointer font-medium inline-block px-[.8rem] py-[.4rem]"
onClick={goToGitHub}
>
{versionData.value.new_version}
</span>
</NBadge>
</div>
)}
</div>
</NDescriptionsItem>
<NDescriptionsItem label={$t('t_29_1746667589773')}>
@ -22,7 +67,7 @@ export default defineComponent({
<NIcon size="20" class="text-gray-600">
<LogoGithub />
</NIcon>
<NButton text tag="a" href="https://github.com/allinssl/allinssl" target="_blank" type="primary">
<NButton text onClick={goToGitHub} type="primary">
https://github.com/allinssl/allinssl
</NButton>
</div>
@ -31,6 +76,33 @@ export default defineComponent({
</NSpace>
</NCard>
{/* 新版本信息卡片 */}
{hasUpdate.value && versionData.value && (
<NCard title="发现新版本" class="mb-4">
<NAlert type="info" title={`新版本 ${versionData.value.new_version} 已发布`} class="mb-[1.6rem]">
<div class="text-[1.4rem]">
<div class="mb-[1.2rem] text-[1.4rem]">: {versionData.value.date}</div>
<div class="mb-[1.2rem] text-[1.4rem]">
<strong>:</strong>
</div>
<div class="whitespace-pre-line text-gray-700 text-[1.3rem] leading-relaxed">
{versionData.value.log.replace(/\\r\\n/g, '\n').replace(/\\n/g, '\n')}
</div>
<div class="mt-4">
<NButton size="medium" type="primary" onClick={goToGitHub}>
<div class="flex items-center">
<NIcon size="18" class="mr-2">
<LogoGithub />
</NIcon>
GitHub
</div>
</NButton>
</div>
</div>
</NAlert>
</NCard>
)}
<NCard title={$t('t_13_1745833933630')} class="mb-4">
<div class="about-content">
<p class="text-gray-700 leading-relaxed">

View File

@ -65,6 +65,19 @@ export default defineComponent({
return () => (
<div class="webhook-channel-form">
<WebhookForm labelPlacement="top"></WebhookForm>
{/* 模板变量说明 */}
<div class="mt-4 p-4 bg-gray-50 rounded-md">
<div class="font-medium text-gray-700 mb-3 text-xl"></div>
<div class="text-gray-600 space-y-3 text-lg">
<div>
<code class="px-2 py-1 bg-gray-200 rounded text-lg font-mono">__subject__</code>
</div>
<div>
<code class="px-2 py-1 bg-gray-200 rounded text-lg font-mono">__body__</code>
</div>
</div>
</div>
</div>
)
},

View File

@ -0,0 +1,94 @@
import { useForm, useModalHooks } from '@baota/naive-ui/hooks'
import { useError } from '@baota/hooks/error'
import { useWecomChannelFormController } from './useController'
import { useStore } from '@settings/useStore'
import type { ReportWecom, ReportType } from '@/types/setting'
/**
*
*/
export default defineComponent({
name: 'WecomChannelModel',
props: {
data: {
type: Object as PropType<ReportType<ReportWecom> | null>,
default: () => null,
},
},
setup(props: { data: ReportType<ReportWecom> | null }) {
const { handleError } = useError()
const { confirm } = useModalHooks()
const { fetchNotifyChannels } = useStore()
const { config, rules, wecomChannelForm, submitForm } = useWecomChannelFormController()
if (props.data) {
const { name, config } = props.data
wecomChannelForm.value = {
name,
...config,
}
}
// 使用表单hooks
const {
component: WecomForm,
example,
data,
} = useForm({
config,
defaultValue: wecomChannelForm,
rules,
})
// 关联确认按钮
confirm(async (close) => {
try {
const { name, ...other } = data.value
await example.value?.validate()
const res = await submitForm(
{
type: 'workwx',
name: name || '',
config: other,
},
example,
props.data?.id,
)
fetchNotifyChannels()
if (res) close()
} catch (error) {
handleError(error)
}
})
return () => (
<div class="wecom-channel-form">
<WecomForm labelPlacement="top"></WecomForm>
{/* 模板变量说明 */}
<div class="mt-4 p-4 bg-gray-50 rounded-md">
<div class="font-medium text-gray-700 mb-3 text-xl"></div>
<div class="text-gray-600 space-y-3 text-lg">
<div>
<code class="px-2 py-1 bg-gray-200 rounded text-lg font-mono">__subject__</code>
</div>
<div>
<code class="px-2 py-1 bg-gray-200 rounded text-lg font-mono">__body__</code>
</div>
</div>
<div class="mt-4 pt-3 border-t border-gray-200">
<a
href="https://developer.work.weixin.qq.com/document/path/91770"
target="_blank"
class="hover:opacity-80 text-xl"
style="color: #20a50a"
>
📖
</a>
</div>
</div>
</div>
)
},
})

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