mirror of
https://gitee.com/mirrors/AllinSSL.git
synced 2026-03-09 08:11:10 +08:00
2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
import{d as e,Y as a,Z as t,_ as l,e as r,s as n,r as i,aO as o,aP as s,k as u,x as d,c,aH as v,n as g,q as m,m as h,h as p,aQ as y,aL as b,b as f,a3 as C,aR as x,B as _,f as k,g as w,o as A,N as S,j as q,i as T,a as U,aq as j}from"./main-Dxgnl0V0.js";import{u as P,E as N}from"./index-Dbh6p41n.js";import{u as $,b as z,a as D}from"./index-DScAjbE0.js";import{g as M,b as O,e as F,f as R}from"./ca-DHkhWWC1.js";import{N as B}from"./Flex-CieXADKS.js";import{B as E}from"./index-DYam7-cd.js";const L={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 512 512"},V=e({name:"ChevronDown",render:function(e,r){return t(),a("svg",L,r[0]||(r[0]=[l("path",{fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"48",d:"M112 184l144 144l144-144"},null,-1)]))}}),I=r("private-ca-store",()=>{const e=i("root"),a=i([]),t=i({name:"",cn:"",o:"",c:"CN",ou:"",province:"",locality:"",algorithm:"ecdsa",key_length:"256",valid_days:"10",root_id:""}),l=()=>{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:l,setCreateType:a=>{e.value=a,l()}}}),H=()=>{const e=I();return{...e,...n(e)}},G=e({emits:["success"],setup(e,{emit:a}){const{addForm:t,resetAddForm:l,createType:r,rootCaList:n}=H();o();const k=s(),w=i(),A=i("day"),S=i(!1),{handleSubmit:q}=Q(),T=u(()=>{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"===r.value&&(e.algorithm=[{required:!0,message:"请选择加密算法",trigger:"change"}]),"intermediate"===r.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=u(()=>{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"}];d(()=>t.value.algorithm,e=>{t.value.key_length="","ecdsa"===e||"sm2"===e?t.value.key_length="256":"rsa"===e&&(t.value.key_length="2048")}),d(()=>t.value.root_id,e=>{if("intermediate"===r.value&&e){const a=n.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"===A.value&&a.valid_days){const e=parseInt(a.valid_days);isNaN(e)||(a.valid_days=(365*e).toString())}if(await q(a))return l(),k(),!0}catch(a){}return!1},$=()=>{l(),k()};return()=>c(v,{ref:w,model:t.value,rules:T.value,labelPlacement:"left",labelWidth:"auto",requireMarkPlacement:"right-hanging"},{default:()=>[c(g,{label:"CA名称",path:"name",required:!0},{default:()=>[c(m,{value:t.value.name,"onUpdate:value":e=>t.value.name=e,placeholder:"请输入CA名称"},null)]}),c(g,{label:"通用名称(CN)",path:"cn",required:!0},{default:()=>[c(m,{value:t.value.cn,"onUpdate:value":e=>t.value.cn=e,placeholder:"请输入通用名称"},null)]}),"intermediate"===r.value&&c(g,{label:"父级CA",path:"root_id",required:!0},{default:()=>[c(h,{value:t.value.root_id,"onUpdate:value":e=>t.value.root_id=e,options:n.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)]}),c(g,{label:"加密算法",path:"algorithm",required:!0},{default:()=>[c(h,{value:t.value.algorithm,"onUpdate:value":e=>t.value.algorithm=e,options:U,placeholder:"请选择加密算法",disabled:"intermediate"===r.value},null)]}),c(g,{label:"密钥长度",path:"key_length",required:!0},{default:()=>[c(h,{value:t.value.key_length,"onUpdate:value":e=>t.value.key_length=e,options:j.value,placeholder:"请选择密钥长度",disabled:"root"===r.value&&!t.value.algorithm},null)]}),c(g,{label:"有效期",path:"valid_days",required:!0},{default:()=>[c(p,{align:"center"},{default:()=>[c(m,{value:t.value.valid_days,"onUpdate:value":e=>t.value.valid_days=e,placeholder:"请输入数值"},null),c(h,{value:A.value,"onUpdate:value":e=>A.value=e,options:[{label:"天",value:"day"},{label:"年",value:"year"}],style:{width:"80px"}},null)]})]}),c("div",{class:"mt-4 mb-4"},[c("div",{class:"flex items-center justify-center cursor-pointer py-2",onClick:()=>S.value=!S.value},[c(b,null,{default:()=>[c("div",{class:"flex items-center gap-2"},[c("span",{class:"text-[#18a058] font-medium"},[f("更多配置")]),c(C,{size:"16",color:"#18a058",class:"transition-transform duration-200",style:{transform:S.value?"rotate(180deg)":"rotate(0deg)"}},{default:()=>[c(V,null,null)]})])]})]),y(c("div",{class:"mt-4"},[c(g,{label:"组织(O)"},{default:()=>[c(m,{value:t.value.o,"onUpdate:value":e=>t.value.o=e,placeholder:"请输入组织名称"},null)]}),c(g,{label:"国家(C)",path:"c",required:!0},{default:()=>[c(h,{value:t.value.c,"onUpdate:value":e=>t.value.c=e,options:P,placeholder:"请选择国家"},null)]}),c(g,{label:"组织单位(OU)"},{default:()=>[c(m,{value:t.value.ou,"onUpdate:value":e=>t.value.ou=e,placeholder:"请输入组织单位"},null)]}),c(g,{label:"省份"},{default:()=>[c(m,{value:t.value.province,"onUpdate:value":e=>t.value.province=e,placeholder:"请输入省份"},null)]}),c(g,{label:"城市"},{default:()=>[c(m,{value:t.value.locality,"onUpdate:value":e=>t.value.locality=e,placeholder:"请输入城市"},null)]})]),[[x,S.value]])]),c("div",{class:"flex justify-end gap-3 mt-6"},[c(_,{onClick:$},{default:()=>[f("取消")]}),c(_,{type:"primary",onClick:N},{default:()=>[f("确定")]})])]})}});const{handleError:J}=$(),K=()=>{const{createType:e,rootCaList:a,addForm:t,resetAddForm:l}=H(),r=k(),n=e=>{const a=(e=>{const a=new Date(e),t=new Date,l=a.getTime()-t.getTime();return Math.ceil(l/864e5)})(e);return a>30?{type:"success",text:"正常"}:a>0?{type:"warning",text:"即将过期"}:0===a?{type:"warning",text:"今天到期"}:{type:"error",text:"已过期"}},{TableComponent:i,PageComponent:o,loading:s,param:u,data:d,fetch:v}=w({config:[{title:"名称",key:"name",width:250,render:e=>c("div",{class:"flex flex-col"},[c("div",{class:"text-gray-900"},[e.name]),c("div",{class:"text-xl text-gray-500"},[e.distinguishedName])])},{title:"类型",key:"type",width:100,render:e=>{const a="root"===e.type?"根CA":"中间CA";return c(S,{size:"small"},"function"==typeof(t=a)||"[object Object]"===Object.prototype.toString.call(t)&&!T(t)?a:{default:()=>[a]});var t}},{title:"算法",key:"algorithm",width:120,render:e=>c("div",{class:"flex flex-col"},[c("div",{class:"text-gray-900"},[e.algorithm.toUpperCase()]),c("div",{class:"text-xl text-gray-500"},[e.keySize,f(" bit")])])},{title:"有效期",key:"validTo",width:200,render:e=>{const a=(e=>{const a=new Date(e),t=new Date,l=a.getTime()-t.getTime();return Math.ceil(l/864e5)})(e.validTo);let t="",l="";return a>0?a<=30?(t=`${a} 天后`,l="text-orange-500"):(t=`${a} 天后`,l="text-gray-500"):0===a?(t="今天到期",l="text-orange-500"):(t=`已过期 ${Math.abs(a)} 天`,l="text-red-500"),c("div",{class:"flex flex-col"},[c("div",{class:"text-gray-900"},[e.validTo]),c("div",{class:`text-xl ${l}`},[t])])}},{title:"状态",key:"status",width:100,render:e=>{const a=n(e.validTo);return c(S,{type:a.type,size:"small"},{default:()=>[a.text]})}},{title:"创建时间",key:"createdAt",width:150},{title:"操作",key:"actions",fixed:"right",align:"right",width:200,render:e=>c(B,{justify:"end"},{default:()=>[c(_,{size:"tiny",strong:!0,secondary:!0,type:"primary",onClick:()=>m(e)},{default:()=>[f("下载")]}),c(_,{size:"tiny",strong:!0,secondary:!0,type:"error",onClick:()=>h(e)},{default:()=>[f("删除")]})]})}],request:async e=>{const{fetch:a,data:t}=M(e);if(await a(),t.value&&!0===t.value.status&&t.value.data){const e=t.value.data.map(e=>{var a;const t=Math.ceil((new Date(e.not_after).getTime()-(new Date).getTime())/864e5);let l="normal";t<=0&&(l="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 n=r.join(", ");return{id:e.id.toString(),name:e.name,distinguishedName:n||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:t,status:l,createdAt:e.create_time,parentId:null==(a=e.root_id)?void 0:a.toString()}});return{list:e,total:t.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}=P({onSearch:async e=>{u.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){J(a)}},h=async e=>{const{open:a,close:t}=z({text:"正在删除CA,请稍后...",zIndex:3e3});D({title:"删除CA",content:`确认要删除CA "${e.name}" 吗?此操作不可恢复。`,onPositiveClick:async()=>{a();try{const{fetch:a,data:t}=O({id:e.id});await a(),t.value&&!0===t.value.status&&(r.success("删除成功"),await v())}catch(l){}finally{t()}}})};return A(()=>v()),{TableComponent:i,PageComponent:o,SearchComponent:g,loading:s,data:d,param:u,openAddModal:async()=>{await(async()=>{var l;try{const{fetch:r,data:n}=M({p:"-1",limit:"-1",level:"root"});await r(),!0===(null==(l=n.value)?void 0:l.status)&&(a.value=n.value.data,"intermediate"===e.value&&a.value.length>0&&a.value[0]&&(t.value.root_id=a.value[0].id.toString(),t.value.algorithm=a.value[0].algorithm,t.value.key_length=a.value[0].key_length.toString()))}catch(r){}})(),q({title:"root"===e.value?"创建根CA":"创建中间CA",area:600,component:()=>c(G,{onSuccess:()=>(v(),l(),!1)},null),footer:!1,onUpdateShow:e=>{e||(v(),l())}})},getRowClassName:e=>{const a=n(e.validTo);return"error"===a.type?"bg-red-500/10":"warning"===a.type?"bg-orange-500/10":""},fetch:v}},Q=()=>{const e=k(),{open:a,close:t}=z({text:"正在创建CA,请稍后...",zIndex:3e3}),{createType:l,resetAddForm:r}=H();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"===l.value&&(e.algorithm=[{required:!0,message:"请选择加密算法",trigger:"change"}]),"intermediate"===l.value&&(e.root_id=[{required:!0,message:"请选择父级CA",trigger:"change"}]),e},handleSubmit:async n=>{try{a();let t=["name","cn","c","key_length","valid_days"];"root"===l.value&&t.push("algorithm"),"intermediate"===l.value&&t.push("root_id");const i=t.filter(e=>!n[e]);if(i.length>0)return e.error(`请填写必填字段: ${i.join(", ")}`),!1;const o=await(async e=>{if("root"===l.value){const{root_id:a,...t}=e,{fetch:l,data:r}=F(t);return await l(),r.value}{const{algorithm:a,...t}=e,{fetch:l,data:r}=R(t);return await l(),r.value}})(n);return o.status?(e.success(null==o?void 0:o.message),r(),!0):(e.error(null==o?void 0:o.message),!1)}catch(i){return e.error(i.message||"创建失败"),!1}finally{t()}}}},W={},Y=e({name:"PrivateCa",setup(){const{TableComponent:e,PageComponent:a,SearchComponent:t,openAddModal:l,getRowClassName:r}=K(),{setCreateType:n}=H(),i=[{label:"创建根CA",key:"root",onClick:()=>{n("root"),l()}},{label:"创建中间CA",key:"intermediate",onClick:()=>{n("intermediate"),l()}}],o=U(["contentPadding","borderColor","headerHeight","iconColorHover"]);return()=>c("div",{class:`h-full flex flex-col ${W.privateCa}`,style:o.value},[c("div",{class:"mx-auto max-w-[1600px] w-full p-6"},[c(E,null,{headerLeft:()=>c(j,{trigger:"click",options:i,onSelect:e=>{const a=i.find(a=>a.key===e);null==a||a.onClick()},"show-arrow":!1,width:100},{default:()=>[c(_,{type:"primary",size:"large",class:"px-5"},{default:()=>[f("创建CA"),c(C,{size:"20",class:"ml-2"},{default:()=>[c(V,null,null)]})]})]}),headerRight:()=>c(t,{placeholder:"请输入名称搜索"},null),content:()=>c("div",{class:"rounded-lg"},[c(e,{size:"medium",rowClassName:r},{empty:()=>c(N,{addButtonText:"添加CA",onAddClick:l},null)})]),footerRight:()=>c("div",{class:"mt-4 flex justify-end"},[c(a,null,null)])})])])}});export{Y as default};
|