mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-08 15:51:11 +08:00
2 lines
13 KiB
JavaScript
2 lines
13 KiB
JavaScript
import{e,s as a,r as l,d as t,aP as r,aQ as i,k as o,y as n,c as s,aI as u,n as d,t as c,m as v,h as g,aR as m,aM as h,b as p,a4 as y,aS as b,B as f,f as C,g as _,o as x,N as k,j as w,i as S,a as A,ar as q}from"./main-DRLjZHMW.js";import{u as T,E as U}from"./index-BWScVlcE.js";import{u as j,b as P,a as N}from"./index-71XuswPx.js";import{g as $,b as z,e as D,f as M}from"./ca-CQXfc1sb.js";import{C as O}from"./ChevronDown-iqNMq6Be.js";import{N as F}from"./Flex-CCAmZEFj.js";import{B as R}from"./index-B-CuL60e.js";const E=e("private-ca-store",()=>{const e=l("root"),a=l([]),t=l({name:"",cn:"",o:"",c:"CN",ou:"",province:"",locality:"",algorithm:"ecdsa",key_length:"256",valid_days:"10",root_id:""}),r=()=>{t.value={name:"",cn:"",o:"",c:"CN",ou:"",province:"",locality:"",algorithm:"ecdsa",key_length:"256",valid_days:"10",root_id:""}};return{createType:e,rootCaList:a,addForm:t,resetAddForm:r,setCreateType:a=>{e.value=a,r()}}}),B=()=>{const e=E();return{...e,...a(e)}},L=t({emits:["success"],setup(e,{emit:a}){const{addForm:t,resetAddForm:C,createType:_,rootCaList:x}=B();r();const k=i(),w=l(),S=l("day"),A=l(!1),{handleSubmit:q}=G(),T=o(()=>{const e={name:[{required:!0,message:"请输入CA名称",trigger:"blur"}],cn:[{required:!0,message:"请输入通用名称",trigger:"blur"}],c:[{required:!0,message:"请选择国家",trigger:"change"}],key_length:[{required:!0,message:"请选择密钥长度",trigger:"change"}],valid_days:[{required:!0,message:"请选择有效期",trigger:"change"}]};return"root"===_.value&&(e.algorithm=[{required:!0,message:"请选择加密算法",trigger:"change"}]),"intermediate"===_.value&&(e.root_id=[{required:!0,message:"请选择父级CA",trigger:"change"}]),e}),U=[{label:"ECDSA",value:"ecdsa"},{label:"RSA",value:"rsa"},{label:"SM2",value:"sm2"}],j=o(()=>{switch(t.value.algorithm){case"ecdsa":return[{label:"P-256 (256 bit)",value:"256"},{label:"P-384 (384 bit)",value:"384"},{label:"P-521 (521 bit)",value:"521"}];case"rsa":return[{label:"2048 bit",value:"2048"},{label:"3072 bit",value:"3072"},{label:"4096 bit",value:"4096"}];case"sm2":return[{label:"SM2 (256 bit)",value:"256"}];default:return[]}}),P=[{label:"中国",value:"CN"},{label:"美国",value:"US"},{label:"日本",value:"JP"},{label:"德国",value:"DE"},{label:"英国",value:"GB"}];n(()=>t.value.algorithm,e=>{t.value.key_length="","ecdsa"===e||"sm2"===e?t.value.key_length="256":"rsa"===e&&(t.value.key_length="2048")}),n(()=>t.value.root_id,e=>{if("intermediate"===_.value&&e){const a=x.value.find(a=>a.id.toString()===e);a&&a.algorithm&&(t.value.algorithm=a.algorithm,"ecdsa"===a.algorithm||"sm2"===a.algorithm?t.value.key_length="256":"rsa"===a.algorithm&&(t.value.key_length="2048"))}});const N=async()=>{var e;try{await(null==(e=w.value)?void 0:e.validate());const a={...t.value};if("year"===S.value&&a.valid_days){const e=parseInt(a.valid_days);isNaN(e)||(a.valid_days=(365*e).toString())}if(await q(a))return C(),k(),!0}catch(a){}return!1},$=()=>{C(),k()};return()=>s(u,{ref:w,model:t.value,rules:T.value,labelPlacement:"left",labelWidth:"auto",requireMarkPlacement:"right-hanging"},{default:()=>[s(d,{label:"CA名称",path:"name",required:!0},{default:()=>[s(c,{value:t.value.name,"onUpdate:value":e=>t.value.name=e,placeholder:"请输入CA名称"},null)]}),s(d,{label:"通用名称(CN)",path:"cn",required:!0},{default:()=>[s(c,{value:t.value.cn,"onUpdate:value":e=>t.value.cn=e,placeholder:"请输入通用名称"},null)]}),"intermediate"===_.value&&s(d,{label:"父级CA",path:"root_id",required:!0},{default:()=>[s(v,{value:t.value.root_id,"onUpdate:value":e=>t.value.root_id=e,options:x.value.map(e=>({label:e.name,value:e.id.toString(),algorithm:e.algorithm,key_length:e.key_length,not_after:e.not_after})),placeholder:"请选择父级CA"},null)]}),s(d,{label:"加密算法",path:"algorithm",required:!0},{default:()=>[s(v,{value:t.value.algorithm,"onUpdate:value":e=>t.value.algorithm=e,options:U,placeholder:"请选择加密算法",disabled:"intermediate"===_.value},null)]}),s(d,{label:"密钥长度",path:"key_length",required:!0},{default:()=>[s(v,{value:t.value.key_length,"onUpdate:value":e=>t.value.key_length=e,options:j.value,placeholder:"请选择密钥长度",disabled:"root"===_.value&&!t.value.algorithm},null)]}),s(d,{label:"有效期",path:"valid_days",required:!0},{default:()=>[s(g,{align:"center"},{default:()=>[s(c,{value:t.value.valid_days,"onUpdate:value":e=>t.value.valid_days=e,placeholder:"请输入数值"},null),s(v,{value:S.value,"onUpdate:value":e=>S.value=e,options:[{label:"天",value:"day"},{label:"年",value:"year"}],style:{width:"80px"}},null)]})]}),s("div",{class:"mt-4 mb-4"},[s("div",{class:"flex items-center justify-center cursor-pointer py-2",onClick:()=>A.value=!A.value},[s(h,null,{default:()=>[s("div",{class:"flex items-center gap-2"},[s("span",{class:"text-[var(--form-more-color)] font-medium"},[p("更多配置")]),s(y,{size:"16",color:"var(--form-more-color)",class:"transition-transform duration-200",style:{transform:A.value?"rotate(180deg)":"rotate(0deg)"}},{default:()=>[s(O,null,null)]})])]})]),m(s("div",{class:"mt-4"},[s(d,{label:"组织(O)"},{default:()=>[s(c,{value:t.value.o,"onUpdate:value":e=>t.value.o=e,placeholder:"请输入组织名称"},null)]}),s(d,{label:"国家(C)",path:"c",required:!0},{default:()=>[s(v,{value:t.value.c,"onUpdate:value":e=>t.value.c=e,options:P,placeholder:"请选择国家"},null)]}),s(d,{label:"组织单位(OU)"},{default:()=>[s(c,{value:t.value.ou,"onUpdate:value":e=>t.value.ou=e,placeholder:"请输入组织单位"},null)]}),s(d,{label:"省份"},{default:()=>[s(c,{value:t.value.province,"onUpdate:value":e=>t.value.province=e,placeholder:"请输入省份"},null)]}),s(d,{label:"城市"},{default:()=>[s(c,{value:t.value.locality,"onUpdate:value":e=>t.value.locality=e,placeholder:"请输入城市"},null)]})]),[[b,A.value]])]),s("div",{class:"flex justify-end gap-3 mt-6"},[s(f,{onClick:$},{default:()=>[p("取消")]}),s(f,{class:"gradient-primary-btn",type:"primary",onClick:N},{default:()=>[p("确定")]})])]})}});const{handleError:I}=j(),V=()=>{const{createType:e,rootCaList:a,addForm:l,resetAddForm:t}=B(),r=C(),i=e=>{const a=(e=>{const a=new Date(e),l=new Date,t=a.getTime()-l.getTime();return Math.ceil(t/864e5)})(e);return a>30?{type:"success",text:"正常"}:a>0?{type:"warning",text:"即将过期"}:0===a?{type:"warning",text:"今天到期"}:{type:"error",text:"已过期"}},{TableComponent:o,PageComponent:n,loading:u,param:d,data:c,fetch:v}=_({config:[{title:"名称",key:"name",width:250,render:e=>s("div",{class:"flex flex-col"},[s("div",null,[e.name]),s("div",{class:"text-xl text-[#969696]"},[e.distinguishedName])])},{title:"类型",key:"type",width:100,render:e=>{const a="root"===e.type?"根CA":"中间CA";return s(k,{size:"small"},"function"==typeof(l=a)||"[object Object]"===Object.prototype.toString.call(l)&&!S(l)?a:{default:()=>[a]});var l}},{title:"算法",key:"algorithm",width:120,render:e=>s("div",{class:"flex flex-col"},[s("div",null,[e.algorithm.toUpperCase()]),s("div",{class:"text-xl text-[#969696]"},[e.keySize,p(" bit")])])},{title:"有效期",key:"validTo",width:200,render:e=>{const a=(e=>{const a=new Date(e),l=new Date,t=a.getTime()-l.getTime();return Math.ceil(t/864e5)})(e.validTo);let l="",t="";return a>0?a<=30?(l=`${a} 天后`,t="text-orange-500"):(l=`${a} 天后`,t="text-[#969696]"):0===a?(l="今天到期",t="text-orange-500"):(l=`已过期 ${Math.abs(a)} 天`,t="text-[var(--n-error-primary-color)]"),s("div",{class:"flex flex-col"},[s("div",null,[e.validTo]),s("div",{class:`text-xl ${t}`},[l])])}},{title:"状态",key:"status",width:100,render:e=>{const a=i(e.validTo);return s(k,{type:a.type,size:"small"},{default:()=>[a.text]})}},{title:"创建时间",key:"createdAt",width:150},{title:"操作",key:"actions",fixed:"right",align:"right",width:200,render:e=>s(F,{justify:"end"},{default:()=>[s(f,{class:"table-action-btn",size:"tiny",strong:!0,secondary:!0,type:"primary",onClick:()=>m(e)},{default:()=>[p("下载")]}),s(f,{class:"table-action-btn-danger",size:"tiny",strong:!0,secondary:!0,type:"error",onClick:()=>h(e)},{default:()=>[p("删除")]})]})}],request:async e=>{const{fetch:a,data:l}=$(e);if(await a(),l.value&&!0===l.value.status&&l.value.data){const e=l.value.data.map(e=>{var a;const l=Math.ceil((new Date(e.not_after).getTime()-(new Date).getTime())/864e5);let t="normal";l<=0&&(t="expired");const r=[];e.cn&&r.push(`CN=${e.cn}`),e.ou&&r.push(`OU=${e.ou}`),e.o&&r.push(`O=${e.o}`),e.locality&&r.push(`L=${e.locality}`),e.province&&r.push(`ST=${e.province}`),e.c&&r.push(`C=${e.c}`);const i=r.join(", ");return{id:e.id.toString(),name:e.name,distinguishedName:i||e.cn,type:e.root_id?"intermediate":"root",algorithm:e.algorithm,keySize:e.key_length.toString(),validFrom:e.not_before,validTo:e.not_after,remainingDays:l,status:t,createdAt:e.create_time,parentId:null==(a=e.root_id)?void 0:a.toString()}});return{list:e,total:l.value.count||e.length}}return{list:[],total:0}},defaultValue:{p:"1",limit:"20",search:""},alias:{page:"p",pageSize:"limit"},watchValue:["p","limit","search"]}),{SearchComponent:g}=T({onSearch:async e=>{d.value.search=e}}),m=e=>{try{const a=document.createElement("a");a.href=`/v1/private_ca/download_cert?id=${e.id.toString()}&type=ca`,a.target="_blank",a.click()}catch(a){I(a)}},h=async e=>{const{open:a,close:l}=P({text:"正在删除CA,请稍后...",zIndex:3e3});N({title:"删除CA",content:`确认要删除CA "${e.name}" 吗?此操作不可恢复。`,onPositiveClick:async()=>{a();try{const{fetch:a,data:l}=z({id:e.id});await a(),l.value&&!0===l.value.status&&(r.success("删除成功"),await v())}catch(t){}finally{l()}}})};return x(()=>v()),{TableComponent:o,PageComponent:n,SearchComponent:g,loading:u,data:c,param:d,openAddModal:async()=>{await(async()=>{var t;try{const{fetch:r,data:i}=$({p:"-1",limit:"-1",level:"root"});await r(),!0===(null==(t=i.value)?void 0:t.status)&&(a.value=i.value.data,"intermediate"===e.value&&a.value.length>0&&a.value[0]&&(l.value.root_id=a.value[0].id.toString(),l.value.algorithm=a.value[0].algorithm,l.value.key_length=a.value[0].key_length.toString()))}catch(r){}})(),w({title:"root"===e.value?"创建根CA":"创建中间CA",area:600,component:()=>s(L,{onSuccess:()=>(v(),t(),!1)},null),footer:!1,onUpdateShow:e=>{e||(v(),t())}})},getRowClassName:e=>{const a=i(e.validTo);return"error"===a.type?"bg-red-500/10":"warning"===a.type?"bg-orange-500/10":""},fetch:v}},G=()=>{const e=C(),{open:a,close:l}=P({text:"正在创建CA,请稍后...",zIndex:3e3}),{createType:t,resetAddForm:r}=B();return{algorithmOptions:[{label:"ECDSA",value:"ecdsa"},{label:"RSA",value:"rsa"},{label:"SM2",value:"sm2"}],getKeyLengthOptions:e=>{switch(e){case"ecdsa":return[{label:"P-256 (256 bit)",value:"256"},{label:"P-384 (384 bit)",value:"384"},{label:"P-521 (521 bit)",value:"521"}];case"rsa":return[{label:"2048 bit",value:"2048"},{label:"3072 bit",value:"3072"},{label:"4096 bit",value:"4096"}];case"sm2":return[{label:"SM2 (256 bit)",value:"256"}];default:return[]}},getValidityOptions:e=>e?[{label:"10年",value:"10"},{label:"15年",value:"15"},{label:"20年",value:"20"}]:[{label:"5天",value:"5"},{label:"10天",value:"10"},{label:"15天",value:"15"},{label:"30天",value:"30"}],countryOptions:[{label:"中国",value:"CN"},{label:"美国",value:"US"},{label:"日本",value:"JP"},{label:"德国",value:"DE"},{label:"英国",value:"GB"}],getValidationRules:()=>{const e={name:[{required:!0,message:"请输入CA名称",trigger:"blur"}],cn:[{required:!0,message:"请输入通用名称",trigger:"blur"}],c:[{required:!0,message:"请选择国家",trigger:"change"}],key_length:[{required:!0,message:"请选择密钥长度",trigger:"change"}],valid_days:[{required:!0,message:"请选择有效期",trigger:"change"}]};return"root"===t.value&&(e.algorithm=[{required:!0,message:"请选择加密算法",trigger:"change"}]),"intermediate"===t.value&&(e.root_id=[{required:!0,message:"请选择父级CA",trigger:"change"}]),e},handleSubmit:async i=>{try{a();let l=["name","cn","c","key_length","valid_days"];"root"===t.value&&l.push("algorithm"),"intermediate"===t.value&&l.push("root_id");const o=l.filter(e=>!i[e]);if(o.length>0)return e.error(`请填写必填字段: ${o.join(", ")}`),!1;const n=await(async e=>{if("root"===t.value){const{root_id:a,...l}=e,{fetch:t,data:r}=D(l);return await t(),r.value}{const{algorithm:a,...l}=e,{fetch:t,data:r}=M(l);return await t(),r.value}})(i);return n.status?(e.success(null==n?void 0:n.message),r(),!0):(e.error(null==n?void 0:n.message),!1)}catch(o){return e.error(o.message||"创建失败"),!1}finally{l()}}}},H={},J=t({name:"PrivateCa",setup(){const{TableComponent:e,PageComponent:a,SearchComponent:l,openAddModal:t,getRowClassName:r}=V(),{setCreateType:i}=B(),o=[{label:"创建根CA",key:"root",onClick:()=>{i("root"),t()}},{label:"创建中间CA",key:"intermediate",onClick:()=>{i("intermediate"),t()}}],n=A(["contentPadding","borderColor","headerHeight","iconColorHover"]);return()=>s("div",{class:`h-full flex flex-col ${H.privateCa}`,style:n.value},[s("div",{class:"mx-auto max-w-[1600px] w-full p-6"},[s(R,null,{headerLeft:()=>s(q,{trigger:"click",options:o,onSelect:e=>{const a=o.find(a=>a.key===e);null==a||a.onClick()},"show-arrow":!1,width:100},{default:()=>[s(f,{type:"primary",size:"large",class:"gradient-primary-btn px-5"},{default:()=>[p("创建CA"),s(y,{size:"20",class:"ml-2"},{default:()=>[s(O,null,null)]})]})]}),headerRight:()=>s(l,{class:"header-search",placeholder:"请输入名称搜索"},null),content:()=>s("div",{class:"rounded-lg"},[s(e,{size:"medium",rowClassName:r},{empty:()=>s(U,{addButtonText:"添加CA",onAddClick:t},null)})]),footerRight:()=>s("div",{class:"mt-4 flex justify-end"},[s(a,null,null)])})])])}});export{J as default};
|